[BFD][AARCH64]Disallow R_AARCH64_ABS32(LP64) & R_AARCH64_ABS16 in const section of shared object
Matthias Klose
doko@ubuntu.com
Fri Feb 2 16:45:00 GMT 2018
More information about the Binutils mailing list
Fri Feb 2 16:45:00 GMT 2018
- Previous message (by thread): [PATCH] binutils/riscv: Register names in DWARF output
- Next message (by thread): [BFD][AARCH64]Disallow R_AARCH64_ABS32(LP64) & R_AARCH64_ABS16 in const section of shared object
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
This seems to break kernel builds, and linking systemd against gnu-efi libraries. Now reported in PR22764. Matthias On 18.10.2017 12:40, Renlin Li wrote: > Hi all, > > R_AARCH64_ABS64, R_AARCH64_ABS32 and R_AARCH64_ABS16 are data relocations > supported in AArch64 elf ABI. > > R_AARCH64_ABS64 under LP64 is allowed in shared object and a dynamic relocation > entry > will be generated. This allows the dynamic linker to do further symbol resolution. > > R_AARCH64_ABS32 likewise is allowed in shared object, however under ILP32 abi. > > The original behavior for R_AARCH64_ABS32 under LP64 is that, it's allowed > in shared object and silently resolved at static linking time. > No dynamic relocation entry is generate for it. > > R_AARCH64_ABS16 is allowed in shared object under both L64 and ILP32. > It's resolved at static linking time as well. > > Under LP64, the address should be 64-bit. R_AARCH64_ABS32 relocation indicates > an address that is only sized 32 bits which is not correct in LP64 shared object. > It's useful to error out. > > I have checked glibc dynamic linker code, R_AARCH64_ABS16 is not supported at > all. So > R_AARCH64_ABS16 should be reject in shared object completely. > > > In this patch, R_AARCH64_ABS32 is rejected under LP64 in read-only section of > shared object. > R_AARCH64_ABS16 is rejected in constant section of shared object in both ABI. > > This will sometimes provide useful information for buggy code. > > By the way, glibc aarch64 elf_machine_load_address is using R_AARCH64_ABS32 to > hold an address even in LP64. I had a discussion here sometime ago. The change > here will break the glibc build. This patch will not be committed until glibc > has been fixed. > https://sourceware.org/ml/libc-alpha/2017-10/msg00816.html > > testcases are also added. Binutils regression checked OK. > Linux kernel linked OK with new binutils. OK for trunk? > > > Regards, > Renlin Li > > > ld/ChangeLog: > > 2017-10-18 Renlin Li <renlin.li@arm.com> > >     * testsuite/ld-aarch64/aarch64-elf.exp: Run new test cases. >     * testsuite/ld-aarch64/emit-relocs-258-dyn-bad.d: New. >     * testsuite/ld-aarch64/emit-relocs-258.s: New. >     * testsuite/ld-aarch64/emit-relocs-259-dyn-bad.d: New. >     * testsuite/ld-aarch64/emit-relocs-259.s: New. >     * testsuite/ld-aarch64/gc-relocs-257.s: Put R_AARCH64_ABS32, >     R_AARCH64_ABS16 data into data section. > > bfd/ChangeLog: > > 2017-10-18 Renlin Li <renlin.li@arm.com> > >     * elfnn-aarch64.c (elfNN_aarch64_check_relocs): Disallow >     BFD_RELOC_AARCH64_16 in shared object const section. Disallow >     BFD_RELOC_AARCH64_32 in shared object const section under LP64. > > >
- Previous message (by thread): [PATCH] binutils/riscv: Register names in DWARF output
- Next message (by thread): [BFD][AARCH64]Disallow R_AARCH64_ABS32(LP64) & R_AARCH64_ABS16 in const section of shared object
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list