Revision 409dbce5 hw/ppc_oldworld.c
b/hw/ppc_oldworld.c | ||
---|---|---|
122 | 122 |
return 0; |
123 | 123 |
} |
124 | 124 |
|
125 |
|
|
126 |
static uint64_t translate_kernel_address(void *opaque, uint64_t addr) |
|
127 |
{ |
|
128 |
return (addr & 0x0fffffff) + KERNEL_LOAD_ADDR; |
|
129 |
} |
|
130 |
|
|
125 | 131 |
static void ppc_heathrow_init (ram_addr_t ram_size, |
126 | 132 |
const char *boot_device, |
127 | 133 |
const char *kernel_filename, |
... | ... | |
185 | 191 |
|
186 | 192 |
/* Load OpenBIOS (ELF) */ |
187 | 193 |
if (filename) { |
188 |
bios_size = load_elf(filename, 0, NULL, NULL, NULL, |
|
189 |
1, ELF_MACHINE, 0);
|
|
194 |
bios_size = load_elf(filename, 0, NULL, NULL, NULL, NULL,
|
|
195 |
1, ELF_MACHINE, 0); |
|
190 | 196 |
qemu_free(filename); |
191 | 197 |
} else { |
192 | 198 |
bios_size = -1; |
... | ... | |
236 | 242 |
bswap_needed = 0; |
237 | 243 |
#endif |
238 | 244 |
kernel_base = KERNEL_LOAD_ADDR; |
239 |
/* Now we can load the kernel. The first step tries to load the kernel |
|
240 |
supposing PhysAddr = 0x00000000. If that was wrong the kernel is |
|
241 |
loaded again, the new PhysAddr being computed from lowaddr. */ |
|
242 |
kernel_size = load_elf(kernel_filename, kernel_base, NULL, &lowaddr, NULL, |
|
243 |
1, ELF_MACHINE, 0); |
|
244 |
if (kernel_size > 0 && lowaddr != KERNEL_LOAD_ADDR) { |
|
245 |
kernel_size = load_elf(kernel_filename, (2 * kernel_base) - lowaddr, |
|
246 |
NULL, NULL, NULL, 1, ELF_MACHINE, 0); |
|
247 |
} |
|
245 |
kernel_size = load_elf(kernel_filename, translate_kernel_address, NULL, |
|
246 |
NULL, &lowaddr, NULL, 1, ELF_MACHINE, 0); |
|
248 | 247 |
if (kernel_size < 0) |
249 | 248 |
kernel_size = load_aout(kernel_filename, kernel_base, |
250 | 249 |
ram_size - kernel_base, bswap_needed, |
Also available in: Unified diff