This is the mail archive of the gas2@sourceware.cygnus.com 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 > Which gcc are you using? How did you get gcc to emit that? I only can get my gcc to generate leal .LC0@GOTOFF(%ebx),%eax pushl %eax call printf@PLT I tried egcs 971215, egcs 1.0.1 and gcc 2.8.0 971225. They are all the same. H.J.