From d8789743ebf1a6ab7a281ebef86efdfa29b1e662 Mon Sep 17 00:00:00 2001 From: Roland Lezuo Date: Wed, 13 Feb 2008 23:14:35 +0100 Subject: [PATCH] (src/vm/jit/m68k/md.c): md_stacktrace_get_returnaddress needs to be exported. (src/vm/jit/m68k/md.h): Likewise. --- src/vm/jit/m68k/md.c | 29 +++++++++++++++++++++++++++++ src/vm/jit/m68k/md.h | 28 +--------------------------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/vm/jit/m68k/md.c b/src/vm/jit/m68k/md.c index b9b6e33bf..9fb12da0c 100644 --- a/src/vm/jit/m68k/md.c +++ b/src/vm/jit/m68k/md.c @@ -111,6 +111,35 @@ void *md_jit_method_patch_address(void *pv, void *ra, void *mptr) return pa; } +void *md_stacktrace_get_returnaddress(void *sp, int32_t stackframesize) +{ + void *ra; + + /* return address is above stackpointer */ + + ra = *((void **) (((uintptr_t) sp) + stackframesize)); + + /* XXX: This helps for now, but it's a ugly hack + * the problem _may_ be: the link instruction is used + * by some gcc generated code, and we get an additional word + * on the stack, the old framepointer. Its address is somewhere + * near sp, but that all depends the code generated by the compiler. + * I'm unsure about a clean solution. + */ +#if 0 + if (!(ra > 0x40000000 && ra < 0x80000000)) { + ra = *((u1**)(sp + framesize + 4)); + } +#endif + + /* assert(ra > 0x40000000 && ra < 0x80000000); + printf("XXXXXX=%x\n", ra); + */ + + return ra; +} + + /* * These are local overrides for various environment variables in Emacs. diff --git a/src/vm/jit/m68k/md.h b/src/vm/jit/m68k/md.h index de87abbb1..3ef67014e 100644 --- a/src/vm/jit/m68k/md.h +++ b/src/vm/jit/m68k/md.h @@ -43,33 +43,7 @@ *******************************************************************************/ -inline static void *md_stacktrace_get_returnaddress(void *sp, int32_t stackframesize) -{ - void *ra; - - /* return address is above stackpointer */ - - ra = *((void **) (((uintptr_t) sp) + stackframesize)); - - /* XXX: This helps for now, but it's a ugly hack - * the problem _may_ be: the link instruction is used - * by some gcc generated code, and we get an additional word - * on the stack, the old framepointer. Its address is somewhere - * near sp, but that all depends the code generated by the compiler. - * I'm unsure about a clean solution. - */ -#if 0 - if (!(ra > 0x40000000 && ra < 0x80000000)) { - ra = *((u1**)(sp + framesize + 4)); - } -#endif - - /* assert(ra > 0x40000000 && ra < 0x80000000); - printf("XXXXXX=%x\n", ra); - */ - - return ra; -} +void *md_stacktrace_get_returnaddress(void *sp, int32_t stackframesize); /* md_codegen_get_pv_from_pc *************************************************** -- 2.25.1