From 68e76b668a5db176e2f817db7dd17e93e63cc30b Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Thu, 6 Feb 2020 23:53:41 +0200 Subject: libcamera: ipa_module: Use ElfW() macro for native word size Access the ELF types corresponding to the native word size using the ElfW() macro instead of template types. This is the standard method and simplifies the code. Signed-off-by: Laurent Pinchart Reviewed-by: Kieran Bingham --- src/libcamera/ipa_module.cpp | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) (limited to 'src/libcamera/ipa_module.cpp') diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp index 2c355ea8..de65525b 100644 --- a/src/libcamera/ipa_module.cpp +++ b/src/libcamera/ipa_module.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -94,25 +95,24 @@ int elfVerifyIdent(void *map, size_t soSize) * \return zero or error code, address or nullptr, size of symbol or zero, * respectively */ -template std::tuple elfLoadSymbol(void *map, size_t soSize, const char *symbol) { - ElfHeader *eHdr = elfPointer(map, 0, soSize); + ElfW(Ehdr) *eHdr = elfPointer(map, 0, soSize); if (!eHdr) return std::make_tuple(nullptr, 0); off_t offset = eHdr->e_shoff + eHdr->e_shentsize * eHdr->e_shstrndx; - SecHeader *sHdr = elfPointer(map, offset, soSize); + ElfW(Shdr) *sHdr = elfPointer(map, offset, soSize); if (!sHdr) return std::make_tuple(nullptr, 0); off_t shnameoff = sHdr->sh_offset; /* Locate .dynsym section header. */ - SecHeader *dynsym = nullptr; + ElfW(Shdr) *dynsym = nullptr; for (unsigned int i = 0; i < eHdr->e_shnum; i++) { offset = eHdr->e_shoff + eHdr->e_shentsize * i; - sHdr = elfPointer(map, offset, soSize); + sHdr = elfPointer(map, offset, soSize); if (!sHdr) return std::make_tuple(nullptr, 0); @@ -133,17 +133,17 @@ elfLoadSymbol(void *map, size_t soSize, const char *symbol) } offset = eHdr->e_shoff + eHdr->e_shentsize * dynsym->sh_link; - sHdr = elfPointer(map, offset, soSize); + sHdr = elfPointer(map, offset, soSize); if (!sHdr) return std::make_tuple(nullptr, 0); off_t dynsym_nameoff = sHdr->sh_offset; /* Locate symbol in the .dynsym section. */ - SymHeader *targetSymbol = nullptr; + ElfW(Sym) *targetSymbol = nullptr; unsigned int dynsym_num = dynsym->sh_size / dynsym->sh_entsize; for (unsigned int i = 0; i < dynsym_num; i++) { offset = dynsym->sh_offset + dynsym->sh_entsize * i; - SymHeader *sym = elfPointer(map, offset, soSize); + ElfW(Sym) *sym = elfPointer(map, offset, soSize); if (!sym) return std::make_tuple(nullptr, 0); @@ -169,7 +169,7 @@ elfLoadSymbol(void *map, size_t soSize, const char *symbol) if (targetSymbol->st_shndx >= eHdr->e_shnum) return std::make_tuple(nullptr, 0); offset = eHdr->e_shoff + targetSymbol->st_shndx * eHdr->e_shentsize; - sHdr = elfPointer(map, offset, soSize); + sHdr = elfPointer(map, offset, soSize); if (!sHdr) return std::make_tuple(nullptr, 0); offset = sHdr->sh_offset + (targetSymbol->st_value - sHdr->sh_addr); @@ -310,14 +310,7 @@ int IPAModule::loadIPAModuleInfo() if (ret) goto unmap; - if (sizeof(unsigned long) == 4) - std::tie(data, dataSize) = - elfLoadSymbol - (map, soSize, "ipaModuleInfo"); - else - std::tie(data, dataSize) = - elfLoadSymbol - (map, soSize, "ipaModuleInfo"); + std::tie(data, dataSize) = elfLoadSymbol(map, soSize, "ipaModuleInfo"); if (data && dataSize == sizeof(info_)) memcpy(&info_, data, dataSize); -- cgit v1.2.1