From 89dea5aa55a43f4afa567c1d3a5fd7b0470abdd4 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 18 Feb 2001 07:22:17 +0000 Subject: [PATCH] * go32-nat.c: Include i387-nat.h. (fetch_register): New function, uses some of the guts of go32_fetch_registers and i387_supply_register. (go32_fetch_registers): Most of the code moved into fetch_register. Use i387_supply_fsave. (store_register): Use i387_fill_fsave instead of custom code. (go32_store_registers): Use i387_fill_fsave. * Makefile.in (go32-nat.o): Depend on i387-nat.h. * config/i386/go32.mh (NATDEPFILES): Add i387-nat.o. --- gdb/ChangeLog | 12 ++++++ gdb/Makefile.in | 2 +- gdb/config/i386/go32.mh | 2 +- gdb/go32-nat.c | 82 +++++++++++++---------------------------- 4 files changed, 40 insertions(+), 58 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2115929304b..3623e027daf 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,17 @@ 2001-02-18 Eli Zaretskii + * go32-nat.c: Include i387-nat.h. + (fetch_register): New function, uses some of the guts of + go32_fetch_registers and calls i387_supply_register. + (go32_fetch_registers): Most of the code moved into + fetch_register. Use i387_supply_fsave. + (store_register): Use i387_fill_fsave instead of custom code. + (go32_store_registers): Use i387_fill_fsave. + + * Makefile.in (go32-nat.o): Depend on i387-nat.h. + + * config/i386/go32.mh (NATDEPFILES): Add i387-nat.o. + * completer.c (gdb_completer_file_name_break_characters): Remove slash from file-name break characters. [__MSDOS__]: Special definition for DOS/Windows file names. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 2c471353962..1ff8398aa0b 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -1450,7 +1450,7 @@ gdbtypes.o: gdbtypes.c $(bfd_h) complaints.h $(defs_h) $(expression_h) \ $(value_h) gdb_string.h wrapper.h go32-nat.o: go32-nat.c $(defs_h) $(inferior_h) gdb_wait.h $(gdbcore_h) \ - $(command_h) $(floatformat_h) target.h + $(command_h) $(floatformat_h) target.h i387-nat.h gnu-nat.o: process_reply_S.h exc_request_S.h notify_S.h msg_reply_S.h \ exc_request_U.h msg_U.h gnu-nat.h diff --git a/gdb/config/i386/go32.mh b/gdb/config/i386/go32.mh index ce6c5324e2e..a1c673d8951 100644 --- a/gdb/config/i386/go32.mh +++ b/gdb/config/i386/go32.mh @@ -8,7 +8,7 @@ XM_FILE= xm-go32.h XDEPFILES= NAT_FILE= nm-go32.h -NATDEPFILES= go32-nat.o +NATDEPFILES= go32-nat.o i387-nat.o TERMCAP= HOST_IPC= diff --git a/gdb/go32-nat.c b/gdb/go32-nat.c index 885662be76e..582ff1626ff 100644 --- a/gdb/go32-nat.c +++ b/gdb/go32-nat.c @@ -28,6 +28,7 @@ #include "command.h" #include "floatformat.h" #include "buildsym.h" +#include "i387-nat.h" #include /* required for __DJGPP_MINOR__ */ #include @@ -450,55 +451,27 @@ go32_wait (int pid ATTRIBUTE_UNUSED, struct target_waitstatus *status) } static void -go32_fetch_registers (int regno) +fetch_register (int regno) { - /*JHW */ - int end_reg = regno + 1; /* just one reg initially */ - - if (regno < 0) /* do the all registers */ - { - regno = 0; /* start at first register */ - /* # regs in table */ - end_reg = sizeof (regno_mapping) / sizeof (regno_mapping[0]); - } + if (regno < FP0_REGNUM) + supply_register (regno, (char *) &a_tss + regno_mapping[regno].tss_ofs); + else if (regno <= LAST_FPU_CTRL_REGNUM) + i387_supply_register (regno, (char *) &npx); + else + internal_error (__FILE__, __LINE__, + "Invalid register no. %d in fetch_register.", regno); +} - for (; regno < end_reg; regno++) +static void +go32_fetch_registers (int regno) +{ + if (regno >= 0) + fetch_register (regno); + else { - if (regno < 16) - supply_register (regno, - (char *) &a_tss + regno_mapping[regno].tss_ofs); - else if (regno < 24) - supply_register (regno, - (char *) &npx.reg[regno_mapping[regno].tss_ofs]); - else if (regno < 32) - { - unsigned regval; - - switch (regno_mapping[regno].size) - { - case 2: - regval = *(unsigned short *) - ((char *) &npx + regno_mapping[regno].tss_ofs); - regval &= 0xffff; - if (regno == FOP_REGNUM && regval) - /* Feature: restore the 5 bits of the opcode - stripped by FSAVE/FNSAVE. */ - regval |= 0xd800; - break; - case 4: - regval = *(unsigned *) - ((char *) &npx + regno_mapping[regno].tss_ofs); - break; - default: - internal_error (__FILE__, __LINE__, "\ -Invalid native size for register no. %d in go32_fetch_register.", regno); - } - supply_register (regno, (char *) ®val); - } - else - internal_error (__FILE__, __LINE__, - "Invalid register no. %d in go32_fetch_register.", - regno); + for (regno = 0; regno < FP0_REGNUM; regno++) + fetch_register (regno); + i387_supply_fsave ((char *) &npx); } } @@ -508,18 +481,14 @@ store_register (int regno) void *rp; void *v = (void *) ®isters[REGISTER_BYTE (regno)]; - if (regno < 16) - rp = (char *) &a_tss + regno_mapping[regno].tss_ofs; - else if (regno < 24) - rp = (char *) &npx.reg[regno_mapping[regno].tss_ofs]; - else if (regno < 32) - rp = (char *) &npx + regno_mapping[regno].tss_ofs; + if (regno < FP0_REGNUM) + memcpy ((char *) &a_tss + regno_mapping[regno].tss_ofs, + v, regno_mapping[regno].size); + else if (regno <= LAST_FPU_CTRL_REGNUM) + i387_fill_fsave ((char *)&npx, regno); else internal_error (__FILE__, __LINE__, "Invalid register no. %d in store_register.", regno); - memcpy (rp, v, regno_mapping[regno].size); - if (regno == FOP_REGNUM) - *(short *)rp &= 0x07ff; /* strip high 5 bits, in case they added them */ } static void @@ -531,8 +500,9 @@ go32_store_registers (int regno) store_register (regno); else { - for (r = 0; r < sizeof (regno_mapping) / sizeof (regno_mapping[0]); r++) + for (r = 0; r < FP0_REGNUM; r++) store_register (r); + i387_fill_fsave ((char *) &npx, -1); } } -- 2.30.2