2005-02-10 Andrew Cagney <cagney@gnu.org>
[deliverable/binutils-gdb.git] / gdb / exec.c
index 8ca669ea6748fcccfe71e7269678366ca087c1a5..d993d7a28ce7cccf85c7c37df90ef97053da2be4 100644 (file)
 #include "value.h"
 #include "exec.h"
 
-#ifdef USG
-#include <sys/types.h>
-#endif
-
 #include <fcntl.h>
-#include <readline/readline.h>
+#include "readline/readline.h"
 #include "gdb_string.h"
 
 #include "gdbcore.h"
 
 struct vmap *map_vmap (bfd *, bfd *);
 
-void (*file_changed_hook) (char *);
+void (*deprecated_file_changed_hook) (char *);
 
 /* Prototypes for local functions */
 
-static void add_to_section_table (bfd *, sec_ptr, void *);
-
 static void exec_close (int);
 
 static void file_command (char *, int);
@@ -67,8 +61,6 @@ static void set_section_command (char *, int);
 
 static void exec_files_info (struct target_ops *);
 
-static void bfdsec_to_vmap (bfd *, sec_ptr, void *);
-
 static int ignore (CORE_ADDR, char *);
 
 static void init_exec_ops (void);
@@ -118,7 +110,7 @@ exec_close (int quitting)
       else if (vp->bfd != exec_bfd)
        /* FIXME-leak: We should be freeing vp->name too, I think.  */
        if (!bfd_close (vp->bfd))
-         warning ("cannot close \"%s\": %s",
+         warning (_("cannot close \"%s\": %s"),
                   vp->name, bfd_errmsg (bfd_get_error ()));
 
       /* FIXME: This routine is #if 0'd in symfile.c.  What should we
@@ -137,7 +129,7 @@ exec_close (int quitting)
       char *name = bfd_get_filename (exec_bfd);
 
       if (!bfd_close (exec_bfd))
-       warning ("cannot close \"%s\": %s",
+       warning (_("cannot close \"%s\": %s"),
                 name, bfd_errmsg (bfd_get_error ()));
       xfree (name);
       exec_bfd = NULL;
@@ -198,7 +190,7 @@ exec_file_attach (char *filename, int from_tty)
       char *scratch_pathname;
       int scratch_chan;
 
-      scratch_chan = openp (getenv ("PATH"), 1, filename,
+      scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, filename,
                   write_files ? O_RDWR | O_BINARY : O_RDONLY | O_BINARY, 0,
                            &scratch_pathname);
 #if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__)
@@ -206,8 +198,9 @@ exec_file_attach (char *filename, int from_tty)
        {
          char *exename = alloca (strlen (filename) + 5);
          strcat (strcpy (exename, filename), ".exe");
-         scratch_chan = openp (getenv ("PATH"), 1, exename, write_files ?
-            O_RDWR | O_BINARY : O_RDONLY | O_BINARY, 0, &scratch_pathname);
+         scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, exename,
+            write_files ? O_RDWR | O_BINARY : O_RDONLY | O_BINARY, 0,
+            &scratch_pathname);
        }
 #endif
       if (scratch_chan < 0)
@@ -215,7 +208,7 @@ exec_file_attach (char *filename, int from_tty)
       exec_bfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan);
 
       if (!exec_bfd)
-       error ("\"%s\": could not open as an executable file: %s",
+       error (_("\"%s\": could not open as an executable file: %s"),
               scratch_pathname, bfd_errmsg (bfd_get_error ()));
 
       /* At this point, scratch_pathname and exec_bfd->name both point to the
@@ -230,7 +223,7 @@ exec_file_attach (char *filename, int from_tty)
          /* Make sure to close exec_bfd, or else "run" might try to use
             it.  */
          exec_close (0);
-         error ("\"%s\": not in executable format: %s",
+         error (_("\"%s\": not in executable format: %s"),
                 scratch_pathname, bfd_errmsg (bfd_get_error ()));
        }
 
@@ -245,7 +238,7 @@ exec_file_attach (char *filename, int from_tty)
          /* Make sure to close exec_bfd, or else "run" might try to use
             it.  */
          exec_close (0);
-         error ("\"%s\": can't find the file sections: %s",
+         error (_("\"%s\": can't find the file sections: %s"),
                 scratch_pathname, bfd_errmsg (bfd_get_error ()));
        }
 #endif /* DEPRECATED_IBM6000_TARGET */
@@ -256,7 +249,7 @@ exec_file_attach (char *filename, int from_tty)
          /* Make sure to close exec_bfd, or else "run" might try to use
             it.  */
          exec_close (0);
-         error ("\"%s\": can't find the file sections: %s",
+         error (_("\"%s\": can't find the file sections: %s"),
                 scratch_pathname, bfd_errmsg (bfd_get_error ()));
        }
 
@@ -271,9 +264,10 @@ exec_file_attach (char *filename, int from_tty)
       push_target (&exec_ops);
 
       /* Tell display code (if any) about the changed file name.  */
-      if (exec_file_display_hook)
-       (*exec_file_display_hook) (filename);
+      if (deprecated_exec_file_display_hook)
+       (*deprecated_exec_file_display_hook) (filename);
     }
+  bfd_cache_close_all ();
 }
 
 /*  Process the first arg in ARGS as the new exec file.
@@ -307,7 +301,7 @@ exec_file_command (char *args, int from_tty)
         {;
         }
       if (*argv == NULL)
-        error ("No executable file name was specified");
+        error (_("No executable file name was specified"));
 
       filename = tilde_expand (*argv);
       make_cleanup (xfree, filename);
@@ -328,8 +322,8 @@ file_command (char *arg, int from_tty)
      the exec file, but that's rough.  */
   exec_file_command (arg, from_tty);
   symbol_file_command (arg, from_tty);
-  if (file_changed_hook)
-    file_changed_hook (arg);
+  if (deprecated_file_changed_hook)
+    deprecated_file_changed_hook (arg);
 }
 \f
 
@@ -338,7 +332,8 @@ file_command (char *arg, int from_tty)
    we cast it back to its proper type.  */
 
 static void
-add_to_section_table (bfd *abfd, sec_ptr asect, void *table_pp_char)
+add_to_section_table (bfd *abfd, struct bfd_section *asect,
+                     void *table_pp_char)
 {
   struct section_table **table_pp = (struct section_table **) table_pp_char;
   flagword aflag;
@@ -359,7 +354,7 @@ add_to_section_table (bfd *abfd, sec_ptr asect, void *table_pp_char)
    Returns 0 if OK, 1 on error.  */
 
 int
-build_section_table (bfd *some_bfd, struct section_table **start,
+build_section_table (struct bfd *some_bfd, struct section_table **start,
                     struct section_table **end)
 {
   unsigned count;
@@ -377,7 +372,7 @@ build_section_table (bfd *some_bfd, struct section_table **start,
 }
 \f
 static void
-bfdsec_to_vmap (bfd *abfd, sec_ptr sect, void *arg3)
+bfdsec_to_vmap (struct bfd *abfd, struct bfd_section *sect, void *arg3)
 {
   struct vmap_and_bfd *vmap_bfd = (struct vmap_and_bfd *) arg3;
   struct vmap *vp;
@@ -387,14 +382,14 @@ bfdsec_to_vmap (bfd *abfd, sec_ptr sect, void *arg3)
   if ((bfd_get_section_flags (abfd, sect) & SEC_LOAD) == 0)
     return;
 
-  if (STREQ (bfd_section_name (abfd, sect), ".text"))
+  if (DEPRECATED_STREQ (bfd_section_name (abfd, sect), ".text"))
     {
       vp->tstart = bfd_section_vma (abfd, sect);
       vp->tend = vp->tstart + bfd_section_size (abfd, sect);
       vp->tvma = bfd_section_vma (abfd, sect);
       vp->toffs = sect->filepos;
     }
-  else if (STREQ (bfd_section_name (abfd, sect), ".data"))
+  else if (DEPRECATED_STREQ (bfd_section_name (abfd, sect), ".data"))
     {
       vp->dstart = bfd_section_vma (abfd, sect);
       vp->dend = vp->dstart + bfd_section_size (abfd, sect);
@@ -457,7 +452,6 @@ xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
   int res;
   struct section_table *p;
   CORE_ADDR nextsectaddr, memend;
-  int (*xfer_fn) (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);
   asection *section = NULL;
 
   if (len <= 0)
@@ -471,7 +465,6 @@ xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
     }
 
   memend = memaddr + len;
-  xfer_fn = write ? bfd_set_section_contents : bfd_get_section_contents;
   nextsectaddr = memend;
 
   for (p = target->to_sections; p < target->to_sections_end; p++)
@@ -484,8 +477,14 @@ xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
          if (memend <= p->endaddr)
            {
              /* Entire transfer is within this section.  */
-             res = xfer_fn (p->bfd, p->the_bfd_section, myaddr,
-                            memaddr - p->addr, len);
+             if (write)
+               res = bfd_set_section_contents (p->bfd, p->the_bfd_section,
+                                               myaddr, memaddr - p->addr,
+                                               len);
+             else
+               res = bfd_get_section_contents (p->bfd, p->the_bfd_section,
+                                               myaddr, memaddr - p->addr,
+                                               len);
              return (res != 0) ? len : 0;
            }
          else if (memaddr >= p->endaddr)
@@ -497,8 +496,14 @@ xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int write,
            {
              /* This section overlaps the transfer.  Just do half.  */
              len = p->endaddr - memaddr;
-             res = xfer_fn (p->bfd, p->the_bfd_section, myaddr,
-                            memaddr - p->addr, len);
+             if (write)
+               res = bfd_set_section_contents (p->bfd, p->the_bfd_section,
+                                               myaddr, memaddr - p->addr,
+                                               len);
+             else
+               res = bfd_get_section_contents (p->bfd, p->the_bfd_section,
+                                               myaddr, memaddr - p->addr,
+                                               len);
              return (res != 0) ? len : 0;
            }
         }
@@ -517,8 +522,8 @@ void
 print_section_info (struct target_ops *t, bfd *abfd)
 {
   struct section_table *p;
-  /* FIXME: "016l" is not wide enough when TARGET_ADDR_BIT > 64.  */
-  char *fmt = TARGET_ADDR_BIT <= 32 ? "08l" : "016l";
+  /* FIXME: 16 is not wide enough when TARGET_ADDR_BIT > 64.  */
+  int wid = TARGET_ADDR_BIT <= 32 ? 8 : 16;
 
   printf_filtered ("\t`%s', ", bfd_get_filename (abfd));
   wrap_here ("        ");
@@ -531,8 +536,8 @@ print_section_info (struct target_ops *t, bfd *abfd)
     }
   for (p = t->to_sections; p < t->to_sections_end; p++)
     {
-      printf_filtered ("\t%s", local_hex_string_custom (p->addr, fmt));
-      printf_filtered (" - %s", local_hex_string_custom (p->endaddr, fmt));
+      printf_filtered ("\t%s", hex_string_custom (p->addr, wid));
+      printf_filtered (" - %s", hex_string_custom (p->endaddr, wid));
 
       /* FIXME: A format of "08l" is not wide enough for file offsets
         larger than 4GB.  OTOH, making it "016l" isn't desirable either
@@ -541,7 +546,7 @@ print_section_info (struct target_ops *t, bfd *abfd)
         format string accordingly.  */
       if (info_verbose)
        printf_filtered (" @ %s",
-                        local_hex_string_custom (p->the_bfd_section->filepos, "08l"));
+                        hex_string_custom (p->the_bfd_section->filepos, 8));
       printf_filtered (" is %s", bfd_section_name (p->bfd, p->the_bfd_section));
       if (p->bfd != abfd)
        {
@@ -628,7 +633,7 @@ set_section_command (char *args, int from_tty)
   long offset;
 
   if (args == 0)
-    error ("Must specify section name and its virtual address");
+    error (_("Must specify section name and its virtual address"));
 
   /* Parse out section name */
   for (secname = args; !isspace (*args); args++);
@@ -654,7 +659,7 @@ set_section_command (char *args, int from_tty)
     seclen = sizeof (secprint) - 1;
   strncpy (secprint, secname, seclen);
   secprint[seclen] = '\0';
-  error ("Section %s not found", secprint);
+  error (_("Section %s not found"), secprint);
 }
 
 /* If mourn is being called in all the right places, this could be say
@@ -694,7 +699,7 @@ Specify the filename of the executable file.";
   exec_ops.to_open = exec_open;
   exec_ops.to_close = exec_close;
   exec_ops.to_attach = find_default_attach;
-  exec_ops.to_xfer_memory = xfer_memory;
+  exec_ops.deprecated_xfer_memory = xfer_memory;
   exec_ops.to_files_info = exec_files_info;
   exec_ops.to_insert_breakpoint = ignore;
   exec_ops.to_remove_breakpoint = ignore;
@@ -738,7 +743,7 @@ This can be used if the exec file does not contain section addresses,\n\
 file itself are wrong.  Each section must be changed separately.  The\n\
 ``info files'' command lists all the sections and their addresses.");
 
-  add_show_from_set
+  deprecated_add_show_from_set
     (add_set_cmd ("write", class_support, var_boolean, (char *) &write_files,
                  "Set writing into executable and core files.",
                  &setlist),
@@ -750,5 +755,5 @@ file itself are wrong.  Each section must be changed separately.  The\n\
 static char *
 exec_make_note_section (bfd *obfd, int *note_size)
 {
-  error ("Can't create a corefile");
+  error (_("Can't create a corefile"));
 }
This page took 0.029342 seconds and 4 git commands to generate.