1.1 --- a/tests/dstest_exec.cc Thu May 12 22:13:22 2022 +0200
1.2 +++ b/tests/dstest_exec.cc Sat May 14 23:52:24 2022 +0200
1.3 @@ -137,7 +137,7 @@
1.4
1.5 MappedRegion &r = it->second;
1.6
1.7 - if ((addr >= r.map_start) && (addr < r.map_start + (1UL << r.log2size)))
1.8 + if ((addr >= r.map_start) && (addr < r.map_start + r.size))
1.9 {
1.10 l4_addr_t page_addr = trunc(addr, L4_PAGESIZE);
1.11
1.12 @@ -145,9 +145,10 @@
1.13 region->snd_base = page_addr;
1.14
1.15 #if DEBUG
1.16 - printf("%lx...%lx from %lx...%lx size %d rights %x\n",
1.17 + printf("%lx...%lx from %lx...%lx offset %lx size %d rights %x\n",
1.18 r.map_start, region->snd_base,
1.19 r.start, l4_fpage_memaddr(region->fpage),
1.20 + addr - r.map_start,
1.21 l4_fpage_size(region->fpage),
1.22 l4_fpage_rights(region->fpage));
1.23 printf("%lx -> ", addr);
1.24 @@ -158,6 +159,11 @@
1.25 printf("\n");
1.26 #endif
1.27
1.28 + if (r.flags & L4RE_RM_F_W)
1.29 + l4_touch_rw((const void *) (r.start + (page_addr - r.map_start)), L4_PAGESIZE);
1.30 + else
1.31 + l4_touch_ro((const void *) (r.start + (page_addr - r.map_start)), L4_PAGESIZE);
1.32 +
1.33 return L4_EOK;
1.34 }
1.35
1.36 @@ -218,7 +224,7 @@
1.37 {
1.38 it--;
1.39 MappedRegion &pr = it->second;
1.40 - start_limit = pr.map_start + (1UL << pr.log2size);
1.41 + start_limit = pr.map_start + pr.size;
1.42 it = next;
1.43 }
1.44
1.45 @@ -258,7 +264,7 @@
1.46 printf("-> added region for %lx size %ld (%d)\n", region_start, region_size, page_order(region_size));
1.47 #endif
1.48
1.49 - add(MappedRegion(ds_start, page_order(region_size), flags & L4RE_DS_F_RIGHTS_MASK, region_start));
1.50 + add(MappedRegion(ds_start, region_size, flags & L4RE_DS_F_RIGHTS_MASK, region_start));
1.51
1.52 *start = region_start;
1.53 return L4_EOK;
1.54 @@ -397,20 +403,42 @@
1.55 if (segment == NULL)
1.56 continue;
1.57
1.58 - err = segment->allocate();
1.59 + if (segment->file_contents())
1.60 + {
1.61 + flags_t flags;
1.62 +
1.63 + if ((segment->region_flags() & L4RE_RM_F_RW) == L4RE_RM_F_RW)
1.64 + flags = O_RDWR;
1.65 + else if (segment->region_flags() & L4RE_RM_F_W)
1.66 + flags = O_WRONLY;
1.67 + else
1.68 + flags = O_RDONLY;
1.69 +
1.70 + file_t *file = client_open(argv[1], flags);
1.71
1.72 - if (err)
1.73 - {
1.74 - printf("Could not reserve memory.\n");
1.75 - return 1;
1.76 + if (file == NULL)
1.77 + {
1.78 + printf("Could not open file for segment.\n");
1.79 + return 1;
1.80 + }
1.81 +
1.82 + err = segment->fill(file);
1.83 +
1.84 + if (err)
1.85 + {
1.86 + printf("Could not fill segment from file.\n");
1.87 + return 1;
1.88 + }
1.89 }
1.90 -
1.91 - err = segment->fill(file);
1.92 + else
1.93 + {
1.94 + err = segment->allocate();
1.95
1.96 - if (err)
1.97 - {
1.98 - printf("Could not fill segment from file.\n");
1.99 - return 1;
1.100 + if (err)
1.101 + {
1.102 + printf("Could not allocate segment.\n");
1.103 + return 1;
1.104 + }
1.105 }
1.106 }
1.107