* value.c (set_internalvar): Use value_free, not xfree.
[binutils-gdb.git] / gdb / exec.c
index ea57fcd67cdd3563924771c5f05e71d826fdb4ba..542af0e3ccf9f2bfaaaf72964138c192fa793beb 100644 (file)
@@ -1,7 +1,7 @@
 /* Work with executable files, for GDB. 
 
    Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
-   1998, 1999, 2000, 2001, 2002, 2003, 2007, 2008
+   1998, 1999, 2000, 2001, 2002, 2003, 2007, 2008, 2009
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -217,8 +217,11 @@ exec_file_attach (char *filename, int from_tty)
                            scratch_chan);
 
       if (!exec_bfd)
-       error (_("\"%s\": could not open as an executable file: %s"),
-              scratch_pathname, bfd_errmsg (bfd_get_error ()));
+       {
+         close (scratch_chan);
+         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
          same malloc'd string.  However exec_close() will attempt to free it
@@ -275,7 +278,7 @@ exec_file_attach (char *filename, int from_tty)
        (*deprecated_exec_file_display_hook) (filename);
     }
   bfd_cache_close_all ();
-  observer_notify_executable_changed (NULL);
+  observer_notify_executable_changed ();
 }
 
 /*  Process the first arg in ARGS as the new exec file.
@@ -302,10 +305,7 @@ exec_file_command (char *args, int from_tty)
       /* Scan through the args and pick up the first non option arg
          as the filename.  */
 
-      argv = buildargv (args);
-      if (argv == NULL)
-        nomem (0);
-
+      argv = gdb_buildargv (args);
       make_cleanup_freeargv (argv);
 
       for (; (*argv != NULL) && (**argv == '-'); argv++)
@@ -466,7 +466,7 @@ xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
   int res;
   struct section_table *p;
   CORE_ADDR nextsectaddr, memend;
-  asection *section = NULL;
+  struct obj_section *section = NULL;
 
   if (len <= 0)
     internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
@@ -483,8 +483,9 @@ xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
 
   for (p = target->to_sections; p < target->to_sections_end; p++)
     {
-      if (overlay_debugging && section && 
-         strcmp (section->name, p->the_bfd_section->name) != 0)
+      if (overlay_debugging && section
+         && strcmp (section->the_bfd_section->name,
+                    p->the_bfd_section->name) != 0)
        continue;               /* not the section we need */
       if (memaddr >= p->addr)
         {
@@ -543,10 +544,8 @@ print_section_info (struct target_ops *t, bfd *abfd)
   wrap_here ("        ");
   printf_filtered (_("file type %s.\n"), bfd_get_target (abfd));
   if (abfd == exec_bfd)
-    {
-      printf_filtered (_("\tEntry point: "));
-      fputs_filtered (paddress (bfd_get_start_address (abfd)), gdb_stdout);
-    }
+    printf_filtered (_("\tEntry point: %s\n"),
+                     paddress (bfd_get_start_address (abfd)));
   for (p = t->to_sections; p < t->to_sections_end; p++)
     {
       printf_filtered ("\t%s", hex_string_custom (p->addr, wid));
@@ -638,9 +637,8 @@ set_section_command (char *args, int from_tty)
   error (_("Section %s not found"), secprint);
 }
 
-/* If we can find a section in FILENAME with BFD index INDEX, and the
-   user has not assigned an address to it yet (via "set section"), adjust it
-   to ADDRESS.  */
+/* If we can find a section in FILENAME with BFD index INDEX, adjust
+   it to ADDRESS.  */
 
 void
 exec_set_section_address (const char *filename, int index, CORE_ADDR address)
@@ -650,11 +648,10 @@ exec_set_section_address (const char *filename, int index, CORE_ADDR address)
   for (p = exec_ops.to_sections; p < exec_ops.to_sections_end; p++)
     {
       if (strcmp (filename, p->bfd->filename) == 0
-         && index == p->the_bfd_section->index
-         && p->addr == 0)
+         && index == p->the_bfd_section->index)
        {
+         p->endaddr += address - p->addr;
          p->addr = address;
-         p->endaddr += address;
        }
     }
 }