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

--- Comment #4 from rguenther at suse dot de <rguenther at suse dot de> ---
On April 7, 2020 5:09:02 PM GMT+02:00, "gcc-bugzilla at mkarcher dot
dialup.fu-berlin.de" <gcc-bugzi...@gcc.gnu.org> wrote:
>https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94504
>
>--- Comment #3 from Michael Karcher <gcc-bugzilla at mkarcher dot
>dialup.fu-berlin.de> ---
>(In reply to Richard Biener from comment #2)
>> Huh, looking at the assembly & the object file this seems to be fully
>a linker
>> issue who seems to be responsible for building the GOT.  I suggest to
>move
>> this over to sourceware.  Alan?
>
>I'm not so sure about this. I think it might actually be a limitation
>of ELF on
>ppc32:
>
>If I compare the code generated by gcc on ppc32, gcc does output a GOT
>fragment
>in the .got2 section that references all globals that are used in the
>current
>object:
>
>$ objdump -r -j .got2 bla32.o
>
>bla32.o:     file format elf32-powerpc
>
>RELOCATION RECORDS FOR [.got2]:
>OFFSET   TYPE              VALUE
>00000000 R_PPC_ADDR32      fptr
>00000004 R_PPC_ADDR32      x
>
>This section can not be elided, because it is referenced from main:
>
>$ objdump -r -j .text.main bla32.o
>
>bla32.o:     file format elf32-powerpc
>
>RELOCATION RECORDS FOR [.text.main]:
>OFFSET   TYPE              VALUE
>00000022 R_PPC_REL16_HA    .got2+0x00008006
>00000026 R_PPC_REL16_LO    .got2+0x0000800a
>
>The linker has no obvious way to detect which GOT slots are actually
>used
>inside main, because the offset(s) of the slot(s) inside .got2 used by
>main are
>hardcoded inside main.
>
>On the other hand, on ppc64, there is no GOT fragment generated by the
>compiler, but instead the compiler just asks the linker to create a GOT
>slot
>and fill in the necessary information:
>
>$ objdump -r -j .text.main bla64.o
>
>bla64.o:     file format elf64-powerpc
>
>RELOCATION RECORDS FOR [.text.main]:
>OFFSET           TYPE              VALUE
>000000000000000e R_PPC64_TOC16_HA  x
>0000000000000012 R_PPC64_TOC16_LO  x

Ah, I tried with -m32 and a cross to ppc64 which might end up using a different
ABI

Reply via email to