#include "gdbcmd.h"
#include "floatformat.h"
#include "buildsym.h"
-#include "i387-nat.h"
+#include "i387-tdep.h"
+#include "i386-tdep.h"
#include "value.h"
#include "regcache.h"
#include "gdb_string.h"
#include <unistd.h>
#include <sys/utsname.h>
#include <io.h>
-/* breakpoint.h defines `disable' which is an enum member. */
-#define disable interrup_disable
#include <dos.h>
-#undef disable
#include <dpmi.h>
#include <go32.h>
#include <sys/farptr.h>
static void
save_npx (void)
{
- asm ("inb $0xa0, %%al
- testb $0x20, %%al
- jz 1f
- xorb %% al, %%al
- outb %% al, $0xf0
- movb $0x20, %%al
- outb %% al, $0xa0
- outb %% al, $0x20
-1:
- fnsave % 0
+ asm ("inb $0xa0, %%al \n\
+ testb $0x20, %%al \n\
+ jz 1f \n\
+ xorb %%al, %%al \n\
+ outb %%al, $0xf0 \n\
+ movb $0x20, %%al \n\
+ outb %%al, $0xa0 \n\
+ outb %%al, $0x20 \n\
+1: \n\
+ fnsave %0 \n\
fwait "
: "=m" (npx)
: /* No input */
/* *INDENT-ON* */
-
-
-
/* ------------------------------------------------------------------------- */
/* Reload the contents of the NPX from the global variable `npx'. */
{
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 if (i386_fp_regnum_p (regno) || i386_fpc_regnum_p (regno))
+ i387_supply_fsave (current_regcache, regno, &npx);
else
internal_error (__FILE__, __LINE__,
"Invalid register no. %d in fetch_register.", regno);
{
for (regno = 0; regno < FP0_REGNUM; regno++)
fetch_register (regno);
- i387_supply_fsave ((char *) &npx);
+ i387_supply_fsave (current_regcache, -1, &npx);
}
}
static void
store_register (int regno)
{
- void *rp;
- void *v = (void *) register_buffer (regno);
-
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);
+ regcache_collect (regno, (char *) &a_tss + regno_mapping[regno].tss_ofs);
+ else if (i386_fp_regnum_p (regno) || i386_fpc_regnum_p (regno))
+ i387_fill_fsave ((char *) &npx, regno);
else
internal_error (__FILE__, __LINE__,
"Invalid register no. %d in store_register.", regno);
exit (1);
}
environ = env_save;
- free (cmdline);
+ xfree (cmdline);
edi_init (start_state);
#if __DJGPP_MINOR__ < 3
{
redir_to_debugger (&child_cmd);
error ("Cannot redirect standard handles for program: %s.",
- strerror (errno));
+ safe_strerror (errno));
}
/* set the console device of the inferior to whatever mode
(raw or cooked) we found it last time */
{
redir_to_child (&child_cmd);
error ("Cannot redirect standard handles for debugger: %s.",
- strerror (errno));
+ safe_strerror (errno));
}
}
}
if (ldt_entry < 0
|| (ldt_entry & 4) == 0
|| (ldt_entry & 3) != (cpl & 3))
- error ("Invalid LDT entry 0x%03x.", ldt_entry);
+ error ("Invalid LDT entry 0x%03lx.", (unsigned long)ldt_entry);
}
}
if (ldt_entry >= 0)
{
if (ldt_entry > limit)
- error ("Invalid LDT entry %#x: outside valid limits [0..%#x]",
- ldt_entry, limit);
+ error ("Invalid LDT entry %#lx: outside valid limits [0..%#x]",
+ (unsigned long)ldt_entry, limit);
display_descriptor (ldt_descr.stype, base, ldt_entry / 8, 1);
}
{
gdt_entry = parse_and_eval_long (arg);
if (gdt_entry < 0 || (gdt_entry & 7) != 0)
- error ("Invalid GDT entry 0x%03x: not an integral multiple of 8.",
- gdt_entry);
+ error ("Invalid GDT entry 0x%03lx: not an integral multiple of 8.",
+ (unsigned long)gdt_entry);
}
}
if (gdt_entry >= 0)
{
if (gdt_entry > gdtr.limit)
- error ("Invalid GDT entry %#x: outside valid limits [0..%#x]",
- gdt_entry, gdtr.limit);
+ error ("Invalid GDT entry %#lx: outside valid limits [0..%#x]",
+ (unsigned long)gdt_entry, gdtr.limit);
display_descriptor (0, gdtr.base, gdt_entry / 8, 1);
}
{
idt_entry = parse_and_eval_long (arg);
if (idt_entry < 0)
- error ("Invalid (negative) IDT entry %d.", idt_entry);
+ error ("Invalid (negative) IDT entry %ld.", idt_entry);
}
}
if (idt_entry >= 0)
{
if (idt_entry > idtr.limit)
- error ("Invalid IDT entry %#x: outside valid limits [0..%#x]",
- idt_entry, idtr.limit);
+ error ("Invalid IDT entry %#lx: outside valid limits [0..%#x]",
+ (unsigned long)idt_entry, idtr.limit);
display_descriptor (1, idtr.base, idt_entry, 1);
}
cr3 = _farnspeekl (taskbase + 0x1c) & ~0xfff;
if (cr3 > 0xfffff)
{
-#if 0 /* not fully supported yet */
+#if 0 /* not fullly supported yet */
/* The Page Directory is in UMBs. In that case, CWSDPMI puts
the first Page Table right below the Page Directory. Thus,
the first Page Table's entry for its own address and the Page
static void
go32_pte (char *arg, int from_tty)
{
- long pde_idx = -1, i;
+ long pde_idx = -1L, i;
if (arg && *arg)
{
{
pde_idx = parse_and_eval_long (arg);
if (pde_idx < 0 || pde_idx >= 1024)
- error ("Entry %d is outside valid limits [0..1023].", pde_idx);
+ error ("Entry %ld is outside valid limits [0..1023].", pde_idx);
}
}
add_target (&go32_ops);
add_prefix_cmd ("dos", class_info, go32_info_dos_command,
- "Print information specific to DJGPP (a.k.a. MS-DOS) debugging.",
+ "Print information specific to DJGPP (aka MS-DOS) debugging.",
&info_dos_cmdlist, "info dos ", 0, &infolist);
add_cmd ("sysinfo", class_info, go32_sysinfo,