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