diff --git a/executer/user/arch/arm64/arch-eclair.c b/executer/user/arch/arm64/arch-eclair.c index 47c8cbda..5e92c6b1 100644 --- a/executer/user/arch/arm64/arch-eclair.c +++ b/executer/user/arch/arm64/arch-eclair.c @@ -5,6 +5,8 @@ #include #include +uint64_t PHYS_OFFSET; + int print_kregs(char *rbp, size_t rbp_size, const struct arch_kregs *kregs) { int i, ret, total = 0; @@ -105,8 +107,11 @@ uintptr_t virt_to_phys(uintptr_t va) return NOPHYS; } /* virt_to_phys() */ -int arch_setup_constants(void) +int arch_setup_constants(int mcos_fd) { + int error; + dumpargs_t args; + MAP_KERNEL_START = lookup_symbol("_head"); if (MAP_KERNEL_START == NOSYMBOL) { fprintf(stderr, "error: obtaining MAP_KERNEL_START\n"); @@ -114,7 +119,11 @@ int arch_setup_constants(void) } printf("arm64 MAP_KERNEL_START 0x%lx\n", MAP_KERNEL_START); - return 0; + args.cmd = DUMP_QUERY_PHYS_START; + args.buf = &PHYS_OFFSET; + + error = ioctl(mcos_fd, IHK_OS_DUMP, &args); + return error; } /* diff --git a/executer/user/arch/arm64/include/arch-eclair.h b/executer/user/arch/arm64/include/arch-eclair.h index 5a8474fe..0999e71c 100644 --- a/executer/user/arch/arm64/include/arch-eclair.h +++ b/executer/user/arch/arm64/include/arch-eclair.h @@ -2,6 +2,9 @@ #ifndef HEADER_USER_ARM64_ECLAIR_H #define HEADER_USER_ARM64_ECLAIR_H +/* PHYS_OFFSET needs to be changed according to the environment. */ +extern uint64_t PHYS_OFFSET; + #ifdef CONFIG_ARM64_64K_PAGES # # if (CONFIG_ARM64_VA_BITS == 42) diff --git a/executer/user/arch/x86_64/arch-eclair.c b/executer/user/arch/x86_64/arch-eclair.c index 2a5ba4e0..e5a37c11 100644 --- a/executer/user/arch/x86_64/arch-eclair.c +++ b/executer/user/arch/x86_64/arch-eclair.c @@ -122,7 +122,7 @@ uintptr_t virt_to_phys(uintptr_t va) return NOPHYS; } /* virt_to_phys() */ -int arch_setup_constants(void) +int arch_setup_constants(int mcos_fd) { MAP_KERNEL_START = lookup_symbol("_head"); if (MAP_KERNEL_START == NOSYMBOL) { diff --git a/executer/user/eclair.c b/executer/user/eclair.c index d21b3e06..c9586606 100644 --- a/executer/user/eclair.c +++ b/executer/user/eclair.c @@ -231,7 +231,7 @@ static int setup_constants(void) { int error; uintptr_t va; - error = arch_setup_constants(); + error = arch_setup_constants(opt.mcos_fd); if (error) { fprintf(stderr, "error: setting up arch constants\n"); return 1; diff --git a/executer/user/eclair.h b/executer/user/eclair.h index 3072a3c2..8b7fa891 100644 --- a/executer/user/eclair.h +++ b/executer/user/eclair.h @@ -25,7 +25,7 @@ int arch_read_kregs(unsigned long ctx, struct arch_kregs *kregs); #define NOPHYS ((uintptr_t)-1) uintptr_t virt_to_phys(uintptr_t va); -int arch_setup_constants(void); +int arch_setup_constants(int mcos_fd); //#define DEBUG #ifdef DEBUG diff --git a/ihk b/ihk index 961151b7..f0ef7f64 160000 --- a/ihk +++ b/ihk @@ -1 +1 @@ -Subproject commit 961151b74fede13a1ecfba9c77a3e3ea83ed1702 +Subproject commit f0ef7f641f7c41eebbeaeb9f2086c77cdd594529