# HG changeset patch # User Paul Boddie # Date 1651759441 -7200 # Node ID a206608cd294e905ea59b67e01ac4507b5708127 # Parent 74c69ab2320e8af11682e1ff62c88b5dabf0cf9a Renamed Region to MappedRegion, located the stack below the UTCB area. diff -r 74c69ab2320e -r a206608cd294 tests/dstest_exec.cc --- a/tests/dstest_exec.cc Wed May 04 01:16:08 2022 +0200 +++ b/tests/dstest_exec.cc Thu May 05 16:04:01 2022 +0200 @@ -67,7 +67,6 @@ { /* UTCB location and size. */ - l4_addr_t utcb_start = Utcb_area_start; int utcb_log2size = page_order(Default_max_threads * L4_UTCB_OFFSET); /* Round up to at least one page. */ @@ -75,14 +74,14 @@ if (utcb_log2size < L4_PAGESHIFT) utcb_log2size = L4_PAGESHIFT; - return l4_fpage(utcb_start, utcb_log2size, 0); + return l4_fpage(Utcb_area_start, utcb_log2size, 0); } -/* Region data structures. */ +/* Mapped region data structures. */ -class Region +class MappedRegion { public: l4_addr_t start; @@ -90,13 +89,13 @@ l4_umword_t flags; l4_addr_t map_start; - explicit Region() + explicit MappedRegion() : start(0), log2size(0), flags(0), map_start(0) { } - explicit Region(l4_addr_t start, unsigned int log2size, l4_umword_t flags, - l4_addr_t map_start) + explicit MappedRegion(l4_addr_t start, unsigned int log2size, + l4_umword_t flags, l4_addr_t map_start) : start(start), log2size(log2size), flags(flags), map_start(map_start) { } @@ -109,7 +108,7 @@ class Segment { protected: - Region _region; + MappedRegion _region; public: /* Allocated memory. */ @@ -150,7 +149,7 @@ long fill(file_t *file); - Region ®ion(); + MappedRegion ®ion(); l4_addr_t region_address(char *address); @@ -178,9 +177,9 @@ return L4_EOK; } -Region &Segment::region() +MappedRegion &Segment::region() { - _region = Region((l4_addr_t) buf, page_order(region_size), flags, region_base); + _region = MappedRegion((l4_addr_t) buf, page_order(region_size), flags, region_base); return _region; } @@ -198,15 +197,15 @@ /* A simple system pager also acting as a region mapper. */ -typedef std::map Regions; +typedef std::map MappedRegions; class ExecPager : public PagerObject { protected: - Regions _regions; + MappedRegions _regions; public: - virtual void add(Region region) + virtual void add(MappedRegion region) { _regions[region.map_start] = region; } @@ -274,7 +273,7 @@ printf("page_fault(%lx, %lx) -> %lx (%lx) -> ", pfa, pc, addr, flags); #endif - Regions::iterator it = _regions.upper_bound(addr); + MappedRegions::iterator it = _regions.upper_bound(addr); if (it != _regions.begin()) it--; @@ -284,7 +283,7 @@ return -L4_ENOMEM; } - Region &r = it->second; + MappedRegion &r = it->second; if ((addr >= r.map_start) && (addr < r.map_start + (1UL << r.log2size))) { @@ -340,7 +339,7 @@ if (flags & L4RE_RM_F_SEARCH_ADDR) { address_t region_start = trunc(*start, increment); - Regions::iterator it = _regions.upper_bound(*start); + MappedRegions::iterator it = _regions.upper_bound(*start); if (!region_start) region_start += increment; @@ -353,8 +352,8 @@ while (it != _regions.end()) { - Regions::iterator next = it; - Region &r = it->second; + MappedRegions::iterator next = it; + MappedRegion &r = it->second; address_t start_limit; address_t end_limit = r.map_start; @@ -366,7 +365,7 @@ else { it--; - Region &pr = it->second; + MappedRegion &pr = it->second; start_limit = pr.map_start + (1UL << pr.log2size); it = next; } @@ -407,7 +406,7 @@ printf("-> added region for %lx size %ld (%d)\n", region_start, region_size, page_order(region_size)); #endif - add(Region(ds_start, page_order(region_size), flags & L4RE_DS_F_RIGHTS_MASK, region_start)); + add(MappedRegion(ds_start, page_order(region_size), flags & L4RE_DS_F_RIGHTS_MASK, region_start)); *start = region_start; return L4_EOK; @@ -841,10 +840,11 @@ NOTE: This should be directed by the ELF metadata. */ address_t program_start = 0x1000b43; + offset_t initial_stack_size = 16 * L4_PAGESIZE; Segment program(0x1000000, 0x28326, L4_FPAGE_RWX, 0, 0x28326); Segment data(0x1029360, 0x8068, L4_FPAGE_RW, 0x28360, 0x2058); - Segment stack(0x80000000 - 16 * L4_PAGESIZE, 16 * L4_PAGESIZE, L4_FPAGE_RW); + Segment stack(Utcb_area_start - initial_stack_size, initial_stack_size, L4_FPAGE_RW); Segment *segments[] = {&program, &data, &stack, NULL}; Segment **segment;