mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 06:32:08 +00:00
perf symbols: Preparation for compressed kernel module support
This patch adds basic support to handle compressed kernel module as some distro (such as Archlinux) carries on it now. The actual work using compression library will be added later. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung.kim@lge.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1415063674-17206-2-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
758008b262
commit
c00c48fc6e
5 changed files with 141 additions and 3 deletions
|
@ -546,6 +546,35 @@ static int dso__swap_init(struct dso *dso, unsigned char eidata)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int decompress_kmodule(struct dso *dso, const char *name,
|
||||
enum dso_binary_type type)
|
||||
{
|
||||
int fd;
|
||||
const char *ext = strrchr(name, '.');
|
||||
char tmpbuf[] = "/tmp/perf-kmod-XXXXXX";
|
||||
|
||||
if ((type != DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP &&
|
||||
type != DSO_BINARY_TYPE__GUEST_KMODULE_COMP) ||
|
||||
type != dso->symtab_type)
|
||||
return -1;
|
||||
|
||||
if (!ext || !is_supported_compression(ext + 1))
|
||||
return -1;
|
||||
|
||||
fd = mkstemp(tmpbuf);
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
if (!decompress_to_file(ext + 1, name, fd)) {
|
||||
close(fd);
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
unlink(tmpbuf);
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
bool symsrc__possibly_runtime(struct symsrc *ss)
|
||||
{
|
||||
return ss->dynsym || ss->opdsec;
|
||||
|
@ -571,7 +600,11 @@ int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name,
|
|||
Elf *elf;
|
||||
int fd;
|
||||
|
||||
fd = open(name, O_RDONLY);
|
||||
if (dso__needs_decompress(dso))
|
||||
fd = decompress_kmodule(dso, name, type);
|
||||
else
|
||||
fd = open(name, O_RDONLY);
|
||||
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue