From 42fb22e23710775c0cf1231a395094dcbccb6b6c Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Fri, 13 Oct 2023 19:56:00 +0200 Subject: [PATCH] loader: Provide memset, and use hidden visibility instead of symbol renaming. (#51682) This ensures that the compiler may generate calls to these functions. --- cli/loader.h | 18 ------------------ cli/loader_win_utils.c | 37 ++++++++++++++++++++++--------------- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/cli/loader.h b/cli/loader.h index b778976cee495..be5195583b29f 100644 --- a/cli/loader.h +++ b/cli/loader.h @@ -5,24 +5,6 @@ #include "../src/support/dirpath.h" #include "../src/julia_fasttls.h" -#ifdef _OS_WINDOWS_ -/* We need to reimplement a bunch of standard library stuff on windows, - * but we want to make sure that it doesn't conflict with the actual implementations - * once those get linked into this process. */ -#define fwrite loader_fwrite -#define fputs loader_fputs -#define exit loader_exit -#define strlen loader_strlen -#define wcslen loader_wcslen -#define strncat loader_strncat -#define memcpy loader_memcpy -#define dirname loader_dirname -#define strchr loader_strchr -#define malloc loader_malloc -#define realloc loader_realloc -#define free loader_free -#endif - #ifdef _OS_WINDOWS_ #define WIN32_LEAN_AND_MEAN diff --git a/cli/loader_win_utils.c b/cli/loader_win_utils.c index 2c3c826b08369..ed585a7a64ff0 100644 --- a/cli/loader_win_utils.c +++ b/cli/loader_win_utils.c @@ -12,7 +12,7 @@ static FILE _stderr = { INVALID_HANDLE_VALUE }; FILE *stdout = &_stdout; FILE *stderr = &_stderr; -int loader_fwrite(const char *str, size_t nchars, FILE *out) { +int JL_HIDDEN fwrite(const char *str, size_t nchars, FILE *out) { DWORD written; if (out->isconsole) { // Windows consoles do not support UTF-8 (for reading input, though new Windows Terminal does for writing), only UTF-16. @@ -20,10 +20,10 @@ int loader_fwrite(const char *str, size_t nchars, FILE *out) { if (!wstr) return -1; if (WriteConsoleW(out->fd, wstr, wcslen(wstr), &written, NULL)) { - loader_free(wstr); + free(wstr); return written; } - loader_free(wstr); + free(wstr); } else { // However, we want to print UTF-8 if the output is a file. if (WriteFile(out->fd, str, nchars, &written, NULL)) @@ -32,19 +32,19 @@ int loader_fwrite(const char *str, size_t nchars, FILE *out) { return -1; } -int loader_fputs(const char *str, FILE *out) { - return loader_fwrite(str, loader_strlen(str), out); +int JL_HIDDEN fputs(const char *str, FILE *out) { + return fwrite(str, strlen(str), out); } -void * loader_malloc(const size_t size) { +void JL_HIDDEN *malloc(const size_t size) { return HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, size); } -void * loader_realloc(void * mem, const size_t size) { +void JL_HIDDEN *realloc(void * mem, const size_t size) { return HeapReAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, mem, size); } -void loader_free(void* mem) { +void JL_HIDDEN free(void* mem) { HeapFree(GetProcessHeap(), 0, mem); } @@ -110,7 +110,7 @@ void setup_stdio() { _stderr.isconsole = GetConsoleMode(_stderr.fd, &mode); } -void loader_exit(int code) { +void JL_HIDDEN exit(int code) { ExitProcess(code); } @@ -148,21 +148,21 @@ wchar_t *utf8_to_wchar(const char * str) { return wstr; } -size_t loader_strlen(const char * x) { +size_t JL_HIDDEN strlen(const char * x) { int idx = 0; while (x[idx] != 0) idx++; return idx; } -size_t loader_wcslen(const wchar_t * x) { +size_t JL_HIDDEN wcslen(const wchar_t * x) { int idx = 0; while (x[idx] != 0) idx++; return idx; } -char * loader_strncat(char * base, const char * tail, size_t maxlen) { +char JL_HIDDEN *strncat(char * base, const char * tail, size_t maxlen) { int base_len = strlen(base); int tail_len = strlen(tail); for (int idx=base_len; idx 0 && x[idx] != PATHSEPSTRING[0]) { idx -= 1; @@ -198,7 +205,7 @@ char * loader_dirname(char * x) { return x; } -char * loader_strchr(const char * haystack, int needle) { +char JL_HIDDEN *strchr(const char * haystack, int needle) { int idx=0; while (haystack[idx] != needle) { if (haystack[idx] == 0) {