aboutsummaryrefslogtreecommitdiff
path: root/gprofng/src
diff options
context:
space:
mode:
authorXi Ruoyao <xry111@xry111.site>2024-06-30 15:18:21 +0800
committerliuzhensong <liuzhensong@loongson.cn>2024-07-05 12:11:10 +0800
commit1c31db21fe6555e1a9b2a33b95a0125250c517d8 (patch)
treec86134cf912d91bd775324deb17c5a244d0454f1 /gprofng/src
parentfc111d56dd5128d633201ef81f6e5dd5b86c24c1 (diff)
downloadbinutils-1c31db21fe6555e1a9b2a33b95a0125250c517d8.zip
binutils-1c31db21fe6555e1a9b2a33b95a0125250c517d8.tar.gz
binutils-1c31db21fe6555e1a9b2a33b95a0125250c517d8.tar.bz2
LoongArch: Reject R_LARCH_32 from becoming a runtime reloc in ELFCLASS64
We were converting R_LARCH_32 to R_LARCH_RELATIVE for ELFCLASS64: $ cat t.s .data x: .4byte x .4byte 0xdeadbeef $ as/as-new t.s -o t.o $ ld/ld-new -shared t.o $ objdump -R a.out: file format elf64-loongarch DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 00000000000001a8 R_LARCH_RELATIVE *ABS*+0x00000000000001a8 But this is just wrong: at runtime the dynamic linker will run *(uintptr *)&x += load_address, clobbering the next 4 bytes of data ("0xdeadbeef" in the example). If we keep the R_LARCH_32 reloc as-is in ELFCLASS64, it'll be rejected by the Glibc dynamic linker anyway. And it does not make too much sense to modify Glibc to support it. So we can just reject it like x86_64: relocation R_X86_64_32 against `.data' can not be used when making a shared object; recompile with -fPIC or RISC-V: relocation R_RISCV_32 against non-absolute symbol `a local symbol' can not be used in RV64 when making a shared object Signed-off-by: Xi Ruoyao <xry111@xry111.site>
Diffstat (limited to 'gprofng/src')
0 files changed, 0 insertions, 0 deletions