* exec.c (xfer_memory): Add attrib argument.
[deliverable/binutils-gdb.git] / gdb / remote.c
index 9764e583ff2bf23ee682a7057f965558fd760609..0140b12b9a970232fc8a6a2352e6a3a8cde0c0ab 100644 (file)
@@ -1,5 +1,5 @@
 /* Remote target communications for serial-line targets in custom GDB protocol
-   Copyright 1988, 1991-2000 Free Software Foundation, Inc.
+   Copyright 1988, 1991-2000, 2001 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -70,6 +70,7 @@ static void remote_files_info (struct target_ops *ignore);
 
 static int remote_xfer_memory (CORE_ADDR memaddr, char *myaddr,
                               int len, int should_write,
+                              struct mem_attrib *attrib,
                               struct target_ops *target);
 
 static void remote_prepare_to_store (void);
@@ -574,12 +575,12 @@ add_packet_config_cmd (struct packet_config *config,
   config->title = title;
   config->detect = CMD_AUTO_BOOLEAN_AUTO;
   config->support = PACKET_SUPPORT_UNKNOWN;
-  asprintf (&set_doc, "Set use of remote protocol `%s' (%s) packet",
-           name, title);
-  asprintf (&show_doc, "Show current use of remote protocol `%s' (%s) packet",
-           name, title);
+  xasprintf (&set_doc, "Set use of remote protocol `%s' (%s) packet",
+            name, title);
+  xasprintf (&show_doc, "Show current use of remote protocol `%s' (%s) packet",
+            name, title);
   /* set/show TITLE-packet {auto,on,off} */
-  asprintf (&cmd_name, "%s-packet", title);
+  xasprintf (&cmd_name, "%s-packet", title);
   set_cmd = add_set_auto_boolean_cmd (cmd_name, class_obscure,
                                &config->detect, set_doc,
                                set_remote_list);
@@ -590,7 +591,7 @@ add_packet_config_cmd (struct packet_config *config,
   if (legacy)
     {
       char *legacy_name;
-      asprintf (&legacy_name, "%s-packet", name);
+      xasprintf (&legacy_name, "%s-packet", name);
       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
                     set_remote_list);
       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
@@ -3025,7 +3026,7 @@ remote_fetch_registers (int regno)
   char *buf = alloca (PBUFSIZ);
   int i;
   char *p;
-  char regs[REGISTER_BYTES];
+  char *regs = alloca (REGISTER_BYTES);
 
   set_thread (inferior_pid, 1);
 
@@ -3080,10 +3081,9 @@ remote_fetch_registers (int regno)
   if (i != register_bytes_found)
     {
       register_bytes_found = i;
-#ifdef REGISTER_BYTES_OK
-      if (!REGISTER_BYTES_OK (i))
+      if (REGISTER_BYTES_OK_P ()
+         && !REGISTER_BYTES_OK (i))
        warning ("Remote reply is too short: %s", buf);
-#endif
     }
 
 supply_them:
@@ -3091,7 +3091,7 @@ supply_them:
     {
       supply_register (i, &regs[REGISTER_BYTE (i)]);
       if (buf[REGISTER_BYTE (i) * 2] == 'x')
-       register_valid[i] = -1; /* register value not available */
+       set_register_cached (i, -1);
     }
 }
 
@@ -3128,7 +3128,7 @@ store_register_using_P (int regno)
 
   sprintf (buf, "P%x=", regno);
   p = buf + strlen (buf);
-  regp = &registers[REGISTER_BYTE (regno)];
+  regp = register_buffer (regno);
   for (i = 0; i < REGISTER_RAW_SIZE (regno); ++i)
     {
       *p++ = tohex ((regp[i] >> 4) & 0xf);
@@ -3142,7 +3142,7 @@ store_register_using_P (int regno)
 
 
 /* Store register REGNO, or all registers if REGNO == -1, from the contents
-   of REGISTERS.  FIXME: ignores errors.  */
+   of the register cache buffer.  FIXME: ignores errors.  */
 
 static void
 remote_store_registers (int regno)
@@ -3150,6 +3150,7 @@ remote_store_registers (int regno)
   char *buf = alloca (PBUFSIZ);
   int i;
   char *p;
+  char *regs;
 
   set_thread (inferior_pid, 1);
 
@@ -3187,12 +3188,13 @@ remote_store_registers (int regno)
   /* Command describes registers byte by byte,
      each byte encoded as two hex characters.  */
 
+  regs = register_buffer (-1);
   p = buf + 1;
   /* remote_prepare_to_store insures that register_bytes_found gets set.  */
   for (i = 0; i < register_bytes_found; i++)
     {
-      *p++ = tohex ((registers[i] >> 4) & 0xf);
-      *p++ = tohex (registers[i] & 0xf);
+      *p++ = tohex ((regs[i] >> 4) & 0xf);
+      *p++ = tohex (regs[i] & 0xf);
     }
   *p = '\0';
 
@@ -3363,7 +3365,10 @@ remote_write_bytes (CORE_ADDR memaddr, char *myaddr, int len)
       todo = min (len, max_buf_size / 2);
       break;
     case PACKET_SUPPORT_UNKNOWN:
-      internal_error ("remote_write_bytes: bad switch");
+      internal_error ("%s:%d: remote_write_bytes: bad internal state",
+                     __FILE__, __LINE__);
+    default:
+      internal_error ("%s:%d: bad switch", __FILE__, __LINE__);
     }
   
   /* Append <memaddr> */
@@ -3427,7 +3432,10 @@ remote_write_bytes (CORE_ADDR memaddr, char *myaddr, int len)
       *p = '\0';
       break;
     case PACKET_SUPPORT_UNKNOWN:
-      internal_error ("remote_write_bytes: bad switch");
+      internal_error ("%s:%d: remote_write_bytes: bad internal state",
+                     __FILE__, __LINE__);
+    default:
+      internal_error ("%s:%d: bad switch", __FILE__, __LINE__);
     }
   
   putpkt_binary (buf, (int) (p - buf));
@@ -3536,7 +3544,9 @@ remote_read_bytes (CORE_ADDR memaddr, char *myaddr, int len)
 /* ARGSUSED */
 static int
 remote_xfer_memory (CORE_ADDR mem_addr, char *buffer, int mem_len,
-                   int should_write, struct target_ops *target)
+                   int should_write,
+                   struct mem_attrib *attrib ATTRIBUTE_UNUSED,
+                   struct target_ops *target)
 {
   CORE_ADDR targ_addr;
   int targ_len;
@@ -4424,7 +4434,7 @@ remote_insert_hw_breakpoint (CORE_ADDR addr, int len)
   
   addr = remote_address_masked (addr);
   p += hexnumstr (p, (ULONGEST) addr);
-  *p = '\0';
+  sprintf (p, ",%x", len);
 
   putpkt (buf);
   getpkt (buf, PBUFSIZ, 0);
@@ -4460,7 +4470,7 @@ remote_remove_hw_breakpoint (CORE_ADDR addr, int len)
   
   addr = remote_address_masked (addr);
   p += hexnumstr (p, (ULONGEST) addr);
-  *p = '\0';
+  sprintf (p, ",%x", len);
 
   putpkt(buf);
   getpkt (buf, PBUFSIZ, 0);
@@ -4590,7 +4600,7 @@ compare_sections_command (char *args, int from_tty)
 
       /* be clever; compute the host_crc before waiting for target reply */
       sectdata = xmalloc (size);
-      old_chain = make_cleanup (free, sectdata);
+      old_chain = make_cleanup (xfree, sectdata);
       bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
       host_crc = crc32 ((unsigned char *) sectdata, size, 0xffffffff);
 
This page took 0.029299 seconds and 4 git commands to generate.