Patch "perf symbol: Prefer non-label symbols with same address" has been added to the 6.13-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    perf symbol: Prefer non-label symbols with same address

to the 6.13-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     perf-symbol-prefer-non-label-symbols-with-same-addre.patch
and it can be found in the queue-6.13 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 476e2b4a1cd0f300f2ee2ede8f09424aa88a0eb9
Author: Namhyung Kim <namhyung@xxxxxxxxxx>
Date:   Thu Jan 2 12:32:51 2025 -0800

    perf symbol: Prefer non-label symbols with same address
    
    [ Upstream commit 8c2eafbbfd782d6ad270ca2de21b529ac57de0f4 ]
    
    When there are more than one symbols at the same address, it needs to
    choose which one is better.  In choose_best_symbol() it didn't check the
    type of symbols.  It's possible to have labels in other symbols and in
    that case, it would be better to pick the actual symbol over the labels.
    To minimize the possible impact on other symbols, I only check NOTYPE
    symbols specifically.
    
      $ readelf -sW vmlinux | grep -e __do_softirq -e __softirqentry_text_start
      105089: ffffffff82000000   814 FUNC    GLOBAL DEFAULT    1 __do_softirq
      111954: ffffffff82000000     0 NOTYPE  GLOBAL DEFAULT    1 __softirqentry_text_start
    
    The commit 77b004f4c5c3c90b tried to do the same by not giving the size
    to the label symbols but it seems there's some label-only symbols in asm
    code.  Let's restore the original code and choose the right symbol using
    type of the symbols.
    
    Fixes: 77b004f4c5c3c90b ("perf symbol: Do not fixup end address of labels")
    Reported-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
    Tested-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
    Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx>
    Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>
    Cc: Christophe Leroy <christophe.leroy@xxxxxxxxxx>
    Cc: Ian Rogers <irogers@xxxxxxxxxx>
    Cc: James Clark <james.clark@xxxxxxxxxx>
    Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
    Cc: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
    Link: http://lore.kernel.org/lkml/Z3b-DqBMnNb4ucEm@xxxxxxxxxx
    Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 0037f11639195..49b08adc6ee34 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -154,6 +154,13 @@ static int choose_best_symbol(struct symbol *syma, struct symbol *symb)
 	else if ((a == 0) && (b > 0))
 		return SYMBOL_B;
 
+	if (syma->type != symb->type) {
+		if (syma->type == STT_NOTYPE)
+			return SYMBOL_B;
+		if (symb->type == STT_NOTYPE)
+			return SYMBOL_A;
+	}
+
 	/* Prefer a non weak symbol over a weak one */
 	a = syma->binding == STB_WEAK;
 	b = symb->binding == STB_WEAK;
@@ -257,7 +264,7 @@ void symbols__fixup_end(struct rb_root_cached *symbols, bool is_kallsyms)
 		 * like in:
 		 *   ffffffffc1937000 T hdmi_driver_init  [snd_hda_codec_hdmi]
 		 */
-		if (prev->end == prev->start && prev->type != STT_NOTYPE) {
+		if (prev->end == prev->start) {
 			const char *prev_mod;
 			const char *curr_mod;
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux