Update of /cvsroot/sbcl/sbcl/src/runtime
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv10225/src/runtime
Modified Files:
alpha-arch.c alpha-assem.S ld-script.alpha-linux
Log Message:
1.0.14.33: Resurrexit Alpha
Sort out accumulated bitrot on the Alpha:
* xrefs slot for simple_fun: a couple of places in alpha-assem.S
* arch_skip_instruction(): compilers more careful about lvalues;
* arch_handle_single_step_trap(): implement it. (Untested)
* ld-script.alpha-linux: update for newer systems.
Works For Me. Other systems may vary.
Index: alpha-arch.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/alpha-arch.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- alpha-arch.c 15 May 2007 14:14:33 -0000 1.27
+++ alpha-arch.c 17 Feb 2008 19:06:34 -0000 1.28
@@ -87,7 +87,10 @@
/* This may be complete rubbish, as (at least for traps) pc points
* _after_ the instruction that caused us to be here anyway.
*/
- ((char*)*os_context_pc_addr(context)) +=4; }
+ char **pcptr;
+ pcptr = (char **) os_context_pc_addr(context);
+ *pcptr += 4;
+}
unsigned char *
arch_internal_error_arguments(os_context_t *context)
@@ -303,6 +306,15 @@
(int)handle_fun_end_breakpoint(context);
}
+void
+arch_handle_single_step_trap(os_context_t *context, int trap)
+{
+ unsigned int code = *((u32 *) (*os_context_pc_addr(context)));
+ int register_offset = code >> 5 & 0x1f;
+ handle_single_step_trap(context, trap, register_offset);
+ arch_skip_instruction(context);
+}
+
static void
sigtrap_handler(int signal, siginfo_t *siginfo, os_context_t *context)
{
Index: alpha-assem.S
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/alpha-assem.S,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- alpha-assem.S 6 Oct 2006 10:54:16 -0000 1.13
+++ alpha-assem.S 17 Feb 2008 19:06:34 -0000 1.14
@@ -95,7 +95,7 @@
/* Indirect the closure */
ldl reg_CODE, CLOSURE_FUN_OFFSET(reg_LEXENV)
- addl reg_CODE,6*4-FUN_POINTER_LOWTAG, reg_LIP
+ addl reg_CODE, SIMPLE_FUN_CODE_OFFSET, reg_LIP
/* And into lisp we go. */
jsr reg_ZERO,(reg_LIP)
@@ -307,6 +307,7 @@
.long NIL
.long NIL
.long NIL
+ .long NIL
ldl reg_LEXENV, FUNCALLABLE_INSTANCE_FUNCTION_OFFSET(reg_LEXENV)
/* I think we don't actually need to use reg_CODE here, because
Index: ld-script.alpha-linux
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/ld-script.alpha-linux,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- ld-script.alpha-linux 9 May 2001 00:02:01 -0000 1.2
+++ ld-script.alpha-linux 17 Feb 2008 19:06:34 -0000 1.3
@@ -69,6 +69,21 @@
_etext = .;
PROVIDE (etext = .);
.fini : { *(.fini) } =0x47ff041f
+ .preinit_array : {
+ __preinit_array_start = .;
+ *(.preinit_array)
+ __preinit_array_end = .;
+ }
+ .init_array : {
+ __init_array_start = .;
+ *(.init_array)
+ __init_array_end = .;
+ }
+ .fini_array : {
+ __fini_array_start = .;
+ *(.fini_array)
+ __fini_array_end = .;
+ }
.rodata : { *(.rodata) *(.gnu.linkonce.r*) }
.rodata1 : { *(.rodata1) }
.reginfo : { *(.reginfo) }
|