diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2009-01-10 21:02:48 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2009-01-10 21:02:48 +0000 |
commit | 27d501fdbf0c6932e6170e8dece4d178d912bf94 (patch) | |
tree | 054224e4ebe3ee638fb5b8d28e9873fbcd13c537 /utils/ldd.c | |
parent | 1c778b7cfac9228aa6dbd3c7d3b1417887fc3031 (diff) |
simple optimizations and style fixes in dynamic loading
text data bss dec hex filename
- 16709 240 92 17041 4291 lib/ld-uClibc.so
+ 16634 236 92 16962 4242 lib/ld-uClibc.so
- 4602 344 4 4950 1356 lib/libdl-0.9.30-svn.so
+ 4571 328 4 4903 1327 lib/libdl-0.9.30-svn.so
- 4602 344 4 4950 1356 lib/libdl.so
+ 4571 328 4 4903 1327 lib/libdl.so
Diffstat (limited to 'utils/ldd.c')
-rw-r--r-- | utils/ldd.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/utils/ldd.c b/utils/ldd.c index 17bab2079..289d163b2 100644 --- a/utils/ldd.c +++ b/utils/ldd.c @@ -238,31 +238,27 @@ static char *elf_find_rpath(ElfW(Ehdr) *ehdr, ElfW(Dyn) *dynamic) int check_elf_header(ElfW(Ehdr) *const ehdr) { - if (!ehdr || strncmp((char *)ehdr, ELFMAG, SELFMAG) != 0 || - ehdr->e_ident[EI_CLASS] != ELFCLASSM || - ehdr->e_ident[EI_VERSION] != EV_CURRENT) - { + if (!ehdr || *(uint32_t*)ehdr != ELFMAG_U32 + || ehdr->e_ident[EI_CLASS] != ELFCLASSM + || ehdr->e_ident[EI_VERSION] != EV_CURRENT + ) { return 1; } /* Check if the target endianness matches the host's endianness */ byteswap = 0; #if __BYTE_ORDER == __LITTLE_ENDIAN - if (ehdr->e_ident[5] == ELFDATA2MSB) { - /* Ick -- we will have to byte-swap everything */ + if (ehdr->e_ident[5] == ELFDATA2MSB) byteswap = 1; - } #elif __BYTE_ORDER == __BIG_ENDIAN - if (ehdr->e_ident[5] == ELFDATA2LSB) { - /* Ick -- we will have to byte-swap everything */ + if (ehdr->e_ident[5] == ELFDATA2LSB) byteswap = 1; - } #else #error Unknown host byte order! #endif - /* Be vary lazy, and only byteswap the stuff we use */ - if (byteswap == 1) { + /* Be very lazy, and only byteswap the stuff we use */ + if (byteswap) { ehdr->e_type = bswap_16(ehdr->e_type); ehdr->e_phoff = byteswap_to_host(ehdr->e_phoff); ehdr->e_shoff = byteswap_to_host(ehdr->e_shoff); |