summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2010-02-16 20:48:52 +0000
committerDaniel Jacobowitz <drow@false.org>2010-02-16 20:48:52 +0000
commit14d1346bd3b6fc51d1144d2060ee1e6822341c5d (patch)
tree8dac29582456bb46208cb2bcc49414347084acad
parente76ab67fec44e588643739513ab99ad5c4449506 (diff)
downloadbinutils-gdb-14d1346bd3b6fc51d1144d2060ee1e6822341c5d.tar.gz
gdb/
* gcore.c (do_bfd_delete_cleanup): New function. (gcore_command): Use it. Discard the cleanup after success. (gcore_copy_callback): Delete dead code.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/gcore.c22
2 files changed, 20 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b2694cefde0..564983b2a57 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2010-02-16 Daniel Jacobowitz <dan@codesourcery.com>
+ * gcore.c (do_bfd_delete_cleanup): New function.
+ (gcore_command): Use it. Discard the cleanup after success.
+ (gcore_copy_callback): Delete dead code.
+
+2010-02-16 Daniel Jacobowitz <dan@codesourcery.com>
+
* symfile.c (addr_info_make_relative): Always use
find_lowest_section.
diff --git a/gdb/gcore.c b/gdb/gcore.c
index dd945905a6d..d8e7ed44f16 100644
--- a/gdb/gcore.c
+++ b/gdb/gcore.c
@@ -102,6 +102,16 @@ write_gcore_file (bfd *obfd)
}
}
+static void
+do_bfd_delete_cleanup (void *arg)
+{
+ bfd *obfd = arg;
+ const char *filename = obfd->filename;
+
+ bfd_close (arg);
+ unlink (filename);
+}
+
/* gcore_command -- implements the 'gcore' command.
Generate a core file from the inferior process. */
@@ -132,8 +142,8 @@ gcore_command (char *args, int from_tty)
/* Open the output file. */
obfd = create_gcore_bfd (corefilename);
- /* Need a cleanup that will close the file (FIXME: delete it?). */
- old_chain = make_cleanup_bfd_close (obfd);
+ /* Need a cleanup that will close and delete the file. */
+ old_chain = make_cleanup (do_bfd_delete_cleanup, obfd);
/* Call worker function. */
write_gcore_file (obfd);
@@ -141,9 +151,8 @@ gcore_command (char *args, int from_tty)
/* Succeeded. */
fprintf_filtered (gdb_stdout, "Saved corefile %s\n", corefilename);
- /* Clean-ups will close the output file and free malloc memory. */
- do_cleanups (old_chain);
- return;
+ discard_cleanups (old_chain);
+ bfd_close (obfd);
}
static unsigned long
@@ -521,9 +530,6 @@ gcore_copy_callback (bfd *obfd, asection *osec, void *ignored)
size = min (total_size, MAX_COPY_BYTES);
memhunk = xmalloc (size);
- /* ??? This is crap since xmalloc should never return NULL. */
- if (memhunk == NULL)
- error (_("Not enough memory to create corefile."));
old_chain = make_cleanup (xfree, memhunk);
while (total_size > 0)