gdb/
* elfread.c (elf_symfile_read): Limit separate debug info additions to files with no separate debug info. * objfiles.c (add_separate_debug_objfile): Add gdb_assert calls. * symfile.c (read_symbols): Call find_separate_debug_file_in_section only for files with no separate debug info. gdb/testsuite/ * gdb.base/gnu-debugdata.exp): Create ${binfile}.debug, ${binfile}.mini_debuginfo-debuglink, add -k to xz, use now ${binfile}.mini_debuginfo-debuglink and ${binfile}.mini_debuginfo-debuglink.xz.
This commit is contained in:
parent
17f2157dcc
commit
8a92335bfc
6 changed files with 55 additions and 6 deletions
|
@ -1,3 +1,11 @@
|
|||
2013-02-01 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* elfread.c (elf_symfile_read): Limit separate debug info additions to
|
||||
files with no separate debug info.
|
||||
* objfiles.c (add_separate_debug_objfile): Add gdb_assert calls.
|
||||
* symfile.c (read_symbols): Call find_separate_debug_file_in_section
|
||||
only for files with no separate debug info.
|
||||
|
||||
2013-01-31 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* jit.c (jit_program_space_data): Rename from jit_inferior_data;
|
||||
|
|
|
@ -1431,8 +1431,18 @@ elf_symfile_read (struct objfile *objfile, int symfile_flags)
|
|||
/* If the file has its own symbol tables it has no separate debug
|
||||
info. `.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to
|
||||
SYMTABS/PSYMTABS. `.gnu_debuglink' may no longer be present with
|
||||
`.note.gnu.build-id'. */
|
||||
else if (!objfile_has_partial_symbols (objfile))
|
||||
`.note.gnu.build-id'.
|
||||
|
||||
.gnu_debugdata is !objfile_has_partial_symbols because it contains only
|
||||
.symtab, not .debug_* section. But if we already added .gnu_debugdata as
|
||||
an objfile via find_separate_debug_file_in_section there was no separate
|
||||
debug info available. Therefore do not attempt to search for another one,
|
||||
objfile->separate_debug_objfile->separate_debug_objfile GDB guarantees to
|
||||
be NULL and we would possibly violate it. */
|
||||
|
||||
else if (!objfile_has_partial_symbols (objfile)
|
||||
&& objfile->separate_debug_objfile == NULL
|
||||
&& objfile->separate_debug_objfile_backlink == NULL)
|
||||
{
|
||||
char *debugfile;
|
||||
|
||||
|
|
|
@ -476,6 +476,9 @@ add_separate_debug_objfile (struct objfile *objfile, struct objfile *parent)
|
|||
/* Must not be already in a list. */
|
||||
gdb_assert (objfile->separate_debug_objfile_backlink == NULL);
|
||||
gdb_assert (objfile->separate_debug_objfile_link == NULL);
|
||||
gdb_assert (objfile->separate_debug_objfile == NULL);
|
||||
gdb_assert (parent->separate_debug_objfile_backlink == NULL);
|
||||
gdb_assert (parent->separate_debug_objfile_link == NULL);
|
||||
|
||||
objfile->separate_debug_objfile_backlink = parent;
|
||||
objfile->separate_debug_objfile_link = parent->separate_debug_objfile;
|
||||
|
|
|
@ -823,7 +823,12 @@ static void
|
|||
read_symbols (struct objfile *objfile, int add_flags)
|
||||
{
|
||||
(*objfile->sf->sym_read) (objfile, add_flags);
|
||||
if (!objfile_has_partial_symbols (objfile))
|
||||
|
||||
/* find_separate_debug_file_in_section should be called only if there is
|
||||
single binary with no existing separate debug info file. */
|
||||
if (!objfile_has_partial_symbols (objfile)
|
||||
&& objfile->separate_debug_objfile == NULL
|
||||
&& objfile->separate_debug_objfile_backlink == NULL)
|
||||
{
|
||||
bfd *abfd = find_separate_debug_file_in_section (objfile);
|
||||
struct cleanup *cleanup = make_cleanup_bfd_unref (abfd);
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2013-02-01 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/gnu-debugdata.exp): Create ${binfile}.debug,
|
||||
${binfile}.mini_debuginfo-debuglink, add -k to xz, use now
|
||||
${binfile}.mini_debuginfo-debuglink and
|
||||
${binfile}.mini_debuginfo-debuglink.xz.
|
||||
|
||||
2013-02-01 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* gdb.dwarf2/method-ptr.exp: Use correct form for non-string
|
||||
|
|
|
@ -127,14 +127,30 @@ if {[run "strip" [transform strip] \
|
|||
return -1
|
||||
}
|
||||
|
||||
# Separate full debug info into ${binfile}.debug.
|
||||
remote_file host delete ${binfile}.debug
|
||||
if {[run "copydebug" [transform objcopy] \
|
||||
"--only-keep-debug ${binfile} ${binfile}.debug"]} {
|
||||
return -1
|
||||
}
|
||||
|
||||
# Add the .gnu_debuglink section to the .gnu_debugdata file.
|
||||
# .gnu_debuglink is normally not present in the .gnu_debugdata section but in
|
||||
# some files there may be PT_NOTE with NT_GNU_BUILD_ID and GDB could look up
|
||||
# the .debug file from it.
|
||||
if {[run "addlink" [transform objcopy] \
|
||||
"--add-gnu-debuglink=${binfile}.debug ${binfile}.mini_debuginfo ${binfile}.mini_debuginfo-debuglink"]} {
|
||||
return -1
|
||||
}
|
||||
|
||||
# Inject the compressed data into the .gnu_debugdata section of the
|
||||
# original binary.
|
||||
remote_file host delete ${binfile}.mini_debuginfo.xz
|
||||
if {[run "xz" "xz" "${binfile}.mini_debuginfo"]} {
|
||||
remote_file host delete ${binfile}.mini_debuginfo-debuglink.xz
|
||||
if {[run "xz" "xz" "-k ${binfile}.mini_debuginfo-debuglink"]} {
|
||||
return -1
|
||||
}
|
||||
remote_file host delete ${binfile}.test
|
||||
if {[run "objcopy 2" [transform objcopy] "--add-section .gnu_debugdata=${binfile}.mini_debuginfo.xz ${binfile}.strip ${binfile}.test"]} {
|
||||
if {[run "objcopy 2" [transform objcopy] "--add-section .gnu_debugdata=${binfile}.mini_debuginfo-debuglink.xz ${binfile}.strip ${binfile}.test"]} {
|
||||
return -1
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue