Revision c570fd16 hw/mips_r4k.c

b/hw/mips_r4k.c
11 11

  
12 12
#define BIOS_FILENAME "mips_bios.bin"
13 13
//#define BIOS_FILENAME "system.bin"
14
#define KERNEL_LOAD_ADDR 0x80010000
15
#define INITRD_LOAD_ADDR 0x80800000
14
#define KERNEL_LOAD_ADDR SIGN_EXTEND32(0x80010000)
15
#define INITRD_LOAD_ADDR SIGN_EXTEND32(0x80800000)
16 16

  
17
#define VIRT_TO_PHYS_ADDEND (-0x80000000LL)
17
#define VIRT_TO_PHYS_ADDEND (-SIGN_EXTEND32(0x80000000LL))
18 18

  
19 19
static const int ide_iobase[2] = { 0x1f0, 0x170 };
20 20
static const int ide_iobase2[2] = { 0x3f6, 0x376 };
......
74 74
    long kernel_size, initrd_size;
75 75

  
76 76
    kernel_size = load_elf(kernel_filename, VIRT_TO_PHYS_ADDEND, &entry);
77
    if (kernel_size >= 0)
77
    if (kernel_size >= 0) {
78
        if ((entry & ~0x7fffffffULL) == 0x80000000)
79
            entry = SIGN_EXTEND32(entry);
78 80
        env->PC = entry;
79
    else {
81
    } else {
80 82
        kernel_size = load_image(kernel_filename,
81 83
                                 phys_ram_base + KERNEL_LOAD_ADDR + VIRT_TO_PHYS_ADDEND);
82 84
        if (kernel_size < 0) {
......
103 105
    if (initrd_size > 0) {
104 106
        int ret;
105 107
        ret = sprintf(phys_ram_base + (16 << 20) - 256,
106
                      "rd_start=0x%08x rd_size=%li ",
108
                      "rd_start=0x" TLSZ " rd_size=%li ",
107 109
                      INITRD_LOAD_ADDR,
108 110
                      initrd_size);
109 111
        strcpy (phys_ram_base + (16 << 20) - 256 + ret, kernel_cmdline);

Also available in: Unified diff