hp merge changes -- too numerous to mention here; see ChangeLog and
[deliverable/binutils-gdb.git] / gdb / corefile.c
index 65814208dac0ea1457a66b1dd48448dc1e3431cd..8ffe49d2e95abca90b09388924dfefb42d50b619 100644 (file)
@@ -33,6 +33,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "gdbcore.h"
 #include "dis-asm.h"
 #include "language.h"
+#include "gdb_stat.h"
 
 extern char registers[];
 
@@ -149,6 +150,24 @@ reopen_exec_file ()
 #if 0 /* FIXME */
   if (exec_bfd)
     bfd_reopen (exec_bfd);
+#else
+  char *filename;
+  int res;
+  struct stat st;
+  long mtime;
+
+  /* Don't do anything if the current target isn't exec. */
+  if (exec_bfd == NULL || strcmp (target_shortname, "exec") != 0)
+    return;
+  /* If the timestamp of the exec file has changed, reopen it. */
+  filename = strdup (bfd_get_filename (exec_bfd));
+  make_cleanup (free, filename);
+  mtime = bfd_get_mtime(exec_bfd);
+  res = stat (filename, &st);
+
+  if (mtime && mtime != st.st_mtime)
+    exec_file_command (filename, 0);
 #endif
 }
 \f
@@ -225,6 +244,19 @@ read_memory (memaddr, myaddr, len)
     memory_error (status, memaddr);
 }
 
+void
+read_memory_section (memaddr, myaddr, len, bfd_section)
+     CORE_ADDR memaddr;
+     char *myaddr;
+     int len;
+     asection *bfd_section;
+{
+  int status;
+  status = target_read_memory_section (memaddr, myaddr, len, bfd_section);
+  if (status != 0)
+    memory_error (status, memaddr);
+}
+
 /* Like target_read_memory, but slightly different parameters.  */
 
 int
@@ -293,6 +325,37 @@ read_memory_unsigned_integer (memaddr, len)
   read_memory (memaddr, buf, len);
   return extract_unsigned_integer (buf, len);
 }
+
+void
+read_memory_string (memaddr, buffer, max_len)
+     CORE_ADDR memaddr;
+     char * buffer;
+     int max_len;
+{
+  register char * cp;
+  register int i;
+  int cnt;
+
+  cp = buffer;
+  while (1)
+    {
+      if (cp - buffer >= max_len)
+        {
+          buffer[max_len - 1] = '\0';
+          break;
+        }
+      cnt = max_len - (cp - buffer);
+      if (cnt > 8)
+       cnt = 8;
+      read_memory (memaddr + (int) (cp - buffer), cp, cnt);
+      for (i = 0; i < cnt && *cp; i++, cp++)
+        ; /* null body */
+
+      if (i < cnt && !*cp)
+        break;
+    }
+}
+
 \f
 #if 0
 /* Enable after 4.12.  It is not tested.  */
This page took 0.03996 seconds and 4 git commands to generate.