Module Name: src
Committed By: christos
Date: Mon Apr 23 14:53:07 UTC 2018
Modified Files:
src/external/gpl3/gdb/dist/gdb: amd64-nbsd-tdep.c i386-nbsd-tdep.c
Log Message:
Add "Xhandle*" interrupt handling.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/external/gpl3/gdb/dist/gdb/amd64-nbsd-tdep.c \
src/external/gpl3/gdb/dist/gdb/i386-nbsd-tdep.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/gpl3/gdb/dist/gdb/amd64-nbsd-tdep.c
diff -u src/external/gpl3/gdb/dist/gdb/amd64-nbsd-tdep.c:1.3 src/external/gpl3/gdb/dist/gdb/amd64-nbsd-tdep.c:1.4
--- src/external/gpl3/gdb/dist/gdb/amd64-nbsd-tdep.c:1.3 Wed Nov 29 13:15:29 2017
+++ src/external/gpl3/gdb/dist/gdb/amd64-nbsd-tdep.c Mon Apr 23 10:53:07 2018
@@ -148,10 +148,21 @@ amd64nbsd_trapframe_cache(struct frame_i
/* There is an extra 'call' in the interrupt sequence - ignore the extra
* return address */
- if (name && strncmp (name, "Xintr", 5) == 0)
- addr = sp + 8; /* It's an interrupt frame. */
- else
- addr = sp;
+
+ addr = sp;
+ if (name) {
+ if (strncmp (name, "Xintr", 5) == 0
+ || strncmp (name, "Xhandle", 7) == 0) {
+ addr += 8; /* It's an interrupt frame. */
+ }
+ }
+
+#ifdef DEBUG_TRAPFRAME
+ for (i = 0; i < 50; i++) {
+ cs = read_memory_unsigned_integer (addr + i * 8, 8, byte_order);
+ printf("%s i=%d r=%#jx\n", name, i, (intmax_t)cs);
+ }
+#endif
for (i = 0; i < ARRAY_SIZE (amd64nbsd_tf_reg_offset); i++)
if (amd64nbsd_tf_reg_offset[i] != -1)
@@ -163,6 +174,10 @@ amd64nbsd_trapframe_cache(struct frame_i
rip = read_memory_unsigned_integer (addr
+ amd64nbsd_tf_reg_offset[AMD64_RIP_REGNUM], 8, byte_order);
+#ifdef DEBUG_TRAPFRAME
+ printf("%s cs=%#jx rip=%#jx\n", name, (intmax_t)cs, (intmax_t)rip);
+#endif
+
/* The trap frame layout was changed lf the %rip value is less than 2^16 it
* is almost certainly the %ss of the old format. */
if (rip < (1 << 16))
@@ -243,16 +258,20 @@ amd64nbsd_trapframe_sniffer (const struc
find_pc_partial_function (get_frame_pc (this_frame), &name, NULL, NULL);
return (name && ((strcmp (name, "alltraps") == 0)
- || (strcmp (name, "calltrap") == 0)
- || (strncmp (name, "Xtrap", 5) == 0)
- || (strcmp (name, "osyscall1") == 0)
- || (strcmp (name, "Xsyscall") == 0)
- || (strncmp (name, "Xintr", 5) == 0)
- || (strncmp (name, "Xresume", 7) == 0)
- || (strncmp (name, "Xstray", 6) == 0)
- || (strncmp (name, "Xrecurse", 8) == 0)
- || (strncmp (name, "Xsoft", 5) == 0)
- || (strcmp (name, "Xdoreti") == 0)));
+ || (strcmp (name, "calltrap") == 0)
+ || (strcmp (name, "handle_syscall") == 0)
+ || (strcmp (name, "Xdoreti") == 0)
+ || (strcmp (name, "Xspllower") == 0)
+ || (strncmp (name, "Xhandle", 7) == 0)
+ || (strncmp (name, "Xintr", 5) == 0)
+ || (strncmp (name, "Xpreempt", 8) == 0)
+ || (strncmp (name, "Xrecurse", 8) == 0)
+ || (strncmp (name, "Xresume", 7) == 0)
+ || (strncmp (name, "Xsoft", 5) == 0)
+ || (strncmp (name, "Xstray", 6) == 0)
+ || (strncmp (name, "Xsyscall", 8) == 0)
+ || (strncmp (name, "Xtrap", 5) == 0)
+ ));
}
static const struct frame_unwind amd64nbsd_trapframe_unwind = {
Index: src/external/gpl3/gdb/dist/gdb/i386-nbsd-tdep.c
diff -u src/external/gpl3/gdb/dist/gdb/i386-nbsd-tdep.c:1.3 src/external/gpl3/gdb/dist/gdb/i386-nbsd-tdep.c:1.4
--- src/external/gpl3/gdb/dist/gdb/i386-nbsd-tdep.c:1.3 Wed Nov 29 13:15:29 2017
+++ src/external/gpl3/gdb/dist/gdb/i386-nbsd-tdep.c Mon Apr 23 10:53:07 2018
@@ -312,7 +312,8 @@ i386nbsd_trapframe_cache(struct frame_in
sp = get_frame_register_unsigned (this_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 ||
+ strncmp (name, "Xhandle", 7) == 0))
{
/* It's an interrupt frame. */
tmp = read_memory_unsigned_integer (sp + 4, 4, byte_order);
@@ -391,16 +392,19 @@ i386nbsd_trapframe_sniffer (const struct
find_pc_partial_function (get_frame_pc (this_frame), &name, NULL, NULL);
return (name && ((strcmp (name, "alltraps") == 0)
- || (strcmp (name, "calltrap") == 0)
- || (strncmp (name, "Xtrap", 5) == 0)
- || (strcmp (name, "syscall1") == 0)
- || (strcmp (name, "Xsyscall") == 0)
- || (strncmp (name, "Xintr", 5) == 0)
- || (strncmp (name, "Xresume", 7) == 0)
- || (strncmp (name, "Xstray", 6) == 0)
- || (strncmp (name, "Xrecurse", 8) == 0)
- || (strncmp (name, "Xsoft", 5) == 0)
- || (strncmp (name, "Xdoreti", 5) == 0)));
+ || (strcmp (name, "calltrap") == 0)
+ || (strcmp (name, "syscall1") == 0)
+ || (strcmp (name, "Xdoreti") == 0)
+ || (strncmp (name, "Xintr", 5) == 0)
+ || (strncmp (name, "Xhandle", 7) == 0)
+ || (strncmp (name, "Xpreempt", 8) == 0)
+ || (strncmp (name, "Xrecurse", 8) == 0)
+ || (strncmp (name, "Xresume", 7) == 0)
+ || (strncmp (name, "Xsoft", 5) == 0)
+ || (strncmp (name, "Xstray", 6) == 0)
+ || (strncmp (name, "Xsyscall", 8) == 0)
+ || (strncmp (name, "Xtrap", 5) == 0)
+ ));
}
const struct frame_unwind i386nbsd_trapframe_unwind = {