summaryrefslogtreecommitdiff
path: root/gdb/objfiles.c
diff options
context:
space:
mode:
authorJim Blandy <jimb@codesourcery.com>2003-01-23 23:03:32 +0000
committerJim Blandy <jimb@codesourcery.com>2003-01-23 23:03:32 +0000
commitac8c6e56b9bb1503e26b770080785ba36e3f5dd4 (patch)
tree86b3b4c03d56cd131cd3d74d2fa84df872367570 /gdb/objfiles.c
parent3285c653d253c77c1f874c466c5d3692cfcc8eff (diff)
downloadgdb-ac8c6e56b9bb1503e26b770080785ba36e3f5dd4.tar.gz
gdb/ChangeLog:
2003-01-23 Alexander Larsson <alexl@redhat.com> Jim Blandy <jimb@redhat.com> Add support for executables whose debug info has been separated out into a separate file, leaving only a link behind. * objfiles.h (struct objfile): New fields: separate_debug_objfile and separate_debug_objfile_backlink. (put_objfile_before): New declaration. * symfile.c: #include "filenames.h". (symbol_file_add_with_addrs_or_offsets): If this objfile has its debug info in a separate file, read that, too. Save the addrs argument, so we can use it again to read the separated debug info; syms_from_objfile modifies the table we pass it. (reread_symbols): After re-reading an objfile, call reread_separate_symbols to refresh its separate debug info objfile, if it has one. (reread_separate_symbols, find_separate_debug_file, get_debug_link_info, separate_debug_file_exists): New functions. (debug_file_directory): New global var. (_initialize_symfile): Initialize debug_file_directory, and provide the new `set debug-file-directory' command to let the user change it. * objfiles.c (free_objfile): If this objfile has its debug info in a separate objfile, free that one too. If this is itself a separate debug info objfile, clear our parent's backlink. (put_objfile_before): New function. * utils.c (gnu_debuglink_crc32): New function. * defs.h (gnu_debuglink_crc32): New declaration. * Makefile.in (symfile.o): Note dependency on "filenames.h". * configure.in: Handle --with-separate-debug-dir config option. * acinclude.m4 (AC_DEFINE_DIR): New macro. * acconfig.h (DEBUGDIR): New macro. * configure, aclocal.m4, config.in: Regenerated. gdb/doc/ChangeLog: 2003-01-23 Jim Blandy <jimb@redhat.com> * gdb.texinfo (Separate Debug Files): New section.
Diffstat (limited to 'gdb/objfiles.c')
-rw-r--r--gdb/objfiles.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index ae1613d951a..d62b28f4547 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -333,6 +333,30 @@ allocate_objfile (bfd *abfd, int flags)
return (objfile);
}
+/* Put one object file before a specified on in the global list.
+ This can be used to make sure an object file is destroyed before
+ another when using ALL_OBJFILES_SAFE to free all objfiles. */
+void
+put_objfile_before (struct objfile *objfile, struct objfile *before_this)
+{
+ struct objfile **objp;
+
+ unlink_objfile (objfile);
+
+ for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
+ {
+ if (*objp == before_this)
+ {
+ objfile->next = *objp;
+ *objp = objfile;
+ return;
+ }
+ }
+
+ internal_error (__FILE__, __LINE__,
+ "put_objfile_before: before objfile not in list");
+}
+
/* Put OBJFILE at the front of the list. */
void
@@ -405,6 +429,18 @@ unlink_objfile (struct objfile *objfile)
void
free_objfile (struct objfile *objfile)
{
+ if (objfile->separate_debug_objfile)
+ {
+ free_objfile (objfile->separate_debug_objfile);
+ }
+
+ if (objfile->separate_debug_objfile_backlink)
+ {
+ /* We freed the separate debug file, make sure the base objfile
+ doesn't reference it. */
+ objfile->separate_debug_objfile_backlink->separate_debug_objfile = NULL;
+ }
+
/* First do any symbol file specific actions required when we are
finished with a particular symbol file. Note that if the objfile
is using reusable symbol information (via mmalloc) then each of