From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1717AC433EF for ; Fri, 4 Mar 2022 15:44:40 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id A482083CCB; Fri, 4 Mar 2022 16:43:52 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="aH2iapa/"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 33F8083AA9; Fri, 4 Mar 2022 16:43:43 +0100 (CET) Received: from mail-io1-xd33.google.com (mail-io1-xd33.google.com [IPv6:2607:f8b0:4864:20::d33]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id E267F83CBB for ; Fri, 4 Mar 2022 16:43:25 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sjg@chromium.org Received: by mail-io1-xd33.google.com with SMTP id c18so9955292ioc.6 for ; Fri, 04 Mar 2022 07:43:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZsuD+gHYqrQFar4uv3XYW7s3dwh66g2+XmiSBg6Yueg=; b=aH2iapa/3Edqge/L3Wl5z3lGtVJjYgCFHonoiEvoyhak2elvumAwew4OnVJXpS65Ir IIyHgXNBZ0kLchkqfIsR1nWiS1bVB38lt1zoRBGNzJrkpeXhKGup3aYlxbx1u48k1A2u SHGn1VKbbdObBFm772q7w2rtKOX6La4qMOhcM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZsuD+gHYqrQFar4uv3XYW7s3dwh66g2+XmiSBg6Yueg=; b=uHa+odtk7XAEJh4k+MxbF9YaUz24OlUND25rvvjlBYfmiz8tqJO+zAXvmCtwYZF+5D MqnwgonYJ/8/wJcubM93Nt5oRBj+f/RjV2aa7fIAedB/KCwgNWx6hap062tkRub9NOPT C2r7r/0MOriuZoLKm6RZEAWBH4XImcX8xiiqGA169P900Wn9mRwXSRjln9towMl9QYRt yiucH5gAvRR4cE0XdeYMvfm58L6UF6o/ooolxVGHLRVkTloiiQw17N4y0MltJmulLxWy qvrmS32Jg3T+eSl3dajP3W4ypfqVoHdXsVElXlATn5CqixYG23g0T3M0xVTftZfLK3UL qT0g== X-Gm-Message-State: AOAM5326V102D2zAT/yY88ogisE8wZsoIkYPFpoHoJUgL5ECKeklfqc3 3A7AW1pHd0UrGYU2vmWOz8sj8wWHrXm0Dg== X-Google-Smtp-Source: ABdhPJwElimi1E0/zwqubBmJlf143CtSKXM1gvKpwDJ6cEpKVD/99DIa+auwTQWMV9rE9M5QFAf0Ug== X-Received: by 2002:a05:6638:a2f:b0:314:b8b9:1c21 with SMTP id 15-20020a0566380a2f00b00314b8b91c21mr33982892jao.22.1646408604567; Fri, 04 Mar 2022 07:43:24 -0800 (PST) Received: from kiwi.bld.corp.google.com (c-67-190-101-114.hsd1.co.comcast.net. [67.190.101.114]) by smtp.gmail.com with ESMTPSA id h13-20020a5ecb4d000000b006410cd7bf4asm4758814iok.9.2022.03.04.07.43.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Mar 2022 07:43:24 -0800 (PST) From: Simon Glass To: U-Boot Mailing List Cc: Marek Vasut , Masahiro Yamada , Tom Rini , AKASHI Takahiro , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Heinrich Schuchardt , Simon Glass Subject: [PATCH v2 04/13] binman: Expand elf support a little Date: Fri, 4 Mar 2022 08:42:59 -0700 Message-Id: <20220304154308.2547711-5-sjg@chromium.org> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog In-Reply-To: <20220304154308.2547711-1-sjg@chromium.org> References: <20220304154308.2547711-1-sjg@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.5 at phobos.denx.de X-Virus-Status: Clean Allow finding a symbol by its address. Also export the function to get the file offset of a particular address, so it can be used by a script to be added. Signed-off-by: Simon Glass --- (no changes since v1) tools/binman/elf.py | 58 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/tools/binman/elf.py b/tools/binman/elf.py index 5e7d6ae7b9..35971731d0 100644 --- a/tools/binman/elf.py +++ b/tools/binman/elf.py @@ -85,6 +85,57 @@ def GetSymbols(fname, patterns): # Sort dict by address return OrderedDict(sorted(syms.items(), key=lambda x: x[1].address)) +def _GetFileOffset(elf, addr): + """Get the file offset for an address + + Args: + elf (ELFFile): ELF file to check + addr (int): Address to search for + + Returns + int: Offset of that address in the ELF file, or None if not valid + """ + for seg in elf.iter_segments(): + seg_end = seg['p_vaddr'] + seg['p_filesz'] + if seg.header['p_type'] == 'PT_LOAD': + if addr >= seg['p_vaddr'] and addr < seg_end: + return addr - seg['p_vaddr'] + seg['p_offset'] + +def GetFileOffset(fname, addr): + """Get the file offset for an address + + Args: + fname (str): Filename of ELF file to check + addr (int): Address to search for + + Returns + int: Offset of that address in the ELF file, or None if not valid + """ + if not ELF_TOOLS: + raise ValueError('Python elftools package is not available') + with open(fname, 'rb') as fd: + elf = ELFFile(fd) + return _GetFileOffset(elf, addr) + +def GetSymbolFromAddress(fname, addr): + """Get the symbol at a particular address + + Args: + fname (str): Filename of ELF file to check + addr (int): Address to search for + + Returns: + str: Symbol name, or None if no symbol at that address + """ + if not ELF_TOOLS: + raise ValueError('Python elftools package is not available') + with open(fname, 'rb') as fd: + elf = ELFFile(fd) + syms = GetSymbols(fname, None) + for name, sym in syms.items(): + if sym.address == addr: + return name + def GetSymbolFileOffset(fname, patterns): """Get the symbols from an ELF file @@ -97,13 +148,6 @@ def GetSymbolFileOffset(fname, patterns): key: Name of symbol value: Hex value of symbol """ - def _GetFileOffset(elf, addr): - for seg in elf.iter_segments(): - seg_end = seg['p_vaddr'] + seg['p_filesz'] - if seg.header['p_type'] == 'PT_LOAD': - if addr >= seg['p_vaddr'] and addr < seg_end: - return addr - seg['p_vaddr'] + seg['p_offset'] - if not ELF_TOOLS: raise ValueError('Python elftools package is not available') -- 2.35.1.616.g0bdcbb4464-goog