1.1 --- a/tests/dstest_exec.cc Tue May 03 00:51:20 2022 +0200
1.2 +++ b/tests/dstest_exec.cc Tue May 03 01:01:30 2022 +0200
1.3 @@ -413,13 +413,20 @@
1.4 /* Populate stack with argument values. */
1.5
1.6 char *stack_arg = (char *) stack_element;
1.7 + char *stack_arg_top = stack_arg;
1.8 + int arg;
1.9
1.10 - stack_arg = (char *) trunc((offset_t) stack_arg - strlen(argv[0]) - 1, sizeof(l4_umword_t));
1.11 + for (arg = argc - 1; arg >= 0; arg--)
1.12 + {
1.13 + char *stack_arg_last = stack_arg;
1.14
1.15 - memset(stack_arg, 0, (char *) stack_element - stack_arg);
1.16 - memcpy(stack_arg, argv[0], strlen(argv[0]));
1.17 + stack_arg -= round(strlen(argv[arg]) + 1, sizeof(l4_umword_t));
1.18
1.19 - printf("Stack L4 program argument: %p / %lx\n", stack_arg, stack.region_address(stack_arg));
1.20 + memset(stack_arg, 0, stack_arg_last - stack_arg);
1.21 + memcpy(stack_arg, argv[arg], strlen(argv[arg]));
1.22 +
1.23 + printf("Stack L4 program argument: %p / %lx\n", stack_arg, stack.region_address(stack_arg));
1.24 + }
1.25
1.26 stack_element = (l4_umword_t *) stack_arg;
1.27
1.28 @@ -488,10 +495,17 @@
1.29 *(--stack_element) = 0;
1.30
1.31 /* Populate stack with argument pointers and count. */
1.32 - /* NOTE: Just one argument currently. */
1.33
1.34 *(--stack_element) = 0;
1.35 - *(--stack_element) = (l4_umword_t) (stack.region_address(stack_arg));
1.36 +
1.37 + stack_arg = stack_arg_top;
1.38 +
1.39 + for (arg = argc - 1; arg >= 0; arg--)
1.40 + {
1.41 + stack_arg -= round(strlen(argv[arg]) + 1, sizeof(l4_umword_t));
1.42 + *(--stack_element) = (l4_umword_t) (stack.region_address(stack_arg));
1.43 + }
1.44 +
1.45 *(--stack_element) = argc;
1.46
1.47 char *stack_adjusted = Ldr::adjust_sp((char *) stack_element, NULL);
1.48 @@ -616,9 +630,9 @@
1.49 /* Copy the payload regions to new dataspaces.
1.50 NOTE: This should be directed by the ELF metadata. */
1.51
1.52 - address_t program_start = 0x1000af3;
1.53 + address_t program_start = 0x1000b43;
1.54
1.55 - Segment program(0x1000000, 0x282ae, L4_FPAGE_RWX, 0, 0x282ae);
1.56 + Segment program(0x1000000, 0x28326, L4_FPAGE_RWX, 0, 0x28326);
1.57 Segment data(0x1029360, 0x8068, L4_FPAGE_RW, 0x28360, 0x2058);
1.58 Segment stack(0x80000000, 16 * L4_PAGESIZE, L4_FPAGE_RW);
1.59 Segment *segments[] = {&program, &data, &stack, NULL};