aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2016-03-29 02:59:44 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-03-30 17:12:06 -0400
commit9f56c092b99b40ce3cf4c6d0134ff7e513c9f1a6 (patch)
treeed03c625bffac4e5c94be187968953940d78b98f /tools/perf
parent909890355507e92bdaf648e73870f6b5df606da8 (diff)
perf jit: genelf makes assumptions about endian
Commit 9b07e27f88b9 ("perf inject: Add jitdump mmap injection support") incorrectly assumed that PowerPC is big endian only. Simplify things by consolidating the define of GEN_ELF_ENDIAN and checking for __BYTE_ORDER == __BIG_ENDIAN. The PowerPC checks were also incorrect, they do not match what gcc emits. We should first look for __powerpc64__, then __powerpc__. Signed-off-by: Anton Blanchard <anton@samba.org> Acked-by: Michael Ellerman <mpe@ellerman.id.au> Cc: Carl Love <cel@us.ibm.com> Cc: Stephane Eranian <eranian@google.com> Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> Cc: linuxppc-dev@lists.ozlabs.org Fixes: 9b07e27f88b9 ("perf inject: Add jitdump mmap injection support") Link: http://lkml.kernel.org/r/20160329175944.33a211cc@kryten Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/util/genelf.h24
1 files changed, 10 insertions, 14 deletions
diff --git a/tools/perf/util/genelf.h b/tools/perf/util/genelf.h
index cd67e64a0494..2fbeb59c4bdd 100644
--- a/tools/perf/util/genelf.h
+++ b/tools/perf/util/genelf.h
@@ -9,36 +9,32 @@ int jit_add_debug_info(Elf *e, uint64_t code_addr, void *debug, int nr_debug_ent
9 9
10#if defined(__arm__) 10#if defined(__arm__)
11#define GEN_ELF_ARCH EM_ARM 11#define GEN_ELF_ARCH EM_ARM
12#define GEN_ELF_ENDIAN ELFDATA2LSB
13#define GEN_ELF_CLASS ELFCLASS32 12#define GEN_ELF_CLASS ELFCLASS32
14#elif defined(__aarch64__) 13#elif defined(__aarch64__)
15#define GEN_ELF_ARCH EM_AARCH64 14#define GEN_ELF_ARCH EM_AARCH64
16#define GEN_ELF_ENDIAN ELFDATA2LSB
17#define GEN_ELF_CLASS ELFCLASS64 15#define GEN_ELF_CLASS ELFCLASS64
18#elif defined(__x86_64__) 16#elif defined(__x86_64__)
19#define GEN_ELF_ARCH EM_X86_64 17#define GEN_ELF_ARCH EM_X86_64
20#define GEN_ELF_ENDIAN ELFDATA2LSB
21#define GEN_ELF_CLASS ELFCLASS64 18#define GEN_ELF_CLASS ELFCLASS64
22#elif defined(__i386__) 19#elif defined(__i386__)
23#define GEN_ELF_ARCH EM_386 20#define GEN_ELF_ARCH EM_386
24#define GEN_ELF_ENDIAN ELFDATA2LSB
25#define GEN_ELF_CLASS ELFCLASS32 21#define GEN_ELF_CLASS ELFCLASS32
26#elif defined(__ppcle__) 22#elif defined(__powerpc64__)
27#define GEN_ELF_ARCH EM_PPC
28#define GEN_ELF_ENDIAN ELFDATA2LSB
29#define GEN_ELF_CLASS ELFCLASS64
30#elif defined(__powerpc__)
31#define GEN_ELF_ARCH EM_PPC64
32#define GEN_ELF_ENDIAN ELFDATA2MSB
33#define GEN_ELF_CLASS ELFCLASS64
34#elif defined(__powerpcle__)
35#define GEN_ELF_ARCH EM_PPC64 23#define GEN_ELF_ARCH EM_PPC64
36#define GEN_ELF_ENDIAN ELFDATA2LSB
37#define GEN_ELF_CLASS ELFCLASS64 24#define GEN_ELF_CLASS ELFCLASS64
25#elif defined(__powerpc__)
26#define GEN_ELF_ARCH EM_PPC
27#define GEN_ELF_CLASS ELFCLASS32
38#else 28#else
39#error "unsupported architecture" 29#error "unsupported architecture"
40#endif 30#endif
41 31
32#if __BYTE_ORDER == __BIG_ENDIAN
33#define GEN_ELF_ENDIAN ELFDATA2MSB
34#else
35#define GEN_ELF_ENDIAN ELFDATA2LSB
36#endif
37
42#if GEN_ELF_CLASS == ELFCLASS64 38#if GEN_ELF_CLASS == ELFCLASS64
43#define elf_newehdr elf64_newehdr 39#define elf_newehdr elf64_newehdr
44#define elf_getshdr elf64_getshdr 40#define elf_getshdr elf64_getshdr