mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-21 10:19:04 +00:00
rtld: fix check for endianess of elf hints file
Don't check if the elf hints file is in host byte order, but check
if it is in little endian by looking at the magic number.
This fixes rtld on big endian platforms.
Reviewed by: se, kib (prior version of the patch)
Fixes: 7b77d37a56
("rtld-elf: support either byte-order of hints")
MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D44472
This commit is contained in:
parent
56b40c285b
commit
da2d6e2815
|
@ -2081,7 +2081,7 @@ gethints(bool nostdlib)
|
|||
uint32_t strtab; /* Offset of string table in file */
|
||||
uint32_t dirlist; /* Offset of directory list in string table */
|
||||
uint32_t dirlistlen; /* strlen(dirlist) */
|
||||
bool is_le;
|
||||
bool is_le; /* Does the hints file use little endian */
|
||||
bool skip;
|
||||
|
||||
/* First call, read the hints file */
|
||||
|
@ -2108,7 +2108,7 @@ gethints(bool nostdlib)
|
|||
hdr.dirlistlen = 0;
|
||||
return (NULL);
|
||||
}
|
||||
is_le = /*le32toh(1) == 1 || */ hdr.magic == ELFHINTS_MAGIC;
|
||||
is_le = /*htole32(1) == 1 || */ hdr.magic == htole32(ELFHINTS_MAGIC);
|
||||
dbg("host byte-order: %s-endian", le32toh(1) == 1 ? "little" : "big");
|
||||
dbg("hints file byte-order: %s-endian", is_le ? "little" : "big");
|
||||
dbg("verify swap macros: le32toh(0x12345678) == %#010x, "
|
||||
|
|
Loading…
Reference in a new issue