From 016cc668030a6d08daf8792e14de8512fdf0e5b8 Mon Sep 17 00:00:00 2001 From: Jaroslaw Pelczar Date: Tue, 3 Sep 2019 20:16:48 +0200 Subject: [PATCH] Remove arch_get_caller Use the gcc builtin instead, which generates more efficient code (it saves a function call) and means less platform specific code to write for us. Change-Id: I1d55b5703027b2ea4ecde2438ea306bd4850eb32 Reviewed-on: https://review.haiku-os.org/c/haiku/+/1859 Reviewed-by: waddlesplash --- headers/private/libroot/libroot_private.h | 1 - src/system/libroot/os/arch/arm/stack_frame.c | 7 ------- src/system/libroot/os/arch/m68k/stack_frame.c | 7 ------- src/system/libroot/os/arch/ppc/stack_frame.c | 7 ------- src/system/libroot/os/arch/riscv64/stack_frame.c | 8 -------- src/system/libroot/os/arch/sparc/stack_frame.c | 8 -------- src/system/libroot/os/arch/x86/get_stack_frame.S | 7 ------- src/system/libroot/os/arch/x86_64/get_stack_frame.S | 7 ------- src/system/libroot/posix/dlfcn.c | 5 +++-- src/system/libroot/stubbed/libroot_stubs.c | 1 - src/system/libroot/stubbed/libroot_stubs_legacy.c | 1 - 11 files changed, 3 insertions(+), 56 deletions(-) diff --git a/headers/private/libroot/libroot_private.h b/headers/private/libroot/libroot_private.h index a54e7d2b30..20bc2ade99 100644 --- a/headers/private/libroot/libroot_private.h +++ b/headers/private/libroot/libroot_private.h @@ -50,7 +50,6 @@ bigtime_t __arch_get_system_time_offset(struct real_time_data *data); bigtime_t __get_system_time_offset(); void __init_pwd_backend(void); void __reinit_pwd_backend_after_fork(void); -void* __arch_get_caller(void); int32 __arch_get_stack_trace(addr_t* returnAddresses, int32 maxCount, int32 skipFrames, addr_t stackBase, addr_t stackEnd); diff --git a/src/system/libroot/os/arch/arm/stack_frame.c b/src/system/libroot/os/arch/arm/stack_frame.c index 30223cbcea..5975ff8732 100644 --- a/src/system/libroot/os/arch/arm/stack_frame.c +++ b/src/system/libroot/os/arch/arm/stack_frame.c @@ -18,10 +18,3 @@ get_stack_frame(void) return NULL; } - -void* -__arch_get_caller(void) -{ - // TODO: Implement! - return NULL; -} diff --git a/src/system/libroot/os/arch/m68k/stack_frame.c b/src/system/libroot/os/arch/m68k/stack_frame.c index c08447a411..f063449176 100644 --- a/src/system/libroot/os/arch/m68k/stack_frame.c +++ b/src/system/libroot/os/arch/m68k/stack_frame.c @@ -15,10 +15,3 @@ get_stack_frame(void) return NULL; } - -void* -__arch_get_caller(void) -{ - // TODO: Implement! - return NULL; -} diff --git a/src/system/libroot/os/arch/ppc/stack_frame.c b/src/system/libroot/os/arch/ppc/stack_frame.c index c08447a411..f063449176 100644 --- a/src/system/libroot/os/arch/ppc/stack_frame.c +++ b/src/system/libroot/os/arch/ppc/stack_frame.c @@ -15,10 +15,3 @@ get_stack_frame(void) return NULL; } - -void* -__arch_get_caller(void) -{ - // TODO: Implement! - return NULL; -} diff --git a/src/system/libroot/os/arch/riscv64/stack_frame.c b/src/system/libroot/os/arch/riscv64/stack_frame.c index d5db3c3f4d..f063449176 100644 --- a/src/system/libroot/os/arch/riscv64/stack_frame.c +++ b/src/system/libroot/os/arch/riscv64/stack_frame.c @@ -15,11 +15,3 @@ get_stack_frame(void) return NULL; } - -void* -__arch_get_caller(void) -{ - // TODO: Implement! - return NULL; -} - diff --git a/src/system/libroot/os/arch/sparc/stack_frame.c b/src/system/libroot/os/arch/sparc/stack_frame.c index d5db3c3f4d..f063449176 100644 --- a/src/system/libroot/os/arch/sparc/stack_frame.c +++ b/src/system/libroot/os/arch/sparc/stack_frame.c @@ -15,11 +15,3 @@ get_stack_frame(void) return NULL; } - -void* -__arch_get_caller(void) -{ - // TODO: Implement! - return NULL; -} - diff --git a/src/system/libroot/os/arch/x86/get_stack_frame.S b/src/system/libroot/os/arch/x86/get_stack_frame.S index 86e370cf78..3319e7b29b 100644 --- a/src/system/libroot/os/arch/x86/get_stack_frame.S +++ b/src/system/libroot/os/arch/x86/get_stack_frame.S @@ -12,10 +12,3 @@ FUNCTION(get_stack_frame): ret FUNCTION_END(get_stack_frame) - -/* void* __arch_get_caller(void); */ -FUNCTION(__arch_get_caller): - mov 4(%ebp), %eax - ret -FUNCTION_END(__arch_get_caller) - diff --git a/src/system/libroot/os/arch/x86_64/get_stack_frame.S b/src/system/libroot/os/arch/x86_64/get_stack_frame.S index 0eaee36523..f017215a4d 100644 --- a/src/system/libroot/os/arch/x86_64/get_stack_frame.S +++ b/src/system/libroot/os/arch/x86_64/get_stack_frame.S @@ -13,10 +13,3 @@ FUNCTION(get_stack_frame): ret FUNCTION_END(get_stack_frame) - -/* void* __arch_get_caller(void); */ -FUNCTION(__arch_get_caller): - movq 8(%rbp), %rax - ret -FUNCTION_END(__arch_get_caller) - diff --git a/src/system/libroot/posix/dlfcn.c b/src/system/libroot/posix/dlfcn.c index 84d58aedef..6ba7855c06 100644 --- a/src/system/libroot/posix/dlfcn.c +++ b/src/system/libroot/posix/dlfcn.c @@ -40,8 +40,9 @@ dlsym(void *handle, char const *name) status_t status; void* caller = NULL; - if (handle == RTLD_NEXT) - caller = __arch_get_caller(); + if (handle == RTLD_NEXT) { + caller = __builtin_return_address(0); + } status = __gRuntimeLoader->get_library_symbol(handle, caller, name, &location); diff --git a/src/system/libroot/stubbed/libroot_stubs.c b/src/system/libroot/stubbed/libroot_stubs.c index 85f19d499a..f65dfa9e00 100644 --- a/src/system/libroot/stubbed/libroot_stubs.c +++ b/src/system/libroot/stubbed/libroot_stubs.c @@ -608,7 +608,6 @@ void __acosl() {} void __acr() {} void __add() {} void __allocate_pthread() {} -void __arch_get_caller() {} void __arch_get_stack_trace() {} void __arch_get_system_time_offset() {} void __arch_init_time() {} diff --git a/src/system/libroot/stubbed/libroot_stubs_legacy.c b/src/system/libroot/stubbed/libroot_stubs_legacy.c index 52c3b4500d..fc050f3d18 100644 --- a/src/system/libroot/stubbed/libroot_stubs_legacy.c +++ b/src/system/libroot/stubbed/libroot_stubs_legacy.c @@ -418,7 +418,6 @@ void __acoshl() {} void __acosl() {} void __adjust_heap__H3ZPQ217EnvironmentFilter5EntryZlZQ217EnvironmentFilter5Entry_X01X11X11X21_v() {} void __allocate_pthread() {} -void __arch_get_caller() {} void __arch_get_stack_trace() {} void __arch_get_system_time_offset() {} void __arch_init_time() {}