Commit graph

5 commits

Author SHA1 Message Date
Lulu Cai
06bfdc6e5e LoongArch: Fix loongarch*-elf target ld testsuite failure
The loongarch*-elf target does not support SHARED and PIE, so this
target is skipped for some tests that require these options.
2024-01-04 16:44:20 +08:00
Sam James
b5c37946cc Revert "2.41 Release sources"
This reverts commit 675b9d612c.

See https://sourceware.org/pipermail/binutils/2023-August/128761.html.
2023-08-02 12:06:23 +01:00
Nick Clifton
675b9d612c 2.41 Release sources 2023-08-02 09:23:36 +01:00
mengqinggang
3fa45fb168 LoongArch: ld: Simplify inserting IRELATIVE relocations to .rela.dyn
In LoongArch, the R_LARCH_IRELATIVE relocations for local ifunc symbols are
in .rela.dyn. Before, this is done by loongarch_elf_finish_dynamic_sections.
But this function is called after elf_link_sort_relocs, it need to find a
null slot to insert IRELATIVE relocation.

Now, it is processed by elf_loongarch_output_arch_local_syms before
elf_link_sort_relocs, just need to call loongarch_elf_append_rela to
insert IRELATIVE relocation.

bfd/ChangeLog:

	* elfnn-loongarch.c (elfNN_allocate_local_ifunc_dynrelocs): Return
	type change to int.
	(loongarch_elf_size_dynamic_sections): Delete (void *).
	(loongarch_elf_finish_dynamic_symbol): Use loongarch_elf_append_rela
	insert IRELATIVE relocation to .rela.dyn.
	(elfNN_loongarch_finish_local_dynamic_symbol): Return type change to
	int.
	(loongarch_elf_finish_dynamic_sections): Delete process of local
	ifunc symbols.
	(elf_backend_output_arch_local_syms): New.

ld/ChangeLog:

	* testsuite/ld-loongarch-elf/local-ifunc-reloc.d: Regenerated.
2023-07-24 11:22:42 +08:00
Xi Ruoyao
ae2e4d4035 LoongArch: Fix R_LARCH_IRELATIVE insertion after elf_link_sort_relocs
loongarch_elf_finish_dynamic_symbol is called after elf_link_sort_relocs
if -z combreloc.  elf_link_sort_relocs redistributes the contents of
.rela.* sections those would be merged into .rela.dyn, so the slot for
R_LARCH_IRELATIVE may be out of relplt->contents now.

To make things worse, the boundary check

    dyn < dyn + relplt->size / sizeof (*dyn)

is obviously wrong ("x + 10 < x"? :), causing the issue undetected
during the linking process and the resulted executable suddenly crashes
at runtime.

The issue was found during an attempt to add static-pie support to the
toolchain.

Fix it by iterating through the inputs of .rela.dyn to find the slot.
2022-09-20 17:16:06 +08:00