don't let bin2hex call strlen
[deliverable/binutils-gdb.git] / gdb / go32-nat.c
index d848017c0b5031021a496ad36f9f50248a8e502d..7dc6307c708a2508b9dbcd164032e98eeb0a5f18 100644 (file)
@@ -1,6 +1,5 @@
 /* Native debugging support for Intel x86 running DJGPP.
 /* Native debugging support for Intel x86 running DJGPP.
-   Copyright (C) 1997, 1999-2001, 2005-2012 Free Software Foundation,
-   Inc.
+   Copyright (C) 1997-2014 Free Software Foundation, Inc.
    Written by Robert Hoehne.
 
    This file is part of GDB.
    Written by Robert Hoehne.
 
    This file is part of GDB.
    GDB does not use those as of this writing, and will never need
    to.  */
 
    GDB does not use those as of this writing, and will never need
    to.  */
 
+#include "defs.h"
+
 #include <fcntl.h>
 
 #include <fcntl.h>
 
-#include "defs.h"
 #include "i386-nat.h"
 #include "inferior.h"
 #include "gdbthread.h"
 #include "i386-nat.h"
 #include "inferior.h"
 #include "gdbthread.h"
 #include "buildsym.h"
 #include "i387-tdep.h"
 #include "i386-tdep.h"
 #include "buildsym.h"
 #include "i387-tdep.h"
 #include "i386-tdep.h"
+#include "i386-cpuid.h"
 #include "value.h"
 #include "regcache.h"
 #include "value.h"
 #include "regcache.h"
-#include "gdb_string.h"
+#include <string.h>
 #include "top.h"
 #include "top.h"
+#include "cli/cli-utils.h"
 
 #include <stdio.h>             /* might be required for __DJGPP_MINOR__ */
 #include <stdlib.h>
 
 #include <stdio.h>             /* might be required for __DJGPP_MINOR__ */
 #include <stdlib.h>
@@ -232,34 +234,10 @@ static int dr_ref_count[4];
 #define SOME_PID 42
 
 static int prog_has_started = 0;
 #define SOME_PID 42
 
 static int prog_has_started = 0;
-static void go32_open (char *name, int from_tty);
-static void go32_close (int quitting);
-static void go32_attach (struct target_ops *ops, char *args, int from_tty);
-static void go32_detach (struct target_ops *ops, char *args, int from_tty);
-static void go32_resume (struct target_ops *ops,
-                        ptid_t ptid, int step,
-                        enum gdb_signal siggnal);
-static void go32_fetch_registers (struct target_ops *ops,
-                                 struct regcache *, int regno);
-static void store_register (const struct regcache *, int regno);
-static void go32_store_registers (struct target_ops *ops,
-                                 struct regcache *, int regno);
-static void go32_prepare_to_store (struct regcache *);
-static int go32_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len,
-                            int write,
-                            struct mem_attrib *attrib,
-                            struct target_ops *target);
-static void go32_files_info (struct target_ops *target);
-static void go32_kill_inferior (struct target_ops *ops);
-static void go32_create_inferior (struct target_ops *ops, char *exec_file,
-                                 char *args, char **env, int from_tty);
+
 static void go32_mourn_inferior (struct target_ops *ops);
 static void go32_mourn_inferior (struct target_ops *ops);
-static int go32_can_run (void);
 
 static struct target_ops go32_ops;
 
 static struct target_ops go32_ops;
-static void go32_terminal_init (void);
-static void go32_terminal_inferior (void);
-static void go32_terminal_ours (void);
 
 #define r_ofs(x) (offsetof(TSS,x))
 
 
 #define r_ofs(x) (offsetof(TSS,x))
 
@@ -369,7 +347,7 @@ go32_open (char *name, int from_tty)
 }
 
 static void
 }
 
 static void
-go32_close (int quitting)
+go32_close (void)
 {
 }
 
 {
 }
 
@@ -382,7 +360,7 @@ Use the `run' command to run DJGPP programs."));
 }
 
 static void
 }
 
 static void
-go32_detach (struct target_ops *ops, char *args, int from_tty)
+go32_detach (struct target_ops *ops, const char *args, int from_tty)
 {
 }
 
 {
 }
 
@@ -596,7 +574,7 @@ go32_store_registers (struct target_ops *ops,
 }
 
 static void
 }
 
 static void
-go32_prepare_to_store (struct regcache *regcache)
+go32_prepare_to_store (struct target_ops *self, struct regcache *regcache)
 {
 }
 
 {
 }
 
@@ -875,7 +853,7 @@ go32_terminal_init (void)
 }
 
 static void
 }
 
 static void
-go32_terminal_info (char *args, int from_tty)
+go32_terminal_info (const char *args, int from_tty)
 {
   printf_unfiltered ("Inferior's terminal is in %s mode.\n",
                     !inf_mode_valid
 {
   printf_unfiltered ("Inferior's terminal is in %s mode.\n",
                     !inf_mode_valid
@@ -1026,9 +1004,6 @@ init_go32_ops (void)
 
   /* We are always processing GCC-compiled programs.  */
   processing_gcc_compilation = 2;
 
   /* We are always processing GCC-compiled programs.  */
   processing_gcc_compilation = 2;
-
-  /* Override the default name of the GDB init file.  */
-  strcpy (gdbinit, "gdb.ini");
 }
 
 /* Return the current DOS codepage number.  */
 }
 
 /* Return the current DOS codepage number.  */
@@ -1140,6 +1115,21 @@ go32_sysinfo (char *arg, int from_tty)
   else if (u.machine[0] == 'i' && u.machine[1] > 4)
     {
       /* CPUID with EAX = 0 returns the Vendor ID.  */
   else if (u.machine[0] == 'i' && u.machine[1] > 4)
     {
       /* CPUID with EAX = 0 returns the Vendor ID.  */
+#if 0
+      /* Ideally we would use i386_cpuid(), but it needs someone to run
+         native tests first to make sure things actually work.  They should.
+         http://sourceware.org/ml/gdb-patches/2013-05/msg00164.html  */
+      unsigned int eax, ebx, ecx, edx;
+
+      if (i386_cpuid (0, &eax, &ebx, &ecx, &edx))
+       {
+         cpuid_max = eax;
+         memcpy (&vendor[0], &ebx, 4);
+         memcpy (&vendor[4], &ecx, 4);
+         memcpy (&vendor[8], &edx, 4);
+         cpuid_vendor[12] = '\0';
+       }
+#else
       __asm__ __volatile__ ("xorl   %%ebx, %%ebx;"
                            "xorl   %%ecx, %%ecx;"
                            "xorl   %%edx, %%edx;"
       __asm__ __volatile__ ("xorl   %%ebx, %%ebx;"
                            "xorl   %%ecx, %%ecx;"
                            "xorl   %%edx, %%edx;"
@@ -1156,6 +1146,7 @@ go32_sysinfo (char *arg, int from_tty)
                            :
                            : "%eax", "%ebx", "%ecx", "%edx");
       cpuid_vendor[12] = '\0';
                            :
                            : "%eax", "%ebx", "%ecx", "%edx");
       cpuid_vendor[12] = '\0';
+#endif
     }
 
   printf_filtered ("CPU Type.......................%s", u.machine);
     }
 
   printf_filtered ("CPU Type.......................%s", u.machine);
@@ -1181,6 +1172,10 @@ go32_sysinfo (char *arg, int from_tty)
       int amd_p = strcmp (cpuid_vendor, "AuthenticAMD") == 0;
       unsigned cpu_family, cpu_model;
 
       int amd_p = strcmp (cpuid_vendor, "AuthenticAMD") == 0;
       unsigned cpu_family, cpu_model;
 
+#if 0
+      /* See comment above about cpuid usage.  */
+      i386_cpuid (1, &cpuid_eax, &cpuid_ebx, NULL, &cpuid_edx);
+#else
       __asm__ __volatile__ ("movl   $1, %%eax;"
                            "cpuid;"
                            : "=a" (cpuid_eax),
       __asm__ __volatile__ ("movl   $1, %%eax;"
                            "cpuid;"
                            : "=a" (cpuid_eax),
@@ -1188,6 +1183,7 @@ go32_sysinfo (char *arg, int from_tty)
                              "=d" (cpuid_edx)
                            :
                            : "%ecx");
                              "=d" (cpuid_edx)
                            :
                            : "%ecx");
+#endif
       brand_idx = cpuid_ebx & 0xff;
       cpu_family = (cpuid_eax >> 8) & 0xf;
       cpu_model  = (cpuid_eax >> 4) & 0xf;
       brand_idx = cpuid_ebx & 0xff;
       cpu_family = (cpuid_eax >> 8) & 0xf;
       cpu_model  = (cpuid_eax >> 4) & 0xf;
@@ -1272,9 +1268,9 @@ go32_sysinfo (char *arg, int from_tty)
                break;
            }
        }
                break;
            }
        }
-      sprintf (cpu_string, "%s%s Model %d Stepping %d",
-              intel_p ? "Pentium" : (amd_p ? "AMD" : "ix86"),
-              cpu_brand, cpu_model, cpuid_eax & 0xf);
+      xsnprintf (cpu_string, sizeof (cpu_string), "%s%s Model %d Stepping %d",
+                intel_p ? "Pentium" : (amd_p ? "AMD" : "ix86"),
+                cpu_brand, cpu_model, cpuid_eax & 0xf);
       printfi_filtered (31, "%s\n", cpu_string);
       if (((cpuid_edx & (6 | (0x0d << 23))) != 0)
          || ((cpuid_edx & 1) == 0)
       printfi_filtered (31, "%s\n", cpu_string);
       if (((cpuid_edx & (6 | (0x0d << 23))) != 0)
          || ((cpuid_edx & 1) == 0)
@@ -1702,8 +1698,7 @@ go32_sldt (char *arg, int from_tty)
 
   if (arg && *arg)
     {
 
   if (arg && *arg)
     {
-      while (*arg && isspace(*arg))
-       arg++;
+      arg = skip_spaces (arg);
 
       if (*arg)
        {
 
       if (*arg)
        {
@@ -1773,8 +1768,7 @@ go32_sgdt (char *arg, int from_tty)
 
   if (arg && *arg)
     {
 
   if (arg && *arg)
     {
-      while (*arg && isspace(*arg))
-       arg++;
+      arg = skip_spaces (arg);
 
       if (*arg)
        {
 
       if (*arg)
        {
@@ -1815,8 +1809,7 @@ go32_sidt (char *arg, int from_tty)
 
   if (arg && *arg)
     {
 
   if (arg && *arg)
     {
-      while (*arg && isspace(*arg))
-       arg++;
+      arg = skip_spaces (arg);
 
       if (*arg)
        {
 
       if (*arg)
        {
@@ -1986,8 +1979,7 @@ go32_pde (char *arg, int from_tty)
 
   if (arg && *arg)
     {
 
   if (arg && *arg)
     {
-      while (*arg && isspace(*arg))
-       arg++;
+      arg = skip_spaces (arg);
 
       if (*arg)
        {
 
       if (*arg)
        {
@@ -2037,8 +2029,7 @@ go32_pte (char *arg, int from_tty)
 
   if (arg && *arg)
     {
 
   if (arg && *arg)
     {
-      while (*arg && isspace(*arg))
-       arg++;
+      arg = skip_spaces (arg);
 
       if (*arg)
        {
 
       if (*arg)
        {
@@ -2065,8 +2056,7 @@ go32_pte_for_address (char *arg, int from_tty)
 
   if (arg && *arg)
     {
 
   if (arg && *arg)
     {
-      while (*arg && isspace(*arg))
-       arg++;
+      arg = skip_spaces (arg);
 
       if (*arg)
        addr = parse_and_eval_address (arg);
 
       if (*arg)
        addr = parse_and_eval_address (arg);
This page took 0.041038 seconds and 4 git commands to generate.