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:
Michael Tuexen 2024-03-22 14:50:25 +01:00
parent 56b40c285b
commit da2d6e2815

View file

@ -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, "