Patch "perf unwind: Set userdata for all __report_module() paths" has been added to the 5.11-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 unwind: Set userdata for all __report_module() paths

to the 5.11-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-unwind-set-userdata-for-all-__report_module-pat.patch
and it can be found in the queue-5.11 subdirectory.

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



commit 463e8b428d3c0609d5e2fd631c3861f6d5193498
Author: Dave Rigby <d.rigby@xxxxxx>
Date:   Thu Feb 18 16:56:54 2021 +0000

    perf unwind: Set userdata for all __report_module() paths
    
    [ Upstream commit 4e1481445407b86a483616c4542ffdc810efb680 ]
    
    When locating the DWARF module for a given address, __find_debuginfo()
    requires a 'struct dso' passed via the userdata argument.
    
    However, this field is only set in __report_module() if the module is
    found in via dwfl_addrmodule(), not if it is found later via
    dwfl_report_elf().
    
    Set userdata irrespective of how the DWARF module was found, as long as
    we found a module.
    
    Fixes: bf53fc6b5f41 ("perf unwind: Fix separate debug info files when using elfutils' libdw's unwinder")
    Signed-off-by: Dave Rigby <d.rigby@xxxxxx>
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=211801
    Acked-by: Jan Kratochvil <jan.kratochvil@xxxxxxxxxx>
    Acked-by: Jiri Olsa <jolsa@xxxxxxxxxx>
    Link: https://lore.kernel.org/linux-perf-users/20210218165654.36604-1-d.rigby@xxxxxx/
    Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/perf/util/unwind-libdw.c b/tools/perf/util/unwind-libdw.c
index 0ada907c60d49..a74b517f74974 100644
--- a/tools/perf/util/unwind-libdw.c
+++ b/tools/perf/util/unwind-libdw.c
@@ -60,10 +60,8 @@ static int __report_module(struct addr_location *al, u64 ip,
 	mod = dwfl_addrmodule(ui->dwfl, ip);
 	if (mod) {
 		Dwarf_Addr s;
-		void **userdatap;
 
-		dwfl_module_info(mod, &userdatap, &s, NULL, NULL, NULL, NULL, NULL);
-		*userdatap = dso;
+		dwfl_module_info(mod, NULL, &s, NULL, NULL, NULL, NULL, NULL);
 		if (s != al->map->start - al->map->pgoff)
 			mod = 0;
 	}
@@ -79,6 +77,13 @@ static int __report_module(struct addr_location *al, u64 ip,
 					      al->map->start - al->map->pgoff, false);
 	}
 
+	if (mod) {
+		void **userdatap;
+
+		dwfl_module_info(mod, &userdatap, NULL, NULL, NULL, NULL, NULL, NULL);
+		*userdatap = dso;
+	}
+
 	return mod && dwfl_addrmodule(ui->dwfl, ip) == mod ? 0 : -1;
 }
 



[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