diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-11-21 22:20:28 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-11-21 22:20:28 +0100 |
| commit | 07767d42ccd1a09fb78ccae6571d2a99a1d3b925 (patch) | |
| tree | 0d77b4639250b6bdbe18e2cb4c70684853ca12be /src | |
| parent | 9d97ce087a460b6b5be721b3673ac1543eb77484 (diff) | |
| download | box64-07767d42ccd1a09fb78ccae6571d2a99a1d3b925.tar.gz box64-07767d42ccd1a09fb78ccae6571d2a99a1d3b925.zip | |
Fixed some issue with getopt (for #170)
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; |