mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-01 09:49:43 +08:00
* win32-nat.c: Back out special frame walking code. It was broken.
(handle_exception): Correctly identify an illegal instruction. * config/tm-cygwin.h: Eliminate special frame handling. Just use normal i386 handling.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2000-03-24 Christopher Faylor <cgf@cygnus.com>
|
||||||
|
|
||||||
|
* win32-nat.c: Back out special frame walking code. It was broken.
|
||||||
|
(handle_exception): Correctly identify an illegal instruction.
|
||||||
|
* config/tm-cygwin.h: Eliminate special frame handling. Just use
|
||||||
|
normal i386 handling.
|
||||||
|
|
||||||
2000-03-24 J.T. Conklin <jtc@redback.com>
|
2000-03-24 J.T. Conklin <jtc@redback.com>
|
||||||
|
|
||||||
* i386/tm-nbsd.h (USE_STRUCT_CONVENTION): Define.
|
* i386/tm-nbsd.h (USE_STRUCT_CONVENTION): Define.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Macro definitions for i386 running under the win32 API Unix.
|
/* Macro definitions for i386 running under the win32 API Unix.
|
||||||
Copyright 1995 - 1999 Free Software Foundation, Inc.
|
Copyright 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GDB.
|
This file is part of GDB.
|
||||||
|
|
||||||
@ -29,20 +29,3 @@
|
|||||||
extern CORE_ADDR skip_trampoline_code PARAMS ((CORE_ADDR pc, char *name));
|
extern CORE_ADDR skip_trampoline_code PARAMS ((CORE_ADDR pc, char *name));
|
||||||
|
|
||||||
extern char *cygwin_pid_to_str PARAMS ((int pid));
|
extern char *cygwin_pid_to_str PARAMS ((int pid));
|
||||||
|
|
||||||
struct frame_info;
|
|
||||||
void child_init_frame(int x, struct frame_info *);
|
|
||||||
CORE_ADDR child_frame_saved_pc(struct frame_info *);
|
|
||||||
CORE_ADDR child_frame_chain(struct frame_info *);
|
|
||||||
|
|
||||||
#undef FRAME_CHAIN_VALID_ALTERNATE
|
|
||||||
#define FRAME_CHAIN_VALID_ALTERNATE 1
|
|
||||||
|
|
||||||
#undef INIT_EXTRA_FRAME_INFO
|
|
||||||
#define INIT_EXTRA_FRAME_INFO(x, f) child_init_frame(x, f)
|
|
||||||
|
|
||||||
#undef FRAME_CHAIN
|
|
||||||
#define FRAME_CHAIN child_frame_chain
|
|
||||||
|
|
||||||
#undef FRAME_SAVED_PC
|
|
||||||
#define FRAME_SAVED_PC child_frame_saved_pc
|
|
||||||
|
@ -601,6 +601,11 @@ handle_exception (struct target_waitstatus *ourstatus)
|
|||||||
current_event.u.Exception.ExceptionRecord.ExceptionAddress));
|
current_event.u.Exception.ExceptionRecord.ExceptionAddress));
|
||||||
ourstatus->value.sig = TARGET_SIGNAL_TRAP;
|
ourstatus->value.sig = TARGET_SIGNAL_TRAP;
|
||||||
break;
|
break;
|
||||||
|
case EXCEPTION_ILLEGAL_INSTRUCTION:
|
||||||
|
DEBUG_EXCEPT (("gdb: Target exception SINGLE_ILL at 0x%08x\n",
|
||||||
|
current_event.u.Exception.ExceptionRecord.ExceptionAddress));
|
||||||
|
ourstatus->value.sig = TARGET_SIGNAL_ILL;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
/* This may be a structured exception handling exception. In
|
/* This may be a structured exception handling exception. In
|
||||||
that case, we want to let the program try to handle it, and
|
that case, we want to let the program try to handle it, and
|
||||||
@ -1273,60 +1278,3 @@ cygwin_pid_to_str (int pid)
|
|||||||
sprintf (buf, "thread %d.0x%x", current_event.dwProcessId, pid);
|
sprintf (buf, "thread %d.0x%x", current_event.dwProcessId, pid);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LPVOID __stdcall
|
|
||||||
sfta(HANDLE h, DWORD d)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static DWORD __stdcall
|
|
||||||
sgmb(HANDLE h, DWORD d)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
return 4;
|
|
||||||
#else
|
|
||||||
return SymGetModuleBase (h, d) ?: 4;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
CORE_ADDR
|
|
||||||
child_frame_chain(struct frame_info *f)
|
|
||||||
{
|
|
||||||
STACKFRAME *sf = (STACKFRAME *) f->extra_info;
|
|
||||||
if (!StackWalk (IMAGE_FILE_MACHINE_I386, current_process_handle,
|
|
||||||
current_thread->h, sf, NULL, NULL, SymFunctionTableAccess, sgmb, NULL) ||
|
|
||||||
!sf->AddrReturn.Offset)
|
|
||||||
return 0;
|
|
||||||
return sf->AddrFrame.Offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
CORE_ADDR
|
|
||||||
child_frame_saved_pc(struct frame_info *f)
|
|
||||||
{
|
|
||||||
STACKFRAME *sf = (STACKFRAME *) f->extra_info;
|
|
||||||
return sf->AddrReturn.Offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
child_init_frame(int leaf, struct frame_info *f)
|
|
||||||
{
|
|
||||||
STACKFRAME *sf;
|
|
||||||
|
|
||||||
if (f->next && f->next->extra_info)
|
|
||||||
f->extra_info = f->next->extra_info;
|
|
||||||
else if (f->prev && f->prev->extra_info)
|
|
||||||
f->extra_info = f->prev->extra_info;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sf = (STACKFRAME *) frame_obstack_alloc (sizeof (*sf));
|
|
||||||
f->extra_info = (struct frame_extra_info *) sf;
|
|
||||||
memset (sf, 0, sizeof(*sf));
|
|
||||||
sf->AddrPC.Offset = f->pc;
|
|
||||||
sf->AddrPC.Mode = AddrModeFlat;
|
|
||||||
sf->AddrStack.Offset = current_thread->context.Esp;
|
|
||||||
sf->AddrStack.Mode = AddrModeFlat;
|
|
||||||
sf->AddrFrame.Offset = f->frame;
|
|
||||||
sf->AddrFrame.Mode = AddrModeFlat;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -601,6 +601,11 @@ handle_exception (struct target_waitstatus *ourstatus)
|
|||||||
current_event.u.Exception.ExceptionRecord.ExceptionAddress));
|
current_event.u.Exception.ExceptionRecord.ExceptionAddress));
|
||||||
ourstatus->value.sig = TARGET_SIGNAL_TRAP;
|
ourstatus->value.sig = TARGET_SIGNAL_TRAP;
|
||||||
break;
|
break;
|
||||||
|
case EXCEPTION_ILLEGAL_INSTRUCTION:
|
||||||
|
DEBUG_EXCEPT (("gdb: Target exception SINGLE_ILL at 0x%08x\n",
|
||||||
|
current_event.u.Exception.ExceptionRecord.ExceptionAddress));
|
||||||
|
ourstatus->value.sig = TARGET_SIGNAL_ILL;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
/* This may be a structured exception handling exception. In
|
/* This may be a structured exception handling exception. In
|
||||||
that case, we want to let the program try to handle it, and
|
that case, we want to let the program try to handle it, and
|
||||||
@ -1273,60 +1278,3 @@ cygwin_pid_to_str (int pid)
|
|||||||
sprintf (buf, "thread %d.0x%x", current_event.dwProcessId, pid);
|
sprintf (buf, "thread %d.0x%x", current_event.dwProcessId, pid);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LPVOID __stdcall
|
|
||||||
sfta(HANDLE h, DWORD d)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static DWORD __stdcall
|
|
||||||
sgmb(HANDLE h, DWORD d)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
return 4;
|
|
||||||
#else
|
|
||||||
return SymGetModuleBase (h, d) ?: 4;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
CORE_ADDR
|
|
||||||
child_frame_chain(struct frame_info *f)
|
|
||||||
{
|
|
||||||
STACKFRAME *sf = (STACKFRAME *) f->extra_info;
|
|
||||||
if (!StackWalk (IMAGE_FILE_MACHINE_I386, current_process_handle,
|
|
||||||
current_thread->h, sf, NULL, NULL, SymFunctionTableAccess, sgmb, NULL) ||
|
|
||||||
!sf->AddrReturn.Offset)
|
|
||||||
return 0;
|
|
||||||
return sf->AddrFrame.Offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
CORE_ADDR
|
|
||||||
child_frame_saved_pc(struct frame_info *f)
|
|
||||||
{
|
|
||||||
STACKFRAME *sf = (STACKFRAME *) f->extra_info;
|
|
||||||
return sf->AddrReturn.Offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
child_init_frame(int leaf, struct frame_info *f)
|
|
||||||
{
|
|
||||||
STACKFRAME *sf;
|
|
||||||
|
|
||||||
if (f->next && f->next->extra_info)
|
|
||||||
f->extra_info = f->next->extra_info;
|
|
||||||
else if (f->prev && f->prev->extra_info)
|
|
||||||
f->extra_info = f->prev->extra_info;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sf = (STACKFRAME *) frame_obstack_alloc (sizeof (*sf));
|
|
||||||
f->extra_info = (struct frame_extra_info *) sf;
|
|
||||||
memset (sf, 0, sizeof(*sf));
|
|
||||||
sf->AddrPC.Offset = f->pc;
|
|
||||||
sf->AddrPC.Mode = AddrModeFlat;
|
|
||||||
sf->AddrStack.Offset = current_thread->context.Esp;
|
|
||||||
sf->AddrStack.Mode = AddrModeFlat;
|
|
||||||
sf->AddrFrame.Offset = f->frame;
|
|
||||||
sf->AddrFrame.Mode = AddrModeFlat;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user