xcoff reading dynamic relocs

This adds a sanity check to relocation symbol indices, and tidies code
a little.

The patch does result in a couple of testsuite failures
rs6000-aix7.2  +FAIL: TLS relocations (32-bit)
rs6000-aix7.2  +FAIL: TLS relocations (64-bit)

That seems reasonable to me, because prior to this patch l_symndx was
being set to -1 and -2 for .tdata and .tbss symbols resulting in a
buffer overflow when accessing the syms array.

bfd/
	* xcofflink.c (_bfd_xcoff_canonicalize_dynamic_reloc): Prevent
	symbol array overflow on invalid relocation symbol index.
	Tidy code for relocs against standard sections.
	(xcoff_create_ldrel): Remove cast.
include/
	* coff/xcoff.h (struct internal_ldrel): Make l_symndx uint32_t.
	Make l_rtype and l_rsecnm int16_t.
This commit is contained in:
Alan Modra
2024-12-11 17:02:00 +10:30
parent 2cd1fe3627
commit a21e2f0c20
2 changed files with 20 additions and 27 deletions

View File

@@ -298,13 +298,13 @@ struct internal_ldrel
bfd_vma l_vaddr;
/* The symbol table index in the .loader section symbol table. */
bfd_size_type l_symndx;
uint32_t l_symndx;
/* The relocation type and size. */
short l_rtype;
int16_t l_rtype;
/* The section number this relocation applies to. */
short l_rsecnm;
int16_t l_rsecnm;
};
/* An entry in the XCOFF linker hash table. */