linux/tools/perf/util
Hemant Kumar 060fa0c7a3 perf sdt: ELF support for SDT
This patch serves the initial support to identify and list SDT events in
binaries.  When programs containing SDT markers are compiled, gcc with
the help of assembler directives identifies them and places them in the
section ".note.stapsdt".

To find these markers from the binaries, one needs to traverse through
this section and parse the relevant details like the name, type and
location of the marker. Also, the original location could be skewed due
to the effect of prelinking. If that is the case, the locations need to
be adjusted.

The functions in this patch open a given ELF, find out the SDT section,
parse the relevant details, adjust the location (if necessary) and
populate them in a list.

A typical note entry in ".note.stapsdt" section is as follows :

                                 |--nhdr.n_namesz--|
                ------------------------------------
                |      nhdr      |     "stapsdt"   |
        -----   |----------------------------------|
         |      |  <location>       <base_address> |
         |      |  <semaphore>                     |
nhdr.n_descsize |  "provider_name"   "note_name"   |
         |      |   <args>                         |
        -----   |----------------------------------|
                |      nhdr      |     "stapsdt"   |
                |...

The above shows an excerpt from the section ".note.stapsdt".  'nhdr' is
a structure which has the note name size (n_namesz), note description
size (n_desc_sz) and note type (n_type).

So, in order to parse the note note info, we need nhdr to tell us where
to start from.  As can be seen from <sys/sdt.h>, the name of the SDT
notes given is "stapsdt".  But this is not the identifier of the note.

After that, we go to description of the note to find out its location, the
address of the ".stapsdt.base" section and the semaphore address.
Then, we find the provider name and the SDT marker name and then follow the
arguments.

Signed-off-by: Hemant Kumar <hemant@linux.vnet.ibm.com>
Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/146736022628.27797.1201368329092908163.stgit@devbox
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2016-07-04 19:38:59 -03:00
..
include tools lib: Move bitmap.[ch] from tools/perf/ to tools/{lib,include}/ 2016-01-08 12:35:46 -03:00
intel-pt-decoder perf intel-pt: Fix off-by-one comparison on maximum code 2016-04-25 20:35:59 -03:00
libunwind perf unwind: Fix wrongly used regs for aarch64 unwind 2016-06-23 10:30:31 -03:00
scripting-engines perf tools: Fix usage of max_stack sysctl 2016-05-20 11:43:56 -03:00
alias.c perf config: Move config declarations from util/cache.h to util/config.h 2016-06-23 08:51:41 -03:00
annotate.c perf annotate: Add number of samples to the header 2016-06-30 18:27:42 -03:00
annotate.h perf annotate: Generalize handling of 'ret' instructions 2016-06-27 14:25:05 -03:00
auxtrace.c perf tools: Add support for skipping itrace instructions 2016-03-30 11:14:09 -03:00
auxtrace.h perf auxtrace: Add option to feed branches to the thread stack 2016-06-23 17:02:59 -03:00
bpf-loader.c tools lib bpf: Rename set_private() to set_priv() 2016-06-06 18:19:49 -03:00
bpf-loader.h perf bpf: Clone bpf stdout events in multiple bpf scripts 2016-04-11 22:17:45 -03:00
bpf-prologue.c perf bpf: Add prologue for BPF programs for fetching arguments 2015-11-18 17:51:04 -03:00
bpf-prologue.h perf bpf: Add prologue for BPF programs for fetching arguments 2015-11-18 17:51:04 -03:00
Build perf callchain: Support aarch64 cross-platform 2016-06-07 15:13:35 -03:00
build-id.c perf probe: Show all cached probes 2016-07-01 11:34:57 -03:00
build-id.h perf probe: Show all cached probes 2016-07-01 11:34:57 -03:00
cache.h perf config: Move config declarations from util/cache.h to util/config.h 2016-06-23 08:51:41 -03:00
call-path.c perf tools: Refactor code to move call path handling out of thread-stack 2016-05-06 13:00:43 -03:00
call-path.h perf tools: Refactor code to move call path handling out of thread-stack 2016-05-06 13:00:43 -03:00
callchain.c perf hists: Move sort__has_parent into struct perf_hpp_list 2016-05-05 21:03:59 -03:00
callchain.h perf tools: Per event max-stack settings 2016-05-30 12:41:44 -03:00
cgroup.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
cgroup.h perf tools: Remove needless 'extern' from function prototypes 2016-03-23 15:06:35 -03:00
cloexec.c perf bench numa: Fix to show proper convergence stats 2015-06-25 12:28:35 -03:00
cloexec.h perf tools: Remove needless 'extern' from function prototypes 2016-03-23 15:06:35 -03:00
color.c perf config: Move config declarations from util/cache.h to util/config.h 2016-06-23 08:51:41 -03:00
color.h perf tools: Remove trail argument to color vsprintf 2015-08-05 16:44:02 -03:00
comm.c perf comm: Use atomic.h for refcounting 2015-05-27 12:21:43 -03:00
comm.h perf tools: Add facility to export data in database-friendly way 2014-10-29 10:32:49 -02:00
config.c perf config: Introduce new init() and exit() 2016-06-23 17:20:04 -03:00
config.h perf config: Introduce new init() and exit() 2016-06-23 17:20:04 -03:00
counts.c perf stat: Move perf_counts struct and functions into separate object 2015-08-08 14:16:49 -03:00
counts.h perf stat: Move perf_counts struct and functions into separate object 2015-08-08 14:16:49 -03:00
cpumap.c perf tools: Change cpu_map__fprintf output 2016-06-30 18:27:45 -03:00
cpumap.h perf tools: Change cpu_map__fprintf output 2016-06-30 18:27:45 -03:00
ctype.c perf ui/stdio: Align column header for hierarchy output 2016-02-24 20:21:12 -03:00
data-convert-bt.c perf data ctf: Generate fork and exit events to CTF output 2016-06-28 10:54:58 -03:00
data-convert-bt.h perf data ctf: Pass convert options through opts structure 2016-06-28 10:54:55 -03:00
data-convert.h perf data ctf: Add 'all' option 2016-06-28 10:54:56 -03:00
data.c perf data: Add perf_data_file__switch() helper 2016-04-14 08:57:54 -03:00
data.h perf data: Add perf_data_file__switch() helper 2016-04-14 08:57:54 -03:00
db-export.c perf thread: Adopt get_main_thread from db-export.c 2016-05-30 12:41:43 -03:00
db-export.h perf script: Add call path id to exported sample in db export 2016-05-06 13:00:53 -03:00
debug.c perf tools: Make binary data printer code in trace_event public available 2016-02-24 11:38:01 -03:00
debug.h perf tools: Initialize libapi debug output 2016-02-16 17:12:59 -03:00
demangle-java.c perf symbols: add Java demangling support 2016-02-05 09:46:45 -03:00
demangle-java.h perf symbols: add Java demangling support 2016-02-05 09:46:45 -03:00
dso.c perf tools: Allow to reset open files counter 2016-06-30 18:27:44 -03:00
dso.h perf tools: Allow to reset open files counter 2016-06-30 18:27:44 -03:00
dwarf-aux.c perf probe: Check if dwarf_getlocations() is available 2016-05-12 11:26:59 -03:00
dwarf-aux.h perf tools: Remove needless 'extern' from function prototypes 2016-03-23 15:06:35 -03:00
env.c perf tools: Add perf data cache feature 2016-02-16 17:13:00 -03:00
env.h perf tools: Add perf data cache feature 2016-02-16 17:13:00 -03:00
event.c perf tools: Change cpu_map__fprintf output 2016-06-30 18:27:45 -03:00
event.h perf tools: Add time conversion event 2016-03-31 10:52:24 -03:00
evlist.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
evlist.h perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
evsel_fprintf.c perf evsel: Move fprintf methods to separate source file 2016-04-14 19:46:58 -03:00
evsel.c perf evsel: Utility function to fetch arch 2016-06-30 08:37:32 -03:00
evsel.h perf evsel: Utility function to fetch arch 2016-06-30 08:37:32 -03:00
find-vdso-map.c perf tools: Build programs to copy 32-bit compatibility 2014-10-29 10:32:48 -02:00
genelf_debug.c perf jit: add source line info support 2016-02-05 12:33:09 -03:00
genelf.c perf jit: add source line info support 2016-02-05 12:33:09 -03:00
genelf.h perf jit: genelf makes assumptions about endian 2016-03-30 18:12:06 -03:00
generate-cmdlist.sh perf tools: Do not show trace command if it's not compiled in 2016-01-08 12:46:17 -03:00
group.h perf stat: Basic support for TopDown in perf stat 2016-06-06 17:04:15 -03:00
header.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
header.h perf tools: Remove misplaced __maybe_unused 2016-03-23 12:03:04 -03:00
help-unknown-cmd.c perf config: Move config declarations from util/cache.h to util/config.h 2016-06-23 08:51:41 -03:00
help-unknown-cmd.h perf tools: Move help_unknown_cmd() to its own file 2015-12-14 12:30:37 -03:00
hist.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
hist.h perf hists: Rename __hists__add_entry to hists__add_entry 2016-06-21 13:18:33 -03:00
intel-bts.c perf auxtrace: Add option to feed branches to the thread stack 2016-06-23 17:02:59 -03:00
intel-bts.h perf tools: Add Intel BTS support 2015-08-21 11:34:10 -03:00
intel-pt.c perf auxtrace: Add option to feed branches to the thread stack 2016-06-23 17:02:59 -03:00
intel-pt.h perf tools: Pass Intel PT information for decoding MTC and CYC 2015-08-24 17:46:43 -03:00
intlist.c
intlist.h perf intlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:39:19 -03:00
jit.h perf tools: Remove needless 'extern' from function prototypes 2016-03-23 15:06:35 -03:00
jitdump.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
jitdump.h perf jit: Add support for using TSC as a timestamp 2016-04-01 18:42:55 -03:00
kvm-stat.h perf kvm/powerpc: Port perf kvm stat to powerpc 2016-01-29 17:49:54 -03:00
levenshtein.c
levenshtein.h
llvm-utils.c perf config: Move config declarations from util/cache.h to util/config.h 2016-06-23 08:51:41 -03:00
llvm-utils.h perf llvm: Allow dump llvm output object file using llvm.dump-obj 2016-06-21 13:18:34 -03:00
lzma.c perf tools: Add lzma decompression support for kernel module 2015-03-21 14:53:40 -03:00
machine.c perf machine: Destructors should accept NULL 2016-06-22 10:19:11 -03:00
machine.h perf trace: Warn when trying to resolve kernel addresses with kptr_restrict=1 2016-05-20 11:43:54 -03:00
map.c perf tools: Use SBUILD_ID_SIZE where applicable 2016-05-11 13:06:06 -03:00
map.h perf maps: Introduce maps__find_symbol_by_name() 2015-09-30 18:34:25 -03:00
mem-events.c perf mem: Add --ldlat option 2016-06-15 10:35:27 -03:00
mem-events.h perf mem: Add --ldlat option 2016-06-15 10:35:27 -03:00
ordered-events.c perf ordered_events: Introduce reinit() 2016-04-14 08:57:54 -03:00
ordered-events.h perf ordered_events: Introduce reinit() 2016-04-14 08:57:54 -03:00
parse-branch-options.c perf subcmd: Create subcmd library 2015-12-17 14:27:14 -03:00
parse-branch-options.h perf tools: Move branch option parsing to own file 2015-05-27 21:02:17 -03:00
parse-events.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
parse-events.h perf tools: Per event max-stack settings 2016-05-30 12:41:44 -03:00
parse-events.l perf stat: Basic support for TopDown in perf stat 2016-06-06 17:04:15 -03:00
parse-events.y perf tools: Explicitly declare inc_group_count as a void function 2016-03-08 10:11:16 +01:00
parse-regs-options.c perf subcmd: Create subcmd library 2015-12-17 14:27:14 -03:00
parse-regs-options.h perf record: Add ability to name registers to record 2015-08-31 18:01:33 -03:00
path.c perf tools: Remove some unused functions 2016-06-21 13:18:33 -03:00
perf_regs.c perf tools: Fix perf regs mask generation 2016-05-11 21:54:06 +10:00
perf_regs.h perf tools: Fix build break on powerpc due to sample_reg_masks 2015-09-30 18:34:27 -03:00
PERF-VERSION-GEN
pmu.c perf pmu: Make pmu_formats_string to check return value of strbuf 2016-05-10 11:57:52 -03:00
pmu.h perf tools: Add perf_pmu__format_bits() 2015-08-06 16:49:01 -03:00
pmu.l
pmu.y
probe-event.c perf probe: Show all cached probes 2016-07-01 11:34:57 -03:00
probe-event.h perf probe: Add --cache option to cache the probe definitions 2016-06-15 14:34:42 -03:00
probe-file.c perf probe: Remove caches when --cache is given 2016-07-01 11:34:57 -03:00
probe-file.h perf probe: Remove caches when --cache is given 2016-07-01 11:34:57 -03:00
probe-finder.c perf probe: Check the return value of strbuf APIs 2016-05-10 11:53:34 -03:00
probe-finder.h perf tools: Remove needless 'extern' from function prototypes 2016-03-23 15:06:35 -03:00
pstack.c perf tools: Introduce pstack_peek() 2015-05-05 18:13:22 -03:00
pstack.h perf tools: Introduce pstack_peek() 2015-05-05 18:13:22 -03:00
python-ext-sources perf symbols: Move fprintf routines to separate object file 2016-04-14 19:46:53 -03:00
python.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
quote.c perf tools: Make alias handler to check return value of strbuf 2016-05-10 11:56:52 -03:00
quote.h perf tools: Make alias handler to check return value of strbuf 2016-05-10 11:56:52 -03:00
rb_resort.h perf rb_resort: Rename for_each() macros to for_each_entry() 2016-06-23 11:35:07 -03:00
rblist.c
rblist.h
record.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
session.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
session.h perf evsel: Move some methods from session.[ch] to evsel.[ch] 2016-04-13 10:11:52 -03:00
setup.py perf tools: Fix python extension build 2016-02-29 11:18:25 -03:00
sort.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
sort.h perf report: Add srcline_from/to branch sort keys 2016-05-23 11:25:16 -03:00
srcline.c perf tools: Always use non inlined file name for 'srcfile' sort key 2015-09-02 16:30:46 -03:00
stat-shadow.c perf stat: Add computation of TopDown formulas 2016-06-06 17:04:16 -03:00
stat.c perf evlist: Rename for_each() macros to for_each_entry() 2016-06-23 11:26:15 -03:00
stat.h perf stat: Add computation of TopDown formulas 2016-06-06 17:04:16 -03:00
strbuf.c perf tools: Rewrite strbuf not to die() 2016-05-10 11:27:58 -03:00
strbuf.h perf tools: Rewrite strbuf not to die() 2016-05-10 11:27:58 -03:00
strfilter.c perf tools: Add strfilter__string to recover rules string 2015-05-04 12:43:54 -03:00
strfilter.h perf tools: Add strfilter__string to recover rules string 2015-05-04 12:43:54 -03:00
string.c tools: Adopt memdup() from tools/perf, moving it to tools/lib/string.c 2015-11-18 17:51:02 -03:00
strlist.c perf tools: Add file_only config option to strlist 2016-01-12 12:42:07 -03:00
strlist.h perf tools: Rename strlist_for_each() macros to for_each_entry() 2016-06-23 11:35:01 -03:00
svghelper.c perf tools: Add reference counting for cpu_map object 2015-06-25 15:15:50 -03:00
svghelper.h perf tools: Remove needless 'extern' from function prototypes 2016-03-23 15:06:35 -03:00
symbol_fprintf.c perf symbols: Move fprintf routines to separate object file 2016-04-14 19:46:53 -03:00
symbol-elf.c perf sdt: ELF support for SDT 2016-07-04 19:38:59 -03:00
symbol-minimal.c perf symbols: Fix type error when reading a build-id 2015-10-28 10:02:00 -03:00
symbol.c perf symbols: Use proper dso name for is_regular_file 2016-06-28 10:54:54 -03:00
symbol.h perf sdt: ELF support for SDT 2016-07-04 19:38:59 -03:00
syscalltbl.c perf tools: Build syscall table .c header from kernel's syscall_64.tbl 2016-04-08 09:58:14 -03:00
syscalltbl.h perf tools: Allow generating per-arch syscall table arrays 2016-04-08 09:58:14 -03:00
target.c perf target: Simplify handling of strerror_r return 2015-03-24 12:08:30 -03:00
target.h
term.c perf tools: Move term functions out of util.c 2015-12-09 13:42:02 -03:00
term.h perf tools: Move term functions out of util.c 2015-12-09 13:42:02 -03:00
thread_map.c perf tools: Rename strlist_for_each() macros to for_each_entry() 2016-06-23 11:35:01 -03:00
thread_map.h perf thread_map: Make new_by_tid_str constructor public 2016-04-13 10:11:51 -03:00
thread-stack.c perf script: Add callindent option 2016-06-23 17:04:26 -03:00
thread-stack.h perf script: Add callindent option 2016-06-23 17:04:26 -03:00
thread.c perf unwind: Check the target platform before assigning unwind methods 2016-06-07 15:09:36 -03:00
thread.h perf unwind: Move unwind__prepare_access from thread_new into thread__insert_map 2016-06-07 12:08:52 -03:00
tool.h perf tools: Add time conversion event 2016-03-31 10:52:24 -03:00
top.c
top.h perf top: Use machine->kptr_restrict_warned 2016-05-20 11:43:55 -03:00
trace-event-info.c tools lib api fs: Move tracing_path interface into api/fs/tracing_path.c 2015-09-04 12:00:45 -03:00
trace-event-parse.c irq_poll: make blk-iopoll available outside the block layer 2015-12-11 11:52:24 -08:00
trace-event-read.c perf tools: Stop reading the kallsyms data from perf.data 2015-07-23 22:51:11 -03:00
trace-event-scripting.c perf scripting: No need to pass thread twice to the scripting callbacks 2015-04-02 13:18:41 -03:00
trace-event.c tools lib api fs: Adopt filename__read_str from perf 2016-02-16 17:12:56 -03:00
trace-event.h perf script: Add process_stat/process_stat_interval scripting interface 2016-01-06 20:11:15 -03:00
trigger.h perf tools: Introduce trigger class 2016-04-28 09:58:58 -03:00
tsc.c perf tools: Use 64-bit shifts with (TSC) time conversion 2016-03-08 10:11:18 +01:00
tsc.h perf jit: Add support for using TSC as a timestamp 2016-04-01 18:42:55 -03:00
unwind-libdw.c perf libdw: Check for mmaps also in MAP__VARIABLE tree 2016-01-08 14:16:57 -03:00
unwind-libdw.h perf callchain: Add order support for libdw DWARF unwinder 2015-11-23 18:31:13 -03:00
unwind-libunwind-local.c perf unwind: Change macro names of perf register 2016-06-23 10:30:17 -03:00
unwind-libunwind.c perf callchain: Support aarch64 cross-platform 2016-06-07 15:13:35 -03:00
unwind.h perf unwind: Change macro names of perf register 2016-06-23 10:30:17 -03:00
usage.c perf tools: Simplify die() mechanism 2016-03-23 12:32:31 -03:00
util.c perf tools: Fix rm_rf() to handle non-regular files correctly 2016-06-14 09:29:54 -03:00
util.h perf tools: Separate accounting of contexts and real addresses in a stack trace 2016-05-16 23:11:54 -03:00
values.c
values.h
vdso.c perf tools: Find right DSO taking into account if binary is 32 or 64-bit 2016-06-23 10:25:58 -03:00
vdso.h perf machine: Fix up vdso methods names 2015-05-29 12:43:44 -03:00
xyarray.c perf tools: Introduce xyarray__reset function 2015-06-16 10:34:39 -03:00
xyarray.h perf tools: Introduce xyarray__reset function 2015-06-16 10:34:39 -03:00
zlib.c perf tools: Add gzip decompression support for kernel module 2014-11-05 10:11:26 -03:00