Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f56c092 authored by Anton Blanchard's avatar Anton Blanchard Committed by Arnaldo Carvalho de Melo
Browse files

perf jit: genelf makes assumptions about endian



Commit 9b07e27f ("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: default avatarAnton Blanchard <anton@samba.org>
Acked-by: default avatarMichael 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: 9b07e27f ("perf inject: Add jitdump mmap injection support")
Link: http://lkml.kernel.org/r/20160329175944.33a211cc@kryten


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 90989035
Loading
Loading
Loading
Loading
+10 −14
Original line number Diff line number Diff line
@@ -9,36 +9,32 @@ int jit_add_debug_info(Elf *e, uint64_t code_addr, void *debug, int nr_debug_ent

#if   defined(__arm__)
#define GEN_ELF_ARCH	EM_ARM
#define GEN_ELF_ENDIAN	ELFDATA2LSB
#define GEN_ELF_CLASS	ELFCLASS32
#elif defined(__aarch64__)
#define GEN_ELF_ARCH	EM_AARCH64
#define GEN_ELF_ENDIAN	ELFDATA2LSB
#define GEN_ELF_CLASS	ELFCLASS64
#elif defined(__x86_64__)
#define GEN_ELF_ARCH	EM_X86_64
#define GEN_ELF_ENDIAN	ELFDATA2LSB
#define GEN_ELF_CLASS	ELFCLASS64
#elif defined(__i386__)
#define GEN_ELF_ARCH	EM_386
#define GEN_ELF_ENDIAN	ELFDATA2LSB
#define GEN_ELF_CLASS	ELFCLASS32
#elif defined(__ppcle__)
#define GEN_ELF_ARCH	EM_PPC
#define GEN_ELF_ENDIAN	ELFDATA2LSB
#define GEN_ELF_CLASS	ELFCLASS64
#elif defined(__powerpc__)
#define GEN_ELF_ARCH	EM_PPC64
#define GEN_ELF_ENDIAN	ELFDATA2MSB
#define GEN_ELF_CLASS	ELFCLASS64
#elif defined(__powerpcle__)
#elif defined(__powerpc64__)
#define GEN_ELF_ARCH	EM_PPC64
#define GEN_ELF_ENDIAN	ELFDATA2LSB
#define GEN_ELF_CLASS	ELFCLASS64
#elif defined(__powerpc__)
#define GEN_ELF_ARCH	EM_PPC
#define GEN_ELF_CLASS	ELFCLASS32
#else
#error "unsupported architecture"
#endif

#if __BYTE_ORDER == __BIG_ENDIAN
#define GEN_ELF_ENDIAN	ELFDATA2MSB
#else
#define GEN_ELF_ENDIAN	ELFDATA2LSB
#endif

#if GEN_ELF_CLASS == ELFCLASS64
#define elf_newehdr	elf64_newehdr
#define elf_getshdr	elf64_getshdr