Commit ca316c11 authored by Mark Cave-Ayland's avatar Mark Cave-Ayland
Browse files

loader: don't perform overlapping address check for memory region ROM images



All memory region ROM images have a base address of 0 which causes the overlapping
address check to fail if more than one memory region ROM image is present, or an
existing ROM image is loaded at address 0.

Make sure that we ignore the overlapping address check in
rom_check_and_register_reset() if this is a memory region ROM image. In particular
this fixes the "rom: requested regions overlap" error on startup when trying to
run qemu-system-sparc with a -kernel image since commit 74976386: "tcx: switch to
load_image_mr() and remove prom_addr hack".

Suggested-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Reviewed-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Signed-off-by: default avatarMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
parent 3ec7b5d8
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -1104,6 +1104,7 @@ int rom_check_and_register_reset(void)
        if (rom->fw_file) {
            continue;
        }
        if (!rom->mr) {
            if ((addr > rom->addr) && (as == rom->as)) {
                fprintf(stderr, "rom: requested regions overlap "
                        "(rom %s. free=0x" TARGET_FMT_plx
@@ -1113,11 +1114,12 @@ int rom_check_and_register_reset(void)
            }
            addr  = rom->addr;
            addr += rom->romsize;
            as = rom->as;
        }
        section = memory_region_find(rom->mr ? rom->mr : get_system_memory(),
                                     rom->addr, 1);
        rom->isrom = int128_nz(section.size) && memory_region_is_rom(section.mr);
        memory_region_unref(section.mr);
        as = rom->as;
    }
    qemu_register_reset(rom_reset, NULL);
    roms_loaded = 1;