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'