1.1 --- a/libexec/lib/src/external_pager.cc Fri Jun 17 23:36:03 2022 +0200
1.2 +++ b/libexec/lib/src/external_pager.cc Fri Jun 17 23:54:54 2022 +0200
1.3 @@ -75,6 +75,9 @@
1.4 printf("fs_base = %lx\n", regs.fs_base);
1.5 printf("gs_base = %lx\n", regs.gs_base);
1.6
1.7 + while (1)
1.8 + l4_sleep_forever();
1.9 +
1.10 return L4_EOK;
1.11 }
1.12
1.13 @@ -105,17 +108,22 @@
1.14 if ((addr >= r.map_start) && (addr < r.map_start + r.size))
1.15 {
1.16 l4_addr_t page_addr = trunc(addr, L4_PAGESIZE);
1.17 + map_flags_t map_flags = (flags & 4 ? L4RE_DS_F_RX : 0) | (flags & 2 ? L4RE_DS_F_W : 0) | (flags & 1 ? L4RE_DS_F_R : 0);
1.18
1.19 - region->fpage = l4_fpage(r.start + (page_addr - r.map_start), L4_PAGESHIFT, r.flags);
1.20 + if (!map_flags)
1.21 + map_flags = L4RE_DS_F_R;
1.22 +
1.23 + region->fpage = l4_fpage(r.start + (page_addr - r.map_start), L4_PAGESHIFT, map_flags & r.flags);
1.24 region->snd_base = page_addr;
1.25
1.26 #if DEBUG
1.27 - printf("%lx...%lx from %lx...%lx offset %lx size %d rights %x\n",
1.28 + printf("%lx...%lx from %lx...%lx offset %lx size %d rights %x ds %lx\n",
1.29 r.map_start, region->snd_base,
1.30 r.start, l4_fpage_memaddr(region->fpage),
1.31 addr - r.map_start,
1.32 l4_fpage_size(region->fpage),
1.33 - l4_fpage_rights(region->fpage));
1.34 + l4_fpage_rights(region->fpage),
1.35 + r.ds);
1.36
1.37 printf("%lx -> ", addr);
1.38
1.39 @@ -228,10 +236,10 @@
1.40 l4_touch_rw((const void *) ds_start, size);
1.41
1.42 #if DEBUG
1.43 - printf("-> added region for %lx size %ld (%d)\n", region_start, region_size, page_order(region_size));
1.44 + printf("-> added region at %lx size %ld (%d) from %lx ds %lx\n", region_start, region_size, page_order(region_size), ds_start, ds);
1.45 #endif
1.46
1.47 - MappedRegion r(ds_start, region_size, flags & L4RE_DS_F_RIGHTS_MASK, region_start);
1.48 + MappedRegion r(ds_start, region_size, flags & L4RE_DS_F_RIGHTS_MASK, region_start, ds);
1.49
1.50 add(r);
1.51