diff options
author | DJ Delorie <dj@redhat.com> | 2018-02-09 18:37:15 -0500 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2018-02-09 18:51:32 -0500 |
commit | 6a1ff640dcec04905d8518983ad6252d38b7a733 (patch) | |
tree | d714d9de09f760254186217ba9c8d8e1d4887597 | |
parent | 31958338998aba1cca8090839a4c4866366d76cf (diff) | |
download | glibc-6a1ff640dcec04905d8518983ad6252d38b7a733.tar.gz glibc-6a1ff640dcec04905d8518983ad6252d38b7a733.tar.xz glibc-6a1ff640dcec04905d8518983ad6252d38b7a733.zip |
[RISC-V] Fix parsing flags in ELF64 files.
When ldconfig reads Elf64 files to determine the ABI, it used the Elf32 type, so read the wrong location, and stored the wrong ABI type in the cache, making the cache useless. This patch uses an Elf64 type for Elf64 objects instead. Note that pre-patch caches might need to be manually removed and regenerated to get the correct ABIs stored. [BZ #22827] * sysdeps/unix/sysv/linux/riscv/readelflib.c (process_elf_file): Use 64-bit ELF type for 64-bit ELF objects.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/riscv/readelflib.c | 3 |
2 files changed, 8 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 2063f7399b..1a0ed9d05e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2018-02-09 DJ Delorie <dj@redhat.com> + + [BZ #22827] + * sysdeps/unix/sysv/linux/riscv/readelflib.c (process_elf_file): Use + 64-bit ELF type for 64-bit ELF objects. + 2018-02-09 Joseph Myers <joseph@codesourcery.com> * math/libm-test-driver.c (snan_tests_arg): New variable. diff --git a/sysdeps/unix/sysv/linux/riscv/readelflib.c b/sysdeps/unix/sysv/linux/riscv/readelflib.c index 6e249ff82f..7e27e0c1d6 100644 --- a/sysdeps/unix/sysv/linux/riscv/readelflib.c +++ b/sysdeps/unix/sysv/linux/riscv/readelflib.c @@ -43,6 +43,7 @@ process_elf_file (const char *file_name, const char *lib, int *flag, { ElfW(Ehdr) *elf_header = (ElfW(Ehdr) *) file_contents; Elf32_Ehdr *elf32_header = (Elf32_Ehdr *) elf_header; + Elf64_Ehdr *elf64_header = (Elf64_Ehdr *) elf_header; int ret; long flags; @@ -59,7 +60,7 @@ process_elf_file (const char *file_name, const char *lib, int *flag, { ret = process_elf64_file (file_name, lib, flag, osversion, soname, file_contents, file_length); - flags = elf32_header->e_flags; + flags = elf64_header->e_flags; } /* RISC-V linkers encode the floating point ABI as part of the ELF headers. */ |