forked from Minki/linux
perf tests: Decompress kernel module before objdump
If a kernel modules is compressed, it should be decompressed before running objdump to parse binary data correctly. This fixes a failure of object code reading test for me. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: David Ahern <dsahern@gmail.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Wang Nan <wangnan0@huawei.com> Cc: kernel-team@lge.com Link: http://lkml.kernel.org/r/20170608073109.30699-8-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
8ba29adf9a
commit
94df1040b1
@ -229,6 +229,8 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
|
||||
unsigned char buf2[BUFSZ];
|
||||
size_t ret_len;
|
||||
u64 objdump_addr;
|
||||
const char *objdump_name;
|
||||
char decomp_name[KMOD_DECOMP_LEN];
|
||||
int ret;
|
||||
|
||||
pr_debug("Reading object code for memory address: %#"PRIx64"\n", addr);
|
||||
@ -289,9 +291,25 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
|
||||
state->done[state->done_cnt++] = al.map->start;
|
||||
}
|
||||
|
||||
objdump_name = al.map->dso->long_name;
|
||||
if (dso__needs_decompress(al.map->dso)) {
|
||||
if (dso__decompress_kmodule_path(al.map->dso, objdump_name,
|
||||
decomp_name,
|
||||
sizeof(decomp_name)) < 0) {
|
||||
pr_debug("decompression failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
objdump_name = decomp_name;
|
||||
}
|
||||
|
||||
/* Read the object code using objdump */
|
||||
objdump_addr = map__rip_2objdump(al.map, al.addr);
|
||||
ret = read_via_objdump(al.map->dso->long_name, objdump_addr, buf2, len);
|
||||
ret = read_via_objdump(objdump_name, objdump_addr, buf2, len);
|
||||
|
||||
if (dso__needs_decompress(al.map->dso))
|
||||
unlink(objdump_name);
|
||||
|
||||
if (ret > 0) {
|
||||
/*
|
||||
* The kernel maps are inaccurate - assume objdump is right in
|
||||
|
Loading…
Reference in New Issue
Block a user