Lines Matching refs:mod_info

73 	struct vma_modifier_info *mod_info;  in FIXTURE()  local
171 static void wait_for_state(struct vma_modifier_info *mod_info, enum test_state state) in wait_for_state() argument
173 pthread_mutex_lock(&mod_info->sync_lock); in wait_for_state()
174 while (mod_info->curr_state != state) in wait_for_state()
175 pthread_cond_wait(&mod_info->sync_cond, &mod_info->sync_lock); in wait_for_state()
176 pthread_mutex_unlock(&mod_info->sync_lock); in wait_for_state()
179 static void signal_state(struct vma_modifier_info *mod_info, enum test_state state) in signal_state() argument
181 pthread_mutex_lock(&mod_info->sync_lock); in signal_state()
182 mod_info->curr_state = state; in signal_state()
183 pthread_cond_signal(&mod_info->sync_cond); in signal_state()
184 pthread_mutex_unlock(&mod_info->sync_lock); in signal_state()
187 static void stop_vma_modifier(struct vma_modifier_info *mod_info) in stop_vma_modifier() argument
189 wait_for_state(mod_info, SETUP_READY); in stop_vma_modifier()
190 mod_info->exit = true; in stop_vma_modifier()
191 signal_state(mod_info, SETUP_MODIFY_MAPS); in stop_vma_modifier()
292 signal_state(self->mod_info, SETUP_MODIFY_MAPS); in capture_mod_pattern()
293 wait_for_state(self->mod_info, SETUP_MAPS_MODIFIED); in capture_mod_pattern()
301 signal_state(self->mod_info, SETUP_RESTORE_MAPS); in capture_mod_pattern()
302 wait_for_state(self->mod_info, SETUP_MAPS_RESTORED); in capture_mod_pattern()
310 if (!self->mod_info->vma_mod_check(mod_last_line, mod_first_line, in capture_mod_pattern()
343 return mmap(self->mod_info->addr, self->page_size, self->mod_info->prot | PROT_EXEC, in split_vma()
349 return mmap(self->mod_info->addr, self->page_size, self->mod_info->prot, in merge_vma()
365 return mremap(self->mod_info->addr, self->page_size * 3, in shrink_vma()
371 return mremap(self->mod_info->addr, self->page_size, in expand_vma()
393 return mremap(self->mod_info->next_addr + self->page_size * 2, self->page_size, in remap_vma()
395 self->mod_info->addr + self->page_size) != MAP_FAILED; in remap_vma()
400 return mprotect(self->mod_info->addr + self->page_size, self->page_size, in patch_vma()
401 self->mod_info->prot) == 0; in patch_vma()
418 struct vma_modifier_info *mod_info; in FIXTURE_SETUP() local
437 self->mod_info = (struct vma_modifier_info *)mmap(NULL, self->shared_mem_size, in FIXTURE_SETUP()
439 ASSERT_NE(self->mod_info, MAP_FAILED); in FIXTURE_SETUP()
440 mod_info = self->mod_info; in FIXTURE_SETUP()
445 ASSERT_EQ(pthread_mutex_init(&mod_info->sync_lock, &mutex_attr), 0); in FIXTURE_SETUP()
448 ASSERT_EQ(pthread_cond_init(&mod_info->sync_cond, &cond_attr), 0); in FIXTURE_SETUP()
449 mod_info->vma_count = self->vma_count; in FIXTURE_SETUP()
450 mod_info->curr_state = INIT; in FIXTURE_SETUP()
451 mod_info->exit = false; in FIXTURE_SETUP()
459 for (i = 0; i < mod_info->vma_count; i++) { in FIXTURE_SETUP()
460 mod_info->child_mapped_addr[i] = mmap(NULL, self->page_size * 3, prot, in FIXTURE_SETUP()
462 ASSERT_NE(mod_info->child_mapped_addr[i], MAP_FAILED); in FIXTURE_SETUP()
466 signal_state(mod_info, CHILD_READY); in FIXTURE_SETUP()
467 wait_for_state(mod_info, PARENT_READY); in FIXTURE_SETUP()
469 signal_state(mod_info, SETUP_READY); in FIXTURE_SETUP()
470 wait_for_state(mod_info, SETUP_MODIFY_MAPS); in FIXTURE_SETUP()
471 if (mod_info->exit) in FIXTURE_SETUP()
474 ASSERT_TRUE(mod_info->vma_modify(self)); in FIXTURE_SETUP()
475 signal_state(mod_info, SETUP_MAPS_MODIFIED); in FIXTURE_SETUP()
476 wait_for_state(mod_info, SETUP_RESTORE_MAPS); in FIXTURE_SETUP()
477 ASSERT_TRUE(mod_info->vma_restore(self)); in FIXTURE_SETUP()
478 signal_state(mod_info, SETUP_MAPS_RESTORED); in FIXTURE_SETUP()
480 wait_for_state(mod_info, TEST_READY); in FIXTURE_SETUP()
481 while (mod_info->curr_state != TEST_DONE) { in FIXTURE_SETUP()
482 ASSERT_TRUE(mod_info->vma_modify(self)); in FIXTURE_SETUP()
483 ASSERT_TRUE(mod_info->vma_restore(self)); in FIXTURE_SETUP()
486 for (i = 0; i < mod_info->vma_count; i++) in FIXTURE_SETUP()
487 munmap(mod_info->child_mapped_addr[i], self->page_size * 3); in FIXTURE_SETUP()
497 wait_for_state(mod_info, CHILD_READY); in FIXTURE_SETUP()
511 mod_info->addr = NULL; in FIXTURE_SETUP()
512 mod_info->next_addr = NULL; in FIXTURE_SETUP()
513 for (int i = 0; i < mod_info->vma_count; i++) { in FIXTURE_SETUP()
514 if (mod_info->child_mapped_addr[i] == (void *)self->last_line.start_addr) { in FIXTURE_SETUP()
515 mod_info->addr = mod_info->child_mapped_addr[i]; in FIXTURE_SETUP()
516 mod_info->prot = PROT_READ; in FIXTURE_SETUP()
519 mod_info->prot |= PROT_WRITE; in FIXTURE_SETUP()
520 } else if (mod_info->child_mapped_addr[i] == (void *)self->first_line.start_addr) { in FIXTURE_SETUP()
521 mod_info->next_addr = mod_info->child_mapped_addr[i]; in FIXTURE_SETUP()
524 if (mod_info->addr && mod_info->next_addr) in FIXTURE_SETUP()
527 ASSERT_TRUE(mod_info->addr && mod_info->next_addr); in FIXTURE_SETUP()
529 signal_state(mod_info, PARENT_READY); in FIXTURE_SETUP()
537 stop_vma_modifier(self->mod_info); in FIXTURE_TEARDOWN()
543 munmap(self->mod_info->child_mapped_addr[i], self->page_size); in FIXTURE_TEARDOWN()
546 munmap(self->mod_info, self->shared_mem_size); in FIXTURE_TEARDOWN()
551 struct vma_modifier_info *mod_info = self->mod_info; in TEST_F() local
558 wait_for_state(mod_info, SETUP_READY); in TEST_F()
563 mod_info->vma_modify = split_vma; in TEST_F()
564 mod_info->vma_restore = merge_vma; in TEST_F()
565 mod_info->vma_mod_check = check_split_result; in TEST_F()
572 signal_state(mod_info, TEST_READY); in TEST_F()
622 ASSERT_TRUE(query_addr_at(self->maps_fd, mod_info->addr + self->page_size, in TEST_F()
640 signal_state(mod_info, TEST_DONE); in TEST_F()
645 struct vma_modifier_info *mod_info = self->mod_info; in TEST_F() local
652 wait_for_state(mod_info, SETUP_READY); in TEST_F()
657 mod_info->vma_modify = shrink_vma; in TEST_F()
658 mod_info->vma_restore = expand_vma; in TEST_F()
659 mod_info->vma_mod_check = check_shrink_result; in TEST_F()
666 signal_state(mod_info, TEST_READY); in TEST_F()
705 ASSERT_TRUE(query_addr_at(self->maps_fd, mod_info->addr, &vma_start, &vma_end)); in TEST_F()
720 signal_state(mod_info, TEST_DONE); in TEST_F()
725 struct vma_modifier_info *mod_info = self->mod_info; in TEST_F() local
732 wait_for_state(mod_info, SETUP_READY); in TEST_F()
737 mod_info->vma_modify = remap_vma; in TEST_F()
738 mod_info->vma_restore = patch_vma; in TEST_F()
739 mod_info->vma_mod_check = check_remap_result; in TEST_F()
746 signal_state(mod_info, TEST_READY); in TEST_F()
785 ASSERT_TRUE(query_addr_at(self->maps_fd, mod_info->addr + self->page_size, in TEST_F()
803 signal_state(mod_info, TEST_DONE); in TEST_F()