This is the mail archive of the firstname.lastname@example.org mailing list for the gas2 project.
|Index Nav:||[Date Index] [Subject Index] [Author Index] [Thread Index]|
|Message Nav:||[Date Prev] [Date Next]||[Thread Prev] [Thread Next]|
I was thinking this was a bug in the SCO x86 assembler becuase it worked under GAS for Linux. However, after some prodding form the egcs folks that really know PIC, I'm wondering if this is actually a construct that GAS should produce an error for becuase GCC shouldn't emit it. The problem is that pushl $.LC0@GOTOFF(%ebx) seems to assemble just like pushl $LC0 so it ends up generating an push of an absolute address once the linker gets done with it. Does this sound right at all? Should GAS error on this? Here's a short "hello, world" in PIC to exercise the issue. Thanx, RJL .file "test.c" .section .rodata .LC0: .string "Hello, World\n" .text .align 4 .globl main .type main,@function main: pushl %ebp movl %esp,%ebp pushl %ebx call .L2 .L2: popl %ebx addl $_GLOBAL_OFFSET_TABLE_+[.-.L2],%ebx // This is the aproach that works, and is what GCC should emit. // registers leal .LC0@GOTOFF(%ebx),%eax pushl %eax call printf@PLT // This what GCC does emit, but seems to be nonsensical. // assembler. pushl $.LC0@GOTOFF(%ebx) call printf@PLT movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret .size main,.-main