This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[commit] Fix & clarify OpenBSD/i386 and OpenBSD/amd64 kernel support
- From: Mark Kettenis <mark dot kettenis at xs4all dot nl>
- To: gdb-patches at sourceware dot org
- Date: Thu, 22 Dec 2005 16:57:12 +0100 (CET)
- Subject: [commit] Fix & clarify OpenBSD/i386 and OpenBSD/amd64 kernel support
Hopefully this makes it clear that this is not so dangerous as Daniel
thought it would be.
Thanks Daniel for pointing this out!
Index: ChangeLog
from Mark Kettenis <kettenis@gnu.org>
* amd64obsd-tdep.c (amd64obsd_trapframe_cache): Fix typos.
(amd64obsd_trapframe_sniffer): Add comment.
* i386obsd-tdep.c (i386obsd_trapframe_cache): Fix typos.
(i386obsd_trapframe_sniffer): Add comment.
Index: amd64obsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/amd64obsd-tdep.c,v
retrieving revision 1.20
diff -u -p -r1.20 amd64obsd-tdep.c
--- amd64obsd-tdep.c 22 Dec 2005 14:09:17 -0000 1.20
+++ amd64obsd-tdep.c 22 Dec 2005 15:54:01 -0000
@@ -360,7 +360,7 @@ amd64obsd_trapframe_cache(struct frame_i
sp = frame_unwind_register_unsigned (next_frame, AMD64_RSP_REGNUM);
find_pc_partial_function (func, &name, NULL, NULL);
- if (name && strncmp(name, "Xintr", 5) == 0)
+ if (name && strncmp (name, "Xintr", 5) == 0)
addr = sp + 8; /* It's an interrupt frame. */
else
addr = sp;
@@ -374,7 +374,7 @@ amd64obsd_trapframe_cache(struct frame_i
cs = read_memory_unsigned_integer (addr, 8);
if ((cs & I386_SEL_RPL) == I386_SEL_UPL)
{
- /* Trap from use space; terminate backtrace. */
+ /* Trap from user space; terminate backtrace. */
trad_frame_set_id (cache, null_frame_id);
}
else
@@ -418,6 +418,8 @@ amd64obsd_trapframe_sniffer (const struc
ULONGEST cs;
char *name;
+ /* Check Current Privilige Level and bail out if we're not executing
+ in kernel space. */
cs = frame_unwind_register_unsigned (next_frame, AMD64_CS_REGNUM);
if ((cs & I386_SEL_RPL) == I386_SEL_UPL)
return 0;
Index: i386obsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386obsd-tdep.c,v
retrieving revision 1.27
diff -u -p -r1.27 i386obsd-tdep.c
--- i386obsd-tdep.c 22 Dec 2005 14:09:17 -0000 1.27
+++ i386obsd-tdep.c 22 Dec 2005 15:54:02 -0000
@@ -358,7 +358,7 @@ i386obsd_trapframe_cache(struct frame_in
sp = frame_unwind_register_unsigned (next_frame, I386_ESP_REGNUM);
find_pc_partial_function (func, &name, NULL, NULL);
- if (name && strncmp(name, "Xintr", 5) == 0)
+ if (name && strncmp (name, "Xintr", 5) == 0)
addr = sp + 8; /* It's an interrupt frame. */
else
addr = sp;
@@ -372,7 +372,7 @@ i386obsd_trapframe_cache(struct frame_in
cs = read_memory_unsigned_integer (addr, 4);
if ((cs & I386_SEL_RPL) == I386_SEL_UPL)
{
- /* Trap from use space; terminate backtrace. */
+ /* Trap from user space; terminate backtrace. */
trad_frame_set_id (cache, null_frame_id);
}
else
@@ -416,9 +416,11 @@ i386obsd_trapframe_sniffer (const struct
ULONGEST cs;
char *name;
+ /* Check Current Privilige Level and bail out if we're not executing
+ in kernel space. */
cs = frame_unwind_register_unsigned (next_frame, I386_CS_REGNUM);
if ((cs & I386_SEL_RPL) == I386_SEL_UPL)
- return NULL;
+ return 0;
find_pc_partial_function (frame_pc_unwind (next_frame), &name, NULL, NULL);
return (name && ((strcmp (name, "calltrap") == 0)