| From 22c6c8c5dfe66a5e7f81dd4a296e1b2b245c5d28 Mon Sep 17 00:00:00 2001 |
| From: Mark McLoughlin <markmc@redhat.com> |
| Date: Mon, 29 Jun 2009 14:49:03 +0100 |
| Subject: [PATCH] Fix linux-user build on ppc |
| |
| kvm-87 build fails on ppc: |
| |
| https://koji.fedoraproject.org/koji/getfile?taskID=1441042&name=build.log |
| |
| gcc -I. -I.. -I/builddir/build/BUILD/qemu-kvm-devel-87/target-i386 |
| -I/builddir/build/BUILD/qemu-kvm-devel-87 -MMD -MT elfload.o -MP |
| -DNEED_CPU_H -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE |
| -D__user= -I/builddir/build/BUILD/qemu-kvm-devel-87/tcg |
| -I/builddir/build/BUILD/qemu-kvm-devel-87/tcg/ppc64 |
| -I/builddir/build/BUILD/qemu-kvm-devel-87/fpu |
| -I/builddir/build/BUILD/qemu-kvm-devel-87/linux-user |
| -I/builddir/build/BUILD/qemu-kvm-devel-87/linux-user/i386 -O2 -g -pipe |
| -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector |
| --param=ssp-buffer-size=4 -m64 -mminimal-toc -g -fno-strict-aliasing |
| -O2 -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes |
| -Wstrict-prototypes -Wredundant-decls -c -o elfload.o |
| /builddir/build/BUILD/qemu-kvm-devel-87/linux-user/elfload.c |
| /builddir/build/BUILD/qemu-kvm-devel-87/linux-user/elfload.c:214: error: conflicting types for 'elf_greg_t' |
| /usr/include/asm/elf.h:123: note: previous declaration of 'elf_greg_t' was here |
| /builddir/build/BUILD/qemu-kvm-devel-87/linux-user/elfload.c:220: error: conflicting types for 'elf_gregset_t' |
| /usr/include/asm/elf.h:124: note: previous declaration of 'elf_gregset_t' was here |
| In file included from /builddir/build/BUILD/qemu-kvm-devel-87/linux-user/elfload.c:697: |
| ../elf.h:457:1: warning: "R_PPC_NUM" redefined |
| In file included from /usr/include/asm/sigcontext.h:13, |
| from /usr/include/bits/sigcontext.h:28, |
| from /usr/include/signal.h:339, |
| from /builddir/build/BUILD/qemu-kvm-devel-87/linux-user/qemu.h:4, |
| from /builddir/build/BUILD/qemu-kvm-devel-87/linux-user/elfload.c:16: |
| /usr/include/asm/elf.h:81:1: warning: this is the location of the previous definition |
| |
| Problem seems to be that signal.h is pulling in a bunch of ppc |
| headers which expose elf_greg_t, R_PPC_* and PPC_FEATURE_*. |
| |
| Signed-off-by: Mark McLoughlin <markmc@redhat.com> |
| Fedora-patch: qemu-fix-linux-user-build-on-ppc.patch |
| |
| elf.h | 2 ++ |
| linux-user/elfload.c | 10 ++++++++++ |
| 2 files changed, 12 insertions(+), 0 deletions(-) |
| |
| diff --git a/elf.h b/elf.h |
| index b042002..14f8aa1 100644 |
| |
| |
| @@ -454,7 +454,9 @@ typedef struct { |
| #define R_PPC_SECTOFF_HI 35 |
| #define R_PPC_SECTOFF_HA 36 |
| /* Keep this the last entry. */ |
| +#ifndef R_PPC_NUM |
| #define R_PPC_NUM 37 |
| +#endif /* R_PPC_NUM */ |
| |
| /* ARM specific declarations */ |
| |
| diff --git a/linux-user/elfload.c b/linux-user/elfload.c |
| index 3a8268b..d283f73 100644 |
| |
| |
| @@ -134,6 +134,7 @@ static inline void init_thread(struct target_pt_regs *regs, struct image_info *i |
| regs->rip = infop->entry; |
| } |
| |
| +#ifdef FIX_BROKEN_PPC_BUILD |
| typedef target_ulong elf_greg_t; |
| typedef uint32_t target_uid_t; |
| typedef uint32_t target_gid_t; |
| @@ -179,6 +180,7 @@ static void elf_core_copy_regs(elf_gregset_t *regs, const CPUState *env) |
| (*regs)[25] = env->segs[R_FS].selector & 0xffff; |
| (*regs)[26] = env->segs[R_GS].selector & 0xffff; |
| } |
| +#endif /* FIX_BROKEN_PPC_BUILD */ |
| |
| #else |
| |
| @@ -211,6 +213,7 @@ static inline void init_thread(struct target_pt_regs *regs, struct image_info *i |
| regs->edx = 0; |
| } |
| |
| +#ifdef FIX_BROKEN_PPC_BUILD |
| typedef target_ulong elf_greg_t; |
| typedef uint16_t target_uid_t; |
| typedef uint16_t target_gid_t; |
| @@ -246,9 +249,12 @@ static void elf_core_copy_regs(elf_gregset_t *regs, const CPUState *env) |
| (*regs)[15] = env->regs[R_ESP]; |
| (*regs)[16] = env->segs[R_SS].selector & 0xffff; |
| } |
| +#endif /* FIX_BROKEN_PPC_BUILD */ |
| #endif |
| |
| +#ifdef FIX_BROKEN_PPC_BUILD |
| #define USE_ELF_CORE_DUMP |
| +#endif /* FIX_BROKEN_PPC_BUILD */ |
| #define ELF_EXEC_PAGESIZE 4096 |
| |
| #endif |
| @@ -286,6 +292,7 @@ static inline void init_thread(struct target_pt_regs *regs, struct image_info *i |
| regs->ARM_r10 = infop->start_data; |
| } |
| |
| +#ifdef FIX_BROKEN_PPC_BUILD |
| typedef uint32_t elf_greg_t; |
| typedef uint16_t target_uid_t; |
| typedef uint16_t target_gid_t; |
| @@ -318,6 +325,7 @@ static void elf_core_copy_regs(elf_gregset_t *regs, const CPUState *env) |
| } |
| |
| #define USE_ELF_CORE_DUMP |
| +#endif /* FIX_BROKEN_PPC_BUILD */ |
| #define ELF_EXEC_PAGESIZE 4096 |
| |
| enum |
| @@ -421,6 +429,7 @@ static inline void init_thread(struct target_pt_regs *regs, struct image_info *i |
| |
| /* Feature masks for the Aux Vector Hardware Capabilities (AT_HWCAP). |
| See arch/powerpc/include/asm/cputable.h. */ |
| +#ifndef PPC_FEATURE_32 |
| enum { |
| PPC_FEATURE_32 = 0x80000000, |
| PPC_FEATURE_64 = 0x40000000, |
| @@ -452,6 +461,7 @@ enum { |
| PPC_FEATURE_TRUE_LE = 0x00000002, |
| PPC_FEATURE_PPC_LE = 0x00000001, |
| }; |
| +#endif /* !defined(PPC_FEATURE_32) */ |
| |
| #define ELF_HWCAP get_elf_hwcap() |
| |
| -- |
| 1.6.2.5 |
| |