Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp923594rwd; Sun, 14 May 2023 08:57:58 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7DnNy2xmXgl/4m0oYBmBF0j4AisNbxELyGLQ0ft7NTcxpU3E7rGvXhSlVNnCpquA4DtqDP X-Received: by 2002:a17:90b:190f:b0:24e:16ae:61ca with SMTP id mp15-20020a17090b190f00b0024e16ae61camr29543876pjb.34.1684079877948; Sun, 14 May 2023 08:57:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684079877; cv=none; d=google.com; s=arc-20160816; b=SXJZrr2y4BmnnxlU6EUNdDCTdESAvfag66VmxGVzIAxmMXMCrZF/obFXZOJGVeu/lc 4qg5zPbHMrXgpvNuIM09uED5RbLjrPzWPIMIp1tjUMw7ivU7YtJ6A/NLwTLP/OX7VU7D dAfMiac26NzO+1xM6qiwL1nBr78HI01lFh0h7DZkWp1PXZLf6c67wr5dvMyizQbC5cuH O72WHDLjiWbgqUK/Mu21Pv6hl+nnRbcdNAd5ZzC2aMJGjYMdq+x62gAZDn4XFbo3B5EZ CuGjKBCnrNk8Mci6kFckWfOoqN4wG1K6xEy3dO/NWT2GIY0iRXiicbgTwebs9TssWWbT mAew== 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=7diCT48hefeX57kBvRk2Prw2XZvzcuOlkEJVMsRX74s=; b=m7+zcTyIggSoVlGUIwWfglStDWpU3Pn3YWFU1WK6MSTR+WrDKXk6Z2OIKtDQZcIn8+ Z3Dbt64MgRYMfNXZvPScRcdzTnm/uu3zv/wH4KBTE7sbM4RQjDUhKxkex5kdobAKtk9x TKjIEQBFcggjvqKc3SywCNCXniLCsBCqtSinL/Z5sSshkgi/N7pqSkSBHCzZ64a8cylW ckACTW5qT5KKDMJu8BU96FIuDnnrFp1SKMxl/JAK3mhldSrsWg6BHkhH1WrOySx0IWfI IFZeyBuwFZ9uxz/iqYBA7beAg3MaJJHpQOkTAMOBvUmA3Cq6EFP/PODJxp9QY4N7YoD1 1IOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=i6OpcTZM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x3-20020a63b343000000b00502d81ecf19si14616010pgt.646.2023.05.14.08.57.42; Sun, 14 May 2023 08:57:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=i6OpcTZM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238005AbjENP2k (ORCPT + 99 others); Sun, 14 May 2023 11:28:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46686 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237280AbjENP2U (ORCPT ); Sun, 14 May 2023 11:28:20 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DE67F35B5; Sun, 14 May 2023 08:28:07 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id EFE3A6181B; Sun, 14 May 2023 15:28:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AC12BC4339C; Sun, 14 May 2023 15:28:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684078086; bh=5jnQxwz3UmV9tj1v34IDrOsiFFXLCh6HDE2/jdtbZ2w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i6OpcTZMHBI7kvbFOKpYHyYkwvBCurxFpzr5JYjrG05tYQlAXOg7NpDE8XZDIXgtg /B4A5/OaFfLsHWlzNtWXi3zzDj0/CnDn9UeXE33HRUiFwbPfYXvrb3l/S/E4+EhiFC rj9M4PKVuEWZv/oJyiAbWh3Xt1dRUcyErmRu403+c2lG5zA1czcOmuEDCoyE0IoAc9 WUqT4RAk6DzTvRk9mv1yCoyLkAMXZMd/TE7yw/2X+i05UmXk3+MFefFSm1SECg7hVZ Kj1VfyCVYy3JokxXvhdCDP01EsxKuVs+ZPt1B9qhHNGhT4Slgj7EgSBFEW0vO4B82j iuAbjRgWxAPVQ== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Nathan Chancellor , Nick Desaulniers , Nicolas Pitre , Nicolas Schier , Masahiro Yamada Subject: [PATCH v5 09/21] modpost: pass section index to find_elf_symbol2() Date: Mon, 15 May 2023 00:27:27 +0900 Message-Id: <20230514152739.962109-10-masahiroy@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230514152739.962109-1-masahiroy@kernel.org> References: <20230514152739.962109-1-masahiroy@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, 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 find_elf_symbol2() converts the section index to the section name, then compares the two section names in each iteration. This is slow. It is faster to compare the section indices (i.e. integers) directly. Signed-off-by: Masahiro Yamada --- scripts/mod/modpost.c | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 2cc9c2a4aadc..3b7b78e69137 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1169,19 +1169,14 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr, * it is, but this works for now. **/ static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr, - const char *sec) + unsigned int secndx) { Elf_Sym *sym; Elf_Sym *near = NULL; Elf_Addr distance = ~0; for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) { - const char *symsec; - - if (is_shndx_special(sym->st_shndx)) - continue; - symsec = sec_name(elf, get_secindex(elf, sym)); - if (strcmp(symsec, sec) != 0) + if (get_secindex(elf, sym) != secndx) continue; if (!is_valid_name(elf, sym)) continue; @@ -1203,7 +1198,8 @@ static bool is_executable_section(struct elf_info *elf, unsigned int secndx) static void default_mismatch_handler(const char *modname, struct elf_info *elf, const struct sectioncheck* const mismatch, - Elf_Rela *r, Elf_Sym *sym, const char *fromsec, + Elf_Rela *r, Elf_Sym *sym, + unsigned int fsecndx, const char *fromsec, const char *tosec) { Elf_Sym *to; @@ -1211,7 +1207,7 @@ static void default_mismatch_handler(const char *modname, struct elf_info *elf, const char *tosym; const char *fromsym; - from = find_elf_symbol2(elf, r->r_offset, fromsec); + from = find_elf_symbol2(elf, r->r_offset, fsecndx); fromsym = sym_name(elf, from); to = find_elf_symbol(elf, r->r_addend, sym); @@ -1267,7 +1263,8 @@ static void default_mismatch_handler(const char *modname, struct elf_info *elf, } static void check_section_mismatch(const char *modname, struct elf_info *elf, - Elf_Rela *r, Elf_Sym *sym, const char *fromsec) + Elf_Rela *r, Elf_Sym *sym, + unsigned int fsecndx, const char *fromsec) { const char *tosec = sec_name(elf, get_secindex(elf, sym)); const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec); @@ -1275,7 +1272,8 @@ static void check_section_mismatch(const char *modname, struct elf_info *elf, if (!mismatch) return; - default_mismatch_handler(modname, elf, mismatch, r, sym, fromsec, tosec); + default_mismatch_handler(modname, elf, mismatch, r, sym, fsecndx, fromsec, + tosec); } static unsigned int *reloc_location(struct elf_info *elf, @@ -1390,12 +1388,11 @@ static void section_rela(const char *modname, struct elf_info *elf, Elf_Rela *rela; Elf_Rela r; unsigned int r_sym; - const char *fromsec; - + unsigned int fsecndx = sechdr->sh_info; + const char *fromsec = sec_name(elf, fsecndx); Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset; Elf_Rela *stop = (void *)start + sechdr->sh_size; - fromsec = sec_name(elf, sechdr->sh_info); /* if from section (name) is know good then skip it */ if (match(fromsec, section_white_list)) return; @@ -1434,7 +1431,7 @@ static void section_rela(const char *modname, struct elf_info *elf, /* Skip special sections */ if (is_shndx_special(sym->st_shndx)) continue; - check_section_mismatch(modname, elf, &r, sym, fromsec); + check_section_mismatch(modname, elf, &r, sym, fsecndx, fromsec); } } @@ -1445,12 +1442,11 @@ static void section_rel(const char *modname, struct elf_info *elf, Elf_Rel *rel; Elf_Rela r; unsigned int r_sym; - const char *fromsec; - + unsigned int fsecndx = sechdr->sh_info; + const char *fromsec = sec_name(elf, fsecndx); Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset; Elf_Rel *stop = (void *)start + sechdr->sh_size; - fromsec = sec_name(elf, sechdr->sh_info); /* if from section (name) is know good then skip it */ if (match(fromsec, section_white_list)) return; @@ -1493,7 +1489,7 @@ static void section_rel(const char *modname, struct elf_info *elf, /* Skip special sections */ if (is_shndx_special(sym->st_shndx)) continue; - check_section_mismatch(modname, elf, &r, sym, fromsec); + check_section_mismatch(modname, elf, &r, sym, fsecndx, fromsec); } } -- 2.39.2