From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2126) id 770D6385DC03; Fri, 10 Apr 2020 13:22:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 770D6385DC03 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Tom Tromey To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Avoid infinite recursion in get_msymbol_address X-Act-Checkin: binutils-gdb X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: 3e65b3e9aff265b8db711f742ea527b4c2e36910 X-Git-Newrev: 0c4311ab90e46d2ae0cc29160641b92220d10299 Message-Id: <20200410132225.770D6385DC03@sourceware.org> Date: Fri, 10 Apr 2020 13:22:25 +0000 (GMT) X-BeenThere: gdb-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Apr 2020 13:22:25 -0000 https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0c4311ab90e46d2ae0cc29160641b92220d10299 commit 0c4311ab90e46d2ae0cc29160641b92220d10299 Author: Tom Tromey Date: Fri Apr 10 07:18:49 2020 -0600 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 * symfile.c (symbol_file_add_separate): Preserve OBJF_MAINLINE. Diff: --- gdb/ChangeLog | 4 ++++ gdb/symfile.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index fa05f93a5e5..661a41467bb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2020-04-10 Tom Tromey + + * symfile.c (symbol_file_add_separate): Preserve OBJF_MAINLINE. + 2020-04-10 Tom Tromey * symtab.c (get_symbol_address, get_msymbol_address): Skip diff --git a/gdb/symfile.c b/gdb/symfile.c index bd27a1fefef..61053298a89 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -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); }