projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.8.13:
[sbcl.git]
/
src
/
runtime
/
ppc-arch.c
diff --git
a/src/runtime/ppc-arch.c
b/src/runtime/ppc-arch.c
index
84c3365
..
aa8a522
100644
(file)
--- a/
src/runtime/ppc-arch.c
+++ b/
src/runtime/ppc-arch.c
@@
-1,5
+1,6
@@
#include <stdio.h>
#include <stdio.h>
+#include "sbcl.h"
#include "arch.h"
#include "sbcl.h"
#include "globals.h"
#include "arch.h"
#include "sbcl.h"
#include "globals.h"
@@
-31,16
+32,13
@@
#define PT_DSISR 42
#endif
#define PT_DSISR 42
#endif
-void arch_init()
-{
+void arch_init() {
}
os_vm_address_t
arch_get_bad_addr(int sig, siginfo_t *code, os_context_t *context)
{
}
os_vm_address_t
arch_get_bad_addr(int sig, siginfo_t *code, os_context_t *context)
{
- unsigned long badinstr;
unsigned int *pc = (unsigned int *)(*os_context_pc_addr(context));
unsigned int *pc = (unsigned int *)(*os_context_pc_addr(context));
- int instclass;
os_vm_address_t addr;
os_vm_address_t addr;
@@
-49,7
+47,7
@@
arch_get_bad_addr(int sig, siginfo_t *code, os_context_t *context)
if ((((unsigned long)pc) & 3) != 0 ||
((pc < READ_ONLY_SPACE_START ||
pc >= READ_ONLY_SPACE_START+READ_ONLY_SPACE_SIZE) &&
if ((((unsigned long)pc) & 3) != 0 ||
((pc < READ_ONLY_SPACE_START ||
pc >= READ_ONLY_SPACE_START+READ_ONLY_SPACE_SIZE) &&
- ((lispobj *)pc < current_dynamic_space &&
+ ((lispobj *)pc < current_dynamic_space ||
(lispobj *)pc >= current_dynamic_space + DYNAMIC_SPACE_SIZE)))
return 0;
(lispobj *)pc >= current_dynamic_space + DYNAMIC_SPACE_SIZE)))
return 0;
@@
-98,14
+96,6
@@
arch_install_breakpoint(void *pc)
}
void
}
void
-get_spinlock(lispobj *word,int value)
-{
- /* FIXME */
- *word=value;
-}
-
-
-void
arch_remove_breakpoint(void *pc, unsigned long orig_inst)
{
*(unsigned long *)pc = orig_inst;
arch_remove_breakpoint(void *pc, unsigned long orig_inst)
{
*(unsigned long *)pc = orig_inst;
@@
-133,7
+123,6
@@
arch_do_displaced_inst(os_context_t *context,unsigned int orig_inst)
static void
sigtrap_handler(int signal, siginfo_t *siginfo, os_context_t *context)
{
static void
sigtrap_handler(int signal, siginfo_t *siginfo, os_context_t *context)
{
- int badinst;
u32 code;
sigset_t *mask;
#ifdef LISP_FEATURE_LINUX
u32 code;
sigset_t *mask;
#ifdef LISP_FEATURE_LINUX
@@
-155,7
+144,7
@@
sigtrap_handler(int signal, siginfo_t *siginfo, os_context_t *context)
}
if ((code >> 16) == ((3 << 10) | (6 << 5))) {
/* twllei reg_ZERO,N will always trap if reg_ZERO = 0 */
}
if ((code >> 16) == ((3 << 10) | (6 << 5))) {
/* twllei reg_ZERO,N will always trap if reg_ZERO = 0 */
- int trap = code & 0x1f, extra = (code >> 5) & 0x1f;
+ int trap = code & 0x1f;
switch (trap) {
case trap_Halt:
switch (trap) {
case trap_Halt:
@@
-197,12
+186,24
@@
sigtrap_handler(int signal, siginfo_t *siginfo, os_context_t *context)
interrupt_handle_now(signal, code, context);
break;
}
interrupt_handle_now(signal, code, context);
break;
}
+#ifdef LISP_FEATURE_DARWIN
+ sigreturn(context);
+#endif
+ return;
}
if (((code >> 26) == 3) && (((code >> 21) & 31) == 24)) {
interrupt_internal_error(signal, code, context, 0);
}
if (((code >> 26) == 3) && (((code >> 21) & 31) == 24)) {
interrupt_internal_error(signal, code, context, 0);
+#ifdef LISP_FEATURE_DARWIN
+ sigreturn(context);
+#endif
+ return;
}
interrupt_handle_now(signal, code, context);
}
interrupt_handle_now(signal, code, context);
+#ifdef LISP_FEATURE_DARWIN
+ /* Work around G5 bug */
+ sigreturn(context);
+#endif
}
}