WSL2-Linux-Kernel/tools/perf/util
Stephane Eranian 73323f541f perf tools: fix endianness detection in perf.data
The current version of perf detects whether or not the perf.data file is
written in a different endianness using the attr_size field in the
header of the file. This field represents sizeof(struct perf_event_attr)
as known to perf record. If the sizes do not match, then perf tries the
byte-swapped version. If they match, then the tool assumes a different
endianness.

The issue with the approach is that it assumes the size of
perf_event_attr always has to match between perf record and perf report.
However, the kernel perf_event ABI is extensible.  New fields can be
added to struct perf_event_attr. Consequently, it is not possible to use
attr_size to detect endianness.

This patch takes another approach by using the magic number written at
the beginning of the perf.data file to detect endianness. The magic
number is an eight-byte signature.  It's primary purpose is to identify
(signature) a perf.data file. But it could also be used to encode the
endianness.

The patch introduces a new value for this signature. The key difference
is that the signature is written differently in the file depending on
the endianness. Thus, by comparing the signature from the file with the
tool's own signature it is possible to detect endianness. The new
signature is "PERFILE2".

Backward compatiblity with existing perf.data file is ensured.

Tested-by: David Ahern <dsahern@gmail.com>
Acked-by: David Ahern <dsahern@gmail.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Anshuman Khandual <khandual@linux.vnet.ibm.com>
Cc: Arun Sharma <asharma@fb.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Lin Ming <ming.m.lin@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Roberto Agostino Vitillo <ravitillo@lbl.gov>
Cc: Robert Richter <robert.richter@amd.com>
Cc: Vince Weaver <vweaver1@eecs.utk.edu>
Link: http://lkml.kernel.org/r/1328187288-24395-15-git-send-email-eranian@google.com
Signed-off-by: Stephane Eranian <eranian@google.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2012-02-09 12:28:10 -02:00
..
include perf bench: Also allow measuring memset() 2012-01-24 20:25:32 -02:00
scripting-engines perf tools: Remove unnecessary ctype.h inclusion 2012-01-30 18:37:35 -02:00
ui perf tools: Fix broken build by defining _GNU_SOURCE in Makefile 2012-01-30 22:19:54 -02:00
PERF-VERSION-GEN perf: clear out make flags when calling kernel make kernelver 2011-06-15 22:12:55 +02:00
abspath.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
alias.c
annotate.c perf tools: Fix truncated annotation 2011-12-23 16:39:19 -02:00
annotate.h perf symbols: Add nr_events to symbol_conf 2011-11-28 10:37:11 -02:00
bitmap.c perf tools: Don't use code surrounded by __KERNEL__ 2010-05-02 12:00:44 -03:00
build-id.c perf tools: Rename perf_event_ops to perf_tool 2011-11-28 10:39:28 -02:00
build-id.h perf tools: Rename perf_event_ops to perf_tool 2011-11-28 10:39:28 -02:00
cache.h perf tools: Don't fallback to setup_pager unconditionally 2011-01-31 18:08:39 -02:00
callchain.c perf tools: Kill event_t typedef, use 'union perf_event' instead 2011-01-29 16:25:37 -02:00
callchain.h perf tools: Pass tool context in the the perf_event_ops functions 2011-11-28 10:38:56 -02:00
cgroup.c perf tools: Eliminate duplicate code and use PATH_MAX consistently 2011-11-28 10:11:04 -02:00
cgroup.h perf tool: Add cgroup support 2011-02-16 13:30:48 +01:00
color.c perf stat: Add -o and --append options 2011-08-18 07:46:13 -03:00
color.h perf hist: Replace ->print() routines by ->snprintf() equivalents 2010-04-02 16:28:15 -03:00
config.c perf tools: Remove stale git headlines from top comment 2011-12-20 13:43:36 -02:00
cpumap.c perf tools: Add fprintf methods for thread_map and cpu_map classes 2012-01-24 19:46:48 -02:00
cpumap.h perf tools: Add fprintf methods for thread_map and cpu_map classes 2012-01-24 19:46:48 -02:00
ctype.c perf tools: Move graph_line and graph_dotted_line from top 2009-11-23 21:55:20 +01:00
debug.c perf ui browser: Handle K_RESIZE in dialog windows 2011-10-26 13:15:07 -02:00
debug.h perf ui browser: Handle K_RESIZE in dialog windows 2011-10-26 13:15:07 -02:00
debugfs.c perf tools: Simplify debugfs mountpoint handling code 2011-11-28 10:11:28 -02:00
debugfs.h perf tools: Simplify debugfs mountpoint handling code 2011-11-28 10:11:28 -02:00
dwarf-aux.c perf probe: Filter out redundant inline-instances 2011-08-12 09:34:35 -03:00
dwarf-aux.h perf probe: Search concrete out-of-line instances 2011-08-12 09:32:10 -03:00
environment.c
event.c perf tools: Fix prefix matching for kernel maps 2012-02-06 18:57:39 -02:00
event.h perf tools: Add ability to synthesize event according to a sample 2011-12-12 08:44:00 -02:00
evlist.c perf evlist: Make splice_list_tail method public 2012-02-01 15:29:53 -02:00
evlist.h perf evlist: Make splice_list_tail method public 2012-02-01 15:29:53 -02:00
evsel.c Merge branch 'perf/urgent' into perf/core 2012-02-06 19:11:02 -02:00
evsel.h perf tools: Save some loops using perf_evlist__id2evsel 2011-11-28 17:57:40 -02:00
exec_cmd.c perf tools: Makefile: Remove various and sundry cruft 2011-02-18 07:43:06 -02:00
exec_cmd.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
generate-cmdlist.sh
header.c perf tools: fix endianness detection in perf.data 2012-02-09 12:28:10 -02:00
header.h perf record: Make feature initialization generic 2012-02-02 17:41:17 -02:00
help.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
help.h
hist.c perf report: Fix --stdio output alignment when --showcpuutilization used 2012-01-08 13:32:51 -02:00
hist.h perf tools: Introduce per user view 2012-01-24 19:47:37 -02:00
hweight.c perf tools: Don't use code surrounded by __KERNEL__ 2010-05-02 12:00:44 -03:00
levenshtein.c
levenshtein.h
map.c perf script: Add option resolving vmlinux path 2012-01-30 18:13:07 -02:00
map.h perf script: Unify the expressions indicating "unknown" 2012-01-30 17:57:57 -02:00
pager.c
parse-events.c perf tools: Add support for guest/host-only profiling 2012-01-06 15:49:49 -02:00
parse-events.h perf tools: Simplify debugfs mountpoint handling code 2011-11-28 10:11:28 -02:00
parse-options.c perf options: Type check all the remaining OPT_ variants 2010-05-17 16:22:41 -03:00
parse-options.h perf options: add OPT_CALLBACK_DEFAULT_NOOPT 2010-12-06 15:33:29 -02:00
path.c perf tools: add test for strlcpy() 2010-08-21 11:22:47 -03:00
probe-event.c perf probe: Rename target_module to target 2012-02-02 17:39:15 -02:00
probe-event.h perf probe: Add probed module in front of function 2011-07-15 16:19:08 -04:00
probe-finder.c perf tools: Remove unnecessary ctype.h inclusion 2012-01-30 18:37:35 -02:00
probe-finder.h perf tools: Eliminate duplicate code and use PATH_MAX consistently 2011-11-28 10:11:04 -02:00
pstack.c perf newt: Make <- zoom out filters 2010-05-14 20:05:21 -03:00
pstack.h perf ui: Move hists browser to util/ui/browsers/ 2010-08-10 16:11:08 -03:00
python.c perf tools: Introduce per user view 2012-01-24 19:47:37 -02:00
quote.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
quote.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
run-command.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
run-command.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
session.c perf script: Add the offset field specifier 2012-01-30 18:09:21 -02:00
session.h perf script: Add the offset field specifier 2012-01-30 18:09:21 -02:00
setup.py perf evlist: Introduce add_tracepoints method 2011-11-28 10:25:11 -02:00
sigchain.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
sigchain.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
sort.c perf hists browser: Elide DSO column when it is set to just one DSO, ditto for threads 2011-10-20 08:02:30 -02:00
sort.h perf hists: Don't free decayed entries if in the annotation browser 2011-10-13 08:01:33 -03:00
strbuf.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
strbuf.h perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
strfilter.c perf: Fix missing strndup declaration 2011-03-04 01:17:18 +01:00
strfilter.h perf tools: Add strfilter for general purpose string filter 2011-01-28 09:19:38 -02:00
string.c perf probe: Move strtailcmp to string.c 2011-07-15 16:00:47 -04:00
strlist.c perf probe: Fix --del to update current event list 2009-12-15 20:22:01 +01:00
strlist.h perf tools: Add for_each macros for strlist 2009-12-15 20:22:02 +01:00
svghelper.c perf timechart: Fix black idle boxes in the title 2011-02-28 08:56:14 +01:00
svghelper.h
symbol.c perf tools: Fix broken build by defining _GNU_SOURCE in Makefile 2012-01-30 22:19:54 -02:00
symbol.h perf script: Add option resolving vmlinux path 2012-01-30 18:13:07 -02:00
thread.c perf session: Move threads to struct machine 2011-11-28 10:35:31 -02:00
thread.h perf tools: Resolve machine earlier and pass it to perf_event_ops 2011-11-28 10:39:12 -02:00
thread_map.c perf tools: Introduce per user view 2012-01-24 19:47:37 -02:00
thread_map.h perf tools: Introduce per user view 2012-01-24 19:47:37 -02:00
tool.h perf tools: Save some loops using perf_evlist__id2evsel 2011-11-28 17:57:40 -02:00
top.c perf tools: Introduce per user view 2012-01-24 19:47:37 -02:00
top.h perf tools: Introduce per user view 2012-01-24 19:47:37 -02:00
trace-event-info.c perf tools: Fix compile error on x86_64 Ubuntu 2012-01-08 13:34:55 -02:00
trace-event-parse.c perf tools: Fix broken build by defining _GNU_SOURCE in Makefile 2012-01-30 22:19:54 -02:00
trace-event-read.c perf tools: Remove unnecessary ctype.h inclusion 2012-01-30 18:37:35 -02:00
trace-event-scripting.c perf tools: Remove unnecessary ctype.h inclusion 2012-01-30 18:37:35 -02:00
trace-event.h perf tools: Resolve machine earlier and pass it to perf_event_ops 2011-11-28 10:39:12 -02:00
types.h perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
usage.c perf tools: Introduce per user view 2012-01-24 19:47:37 -02:00
util.c perf kvm: Do guest-only counting by default 2012-01-06 15:47:37 -02:00
util.h perf tools: Fix broken build by defining _GNU_SOURCE in Makefile 2012-01-30 22:19:54 -02:00
values.c perf tools: Fix a memory leak on perf_read_values_destroy 2011-12-20 13:41:34 -02:00
values.h
wrapper.c perf tools: remove xstrndup, xmalloc, xzalloc 2010-05-18 23:05:28 -03:00
xyarray.c perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00
xyarray.h perf tools: Introduce event selectors 2011-01-03 16:39:04 -02:00