Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755894AbcCaGfh (ORCPT ); Thu, 31 Mar 2016 02:35:37 -0400 Received: from terminus.zytor.com ([198.137.202.10]:34370 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751648AbcCaGfc (ORCPT ); Thu, 31 Mar 2016 02:35:32 -0400 Date: Wed, 30 Mar 2016 23:34:00 -0700 From: tip-bot for Anton Blanchard Message-ID: Cc: anton@samba.org, eranian@google.com, cel@us.ibm.com, sukadev@linux.vnet.ibm.com, mingo@kernel.org, hpa@zytor.com, tglx@linutronix.de, mpe@ellerman.id.au, acme@redhat.com, linux-kernel@vger.kernel.org Reply-To: linux-kernel@vger.kernel.org, acme@redhat.com, mpe@ellerman.id.au, tglx@linutronix.de, hpa@zytor.com, mingo@kernel.org, sukadev@linux.vnet.ibm.com, eranian@google.com, cel@us.ibm.com, anton@samba.org In-Reply-To: <20160329175944.33a211cc@kryten> References: <20160329175944.33a211cc@kryten> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/urgent] perf jit: genelf makes assumptions about endian Git-Commit-ID: 9f56c092b99b40ce3cf4c6d0134ff7e513c9f1a6 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2850 Lines: 82 Commit-ID: 9f56c092b99b40ce3cf4c6d0134ff7e513c9f1a6 Gitweb: http://git.kernel.org/tip/9f56c092b99b40ce3cf4c6d0134ff7e513c9f1a6 Author: Anton Blanchard AuthorDate: Tue, 29 Mar 2016 17:59:44 +1100 Committer: Arnaldo Carvalho de Melo CommitDate: Wed, 30 Mar 2016 18:12:06 -0300 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 Acked-by: Michael Ellerman Cc: Carl Love Cc: Stephane Eranian Cc: Sukadev Bhattiprolu 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 --- tools/perf/util/genelf.h | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/tools/perf/util/genelf.h b/tools/perf/util/genelf.h index cd67e64..2fbeb59 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 #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