From patchwork Mon Feb 8 12:58:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dodji Seketeli X-Patchwork-Id: 41964 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 174D43938380; Mon, 8 Feb 2021 12:58:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 174D43938380 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1612789136; bh=6g0pT0EVhXW3EIDCMCfVUliX3NLPjPctce5uwv/fqCk=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Help: List-Subscribe:From:Reply-To:From; b=exeqk2aulUPOX1Dg+VvcJvy3n3tRh6SO7DVUfA7SYazqw5tZQkHI/0Kh9OPH9yiT1 rXBsttRAs1U/f5vhaCQ8DpKAvZFxKFNNHr9Vl7IX/99bzaq85E8WonzjPdS7Sg3yEB qtTfyjs0KS5We/1+4WHZySq8vlvTQAAIjU1iOOsI= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 30FFD3938380 for ; Mon, 8 Feb 2021 12:58:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 30FFD3938380 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-533-VXjaZZxMPkO8DvDY2Qxuqw-1; Mon, 08 Feb 2021 07:58:37 -0500 X-MC-Unique: VXjaZZxMPkO8DvDY2Qxuqw-1 Received: by mail-wm1-f72.google.com with SMTP id o18so6315103wmq.2 for ; Mon, 08 Feb 2021 04:58:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:organization:date:message-id :user-agent:mime-version; bh=6g0pT0EVhXW3EIDCMCfVUliX3NLPjPctce5uwv/fqCk=; b=Ugga0+7s1JPFQFHW1hnQD5vsJQaBnO/tNWnLO550CCJGSXWm3JwRj09GcKwQ2NLqWr 8DvPay5exQSQ3Ruv08XWZQbzsF6QlqIQLvQ1wPerm0psu9kq5gKDNuu8F7lsTDC2A/kF XAIqjcLFl2Ec5a36SxxoWJHi8FtnrEhw2MMm8NJBntdmUoM3XZZfqgsC7bss341hr3D/ 2FWzRE+eeXWvWORKxYy8Q4koy1TId8EuBtGGuFzYljfVdDtw8bjfWmtxiuKbJllleeqh GKUQDiIEXLBt5U/vqMxq3RBVDGnc0Cqd+voy5g7ozjLPxQB+mOseua6wMsIOLBS22Y+F lMUA== X-Gm-Message-State: AOAM5310aFbtJJ/tw1lbWXQg2UjG3UD9cKRBDdhSPKukKDGv6OBGzkOt JGVw9/TPRPMzp6/v3B3RJld1xUZ2hQ4IWRpFteEEJuRv+hSXTKTSUnnbGjlyDlLx5oUaFgKCznH 5d34dVeaKJayQ+jZaqrxiRPYFnDhGnUuCghostNcn+KGPij3+ofveII5BVuRaTuSxZ0Ja X-Received: by 2002:a1c:2e04:: with SMTP id u4mr14601110wmu.79.1612789115652; Mon, 08 Feb 2021 04:58:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJzfAJ3S8bH/YjhAYtvpbUR4qDQVeohcvYqbMdWkrrLjoLbMgqjSqRRUTvRBkSvqYhhNHfBuuQ== X-Received: by 2002:a1c:2e04:: with SMTP id u4mr14601057wmu.79.1612789114913; Mon, 08 Feb 2021 04:58:34 -0800 (PST) Received: from localhost ([88.120.130.27]) by smtp.gmail.com with ESMTPSA id l10sm29497576wro.4.2021.02.08.04.58.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Feb 2021 04:58:34 -0800 (PST) Received: by localhost (Postfix, from userid 1001) id 556131A06CE; Mon, 8 Feb 2021 13:58:33 +0100 (CET) To: libabigail@sourceware.org Subject: [PATCH] dwarf-reader: Use DW_FORM_line_strp only if it's present Organization: Red Hat / France X-Operating-System: Red Hat Enterprise Linux Server 7.8 X-URL: http://www.redhat.com Date: Mon, 08 Feb 2021 13:58:33 +0100 Message-ID: <86lfbyhg1y.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Dodji Seketeli via Libabigail From: Dodji Seketeli Reply-To: Dodji Seketeli Errors-To: libabigail-bounces@sourceware.org Sender: "Libabigail" * configure.ac: Define if HAS_DW_FORM_line_strp if the DW_FORM_line_strp enumerator is present. * src/abg-dwarf-reader.cc (form_is_DW_FORM_line_strp): Define new static function. (compare_dies_string_attribute_value): Use it. Signed-off-by: Dodji Seketeli --- configure.ac | 12 ++++++++++++ src/abg-dwarf-reader.cc | 33 +++++++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 37b7882..b9f59c8 100644 --- a/configure.ac +++ b/configure.ac @@ -844,6 +844,7 @@ HAS_DW_FORM_strx1=no HAS_DW_FORM_strx2=no HAS_DW_FORM_strx3=no HAS_DW_FORM_strx4=no +HAS_DW_FORM_line_strp=no AC_CHECK_DECL([DW_FORM_strx1], [HAS_DW_FORM_strx1=yes], @@ -889,6 +890,17 @@ if test x$HAS_DW_FORM_strx4 = xyes; then [Define to 1 if dwarf.h has the DW_FORM_strx4 enumerator]) fi +AC_CHECK_DECL([DW_FORM_line_strp], + [HAS_DW_FORM_line_strp=yes], + [HAS_DW_FORM_line_strp=no], + [[#include ]]) + +if test x$HAS_DW_FORM_line_strp = xyes; then + AC_DEFINE([HAVE_DW_FORM_line_strp], + 1, + [Define to 1 if dwarf.h has the DW_FORM_line_strp enumerator]) +fi + if test x$HAS_DW_FORM_strx1 = xyes -a \ x$HAS_DW_FORM_strx2 = xyes -a \ x$HAS_DW_FORM_strx3 = xyes -a \ diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc index 13c8182..810da2f 100644 --- a/src/abg-dwarf-reader.cc +++ b/src/abg-dwarf-reader.cc @@ -390,6 +390,9 @@ static bool form_is_DW_FORM_strx(unsigned form); static bool +form_is_DW_FORM_line_strp(unsigned form); + +static bool die_address_attribute(Dwarf_Die* die, unsigned attr_name, Dwarf_Addr& result); static string @@ -8310,6 +8313,28 @@ form_is_DW_FORM_strx(unsigned form) return false; } +/// Test if a given DWARF form is DW_FORM_line_strp. +/// +/// Unfortunaly, the DW_FORM_line_strp is an enumerator of an untagged +/// enum in dwarf.h so we have to use an unsigned int for the form, +/// grrr. +/// +/// @param form the form to consider. +/// +/// @return true iff @p form is DW_FORM_line_strp. +static bool +form_is_DW_FORM_line_strp(unsigned form) +{ + if (form) + { +#if defined HAVE_DW_FORM_line_strp + if (form == DW_FORM_line_strp) + return true; +#endif + } + return false; +} + /// Get the value of a DIE attribute; that value is meant to be a /// flag. /// @@ -9415,13 +9440,13 @@ compare_dies_string_attribute_value(const Dwarf_Die *l, const Dwarf_Die *r, || l_attr.form == DW_FORM_string || l_attr.form == DW_FORM_GNU_strp_alt || form_is_DW_FORM_strx(l_attr.form) - || l_attr.form == DW_FORM_line_strp); + || form_is_DW_FORM_line_strp(l_attr.form)); ABG_ASSERT(r_attr.form == DW_FORM_strp || r_attr.form == DW_FORM_string || r_attr.form == DW_FORM_GNU_strp_alt || form_is_DW_FORM_strx(r_attr.form) - || l_attr.form == DW_FORM_line_strp); + || form_is_DW_FORM_line_strp(l_attr.form)); if ((l_attr.form == DW_FORM_strp && r_attr.form == DW_FORM_strp) @@ -9429,8 +9454,8 @@ compare_dies_string_attribute_value(const Dwarf_Die *l, const Dwarf_Die *r, && r_attr.form == DW_FORM_GNU_strp_alt) || (form_is_DW_FORM_strx(l_attr.form) && form_is_DW_FORM_strx(r_attr.form)) - || (l_attr.form == DW_FORM_line_strp - && r_attr.form == DW_FORM_line_strp)) + || (form_is_DW_FORM_line_strp(l_attr.form) + && form_is_DW_FORM_line_strp(r_attr.form))) { // So these string attributes are actually pointers into a // string table. The string table is most likely de-duplicated