https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90482
Bug ID: 90482
Summary: [10 regression] Many 32-bit Solaris/SPARC tests FAIL
with SIGBUS
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: go
Assignee: ian at airs dot com
Reporter: ro at gcc dot gnu.org
CC: cmang at google dot com
Target Milestone: ---
Target: sparc*-sun-solaris2.11
Between 20190426 (r270592) and 20190502 (r270801), quite a number of 32-bit
libgo tests started to FAIL on Solaris 11/SPARC:
+FAIL: archive/tar
+FAIL: archive/zip
+FAIL: cmd/go/internal/cache
+FAIL: cmd/go/internal/generate
+FAIL: cmd/go/internal/get
+FAIL: cmd/go/internal/imports
+FAIL: cmd/go/internal/load
+FAIL: cmd/go/internal/modconv
+FAIL: cmd/go/internal/modfetch
+FAIL: cmd/go/internal/modfetch/codehost
+FAIL: cmd/go/internal/modfile
+FAIL: cmd/go/internal/modload
+FAIL: cmd/go/internal/mvs
+FAIL: cmd/go/internal/search
+FAIL: cmd/go/internal/web2
+FAIL: cmd/go/internal/work
+FAIL: crypto/ecdsa
+FAIL: crypto/elliptic
+FAIL: crypto/tls
+FAIL: crypto/x509
+FAIL: encoding/json
+FAIL: go/constant
+FAIL: go/doc
+FAIL: go/importer
+FAIL: go/internal/gccgoimporter
+FAIL: go/internal/gcimporter
+FAIL: go/internal/srcimporter
+FAIL: go/parser
+FAIL: go/types
+FAIL: image/draw
+FAIL: index/suffixarray
+FAIL: internal/x/net/http/httpproxy
+FAIL: io/ioutil
+FAIL: log
+FAIL: mime/multipart
+FAIL: mime/quotedprintable
+FAIL: net/http/fcgi
+FAIL: net/http/httptest
+FAIL: net/http/httputil
+FAIL: reflect
+FAIL: regexp
+FAIL: regexp/syntax
+FAIL: runtime/pprof/internal/profile
A reghunt revealed that this was caused by
The first bad revision is:
changeset: 52654:1c7bcc41ff5f
user: ian@138bc75d-0d04-0410-961f-82ee72b054a4
date: Wed May 01 21:34:16 2019 +0000
summary: compiler,runtime: do more direct interfaces
unexpected fault address 49
fatal error: fault
[signal SIGBUS: bus error code=1 addr=49 pc=4272022460]
goroutine 1 [running, locked to thread]:
runtime.dopanic_m
/var/gcc/reghunt/trunk/libgo/go/runtime/panic.go:1037
runtime.fatalthrow
/var/gcc/reghunt/trunk/libgo/go/runtime/panic.go:906
runtime.throw
/var/gcc/reghunt/trunk/libgo/go/runtime/panic.go:877
runtime.sigpanic
/var/gcc/reghunt/trunk/libgo/go/runtime/signal_unix.go:347
runtime.sighandler
/var/gcc/reghunt/trunk/libgo/go/runtime/signal_sighandler.go:100
runtime.sigtrampgo
/var/gcc/reghunt/trunk/libgo/go/runtime/signal_unix.go:314
__sighndlr
:0
regexp..z2fsyntax.ranges.Less
/var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1868
sort.medianOfThree
/var/gcc/reghunt/trunk/libgo/go/sort/sort.go:76
sort.doPivot
/var/gcc/reghunt/trunk/libgo/go/sort/sort.go:105
sort.quickSort
/var/gcc/reghunt/trunk/libgo/go/sort/sort.go:190
sort.Sort
/var/gcc/reghunt/trunk/libgo/go/sort/sort.go:218
syntax.cleanClass
/var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1631
regexp..z2fsyntax.parser.parseClass
/var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1617
regexp..z2fsyntax.Parse
/var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:774
regexp.compile
/var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:168
regexp.Compile
/var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:131
regexp.MustCompile
/var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:270
cmd..z2fgo..z2finternal..z2fmodfile..import
/var/gcc/reghunt/trunk/libgo/go/cmd/go/internal/modfile/rule.go:157
__go_init_main
/var/gcc/reghunt/libgo32/52654/sparc-sun-solaris2.11/libgo/gotest8213/test/_testmain.go:1
runtime.main
/var/gcc/reghunt/trunk/libgo/go/runtime/proc.go:209
goroutine 4 [syscall]:
goroutine in C code; stack unavailable
created by os..z2fsignal.os..z2fsignal..init0
/var/gcc/reghunt/trunk/libgo/go/os/signal/signal_unix.go:29 +36
/var/gcc/reghunt/trunk/libgo/testsuite/gotest[689]: wait: 8385: Terminated
Keeping gotest8213
FAIL: cmd/go/internal/modload
gdb shows
Thread 2 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1 (LWP 1)]
0xfe97d644 in regexp..z2fsyntax.ranges.Less (ra=..., i=0, j=28)
at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1868
1868 return p[i] < p[j] || p[i] == p[j] && p[i+1] > p[j+1]
(gdb) where
#0 0xfe97d644 in regexp..z2fsyntax.ranges.Less (ra=..., i=0, j=28)
at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1868
#1 0xfea1e3bc in sort.medianOfThree (data=..., m1=0, m0=14, m2=27)
at /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:76
#2 0xfea1e4a8 in sort.doPivot (hi=<optimized out>, lo=0, data=...)
at /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:105
#3 sort.quickSort (data=..., a=0, b=<optimized out>, maxDepth=9)
at /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:190
#4 0xfea1e9c8 in sort.Sort (data=...)
at /var/gcc/reghunt/trunk/libgo/go/sort/sort.go:218
#5 0xfe980408 in syntax.cleanClass (rp=rp@entry=0x710114)
at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1631
#6 0xfe987828 in regexp..z2fsyntax.parser.parseClass (p=p@entry=0x7180c0,
s=...) at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1617
#7 0xfe98a9a4 in regexp..z2fsyntax.Parse (s=..., flags=flags@entry=212)
at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:774
#8 0xfe974140 in regexp.compile (expr=..., mode=mode@entry=212,
longest=longest@entry=false)
at /var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:168
#9 0xfe975184 in regexp.Compile (expr=...)
at /var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:131
#10 0xfe975318 in regexp.MustCompile (str=...)
at /var/gcc/reghunt/trunk/libgo/go/regexp/regexp.go:270
#11 0x00154828 in cmd..z2fgo..z2finternal..z2fmodfile..import ()
at /var/gcc/reghunt/trunk/libgo/go/cmd/go/internal/modfile/rule.go:157
#12 0x000ef9e8 in main.init () at _testmain.go:1
#13 0xfe9e366c in runtime.main (p.0=0x0)
at /var/gcc/reghunt/trunk/libgo/go/runtime/proc.go:209
#14 0xfe9dfe50 in runtime.kickoff ()
at /var/gcc/reghunt/trunk/libgo/go/runtime/proc.go:1205
#15 0xfda8b32c in __makecontext_v2 () from /lib/libc.so.1
However, the signal is wrong due to a gdb bug. truss shows it's a SIGBUS
instead:
/1: Incurred fault #5, FLTACCESS %pc = 0xFE97D644
/1: siginfo: SIGBUS BUS_ADRALN addr=0x00000031
/1: Received signal #10, SIGBUS [caught]
/1: siginfo: SIGBUS BUS_ADRALN addr=0x00000031
#0 0xfe97d644 in regexp..z2fsyntax.ranges.Less (ra=..., i=0, j=28)
at /var/gcc/reghunt/trunk/libgo/go/regexp/syntax/parse.go:1868
1868 return p[i] < p[j] || p[i] == p[j] && p[i+1] > p[j+1]
(gdb) p p
$5 = {__values = 0x31, __count = 57, __capacity = <optimized out>}