Revision ca20cf32 hw/ppc_newworld.c
b/hw/ppc_newworld.c | ||
---|---|---|
36 | 36 |
#include "escc.h" |
37 | 37 |
#include "openpic.h" |
38 | 38 |
#include "ide.h" |
39 |
#include "loader.h" |
|
40 |
#include "elf.h" |
|
39 | 41 |
|
40 | 42 |
#define MAX_IDE_BUS 2 |
41 | 43 |
#define VGA_BIOS_SIZE 65536 |
... | ... | |
145 | 147 |
|
146 | 148 |
/* Load OpenBIOS (ELF) */ |
147 | 149 |
if (filename) { |
148 |
bios_size = load_elf(filename, 0, NULL, NULL, NULL); |
|
150 |
bios_size = load_elf(filename, 0, NULL, NULL, NULL, 1, ELF_MACHINE, 0); |
|
151 |
|
|
149 | 152 |
qemu_free(filename); |
150 | 153 |
} else { |
151 | 154 |
bios_size = -1; |
... | ... | |
187 | 190 |
|
188 | 191 |
if (linux_boot) { |
189 | 192 |
uint64_t lowaddr = 0; |
193 |
int bswap_needed; |
|
194 |
|
|
195 |
#ifdef BSWAP_NEEDED |
|
196 |
bswap_needed = 1; |
|
197 |
#else |
|
198 |
bswap_needed = 0; |
|
199 |
#endif |
|
190 | 200 |
kernel_base = KERNEL_LOAD_ADDR; |
191 | 201 |
|
192 | 202 |
/* Now we can load the kernel. The first step tries to load the kernel |
193 | 203 |
supposing PhysAddr = 0x00000000. If that was wrong the kernel is |
194 | 204 |
loaded again, the new PhysAddr being computed from lowaddr. */ |
195 |
kernel_size = load_elf(kernel_filename, kernel_base, NULL, &lowaddr, NULL); |
|
205 |
kernel_size = load_elf(kernel_filename, kernel_base, NULL, &lowaddr, NULL, |
|
206 |
1, ELF_MACHINE, 0); |
|
196 | 207 |
if (kernel_size > 0 && lowaddr != KERNEL_LOAD_ADDR) { |
197 | 208 |
kernel_size = load_elf(kernel_filename, (2 * kernel_base) - lowaddr, |
198 |
NULL, NULL, NULL); |
|
209 |
NULL, NULL, NULL, 1, ELF_MACHINE, 0);
|
|
199 | 210 |
} |
200 | 211 |
if (kernel_size < 0) |
201 | 212 |
kernel_size = load_aout(kernel_filename, kernel_base, |
202 |
ram_size - kernel_base); |
|
213 |
ram_size - kernel_base, bswap_needed, |
|
214 |
TARGET_PAGE_SIZE); |
|
203 | 215 |
if (kernel_size < 0) |
204 | 216 |
kernel_size = load_image_targphys(kernel_filename, |
205 | 217 |
kernel_base, |
Also available in: Unified diff