Hi Ian, > This patch by Than McIntosh breaks the dependence of go-unwind.c on > unwind-pe.h, by adding the required definitions and code directly to > go-unwind.c. go-unwind.c still depends on the public unwind.h API. > This makes it easier to build libgo separately. Bootstrapped and ran > Go testsuite on x86_64-pc-linux-gnu. Committed to mainline.
I strongly suspect that this patch severely broke Go on Solaris/SPARC: between 20180502 (r259840) and 20180503 (r259897) there appeared tons of new execution failures, both 32 and 64-bit: +FAIL: go.go-torture/execute/printnil.go execution, -O0 +FAIL: go.go-torture/execute/printnil.go execution, -O1 +FAIL: go.go-torture/execute/printnil.go execution, -O2 +FAIL: go.go-torture/execute/printnil.go execution, -O2 -fbounds-check +FAIL: go.go-torture/execute/printnil.go execution, -O2 -fomit-frame-pointer -finline-functions +FAIL: go.go-torture/execute/printnil.go execution, -O2 -fomit-frame-pointer -finline-functions -funroll-loops +FAIL: go.go-torture/execute/printnil.go execution, -O3 -g +FAIL: go.go-torture/execute/printnil.go execution, -Os and many more, also in libgo and gotools tests. One example is printnil.x: Thread 9 received signal SIGSEGV, Segmentation fault. [Switching to Thread 4 (LWP 4)] read_encoded_value (val=<synthetic pointer>, p=0xfebcb953 "", encoding=3 '\003', context=0x0) at /vol/gcc/src/hg/trunk/local/libgo/runtime/go-unwind.c:250 250 decoded = (_Unwind_Internal_Ptr)(*(const void *const *)p); (gdb) where #0 read_encoded_value (val=<synthetic pointer>, p=0xfebcb953 "", encoding=3 '\003', context=0x0) at /vol/gcc/src/hg/trunk/local/libgo/runtime/go-unwind.c:250 #1 __gccgo_personality_v0 (version=<optimized out>, actions=1, exception_class=<optimized out>, ue_header=0x1cc44000, context=0x105810ec) at /vol/gcc/src/hg/trunk/local/libgo/runtime/go-unwind.c:472 #2 0xfefbd450 in _Unwind_RaiseException (exc=0x1cc44000) at /builds2/ulhg/workspace/Solaris_Trunk/Userland/full-build/02b-build-sparc/components/gcc7/gcc-7.3.0/libgcc/unwind.inc:113 #3 0xfe59fb00 in runtime.throwException () at /vol/gcc/src/hg/trunk/local/libgo/runtime/go-unwind.c:124 #4 0xfe9e5a90 in runtime.unwindStack () at /vol/gcc/src/hg/trunk/local/libgo/go/runtime/panic.go:336 #5 runtime.gopanic (e=...) at /vol/gcc/src/hg/trunk/local/libgo/go/runtime/panic.go:527 #6 0xfe5a0758 in runtime_panicstring (s=0xfe3e32d8 "nil pointer dereference") at /vol/gcc/src/hg/trunk/local/libgo/runtime/panic.c:38 #7 0xfe59f65c in __go_runtime_error (i=<optimized out>) at /vol/gcc/src/hg/trunk/local/libgo/runtime/go-runtime-error.c:76 #8 0x000120b4 in main.MyType.String () at /vol/gcc/src/hg/trunk/local/gcc/testsuite/go.go-torture/execute/printnil.go:11 #9 0xfe6efa08 in fmt.pp.handleMethods (p=0x10bf4000, verb=115) at /vol/gcc/src/hg/trunk/local/libgo/go/fmt/print.go:603 #10 0xfe6eebdc in fmt.pp.printArg (p=0x10bf4000, arg=..., verb=115) at /vol/gcc/src/hg/trunk/local/libgo/go/fmt/print.go:686 #11 0xfe6f0d84 in fmt.pp.doPrintf (p=0x10bf4000, format=..., a=...) at /vol/gcc/src/hg/trunk/local/libgo/go/fmt/print.go:1003 #12 0xfe6f1460 in fmt.Sprintf (format=..., a=...) at /vol/gcc/src/hg/trunk/local/libgo/go/fmt/print.go:203 #13 0x000121e0 in main.main () at /vol/gcc/src/hg/trunk/local/gcc/testsuite/go.go-torture/execute/printnil.go:16 Seems like the new code doesn't play well on strict-alignment targets. Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University