From nobody Sun Sep 14 14:27:37 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 D6069C27C76 for ; Fri, 20 Jan 2023 12:35:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230133AbjATMfU (ORCPT ); Fri, 20 Jan 2023 07:35:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58320 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230103AbjATMfR (ORCPT ); Fri, 20 Jan 2023 07:35:17 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 95D0C2C656; Fri, 20 Jan 2023 04:35:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674218116; x=1705754116; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2X57CfR6KCOC5jRYy3gQh0I2KsDNwZmyV484WgF/6tY=; b=BaORSXNNCFyV3Ccjgv66binl9puWXuicV6Mc+xyypNEgXuIy3Rlsdq4k C1Mgs/GbZH+bwZAAMMgzeklo2mJ0x6D+V/yIiksMznAdouV/93HvbtODr Q57dvr0StG76aGbqYxrqU1caPbGoHyFqityXpUbe+7Jx5xDivrAFGU6I3 wVjHIKpDAVXVGDQIX1NEhMUa0t5M8tEqRI62q77Hu/VlROokImeL5wXXZ 58BxOXtwNmGgz9FRURO+jMffAsbQlVOJbRhMeqHD8D5AREja4G9TyJuCu NTmp4prvrV3g2o+lA7q8LQ2JFYQWnG9iU7uKQDYKP04hsoCokU2dx9IlZ A==; X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="387935149" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="387935149" 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:16 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="692847415" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="692847415" 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:13 -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 01/10] perf test: Add Symbols test Date: Fri, 20 Jan 2023 14:34:47 +0200 Message-Id: <20230120123456.12449-2-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" Add a test to check function symbols do not overlap and are not zero length. The main motivation for the test is to make it easier to review changes to PLT symbol synthesis i.e. changes to dso__synthesize_plt_symbols(). By default the test uses the perf executable as a test DSO, but a specific DSO can be specified via a new perf test option "--dso". The test is useful in the following ways: - Any DSO can be tested, even ones that do not run on the current architecture. For example, using cross-compiled DSOs to see how well perf handles different architectures. - With verbose > 1 (e.g. -vv), all the symbols are printed, which makes it easier to see issues. - perf removes duplicate symbols and expands zero-length symbols to reach the next symbol, however that is done before adding synthesized symbols, so the test is checking those also. Example: $ perf test -v Symbols 74: Symbols : --- start --- test child forked, pid 154918 Testing /home/user/bin/perf Overlapping symbols: 7d000-7f3a0 g _init 7d030-7d040 g __printf_chk@plt test child finished with -1 ---- end ---- Symbols: FAILED! Note the test fails because perf expands the _init symbol over the PLT because there are no PLT symbols at that point, but then dso__synthesize_plt_symbols() creates them. Signed-off-by: Adrian Hunter Acked-by: Ian Rogers --- tools/perf/Documentation/perf-test.txt | 3 + tools/perf/tests/Build | 1 + tools/perf/tests/builtin-test.c | 3 + tools/perf/tests/symbols.c | 150 +++++++++++++++++++++++++ tools/perf/tests/tests.h | 3 + 5 files changed, 160 insertions(+) create mode 100644 tools/perf/tests/symbols.c diff --git a/tools/perf/Documentation/perf-test.txt b/tools/perf/Documentat= ion/perf-test.txt index b329c65d7f40..951a2f262872 100644 --- a/tools/perf/Documentation/perf-test.txt +++ b/tools/perf/Documentation/perf-test.txt @@ -34,3 +34,6 @@ OPTIONS -F:: --dont-fork:: Do not fork child for each test, run all tests within single process. + +--dso:: + Specify a DSO for the "Symbols" test. diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build index 90fd1eb317bb..fb9ac5dc4079 100644 --- a/tools/perf/tests/Build +++ b/tools/perf/tests/Build @@ -68,6 +68,7 @@ perf-y +=3D perf-time-to-tsc.o perf-y +=3D dlfilter-test.o perf-y +=3D sigtrap.o perf-y +=3D event_groups.o +perf-y +=3D symbols.o =20 $(OUTPUT)tests/llvm-src-base.c: tests/bpf-script-example.c tests/Build $(call rule_mkdir) diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-tes= t.c index cfa61493c750..35cc3807cc9e 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -31,6 +31,7 @@ #include "builtin-test-list.h" =20 static bool dont_fork; +const char *dso_to_test; =20 struct test_suite *__weak arch_tests[] =3D { NULL, @@ -117,6 +118,7 @@ static struct test_suite *generic_tests[] =3D { &suite__dlfilter, &suite__sigtrap, &suite__event_groups, + &suite__symbols, NULL, }; =20 @@ -521,6 +523,7 @@ int cmd_test(int argc, const char **argv) OPT_BOOLEAN('F', "dont-fork", &dont_fork, "Do not fork for testcase"), OPT_STRING('w', "workload", &workload, "work", "workload to run for testi= ng"), + OPT_STRING(0, "dso", &dso_to_test, "dso", "dso to test"), OPT_END() }; const char * const test_subcommands[] =3D { "list", NULL }; diff --git a/tools/perf/tests/symbols.c b/tools/perf/tests/symbols.c new file mode 100644 index 000000000000..057b16df6416 --- /dev/null +++ b/tools/perf/tests/symbols.c @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include +#include +#include "debug.h" +#include "dso.h" +#include "machine.h" +#include "thread.h" +#include "symbol.h" +#include "map.h" +#include "util.h" +#include "tests.h" + +struct test_info { + struct machine *machine; + struct thread *thread; +}; + +static int init_test_info(struct test_info *ti) +{ + ti->machine =3D machine__new_host(); + if (!ti->machine) { + pr_debug("machine__new_host() failed!\n"); + return TEST_FAIL; + } + + /* Create a dummy thread */ + ti->thread =3D machine__findnew_thread(ti->machine, 100, 100); + if (!ti->thread) { + pr_debug("machine__findnew_thread() failed!\n"); + return TEST_FAIL; + } + + return TEST_OK; +} + +static void exit_test_info(struct test_info *ti) +{ + thread__put(ti->thread); + machine__delete(ti->machine); +} + +static void get_test_dso_filename(char *filename, size_t max_sz) +{ + if (dso_to_test) + strlcpy(filename, dso_to_test, max_sz); + else + perf_exe(filename, max_sz); +} + +static int create_map(struct test_info *ti, char *filename, struct map **m= ap_p) +{ + /* Create a dummy map at 0x100000 */ + *map_p =3D map__new(ti->machine, 0x100000, 0xffffffff, 0, NULL, + PROT_EXEC, 0, NULL, filename, ti->thread); + if (!*map_p) { + pr_debug("Failed to create map!"); + return TEST_FAIL; + } + + return TEST_OK; +} + +static int test_dso(struct dso *dso) +{ + struct symbol *last_sym =3D NULL; + struct rb_node *nd; + int ret =3D TEST_OK; + + /* dso__fprintf() prints all the symbols */ + if (verbose > 1) + dso__fprintf(dso, stderr); + + for (nd =3D rb_first_cached(&dso->symbols); nd; nd =3D rb_next(nd)) { + struct symbol *sym =3D rb_entry(nd, struct symbol, rb_node); + + if (sym->type !=3D STT_FUNC && sym->type !=3D STT_GNU_IFUNC) + continue; + + /* Check for overlapping function symbols */ + if (last_sym && sym->start < last_sym->end) { + pr_debug("Overlapping symbols:\n"); + symbol__fprintf(last_sym, stderr); + symbol__fprintf(sym, stderr); + ret =3D TEST_FAIL; + } + /* Check for zero-length function symbol */ + if (sym->start =3D=3D sym->end) { + pr_debug("Zero-length symbol:\n"); + symbol__fprintf(sym, stderr); + ret =3D TEST_FAIL; + } + last_sym =3D sym; + } + + return ret; +} + +static int test_file(struct test_info *ti, char *filename) +{ + struct map *map =3D NULL; + int ret, nr; + + pr_debug("Testing %s\n", filename); + + ret =3D create_map(ti, filename, &map); + if (ret !=3D TEST_OK) + return ret; + + nr =3D dso__load(map->dso, map); + if (nr < 0) { + pr_debug("dso__load() failed!\n"); + ret =3D TEST_FAIL; + goto out_put; + } + + if (nr =3D=3D 0) { + pr_debug("DSO has no symbols!\n"); + ret =3D TEST_SKIP; + goto out_put; + } + + ret =3D test_dso(map->dso); +out_put: + map__put(map); + + return ret; +} + +static int test__symbols(struct test_suite *test __maybe_unused, int subte= st __maybe_unused) +{ + char filename[PATH_MAX]; + struct test_info ti; + int ret; + + ret =3D init_test_info(&ti); + if (ret !=3D TEST_OK) + return ret; + + get_test_dso_filename(filename, sizeof(filename)); + + ret =3D test_file(&ti, filename); + + exit_test_info(&ti); + + return ret; +} + +DEFINE_SUITE("Symbols", symbols); diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h index fb4b5ad4dd0f..9a0f3904e53d 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -148,6 +148,7 @@ DECLARE_SUITE(perf_time_to_tsc); DECLARE_SUITE(dlfilter); DECLARE_SUITE(sigtrap); DECLARE_SUITE(event_groups); +DECLARE_SUITE(symbols); =20 /* * PowerPC and S390 do not support creation of instruction breakpoints usi= ng the @@ -208,4 +209,6 @@ DECLARE_WORKLOAD(sqrtloop); DECLARE_WORKLOAD(brstack); DECLARE_WORKLOAD(datasym); =20 +extern const char *dso_to_test; + #endif /* TESTS_H */ --=20 2.34.1 From nobody Sun Sep 14 14:27:37 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 B37E5C27C76 for ; Fri, 20 Jan 2023 12:35:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229640AbjATMf1 (ORCPT ); Fri, 20 Jan 2023 07:35:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230134AbjATMfV (ORCPT ); Fri, 20 Jan 2023 07:35:21 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4057FBC8B9; Fri, 20 Jan 2023 04:35:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674218119; x=1705754119; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sAcMYB+GjPlCo4U+0MPqIgbgUDFTYLliCdjAF9kowCQ=; b=OOyQsNNu/VS+Yi5cftaFnpLGNsHcxAK3l0QnzYLrBEx94dveAsGqlm7A mALLQT4HpRz7rUWRRude/tf564MhUUPFk2DX+dYiN0SmlWrp0y/3T+BdY 6wgb82z3HD78hsSCguqUv2+OewGk+dcHmThm3jIGsKWiKG+sF23i+r/He Y/1KrWNyEUJc7z6LesqjrDJFAGiKH1UozO/TQTfMPLs4OAkr0u3VPSxHv YiRW1/2fkHVm2l+CRB8r6rHEPbpMbzwgrh18E/UOUX/CrpGCZxRAwNqm9 8WZEJbxBu+cK9hGcqQlF6r05x7LUqjCR9UsIppuCUEu0GiTY5kr0o6xK7 A==; X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="387935170" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="387935170" 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:18 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="692847420" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="692847420" 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:16 -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 02/10] perf symbols: Factor out get_plt_sizes() Date: Fri, 20 Jan 2023 14:34:48 +0200 Message-Id: <20230120123456.12449-3-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" Factor out get_plt_sizes() to make the code more readable and further changes to dso__synthesize_plt_symbols() easier to follow. Signed-off-by: Adrian Hunter Acked-by: Ian Rogers --- tools/perf/util/symbol-elf.c | 54 +++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 96767d1b3f1c..4605680a22a3 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -323,6 +323,33 @@ static char *demangle_sym(struct dso *dso, int kmodule= , const char *elf_name) return demangled; } =20 +static void get_plt_sizes(GElf_Ehdr *ehdr, GElf_Shdr *shdr_plt, + u64 *plt_header_size, u64 *plt_entry_size) +{ + switch (ehdr->e_machine) { + case EM_ARM: + *plt_header_size =3D 20; + *plt_entry_size =3D 12; + return; + case EM_AARCH64: + *plt_header_size =3D 32; + *plt_entry_size =3D 16; + return; + case EM_SPARC: + *plt_header_size =3D 48; + *plt_entry_size =3D 12; + return; + case EM_SPARCV9: + *plt_header_size =3D 128; + *plt_entry_size =3D 32; + return; + default: /* FIXME: s390/alpha/mips/parisc/poperpc/sh/xtensa need to be ch= ecked */ + *plt_header_size =3D shdr_plt->sh_entsize; + *plt_entry_size =3D shdr_plt->sh_entsize; + return; + } +} + #define elf_section__for_each_rel(reldata, pos, pos_mem, idx, nr_entries) \ for (idx =3D 0, pos =3D gelf_getrel(reldata, 0, &pos_mem); \ idx < nr_entries; \ @@ -411,32 +438,7 @@ int dso__synthesize_plt_symbols(struct dso *dso, struc= t symsrc *ss) =20 nr_rel_entries =3D shdr_rel_plt.sh_size / shdr_rel_plt.sh_entsize; plt_offset =3D shdr_plt.sh_offset; - switch (ehdr.e_machine) { - case EM_ARM: - plt_header_size =3D 20; - plt_entry_size =3D 12; - break; - - case EM_AARCH64: - plt_header_size =3D 32; - plt_entry_size =3D 16; - break; - - case EM_SPARC: - plt_header_size =3D 48; - plt_entry_size =3D 12; - break; - - case EM_SPARCV9: - plt_header_size =3D 128; - plt_entry_size =3D 32; - break; - - default: /* FIXME: s390/alpha/mips/parisc/poperpc/sh/xtensa need to be c= hecked */ - plt_header_size =3D shdr_plt.sh_entsize; - plt_entry_size =3D shdr_plt.sh_entsize; - break; - } + get_plt_sizes(&ehdr, &shdr_plt, &plt_header_size, &plt_entry_size); plt_offset +=3D plt_header_size; =20 if (shdr_rel_plt.sh_type =3D=3D SHT_RELA) { --=20 2.34.1 From nobody Sun Sep 14 14:27:37 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 6A741C25B4E for ; Fri, 20 Jan 2023 12:35:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230165AbjATMfa (ORCPT ); Fri, 20 Jan 2023 07:35:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58566 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230123AbjATMfZ (ORCPT ); Fri, 20 Jan 2023 07:35:25 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AA1ECBC89B; Fri, 20 Jan 2023 04:35:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674218121; x=1705754121; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=hqHivyH65I+zqpnOfFxb+qPLJLaHYIND6bguoxV+hQg=; b=lhDrKApw185+HQTFm8vX/tWsbEQaC1oGaqnc3jOaUtnPt/CYJEgJ+QsE uaZWlDAt8CAxnZttKJ5j62s8afaLliUZaZcVenKd2IAEbbTnkAgqBcDnC 6HT4s0D7FhUeX0UcIAaNiPIGjRjWWxRlf1bD5tg2b613U36mKV8xOVQaD xFFdkr6ZLMaz9dbk3WvyMdGlaPcnnmClPXcIWnG47cpMWBcljikIEKixN crXm+DY9MMKQuCCbUAJzrB/R+GAzqFhsUuyEbqqvkBOQTwKvNW/FXVwih /IRLGZVZeci35iHLmTpTq6cnzXvIMklL8eOFUQdLDfYtCBVHKmELURw7K A==; X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="387935186" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="387935186" 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:21 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="692847425" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="692847425" 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:18 -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 03/10] perf symbols: Check plt_entry_size is not zero Date: Fri, 20 Jan 2023 14:34:49 +0200 Message-Id: <20230120123456.12449-4-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" The code expects non-zero plt_entry_size. Check it and add a debug message to print if it is zero. Signed-off-by: Adrian Hunter Acked-by: Ian Rogers --- tools/perf/util/symbol-elf.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 4605680a22a3..c6a4e6c73990 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -323,30 +323,33 @@ static char *demangle_sym(struct dso *dso, int kmodul= e, const char *elf_name) return demangled; } =20 -static void get_plt_sizes(GElf_Ehdr *ehdr, GElf_Shdr *shdr_plt, +static bool get_plt_sizes(struct dso *dso, GElf_Ehdr *ehdr, GElf_Shdr *shd= r_plt, u64 *plt_header_size, u64 *plt_entry_size) { switch (ehdr->e_machine) { case EM_ARM: *plt_header_size =3D 20; *plt_entry_size =3D 12; - return; + return true; case EM_AARCH64: *plt_header_size =3D 32; *plt_entry_size =3D 16; - return; + return true; case EM_SPARC: *plt_header_size =3D 48; *plt_entry_size =3D 12; - return; + return true; case EM_SPARCV9: *plt_header_size =3D 128; *plt_entry_size =3D 32; - return; + return true; default: /* FIXME: s390/alpha/mips/parisc/poperpc/sh/xtensa need to be ch= ecked */ *plt_header_size =3D shdr_plt->sh_entsize; *plt_entry_size =3D shdr_plt->sh_entsize; - return; + if (*plt_entry_size) + return true; + pr_debug("Missing PLT entry size for %s\n", dso->long_name); + return false; } } =20 @@ -438,7 +441,8 @@ 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; - get_plt_sizes(&ehdr, &shdr_plt, &plt_header_size, &plt_entry_size); + 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 From nobody Sun Sep 14 14:27:38 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 37FFAC25B4E for ; Fri, 20 Jan 2023 12:35:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230163AbjATMfc (ORCPT ); Fri, 20 Jan 2023 07:35:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58602 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230148AbjATMfZ (ORCPT ); Fri, 20 Jan 2023 07:35:25 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 336DEBC88A; Fri, 20 Jan 2023 04:35:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674218124; x=1705754124; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=lNQ8moBpynyS7kwekoi/lFg0Su2X2visRdfx5+bbhQc=; b=UjkGq5ENE3mNuNGOAA9xH4MGsf9TDKIRKo241TeLgm3vN5dOrRoOch/c 1GkVpWnBe74zE6zjTorqXb7Pd7zYW6XjcfCiYYsdjKKe1mRO46ngIo05M otdF8jZsRrDxdD55DDPZQgKEDAjA5ryh4SjU4Icgc35pMJJnFSeVTb5Dt LIfvumoC5DTB/y7jbfe2fpgLnLTC+GJ+xv1rMgr6cQf6ZDL0TpM/gR1VW 8Jdo4G+/8wC23LHAQSvwIdEkEVCctYiFy9w/WKIffMF/I04odkhJnk4hN YBnWtxSNRUsojTXNq6K2xL8bKt4IEgJWdrpJqoPaqybClwkROqF8maEDX Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="387935204" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="387935204" 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:23 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="692847434" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="692847434" 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:21 -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 04/10] perf symbols: Add dso__find_symbol_nocache() Date: Fri, 20 Jan 2023 14:34:50 +0200 Message-Id: <20230120123456.12449-5-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" Symbols should not be cached when there are more symbols still to add. Add dso__find_symbol_nocache() to facilitate that. Signed-off-by: Adrian Hunter Acked-by: Ian Rogers --- tools/perf/util/symbol.c | 5 +++++ tools/perf/util/symbol.h | 1 + 2 files changed, 6 insertions(+) diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index a3a165ae933a..a024f06f75d8 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -556,6 +556,11 @@ struct symbol *dso__find_symbol(struct dso *dso, u64 a= ddr) return dso->last_find_result.symbol; } =20 +struct symbol *dso__find_symbol_nocache(struct dso *dso, u64 addr) +{ + return symbols__find(&dso->symbols, addr); +} + struct symbol *dso__first_symbol(struct dso *dso) { return symbols__first(&dso->symbols); diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index f735108c4d4e..2fdeb22bd02f 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h @@ -148,6 +148,7 @@ void dso__delete_symbol(struct dso *dso, struct symbol *sym); =20 struct symbol *dso__find_symbol(struct dso *dso, u64 addr); +struct symbol *dso__find_symbol_nocache(struct dso *dso, u64 addr); struct symbol *dso__find_symbol_by_name(struct dso *dso, const char *name); =20 struct symbol *symbol__next_by_name(struct symbol *sym); --=20 2.34.1 From nobody Sun Sep 14 14:27:38 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 D968FC27C76 for ; Fri, 20 Jan 2023 12:35:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230243AbjATMfr (ORCPT ); Fri, 20 Jan 2023 07:35:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230180AbjATMfe (ORCPT ); Fri, 20 Jan 2023 07:35:34 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A8D26BCE06; Fri, 20 Jan 2023 04:35:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674218126; x=1705754126; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=UxtJ1rP66dQ3RmSMBjvuUkGyB8tVAPu0JZkPBT1WvxI=; b=QnRWmb//iRSmbXKXl/YpxMmnxA9055P/PIqAqLlpGx2CIvaYpMth528M aodCoRwBm0zLgfA7/0VLCIKZ+pHWdrCrZveC6whsSS9d2bQclf0sV31kZ Ze42hZabzfUKsNDvSwDWM2SUGflevPo5OVYgTsZF9BK8w1NeKT5n3/3st nz+RpoEgvyi8nyHm+QS4sG0tkt2tjb3MlI64NOgyWMWP+XHWZ9bgUgneL NoF3Dwjvlc8j54BlSKAdccK0MUni+HTXUMp8c8IomCOV8WIUd3RDY6sF8 VxRd0+XXrmsi07IBSvBaCg/Ixyfk0jK1plM6RngIOw5ZDGVsOdWy43fIh w==; X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="387935223" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="387935223" 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:26 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="692847438" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="692847438" 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:24 -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 05/10] perf symbols: Slightly simplify 'err' usage in dso__synthesize_plt_symbols() Date: Fri, 20 Jan 2023 14:34:51 +0200 Message-Id: <20230120123456.12449-6-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" Return zero directly instead of needless 'goto out_elf_end' that does the same thing. That allows 'err' to be initialized to -1 instead of having to change its value later. Signed-off-by: Adrian Hunter Acked-by: Ian Rogers --- tools/perf/util/symbol-elf.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index c6a4e6c73990..990a2c6037bb 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -384,7 +384,7 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct= symsrc *ss) GElf_Ehdr ehdr; char sympltname[1024]; Elf *elf; - int nr =3D 0, symidx, err =3D 0; + int nr =3D 0, symidx, err =3D -1; =20 if (!ss->dynsym) return 0; @@ -397,7 +397,7 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct= symsrc *ss) dynsym_idx =3D ss->dynsym_idx; =20 if (scn_dynsym =3D=3D NULL) - goto out_elf_end; + return 0; =20 scn_plt_rel =3D elf_section_by_name(elf, &ehdr, &shdr_rel_plt, ".rela.plt", NULL); @@ -405,11 +405,9 @@ int dso__synthesize_plt_symbols(struct dso *dso, struc= t symsrc *ss) scn_plt_rel =3D elf_section_by_name(elf, &ehdr, &shdr_rel_plt, ".rel.plt", NULL); if (scn_plt_rel =3D=3D NULL) - goto out_elf_end; + return 0; } =20 - err =3D -1; - if (shdr_rel_plt.sh_link !=3D dynsym_idx) goto out_elf_end; =20 --=20 2.34.1 From nobody Sun Sep 14 14:27:38 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 0469DC05027 for ; Fri, 20 Jan 2023 12:35:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230162AbjATMf5 (ORCPT ); Fri, 20 Jan 2023 07:35:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230192AbjATMfv (ORCPT ); Fri, 20 Jan 2023 07:35:51 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCF6CBF5EB; Fri, 20 Jan 2023 04:35:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674218129; x=1705754129; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=JH3uowZm2/EOmx74lVqvydtWQ0K9xGM+P+gA7PXly5g=; b=HYSip1CFyvJ3Ob6Md91EkTc8u2dj9IfnC7PUrHcByJUwA6dd5vOAax32 1DYVFicwa/S808ZrHAIbXlNA8p9mJF0dsEdNDbQPEyJAfGcD8rF415VcK xVGmJas1ly1P4MHBaOEUQXhIe/KXxBjKQGB+1fEGxa0qaR5ywbIvbeJpt pSFLEm+tpjsykvS2hR+vLsXD41oA72LsRqnPnlbx+m4aIA11Oi8o1lYEH 9k6V+5HzaGJf+0FW3zoUluJK3CXgvURkYlc0RxKwSdR3AIWBj4oXrtHXH ZwH4Pdg60b6mf49awK8YbBZ1wizAKq7bHsaM31UsXfFqjx2RPYd2EM+rL A==; X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="387935241" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="387935241" 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:28 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="692847442" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="692847442" 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:26 -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 06/10] perf symbols: Do not check ss->dynsym twice Date: Fri, 20 Jan 2023 14:34:52 +0200 Message-Id: <20230120123456.12449-7-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" ss->dynsym is checked to be not NULL twice. Remove the first check because, in fact, there can be a plt with no dynsym, which is something that will be dealt with later. Signed-off-by: Adrian Hunter Acked-by: Ian Rogers --- tools/perf/util/symbol-elf.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 990a2c6037bb..87b82507c205 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -386,9 +386,6 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct= symsrc *ss) Elf *elf; int nr =3D 0, symidx, err =3D -1; =20 - if (!ss->dynsym) - return 0; - elf =3D ss->elf; ehdr =3D ss->ehdr; =20 --=20 2.34.1 From nobody Sun Sep 14 14:27:38 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 Acked-by: Ian Rogers --- 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 From nobody Sun Sep 14 14:27:38 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 47164C05027 for ; Fri, 20 Jan 2023 12:36:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230282AbjATMgJ (ORCPT ); Fri, 20 Jan 2023 07:36:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230168AbjATMgA (ORCPT ); Fri, 20 Jan 2023 07:36:00 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E1EDABD15B; Fri, 20 Jan 2023 04:35:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674218134; x=1705754134; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9Td56AXPQefHBhNcNDmLaayNhsuUevf9TJ/QNvlypS0=; b=STQG77oKiYSw/O0HI1bFpLgstPKox8xkxJIDDRQED4PpUEo+PYQYxlPu 3yVcjaooXfDzuJYXb/W3MbdAvSOpsciGCDG2GvtB9O3f2+3OoJqzZPtu+ w7PT4FxpPYlOABnMYPDFRgXU9MSRvfDfSd3G+dwpBghapnUbgP8xY/FDT uWWT2V0xM0HDCRI5rnIrMlpMM+1qzWuW15OuCMDENotJfg0SQLH9gNuR3 vJ40XOShX6diwxTrO17GT9t1dqLckaXj2+d6Zo3I3j64R6aunDTbtAIwT uMqLPVgWEf+pQCCQXp5uxZMjR0G2eJY9HOZ2HfnH27KdRyb3viXmd76rq A==; X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="387935279" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="387935279" 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:33 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="692847452" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="692847452" 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:31 -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 08/10] perf symbols: Allow for .plt entries with no symbol Date: Fri, 20 Jan 2023 14:34:54 +0200 Message-Id: <20230120123456.12449-9-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" Create a sensible name for .plt entries with no symbol. Example: Before: $ perf test --dso /usr/lib/x86_64-linux-gnu/libc.so.6 -vv Symbols 2>/tmp= /cmp1.txt After: $ perf test --dso /usr/lib/x86_64-linux-gnu/libc.so.6 -vv Symbols 2>/tmp= /cmp2.txt $ diff /tmp/cmp1.txt /tmp/cmp2.txt 4c4 < test child forked, pid 53043 --- > test child forked, pid 54372 23,62c23,62 < 280f0-28100 g @plt < 28100-28110 g @plt < 28110-28120 g @plt < 28120-28130 g @plt < 28130-28140 g @plt < 28140-28150 g @plt < 28150-28160 g @plt < 28160-28170 g @plt < 28170-28180 g @plt < 28180-28190 g @plt < 28190-281a0 g @plt < 281a0-281b0 g @plt < 281b0-281c0 g @plt < 281c0-281d0 g @plt < 281d0-281e0 g @plt < 281e0-281f0 g @plt < 281f0-28200 g @plt < 28200-28210 g @plt < 28210-28220 g @plt < 28220-28230 g @plt < 28230-28240 g @plt < 28240-28250 g @plt < 28250-28260 g @plt < 28260-28270 g @plt < 28270-28280 g @plt < 28280-28290 g @plt < 28290-282a0 g @plt < 282a0-282b0 g @plt < 282b0-282c0 g @plt < 282c0-282d0 g @plt < 282d0-282e0 g @plt < 282e0-282f0 g @plt < 282f0-28300 g @plt < 28300-28310 g @plt < 28310-28320 g @plt < 28320-28330 g @plt < 28330-28340 g @plt < 28340-28350 g @plt < 28350-28360 g @plt < 28360-28370 g @plt --- > 280f0-28100 g offset_0x280f0@plt > 28100-28110 g offset_0x28100@plt > 28110-28120 g offset_0x28110@plt > 28120-28130 g offset_0x28120@plt > 28130-28140 g offset_0x28130@plt > 28140-28150 g offset_0x28140@plt > 28150-28160 g offset_0x28150@plt > 28160-28170 g offset_0x28160@plt > 28170-28180 g offset_0x28170@plt > 28180-28190 g offset_0x28180@plt > 28190-281a0 g offset_0x28190@plt > 281a0-281b0 g offset_0x281a0@plt > 281b0-281c0 g offset_0x281b0@plt > 281c0-281d0 g offset_0x281c0@plt > 281d0-281e0 g offset_0x281d0@plt > 281e0-281f0 g offset_0x281e0@plt > 281f0-28200 g offset_0x281f0@plt > 28200-28210 g offset_0x28200@plt > 28210-28220 g offset_0x28210@plt > 28220-28230 g offset_0x28220@plt > 28230-28240 g offset_0x28230@plt > 28240-28250 g offset_0x28240@plt > 28250-28260 g offset_0x28250@plt > 28260-28270 g offset_0x28260@plt > 28270-28280 g offset_0x28270@plt > 28280-28290 g offset_0x28280@plt > 28290-282a0 g offset_0x28290@plt > 282a0-282b0 g offset_0x282a0@plt > 282b0-282c0 g offset_0x282b0@plt > 282c0-282d0 g offset_0x282c0@plt > 282d0-282e0 g offset_0x282d0@plt > 282e0-282f0 g offset_0x282e0@plt > 282f0-28300 g offset_0x282f0@plt > 28300-28310 g offset_0x28300@plt > 28310-28320 g offset_0x28310@plt > 28320-28330 g offset_0x28320@plt > 28330-28340 g offset_0x28330@plt > 28340-28350 g offset_0x28340@plt > 28350-28360 g offset_0x28350@plt > 28360-28370 g offset_0x28360@plt Signed-off-by: Adrian Hunter Acked-by: Ian Rogers --- tools/perf/util/symbol-elf.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index a8b7c3860b2d..6e4a22acefba 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -470,8 +470,11 @@ int dso__synthesize_plt_symbols(struct dso *dso, struc= t symsrc *ss) demangled =3D demangle_sym(dso, 0, elf_name); if (demangled !=3D NULL) elf_name =3D demangled; - snprintf(sympltname, sizeof(sympltname), - "%s@plt", elf_name); + if (*elf_name) + snprintf(sympltname, sizeof(sympltname), "%s@plt", elf_name); + else + snprintf(sympltname, sizeof(sympltname), + "offset_%#" PRIx64 "@plt", plt_offset); free(demangled); =20 f =3D symbol__new(plt_offset, plt_entry_size, @@ -496,8 +499,11 @@ int dso__synthesize_plt_symbols(struct dso *dso, struc= t symsrc *ss) demangled =3D demangle_sym(dso, 0, elf_name); if (demangled !=3D NULL) elf_name =3D demangled; - snprintf(sympltname, sizeof(sympltname), - "%s@plt", elf_name); + if (*elf_name) + snprintf(sympltname, sizeof(sympltname), "%s@plt", elf_name); + else + snprintf(sympltname, sizeof(sympltname), + "offset_%#" PRIx64 "@plt", plt_offset); free(demangled); =20 f =3D symbol__new(plt_offset, plt_entry_size, --=20 2.34.1 From nobody Sun Sep 14 14:27:38 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 B3514C27C76 for ; Fri, 20 Jan 2023 12:36:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230328AbjATMgV (ORCPT ); Fri, 20 Jan 2023 07:36:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59852 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230293AbjATMgM (ORCPT ); Fri, 20 Jan 2023 07:36:12 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 31061BF8BF; Fri, 20 Jan 2023 04:35:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674218145; x=1705754145; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+4JYvfJ/BZArt9A+5Y2h+61dVJ0kg1blPxurYa6kQaY=; b=OJU4Ygzq7YJHjJqskpX2HyqlMZofw8IMs7KGILuC/QzzW+PZCTe7lj9V iOHvDtlck2oX6O5nsyhY36fsqUg5YH7bHv4atn+6l7+racO3u66YXUbVs seDTCJXEFnGAlLSjjSfTXebnyo5bs7tmipSCPbGYiD+Gdka8faqMDVYEE WFfTU26zjZ5SGiqzGUqAnDjUKsVbna6ynTwu3IbkWtYe2z9I9GdAJ7YDm 3PvPMkR/5NKA7mbV1JB+wcbuIPFStmcef+Hg935kEf926dkdUyFsi/7X8 q+9U6L0UCQMgAg0qbFA9ktG654iuF4/wFc7E4q00JSZbwVr9wNC4R5lRj w==; X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="387935298" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="387935298" 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:36 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="692847457" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="692847457" 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:33 -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 09/10] perf symbols: Combine handling for SHT_RELA and SHT_REL Date: Fri, 20 Jan 2023 14:34:55 +0200 Message-Id: <20230120123456.12449-10-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" SHT_REL and SHT_RELA are handled the same way. Simplify by combining the handling. Signed-off-by: Adrian Hunter Acked-by: Ian Rogers --- tools/perf/util/symbol-elf.c | 75 +++++++++++++----------------------- 1 file changed, 27 insertions(+), 48 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 6e4a22acefba..e274f646ac32 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -323,6 +323,23 @@ static char *demangle_sym(struct dso *dso, int kmodule= , const char *elf_name) return demangled; } =20 +struct rel_info { + bool is_rela; + Elf_Data *reldata; + GElf_Rela rela; + GElf_Rel rel; +}; + +static u32 get_rel_symidx(struct rel_info *ri, u32 idx) +{ + if (ri->is_rela) { + gelf_getrela(ri->reldata, idx, &ri->rela); + return GELF_R_SYM(ri->rela.r_info); + } + gelf_getrel(ri->reldata, idx, &ri->rel); + return GELF_R_SYM(ri->rel.r_info); +} + static bool get_plt_sizes(struct dso *dso, GElf_Ehdr *ehdr, GElf_Shdr *shd= r_plt, u64 *plt_header_size, u64 *plt_entry_size) { @@ -353,16 +370,6 @@ static bool get_plt_sizes(struct dso *dso, GElf_Ehdr *= ehdr, GElf_Shdr *shdr_plt, } } =20 -#define elf_section__for_each_rel(reldata, pos, pos_mem, idx, nr_entries) \ - for (idx =3D 0, pos =3D gelf_getrel(reldata, 0, &pos_mem); \ - idx < nr_entries; \ - ++idx, pos =3D gelf_getrel(reldata, idx, &pos_mem)) - -#define elf_section__for_each_rela(reldata, pos, pos_mem, idx, nr_entries)= \ - for (idx =3D 0, pos =3D gelf_getrela(reldata, 0, &pos_mem); \ - idx < nr_entries; \ - ++idx, pos =3D gelf_getrela(reldata, idx, &pos_mem)) - /* * We need to check if we have a .dynsym, so that we can handle the * .plt, synthesizing its symbols, that aren't on the symtabs (be it @@ -378,13 +385,14 @@ int dso__synthesize_plt_symbols(struct dso *dso, stru= ct symsrc *ss) GElf_Shdr shdr_plt; struct symbol *f; GElf_Shdr shdr_rel_plt, shdr_dynsym; - Elf_Data *reldata, *syms, *symstrs; + Elf_Data *syms, *symstrs; Elf_Scn *scn_plt_rel, *scn_symstrs, *scn_dynsym; size_t dynsym_idx; GElf_Ehdr ehdr; char sympltname[1024]; Elf *elf; - int nr =3D 0, symidx, err =3D -1; + int nr =3D 0, err =3D -1; + struct rel_info ri =3D { .is_rela =3D false }; =20 elf =3D ss->elf; ehdr =3D ss->ehdr; @@ -433,8 +441,8 @@ int dso__synthesize_plt_symbols(struct dso *dso, struct= symsrc *ss) * Fetch the relocation section to find the idxes to the GOT * and the symbols in the .dynsym they refer to. */ - reldata =3D elf_getdata(scn_plt_rel, NULL); - if (reldata =3D=3D NULL) + ri.reldata =3D elf_getdata(scn_plt_rel, NULL); + if (!ri.reldata) goto out_elf_end; =20 syms =3D elf_getdata(scn_dynsym, NULL); @@ -456,44 +464,15 @@ int dso__synthesize_plt_symbols(struct dso *dso, stru= ct symsrc *ss) plt_offset =3D shdr_plt.sh_offset; plt_offset +=3D plt_header_size; =20 - if (shdr_rel_plt.sh_type =3D=3D SHT_RELA) { - GElf_Rela pos_mem, *pos; + ri.is_rela =3D shdr_rel_plt.sh_type =3D=3D SHT_RELA; =20 - elf_section__for_each_rela(reldata, pos, pos_mem, idx, - nr_rel_entries) { + if (shdr_rel_plt.sh_type =3D=3D SHT_RELA || + shdr_rel_plt.sh_type =3D=3D SHT_REL) { + for (idx =3D 0; idx < nr_rel_entries; idx++) { const char *elf_name =3D NULL; char *demangled =3D NULL; - symidx =3D GELF_R_SYM(pos->r_info); - gelf_getsym(syms, symidx, &sym); - - elf_name =3D elf_sym__name(&sym, symstrs); - demangled =3D demangle_sym(dso, 0, elf_name); - if (demangled !=3D NULL) - elf_name =3D demangled; - if (*elf_name) - snprintf(sympltname, sizeof(sympltname), "%s@plt", elf_name); - else - snprintf(sympltname, sizeof(sympltname), - "offset_%#" PRIx64 "@plt", plt_offset); - free(demangled); =20 - f =3D symbol__new(plt_offset, plt_entry_size, - STB_GLOBAL, STT_FUNC, sympltname); - if (!f) - goto out_elf_end; - - plt_offset +=3D plt_entry_size; - symbols__insert(&dso->symbols, f); - ++nr; - } - } else if (shdr_rel_plt.sh_type =3D=3D SHT_REL) { - GElf_Rel pos_mem, *pos; - elf_section__for_each_rel(reldata, pos, pos_mem, idx, - nr_rel_entries) { - const char *elf_name =3D NULL; - char *demangled =3D NULL; - symidx =3D GELF_R_SYM(pos->r_info); - gelf_getsym(syms, symidx, &sym); + gelf_getsym(syms, get_rel_symidx(&ri, idx), &sym); =20 elf_name =3D elf_sym__name(&sym, symstrs); demangled =3D demangle_sym(dso, 0, elf_name); --=20 2.34.1 From nobody Sun Sep 14 14:27:38 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 18405C05027 for ; Fri, 20 Jan 2023 12:36:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230340AbjATMgd (ORCPT ); Fri, 20 Jan 2023 07:36:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59814 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230283AbjATMgT (ORCPT ); Fri, 20 Jan 2023 07:36:19 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4B164BC895; Fri, 20 Jan 2023 04:35:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1674218154; x=1705754154; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=usKQ9P+Ke/475dpAvzHSLqve+rQfd02M1v4DhbzDTsE=; b=YMWiOHr2oT+n4EWDUwhX/9KeSFE9aZCWIiS+TBci4MYorF03v1fd8Ycx GAFvJJD5RibI2H/5X58h1mFB5tHvSEev+3aRnSxwjiCJw6YBzgp7V7TbN fPvVp1OWM1J7oh+KaYEosWh7QBMLhWjb5O3GBp3i3Fqukwj8lm58CEumF zTMGgpHtmESF7OuO26nVQaliQs+hUqyc3hoqp0VRnENXUIAOMpTwVKmfu 2B5+V4ThnyXQr7mWCEM9h7rJu4fOEH2BmouBgmSGdw0ZbajZSC4AXoR7V ivV8B4EEPpUPwMNcJf5DuwkBs9pXgILdsDEvmkqdQhNNcie3tPhYeOH9i Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="387935315" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="387935315" 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:38 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10595"; a="692847463" X-IronPort-AV: E=Sophos;i="5.97,232,1669104000"; d="scan'208";a="692847463" 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:36 -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 10/10] perf symbols: Check SHT_RELA and SHT_REL type earlier Date: Fri, 20 Jan 2023 14:34:56 +0200 Message-Id: <20230120123456.12449-11-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" Make the code more readable by checking for SHT_RELA and SHT_REL type earlier. Signed-off-by: Adrian Hunter Acked-by: Ian Rogers --- tools/perf/util/symbol-elf.c | 54 ++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index e274f646ac32..aa62735aea7b 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c @@ -434,6 +434,10 @@ int dso__synthesize_plt_symbols(struct dso *dso, struc= t symsrc *ss) return 0; } =20 + if (shdr_rel_plt.sh_type !=3D SHT_RELA && + shdr_rel_plt.sh_type !=3D SHT_REL) + return 0; + if (shdr_rel_plt.sh_link !=3D dynsym_idx) goto out_elf_end; =20 @@ -466,34 +470,30 @@ int dso__synthesize_plt_symbols(struct dso *dso, stru= ct symsrc *ss) =20 ri.is_rela =3D shdr_rel_plt.sh_type =3D=3D SHT_RELA; =20 - if (shdr_rel_plt.sh_type =3D=3D SHT_RELA || - shdr_rel_plt.sh_type =3D=3D SHT_REL) { - for (idx =3D 0; idx < nr_rel_entries; idx++) { - const char *elf_name =3D NULL; - char *demangled =3D NULL; - - gelf_getsym(syms, get_rel_symidx(&ri, idx), &sym); - - elf_name =3D elf_sym__name(&sym, symstrs); - demangled =3D demangle_sym(dso, 0, elf_name); - if (demangled !=3D NULL) - elf_name =3D demangled; - if (*elf_name) - snprintf(sympltname, sizeof(sympltname), "%s@plt", elf_name); - else - snprintf(sympltname, sizeof(sympltname), - "offset_%#" PRIx64 "@plt", plt_offset); - free(demangled); - - f =3D symbol__new(plt_offset, plt_entry_size, - STB_GLOBAL, STT_FUNC, sympltname); - if (!f) - goto out_elf_end; + for (idx =3D 0; idx < nr_rel_entries; idx++) { + const char *elf_name =3D NULL; + char *demangled =3D NULL; =20 - plt_offset +=3D plt_entry_size; - symbols__insert(&dso->symbols, f); - ++nr; - } + gelf_getsym(syms, get_rel_symidx(&ri, idx), &sym); + + elf_name =3D elf_sym__name(&sym, symstrs); + demangled =3D demangle_sym(dso, 0, elf_name); + if (demangled) + elf_name =3D demangled; + if (*elf_name) + snprintf(sympltname, sizeof(sympltname), "%s@plt", elf_name); + else + snprintf(sympltname, sizeof(sympltname), + "offset_%#" PRIx64 "@plt", plt_offset); + free(demangled); + + f =3D symbol__new(plt_offset, plt_entry_size, STB_GLOBAL, STT_FUNC, symp= ltname); + if (!f) + goto out_elf_end; + + plt_offset +=3D plt_entry_size; + symbols__insert(&dso->symbols, f); + ++nr; } =20 err =3D 0; --=20 2.34.1