From e10b4cace53f6c8f3ff3703c5a36cba3904b8af0 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 8 Nov 2008 22:09:28 +0000 Subject: [PATCH] Added __arch_get_caller(). Correctly implemented for x86 only. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28567 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/libroot/libroot_private.h | 1 + src/system/libroot/os/arch/m68k/Jamfile | 1 + src/system/libroot/os/arch/m68k/stack_frame.c | 24 +++++++++++++++++++ src/system/libroot/os/arch/ppc/Jamfile | 1 + src/system/libroot/os/arch/ppc/stack_frame.c | 24 +++++++++++++++++++ .../libroot/os/arch/x86/get_stack_frame.S | 12 ++++++++-- 6 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/system/libroot/os/arch/m68k/stack_frame.c create mode 100644 src/system/libroot/os/arch/ppc/stack_frame.c diff --git a/headers/private/libroot/libroot_private.h b/headers/private/libroot/libroot_private.h index 918da07e87..6416ae9154 100644 --- a/headers/private/libroot/libroot_private.h +++ b/headers/private/libroot/libroot_private.h @@ -37,6 +37,7 @@ void __arch_init_time(struct real_time_data *data, bool setDefaults); bigtime_t __arch_get_system_time_offset(struct real_time_data *data); void __init_pwd_backend(void); void __reinit_pwd_backend_after_fork(void); +void* __arch_get_caller(void); #ifdef __cplusplus diff --git a/src/system/libroot/os/arch/m68k/Jamfile b/src/system/libroot/os/arch/m68k/Jamfile index 13254e86cd..0d8569f085 100644 --- a/src/system/libroot/os/arch/m68k/Jamfile +++ b/src/system/libroot/os/arch/m68k/Jamfile @@ -8,6 +8,7 @@ MergeObject os_arch_$(TARGET_ARCH).o : byteorder.S compatibility.c # only here until the places where those functions are used # are fixed + stack_frame.c # systeminfo.c system_time.c system_time_asm.S diff --git a/src/system/libroot/os/arch/m68k/stack_frame.c b/src/system/libroot/os/arch/m68k/stack_frame.c new file mode 100644 index 0000000000..c08447a411 --- /dev/null +++ b/src/system/libroot/os/arch/m68k/stack_frame.c @@ -0,0 +1,24 @@ +/* + * Copyright 2008, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. +*/ + +#include + +#include + + +void* +get_stack_frame(void) +{ + // TODO: Implement! + return NULL; +} + + +void* +__arch_get_caller(void) +{ + // TODO: Implement! + return NULL; +} diff --git a/src/system/libroot/os/arch/ppc/Jamfile b/src/system/libroot/os/arch/ppc/Jamfile index d402589633..c361b868eb 100644 --- a/src/system/libroot/os/arch/ppc/Jamfile +++ b/src/system/libroot/os/arch/ppc/Jamfile @@ -10,6 +10,7 @@ MergeObject os_arch_$(TARGET_ARCH).o : byteorder.S compatibility.c # only here until the places where those functions are used # are fixed + stack_frame.c # systeminfo.c system_time.c system_time_asm.S diff --git a/src/system/libroot/os/arch/ppc/stack_frame.c b/src/system/libroot/os/arch/ppc/stack_frame.c new file mode 100644 index 0000000000..c08447a411 --- /dev/null +++ b/src/system/libroot/os/arch/ppc/stack_frame.c @@ -0,0 +1,24 @@ +/* + * Copyright 2008, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. +*/ + +#include + +#include + + +void* +get_stack_frame(void) +{ + // TODO: Implement! + 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 a446741945..86e370cf78 100644 --- a/src/system/libroot/os/arch/x86/get_stack_frame.S +++ b/src/system/libroot/os/arch/x86/get_stack_frame.S @@ -1,13 +1,21 @@ /* - * Copyright 2005, Ingo Weinhold, bonefish@users.sf.net. All rights reserved. + * Copyright 2005-2008, Ingo Weinhold, ingo_weinhold@gmx.de. * Distributed under the terms of the MIT License. */ #include -/* void *get_stack_frame() */ +/* void* get_stack_frame(void) */ FUNCTION(get_stack_frame): mov %ebp, %eax 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) +