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

Reply via email to