mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
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>
This commit is contained in:
parent
04e90c1313
commit
5fc983af8b
3 changed files with 163 additions and 61 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue