From patchwork Fri Nov 11 13:21:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Giuliano Procida X-Patchwork-Id: 60405 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 2861F3858C62 for ; Fri, 11 Nov 2022 13:22:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2861F3858C62 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1668172939; bh=coMNzouCB6AuKD4WAUAB0XUsT9TiB/QB0ITNwDBsyc8=; h=Date:In-Reply-To:References:Subject:To:Cc:List-Id: List-Unsubscribe:List-Archive:List-Help:List-Subscribe:From: Reply-To:From; b=EJ7ulscnL916rRrpHa3EJAgulBWhiG79CUGOYEFOCmMTtmJXN1JHZ/zX2wRK+gcse vrajZYO+4XkFUZ2Bsp8hEv//KEaYuBH7M6g7mmBrffOtYG4Dwb7h8M1taMSzUd+tjo AXr2IJZckn6IOGAJsG3YWJzK6LfuAMuW0TUZfJqs= 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 62DB43858D35 for ; Fri, 11 Nov 2022 13:22:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 62DB43858D35 Received: by mail-ed1-x549.google.com with SMTP id v18-20020a056402349200b004622e273bbbso3595235edc.14 for ; Fri, 11 Nov 2022 05:22:14 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=coMNzouCB6AuKD4WAUAB0XUsT9TiB/QB0ITNwDBsyc8=; b=PckRIjnIZk0Is5D/ygkETpA6OaxOPKVatSuKgBNdXZQvZR3y7ISMe8tIp+d1cGz40G wEQhhwDGV4rgLP6YGqUY8xg5iou0gBH66rJExPsmGpEjMwgV4TESeZj/sDMkH/ZrGjIZ o5M8T+WXIgzSkCTLdUgyNDPBGrXCi6gMABO+e4HZxkWlTgInx5Z20vLOJKIviYHzeF7t ALICIB6klPHOhl5kSW/Mwafrzl9G+VUM5mGWRUKQ/TlJME3M1bA07SNHYIygXXQO1D3r 0rPC6X3T/ZfPLJAZ8ZgLfIybzyNmwuXN2KhjuzTjdnAjwSmbxL95/R9h8sScVjbXTPM/ jfqg== X-Gm-Message-State: ANoB5pndo8jCFI4AXVlBEZKHZhHkxrXAUksVlibCJw0hXOOFuzIbnKyX sExUdmvlER6CbBBZR6LKIvFQprRosD0COia3wGt7UfE2kG4x+gT1921tAHejrwIAhN15nexr0G5 6Dmi/gd70hI+61hd5X04hPXl+ecYMZb6gSsRIkhwXJUH1HGmIllHUyoed2hFyBUUTHySFoAs= X-Google-Smtp-Source: AA0mqf6NUNnYT7SNLckc3xrt9t8LwO8hMBSD7Rq79OZxPiM83LAB0YDQNVAqblJg+u+Co60RgOBBhZ4/0scCcw== X-Received: from tef.lon.corp.google.com ([2a00:79e0:d:209:ac00:3bd8:e596:9573]) (user=gprocida job=sendgmr) by 2002:a05:6402:2947:b0:467:5e8a:bce3 with SMTP id ed7-20020a056402294700b004675e8abce3mr1344607edb.334.1668172933025; Fri, 11 Nov 2022 05:22:13 -0800 (PST) Date: Fri, 11 Nov 2022 13:21:51 +0000 In-Reply-To: <20221027140928.1480353-1-gprocida@google.com> Mime-Version: 1.0 References: <20221027140928.1480353-1-gprocida@google.com> X-Mailer: git-send-email 2.38.1.493.g58b659f92b-goog Message-ID: <20221111132151.798754-1-gprocida@google.com> Subject: [PATCH v2] Narrow Linux symbol CRCs to 32 bits To: libabigail@sourceware.org Cc: dodji@seketeli.org, kernel-team@android.com, gprocida@google.com, maennich@google.com, sidnayyar@google.com, vvvvvv@google.com X-Spam-Status: No, score=-21.4 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.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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 Errors-To: libabigail-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libabigail" MODVERSIONS CRCs are 32-bit hashes of strings representing C type elements or typed symbols. The hashes are calculated using a 32-bit CRC, hence the name. The kernel module loading code (implicitly) truncates any provided CRC value to 32 bits before comparing it with anything. When support was added to libabigail, values up to 64 bits wide were supported. This change narrows libabigail's concept of Linux CRC to 32 bits. No tests are affected. * include/abg-ir.h (elf_symbol::elf_symbol): Change CRC type from optional to optional. (elf_symbol::create): Likewise. (elf_symbol::get_crc): Likewise. (elf_symbol::set_crc): Likewise. * src/abg-ir.cc (elf_symbol::priv) Change CRC type from optional to optional. (elf_symbol::priv::priv): Likewise. (elf_symbol::elf_symbol): Likewise. (elf_symbol::create): Likewise. (elf_symbol::get_crc): Likewise. (elf_symbol::set_crc): Likewise. * src/abg-reporter-priv.cc (maybe_report_diff_for_symbol): Change CRC type from optional to optional. * src/abg-symtab-reader.cc (symtab::load_): Change crc_values value type from uint64_t to uint32_t. Signed-off-by: Giuliano Procida --- include/abg-ir.h | 8 ++++---- src/abg-ir.cc | 12 ++++++------ src/abg-reporter-priv.cc | 4 ++-- src/abg-symtab-reader.cc | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/abg-ir.h b/include/abg-ir.h index 4892f0e2..546603f4 100644 --- a/include/abg-ir.h +++ b/include/abg-ir.h @@ -940,7 +940,7 @@ private: const version& ve, visibility vi, bool is_in_ksymtab = false, - const abg_compat::optional& crc = {}, + const abg_compat::optional& crc = {}, const abg_compat::optional& ns = {}, bool is_suppressed = false); @@ -966,7 +966,7 @@ public: const version& ve, visibility vi, bool is_in_ksymtab = false, - const abg_compat::optional& crc = {}, + const abg_compat::optional& crc = {}, const abg_compat::optional& ns = {}, bool is_suppressed = false); @@ -1039,11 +1039,11 @@ public: void set_is_in_ksymtab(bool is_in_ksymtab); - const abg_compat::optional& + const abg_compat::optional& get_crc() const; void - set_crc(const abg_compat::optional& crc); + set_crc(const abg_compat::optional& crc); const abg_compat::optional& get_namespace() const; diff --git a/src/abg-ir.cc b/src/abg-ir.cc index 5193934a..a043a532 100644 --- a/src/abg-ir.cc +++ b/src/abg-ir.cc @@ -1788,7 +1788,7 @@ struct elf_symbol::priv // STT_COMMON definition of that name that has the largest size. bool is_common_; bool is_in_ksymtab_; - abg_compat::optional crc_; + abg_compat::optional crc_; abg_compat::optional namespace_; bool is_suppressed_; elf_symbol_wptr main_symbol_; @@ -1822,7 +1822,7 @@ struct elf_symbol::priv const elf_symbol::version& ve, elf_symbol::visibility vi, bool is_in_ksymtab, - const abg_compat::optional& crc, + const abg_compat::optional& crc, const abg_compat::optional& ns, bool is_suppressed) : env_(e), @@ -1896,7 +1896,7 @@ elf_symbol::elf_symbol(const environment* e, const version& ve, visibility vi, bool is_in_ksymtab, - const abg_compat::optional& crc, + const abg_compat::optional& crc, const abg_compat::optional& ns, bool is_suppressed) : priv_(new priv(e, @@ -1971,7 +1971,7 @@ elf_symbol::create(const environment* e, const version& ve, visibility vi, bool is_in_ksymtab, - const abg_compat::optional& crc, + const abg_compat::optional& crc, const abg_compat::optional& ns, bool is_suppressed) { @@ -2208,7 +2208,7 @@ elf_symbol::set_is_in_ksymtab(bool is_in_ksymtab) /// Getter of the 'crc' property. /// /// @return the CRC (modversions) value for Linux Kernel symbols, if any -const abg_compat::optional& +const abg_compat::optional& elf_symbol::get_crc() const {return priv_->crc_;} @@ -2216,7 +2216,7 @@ elf_symbol::get_crc() const /// /// @param crc the new CRC (modversions) value for Linux Kernel symbols void -elf_symbol::set_crc(const abg_compat::optional& crc) +elf_symbol::set_crc(const abg_compat::optional& crc) {priv_->crc_ = crc;} /// Getter of the 'namespace' property. diff --git a/src/abg-reporter-priv.cc b/src/abg-reporter-priv.cc index 2ecf8016..70839085 100644 --- a/src/abg-reporter-priv.cc +++ b/src/abg-reporter-priv.cc @@ -1149,8 +1149,8 @@ maybe_report_diff_for_symbol(const elf_symbol_sptr& symbol1, << "\n"; } - const abg_compat::optional& crc1 = symbol1->get_crc(); - const abg_compat::optional& crc2 = symbol2->get_crc(); + const abg_compat::optional& crc1 = symbol1->get_crc(); + const abg_compat::optional& crc2 = symbol2->get_crc(); if (crc1 != crc2) { const std::string none = "(none)"; diff --git a/src/abg-symtab-reader.cc b/src/abg-symtab-reader.cc index 606c96a2..8a566f8d 100644 --- a/src/abg-symtab-reader.cc +++ b/src/abg-symtab-reader.cc @@ -265,7 +265,7 @@ symtab::load_(Elf* elf_handle, const bool is_kernel = elf_helpers::is_linux_kernel(elf_handle); std::unordered_set exported_kernel_symbols; - std::unordered_map crc_values; + std::unordered_map crc_values; std::unordered_map namespaces; for (size_t i = 0; i < number_syms; ++i)