On 10.12.18 16:54, Cherry Zhang wrote: > On Mon, Dec 10, 2018 at 1:41 AM Matthias Klose <d...@ubuntu.com> wrote: > >> On 06.12.18 00:09, Ian Lance Taylor wrote: >>> This libgo patch by Cherry Zhang adds support for precise stack >>> scanning to the Go runtime. This uses per-function stack maps stored >>> in the exception tables in the language-specific data area. The >>> compiler needs to generate these stack maps; currently this is only >>> done by a version of LLVM, not by GCC. Each safepoint in a function >>> is associated with a (real or dummy) landing pad, and its "type info" >>> in the exception table is a pointer to the stack map. When a stack is >>> scanned, the stack map is found by the stack unwinding code. >>> >>> For precise stack scan we need to unwind the stack. There are three >> cases: >>> >>> - If a goroutine is scanning its own stack, it can unwind the stack >>> and scan the frames. >>> >>> - If a goroutine is scanning another, stopped, goroutine, it cannot >>> directly unwind the target stack. We handle this by switching >>> (runtime.gogo) to the target g, letting it unwind and scan the stack, >>> and switch back. >>> >>> - If we are scanning a goroutine that is blocked in a syscall, we send >>> a signal to the target goroutine's thread, and let the signal handler >>> unwind and scan the stack. Extra care is needed as this races with >>> enter/exit syscall. >>> >>> Currently this is only implemented on GNU/Linux. >>> >>> Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed >>> to mainline. >> >> this broke the libgo build on ARM32: >> >> ../../../src/libgo/runtime/go-unwind.c: In function >> 'scanstackwithmap_callback': >> ../../../src/libgo/runtime/go-unwind.c:754:18: error: '_URC_NORMAL_STOP' >> undeclared (first use in this function) >> 754 | return _URC_NORMAL_STOP; >> | ^~~~~~~~~~~~~~~~ >> ../../../src/libgo/runtime/go-unwind.c:754:18: note: each undeclared >> identifier >> is reported only once for each function i >> t appears in >> ../../../src/libgo/runtime/go-unwind.c: In function >> 'probestackmaps_callback': >> ../../../src/libgo/runtime/go-unwind.c:802:10: error: '_URC_NORMAL_STOP' >> undeclared (first use in this function) >> 802 | return _URC_NORMAL_STOP; >> | ^~~~~~~~~~~~~~~~ >> ../../../src/libgo/runtime/go-unwind.c:803:1: warning: control reaches end >> of >> non-void function [-Wreturn-type] >> 803 | } >> | ^ >> make[6]: *** [Makefile:1474: runtime/go-unwind.lo] Error 1 >> make[6]: Leaving directory >> '/<<PKGBUILDDIR>>/build/arm-linux-gnueabihf/libgo' >> >> > Hell Matthias, > > Thank you for the report. And sorry about the breakage. Does > https://go-review.googlesource.com/c/gofrontend/+/153417 (or the patch > below) fix ARM32 build? I don't have an ARM32 machine at hand to test.
this fixes the build. currently running the testsuite, almost every test case core dumps on arm-linux-gnueabihf Matthias