diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index ead134c5fe307ce913deb7a05169e9c38002149a..323b07cb8c76bad6bac7cc33fd6c5ac4fc0ee34d 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -1d3e0ceee45012a1c3b4ff7f5119a72f90bfcf6a +9be198d960e4bc46e21e4da1e3d4a1619266b8ab The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/go/runtime/traceback_gccgo.go b/libgo/go/runtime/traceback_gccgo.go index b102826f4228fa3be8374fa27e060406159192b6..f61f9a0f2ddd895437a126421b06a6058d8a3590 100644 --- a/libgo/go/runtime/traceback_gccgo.go +++ b/libgo/go/runtime/traceback_gccgo.go @@ -89,6 +89,15 @@ func showframe(name string, gp *g) bool { if g.m.throwing > 0 && gp != nil && (gp == g.m.curg || gp == g.m.caughtsig.ptr()) { return true } + + // Gccgo can trace back through C functions called via cgo. + // We want to print those in the traceback. + // But unless GOTRACEBACK > 1 (checked below), still skip + // internal C functions and cgo-generated functions. + if !contains(name, ".") && !hasprefix(name, "__go_") && !hasprefix(name, "_cgo_") { + return true + } + level, _, _ := gotraceback() // Special case: always show runtime.gopanic frame, so that we can