On 28.04.2013, at 12:16, Andreas Färber wrote: > Am 28.04.2013 11:44, schrieb Alexander Graf: >> >> On 28.04.2013, at 02:32, Andreas Färber wrote: >> >>> This prepares for switching from OpenHack'Ware to OpenBIOS. >>> >>> Signed-off-by: Andreas Färber <andreas.faer...@web.de> >>> --- >>> hw/ppc/prep.c | 21 +++++++++++++-------- >>> 1 file changed, 13 insertions(+), 8 deletions(-) >>> >>> diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c >>> index cceab3e..9bb0119 100644 >>> --- a/hw/ppc/prep.c >>> +++ b/hw/ppc/prep.c >>> @@ -41,6 +41,7 @@ >>> #include "sysemu/blockdev.h" >>> #include "sysemu/arch_init.h" >>> #include "exec/address-spaces.h" >>> +#include "elf.h" >>> >>> //#define HARD_DEBUG_PPC_IO >>> //#define DEBUG_PPC_IO >>> @@ -502,18 +503,22 @@ static void ppc_prep_init(QEMUMachineInitArgs *args) >>> bios_name = BIOS_FILENAME; >>> filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); >>> if (filename) { >>> - bios_size = get_image_size(filename); >>> + bios_size = load_elf(filename, NULL, NULL, NULL, >>> + NULL, NULL, 1, ELF_MACHINE, 0); >> >> This leaves bios_addr unset, no? > > bios_addr is not yet defined in this scope and doesn't seem needed here? > It's been a while that I wrote this (extracted it from a larger patch > since Fabien had a need for ELF support), thought I copied this from one > of the other ppc machines at the time...
Ah, sorry, my bad :). I didn't see that bios_addr was only defined inside the branch to specify where to load the image too. Interesting code ;). > >>> + if (bios_size < 0) { >>> + bios_size = get_image_size(filename); >>> + if (bios_size > 0 && bios_size <= BIOS_SIZE) { >>> + hwaddr bios_addr; >>> + bios_size = (bios_size + 0xfff) & ~0xfff; >>> + bios_addr = (uint32_t)(-bios_size); >>> + bios_size = load_image_targphys(filename, bios_addr, >>> bios_size); >>> + } >>> + } >>> } else { >>> bios_size = -1; >>> } >>> - if (bios_size > 0 && bios_size <= BIOS_SIZE) { >>> - hwaddr bios_addr; >>> - bios_size = (bios_size + 0xfff) & ~0xfff; >>> - bios_addr = (uint32_t)(-bios_size); >>> - bios_size = load_image_targphys(filename, bios_addr, bios_size); >>> - } >>> if (bios_size < 0 || bios_size > BIOS_SIZE) { >>> - hw_error("qemu: could not load PPC PREP bios '%s'\n", bios_name); >>> + fprintf(stderr, "qemu: could not load PPC PREP bios '%s'\n", >>> bios_name); >> >> You probably want to split this up. Bios_size < 0 means that image loading >> failed, which is always a fatal error. Bios_size > BIOS_SIZE should only >> really apply to flat image loading, I think. > > Sure, I might even pull that out of this patch for - I believe - this > was fixing a crash since the CPU was not yet properly initialized at > this point. IIUC you are suggesting to move the bios_size > BIOS_SIZE > check to after get_image_size() and leave only the bios_size < 0 check > here for both code paths. Yes :). > > Andreas > > P.S. I am happy about your review comments, but you were not > intentionally CC'ed on a PReP patch - this is apparently the result of > Paolo having used hw/ppc/ pattern in the ppc TCG guest core section, > which used to be target-ppc/ only. Should we exclude prep.c and future > PReP files or even hw/ppc/ from that MAINTAINERS section? Similar I think having hw/ppc at least listed as CC to qemu-...@nongnu.org is a good idea. I'm not sure how much hassle it'll be to split maintainership inside of a directory. Does it mean we have to list all files individually? That'd be annoying :). Alex