Avoid infinite recursion in get_msymbol_address

Sometimes, get_msymbol_address can cause infinite recursion, leading
to a crash.  This was reported previously here:

https://sourceware.org/pipermail/gdb-patches/2019-November/162154.html

A user on irc reported this as well, and with his help and the help of
a friend of his, we found that the problem occurred because, when
reloading a separate debug objfile, the objfile would lose the
OBJF_MAINLINE flag.  This would cause some symbols from this separate
debug objfile to be marked "maybe_copied" -- but then
get_msymbol_address could find the same symbol and fail as reported.

This patch fixes the bug by preserving OBJF_MAINLINE.

No test case, unfortunately, because I could not successfully make
one.

gdb/ChangeLog
2020-04-10  Tom Tromey  <tromey@adacore.com>

	* symfile.c (symbol_file_add_separate): Preserve OBJF_MAINLINE.
This commit is contained in:
Tom Tromey 2020-04-10 07:18:49 -06:00
parent 3e65b3e9af
commit 0c4311ab90
2 changed files with 5 additions and 1 deletions

View File

@ -1,3 +1,7 @@
2020-04-10 Tom Tromey <tromey@adacore.com>
* symfile.c (symbol_file_add_separate): Preserve OBJF_MAINLINE.
2020-04-10 Tom Tromey <tromey@adacore.com>
* symtab.c (get_symbol_address, get_msymbol_address): Skip

View File

@ -1163,7 +1163,7 @@ symbol_file_add_separate (bfd *bfd, const char *name,
symbol_file_add_with_addrs
(bfd, name, symfile_flags, &sap,
objfile->flags & (OBJF_REORDERED | OBJF_SHARED | OBJF_READNOW
| OBJF_USERLOADED),
| OBJF_USERLOADED | OBJF_MAINLINE),
objfile);
}