X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fcorefile.c;h=8ffe49d2e95abca90b09388924dfefb42d50b619;hb=4ef1f4677390c085543fe80eec41b0fe5d58ddca;hp=65814208dac0ea1457a66b1dd48448dc1e3431cd;hpb=119dfbb7c16c594e26b4745e5efaf836b48d8c1b;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/corefile.c b/gdb/corefile.c index 65814208da..8ffe49d2e9 100644 --- a/gdb/corefile.c +++ b/gdb/corefile.c @@ -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 } @@ -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; + } +} + #if 0 /* Enable after 4.12. It is not tested. */