aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2018-02-09 18:37:15 -0500
committerDJ Delorie <dj@redhat.com>2018-02-09 18:37:15 -0500
commit6cb1736f3a89ee4a4c11d188790a08769882e4f2 (patch)
treeb4a3a4044bb19807ae409f518d61ee64f248866a
parent2f608557116d2dd9bed835ed3a395f4c9fc4e86f (diff)
downloadglibc-6cb1736f3a89ee4a4c11d188790a08769882e4f2.zip
glibc-6cb1736f3a89ee4a4c11d188790a08769882e4f2.tar.gz
glibc-6cb1736f3a89ee4a4c11d188790a08769882e4f2.tar.bz2
[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. (cherry picked from commit 6a1ff640dcec04905d8518983ad6252d38b7a733)
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/unix/sysv/linux/riscv/readelflib.c3
2 files changed, 8 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index cfe43e3..7be7772 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-07 Igor Gnatenko <ignatenko@redhat.com>
[BZ #22797]
diff --git a/sysdeps/unix/sysv/linux/riscv/readelflib.c b/sysdeps/unix/sysv/linux/riscv/readelflib.c
index 6e249ff..7e27e0c 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. */