From nobody Sun Sep 14 16:08:47 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 17787C27C76 for ; Fri, 20 Jan 2023 12:36:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230183AbjATMgD (ORCPT ); Fri, 20 Jan 2023 07:36:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58954 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230207AbjATMfy (ORCPT ); Fri, 20 Jan 2023 07:35:54 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 38FE5BC883; Fri, 20 Jan 2023 04:35:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674218132; x=1705754132; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=WY7A8kXmLodxsZZKsPIN5lstuixMq8OdTgkIL+AMf/o=; b=kh+4gDkOrkk+Rz0WY67KcFbHEjP7x253k/J9OZdBTnwG0rkuUAmJ6HB6 Px3FkqIo1Qfua92JCpr31Fs9m5a3o3j+2P6tl6XLcz1gunfvqdOg/eghx pwLatkM2Ori+EJ5Ca2tCxZksfOgeddv+LJZ0Vw2jCs7vPbdAu88cTQwRH XEJqwpyCGuwVicSlJkU0GSHuWNrF5YCg29Y0Ag14Mc0oU7xv0qACpDBK6 iRmCMX8krnHRh37YSK6V6vqBGtwJTXCuLfKb4c+hMT732ieM7hLvGckD1 jpCQoUapvvtPKuk/IBxvRV8zRToDovhle34zqCXN8AWWiNujmqdjhXa+D A==; X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="387935260" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="387935260" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jan 2023 04:35:31 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="692847446" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="692847446" Received: from ahunter6-mobl1.ger.corp.intel.com (HELO ahunter-VirtualBox.home\044ger.corp.intel.com) ([10.251.223.163]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Jan 2023 04:35:29 -0800 From: Adrian Hunter To: Arnaldo Carvalho de Melo Cc: Jiri Olsa , Namhyung Kim , Ian Rogers , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Subject: [PATCH 07/10] perf symbols: Add symbol for .plt header Date: Fri, 20 Jan 2023 14:34:53 +0200 Message-Id: <20230120123456.12449-8-adrian.hunter@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230120123456.12449-1-adrian.hunter@intel.com> References: <20230120123456.12449-1-adrian.hunter@intel.com> MIME-Version: 1.0 Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" perf expands the _init symbol over .plt because there are no PLT symbols at that point, but then dso__synthesize_plt_symbols() creates them. Fix by truncating the previous symbol and inserting a symbol for .plt header. Example: Before: $ perf test --dso `which uname` -v Symbols 74: Symbols : --- start --- test child forked, pid 191028 Problems creating module maps, continuing anyway... Testing /usr/bin/uname Overlapping symbols: 2000-25f0 g _init 2040-2050 g free@plt test child finished with -1 ---- end ---- Symbols: FAILED! $ perf test --dso `which uname` -vv Symbols 2>/tmp/cmp1.txt After: $ perf test --dso `which uname` -v Symbols 74: Symbols : --- start --- test child forked, pid 194291 Testing /usr/bin/uname test child finished with 0 ---- end ---- Symbols: Ok $ perf test --dso `which uname` -vv Symbols 2>/tmp/cmp2.txt $ diff /tmp/cmp1.txt /tmp/cmp2.txt 4,5c4 < test child forked, pid 191031 < Problems creating module maps, continuing anyway... --- > test child forked, pid 194296 9c8,9 < 2000-25f0 g _init --- > 2000-2030 g _init > 2030-2040 g .plt 100,103c100 < Overlapping symbols: < 2000-25f0 g _init < 2040-2050 g free@plt < test child finished with -1 --- > test child finished with 0 105c102 < Symbols: FAILED! --- > Symbols: Ok $ Signed-off-by: Adrian Hunter --- tools/perf/util/symbol-elf.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 87b82507c205..a8b7c3860b2d 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -389,6 +389,27 @@ int dso__synthesize_plt_symbols(struct dso *dso, struc= t symsrc *ss) elf =3D ss->elf; ehdr =3D ss->ehdr; =20 + if (!elf_section_by_name(elf, &ehdr, &shdr_plt, ".plt", NULL)) + return 0; + + /* + * A symbol from a previous section (e.g. .init) can have been expanded + * by symbols__fixup_end() to overlap .plt. Truncate it before adding + * a symbol for .plt header. + */ + f =3D dso__find_symbol_nocache(dso, shdr_plt.sh_offset); + if (f && f->start < shdr_plt.sh_offset && f->end > shdr_plt.sh_offset) + f->end =3D shdr_plt.sh_offset; + + if (!get_plt_sizes(dso, &ehdr, &shdr_plt, &plt_header_size, &plt_entry_si= ze)) + return 0; + + /* Add a symbol for .plt header */ + f =3D symbol__new(shdr_plt.sh_offset, plt_header_size, STB_GLOBAL, STT_FU= NC, ".plt"); + if (!f) + goto out_elf_end; + symbols__insert(&dso->symbols, f); + scn_dynsym =3D ss->dynsym; shdr_dynsym =3D ss->dynshdr; dynsym_idx =3D ss->dynsym_idx; @@ -408,9 +429,6 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct= symsrc *ss) if (shdr_rel_plt.sh_link !=3D dynsym_idx) goto out_elf_end; =20 - if (elf_section_by_name(elf, &ehdr, &shdr_plt, ".plt", NULL) =3D=3D NULL) - goto out_elf_end; - /* * Fetch the relocation section to find the idxes to the GOT * and the symbols in the .dynsym they refer to. @@ -436,8 +454,6 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct= symsrc *ss) =20 nr_rel_entries =3D shdr_rel_plt.sh_size / shdr_rel_plt.sh_entsize; plt_offset =3D shdr_plt.sh_offset; - if (!get_plt_sizes(dso, &ehdr, &shdr_plt, &plt_header_size, &plt_entry_si= ze)) - return 0; plt_offset +=3D plt_header_size; =20 if (shdr_rel_plt.sh_type =3D=3D SHT_RELA) { --=20 2.34.1