summaryrefslogtreecommitdiffstats
path: root/backends/riscv_symbol.c
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2018-08-04 20:36:09 +0200
committerMark Wielaard <[email protected]>2018-09-13 14:30:30 +0200
commitba2a7f4fa5f453c2b0a729bf519240a8f66a1867 (patch)
tree6fd2f8cd25f5750e815d7cab22adbd4f5d345e68 /backends/riscv_symbol.c
parentfb0457f4671e7e0f8331453348005ed6beab275e (diff)
backends: Always use elf_getshdrstrndx in check_special_symbol.
The check_special_symbol backend functions used the Ehdr e_shstrndx field to get at the name of sections. This is not correct if there are more than SHN_LORESERVE sections. Always use elf_getshdrstrndx to get the shstrtab section. And drop the Ehdr argument that isn't necessary anymore. Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'backends/riscv_symbol.c')
-rw-r--r--backends/riscv_symbol.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/backends/riscv_symbol.c b/backends/riscv_symbol.c
index dce8e358..866a2d7a 100644
--- a/backends/riscv_symbol.c
+++ b/backends/riscv_symbol.c
@@ -64,13 +64,16 @@ riscv_machine_flag_check (GElf_Word flags)
/* Check whether given symbol's st_value and st_size are OK despite failing
normal checks. */
bool
-riscv_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr, const GElf_Sym *sym,
+riscv_check_special_symbol (Elf *elf, const GElf_Sym *sym,
const char *name, const GElf_Shdr *destshdr)
{
if (name == NULL)
return false;
- const char *sname = elf_strptr (elf, ehdr->e_shstrndx, destshdr->sh_name);
+ size_t shstrndx;
+ if (elf_getshdrstrndx (elf, &shstrndx) != 0)
+ return false;
+ const char *sname = elf_strptr (elf, shstrndx, destshdr->sh_name);
if (sname == NULL)
return false;