Re: PowerPC64 .branch_lt address
authorAlan Modra <amodra@gmail.com>
Sun, 24 Jul 2022 23:55:49 +0000 (09:25 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 25 Jul 2022 00:19:41 +0000 (09:49 +0930)
commit5d471bd907be60e9858b22cdf4fd10ddc0f6ee1a
treecfe0f5a7f41e3ac61ddf48e0dc2edb23382c7e54
parent5d8af25542611afd6f773a45b3c89b2169445014
Re: PowerPC64 .branch_lt address

On seeing PR29369 my suspicion was naturally on a recent powerpc64
change, commit 0ab80031430e.  Without a reproducer, I spent time
wondering what could have gone wrong, and while I doubt this patch
would have fixed the PR, there are some improvements that can be made
to cater for user silliness.

I also noticed that when -z relro -z now sections are created out of
order, with .got before .plt in the section headers but .got is laid
out at a higher address.  That's due to the address expression for
.branch_lt referencing SIZEOF(.got) and so calling init_os (which
creates a bfd section) for .got before the .plt section is created.
Fix that by ignoring SIZEOF in exp_init_os.  Unlike ADDR and LOADADDR
which need to reference section vma and lma respectively, SIZEOF can
and does cope with a missing bfd section by returning zero for its
size, which of course is correct.

PR 29369
* ldlang.c (exp_init_os): Don't create a bfd section for SIZEOF.
* emulparams/elf64ppc.sh (OTHER_RELRO_SECTIONS_2): Revise
.branch_lt address to take into account possible user sections
with alignment larger than 8 bytes.
ld/emulparams/elf64ppc.sh
ld/ldlang.c