linux/tools/perf/util
Jiri Olsa e108c66e2c perf tools: Carry perf_event_attr bitfield throught different endians
When the perf data file is read cross architectures, the
perf_event__attr_swap function takes care about endianness of all the
struct fields except the bitfield flags.

The bitfield flags need to be transformed as well, since the bitfield
binary storage differs for both endians.

ABI says:
  Bit-fields are allocated from right to left (least to most significant)
  on little-endian implementations and from left to right (most to least
  significant) on big-endian implementations.

The above seems to be byte specific, so we need to reverse each byte of
the bitfield. 'Internet' also says this might be implementation specific
and we probably need proper fix and carry perf_event_attr bitfield flags
in separate data file FEAT_ section. Thought this seems to work for now.

Note, running following to test perf endianity handling:
test 1)
  - origin system:
    # perf record -a -- sleep 10 (any perf record will do)
    # perf report > report.origin
    # perf archive perf.data

  - copy the perf.data, report.origin and perf.data.tar.bz2
    to a target system and run:
    # tar xjvf perf.data.tar.bz2 -C ~/.debug
    # perf report > report.target
    # diff -u report.origin report.target

  - the diff should produce no output
    (besides some white space stuff and possibly different
     date/TZ output)

test 2)
  - origin system:
    # perf record -ag -fo /tmp/perf.data -- sleep 1
  - mount origin system root to the target system on /mnt/origin
  - target system:
    # perf script --symfs /mnt/origin -I -i /mnt/origin/tmp/perf.data \
     --kallsyms /mnt/origin/proc/kallsyms
  - complete perf.data header is displayed

Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Reviewed-by: David Ahern <dsahern@gmail.com>
Tested-by: David Ahern <dsahern@gmail.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1337151548-2396-3-git-send-email-jolsa@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2012-05-22 12:48:24 -03:00
..
include perf tools: Switch module.h into export.h 2012-03-26 17:19:57 +02:00
scripting-engines perf script: Rename struct event to struct event_format in perl engine 2012-05-22 12:32:29 -03: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 annotate: Introduce ->free() method in ins_ops 2012-05-12 13:26:20 -03:00
annotate.h perf annotate: Introduce ->free() method in ins_ops 2012-05-12 13:26:20 -03:00
bitmap.c perf tools: Add bitmap_or function into bitmap object 2012-02-13 23:28:10 -02: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 ui: Change fallback policy of setup_browser() 2012-05-02 16:17:37 -03: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 tools: Use scnprintf where applicable 2012-03-14 12:36:19 -03:00
color.h
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: ctype.c only wants util.h 2012-02-13 23:17:40 -02:00
debug.c perf tools: Introduce perf_target__strerror() 2012-05-07 17:30:21 -03:00
debug.h perf tools: Move UI bits to tools/perf/ui directory 2012-04-11 17:16:40 -03:00
debugfs.c perf tools: Remove unused functions from debugfs object 2012-02-13 23:25:38 -02:00
debugfs.h perf tools: Remove unused functions from debugfs object 2012-02-13 23:25:38 -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: Ensure comm string is properly terminated 2012-02-29 18:29:45 -03:00
event.h perf tools: Add code to support PERF_SAMPLE_BRANCH_STACK 2012-03-09 08:26:04 +01:00
evlist.c perf target: Add uses_mmap field 2012-05-17 12:32:54 -03:00
evlist.h perf evlist: Make create_maps() take struct perf_target 2012-05-02 15:23:11 -03:00
evsel.c perf target: Add cpu flag to sample_type if target has cpu 2012-05-22 12:37:12 -03:00
evsel.h perf diff: Fix to work with new hists design 2012-03-22 15:12:09 -03: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 Merge remote-tracking branch 'tip/perf/urgent' into perf/core 2012-05-18 13:13:33 -03:00
header.h perf record: Add HEADER_BRANCH_STACK tag 2012-03-09 08:26:08 +01:00
help.c perf tools: Remove some unused functions 2010-05-18 23:03:35 -03:00
help.h
hist.c perf hists: Fix callchain ip printf format 2012-05-17 13:18:19 -03:00
hist.h perf tools: Move UI bits to tools/perf/ui directory 2012-04-11 17:16:40 -03:00
hweight.c
levenshtein.c
levenshtein.h
map.c perf annotate: Validate addr in symbol__inc_addr_samples 2012-04-05 19:51:14 -03:00
map.h perf annotate: Validate addr in symbol__inc_addr_samples 2012-04-05 19:51:14 -03:00
pager.c
parse-events-test.c perf tools: Add hardcoded name term for pmu events 2012-05-22 11:47:54 -03:00
parse-events.c perf tools: Add hardcoded name term for pmu events 2012-05-22 11:47:54 -03:00
parse-events.h perf tools: Add hardcoded name term for pmu events 2012-05-22 11:47:54 -03:00
parse-events.l perf tools: Add hardcoded name term for pmu events 2012-05-22 11:47:54 -03:00
parse-events.y perf tools: Add hardcoded name term for pmu events 2012-05-22 11:47:54 -03: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
pmu.c perf tools: Add hardcoded name term for pmu events 2012-05-22 11:47:54 -03:00
pmu.h perf tools: Add perf pmu object to access pmu format definition 2012-03-16 14:29:35 -03:00
pmu.l perf tools: Add perf pmu object to access pmu format definition 2012-03-16 14:29:35 -03:00
pmu.y perf tools: Add perf pmu object to access pmu format definition 2012-03-16 14:29:35 -03:00
probe-event.c Merge branch 'perf/urgent' into perf/core 2012-03-05 09:20:08 +01: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 probe: Finder fails to resolve function name to address 2012-03-28 11:56:49 -03: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-ext-sources perf tools: Allow multiple threads or processes in record, stat, top 2012-02-13 22:54:11 -02: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 tools: Carry perf_event_attr bitfield throught different endians 2012-05-22 12:48:24 -03:00
session.h perf tools: Add code to support PERF_SAMPLE_BRANCH_STACK 2012-03-09 08:26:04 +01:00
setup.py perf tools: Fix build dependency of perf python extension 2012-02-13 18:01:25 -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 Merge branch 'perf/urgent' into perf/core 2012-03-22 15:09:08 -03:00
sort.h perf report: Enable TUI in branch view mode 2012-03-09 08:26:08 +01:00
strbuf.c perf tools: Use scnprintf where applicable 2012-03-14 12:36:19 -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
strlist.h
svghelper.c perf timechart: Fix black idle boxes in the title 2011-02-28 08:56:14 +01:00
svghelper.h
symbol.c perf symbols: Read plt symbols from proper symtab_type binary 2012-04-20 13:34:49 -03:00
symbol.h perf symbols: Introduce symbol__size method 2012-04-19 10:57:06 -03:00
sysfs.c perf tools: Add sysfs mountpoint interface 2012-02-13 23:27:15 -02:00
sysfs.h perf tools: Add sysfs mountpoint interface 2012-02-13 23:27:15 -02:00
target.c perf tools: Introduce perf_target__strerror() 2012-05-07 17:30:21 -03:00
target.h perf target: Add uses_mmap field 2012-05-17 12:32:54 -03: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: fix broken perf record -a mode 2012-02-21 15:05:43 -02:00
thread_map.h perf tools: Fix thread map that is type pid_t 2012-04-11 17:38:50 -03:00
tool.h perf tools: Save some loops using perf_evlist__id2evsel 2011-11-28 17:57:40 -02:00
top.c perf top: Convert to struct perf_target 2012-05-02 15:20:30 -03:00
top.h perf top: Convert to struct perf_target 2012-05-02 15:20:30 -03:00
trace-event-info.c perf: Have perf use the new libtraceevent.a library 2012-04-25 13:28:48 +02:00
trace-event-parse.c parse-events: Rename struct record to struct pevent_record 2012-04-25 13:35:48 +02:00
trace-event-read.c parse-events: Rename struct record to struct pevent_record 2012-04-25 13:35:48 +02:00
trace-event-scripting.c perf tools: Remove unnecessary ctype.h inclusion 2012-01-30 18:37:35 -02:00
trace-event.h parse-events: Rename struct record to struct pevent_record 2012-04-25 13:35:48 +02:00
types.h perf tools: Fix 64 bit integer format strings 2011-01-22 23:41:57 -02:00
usage.c perf target: Introduce perf_target__parse_uid() 2012-05-07 16:46:48 -03:00
util.c perf annotate browser: Align jump labels 2012-04-19 13:15:24 -03:00
util.h Fixes and improvements for perf/core: 2012-05-11 08:13:55 +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