Use dwfl_report_elf() instead of offline
PATCH 1/1 Use dwfl_report_elf() instead of offline
Quoted 2 lines
From
8e6fb4c58d0d9f4798c191d840e32084b1217cc3Mon Sep 17 00:00:00 2001
From: Sukadev Bhattiprolu <[email protected]>
Date: Fri, 21 Nov 2014 20:33:53 -0500
Subject: [PATCH 1/1] Use dwfl_report_elf() instead of offline.
dwfl_report_offline() works only when libraries are prelinked.
Replace dwfl_report_offline() with dwfl_report_elf() so we correctly extract debug info even from libraries that are not prelinked.
--- tools/perf/arch/powerpc/util/skip-callchain-idx.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-)
tools/perf/arch/powerpc/util/skip-callchain-idx.c +11 -8
@@ -103,7 +103,7 @@ static Dwarf_Frame *get_eh_frame(Dwfl_Module *mod, Dwarf_Addr pc)return NULL ; } - result =dwarf_cfi_addrframe (cfi, pc, &frame); + result =dwarf_cfi_addrframe (cfi, pc-bias, &frame);if (result) {pr_debug ("%s(): %s\n" , __func__,dwfl_errmsg (-1 ));return NULL ;
@@ -128,7 +128,7 @@ static Dwarf_Frame *get_dwarf_frame(Dwfl_Module *mod, Dwarf_Addr pc)return NULL ; } - result =dwarf_cfi_addrframe (cfi, pc, &frame); + result =dwarf_cfi_addrframe (cfi, pc-bias, &frame);if (result) {pr_debug ("%s(): %s\n" , __func__,dwfl_errmsg (-1 ));return NULL ;
@@ -145,7 +145,7 @@ static Dwarf_Frame *get_dwarf_frame(Dwfl_Module *mod, Dwarf_Addr pc)* yet used) * -1 in case of errors */ -static int check_return_addr (struct dso *dso,Dwarf_Addr pc) +static int check_return_addr (struct dso *dso,u64 map_start,Dwarf_Addr pc) {int rc =-1 ;Dwfl *dwfl;
@@ -155,6 +155,7 @@ static int check_return_addr(struct dso *dso, Dwarf_Addr pc)Dwarf_Addr start = pc;Dwarf_Addr end = pc;bool signalp; +const char *exec_file = dso->long_name; dwfl = dso->dwfl;
@@ -165,8 +166,10 @@ static int check_return_addr(struct dso *dso, Dwarf_Addr pc)return -1 ; } -if (dwfl_report_offline (dwfl,"" , dso->long_name,-1 ) ==NULL ) { -pr_debug ("dwfl_report_offline() failed %s\n" , + mod =dwfl_report_elf (dwfl, exec_file, exec_file,-1 , + map_start, false); +if (!mod) { +pr_debug ("dwfl_report_elf() failed %s\n" ,dwarf_errmsg (-1 ));/* * We normally cache the DWARF debug info and never
@@ -256,10 +259,10 @@ int arch_skip_callchain_idx(struct thread *thread, struct ip_callchain *chain)return skip_slot; } - rc =check_return_addr (dso, ip); + rc =check_return_addr (dso, al.map->start, ip); -pr_debug ("DSO %s, nr %" PRIx64", ip 0x%" PRIx64"rc %d\n" , - dso->long_name, chain->nr, ip, rc); +pr_debug ("[DSO %s, sym %s, ip 0x%" PRIx64"] rc %d\n" , + dso->long_name, al.sym->name, ip, rc);if (rc ==0 ) {/*
Signature · 1 line
1.8.3.1
Quoted 6 lines · Sukadev Bhattiprolu
From
8e6fb4c58d0d9f4798c191d840e32084b1217cc3Mon Sep 17 00:00:00 2001
From: Sukadev Bhattiprolu <[email protected]>
Date: Fri, 21 Nov 2014 20:33:53 -0500
Subject: [PATCH 1/1] Usedwfl_report_elf()instead of offline.
Quoted 6 lines
dwfl_report_offline()works only when libraries are prelinked.Replace
dwfl_report_offline()withdwfl_report_elf()so we correctly extract debug info even from libraries that are not prelinked.Reported-by Jiri Olsa <[email protected]>
hi,
this is related to the powerpc issue I was just testing right? looks like this patch is different from what I was testing..
thanks,
jirka
Quoted 6 lines · Sukadev Bhattiprolu
From
8e6fb4c58d0d9f4798c191d840e32084b1217cc3Mon Sep 17 00:00:00 2001
From: Sukadev Bhattiprolu <[email protected]>
Date: Fri, 21 Nov 2014 20:33:53 -0500
Subject: [PATCH 1/1] Usedwfl_report_elf()instead of offline.
Quoted 7 lines
dwfl_report_offline()works only when libraries are prelinked.Replace
dwfl_report_offline()withdwfl_report_elf()so we correctly extract debug info even from libraries that are not prelinked.Reported-by Jiri Olsa <[email protected]>Signed-off-by Sukadev Bhattiprolu <[email protected]>
thanks,
jirka
tip-bot for Sukadev Bhattiprolu
merge bot[tip:perf/urgent] perf tools powerpc: Use dwfl_report_elf() instead of offline.
In reply to Sukadev Bhattiproluperf tools powerpc: Use dwfl_report_elf() instead of offline.
Commit-ID: 6bcf9c1ff3ec22fd81eba336737d9865476509b1 Gitweb: http://git.kernel.org/tip/6bcf9c1ff3ec22fd81eba336737d9865476509b1 Author: Sukadev Bhattiprolu <[email protected]> AuthorDate: Fri, 21 Nov 2014 20:33:53 -0500 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Fri, 16 Jan 2015 17:49:30 -0300
perf tools powerpc: Use dwfl_report_elf() instead of offline.
dwfl_report_offline() works only when libraries are prelinked.
Replace dwfl_report_offline() with dwfl_report_elf() so we correctly extract debug info even from libraries that are not prelinked.
--- tools/perf/arch/powerpc/util/skip-callchain-idx.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-)
tools/perf/arch/powerpc/util/skip-callchain-idx.c +11 -8
@@ -103,7 +103,7 @@ static Dwarf_Frame *get_eh_frame(Dwfl_Module *mod, Dwarf_Addr pc)return NULL ; } - result =dwarf_cfi_addrframe (cfi, pc, &frame); + result =dwarf_cfi_addrframe (cfi, pc-bias, &frame);if (result) {pr_debug ("%s(): %s\n" , __func__,dwfl_errmsg (-1 ));return NULL ;
@@ -128,7 +128,7 @@ static Dwarf_Frame *get_dwarf_frame(Dwfl_Module *mod, Dwarf_Addr pc)return NULL ; } - result =dwarf_cfi_addrframe (cfi, pc, &frame); + result =dwarf_cfi_addrframe (cfi, pc-bias, &frame);if (result) {pr_debug ("%s(): %s\n" , __func__,dwfl_errmsg (-1 ));return NULL ;
@@ -145,7 +145,7 @@ static Dwarf_Frame *get_dwarf_frame(Dwfl_Module *mod, Dwarf_Addr pc)* yet used) * -1 in case of errors */ -static int check_return_addr (struct dso *dso,Dwarf_Addr pc) +static int check_return_addr (struct dso *dso,u64 map_start,Dwarf_Addr pc) {int rc =-1 ;Dwfl *dwfl;
@@ -155,6 +155,7 @@ static int check_return_addr(struct dso *dso, Dwarf_Addr pc)Dwarf_Addr start = pc;Dwarf_Addr end = pc;bool signalp; +const char *exec_file = dso->long_name; dwfl = dso->dwfl;
@@ -165,8 +166,10 @@ static int check_return_addr(struct dso *dso, Dwarf_Addr pc)return -1 ; } -if (dwfl_report_offline (dwfl,"" , dso->long_name,-1 ) ==NULL ) { -pr_debug ("dwfl_report_offline() failed %s\n" , + mod =dwfl_report_elf (dwfl, exec_file, exec_file,-1 , + map_start, false); +if (!mod) { +pr_debug ("dwfl_report_elf() failed %s\n" ,dwarf_errmsg (-1 ));/* * We normally cache the DWARF debug info and never
@@ -256,10 +259,10 @@ int arch_skip_callchain_idx(struct thread *thread, struct ip_callchain *chain)return skip_slot; } - rc =check_return_addr (dso, ip); + rc =check_return_addr (dso, al.map->start, ip); -pr_debug ("DSO %s, nr %" PRIx64", ip 0x%" PRIx64"rc %d\n" , - dso->long_name, chain->nr, ip, rc); +pr_debug ("[DSO %s, sym %s, ip 0x%" PRIx64"] rc %d\n" , + dso->long_name, al.sym->name, ip, rc);if (rc ==0 ) {/*