Module Name: src
Committed By: christos
Date: Wed Apr 16 02:14:44 UTC 2014
Modified Files:
src/external/gpl3/gdb/dist/gdb: amd64nbsd-nat.c amd64nbsd-tdep.c
Log Message:
It is not nice to fake things we don't have; instead check explicitly
that we can get CS.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c
cvs rdiff -u -r1.7 -r1.8 src/external/gpl3/gdb/dist/gdb/amd64nbsd-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/amd64nbsd-nat.c
diff -u src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c:1.5 src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c:1.6
--- src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c:1.5 Tue Apr 15 20:32:33 2014
+++ src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c Tue Apr 15 22:14:44 2014
@@ -120,8 +120,6 @@ amd64nbsd_supply_pcb (struct regcache *r
regcache_raw_supply (regcache, AMD64_RBP_REGNUM, &pcb->pcb_rbp);
regcache_raw_supply (regcache, AMD64_FS_REGNUM, &pcb->pcb_fs);
regcache_raw_supply (regcache, AMD64_GS_REGNUM, &pcb->pcb_gs);
- /* fake it to 0 so SEL_UPL is not set (our sniffer looks at CS) */
- regcache_raw_supply (regcache, AMD64_CS_REGNUM, &zero);
return 1;
}
Index: src/external/gpl3/gdb/dist/gdb/amd64nbsd-tdep.c
diff -u src/external/gpl3/gdb/dist/gdb/amd64nbsd-tdep.c:1.7 src/external/gpl3/gdb/dist/gdb/amd64nbsd-tdep.c:1.8
--- src/external/gpl3/gdb/dist/gdb/amd64nbsd-tdep.c:1.7 Tue Apr 15 20:34:10 2014
+++ src/external/gpl3/gdb/dist/gdb/amd64nbsd-tdep.c Tue Apr 15 22:14:44 2014
@@ -230,12 +230,16 @@ amd64nbsd_trapframe_sniffer (const struc
{
ULONGEST cs;
const char *name;
+ volatile struct gdb_exception ex;
- /* Check Current Privilege Level and bail out if we're not executing
- in kernel space. */
- cs = get_frame_register_unsigned (this_frame, AMD64_CS_REGNUM);
- if ((cs & I386_SEL_RPL) == I386_SEL_UPL)
- return 0;
+ TRY_CATCH (ex, RETURN_MASK_ERROR)
+ {
+ cs = get_frame_register_unsigned (this_frame, AMD64_CS_REGNUM);
+ if ((cs & I386_SEL_RPL) == I386_SEL_UPL)
+ return 0;
+ }
+ if (ex.reason < 0 && ex.error != NOT_AVAILABLE_ERROR)
+ throw_exception (ex);
find_pc_partial_function (get_frame_pc (this_frame), &name, NULL, NULL);
return (name && ((strcmp (name, "alltraps") == 0)