On Tue, Aug 18, 2015 at 6:04 PM, Laurent Vivier <lviv...@redhat.com> wrote: > I'm wondering if the existing behavior is good: > > what I have understood is we define ppc32 guests in ppc64 target to be > able to run 32bit guest with 64bit qemu, but I don't think it means an > oldworld mac is able to run a ppc64 kernel. > > So I think we could use directly EM_PPC with e500, ppc440, virtex_ml507,
Definitely right for virtex_ml507. > prep and oldworld, and EM_PPC64 with pseries/spapr. Newworld mac should > be able to run EM_PPC and EM_PPC64 kernel (G3/G4 <-> G5), according to > the machine type and not to the target. > Sounds good, can the PPC maintainers give a nod to this idea? Otherwise I'd like to run with the patch as is, as the patch as-is is non-functional which is the intent of the overall series. Regards, Peter > Laurent > > On 15/08/2015 16:28, Peter Crosthwaite wrote: >> From: Peter Crosthwaite <crosthwaitepe...@gmail.com> >> >> Rename ELF_MACHINE to be PPC specific. This is used as-is by the >> various PPC bootloaders and is locally defined to ELF_MACHINE in linux >> user in PPC specific ifdeffery. >> >> This removes another architecture specific definition from the global >> namespace (as desired by multi-arch). >> >> Cc: Alexander Graf <ag...@suse.de> >> Cc: qemu-...@nongnu.org >> Signed-off-by: Peter Crosthwaite <crosthwaite.pe...@gmail.com> >> --- >> hw/ppc/e500.c | 2 +- >> hw/ppc/mac_newworld.c | 4 ++-- >> hw/ppc/mac_oldworld.c | 4 ++-- >> hw/ppc/ppc440_bamboo.c | 2 +- >> hw/ppc/prep.c | 2 +- >> hw/ppc/spapr.c | 4 ++-- >> hw/ppc/virtex_ml507.c | 2 +- >> linux-user/elfload.c | 1 + >> target-ppc/cpu.h | 4 ++-- >> 9 files changed, 13 insertions(+), 12 deletions(-) >> >> diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c >> index d300846..8b45bf6 100644 >> --- a/hw/ppc/e500.c >> +++ b/hw/ppc/e500.c >> @@ -1017,7 +1017,7 @@ void ppce500_init(MachineState *machine, PPCE500Params >> *params) >> filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); >> >> bios_size = load_elf(filename, NULL, NULL, &bios_entry, &loadaddr, NULL, >> - 1, ELF_MACHINE, 0); >> + 1, PPC_ELF_MACHINE, 0); >> if (bios_size < 0) { >> /* >> * Hrm. No ELF image? Try a uImage, maybe someone is giving us an >> diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c >> index 77d5c81..81d744c 100644 >> --- a/hw/ppc/mac_newworld.c >> +++ b/hw/ppc/mac_newworld.c >> @@ -219,7 +219,7 @@ static void ppc_core99_init(MachineState *machine) >> /* Load OpenBIOS (ELF) */ >> if (filename) { >> bios_size = load_elf(filename, NULL, NULL, NULL, >> - NULL, NULL, 1, ELF_MACHINE, 0); >> + NULL, NULL, 1, PPC_ELF_MACHINE, 0); >> >> g_free(filename); >> } else { >> @@ -242,7 +242,7 @@ static void ppc_core99_init(MachineState *machine) >> kernel_base = KERNEL_LOAD_ADDR; >> >> kernel_size = load_elf(kernel_filename, translate_kernel_address, >> NULL, >> - NULL, &lowaddr, NULL, 1, ELF_MACHINE, 0); >> + NULL, &lowaddr, NULL, 1, PPC_ELF_MACHINE, 0); >> if (kernel_size < 0) >> kernel_size = load_aout(kernel_filename, kernel_base, >> ram_size - kernel_base, bswap_needed, >> diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c >> index 06fdbaf..00cb080 100644 >> --- a/hw/ppc/mac_oldworld.c >> +++ b/hw/ppc/mac_oldworld.c >> @@ -147,7 +147,7 @@ static void ppc_heathrow_init(MachineState *machine) >> /* Load OpenBIOS (ELF) */ >> if (filename) { >> bios_size = load_elf(filename, 0, NULL, NULL, NULL, NULL, >> - 1, ELF_MACHINE, 0); >> + 1, PPC_ELF_MACHINE, 0); >> g_free(filename); >> } else { >> bios_size = -1; >> @@ -168,7 +168,7 @@ static void ppc_heathrow_init(MachineState *machine) >> #endif >> kernel_base = KERNEL_LOAD_ADDR; >> kernel_size = load_elf(kernel_filename, translate_kernel_address, >> NULL, >> - NULL, &lowaddr, NULL, 1, ELF_MACHINE, 0); >> + NULL, &lowaddr, NULL, 1, PPC_ELF_MACHINE, 0); >> if (kernel_size < 0) >> kernel_size = load_aout(kernel_filename, kernel_base, >> ram_size - kernel_base, bswap_needed, >> diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c >> index 032fa80..c54f79d 100644 >> --- a/hw/ppc/ppc440_bamboo.c >> +++ b/hw/ppc/ppc440_bamboo.c >> @@ -256,7 +256,7 @@ static void bamboo_init(MachineState *machine) >> NULL, NULL); >> if (success < 0) { >> success = load_elf(kernel_filename, NULL, NULL, &elf_entry, >> - &elf_lowaddr, NULL, 1, ELF_MACHINE, 0); >> + &elf_lowaddr, NULL, 1, PPC_ELF_MACHINE, 0); >> entry = elf_entry; >> loadaddr = elf_lowaddr; >> } >> diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c >> index 45b5f62..b421bff 100644 >> --- a/hw/ppc/prep.c >> +++ b/hw/ppc/prep.c >> @@ -610,7 +610,7 @@ static void ppc_prep_init(MachineState *machine) >> bios_name = BIOS_FILENAME; >> } >> qdev_prop_set_string(dev, "bios-name", bios_name); >> - qdev_prop_set_uint32(dev, "elf-machine", ELF_MACHINE); >> + qdev_prop_set_uint32(dev, "elf-machine", PPC_ELF_MACHINE); >> pcihost = PCI_HOST_BRIDGE(dev); >> object_property_add_child(qdev_get_machine(), "raven", OBJECT(dev), >> NULL); >> qdev_init_nofail(dev); >> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c >> index bf0c64f..4500497 100644 >> --- a/hw/ppc/spapr.c >> +++ b/hw/ppc/spapr.c >> @@ -1636,11 +1636,11 @@ static void ppc_spapr_init(MachineState *machine) >> uint64_t lowaddr = 0; >> >> kernel_size = load_elf(kernel_filename, translate_kernel_address, >> NULL, >> - NULL, &lowaddr, NULL, 1, ELF_MACHINE, 0); >> + NULL, &lowaddr, NULL, 1, PPC_ELF_MACHINE, 0); >> if (kernel_size == ELF_LOAD_WRONG_ENDIAN) { >> kernel_size = load_elf(kernel_filename, >> translate_kernel_address, NULL, >> - NULL, &lowaddr, NULL, 0, ELF_MACHINE, 0); >> + NULL, &lowaddr, NULL, 0, >> PPC_ELF_MACHINE, 0); >> kernel_le = kernel_size > 0; >> } >> if (kernel_size < 0) { >> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c >> index de86f7c..d3cf437 100644 >> --- a/hw/ppc/virtex_ml507.c >> +++ b/hw/ppc/virtex_ml507.c >> @@ -257,7 +257,7 @@ static void virtex_init(MachineState *machine) >> >> /* Boots a kernel elf binary. */ >> kernel_size = load_elf(kernel_filename, NULL, NULL, >> - &entry, &low, &high, 1, ELF_MACHINE, 0); >> + &entry, &low, &high, 1, PPC_ELF_MACHINE, 0); >> boot_info.bootstrap_pc = entry & 0x00ffffff; >> >> if (kernel_size < 0) { >> diff --git a/linux-user/elfload.c b/linux-user/elfload.c >> index 09e1e6a..4ade8e9 100644 >> --- a/linux-user/elfload.c >> +++ b/linux-user/elfload.c >> @@ -678,6 +678,7 @@ static inline void init_thread(struct target_pt_regs >> *regs, >> >> #ifdef TARGET_PPC >> >> +#define ELF_MACHINE PPC_ELF_MACHINE >> #define ELF_START_MMAP 0x80000000 >> >> #if defined(TARGET_PPC64) && !defined(TARGET_ABI32) >> diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h >> index 6f76674..2bb3934 100644 >> --- a/target-ppc/cpu.h >> +++ b/target-ppc/cpu.h >> @@ -81,9 +81,9 @@ >> #include "fpu/softfloat.h" >> >> #if defined (TARGET_PPC64) >> -#define ELF_MACHINE EM_PPC64 >> +#define PPC_ELF_MACHINE EM_PPC64 >> #else >> -#define ELF_MACHINE EM_PPC >> +#define PPC_ELF_MACHINE EM_PPC >> #endif >> >> >> /*****************************************************************************/ >>