From patchwork Thu Feb 6 21:59:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 2801 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0F7E260864 for ; Thu, 6 Feb 2020 22:59:35 +0100 (CET) Received: from localhost.localdomain (117.145-247-81.adsl-dyn.isp.belgacom.be [81.247.145.117]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 45484B7D; Thu, 6 Feb 2020 22:59:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1581026374; bh=PgBHwA1u4qJmgg0rSFQbJwt/r3AMKXY6bAiSrG4cGOg=; h=From:To:Cc:Subject:Date:From; b=EoIAhwyV0rFJj9xm+s7qLCcDC025MpT/SkCSMiqR4pHg7w6GaFAs8/FWH3kV9p9Gg NMZXHEYueEdYjtE7tSnRdka7iFpDae+gM0lCKoSAYPuhBkwSvjiMpnMeybsoumjmzB JFgUoO9RNJakFleQM1tUmbR4m3Bz0AzCP2OPdqZI= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Thu, 6 Feb 2020 23:59:14 +0200 Message-Id: <20200206215914.25008-1-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.24.1 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH] libcamera: ipa_module: Use ElfW() macro for native word size X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Feb 2020 21:59:35 -0000 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(-) diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp index 2c355ea8b5e5..de65525b8319 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);