X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fx86-bsd-os.c;h=b30eed32842e554687cd0ecce47db6b2fb22da41;hb=01044af1b8d69fc3899dc0417064c1512223223d;hp=12c57d5a68803a3a345e2795eb591c6c366a5515;hpb=506253505641855dc8bb87033f7af894904f848b;p=sbcl.git diff --git a/src/runtime/x86-bsd-os.c b/src/runtime/x86-bsd-os.c index 12c57d5..b30eed3 100644 --- a/src/runtime/x86-bsd-os.c +++ b/src/runtime/x86-bsd-os.c @@ -1,5 +1,5 @@ #include -#include "target-arch-os.h" +#include "runtime.h" #include "target-os.h" /* KLUDGE: There is strong family resemblance in the signal context @@ -12,7 +12,8 @@ * flavour, with the cross-architecture complications that this * entails; unfortunately, currently the situation is worse, not * better, than in the above paragraph. */ - + +#if defined(__FreeBSD__) || defined(__OpenBSD__) int * os_context_register_addr(os_context_t *context, int offset) { @@ -44,6 +45,43 @@ os_context_sp_addr(os_context_t *context) return CONTEXT_ADDR_FROM_STEM(esp); } +#endif /* __FreeBSD__ || __OpenBSD__ */ + +#ifdef __NetBSD__ +int * +os_context_register_addr(os_context_t *context, int offset) +{ + switch(offset) { + case 0: + return CONTEXT_ADDR_FROM_STEM(EAX); + case 2: + return CONTEXT_ADDR_FROM_STEM(ECX); + case 4: + return CONTEXT_ADDR_FROM_STEM(EDX); + case 6: + return CONTEXT_ADDR_FROM_STEM(EBX); + case 8: + return CONTEXT_ADDR_FROM_STEM(ESP); + case 10: + return CONTEXT_ADDR_FROM_STEM(EBP); + case 12: + return CONTEXT_ADDR_FROM_STEM(ESI); + case 14: + return CONTEXT_ADDR_FROM_STEM(EDI); + default: + return 0; + } +} + +int * +os_context_sp_addr(os_context_t *context) +{ + return &(_UC_MACHINE_SP(context)); +} + +#endif /* __NetBSD__ */ + + /* FIXME: If this can be a no-op on BSD/x86, then it * deserves a more precise name.