Re: [repost] Re: RFC: support debug info in separate files

Jim Blandy
2003-01-23T23:04:10Z

I've committed this patch, after making the changes to the
documentation that Eli suggested. I'll take care of the maint.exp
regressions in a bit.

Jim Blandy <jimb@redhat.com> writes:

> [My previous post omitted the patch to acconfig.h.]
>
> Here's a new shot at the separate debug patch. It's updated to apply
> to the current branch, and I believe I've addressed the comments folks
> have made:
> - The documentation has been completely rewritten, and provides much
> more detail. It includes all the information needed to implement
> `strip -f' in the GNU binutils, for example. It is better indexed.
> - The name ".debug" can be overridden by xm- files for systems that
> can't handle names like that.
> - The CRC function has a more descriptive name.
>
> Using separate debug info does introduce three new test suite
> failures:
> FAIL: gdb.base/maint.exp: maint print objfiles: psymtabs
> FAIL: gdb.base/maint.exp: maint print objfiles: symtabs
> FAIL: gdb.base/maint.exp: maint print msymbols
>
> These do not reflect GDB misbehavior: the objfile in question has no
> psymtabs, symtabs, or msymbols, but the test suite assumes they
> should. I think 'maint print objfiles' should print something
> indicating when an objfile has an associated separated debug file, and
> that the test should recognize and cope with this, but it seems like
> that should be a separate patch.
>
> Before you can apply this patch, you'll need to apply the following:
>
> Re: RFC: allow syms_from_objfile to take a section offset table directly
> http://sources.redhat.com/ml/gdb-patches/2002-12/msg00627.html
>
> RFC: Allow symbol_file_add to take section_offsets table
> http://sources.redhat.com/ml/gdb-patches/2002-11/msg00634.html
>
> gdb/ChangeLog:
> 2002-12-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:
> 2002-12-23 Jim Blandy <jimb@redhat.com>
>
> * gdb.texinfo (Separate Debug Files): New section.