diff options
author | Alex Bennée <alex.bennee@linaro.org> | 2022-02-25 17:20:20 +0000 |
---|---|---|
committer | Alex Bennée <alex.bennee@linaro.org> | 2022-02-28 16:42:35 +0000 |
commit | 5fc983af8b20d69279f819efef2b340565d0e9a3 (patch) | |
tree | 3cfdbdf77a57ce019760f325aaef7c1ef3db5ba5 /include | |
parent | 04e90c1313fc6422fc3a5066fcc84ef3ef030ebf (diff) | |
download | qemu-5fc983af8b20d69279f819efef2b340565d0e9a3.zip qemu-5fc983af8b20d69279f819efef2b340565d0e9a3.tar.gz qemu-5fc983af8b20d69279f819efef2b340565d0e9a3.tar.bz2 |
semihosting/arm-compat: replace heuristic for softmmu SYS_HEAPINFO
The previous numbers were a guess at best and rather arbitrary without
taking into account anything that might be loaded. Instead of using
guesses based on the state of registers implement a new function that:
a) scans the MemoryRegions for the largest RAM block
b) iterates through all "ROM" blobs looking for the biggest gap
The "ROM" blobs include all code loaded via -kernel and the various
-device loader techniques.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Andrew Strauss <astrauss11@gmail.com>
Cc: Keith Packard <keithp@keithp.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20220225172021.3493923-18-alex.bennee@linaro.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/hw/loader.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/hw/loader.h b/include/hw/loader.h index 4fa485b..5572108 100644 --- a/include/hw/loader.h +++ b/include/hw/loader.h @@ -343,4 +343,18 @@ int rom_add_option(const char *file, int32_t bootindex); * overflow on real hardware too. */ #define UBOOT_MAX_GUNZIP_BYTES (64 << 20) +typedef struct RomGap { + hwaddr base; + size_t size; +} RomGap; + +/** + * rom_find_largest_gap_between: return largest gap between ROMs in given range + * + * Given a range of addresses, this function finds the largest + * contiguous subrange which has no ROMs loaded to it. That is, + * it finds the biggest gap which is free for use for other things. + */ +RomGap rom_find_largest_gap_between(hwaddr base, size_t size); + #endif |