summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1997-06-07 04:50:43 +0000
committerbde <bde@FreeBSD.org>1997-06-07 04:50:43 +0000
commite77a5255568a1ec02d5ef86afb93fa20d0781fe1 (patch)
treeda78858cd8601a811c5270b8c48cdec985271948 /gnu
parent6babbddd762aaa221ade16215d4b4e93bb669f79 (diff)
downloadFreeBSD-src-e77a5255568a1ec02d5ef86afb93fa20d0781fe1.zip
FreeBSD-src-e77a5255568a1ec02d5ef86afb93fa20d0781fe1.tar.gz
Support reading and writing of %fs and %gs (except from core files).
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c26
-rw-r--r--gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c4
-rw-r--r--gnu/usr.bin/binutils/gdb/i386/tm.h2
-rw-r--r--gnu/usr.bin/binutils/gdb/kvm-fbsd.c4
-rw-r--r--gnu/usr.bin/gdb/gdb/freebsd-nat.c26
-rw-r--r--gnu/usr.bin/gdb/gdb/kvm-fbsd.c4
-rw-r--r--gnu/usr.bin/gdb/gdb/tm.h2
7 files changed, 57 insertions, 11 deletions
diff --git a/gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c b/gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c
index a55c798..31a9419 100644
--- a/gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c
+++ b/gnu/usr.bin/binutils/gdb/i386/freebsd-nat.c
@@ -34,7 +34,7 @@ static int tregmap[] =
tEAX, tECX, tEDX, tEBX,
tESP, tEBP, tESI, tEDI,
tEIP, tEFLAGS, tCS, tSS,
- tDS, tES, tSS, tSS, /* lies: no fs or gs */
+ tDS, tES, tFS, tGS,
};
void
@@ -88,6 +88,7 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
CORE_ADDR reg_addr;
{
register int regno;
+ register int cregno;
register int addr;
int bad_reg = -1;
int offset = -reg_addr & (core_reg_size - 1);
@@ -99,8 +100,27 @@ printf("-reg_addr: %08x\n", -reg_addr);
for (regno = 0; regno < NUM_REGS; regno++)
{
- addr = offset + 4 * tregmap[regno];
- if (addr < 0 || addr >= core_reg_size)
+ cregno = tregmap[regno];
+#if 1
+ if (cregno == tFS)
+ cregno = tCS;
+ else if (cregno == tGS)
+ cregno = tDS;
+#endif
+ addr = offset + 4 * cregno;
+ if (cregno == tFS)
+ {
+#if 0
+ supply_register (15, (char *)&u.u_pcb.pcb_fs);
+#endif
+ }
+ else if (cregno == tGS)
+ {
+#if 0
+ supply_register (16, (char *)&u.u_pcb.pcb_gs);
+#endif
+ }
+ else if (addr < 0 || addr >= core_reg_size)
{
if (bad_reg < 0)
bad_reg = regno;
diff --git a/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c
index 92528f7..e0721be 100644
--- a/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c
+++ b/gnu/usr.bin/binutils/gdb/i386/kvm-fbsd.c
@@ -844,8 +844,10 @@ read_pcb (fd, uaddr)
supply_register (6, (char *)&pcb.pcb_esi);
supply_register (7, (char *)&pcb.pcb_edi);
supply_register (PC_REGNUM, (char *)&pcb.pcb_eip);
- for (i = 9; i < 16; ++i) /* eflags, cs, ss, ds, es, fs, gs */
+ for (i = 9; i < 14; ++i) /* eflags, cs, ss, ds, es */
supply_register (i, (char *)&noreg);
+ supply_register (15, (char *)&pcb.pcb_fs);
+ supply_register (16, (char *)&pcb.pcb_gs);
/* XXX 80387 registers? */
}
diff --git a/gnu/usr.bin/binutils/gdb/i386/tm.h b/gnu/usr.bin/binutils/gdb/i386/tm.h
index c9b2c1a..5ad8e76 100644
--- a/gnu/usr.bin/binutils/gdb/i386/tm.h
+++ b/gnu/usr.bin/binutils/gdb/i386/tm.h
@@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "i386/tm-i386bsd.h"
#undef NUM_REGS
-#define NUM_REGS 14
+#define NUM_REGS 16
extern struct frame_info *setup_arbitrary_frame PARAMS ((int, CORE_ADDR *));
diff --git a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c
index 92528f7..e0721be 100644
--- a/gnu/usr.bin/binutils/gdb/kvm-fbsd.c
+++ b/gnu/usr.bin/binutils/gdb/kvm-fbsd.c
@@ -844,8 +844,10 @@ read_pcb (fd, uaddr)
supply_register (6, (char *)&pcb.pcb_esi);
supply_register (7, (char *)&pcb.pcb_edi);
supply_register (PC_REGNUM, (char *)&pcb.pcb_eip);
- for (i = 9; i < 16; ++i) /* eflags, cs, ss, ds, es, fs, gs */
+ for (i = 9; i < 14; ++i) /* eflags, cs, ss, ds, es */
supply_register (i, (char *)&noreg);
+ supply_register (15, (char *)&pcb.pcb_fs);
+ supply_register (16, (char *)&pcb.pcb_gs);
/* XXX 80387 registers? */
}
diff --git a/gnu/usr.bin/gdb/gdb/freebsd-nat.c b/gnu/usr.bin/gdb/gdb/freebsd-nat.c
index a55c798..31a9419 100644
--- a/gnu/usr.bin/gdb/gdb/freebsd-nat.c
+++ b/gnu/usr.bin/gdb/gdb/freebsd-nat.c
@@ -34,7 +34,7 @@ static int tregmap[] =
tEAX, tECX, tEDX, tEBX,
tESP, tEBP, tESI, tEDI,
tEIP, tEFLAGS, tCS, tSS,
- tDS, tES, tSS, tSS, /* lies: no fs or gs */
+ tDS, tES, tFS, tGS,
};
void
@@ -88,6 +88,7 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
CORE_ADDR reg_addr;
{
register int regno;
+ register int cregno;
register int addr;
int bad_reg = -1;
int offset = -reg_addr & (core_reg_size - 1);
@@ -99,8 +100,27 @@ printf("-reg_addr: %08x\n", -reg_addr);
for (regno = 0; regno < NUM_REGS; regno++)
{
- addr = offset + 4 * tregmap[regno];
- if (addr < 0 || addr >= core_reg_size)
+ cregno = tregmap[regno];
+#if 1
+ if (cregno == tFS)
+ cregno = tCS;
+ else if (cregno == tGS)
+ cregno = tDS;
+#endif
+ addr = offset + 4 * cregno;
+ if (cregno == tFS)
+ {
+#if 0
+ supply_register (15, (char *)&u.u_pcb.pcb_fs);
+#endif
+ }
+ else if (cregno == tGS)
+ {
+#if 0
+ supply_register (16, (char *)&u.u_pcb.pcb_gs);
+#endif
+ }
+ else if (addr < 0 || addr >= core_reg_size)
{
if (bad_reg < 0)
bad_reg = regno;
diff --git a/gnu/usr.bin/gdb/gdb/kvm-fbsd.c b/gnu/usr.bin/gdb/gdb/kvm-fbsd.c
index 92528f7..e0721be 100644
--- a/gnu/usr.bin/gdb/gdb/kvm-fbsd.c
+++ b/gnu/usr.bin/gdb/gdb/kvm-fbsd.c
@@ -844,8 +844,10 @@ read_pcb (fd, uaddr)
supply_register (6, (char *)&pcb.pcb_esi);
supply_register (7, (char *)&pcb.pcb_edi);
supply_register (PC_REGNUM, (char *)&pcb.pcb_eip);
- for (i = 9; i < 16; ++i) /* eflags, cs, ss, ds, es, fs, gs */
+ for (i = 9; i < 14; ++i) /* eflags, cs, ss, ds, es */
supply_register (i, (char *)&noreg);
+ supply_register (15, (char *)&pcb.pcb_fs);
+ supply_register (16, (char *)&pcb.pcb_gs);
/* XXX 80387 registers? */
}
diff --git a/gnu/usr.bin/gdb/gdb/tm.h b/gnu/usr.bin/gdb/gdb/tm.h
index c9b2c1a..5ad8e76 100644
--- a/gnu/usr.bin/gdb/gdb/tm.h
+++ b/gnu/usr.bin/gdb/gdb/tm.h
@@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "i386/tm-i386bsd.h"
#undef NUM_REGS
-#define NUM_REGS 14
+#define NUM_REGS 16
extern struct frame_info *setup_arbitrary_frame PARAMS ((int, CORE_ADDR *));
OpenPOWER on IntegriCloud