[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.
This commit is contained in:
DJ Delorie 2018-02-09 18:37:15 -05:00
parent 3195833899
commit 6a1ff640dc
2 changed files with 8 additions and 1 deletions

View File

@ -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.

View File

@ -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. */