From a7ec8e7c55995dc415bd53b3d2ea4d0ae4fb71fc Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 22 Apr 2024 15:49:19 +0200 Subject: [ANDROID] Try to fix test 07 --- CMakeLists.txt | 10 ++++------ src/emu/x64run_private.c | 7 +++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a97cf0a..e9308d52 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1256,12 +1256,10 @@ add_test(threadsStart ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref06.txt -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) -# Box64 for Android have problems with test07 for now, then disable - -#add_test(trig ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} -# -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests/test07_android -D TEST_OUTPUT=tmpfile07.txt -# -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref07.txt -# -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) +add_test(trig ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} + -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests/test07_android -D TEST_OUTPUT=tmpfile07.txt + -D TEST_REFERENCE=${CMAKE_SOURCE_DIR}/tests/ref07.txt + -P ${CMAKE_SOURCE_DIR}/runTest.cmake ) add_test(pi ${CMAKE_COMMAND} -D TEST_PROGRAM=${CMAKE_BINARY_DIR}/${BOX64} -D TEST_ARGS=${CMAKE_SOURCE_DIR}/tests/test08_android -D TEST_OUTPUT=tmpfile08.txt diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c index cbeface8..d1563adc 100644 --- a/src/emu/x64run_private.c +++ b/src/emu/x64run_private.c @@ -40,11 +40,18 @@ void EXPORT my___libc_init(x64emu_t* emu, void* raw_args , void (*onexit)(void) printf_log(LOG_DEBUG, "Transfert to main(%d, %p, %p)=>%p from __libc_init\n", my_context->argc, my_context->argv, my_context->envv, main); // should call structors->preinit_array and structors->init_array! // call main and finish + Push64(emu, GetRBP(emu)); // set frame pointer + SetRBP(emu, GetRSP(emu)); // save RSP + SetRSP(emu, GetRSP(emu)&~0xFLL); // Align RSP PushExit(emu); R_RIP=(uintptr_t)main; DynaRun(emu); + SetRSP(emu, GetRBP(emu)); // restore RSP + SetRBP(emu, Pop64(emu)); // restore RBP + SetRSP(emu, old_rsp); + SetRBP(emu, old_rbp); emu->quit = 1; // finished! } #else -- cgit 1.4.1