diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/emu/x64int3.c | 2 | ||||
| -rwxr-xr-x | src/include/globalsymbols.h | 2 | ||||
| -rwxr-xr-x | src/librarian/globalsymbols.c | 34 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibc.c | 3 |
4 files changed, 39 insertions, 2 deletions
diff --git a/src/emu/x64int3.c b/src/emu/x64int3.c index e8fc3ad7..86f1f0af 100755 --- a/src/emu/x64int3.c +++ b/src/emu/x64int3.c @@ -103,7 +103,7 @@ void x64Int3(x64emu_t* emu) perr = 1; } else if (!strcmp(s, "fopen") || !strcmp(s, "fopen64")) { tmp = (char*)(R_RDI); - snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", %d)", tid, *(void**)(R_RSP), s, (tmp)?tmp:"(nil)", (int)(R_ESI)); + snprintf(buff, 255, "%04d|%p: Calling %s(\"%s\", \"%s\")", tid, *(void**)(R_RSP), s, (tmp)?tmp:"(nil)", (char*)(R_RSI)); perr = 2; } else if (!strcmp(s, "__openat64") || !strcmp(s, "openat64") || !strcmp(s, "__openat64_2")) { tmp = (char*)(R_RSI); diff --git a/src/include/globalsymbols.h b/src/include/globalsymbols.h index 5368521e..fc2753ef 100755 --- a/src/include/globalsymbols.h +++ b/src/include/globalsymbols.h @@ -10,8 +10,10 @@ void** my_GetGthreadsGotInitialized(); // defined in wrappedgthread2 // NCurse / TInfo void my_checkGlobalTInfo(); +void my_updateGlobalTInfo(); // getopt void my_checkGlobalOpt(); +void my_updateGlobalOpt(); #endif //_GLOBAL_SYMBOLS_H_ \ No newline at end of file diff --git a/src/librarian/globalsymbols.c b/src/librarian/globalsymbols.c index dfc163f3..3a932d86 100755 --- a/src/librarian/globalsymbols.c +++ b/src/librarian/globalsymbols.c @@ -18,10 +18,16 @@ #define GLOB(A) \ if (GetGlobalNoWeakSymbolStartEnd(my_context->maplib, #A, &globoffs, &globend, -1, NULL)) { \ - printf_log(LOG_DEBUG, "Global " #A " workaround, @%p <= %p\n", (void*)globoffs, &A); \ + printf_log(LOG_DEBUG, "Global " #A " workaround, @%p <- %p\n", (void*)globoffs, &A); \ memcpy((void*)globoffs, &A, sizeof(A)); \ } +#define TOGLOB(A) \ + if (GetGlobalNoWeakSymbolStartEnd(my_context->maplib, #A, &globoffs, &globend, -1, NULL)) { \ + printf_log(LOG_DEBUG, "Global " #A " workaround, @%p -> %p\n", (void*)globoffs, &A); \ + memcpy(&A, (void*)globoffs, sizeof(A)); \ + } + // *********** GTK ***************** EXPORT void* gdk_display = NULL; // in case it's used... @@ -87,10 +93,36 @@ void my_checkGlobalTInfo() GLOB(ttytype) } +void my_updateGlobalTInfo() +{ + uintptr_t globoffs, globend; + TOGLOB(COLS) + TOGLOB(LINES) + TOGLOB(TABSIZE) + TOGLOB(curscr) + TOGLOB(newscr) + TOGLOB(stdscr) + TOGLOB(acs_map) + TOGLOB(UP) + TOGLOB(BC) + TOGLOB(PC) + TOGLOB(ospeed) + TOGLOB(ttytype) +} + // **************** getopts **************** EXPORT char *optarg; EXPORT int optind, opterr, optopt; +void my_updateGlobalOpt() +{ + uintptr_t globoffs, globend; + TOGLOB(optarg); + TOGLOB(optind); + TOGLOB(opterr); + TOGLOB(optopt); +} + void my_checkGlobalOpt() { uintptr_t globoffs, globend; diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 708051d8..210dc4cf 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -2213,6 +2213,7 @@ EXPORT void* my_mallinfo(x64emu_t* emu, void* p) EXPORT int my_getopt(int argc, char* const argv[], const char *optstring) { + my_updateGlobalOpt(); int ret = getopt(argc, argv, optstring); my_checkGlobalOpt(); return ret; @@ -2220,6 +2221,7 @@ EXPORT int my_getopt(int argc, char* const argv[], const char *optstring) EXPORT int my_getopt_long(int argc, char* const argv[], const char* optstring, const struct option *longopts, int *longindex) { + my_updateGlobalOpt(); int ret = getopt_long(argc, argv, optstring, longopts, longindex); my_checkGlobalOpt(); return ret; @@ -2227,6 +2229,7 @@ EXPORT int my_getopt_long(int argc, char* const argv[], const char* optstring, c EXPORT int my_getopt_long_only(int argc, char* const argv[], const char* optstring, const struct option *longopts, int *longindex) { + my_updateGlobalOpt(); int ret = getopt_long_only(argc, argv, optstring, longopts, longindex); my_checkGlobalOpt(); return ret; |