From patchwork Wed Nov 1 15:03:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 160567 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:abcd:0:b0:403:3b70:6f57 with SMTP id f13csp485901vqx; Wed, 1 Nov 2023 08:05:19 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEGuTH1zrVt+WrXeYi5Yd+Jge/unCOjGS4pSJFslPq8OML8HnqR/iKFQRMM9VGEDWkvt8NG X-Received: by 2002:a05:6a00:244b:b0:68f:dcc1:4bef with SMTP id d11-20020a056a00244b00b0068fdcc14befmr18820973pfj.7.1698851119172; Wed, 01 Nov 2023 08:05:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698851119; cv=none; d=google.com; s=arc-20160816; b=R5gG1L/p2zmnbwhCdp038rOLLybURBvUAtuWysZyqgs/1c12yD1uq14CTP3BZGFrn7 CYRPdSJLX95YnGy7gPXkVrvU9h50F2qb67yJ/0teV96IpplMmiJCLY/vKeZLH8iaAECd NAhP31tQHbOpmQ0e7zAkGJqNWSExuMdUJC7m+0d34nL/AW75kxoVPw4HJaydJ8BTp3Zk 4ZwPsrGkkvVjLDu2U7dO0kBBVvpF5drNA9tTupEFPNZH+ETWZXKI5JdJR5saEP8o1gY/ ZbIbUCViFnt6oJ37Zr6UpmQv8GjcsogmRsYBhLwJNLFbRqJbpLYkDS9UxUqt6lRZHsMf EMjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=++rAc+zipNsL6YPLqi8fi7+XUltklGXWCct6+sZzGKk=; fh=dBMhXJFA9J4pDfXGrZbkhy+Gp1pVbk3H3l2Zx64V9wM=; b=o7UjD3LgjgYNjoCSJoTz/7lqiKsk8B8lau/bKclb90A99WDnt/qO4xAu2b3RI2qViJ /eG2a4p+GOnfRTQisqYrN3xsXrQAtG3t1+iw+SufZ6OHjiq51/njxmT1WENKKdMGU2dz vHj2abNwsa0SoA82lTon/zRb4l3QICDAk244SOUuECTQxK7U6zm7xTavq4Eve07vbfAr QNODa4zRQDOOxqwCHTw9Wgk4GkDwoZ0IQ7U6K/H7KxqLEEOTzGyBC0ZLCsRi9XzCDioV A9mgiGaklCExKMXr4xzvdOIiCcaJEyVG2QngVYloe79KLZ6Mcj2mk/fj23nLz2QJvslD SdWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="jSetNX/j"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id p17-20020a056a000b5100b0068a590d803csi1869706pfo.361.2023.11.01.08.05.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Nov 2023 08:05:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="jSetNX/j"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id C0CB480C254A; Wed, 1 Nov 2023 08:05:09 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232513AbjKAPE6 (ORCPT + 35 others); Wed, 1 Nov 2023 11:04:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36082 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232437AbjKAPE4 (ORCPT ); Wed, 1 Nov 2023 11:04:56 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2B390FD; Wed, 1 Nov 2023 08:04:54 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 776A1C433CD; Wed, 1 Nov 2023 15:04:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698851093; bh=T11bWBI9YO8ZTft74BUB8/taHx/JC1055+wmzAKgdGI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jSetNX/jH2BNa0lWJSuJnaYZBfiymurs+qWOk5lWteXDlTxsv38TqRr+T7Fb4K/7x MP4yPOU4yr9/mhixWyj0vhxBUi1ly9S/fpTPhJM0M3TmOAQR/W/lXDSer/o0nxbPC1 gbpd2tTQO791y7tiAngRVYUXvjQ5+kZcIcR4WnPGmprrJLZzX5ZpMjBOK6F134AaSN xxzgMZAhCoGaOebkddesidDXGiBo1gpQV8hINS6z+AqkMixcI3rQJ71niMms18Li1C soVRSRB8ZRz/p+423aUyHILsRaool04Y7ASoDPgEx2sjiECdagGo5sDz2xgUXx0SWX uECLz7tTfdbdQ== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Greg Ungerer , Jack Brennen , Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 1/7] modpost: move sym_name() to modpost.h Date: Thu, 2 Nov 2023 00:03:58 +0900 Message-Id: <20231101150404.754108-2-masahiroy@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231101150404.754108-1-masahiroy@kernel.org> References: <20231101150404.754108-1-masahiroy@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-1.6 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Wed, 01 Nov 2023 08:05:09 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781374511466089425 X-GMAIL-MSGID: 1781374511466089425 Move sym_name() to modpost.h so it can be used in other source files. Also, add the 'const' qualifier to the function arguments. Signed-off-by: Masahiro Yamada --- scripts/mod/modpost.c | 8 -------- scripts/mod/modpost.h | 9 +++++++++ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 973b5e5ae2dd..896ecfa8483f 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -710,14 +710,6 @@ static char *get_modinfo(struct elf_info *info, const char *tag) return get_next_modinfo(info, tag, NULL); } -static const char *sym_name(struct elf_info *elf, Elf_Sym *sym) -{ - if (sym) - return elf->strtab + sym->st_name; - else - return "(unknown)"; -} - /* * Check whether the 'string' argument matches one of the 'patterns', * an array of shell wildcard patterns (glob). diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h index 1392afec118c..9834ac44846d 100644 --- a/scripts/mod/modpost.h +++ b/scripts/mod/modpost.h @@ -156,6 +156,15 @@ static inline unsigned int get_secindex(const struct elf_info *info, return index; } +static inline const char *sym_name(const struct elf_info *elf, + const Elf_Sym *sym) +{ + if (sym) + return elf->strtab + sym->st_name; + else + return "(unknown)"; +} + /* * If there's no name there, ignore it; likewise, ignore it if it's * one of the magic symbols emitted used by current tools. From patchwork Wed Nov 1 15:03:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 160566 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:abcd:0:b0:403:3b70:6f57 with SMTP id f13csp485833vqx; Wed, 1 Nov 2023 08:05:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGn37HnWSCM/MIX/6Q6oHRpAfNGKyp8jGVHEY7I89sSvRDU9dPGgpcRnZl8HF328Ltt+rAo X-Received: by 2002:a17:902:f34d:b0:1c9:d0a0:ee88 with SMTP id q13-20020a170902f34d00b001c9d0a0ee88mr11009701ple.62.1698851114945; Wed, 01 Nov 2023 08:05:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698851114; cv=none; d=google.com; s=arc-20160816; b=h0IYmZ0wxixra6249/aow4gwOzX26pdQAUNF/cNeHs2T1tXpNIKarbMbcusoLKb+b7 nzDVcv0UV4/7EoqcUuNIhiCyfmEHMb6LRBzek460HUv2VnoKYYiKnYivsNW8a3h7sX5J shtFleKku6n2w4YH0aocK9h8kZMwcva6vr5GIG6iDv2b6zsoN+BG1EJwDJTqptQOw3ad VqeCdcCciSNPQU5qR0Iv4SISUFjFQvy0Gr9dDOaGHMVb6BrQ2j9ZsbuXv1vActQoy1nc QTKYWHGY+/Vjyf6ESyqh9JIfvHxVzeMNJLcB1CFa82vjzEUAvDaB7VZLtV+11i2MGO9z yySQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=FgCe126TBIY8TzoM6J8oQVNwi8tBpACVacy9vk9Df7c=; fh=dBMhXJFA9J4pDfXGrZbkhy+Gp1pVbk3H3l2Zx64V9wM=; b=I2qAXDHwOlPTlGH2pIRkCm9CfEZHRgWNRkFOxyxBL2gm7Tkt4QKhJUiP+2dDC1xAc6 HPlQxr/wwl/EXLynV9/yyP/dqd0nAvD66U9cKje66K0OMfQIhWdewu/93jM13Rsr7IbT u5r3I8eCtEc2gTsIBYVv7OaXrwTYMwBEFa2yPJ/xYb+uD4C94PDv+falLZdTLO7PcSrs bjSc3HkC5Pke4dDwKNUxmR+2B8YsV/n0oBiJzmEqgJrlNYtZkMWm87FmJNyjFjwXo6OQ FPgZjenwlSktlaw5jEyQl5tQwH25aQ4ly/HQEIhZiLOOTRpcNQqo0uoFk8ZgJR9KTlkM GkTA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=RLJfP929; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id n3-20020a170903110300b001c9d690baa4si3377889plh.532.2023.11.01.08.05.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Nov 2023 08:05:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=RLJfP929; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id A7ED681068C4; Wed, 1 Nov 2023 08:05:02 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232554AbjKAPFB (ORCPT + 35 others); Wed, 1 Nov 2023 11:05:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39944 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232519AbjKAPE6 (ORCPT ); Wed, 1 Nov 2023 11:04:58 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EDBA5DC; Wed, 1 Nov 2023 08:04:55 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3BD3FC433CA; Wed, 1 Nov 2023 15:04:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698851095; bh=wPhcCh2R5mo1LuWpZ6AE/5k4PZ89Ug41tO+Ww2sWSJY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RLJfP929G898YCZnm8fG0Z8UEYoSCW5ezQCzlUFOsxV4VOgx0C7slWecL3/MlxVqa SO64HtipVGBgdtqlfCQzHmxvTZlJZVjsbP/pVy6on0YT6I+hR50kgjnENgg32JEft3 EyQp93H4paPi7/HFZZJvJkwovU6LXOlDR26keTd9cCXTp4xgpJ0/+3GkvlRVXeogWR AtayS6mMN2cLcd3xCVPBNuLOhV7NVCj3TqqVysDMK2v6eF9fGSgU85BrNDOwZZnlaW M5SRDbd/jv2W8sPs0lxt1FH4p6EjkGKgYiYWxcuK9bxyr2zv+wfeRT++/9RDZK2baW QpC9MhPte6TbA== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Greg Ungerer , Jack Brennen , Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 2/7] modpost: add const qualifier to syminfo table Date: Thu, 2 Nov 2023 00:03:59 +0900 Message-Id: <20231101150404.754108-3-masahiroy@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231101150404.754108-1-masahiroy@kernel.org> References: <20231101150404.754108-1-masahiroy@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 01 Nov 2023 08:05:02 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781374506724625236 X-GMAIL-MSGID: 1781374506724625236 symsearch_find_nearest() does not modify the table. Signed-off-by: Masahiro Yamada --- scripts/mod/symsearch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mod/symsearch.c b/scripts/mod/symsearch.c index aa4ed51f9960..00f0f9c354db 100644 --- a/scripts/mod/symsearch.c +++ b/scripts/mod/symsearch.c @@ -156,7 +156,7 @@ Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr, { unsigned int hi = elf->symsearch->table_size; unsigned int lo = 0; - struct syminfo *table = elf->symsearch->table; + const struct syminfo *table = elf->symsearch->table; struct syminfo target; target.addr = addr; From patchwork Wed Nov 1 15:04:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 160568 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:abcd:0:b0:403:3b70:6f57 with SMTP id f13csp485950vqx; Wed, 1 Nov 2023 08:05:22 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGA8Oo+emZUFt1Hk4g2M3Tqa5J919AvzdedNdiNXjg3xDecFcNR+NOsI3E+k8VYmZtMkLSz X-Received: by 2002:a05:6808:7da:b0:3b2:e292:370 with SMTP id f26-20020a05680807da00b003b2e2920370mr17159262oij.38.1698851122494; Wed, 01 Nov 2023 08:05:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698851122; cv=none; d=google.com; s=arc-20160816; b=p0RSEy2ObC3URwcGejBqPFi4r1osmcNjz0NLedFjHi+zcMXMXCozqNnF9HHdCD71DK p9G18hrlOqKUZ80b2leBSYBqgihS/WwY9fWyuVIHZ93HwRub6EGe/MbID4nvJBU2SxNC 5LOqpnHaPtZbByDtO9JlizPSrN+pJCKKRi+t3gXXnWiwk0cDR32K5prJXq82yw8bJfiK RHJtf/nvHsfd0oK5P9dwELSnMYpDQM7LTVE3rGk1MIikRy+XxHWkEoqMPdz0ERaOKRge wFisGX6Eyu9Db7uu1ofm6hXEsLKHyaMpO1vk2tP2RY7/nHDTpfIUxKYFSf+vGkGEE86Q 36cw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=trKkrd5dq827btXd58F9MjNkCvE0nbF2F/JY8dlkWkM=; fh=dBMhXJFA9J4pDfXGrZbkhy+Gp1pVbk3H3l2Zx64V9wM=; b=kr4BDMl5aXWlNCxKRmQgaRN5JuKnzeLcDvOXgx9Ulvmjjk77PfjITG2ny2O+8ZhxE4 pSDGKp4GMJB67AjQA0hwrXpSniomAYXxEbcbaj25Q6cU8BHTcyPyVyZnJgIP7a/DfnCE rngfFmLvzhwGqbEG90KzU/j0esTra7pWiKAOlX5fI86Qw9qRfW3OUdxVuuBWdGGrWncN nC4v1L74GBUimuey4Zi+3ffEN4gw6BBQOCKOrbUny2ntDjsXa/28lZevupZkz3LroDy7 M5UfJZxszhw7CEHoMWYkD0J31so+Y4TOv3gXjGcsTOwQ+qBmcd1MyIQw4C24WkBk2InN F7IQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=AuO9OK1I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id u32-20020a056808152000b003ae5cc01b8bsi593531oiw.78.2023.11.01.08.05.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Nov 2023 08:05:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=AuO9OK1I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 0FEF3811F93C; Wed, 1 Nov 2023 08:05:07 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232602AbjKAPFD (ORCPT + 35 others); Wed, 1 Nov 2023 11:05:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39962 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229596AbjKAPE7 (ORCPT ); Wed, 1 Nov 2023 11:04:59 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BA5B0FD; Wed, 1 Nov 2023 08:04:57 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0D235C433CD; Wed, 1 Nov 2023 15:04:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698851097; bh=/1OKijib/XQjxvI5gIn4dRbp8P97f6PNc9AKR+6aMVs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AuO9OK1ID8Bd+002S6WsnJbMMhFLoi7cqZdQrsyVy8mXE5AgvWBkj6Dyj1PhuwMw7 je1P48CBXUVfbW92u2kikCKXQDZI//lSUmKYLIrDUhi1Ddy9q0cuB3qzX0HAl+08GL GBo21IXYQdGPdAStQCdE16E5M363oGYU49HWpVuPiyEmrvu1hwDQoLJwGL6hZDP33Y q/pOcM1NgdQCmoU7r2dqBWa0+Wq1YD2PteY0XndPa7eCLFY9ttT7fQjt95mtwUFV1I Ui7Evg0rnzgoR3UsjtbtUrT+x0BDZy/vN/Ol+rjXVtYevS5XebUeI5rHwANV5LbS4+ UqG3qqSvTKvgA== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Greg Ungerer , Jack Brennen , Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 3/7] modpost: add table_size local variable to symsearch_find_nearest() Date: Thu, 2 Nov 2023 00:04:00 +0900 Message-Id: <20231101150404.754108-4-masahiroy@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231101150404.754108-1-masahiroy@kernel.org> References: <20231101150404.754108-1-masahiroy@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 01 Nov 2023 08:05:07 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781374514482509725 X-GMAIL-MSGID: 1781374514482509725 Keep consistency with 'table', and make the conditional part slightly shorter. Signed-off-by: Masahiro Yamada --- scripts/mod/symsearch.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/mod/symsearch.c b/scripts/mod/symsearch.c index 00f0f9c354db..97566aee0979 100644 --- a/scripts/mod/symsearch.c +++ b/scripts/mod/symsearch.c @@ -154,9 +154,10 @@ Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr, unsigned int secndx, bool allow_negative, Elf_Addr min_distance) { - unsigned int hi = elf->symsearch->table_size; - unsigned int lo = 0; const struct syminfo *table = elf->symsearch->table; + unsigned int table_size = elf->symsearch->table_size; + unsigned int hi = table_size; + unsigned int lo = 0; struct syminfo target; target.addr = addr; @@ -183,8 +184,7 @@ Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr, */ Elf_Sym *result = NULL; - if (allow_negative && - hi < elf->symsearch->table_size && + if (allow_negative && hi < table_size && table[hi].section_index == secndx && table[hi].addr - addr <= min_distance) { min_distance = table[hi].addr - addr; From patchwork Wed Nov 1 15:04:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 160570 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:abcd:0:b0:403:3b70:6f57 with SMTP id f13csp486115vqx; Wed, 1 Nov 2023 08:05:35 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF5WonUab+idszVhWOBktE+6nbpReha15nX+ZpLe22N5i8snEHAps2bTzLDWQG6/KslX51S X-Received: by 2002:a05:6a21:1509:b0:174:464:9def with SMTP id nq9-20020a056a21150900b0017404649defmr12743320pzb.62.1698851134916; Wed, 01 Nov 2023 08:05:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698851134; cv=none; d=google.com; s=arc-20160816; b=DeUeP3o+HAQVCTOcS/SrkXSClkkFO/Nvna2xWc0yqb7mKIqwNrisJvp3hZQxskwnz6 CHNpKq/flheOhYzS5GCqzgpGYX0fgsfNBo//e24CkmJl5yEEyZAeuqHidFhMfNKq73zc bKwY/J85SktrhdaQ0B66HpXRwE7PbUu7Nnye+78WL0reL8jaAhN+Hy187QIT00RBPFEW w/XI1MwbXOveG7hvXVVsBCNFg2MR/kG2vDsoN9GOmkZ4UTxKQfFGl6hThjTRW4bCehdv YbGP99ELgno7ZYZDk2fvCwVkheAmk10S8l15PffODbsv8vwodVZG4qysW08884jAp4pO oktw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=cxmlDGFj0N4UHQuYP9fFKwseg0bW2GejAjjsZSpewOc=; fh=dBMhXJFA9J4pDfXGrZbkhy+Gp1pVbk3H3l2Zx64V9wM=; b=H52aDzk+IcoJ2u3xMMqQh43VI2RmEARy0Ta0ytaIfK/KOSRpiDDrd33d5TAv+Q+Vtc ycR9dwkh0Jin4cLT65DG36KxqO78rsMp2YD2svNPx/ND59y7QmhKPSWqj7bHg6CPeYrl 5wLQ68jjKd21O2U9FT5P1lnL6cb0Y7Tx05llQ3PLgtIdPpaZXuk72cKNiP4hwgHPt81e 9jjJpVcnebYtLqNl6d7ZTU4KorApQuIt/JZ1x4S0jRl18y9ZZZeMRxlwhHUpjYQr/t3f hl4Z6g0n5QVmmt+5qZLTbI38d2M6gEMjHX+V9I/Gv/Mqu6OutxvEh1akIpspCHUm7i5u 2nYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=kHNj6pS4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id n19-20020a638f13000000b005b9083b81f5si44195pgd.487.2023.11.01.08.05.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Nov 2023 08:05:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=kHNj6pS4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 26D1680CC21B; Wed, 1 Nov 2023 08:05:26 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232910AbjKAPFK (ORCPT + 35 others); Wed, 1 Nov 2023 11:05:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232591AbjKAPFE (ORCPT ); Wed, 1 Nov 2023 11:05:04 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7EE3010C; Wed, 1 Nov 2023 08:04:59 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CA0BCC43215; Wed, 1 Nov 2023 15:04:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698851099; bh=JtLodipaGPF999feXSGnDvTxAtoqNAWxEAUjQUNvakM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kHNj6pS4OyGwkRF8mHZhF+YVeLtrDGwcNAKX1Zwq7SVqBaUinKfojmeq61mmW93ue aVZXMQkUH5pLMuQ5Kaelo4ooNejJ4jksN2d+Eg+0ZScv15cLJtcyrPWqxeTVetNlMF 8UEea089U8sUyU2HgFFoW0N2fkE8oPSB/2a39oBZB+PAJbkaKQ/zAfsGkMOCWaGnBQ qAtFnwgPLInYKcwp/41z8I3GoQIioOh9eMbz337H/zRIWgMInDlVQ94hyP+irQNR3c L69698PAr+M/CkRp15c3q7x50/j2wAwzNnrWPFXHqiqFu1ZymFoUrrj/IQJwbeBQCn zId1tz02kA3sw== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Greg Ungerer , Jack Brennen , Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 4/7] modpost: introduce a filtering feature to symsearch Date: Thu, 2 Nov 2023 00:04:01 +0900 Message-Id: <20231101150404.754108-5-masahiroy@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231101150404.754108-1-masahiroy@kernel.org> References: <20231101150404.754108-1-masahiroy@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-1.6 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Wed, 01 Nov 2023 08:05:26 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781374527444448402 X-GMAIL-MSGID: 1781374527444448402 If adjacent table entries have the same section index and address, symsearch_fixup() modifies the entries so the symbol lookup returns the first symbol entry in the original .symtab section, but it may not be the optimal result. Add the filter() callback for more flexible symbol selection. After the binary search is finished, a linear search begins to determine the best symbol. Typically, the one found in the first iteration is the closest, but the linear search continues as long as it sees another symbol on the same distance. In each iteration, filter() is called to determine if the current symbol should be taken. Here are some useful scenarios: - When multiple entries share the same section index and address, filter() can be used to break a tie. - When there is an unwanted symbol depending on the search context, filter() can return false to skip it. Currently, there is one hard-coded policy: if the target address falls perfectly in the middle of the two neighbors, the lower address is preferred. Let's move this preference to the filter function because it is not directly related to the binary search algorithm. This commit does not introduce any functional change, but more useful filtering policies will be added in subsequent commits. Signed-off-by: Masahiro Yamada --- scripts/mod/symsearch.c | 102 ++++++++++++++++++++++++++++++---------- 1 file changed, 77 insertions(+), 25 deletions(-) diff --git a/scripts/mod/symsearch.c b/scripts/mod/symsearch.c index 97566aee0979..4549c5b0bb81 100644 --- a/scripts/mod/symsearch.c +++ b/scripts/mod/symsearch.c @@ -5,6 +5,8 @@ * to a given address. */ +#include + #include "modpost.h" struct syminfo { @@ -142,17 +144,11 @@ void symsearch_finish(struct elf_info *elf) elf->symsearch = NULL; } -/* - * Find the syminfo which is in secndx and "nearest" to addr. - * allow_negative: allow returning a symbol whose address is > addr. - * min_distance: ignore symbols which are further away than this. - * - * Returns a pointer into the symbol table for success. - * Returns NULL if no legal symbol is found within the requested range. - */ -Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr, - unsigned int secndx, bool allow_negative, - Elf_Addr min_distance) +static Elf_Sym *symsearch_find(struct elf_info *elf, Elf_Addr addr, + unsigned int secndx, bool allow_negative, + Elf_Addr min_distance, + bool (*filter)(const Elf_Sym *, const Elf_Sym *, void *), + void *filter_data) { const struct syminfo *table = elf->symsearch->table; unsigned int table_size = elf->symsearch->table_size; @@ -178,22 +174,78 @@ Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr, * entry in the array which comes before target, including the * case where it perfectly matches the section and the address. * - * Note -- if the address we're looking up falls perfectly - * in the middle of two symbols, this is written to always - * prefer the symbol with the lower address. + * If there are multiple candidates, the filter() callback can be used + * to break a tie. filter() is provided with the current symbol and the + * best one so far. If it returns true, the current one is selected. + * Only a few iterations are expected, hence the linear search is fine. */ - Elf_Sym *result = NULL; + Elf_Addr distance; + Elf_Sym *best = NULL; + Elf_Sym *sym; + int i; - if (allow_negative && hi < table_size && - table[hi].section_index == secndx && - table[hi].addr - addr <= min_distance) { - min_distance = table[hi].addr - addr; - result = &elf->symtab_start[table[hi].symbol_index]; + /* Search to the left. */ + for (i = hi - 1; i >= 0; i--) { + if (table[i].section_index != secndx) + break; + + distance = addr - table[i].addr; + if (distance > min_distance) + break; + + sym = &elf->symtab_start[table[i].symbol_index]; + if (filter(sym, best, filter_data)) { + min_distance = distance; + best = sym; + } } - if (hi > 0 && - table[hi - 1].section_index == secndx && - addr - table[hi - 1].addr <= min_distance) { - result = &elf->symtab_start[table[hi - 1].symbol_index]; + + if (!allow_negative) + return best; + + /* Search to the right if allow_negative is true. */ + for (i = hi; i < table_size; i++) { + if (table[i].section_index != secndx) + break; + + distance = table[i].addr - addr; + if (distance > min_distance) + break; + + sym = &elf->symtab_start[table[i].symbol_index]; + if (filter(sym, best, filter_data)) { + min_distance = distance; + best = sym; + } } - return result; + + return best; +} + +/* Return true if sym1 is preferred over sym2. */ +static bool symsearch_nearest_filter(const Elf_Sym *sym1, const Elf_Sym *sym2, + void *data) +{ + /* If sym2 is NULL, this is the first occurrence, always take it. */ + if (sym2 == NULL) + return true; + + /* Prefer lower address. */ + return sym1->st_value < sym2->st_value; +} + +/* + * Find the syminfo which is in secndx and "nearest" to addr. + * allow_negative: allow returning a symbol whose address is > addr. + * min_distance: ignore symbols which are further away than this. + * + * Returns a pointer into the symbol table for success. + * Returns NULL if no legal symbol is found within the requested range. + */ +Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr, + unsigned int secndx, bool allow_negative, + Elf_Addr min_distance) +{ + return symsearch_find(elf, addr, secndx, allow_negative, min_distance, + symsearch_nearest_filter, NULL); } From patchwork Wed Nov 1 15:04:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 160569 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:abcd:0:b0:403:3b70:6f57 with SMTP id f13csp486055vqx; Wed, 1 Nov 2023 08:05:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFG+WvvF8hAJcUMcW7RNYuxO0N7uuD+Xh0Zy4W2XCmxcW239a28voYMSUEADZsiSTkGAo5t X-Received: by 2002:a17:90a:310:b0:280:b11:f882 with SMTP id 16-20020a17090a031000b002800b11f882mr12784176pje.1.1698851130011; Wed, 01 Nov 2023 08:05:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698851129; cv=none; d=google.com; s=arc-20160816; b=hO+0x68BAzHq4IG9JXdeRmElBDmFxphRY4bYjYFN+zmVgT2XBgSNOXpWN8ym9TSxqR Xobz2UMxJUK+yvllJhgcKjaGH00xj3btURCvjEVgfnKxRrZ7pS2SCDo7pZYQax4S1h32 oeLZHy4GQd9HwgwVM0JyTf0DYufNhkabwoCCfwJzxN8nzD7LnFdnT7nuBqRIXjBxNXBZ GL6si9ZQqSRaSUwywCRtW7Vc9gSRjbLV1/+NfF0WW1pOW+OyjmeuMJ57Zhw5VTrUXuL1 IuPWReN2QRQtR9xDmm+MqTvCv6kuRPtonGZ1fzvo0rZmdQfyqsSOmULi48gvN2E5etyw lnGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=sTG9uLEuzKbWdiuAL2A/6YNAum2SIk0QUDBNB7Hu+Q8=; fh=dBMhXJFA9J4pDfXGrZbkhy+Gp1pVbk3H3l2Zx64V9wM=; b=z7jUF+mex4U1GlvAVLvy0eN81Qoo7/N09ePscGbdoX2QbQbYpC2RLEGiygwnzOOIZj LIXJ+OoBaiqVvTueHfAzzOLpZ0LDFRJR2UUmi7bxh69cBm78A9ThTy3QfW5PRRYEkJEG uk+TjF4plkMktfJrAwfEWYQFSNz43zT8vTSnm/cxGzEWhXAc/Lrmtg8+adrYTOgrCUGH g7/v8xhe+5Fe2JMwkyiWjFdjTz5L1+PH+4iXVjJ/yJfI5svcsvwf3NSxKWy1yLOzGxTF pRjgXZgAuQKUfY/+pa4qua0n/zYx8VZUQmx2s3n4MNq54gkOvPcEYFT80pjmTBXPIFSA GPQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ugFZRDlt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id x23-20020a17090ab01700b002802c0c4cdasi970437pjq.181.2023.11.01.08.05.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Nov 2023 08:05:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ugFZRDlt; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 9908B8129ADB; Wed, 1 Nov 2023 08:05:10 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232819AbjKAPFH (ORCPT + 35 others); Wed, 1 Nov 2023 11:05:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39986 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232649AbjKAPFE (ORCPT ); Wed, 1 Nov 2023 11:05:04 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 49B5F11A; Wed, 1 Nov 2023 08:05:01 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 929FFC43395; Wed, 1 Nov 2023 15:04:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698851101; bh=u2/0EZmNkhteR9yqHKg+ZM6He3MW48mMvU+dc7j/N/0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ugFZRDltk5Ji75WF2kM1nw4DV4QMsmp3Ew6NnanEH/76zirT1kWCLAImIsZSrtore mDrjURw25SZK383ubVdsB10y+bUZR+MXkcgX9qBz/q8cIv6Ow0EsBqzkyy6KwRVteZ 521C7+4u2SAkkyK7YTNheuZDDAKHrQx1cC+knHjGuYOjv7GcACDkQzhNVWZ2ehJvN6 pOm9jSMdPPPd9KnTGQT9ZhBrj/D59Rn/yxR/mMz3zr7W3oNHCcoobf/Shm5dSUVPU+ Ub1zn+MRgY7RKWYi/08hUxahwdkcaIVwwSdDXjYOiM1AwgQgoimtnBP4tHOhUAZKbv t844YUt4cyqWQ== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Greg Ungerer , Jack Brennen , Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 5/7] modpost: prefer global symbols in symsearch_find_nearest() Date: Thu, 2 Nov 2023 00:04:02 +0900 Message-Id: <20231101150404.754108-6-masahiroy@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231101150404.754108-1-masahiroy@kernel.org> References: <20231101150404.754108-1-masahiroy@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 01 Nov 2023 08:05:10 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781374522710755551 X-GMAIL-MSGID: 1781374522710755551 When there are multiple symbols that share the same section index and address, symsearch_find_nearest() returns the first occurrence in the original .symtab section. We can add more rules to break a tie based on symbol attributes. Kallsyms does this; compare_symbols() in scripts/kallsyms.c first sorts symbols by address, then by weakness and by underscore-prefixing in order to provide users with the most desirable symbol. This commit gives the following preference, in this order: 1. lower address 2. global symbol 3. no underscore prefix If two symbols still tie, the first one encounterd in the linear search is selected. This does not match the order in the original .symtab section, but it is not a significant issue. Signed-off-by: Masahiro Yamada --- scripts/mod/symsearch.c | 57 +++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/scripts/mod/symsearch.c b/scripts/mod/symsearch.c index 4549c5b0bb81..13464e4f4d72 100644 --- a/scripts/mod/symsearch.c +++ b/scripts/mod/symsearch.c @@ -20,9 +20,7 @@ struct syminfo { * Entries in table are ascending, sorted first by section_index, * then by addr, and last by symbol_index. The sorting by * symbol_index is used to ensure predictable behavior when - * multiple symbols are present with the same address; all - * symbols past the first are effectively ignored, by eliding - * them in symsearch_fixup(). + * multiple symbols are present with the same address. */ struct symsearch { unsigned int table_size; @@ -97,32 +95,6 @@ static void symsearch_populate(struct elf_info *elf, fatal("%s: size mismatch\n", __func__); } -/* - * Do any fixups on the table after sorting. - * For now, this just finds adjacent entries which have - * the same section_index and addr, and it propagates - * the first symbol_index over the subsequent entries, - * so that only one symbol_index is seen for any given - * section_index and addr. This ensures that whether - * we're looking at an address from "above" or "below" - * that we see the same symbol_index. - * This does leave some duplicate entries in the table; - * in practice, these are a small fraction of the - * total number of entries, and they are harmless to - * the binary search algorithm other than a few occasional - * unnecessary comparisons. - */ -static void symsearch_fixup(struct syminfo *table, unsigned int table_size) -{ - /* Don't look at index 0, it will never change. */ - for (unsigned int i = 1; i < table_size; i++) { - if (table[i].addr == table[i - 1].addr && - table[i].section_index == table[i - 1].section_index) { - table[i].symbol_index = table[i - 1].symbol_index; - } - } -} - void symsearch_init(struct elf_info *elf) { unsigned int table_size = symbol_count(elf); @@ -134,8 +106,6 @@ void symsearch_init(struct elf_info *elf) symsearch_populate(elf, elf->symsearch->table, table_size); qsort(elf->symsearch->table, table_size, sizeof(struct syminfo), syminfo_compare); - - symsearch_fixup(elf->symsearch->table, table_size); } void symsearch_finish(struct elf_info *elf) @@ -226,12 +196,33 @@ static Elf_Sym *symsearch_find(struct elf_info *elf, Elf_Addr addr, static bool symsearch_nearest_filter(const Elf_Sym *sym1, const Elf_Sym *sym2, void *data) { + struct elf_info *elf = data; + unsigned int bind1, bind2, unscores1, unscores2; + /* If sym2 is NULL, this is the first occurrence, always take it. */ if (sym2 == NULL) return true; /* Prefer lower address. */ - return sym1->st_value < sym2->st_value; + if (sym1->st_value < sym2->st_value) + return true; + if (sym1->st_value > sym2->st_value) + return false; + + bind1 = ELF_ST_BIND(sym1->st_info); + bind2 = ELF_ST_BIND(sym2->st_info); + + /* Prefer global symbol. */ + if (bind1 == STB_GLOBAL && bind2 != STB_GLOBAL) + return true; + if (bind1 != STB_GLOBAL && bind2 == STB_GLOBAL) + return false; + + /* Prefer less underscores. */ + unscores1 = strspn(sym_name(elf, sym1), "_"); + unscores2 = strspn(sym_name(elf, sym2), "_"); + + return unscores1 < unscores2; } /* @@ -247,5 +238,5 @@ Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr, Elf_Addr min_distance) { return symsearch_find(elf, addr, secndx, allow_negative, min_distance, - symsearch_nearest_filter, NULL); + symsearch_nearest_filter, elf); } From patchwork Wed Nov 1 15:04:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 160571 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:abcd:0:b0:403:3b70:6f57 with SMTP id f13csp486985vqx; Wed, 1 Nov 2023 08:06:36 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH2nsF5gE6pyPjpaxeIy7l9gEsj/CQvt9lamJYgGm+yQQT1k6kArffMV+pWpE7ZJL6jHHl+ X-Received: by 2002:a9d:7499:0:b0:6b9:1917:b2f3 with SMTP id t25-20020a9d7499000000b006b91917b2f3mr16071021otk.33.1698851196554; Wed, 01 Nov 2023 08:06:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698851196; cv=none; d=google.com; s=arc-20160816; b=OY9T0iX3wM6jtSWrfH7/eQp3OhKlVT1I9CKqBchuwgtjTcnw/uTSwZZWwVpkJLP6sV 05mhCvFNaNnl88pj8Etnj/CAySQUBlb9OwDP3PM01jXz2n51y1OjHdIpAIBz/cLzE8GF fMcWkmLvFS5Ef77Bhba+HFDVQ8EMvE0z/PBRDeWQoT7KhZqjsQ79xD2zMaXj2JYG0qM8 qMDPrw2KV7R+XdWEmD2G2Zep8GXPqgJ36M+l0PFnWDb/9PJdwn2SRBfSAn5KheXHd5+J D0M0txgoZio+RqV82V2hLSYjegTHzJe6lMtF/4LlkmPyq64Sk/smgnS2iCYPEqxGiotV Ad+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=PoUIQR7NcgEDdx3RkciaRdO2BQ/sSWxH+8T8qqg3VuI=; fh=dBMhXJFA9J4pDfXGrZbkhy+Gp1pVbk3H3l2Zx64V9wM=; b=LwGFsBU54nZcG0+Ora408D+hblmcZn7OOihGMHVpmRyLcssSMBggkqiz8xZMlgsl2/ xB9YKwJBgW5XEFAhccXLpt8dBtsa+amv4oCjqj5cf2YhSigGhH3RlbZOcJjyaqMcLgnX 3V6v+RGeam4l3Kn56l8CZ+Ou1R/L7pVs+0zU5THD718Fo5O4ZPzt8LHc92vMLAO1Jp1c mIxKMACi9vYNu8yIN/b6f+PeSMtRXzu+Uo3cintJNysrcUFkQhMucP6p6hvnCy0mw/z2 cIIPjlo3Z5unz3c4geKahNIwsc19oGDdNtbSnLot0qfgb8AUDER3Y7hKvLc1uLcxhwnF LXow== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="mForM/El"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id g1-20020a056830308100b006d3162b9a41si546146ots.32.2023.11.01.08.06.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Nov 2023 08:06:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="mForM/El"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id A3B1C80327DA; Wed, 1 Nov 2023 08:06:27 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233074AbjKAPFQ (ORCPT + 35 others); Wed, 1 Nov 2023 11:05:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52166 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233002AbjKAPFM (ORCPT ); Wed, 1 Nov 2023 11:05:12 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2885E12B; Wed, 1 Nov 2023 08:05:03 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5B8EEC433C7; Wed, 1 Nov 2023 15:05:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698851102; bh=J9TDTTp5Th8l4Sk4Cvv9hQrUXmMuJKZ9hBfQCH+y39o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mForM/ElSg9nfUfHoSsS9u0waPf4ExfykoG7pn8Q3XaEFgsuytu/ouZBmYcqQY8rw mBCLgYXYsf/9nsFDRochpXiVbM1DwA2OtewmFI4or+JDh0c8/cnOXG1n9KvZPrO34R XR3XxeLrPAqnnn3W3aaXyYsWXUdRH2RsWT8+z5XWQAtZ2dFQdViSHXC//r9Aa7d9n/ r/L053pdsVpMNa65QHfpWWceGMtD27/WRDnLzz9u1jsm+cnaMmvTfc9ENNegOoaUfY e2eSn8UCofIHVcgoEC8GrhEsPMr5SHW7ge7vA1krBOKkEgAaV+Xi+9vmk0tvA4Kv5C pHhg1GVhlpXWw== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Greg Ungerer , Jack Brennen , Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 6/7] modpost: add symsearch_find_with_name() helper function Date: Thu, 2 Nov 2023 00:04:03 +0900 Message-Id: <20231101150404.754108-7-masahiroy@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231101150404.754108-1-masahiroy@kernel.org> References: <20231101150404.754108-1-masahiroy@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-1.6 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Wed, 01 Nov 2023 08:06:27 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781374592526670129 X-GMAIL-MSGID: 1781374592526670129 This helper function searches for a symbol with the provided name. The symbol must be located in the specified section and within the given distance from the target address. In the expected use case, the min_distance is very small, so the linear search will finish within a few iterations. Signed-off-by: Masahiro Yamada --- scripts/mod/modpost.h | 3 +++ scripts/mod/symsearch.c | 44 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h index 9834ac44846d..43148b1a762b 100644 --- a/scripts/mod/modpost.h +++ b/scripts/mod/modpost.h @@ -186,6 +186,9 @@ void symsearch_finish(struct elf_info *elf); Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr, unsigned int secndx, bool allow_negative, Elf_Addr min_distance); +Elf_Sym *symsearch_find_with_name(struct elf_info *elf, Elf_Addr addr, + unsigned int secndx, bool allow_negative, + Elf_Addr min_distance, const char *name); /* file2alias.c */ void handle_moddevtable(struct module *mod, struct elf_info *info, diff --git a/scripts/mod/symsearch.c b/scripts/mod/symsearch.c index 13464e4f4d72..9101bb9584a4 100644 --- a/scripts/mod/symsearch.c +++ b/scripts/mod/symsearch.c @@ -240,3 +240,47 @@ Elf_Sym *symsearch_find_nearest(struct elf_info *elf, Elf_Addr addr, return symsearch_find(elf, addr, secndx, allow_negative, min_distance, symsearch_nearest_filter, elf); } + +struct name_filter_data { + struct elf_info *elf; + const char *name; +}; + +static bool symsearch_name_filter(const Elf_Sym *sym1, const Elf_Sym *sym2, + void *_data) +{ + struct name_filter_data *data = _data; + const char *name; + + /* Check the symbol name. */ + name = sym_name(data->elf, sym1); + if (strcmp(name, data->name)) + return false; + + /* If sym2 is NULL, this is the first occurrence, always take it. */ + if (!sym2) + return true; + + /* Prefer lower address. */ + return sym1->st_value < sym2->st_value; +} + +/* + * Find the symbol which is in secndx and has the given name, and is located + * close enough to the given address. + * allow_negative: allow returning a symbol whose address is > addr. + * min_distance: ignore symbols which are further away than this. + * name: the name of the symbol to search for. + * + * Returns a pointer into the symbol table for success. + * Returns NULL if no legal symbol is found within the requested range. + */ +Elf_Sym *symsearch_find_with_name(struct elf_info *elf, Elf_Addr addr, + unsigned int secndx, bool allow_negative, + Elf_Addr min_distance, const char *name) +{ + struct name_filter_data data = { .elf = elf, .name = name }; + + return symsearch_find(elf, addr, secndx, allow_negative, min_distance, + symsearch_name_filter, &data); +} From patchwork Wed Nov 1 15:04:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 160572 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:abcd:0:b0:403:3b70:6f57 with SMTP id f13csp487288vqx; Wed, 1 Nov 2023 08:07:00 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGtoek8fk4HFXcJee/ok7IoAQEW4sJ3axQ6OurAkSUyaVmQBVwf+01AIeAMiZiSOUd613Y0 X-Received: by 2002:a05:6e02:2182:b0:351:5b43:5ecd with SMTP id j2-20020a056e02218200b003515b435ecdmr21713439ila.14.1698851220069; Wed, 01 Nov 2023 08:07:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698851220; cv=none; d=google.com; s=arc-20160816; b=x+LKI3RtVIbx5NJgeaLXyow9eSk74z1C3pD31spWpHr0c/mdnpq1UjisSvodZlpfTT MZrnpKx6tpG1tSmJbTwHnAZybO03uQvUvoQzwyHGAblcfqkjPEuDEstomzEW7chyLpcH C+UoREvCaNzdhH+ey6OdphTyFXdCUwnQccuE9B0/MdEFNpWZ7FGJg62EGr9+b8kxXvUD 01ptyN7Qv1VII2xGLomE8lk2a/rNnPbOSCw6CjeqquVFZ2Z1czHiupds5FAo/pcLBMac 58ka2U8XJWT/7aNu8k8c995Fmu1+tggTymgBRbvrFsKTBgpl2CdttiZ1R0C0GmoSPZ1y W9Pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=d+iUhlGeSIt7W31N5k72KK1/eWY6WYq/54fp2jRtnBU=; fh=dBMhXJFA9J4pDfXGrZbkhy+Gp1pVbk3H3l2Zx64V9wM=; b=M06g5cItc59epG+w/9lScs2mC5YCQN/EuwMyxeHZP0XcJRLExknGMooMbWZhZPk+rB igPT4Z1xeCtkPC9Yd+83G3JWqjka3BRBgQw55H7DMTHBN4xIMOoBENO5EXsjvIRfHKbD 9LSPptiHnrMzN/lpxrlLueU8m01y18d2Q3lLuH2Mq08C2sQT/Pa7HT5mvXyJIIwPdW3j CjkB6VG5PXFp74SjJ0kF/88oAcTbzqD/flgDYlYptTzMXpnCiSI9CdiWjxwethFQw888 x/0pJc7A92xXNGSDs5IGDx7qDSyqDeRH7ZFTgtIOYNTBh9ta3TKjaMji/ZYk5nedLjsZ xd0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=uE+WrCb7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id y11-20020a656c0b000000b005641315d956si94062pgu.147.2023.11.01.08.06.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Nov 2023 08:07:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=uE+WrCb7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 87ABF80ACC51; Wed, 1 Nov 2023 08:05:45 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232860AbjKAPFU (ORCPT + 35 others); Wed, 1 Nov 2023 11:05:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52140 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232591AbjKAPFO (ORCPT ); Wed, 1 Nov 2023 11:05:14 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EC2E9138; Wed, 1 Nov 2023 08:05:04 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 20955C433CC; Wed, 1 Nov 2023 15:05:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698851104; bh=G5IEU13BAIg0z0NXW6uKOCp7ssGljo/FCvyBke8OHsQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uE+WrCb7M6EmKJdxJmKMrN/sRX3Hp6ydLqFVsn6B3tVKj8NG2/4jzEs8XIw6a0fn1 Sp4SujkKHUgM1mUPTI1vhmZXJie9QgjC5tsgQTfXGtoRnPoYLKfY0EAwkEN6wm9JhJ 8N9Ynm2p232u7jxkHH2RclCoFG9YeI5YsPWyvR6CaeSbCgzuM7Nc0iL3PRUYk3XlRf ruf8hY+VoJRLNBPpnEbP90M9csUCKeNRsODr4zHU/3xDNcw8icqhRK9rXOYyGVDbwo MPzL1vCOvE+IQ/x0tzgJO84VwgjEbssQ2IwyFcdPMm727TADppazOgsb1Nc16MPV4b TknK6oyhPTzUA== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Greg Ungerer , Jack Brennen , Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 7/7] modpost: look up the correct symbol in check_export_symbol() Date: Thu, 2 Nov 2023 00:04:04 +0900 Message-Id: <20231101150404.754108-8-masahiroy@kernel.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231101150404.754108-1-masahiroy@kernel.org> References: <20231101150404.754108-1-masahiroy@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-1.6 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Wed, 01 Nov 2023 08:05:45 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781374617020790319 X-GMAIL-MSGID: 1781374617020790319 Greg Ungerer reported modpost produced false-positive "local symbol '...' was exported" errors when m68k-uclinux-gcc is used. I had assumed ELF_R_SYM(Elf_Rela::r_info) pointed to the exported symbol itself if it is in the global scope. This assumption worked for many toolchains, but as it turned out, it was not true for m68k-uclinux-gcc, at least. If the 'sym' argument passed to check_export_symbol() is not the exported symbol, look up the correct one in the symbol table. It incurs a search cost, but since we know its section index and address, we can exploit the binary search. Reported-by: Greg Ungerer Closes: https://lore.kernel.org/all/1fac9d12-2ec2-4ccb-bb81-34f3fc34789e@westnet.com.au/ Signed-off-by: Masahiro Yamada --- scripts/mod/modpost.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 896ecfa8483f..ee67bc6d71ee 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1021,6 +1021,18 @@ static Elf_Sym *find_tosym(struct elf_info *elf, Elf_Addr addr, Elf_Sym *sym) true, 20); } +static Elf_Sym *find_tosym_with_name(struct elf_info *elf, Elf_Addr addr, + Elf_Sym *sym, const char *name) +{ + /* If the supplied symbol has the expected name, return it. */ + if (!strcmp(sym_name(elf, sym), name)) + return sym; + + /* Look up a symbol with the given name. */ + return symsearch_find_with_name(elf, addr, get_secindex(elf, sym), + true, 20, name); +} + static bool is_executable_section(struct elf_info *elf, unsigned int secndx) { if (secndx >= elf->num_sections) @@ -1079,7 +1091,7 @@ static void default_mismatch_handler(const char *modname, struct elf_info *elf, static void check_export_symbol(struct module *mod, struct elf_info *elf, Elf_Addr faddr, const char *secname, - Elf_Sym *sym) + Elf_Sym *sym, Elf_Addr taddr) { static const char *prefix = "__export_symbol_"; const char *label_name, *name, *data; @@ -1096,6 +1108,14 @@ static void check_export_symbol(struct module *mod, struct elf_info *elf, return; } + name = label_name + strlen(prefix); + sym = find_tosym_with_name(elf, taddr, sym, name); + if (!sym) { + error("%s: could not find the the export symbol '%s'\n", + mod->name, name); + return; + } + if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL && ELF_ST_BIND(sym->st_info) != STB_WEAK) { error("%s: local symbol '%s' was exported\n", mod->name, @@ -1103,13 +1123,6 @@ static void check_export_symbol(struct module *mod, struct elf_info *elf, return; } - name = sym_name(elf, sym); - if (strcmp(label_name + strlen(prefix), name)) { - error("%s: .export_symbol section references '%s', but it does not seem to be an export symbol\n", - mod->name, name); - return; - } - data = sym_get_data(elf, label); /* license */ if (!strcmp(data, "GPL")) { is_gpl = true; @@ -1156,7 +1169,7 @@ static void check_section_mismatch(struct module *mod, struct elf_info *elf, const struct sectioncheck *mismatch; if (module_enabled && elf->export_symbol_secndx == fsecndx) { - check_export_symbol(mod, elf, faddr, tosec, sym); + check_export_symbol(mod, elf, faddr, tosec, sym, taddr); return; }