https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90065

            Bug ID: 90065
           Summary: Unaligned accesses on strict-alignment targets
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: d
          Assignee: ibuclaw at gdcproject dot org
          Reporter: ro at gcc dot gnu.org
  Target Milestone: ---
            Target: sparc*-*-*

Created attachment 46153
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46153&action=edit
src/std/math.d alignment hack

I see a couple of tests FAIL due to the same issue on Solaris/SPARC: they die
with SIGBUS due to unaligned access, which is a no-no on strict-alignment
targets.

FAIL: libphobos.phobos_shared/std/math.d execution test

Segmentation fault while running unittests:
----------------
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/runtime.d:492 extern
(C) void core.runtime.runModuleUnitTests().unittestSegvHandler(int,
core.sys.posix.signal.siginfo_t*, void*) [0xffffffff590cd287]
??:? __sighndlr [0xffffffff7eee41bf]
/vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/../src/std/math.d:6178 pure
nothrow @nogc @trusted real std.math.NaN(ulong) [0x10003744c]
/vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/../src/std/math.d:1052
nothrow @nogc @safe void std.math.__unittestL1001_11() [0x100037273]
/var/gcc/gcc-9.0.1-20190408/11.5-gcc-gas-libphobos/sparc-sun-solaris2.11/libphobos/testsuite/libphobos9/<no_file>:1
void std.math.__modtest() [0x1000697c3]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/runtime.d:558
__foreachbody2 [0xffffffff590cd3c7]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/object.d:1599 __lambda2
[0xffffffff590f4a2b]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/minfo.d:777
__foreachbody2 [0xffffffff5910f63f]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/sections_elf_shared.d:69
int rt.sections_elf_shared.DSO.opApply(scope int delegate(ref
rt.sections_elf_shared.DSO)) [0xffffffff5911444f]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/minfo.d:770 int
rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*)))
[0xffffffff5910f527]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/object.d:1598 int
object.ModuleInfo.opApply(scope int delegate(object.ModuleInfo*))
[0xffffffff590f26fb]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/runtime.d:548
runModuleUnitTests [0xffffffff590cd0b3]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/dmain2.d:484 runAll
[0xffffffff5910323b]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/dmain2.d:460 tryExec
[0xffffffff5910317b]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/dmain2.d:493 _d_run_main
[0xffffffff59103073]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/__entrypoint.di:44 main
[0x100069b3f]
??:? _start [0x100032e8b]

truss shows the SIGBUS

    Incurred fault #5, FLTACCESS  %pc = 0x10003734C
      siginfo: SIGBUS BUS_ADRALN addr=0xFFFFFFFF7FFFD942
    Received signal #10, SIGBUS [default]
      siginfo: SIGBUS BUS_ADRALN addr=0xFFFFFFFF7FFFD942

but gdb currently mis-reports it as SIGSEGV (as does the libdruntime signal
handler).

Thread 2 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1 (LWP 1)]
0x000000010003734c in std.math.NaN(ulong) (payload=291)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/../src/std/math.d:6178
6178                    *cast(ulong*)(2+cast(ubyte*)(&x)) = v;
(gdb) where
#0  0x000000010003734c in std.math.NaN(ulong) (payload=291)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/../src/std/math.d:6178
#1  0x0000000100037174 in std.math.__unittestL1001_11() ()
    at /vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/../src/std/math.d:1052
#2  0x00000001000696c4 in std.math.__modtest() () at <no_file>:1
#3  0xffffffff57bcd3c8 in __foreachbody2 (this=0xffffffff7fffdfe8, 
    m=0x1001bfb38 <ModuleInfo for std.gdc.modtest__math>)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/runtime.d:558
#4  0xffffffff57bf4a2c in object.ModuleInfo.__lambda2 (
    this=0xffffffff7fffdf10, 
    m=0x1001bfb38 <ModuleInfo for std.gdc.modtest__math>)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/object.d:1599
#5  0xffffffff57c0f640 in rt.minfo.__foreachbody2 (this=0xffffffff7fffde38, 
    sg=...)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/minfo.d:777
#6  0xffffffff57c14450 in rt.sections_elf_shared.DSO.opApply(scope int(ref
rt.sections_elf_shared.DSO) delegate) (dg=...)
    at
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/sections_elf_shared.d:69
#7  0xffffffff57c0f528 in rt.minfo.moduleinfos_apply(scope
int(immutable(object.ModuleInfo*)) delegate) (dg=...)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/minfo.d:770
#8  0xffffffff57bf26fc in object.ModuleInfo.opApply(scope
int(object.ModuleInfo*) delegate) (dg=...)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/object.d:1598
#9  0xffffffff57bcd0b4 in runModuleUnitTests ()
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/runtime.d:548
#10 0xffffffff57c0323c in runAll (this=0xffffffff7fffe380)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/dmain2.d:484
#11 0xffffffff57c0317c in tryExec (this=0xffffffff7fffe380, dg=...)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/dmain2.d:460
#12 0xffffffff57c03074 in _d_run_main (argc=1, argv=0xffffffff7fffe5c8, 
    mainFunc=0x100069a90 <D main>)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/dmain2.d:493
#13 0x0000000100069a40 in main (argc=1, argv=0xffffffff7fffe5c8)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/__entrypoint.di:44
#14 0x0000000100032d8c in _start ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

0x000000010003734c in std.math.NaN(ulong) (payload=291)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/../src/std/math.d:6178
6178                    *cast(ulong*)(2+cast(ubyte*)(&x)) = v;

I'm hacking around this one in the attached patch, but will only report the
rest.

With the hack in place, this still FAILs, though:

core.exception.AssertError@/vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/../src/std/math.d(1506):
unittest failure
----------------
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/gcc/deh.d:499 _d_throw
[0xffffffff57be6d53]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/exception.d:459
onAssertErrorMsg [0xffffffff57bc9fa3]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/exception.d:476
onUnittestErrorMsg [0xffffffff57bca03f]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/exception.d:654
_d_unittest_msg [0xffffffff57bca5db]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/exception.d:659
_d_unittest [0xffffffff57bca56b]
/vol/gcc/src/hg/trunk/solaris/libphobos/testsuite/../src/std/math.d:1506 void
std.math.__unittestL1499_21() [0x10003b34b]
/var/gcc/gcc-9.0.1-20190408/11.5-gcc-gas-libphobos/sparc-sun-solaris2.11/libphobos/testsuite/<no_file>:1
void std.math.__modtest() [0x100069737]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/runtime.d:558
__foreachbody2 [0xffffffff57bcd3c7]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/object.d:1599 __lambda2
[0xffffffff57bf4a2b]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/minfo.d:777
__foreachbody2 [0xffffffff57c0f63f]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/sections_elf_shared.d:69
int rt.sections_elf_shared.DSO.opApply(scope int delegate(ref
rt.sections_elf_shared.DSO)) [0xffffffff57c1444f]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/minfo.d:770 int
rt.minfo.moduleinfos_apply(scope int delegate(immutable(object.ModuleInfo*)))
[0xffffffff57c0f527]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/object.d:1598 int
object.ModuleInfo.opApply(scope int delegate(object.ModuleInfo*))
[0xffffffff57bf26fb]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/core/runtime.d:548
runModuleUnitTests [0xffffffff57bcd0b3]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/dmain2.d:484 runAll
[0xffffffff57c0323b]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/dmain2.d:460 tryExec
[0xffffffff57c0317b]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/dmain2.d:493 _d_run_main
[0xffffffff57c03073]
/vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/__entrypoint.di:44 main
[0x100069a63]
??:? _start [0x100032d8b]

FAIL: gdc.test/runnable/sdtor.d -g   execution test

    Incurred fault #5, FLTACCESS  %pc = 0x1000D79AC
      siginfo: SIGBUS BUS_ADRALN addr=0x10007C904
    Received signal #10, SIGBUS [default]
      siginfo: SIGBUS BUS_ADRALN addr=0x10007C904

Thread 2 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1 (LWP 1)]
0x00000001000d79ac in _d_newarrayiT (
    ti=0x10007dc10 <initializer for TypeInfo_AS5sdtor2S8>, length=3)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/lifetime.d:991
991             (cast(T*)result.ptr)[0 .. size * length / T.sizeof] =
*cast(T*)init.ptr;
(gdb) where
#0  0x00000001000d79ac in _d_newarrayiT (
    ti=0x10007dc10 <initializer for TypeInfo_AS5sdtor2S8>, length=3)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/lifetime.d:991
#1  0x000000010008729c in sdtor.test8() () at runnable/sdtor.d:201
#2  0x00000001000b6234 in D main () at runnable/sdtor.d:4532

FAIL: gdc.test/runnable/foreach5.d   execution test

    Incurred fault #5, FLTACCESS  %pc = 0x1000701FC
      siginfo: SIGBUS BUS_ADRALN addr=0xFFFFFFFF7FFFE214
    Received signal #10, SIGBUS [default]
      siginfo: SIGBUS BUS_ADRALN addr=0xFFFFFFFF7FFFE214

Thread 2 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1 (LWP 1)]
0x00000001000701fc in foreach5.test14653() () at runnable/foreach5.d:1080
1080        foreach (e; scoped14653!RangeClass14653(1))
(gdb) where
#0  0x00000001000701fc in foreach5.test14653() () at runnable/foreach5.d:1080
#1  0x0000000100070514 in D main () at runnable/foreach5.d:1118

FAIL: gdc.test/runnable/complex.d -shared-libphobos   execution test

    Incurred fault #5, FLTACCESS  %pc = 0xFFFFFFFF56D06108
      siginfo: SIGBUS BUS_ADRALN addr=0xFFFFFFFF56E90CFC
    Received signal #10, SIGBUS [default]
      siginfo: SIGBUS BUS_ADRALN addr=0xFFFFFFFF56E90CFC

Thread 2 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1 (LWP 1)]
0xffffffff56d06108 in _d_newarrayiT (
    ti=0x10013f600 <initializer for TypeInfo_Aq>, length=2)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/lifetime.d:991
991             (cast(T*)result.ptr)[0 .. size * length / T.sizeof] =
*cast(T*)init.ptr;
(gdb) where
#0  0xffffffff56d06108 in _d_newarrayiT (
    ti=0x10013f600 <initializer for TypeInfo_Aq>, length=2)
    at /vol/gcc/src/hg/trunk/solaris/libphobos/libdruntime/rt/lifetime.d:991
#1  0x000000010001dc00 in complex.test8966() () at runnable/complex.d:321
#2  0x000000010001ec94 in D main (args=...) at runnable/complex.d:451

Reply via email to