On Sat, May 30, 2026 at 3:12 PM Richard Henderson < [email protected]> wrote:
> Create a structure to hold a beginning/end range for guest virtual > addresses, for use by probe_guest_base. Use vaddr for clarity. > > Signed-off-by: Richard Henderson <[email protected]> > --- > linux-user/user-internals.h | 5 +++++ > linux-user/elfload.c | 36 ++++++++++++++++++------------------ > 2 files changed, 23 insertions(+), 18 deletions(-) > Reviewed-by: Warner Losh <[email protected]> This mechanical change looks good to me, and I didn't see any mistakes in the array to struct conversion. > diff --git a/linux-user/user-internals.h b/linux-user/user-internals.h > index 21daf422b7..73b0109e9c 100644 > --- a/linux-user/user-internals.h > +++ b/linux-user/user-internals.h > @@ -75,6 +75,11 @@ void clone_fork_end(bool child); > void fork_start(void); > void fork_end(pid_t pid); > > +typedef struct PGBRange { > + vaddr lo; > + vaddr hi; > +} PGBRange; > + > /** > * probe_guest_base: > * @image_name: the executable being loaded > diff --git a/linux-user/elfload.c b/linux-user/elfload.c > index 0e757787d2..e1e1ee4674 100644 > --- a/linux-user/elfload.c > +++ b/linux-user/elfload.c > @@ -828,15 +828,15 @@ static int pgb_try_mmap_skip_brk(uintptr_t addr, > uintptr_t addr_last, > */ > > typedef struct PGBAddrs { > - uintptr_t bounds[3][2]; /* start/last pairs */ > + PGBRange bounds[3]; > int nbounds; > } PGBAddrs; > > static bool pgb_try_mmap_set(const PGBAddrs *ga, uintptr_t base, > uintptr_t brk) > { > for (int i = ga->nbounds - 1; i >= 0; --i) { > - if (pgb_try_mmap_skip_brk(ga->bounds[i][0] + base, > - ga->bounds[i][1] + base, > + if (pgb_try_mmap_skip_brk(ga->bounds[i].lo + base, > + ga->bounds[i].hi + base, > brk, i == 0 && reserved_va) <= 0) { > return false; > } > @@ -875,26 +875,26 @@ static bool pgb_addr_set(PGBAddrs *ga, abi_ulong > guest_loaddr, > n = 0; > > if (reserved_va) { > - ga->bounds[n][0] = try_identity ? mmap_min_addr : 0; > - ga->bounds[n][1] = reserved_va; > + ga->bounds[n].lo = try_identity ? mmap_min_addr : 0; > + ga->bounds[n].hi = reserved_va; > n++; > /* LO_COMMPAGE and NULL handled by reserving from 0. */ > } else { > /* Add any LO_COMMPAGE or NULL page. */ > if (LO_COMMPAGE != -1) { > - ga->bounds[n][0] = 0; > - ga->bounds[n][1] = LO_COMMPAGE + TARGET_PAGE_SIZE - 1; > + ga->bounds[n].lo = 0; > + ga->bounds[n].hi = LO_COMMPAGE + TARGET_PAGE_SIZE - 1; > n++; > } else if (!try_identity) { > - ga->bounds[n][0] = 0; > - ga->bounds[n][1] = TARGET_PAGE_SIZE - 1; > + ga->bounds[n].lo = 0; > + ga->bounds[n].hi = TARGET_PAGE_SIZE - 1; > n++; > } > > /* Add the guest image for ET_EXEC. */ > if (guest_loaddr) { > - ga->bounds[n][0] = guest_loaddr; > - ga->bounds[n][1] = guest_hiaddr; > + ga->bounds[n].lo = guest_loaddr; > + ga->bounds[n].hi = guest_hiaddr; > n++; > } > } > @@ -909,8 +909,8 @@ static bool pgb_addr_set(PGBAddrs *ga, abi_ulong > guest_loaddr, > > /* Add any HI_COMMPAGE not covered by reserved_va. */ > if (reserved_va < HI_COMMPAGE) { > - ga->bounds[n][0] = HI_COMMPAGE & qemu_real_host_page_mask(); > - ga->bounds[n][1] = HI_COMMPAGE + TARGET_PAGE_SIZE - 1; > + ga->bounds[n].lo = HI_COMMPAGE & qemu_real_host_page_mask(); > + ga->bounds[n].hi = HI_COMMPAGE + TARGET_PAGE_SIZE - 1; > n++; > } > > @@ -976,8 +976,8 @@ static uintptr_t pgb_try_itree(const PGBAddrs *ga, > uintptr_t base, > IntervalTreeRoot *root) > { > for (int i = ga->nbounds - 1; i >= 0; --i) { > - uintptr_t s = base + ga->bounds[i][0]; > - uintptr_t l = base + ga->bounds[i][1]; > + uintptr_t s = base + ga->bounds[i].lo; > + uintptr_t l = base + ga->bounds[i].hi; > IntervalTreeNode *n; > > if (l < s) { > @@ -1076,9 +1076,9 @@ static void pgb_dynamic(const char *image_name, > uintptr_t guest_loaddr, > "guest address mapping requirements", image_name); > > for (int i = 0; i < ga.nbounds; ++i) { > - error_printf(" %0*" PRIx64 "-%0*" PRIx64 "\n", > - w, (uint64_t)ga.bounds[i][0], > - w, (uint64_t)ga.bounds[i][1]); > + error_printf(" %0*" VADDR_PRIx "-%0*" VADDR_PRIx "\n", > + w, ga.bounds[i].lo, > + w, ga.bounds[i].hi); > } > exit(EXIT_FAILURE); > } > -- > 2.43.0 > >
