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

            Bug ID: 69940
           Summary: gcc.c-torture/execute/alias-3.c FAILs with Solaris/x86
                    as
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ro at gcc dot gnu.org
  Target Milestone: ---
              Host: i386-pc-solaris2.*
            Target: i386-pc-solaris2.*
             Build: i386-pc-solaris2.*

The gcc.c-torture/execute/alias-3.c testcase FAILs on Solaris/x86 with Solaris
as,
both 32 and 64-bit:

FAIL: gcc.c-torture/execute/alias-3.c   -O0  execution test
FAIL: gcc.c-torture/execute/alias-3.c   -O1  execution test
FAIL: gcc.c-torture/execute/alias-3.c   -O2  execution test
FAIL: gcc.c-torture/execute/alias-3.c   -O2 -flto  execution test
FAIL: gcc.c-torture/execute/alias-3.c   -O2 -flto -flto-partition=none 
execution test
FAIL: gcc.c-torture/execute/alias-3.c   -O3 -g  execution test
FAIL: gcc.c-torture/execute/alias-3.c   -Os  execution test

The test aborts like this:

Program received signal SIGABRT, Aborted.
[Switching to Thread 1 (LWP 1)]
0xfe5b8545 in __lwp_sigqueue () from /lib/libc.so.1
(gdb) where
#0  0xfe5b8545 in __lwp_sigqueue () from /lib/libc.so.1
#1  0xfe5b102f in thr_kill () from /lib/libc.so.1
#2  0xfe4f42da in raise () from /lib/libc.so.1
#3  0xfe4c802e in abort () from /lib/libc.so.1
#4  0x08050c06 in main ()
    at
/vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.c-torture/execute/alias-3.c:15

The problem lies with the assembler: when using /bin/as, this code snippet

        .local  a
        .comm   a,4,4
        .globl  b
        .set    b,a

results in the following symbol table entries:

    [3]      0  0x4  OBJT LOCL  D    0 .bss     a
    [7]      0  0x4  OBJT GLOB  D    0 COMMON   b

while gas emits

    [5]      0  0x4  OBJT LOCL  D    0 .bss     a
    [8]      0  0x4  OBJT GLOB  D    0 .bss     b

The as output results in two different variables in the executable:

   [53]  0x8060e54  0x4  OBJT LOCL  D    0 .bss             a
   [71]  0x8060e58  0x4  OBJT GLOB  D    0 .bss             b

while with gas, they alias as expected:

   [53]  0x8060e54  0x4  OBJT LOCL  D    0 .bss             a
   [71]  0x8060e54  0x4  OBJT GLOB  D    0 .bss             b

So far, I haven't found any workaround to avoid this as behaviour.

Solaris/SPARC as doesn't show this problem, btw.

  Rainer

Reply via email to