From f02dc21848c65b9c6ea5f365794539de591527bc Mon Sep 17 00:00:00 2001 From: cwang <cwang> Date: Wed, 19 May 2004 22:37:40 +0000 Subject: [PATCH] amd64 changes --- lisp/Linux-os.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/lisp/Linux-os.c b/lisp/Linux-os.c index ba2f6ff63..2670648f6 100644 --- a/lisp/Linux-os.c +++ b/lisp/Linux-os.c @@ -15,7 +15,7 @@ * GENCGC support by Douglas Crosher, 1996, 1997. * Alpha support by Julian Dolby, 1999. * - * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Linux-os.c,v 1.16 2003/03/23 21:23:41 gerd Exp $ + * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/Linux-os.c,v 1.17 2004/05/19 22:37:40 cwang Exp $ * */ @@ -82,7 +82,7 @@ void os_init(void) os_vm_page_size = getpagesize(); -#ifdef i386 +#if defined(i386) || defined(__x86_64) setfpucw(0x1372|4|8|16|32); /* No interrupts */ #endif } @@ -109,6 +109,28 @@ int sc_reg(struct sigcontext_struct *c, int offset) } #endif +#ifdef __x86_64 +#if (LINUX_VERSION_CODE >= linuxversion(2,1,0)) || (__GNU_LIBRARY__ >= 6) +int sc_reg(struct sigcontext *c, int offset) +#else +int sc_reg(struct sigcontext_struct *c, int offset) +#endif +{ + switch(offset) + { + case 0: return c->rax; + case 2: return c->rcx; + case 4: return c->rdx; + case 6: return c->rbx; + case 8: return c->rsp; + case 10: return c->rbp; + case 12: return c->rsi; + case 14: return c->rdi; + } + return 0; +} +#endif + void os_save_context(void) { /* @@ -231,7 +253,11 @@ void sigsegv_handler(HANDLER_ARGS) return; } +#if defined(__x86_64) + DPRINTF(0,(stderr,"sigsegv: rip: %p\n",context->rip)); +#else DPRINTF(0,(stderr,"sigsegv: eip: %p\n",context->eip)); +#endif interrupt_handle_now(signal, contextstruct); } #else @@ -269,12 +295,12 @@ static void sigsegv_handler(HANDLER_ARGS) static void sigbus_handler(HANDLER_ARGS) { -#ifdef i386 +#if defined(i386) || defined(__x86_64) GET_CONTEXT #endif DPRINTF(1, (stderr, "sigbus:\n")); /* there is no sigbus in linux??? */ -#ifdef i386 +#if defined(i386) || defined(__x86_64) interrupt_handle_now(signal, contextstruct); #else interrupt_handle_now(signal, code, context); -- GitLab