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



             Bug #: 55744

           Summary: Use of ebx as output register in inline asm on x86_64

                    PIC mcmodel=medium

    Classification: Unclassified

           Product: gcc

           Version: 4.6.3

            Status: UNCONFIRMED

          Severity: minor

          Priority: P3

         Component: inline-asm

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: jncro...@tysos.org





When compiling the following with gcc for x86_64-elf-linux with -fPIC (or

-fpic) -mcmodel=medium/large the error "inconsistent operand constraints in an

'asm'" occurs.



#include <stdio.h>



int main()

{

    unsigned int a, b;

    a = 42;



    __asm__ ("movl %1, %0" : "=b" (b) : "a" (a));



    printf("Result: %d\n", b);

    return 0;

}





Changing the "=b" to "=c" fixes the problem.  As far as I can see from the

x86_64 ABI then in PIC mode with medium/large code models the r15 register

should be used to store the GOT pointer and rbx has no special meaning (unlike

i386 PIC).  Is there an error in the x86_64 machine description file where rbx

is erroneously identified as being special in PIC mode?  Or does gcc actually

make special use of rbx in this mode?



Regards,

John.

Reply via email to