Revision 7df526e3 hw/mips_mipssim.c

b/hw/mips_mipssim.c
40 40

  
41 41
#define VIRT_TO_PHYS_ADDEND (-((int64_t)(int32_t)0x80000000))
42 42

  
43
static struct _loaderparams {
44
    int ram_size;
45
    const char *kernel_filename;
46
    const char *kernel_cmdline;
47
    const char *initrd_filename;
48
} loaderparams;
49

  
43 50
static void load_kernel (CPUState *env)
44 51
{
45 52
    int64_t entry, kernel_low, kernel_high;
......
47 54
    long initrd_size;
48 55
    ram_addr_t initrd_offset;
49 56

  
50
    kernel_size = load_elf(env->kernel_filename, VIRT_TO_PHYS_ADDEND,
57
    kernel_size = load_elf(loaderparams.kernel_filename, VIRT_TO_PHYS_ADDEND,
51 58
                           &entry, &kernel_low, &kernel_high);
52 59
    if (kernel_size >= 0) {
53 60
        if ((entry & ~0x7fffffffULL) == 0x80000000)
......
55 62
        env->PC[env->current_tc] = entry;
56 63
    } else {
57 64
        fprintf(stderr, "qemu: could not load kernel '%s'\n",
58
                env->kernel_filename);
65
                loaderparams.kernel_filename);
59 66
        exit(1);
60 67
    }
61 68

  
62 69
    /* load initrd */
63 70
    initrd_size = 0;
64 71
    initrd_offset = 0;
65
    if (env->initrd_filename) {
66
        initrd_size = get_image_size (env->initrd_filename);
72
    if (loaderparams.initrd_filename) {
73
        initrd_size = get_image_size (loaderparams.initrd_filename);
67 74
        if (initrd_size > 0) {
68 75
            initrd_offset = (kernel_high + ~TARGET_PAGE_MASK) & TARGET_PAGE_MASK;
69
            if (initrd_offset + initrd_size > env->ram_size) {
76
            if (initrd_offset + initrd_size > loaderparams.ram_size) {
70 77
                fprintf(stderr,
71 78
                        "qemu: memory too small for initial ram disk '%s'\n",
72
                        env->initrd_filename);
79
                        loaderparams.initrd_filename);
73 80
                exit(1);
74 81
            }
75
            initrd_size = load_image(env->initrd_filename,
82
            initrd_size = load_image(loaderparams.initrd_filename,
76 83
                                     phys_ram_base + initrd_offset);
77 84
        }
78 85
        if (initrd_size == (target_ulong) -1) {
79 86
            fprintf(stderr, "qemu: could not load initial ram disk '%s'\n",
80
                    env->initrd_filename);
87
                    loaderparams.initrd_filename);
81 88
            exit(1);
82 89
        }
83 90
    }
......
89 96
    cpu_reset(env);
90 97
    cpu_mips_register(env, NULL);
91 98

  
92
    if (env->kernel_filename)
99
    if (loaderparams.kernel_filename)
93 100
        load_kernel (env);
94 101
}
95 102

  
......
144 151
    }
145 152

  
146 153
    if (kernel_filename) {
147
        env->ram_size = ram_size;
148
        env->kernel_filename = kernel_filename;
149
        env->kernel_cmdline = kernel_cmdline;
150
        env->initrd_filename = initrd_filename;
154
        loaderparams.ram_size = ram_size;
155
        loaderparams.kernel_filename = kernel_filename;
156
        loaderparams.kernel_cmdline = kernel_cmdline;
157
        loaderparams.initrd_filename = initrd_filename;
151 158
        load_kernel(env);
152 159
    }
153 160

  

Also available in: Unified diff