* 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:
Christopher Faylor
2000-03-25 02:26:21 +00:00
parent 11bb320587
commit 8227c82d1d
4 changed files with 18 additions and 132 deletions

View File

@ -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.

View File

@ -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

View File

@ -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;
}
}

View File

@ -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;
}
}