From patchwork Tue Jan 11 16:34:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Giuliano Procida X-Patchwork-Id: 49879 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 873F83858431 for ; Tue, 11 Jan 2022 16:34:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 873F83858431 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1641918867; bh=AYVFltKPXFXTyNyQr+CROtH/wuf+zwaD03WT/S4zNKk=; h=Date:In-Reply-To:References:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Help:List-Subscribe:From:Reply-To:Cc:From; b=vXeuzU7iINadwI73vw4LEQDyMW419OT/1yqFWMJXRzxQliS6Evave6GiaMzIqAko+ 6uK5z83RXvPoaI3yuDrW2DcW8Gy1iKS9aZ14XDL2GYpPcSePzW93wEV200H+AQWbQz 8qut38CvEvTJujFxW9QMySEpQL/mj133FD11QtQs= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from mail-ed1-x549.google.com (mail-ed1-x549.google.com [IPv6:2a00:1450:4864:20::549]) by sourceware.org (Postfix) with ESMTPS id 53A75385840C for ; Tue, 11 Jan 2022 16:34:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 53A75385840C Received: by mail-ed1-x549.google.com with SMTP id z9-20020a05640240c900b003fea688a17eso2872370edb.10 for ; Tue, 11 Jan 2022 08:34:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=AYVFltKPXFXTyNyQr+CROtH/wuf+zwaD03WT/S4zNKk=; b=sNf3XpiXd+y4wxF7tFG9GVBdF5LKQEFt1GZvb/jpfJbTeUs8CAXoZ0+ugJzrIiYpBb XlPkDnKuYvC3lLzQne5IbcExpmMQ47XxVegeIvMCJtgJ3KGGPoOUCtYbtkOAUdSlvb/M 78w7grYD+ZtvkBPeJrAYDVMTTk+XfJiA1eZzL4aACBhnOOs7Okjl5Wi8yfIjrBZbo7w3 5ia9DsZcnzk8NmZhgwWVfZlei8pyzK7KrNhXLuJGO8ybXpYi2FTAyoXQEQwji8Z2pwd1 ACcDmWQH4kfihZcLcWr+q4JgATNfHW9d7HEl5fUtf22lBOHwceL3VHF8d1kiGVcr3Nmi Kj2w== X-Gm-Message-State: AOAM533jjNgqg86yG4k84T5Th7GTz0TVtPqs9tmPrH5aFUgd60Rwjfwx mHdtntneUAdV5incLQ6Xx87SRhQ07K6dgqem4j9Ampv2CTs59VUAMwTVlQg8fxh4u3IJ3QiY2WH lonChbWLiNQ/sd4CK7EF/Q69ww2SvGF7odyl5vt4Fs1QDowv44R1kc05k97r7pBO1Tk12VP4= X-Google-Smtp-Source: ABdhPJwyD/sp420hjy67K2f3w4MBhk1kRRxmniflkvdZDUVhUtCAvEIN9TvWq4BlUbzklXuxOKvWJuxgURJIvQ== X-Received: from tef.lon.corp.google.com ([2a00:79e0:d:210:b411:ac04:5f30:7e4e]) (user=gprocida job=sendgmr) by 2002:aa7:da50:: with SMTP id w16mr5171362eds.41.1641918861281; Tue, 11 Jan 2022 08:34:21 -0800 (PST) Date: Tue, 11 Jan 2022 16:34:12 +0000 In-Reply-To: <20220111163412.3012602-1-gprocida@google.com> Message-Id: <20220111163412.3012602-2-gprocida@google.com> Mime-Version: 1.0 References: <20220111163412.3012602-1-gprocida@google.com> X-Mailer: git-send-email 2.34.1.575.g55b058a8bb-goog Subject: [PATCH 1/1] symtab reader: fix up alternative addresses To: libabigail@sourceware.org X-Spam-Status: No, score=-21.3 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-Patchwork-Original-From: Giuliano Procida via Libabigail From: Giuliano Procida Reply-To: Giuliano Procida Cc: maennich@google.com, kernel-team@android.com, mark@klomp.org Errors-To: libabigail-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libabigail" CFI symbols need special interpretation and this work is performed by the add_alternative_address_lookups method. Some symbol addresses need to be "tweaked" to be correctly interpreted and this must also happen in add_alternative_address_lookups. In particular, this commit fixes ARM32 CFI symbol interpretation. * src/abg-symtab-reader.cc (symtab::add_alternative_address_lookups): Tweak function addresses in the same manner as done in symtab::load_. Signed-off-by: Giuliano Procida --- src/abg-symtab-reader.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/abg-symtab-reader.cc b/src/abg-symtab-reader.cc index 0f4d0b65..04e8b23c 100644 --- a/src/abg-symtab-reader.cc +++ b/src/abg-symtab-reader.cc @@ -351,6 +351,7 @@ symtab::load_(Elf* elf_handle, elf_helpers::maybe_adjust_et_rel_sym_addr_to_abs_addr(elf_handle, sym); + // See also symtab::add_alternative_address_lookups. if (symbol_sptr->is_function()) { if (is_arm32) @@ -581,6 +582,9 @@ symtab::update_function_entry_address_symbol_map( void symtab::add_alternative_address_lookups(Elf* elf_handle) { + const bool is_arm32 = elf_helpers::architecture_is_arm32(elf_handle); + const bool is_ppc64 = elf_helpers::architecture_is_ppc64(elf_handle); + Elf_Scn* symtab_section = elf_helpers::find_symtab_section(elf_handle); if (!symtab_section) return; @@ -634,6 +638,19 @@ symtab::add_alternative_address_lookups(Elf* elf_handle) elf_helpers::maybe_adjust_et_rel_sym_addr_to_abs_addr( elf_handle, sym); + // See also symtab::load_. + if (symbol_sptr->is_function()) + { + if (is_arm32) + // Clear bit zero of ARM32 addresses as per "ELF for the Arm + // Architecture" section 5.5.3. + // https://static.docs.arm.com/ihi0044/g/aaelf32.pdf + symbol_value &= ~1; + else if (is_ppc64) + update_function_entry_address_symbol_map(elf_handle, sym, + symbol_sptr); + } + const auto result = addr_symbol_map_.emplace(symbol_value, symbol_sptr); ABG_ASSERT(result.second);