darwin-fallback.c: Compile file only on powerpc.
* config/rs6000/darwin-fallback.c: Compile file only on powerpc. (handle_syscall): Handle direct system calls. * config/rs6000/darwin.h (HAS_MD_FALLBACK_FRAME_STATE_FOR): Delete. From-SVN: r122877
This commit is contained in:
parent
442a795bc6
commit
49522de2d2
|
@ -1,3 +1,9 @@
|
|||
2007-03-11 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* config/rs6000/darwin-fallback.c: Compile file only on powerpc.
|
||||
(handle_syscall): Handle direct system calls.
|
||||
* config/rs6000/darwin.h (HAS_MD_FALLBACK_FRAME_STATE_FOR): Delete.
|
||||
|
||||
2007-03-12 Brooks Moses <brooks.moses@codesourcery.com>
|
||||
|
||||
* doc/invoke.texi: Fix cpp.info cross-reference.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Fallback frame-state unwinder for Darwin.
|
||||
Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
|
@ -27,6 +27,8 @@
|
|||
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301, USA. */
|
||||
|
||||
#ifdef __ppc__
|
||||
|
||||
#include "tconfig.h"
|
||||
#include "tsystem.h"
|
||||
#include "coretypes.h"
|
||||
|
@ -327,9 +329,9 @@ handle_syscall (_Unwind_FrameState *fs, const reg_unit gprs[32],
|
|||
static _Unwind_Ptr return_addr;
|
||||
|
||||
/* Yay! We're in a Libc that we understand, and it's made a
|
||||
system call. It'll be one of two kinds: either a Jaguar-style
|
||||
SYS_sigreturn, or a Panther-style 'syscall' call with 184, which
|
||||
is also SYS_sigreturn. */
|
||||
system call. In Jaguar, this is a direct system call with value 103;
|
||||
in Panther and Tiger it is a SYS_syscall call for system call number 184,
|
||||
and in Leopard it is a direct syscall with number 184. */
|
||||
|
||||
if (gprs[0] == 0x67 /* SYS_SIGRETURN */)
|
||||
{
|
||||
|
@ -339,7 +341,7 @@ handle_syscall (_Unwind_FrameState *fs, const reg_unit gprs[32],
|
|||
is_64 = (uctx->mcsize == UC_FLAVOR64_VEC_SIZE
|
||||
|| uctx->mcsize == UC_FLAVOR64_SIZE);
|
||||
}
|
||||
else if (gprs[0] == 0 && gprs[3] == 184)
|
||||
else if (gprs[0] == 0 /* SYS_syscall */ && gprs[3] == 184)
|
||||
{
|
||||
int ctxstyle = gprs[5];
|
||||
uctx = (struct gcc_ucontext *) gprs[4];
|
||||
|
@ -348,6 +350,15 @@ handle_syscall (_Unwind_FrameState *fs, const reg_unit gprs[32],
|
|||
is_64 = (ctxstyle == UC_FLAVOR64_VEC || ctxstyle == UC_TRAD64_VEC
|
||||
|| ctxstyle == UC_FLAVOR64 || ctxstyle == UC_TRAD64);
|
||||
}
|
||||
else if (gprs[0] == 184 /* SYS_sigreturn */)
|
||||
{
|
||||
int ctxstyle = gprs[4];
|
||||
uctx = (struct gcc_ucontext *) gprs[3];
|
||||
is_vector = (ctxstyle == UC_FLAVOR_VEC || ctxstyle == UC_FLAVOR64_VEC
|
||||
|| ctxstyle == UC_TRAD_VEC || ctxstyle == UC_TRAD64_VEC);
|
||||
is_64 = (ctxstyle == UC_FLAVOR64_VEC || ctxstyle == UC_TRAD64_VEC
|
||||
|| ctxstyle == UC_FLAVOR64 || ctxstyle == UC_TRAD64);
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
|
@ -469,3 +480,4 @@ _Unwind_fallback_frame_state_for (struct _Unwind_Context *context,
|
|||
return false;
|
||||
return handle_syscall (fs, gprs, _Unwind_GetCFA (context));
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -412,8 +412,6 @@
|
|||
#define MD_UNWIND_SUPPORT "config/rs6000/darwin-unwind.h"
|
||||
#endif
|
||||
|
||||
#define HAS_MD_FALLBACK_FRAME_STATE_FOR 1
|
||||
|
||||
/* True, iff we're generating fast turn around debugging code. When
|
||||
true, we arrange for function prologues to start with 5 nops so
|
||||
that gdb may insert code to redirect them, and for data to be
|
||||
|
|
Loading…
Reference in New Issue