2 * Shared mapping creation.
20 #define SHM_PROT_PAGES 30
25 unsigned int shm_pages
;
27 /* round up shm to nearest page size */
28 shm_pages
= ((sizeof(struct shm_s
) + page_size
- 1) & ~(page_size
- 1)) / page_size
;
30 /* Waste some address space to set up some "protection" near the SHM location. */
31 p
= alloc_shared((SHM_PROT_PAGES
+ shm_pages
+ SHM_PROT_PAGES
) * page_size
);
33 /* clear whole mapping, including the redzones. */
34 memset(p
, 0, shm_pages
* page_size
);
36 /* set the redzones to PROT_NONE */
37 mprotect(p
, SHM_PROT_PAGES
* page_size
, PROT_NONE
);
38 mprotect(p
+ (SHM_PROT_PAGES
+ shm_pages
) * page_size
,
39 SHM_PROT_PAGES
* page_size
, PROT_NONE
);
41 shm
= p
+ SHM_PROT_PAGES
* page_size
;
44 void create_shm_arrays(void)
46 shm
->child_syscall_count
= alloc_shared(max_children
* sizeof(unsigned long));
48 shm
->pids
= alloc_shared(max_children
* sizeof(pid_t
));
50 shm
->tv
= alloc_shared(max_children
* sizeof(struct timeval
));
52 shm
->previous_syscallno
= alloc_shared(max_children
* sizeof(unsigned int));
53 shm
->syscallno
= alloc_shared(max_children
* sizeof(unsigned int));
55 shm
->previous_a1
= alloc_shared(max_children
* sizeof(unsigned long));
56 shm
->previous_a2
= alloc_shared(max_children
* sizeof(unsigned long));
57 shm
->previous_a3
= alloc_shared(max_children
* sizeof(unsigned long));
58 shm
->previous_a4
= alloc_shared(max_children
* sizeof(unsigned long));
59 shm
->previous_a5
= alloc_shared(max_children
* sizeof(unsigned long));
60 shm
->previous_a6
= alloc_shared(max_children
* sizeof(unsigned long));
62 shm
->a1
= alloc_shared(max_children
* sizeof(unsigned long));
63 shm
->a2
= alloc_shared(max_children
* sizeof(unsigned long));
64 shm
->a3
= alloc_shared(max_children
* sizeof(unsigned long));
65 shm
->a4
= alloc_shared(max_children
* sizeof(unsigned long));
66 shm
->a5
= alloc_shared(max_children
* sizeof(unsigned long));
67 shm
->a6
= alloc_shared(max_children
* sizeof(unsigned long));
69 shm
->mappings
= alloc_shared(max_children
* sizeof(struct map
*));
70 shm
->num_mappings
= alloc_shared(max_children
* sizeof(unsigned int));
72 shm
->seeds
= alloc_shared(max_children
* sizeof(int));
73 shm
->child_type
= alloc_shared(max_children
* sizeof(unsigned char));
74 shm
->kill_count
= alloc_shared(max_children
* sizeof(unsigned char));
75 shm
->logfiles
= alloc_shared(max_children
* sizeof(FILE *));
76 shm
->retval
= alloc_shared(max_children
* sizeof(unsigned long));
77 shm
->scratch
= alloc_shared(max_children
* sizeof(unsigned long));
78 shm
->do32bit
= alloc_shared(max_children
* sizeof(bool));
85 output(2, "shm is at %p\n", shm
);
87 shm
->total_syscalls_done
= 1;
89 if (user_set_seed
== TRUE
)
90 shm
->seed
= init_seed(seed
);
92 shm
->seed
= new_seed();
93 /* Set seed in parent thread */
96 for (i
= 0; i
< max_children
; i
++) {
98 shm
->pids
[i
] = EMPTY_PIDSLOT
;
100 shm
->previous_syscallno
[i
] = -1;
101 shm
->syscallno
[i
] = -1;
103 shm
->previous_a1
[i
] = shm
->a1
[i
] = -1;
104 shm
->previous_a2
[i
] = shm
->a2
[i
] = -1;
105 shm
->previous_a3
[i
] = shm
->a3
[i
] = -1;
106 shm
->previous_a4
[i
] = shm
->a4
[i
] = -1;
107 shm
->previous_a5
[i
] = shm
->a5
[i
] = -1;
108 shm
->previous_a6
[i
] = shm
->a6
[i
] = -1;