Cherry, see https://gcc.gnu.org/ml/gcc-testresults/2018-12/msg02241.html https://gcc.gnu.org/ml/gcc-testresults/2018-12/msg02240.html
still shows ~180 test failures on ARM32. Sorry, no access to an ARM32 box until next year. Matthias On 13.12.18 00:27, Ian Lance Taylor wrote: > On Wed, Dec 12, 2018 at 8:10 AM Cherry Zhang <cherr...@google.com> wrote: >> >> Thank you, Matthias! >> >> From the log, essentially all the tests aborted. The only place the new code >> can cause abort on all programs that I can think of is in the runtime >> startup code, probestackmaps, which calls value_size, which aborts due to an >> unhandled case. I haven't been able to try out on an ARM machine, but I >> managed to cross-compile a Go program and visually inspect the exception >> table. The type table's encoding is DW_EH_PE_absptr, which is indeed not >> handled, which will cause abort. >> >> I send https://go-review.googlesource.com/c/gofrontend/+/153857 (also as >> below). Hopefully this will fix the problem. >> >> Thanks, >> Cherry >> >> diff --git a/libgo/runtime/go-unwind.c b/libgo/runtime/go-unwind.c >> index c44755f9..f4bbfb60 100644 >> --- a/libgo/runtime/go-unwind.c >> +++ b/libgo/runtime/go-unwind.c >> @@ -318,6 +318,8 @@ value_size (uint8_t encoding) >> case DW_EH_PE_sdata8: >> case DW_EH_PE_udata8: >> return 8; >> + case DW_EH_PE_absptr: >> + return sizeof(uintptr); >> default: >> break; >> } > > > Thanks. > > Committed to mainline. > > Ian > > > >> On Tue, Dec 11, 2018 at 7:03 PM Matthias Klose <d...@ubuntu.com> wrote: >>> >>> On 11.12.18 22:01, Cherry Zhang wrote: >>>> On Tue, Dec 11, 2018 at 3:51 PM Ian Lance Taylor <i...@golang.org> wrote: >>>> >>>>> On Tue, Dec 11, 2018 at 6:52 AM Matthias Klose <d...@ubuntu.com> wrote: >>>>>> >>>>>> 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 >>>>> >>>>> I committed Cherry's patch to trunk, since it looks reasonable to me. >>>>> Cherry, Matthias, let me know if you figure out why programs are >>>>> failing. >>>>> >>>>> >>>> Thank you. >>>> >>>> I don't know for the moment. I'm trying to find an ARM32 machine so I can >>>> test. >>>> >>>> Matthias, is it convenient for you to share a stack trace for the failing >>>> programs? That would be very helpful. Thanks! >>> >>> I'll do a local build this weekend. For now you find the build log at >>> https://launchpad.net/ubuntu/+source/gcc-snapshot/1:20181210-0ubuntu1/+build/15759748