From 5851a633bd9fe45a60b180f4d0b89fda90f34972 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 10 Aug 2022 16:55:04 +0200 Subject: [PATCH] Cygwin: make import_address a static inline function It's used in malloc_init only and we never need it anywhere else, hopefully. Signed-off-by: Corinna Vinschen --- winsup/cygwin/local_includes/miscfuncs.h | 3 --- winsup/cygwin/miscfuncs.cc | 19 ------------------- winsup/cygwin/mm/malloc_wrapper.cc | 22 +++++++++++++++++++++- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/winsup/cygwin/local_includes/miscfuncs.h b/winsup/cygwin/local_includes/miscfuncs.h index eac1dbe20..947b52c2c 100644 --- a/winsup/cygwin/local_includes/miscfuncs.h +++ b/winsup/cygwin/local_includes/miscfuncs.h @@ -77,9 +77,6 @@ public: extern "C" void yield (); -#define import_address(x) __import_address ((void *)(x)) -void * __import_address (void *); - #define caller_return_address() \ __caller_return_address (__builtin_return_address (0)) void * __caller_return_address (void *); diff --git a/winsup/cygwin/miscfuncs.cc b/winsup/cygwin/miscfuncs.cc index f46e349e5..0af2e0217 100644 --- a/winsup/cygwin/miscfuncs.cc +++ b/winsup/cygwin/miscfuncs.cc @@ -315,25 +315,6 @@ NT_readline::gets () } } -/* Return an address from the import jmp table of main program. */ -void * -__import_address (void *imp) -{ - __try - { - if (*((uint16_t *) imp) == 0x25ff) - { - const char *ptr = (const char *) imp; - const uintptr_t *jmpto = (uintptr_t *) - (ptr + 6 + *(int32_t *)(ptr + 2)); - return (void *) *jmpto; - } - } - __except (NO_ERROR) {} - __endtry - return NULL; -} - /* Helper function to generate the correct caller address. For external calls, the return address on the stack is _sigbe. In that case the actual caller return address is on the cygtls stack. Use this function diff --git a/winsup/cygwin/mm/malloc_wrapper.cc b/winsup/cygwin/mm/malloc_wrapper.cc index 2842e5398..5af39d361 100644 --- a/winsup/cygwin/mm/malloc_wrapper.cc +++ b/winsup/cygwin/mm/malloc_wrapper.cc @@ -27,6 +27,25 @@ extern "C" struct mallinfo dlmallinfo (); static bool use_internal = true; static bool internal_malloc_determined; +/* Return an address from the import jmp table of main program. */ +static inline void * +import_address (void *imp) +{ + __try + { + if (*((uint16_t *) imp) == 0x25ff) + { + const char *ptr = (const char *) imp; + const uintptr_t *jmpto = (uintptr_t *) + (ptr + 6 + *(int32_t *)(ptr + 2)); + return (void *) *jmpto; + } + } + __except (NO_ERROR) {} + __endtry + return NULL; +} + /* These routines are used by the application if it doesn't provide its own malloc. */ @@ -284,7 +303,8 @@ malloc_init () /* Decide if we are using our own version of malloc by testing the import address from user_data. */ use_internal = user_data->malloc == malloc - || import_address (user_data->malloc) == &_sigfe_malloc; + || import_address ((void *) user_data->malloc) + == &_sigfe_malloc; malloc_printf ("using %s malloc", use_internal ? "internal" : "external"); internal_malloc_determined = true; } -- 2.43.5