lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:	Thu, 10 Feb 2011 20:17:35 +0100
From:	Peter Zijlstra <peterz@...radead.org>
To:	Arnaldo Carvalho de Melo <acme@...hat.com>
Cc:	Lin Ming <ming.m.lin@...el.com>, mingo@...e.hu,
	Stephane Eranian <eranian@...gle.com>, fweisbec@...il.com,
	linux-kernel <linux-kernel@...r.kernel.org>
Subject: Re: [RFC] perf tool: load data variable symbols

On Thu, 2011-02-10 at 14:25 -0200, Arnaldo Carvalho de Melo wrote:
> Em Thu, Feb 10, 2011 at 10:15:33PM +0800, Lin Ming escreveu:
> > Hi, all
> > 
> > Currently, perf tool only load function symbols when parsing perf.data.
> > 
> > But it is also helpful if variable symbols can be loaded.
> > 
> > For example, Intel load latency monitoring facility records data linear
> > address of the load operation. It's useful if the data linear address is
> > resolved into symbol, just like functions.
> > 
> > enum map_type {
> >         MAP__FUNCTION = 0,
> >         MAP__VARIABLE,
> > };
> > 
> > We already have MAP__VARIABLE defined, although it's not used now.
> > 
> > For both kernel and userspace applications, we can load the variable
> > symbols from .data and .bss section.
> > 
> > What do you think?
> 
> It suposedly already works, as you noticed there are no users in the
> tree, IIRC I wrote that because somebody at IBM asked for it for some
> tool and since then I haven't heard about such tool.
> 
> It will load global variable locations from the symtab, like:
> 
> [acme@...icio linux]$ readelf -s ~/bin/perf  | grep OBJECT | grep nr_
>   216: 000000000076b9b0  8 OBJECT  LOCAL  DEFAULT   29 nr_tasks
>   222: 00000000007eba48  8 OBJECT  LOCAL  DEFAULT   29 nr_run_events
>   223: 00000000007eba50  8 OBJECT  LOCAL  DEFAULT   29 nr_sleep_events
>   224: 00000000007eba58  8 OBJECT  LOCAL  DEFAULT   29 nr_wakeup_events
>   225: 00000000007eba60  8 OBJECT  LOCAL  DEFAULT   29 nr_sleep_corrections
>   226: 00000000007eba68  8 OBJECT  LOCAL  DEFAULT   29 nr_run_events_optimized
>   233: 00000000007ebaa0  8 OBJECT  LOCAL  DEFAULT   29 nr_runs
>   238: 00000000007ebac0  8 OBJECT  LOCAL  DEFAULT   29 nr_timestamps
>   239: 00000000007ebac8  8 OBJECT  LOCAL  DEFAULT   29 nr_unordered_timestamps
>   240: 00000000007ebad0  8 OBJECT  LOCAL  DEFAULT   29 nr_state_machine_bugs
>   241: 00000000007ebad8  8 OBJECT  LOCAL  DEFAULT   29 nr_context_switch_bugs
>   242: 00000000007ebae0  8 OBJECT  LOCAL  DEFAULT   29 nr_events
>   243: 00000000007ebae8  8 OBJECT  LOCAL  DEFAULT   29 nr_lost_chunks
>   244: 00000000007ebaf0  8 OBJECT  LOCAL  DEFAULT   29 nr_lost_events
>   624: 0000000000817d28  8 OBJECT  LOCAL  DEFAULT   29 nr_unordered
>   700: 000000000081a200  8 OBJECT  LOCAL  DEFAULT   29 nr_allocs
>   701: 000000000081a208  8 OBJECT  LOCAL  DEFAULT   29 nr_cross_allocs
>  1145: 0000000000831180  4 OBJECT  LOCAL  DEFAULT   29 vmlinux_path__nr_entries
> [acme@...icio linux]$ 
> 
> But for things to start to get interesting we need to extend what we have in
> 'perf probe', i.e. the DWARF location expressions, to do reverse lookup based
> on data address from sample, register file snapshots, and those DWARF location
> expressions.

Another way is to reverse map the reported IP (PEBS + fixup) to a data
access using the dwarf info. That would also work for dynamically
allocated data structures.

(clearly you'd loose variable things like which entry in an array, but
you should still be able to identify the structure members)


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ