This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug testsuite/49503] New: Incorrect stack alignment, produced by inline assembler in tests gcc.target/i386/cleanup-1.c and gcc.target/i386/cleanup-2.c


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49503

           Summary: Incorrect stack alignment, produced by inline
                    assembler in tests gcc.target/i386/cleanup-1.c and
                    gcc.target/i386/cleanup-2.c
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: testsuite
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: michael.v.zolotukhin@gmail.com
                CC: michael.v.zolotukhin@gmail.com
              Host: x64
            Target: x64
             Build: 4.7.0 20110619


The tests contain asm-listing like this:
__asm (
      testl  %0, %0
      jnz    1f
      .subsection 1
      .type  _L_mutex_lock_%=, @function
_L_mutex_lock_%=:
1:    leaq   %1, %%rdi
2:    subq   $128, %%rsp
3:    call   bar
4:    addq   $128, %%rsp
5:    jmp    21f
...

As _L_mutex_lock is a function, GCC generates a prologue and epilogue for it -
in prologue stack alignment is performed (according to ABI64, stack should be
aligned to 128-bit).
Before a call, SP is assumed to be a multiple of 16, at function entry, when
return address is pushed to stack, (SP+8) becomes multiple of 16 - GCC uses
these assumptions when generating prologue for stack alignment.
But if JUMP is used instead of CALL, 8-byte displacement doesn't take place,
and stack becomes unaligned - that's violation of ABI.

To fix this error, JUMP should be replaced with CALL, or L_mutex_lock shouldn't
be declared as a function.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]