Skip to content

Commit 9682fc4

Browse files
authored
Allow uc_ctl_set_page_size() for arm64 (#2084)
1 parent 8720632 commit 9682fc4

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

tests/unit/test_ctl.c

+26
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,29 @@ static void test_uc_ctl_change_page_size(void)
198198
}
199199
#endif
200200

201+
// Test requires UC_ARCH_ARM64.
202+
#ifdef UNICORN_HAS_ARM64
203+
static void test_uc_ctl_change_page_size_arm64(void)
204+
{
205+
uc_engine *uc;
206+
uc_engine *uc2;
207+
uint32_t pg = 0;
208+
209+
OK(uc_open(UC_ARCH_ARM64, UC_MODE_ARM, &uc));
210+
OK(uc_open(UC_ARCH_ARM64, UC_MODE_ARM, &uc2));
211+
212+
OK(uc_ctl_set_page_size(uc, 16384));
213+
OK(uc_ctl_get_page_size(uc, &pg));
214+
TEST_CHECK(pg == 16384);
215+
216+
OK(uc_mem_map(uc2, 1 << 10, 1 << 10, UC_PROT_ALL));
217+
uc_assert_err(UC_ERR_ARG, uc_mem_map(uc, 1 << 10, 1 << 10, UC_PROT_ALL));
218+
219+
OK(uc_close(uc));
220+
OK(uc_close(uc2));
221+
}
222+
#endif
223+
201224
// Test requires UC_ARCH_ARM.
202225
#ifdef UNICORN_HAS_ARM
203226
// Copy from test_arm.c but with new API.
@@ -414,6 +437,9 @@ TEST_LIST = {{"test_uc_ctl_mode", test_uc_ctl_mode},
414437
#ifdef UNICORN_HAS_ARM
415438
{"test_uc_ctl_change_page_size", test_uc_ctl_change_page_size},
416439
{"test_uc_ctl_arm_cpu", test_uc_ctl_arm_cpu},
440+
#endif
441+
#ifdef UNICORN_HAS_ARM64
442+
{"test_uc_ctl_change_page_size_arm64", test_uc_ctl_change_page_size_arm64},
417443
#endif
418444
{"test_uc_hook_cached_uaf", test_uc_hook_cached_uaf},
419445
{"test_uc_emu_stop_set_ip", test_uc_emu_stop_set_ip},

uc.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2543,7 +2543,7 @@ uc_err uc_ctl(uc_engine *uc, uc_control_type control, ...)
25432543
break;
25442544
}
25452545

2546-
if (uc->arch != UC_ARCH_ARM) {
2546+
if (uc->arch != UC_ARCH_ARM && uc->arch != UC_ARCH_ARM64) {
25472547
err = UC_ERR_ARG;
25482548
break;
25492549
}

0 commit comments

Comments
 (0)