static int64_t load_kernel (CPUMIPSState *env)

{

    int64_t kernel_entry, kernel_low, kernel_high;

    int index = 0;

    long initrd_size;

    ram_addr_t initrd_offset;

    uint32_t *prom_buf;

    long prom_size;



    if (load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys, NULL,

                 (uint64_t *)&kernel_entry, (uint64_t *)&kernel_low,

                 (uint64_t *)&kernel_high, 0, ELF_MACHINE, 1) < 0) {

        fprintf(stderr, "qemu: could not load kernel '%s'\n",

                loaderparams.kernel_filename);

        exit(1);

    }



    /* load initrd */

    initrd_size = 0;

    initrd_offset = 0;

    if (loaderparams.initrd_filename) {

        initrd_size = get_image_size (loaderparams.initrd_filename);

        if (initrd_size > 0) {

            initrd_offset = (kernel_high + ~INITRD_PAGE_MASK) & INITRD_PAGE_MASK;

            if (initrd_offset + initrd_size > ram_size) {

                fprintf(stderr,

                        "qemu: memory too small for initial ram disk '%s'\n",

                        loaderparams.initrd_filename);

                exit(1);

            }

            initrd_size = load_image_targphys(loaderparams.initrd_filename,

                                     initrd_offset, ram_size - initrd_offset);

        }

        if (initrd_size == (target_ulong) -1) {

            fprintf(stderr, "qemu: could not load initial ram disk '%s'\n",

                    loaderparams.initrd_filename);

            exit(1);

        }

    }



    /* Setup prom parameters. */

    prom_size = ENVP_NB_ENTRIES * (sizeof(int32_t) + ENVP_ENTRY_SIZE);

    prom_buf = g_malloc(prom_size);



    prom_set(prom_buf, index++, "%s", loaderparams.kernel_filename);

    if (initrd_size > 0) {

        prom_set(prom_buf, index++, "rd_start=0x%" PRIx64 " rd_size=%li %s",

                 cpu_mips_phys_to_kseg0(NULL, initrd_offset), initrd_size,

                 loaderparams.kernel_cmdline);

    } else {

        prom_set(prom_buf, index++, "%s", loaderparams.kernel_cmdline);

    }



    /* Setup minimum environment variables */

    prom_set(prom_buf, index++, "busclock=33000000");

    prom_set(prom_buf, index++, "cpuclock=100000000");

    prom_set(prom_buf, index++, "memsize=%i", loaderparams.ram_size/1024/1024);

    prom_set(prom_buf, index++, "modetty0=38400n8r");

    prom_set(prom_buf, index++, NULL);



    rom_add_blob_fixed("prom", prom_buf, prom_size,

                       cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR));




    return kernel_entry;

}
static int64_t load_kernel (CPUMIPSState *env)

{

    int64_t kernel_entry, kernel_low, kernel_high;

    int index = 0;

    long initrd_size;

    ram_addr_t initrd_offset;

    uint32_t *prom_buf;

    long prom_size;



    if (load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys, NULL,

                 (uint64_t *)&kernel_entry, (uint64_t *)&kernel_low,

                 (uint64_t *)&kernel_high, 0, ELF_MACHINE, 1) < 0) {

        fprintf(stderr, "qemu: could not load kernel '%s'\n",

                loaderparams.kernel_filename);

        exit(1);

    }



    

    initrd_size = 0;

    initrd_offset = 0;

    if (loaderparams.initrd_filename) {

        initrd_size = get_image_size (loaderparams.initrd_filename);

        if (initrd_size > 0) {

            initrd_offset = (kernel_high + ~INITRD_PAGE_MASK) & INITRD_PAGE_MASK;

            if (initrd_offset + initrd_size > ram_size) {

                fprintf(stderr,

                        "qemu: memory too small for initial ram disk '%s'\n",

                        loaderparams.initrd_filename);

                exit(1);

            }

            initrd_size = load_image_targphys(loaderparams.initrd_filename,

                                     initrd_offset, ram_size - initrd_offset);

        }

        if (initrd_size == (target_ulong) -1) {

            fprintf(stderr, "qemu: could not load initial ram disk '%s'\n",

                    loaderparams.initrd_filename);

            exit(1);

        }

    }



    

    prom_size = ENVP_NB_ENTRIES * (sizeof(int32_t) + ENVP_ENTRY_SIZE);

    prom_buf = g_malloc(prom_size);



    prom_set(prom_buf, index++, "%s", loaderparams.kernel_filename);

    if (initrd_size > 0) {

        prom_set(prom_buf, index++, "rd_start=0x%" PRIx64 " rd_size=%li %s",

                 cpu_mips_phys_to_kseg0(NULL, initrd_offset), initrd_size,

                 loaderparams.kernel_cmdline);

    } else {

        prom_set(prom_buf, index++, "%s", loaderparams.kernel_cmdline);

    }



    

    prom_set(prom_buf, index++, "busclock=33000000");

    prom_set(prom_buf, index++, "cpuclock=100000000");

    prom_set(prom_buf, index++, "memsize=%i", loaderparams.ram_size/1024/1024);

    prom_set(prom_buf, index++, "modetty0=38400n8r");

    prom_set(prom_buf, index++, NULL);



    rom_add_blob_fixed("prom", prom_buf, prom_size,

                       cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR));




    return kernel_entry;

}
static int64_t FUNC_0 (CPUMIPSState *env)

{

    int64_t kernel_entry, kernel_low, kernel_high;

    int VAR_0 = 0;

    long VAR_1;

    ram_addr_t initrd_offset;

    uint32_t *prom_buf;

    long VAR_2;



    if (load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys, NULL,

                 (uint64_t *)&kernel_entry, (uint64_t *)&kernel_low,

                 (uint64_t *)&kernel_high, 0, ELF_MACHINE, 1) < 0) {

        fprintf(stderr, "qemu: could not load kernel '%s'\n",

                loaderparams.kernel_filename);

        exit(1);

    }



    

    VAR_1 = 0;

    initrd_offset = 0;

    if (loaderparams.initrd_filename) {

        VAR_1 = get_image_size (loaderparams.initrd_filename);

        if (VAR_1 > 0) {

            initrd_offset = (kernel_high + ~INITRD_PAGE_MASK) & INITRD_PAGE_MASK;

            if (initrd_offset + VAR_1 > ram_size) {

                fprintf(stderr,

                        "qemu: memory too small for initial ram disk '%s'\n",

                        loaderparams.initrd_filename);

                exit(1);

            }

            VAR_1 = load_image_targphys(loaderparams.initrd_filename,

                                     initrd_offset, ram_size - initrd_offset);

        }

        if (VAR_1 == (target_ulong) -1) {

            fprintf(stderr, "qemu: could not load initial ram disk '%s'\n",

                    loaderparams.initrd_filename);

            exit(1);

        }

    }



    

    VAR_2 = ENVP_NB_ENTRIES * (sizeof(int32_t) + ENVP_ENTRY_SIZE);

    prom_buf = g_malloc(VAR_2);



    prom_set(prom_buf, VAR_0++, "%s", loaderparams.kernel_filename);

    if (VAR_1 > 0) {

        prom_set(prom_buf, VAR_0++, "rd_start=0x%" PRIx64 " rd_size=%li %s",

                 cpu_mips_phys_to_kseg0(NULL, initrd_offset), VAR_1,

                 loaderparams.kernel_cmdline);

    } else {

        prom_set(prom_buf, VAR_0++, "%s", loaderparams.kernel_cmdline);

    }



    

    prom_set(prom_buf, VAR_0++, "busclock=33000000");

    prom_set(prom_buf, VAR_0++, "cpuclock=100000000");

    prom_set(prom_buf, VAR_0++, "memsize=%i", loaderparams.ram_size/1024/1024);

    prom_set(prom_buf, VAR_0++, "modetty0=38400n8r");

    prom_set(prom_buf, VAR_0++, NULL);



    rom_add_blob_fixed("prom", prom_buf, VAR_2,

                       cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR));




    return kernel_entry;

}
static int64_t FUNC_0 (CPUMIPSState *env)
{ int64_t kernel_entry, kernel_low, kernel_high; int VAR_0 = 0; long VAR_1; ram_addr_t initrd_offset; uint32_t *prom_buf; long VAR_2; if (load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys, NULL,
(uint64_t *)&kernel_entry, (uint64_t *)&kernel_low,
(uint64_t *)&kernel_high, 0, ELF_MACHINE, 1) < 0) { fprintf(stderr, "qemu: could not load kernel '%s'\n",
loaderparams.kernel_filename); exit(1); } VAR_1 = 0; initrd_offset = 0; if (loaderparams.initrd_filename) { VAR_1 = get_image_size (loaderparams.initrd_filename); if (VAR_1 > 0) { initrd_offset = (kernel_high + ~INITRD_PAGE_MASK) & INITRD_PAGE_MASK; if (initrd_offset + VAR_1 > ram_size) { fprintf(stderr,
"qemu: memory too small for initial ram disk '%s'\n",
loaderparams.initrd_filename); exit(1); } VAR_1 = load_image_targphys(loaderparams.initrd_filename,
initrd_offset, ram_size - initrd_offset); } if (VAR_1 == (target_ulong) -1) { fprintf(stderr, "qemu: could not load initial ram disk '%s'\n",
loaderparams.initrd_filename); exit(1); } } VAR_2 = ENVP_NB_ENTRIES * (sizeof(int32_t) + ENVP_ENTRY_SIZE); prom_buf = g_malloc(VAR_2); prom_set(prom_buf, VAR_0++, "%s", loaderparams.kernel_filename); if (VAR_1 > 0) { prom_set(prom_buf, VAR_0++, "rd_start=0x%" PRIx64 " rd_size=%li %s",
cpu_mips_phys_to_kseg0(NULL, initrd_offset), VAR_1,
loaderparams.kernel_cmdline); } else { prom_set(prom_buf, VAR_0++, "%s", loaderparams.kernel_cmdline); } prom_set(prom_buf, VAR_0++, "busclock=33000000"); prom_set(prom_buf, VAR_0++, "cpuclock=100000000"); prom_set(prom_buf, VAR_0++, "memsize=%i", loaderparams.ram_size/1024/1024); prom_set(prom_buf, VAR_0++, "modetty0=38400n8r"); prom_set(prom_buf, VAR_0++, NULL); rom_add_blob_fixed("prom", prom_buf, VAR_2,
cpu_mips_kseg0_to_phys(NULL, ENVP_ADDR)); return kernel_entry; }