aboutsummaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2008-04-28 18:27:19 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2008-04-28 18:27:19 +0000
commit34f36b232bdfb4398c7a0eb5af61b8d33bfbf5fa (patch)
tree62d187367f81323aff69c71815b7a1da5b3b781c /gnu
parent2bc24aa956089cd9699d6b17108a980580c5d848 (diff)
Notes
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/gdb/kgdb/trgt_i386.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/gnu/usr.bin/gdb/kgdb/trgt_i386.c b/gnu/usr.bin/gdb/kgdb/trgt_i386.c
index de15a63cef96..995f1a63dbb3 100644
--- a/gnu/usr.bin/gdb/kgdb/trgt_i386.c
+++ b/gnu/usr.bin/gdb/kgdb/trgt_i386.c
@@ -299,22 +299,15 @@ kgdb_trgt_trapframe_prev_register(struct frame_info *next_frame,
*realnump = -1;
if (!ofs_fixed) {
- uintptr_t calltrap_addr;
- char calltrap[1];
-
- calltrap_addr = kgdb_lookup("calltrap");
- if (calltrap_addr != 0) {
- if (kvm_read(kvm, calltrap_addr, calltrap,
- sizeof(calltrap)) != sizeof(calltrap)) {
- warnx("kvm_read: %s", kvm_geterr(kvm));
- } else if (calltrap[0] == 0x54) /* push %esp */ {
- /*
- * To accomodate for rev. 1.117 of
- * i386/i386/exception.s
- */
- ofs_fix = 4;
- }
- }
+ /*
+ * In revision 1.117 of i386/i386/exception.S trap handlers
+ * were changed to pass trapframes by reference rather than
+ * by value. Detect this by seeing if the first instruction
+ * at the 'calltrap' label is a "push %esp" which has the
+ * opcode 0x54.
+ */
+ if (kgdb_parse("((char *)calltrap)[0]") == 0x54)
+ ofs_fix = 4;
ofs_fixed = 1;
}
ofs = (regnum >= I386_EAX_REGNUM && regnum <= I386_FS_REGNUM)