public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Avoid infinite recursion in get_msymbol_address
@ 2020-04-03 16:58 Tom Tromey
  2020-04-03 16:58 ` [PATCH 1/2] Skip separate debug files when handling copy relocations Tom Tromey
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Tom Tromey @ 2020-04-03 16:58 UTC (permalink / raw)
  To: gdb-patches

Here's a couple of patches to fix up get_msymbol_address, including
fixing the infinite recursion bug.  Let me know what you think.

Tom



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/2] Skip separate debug files when handling copy relocations
  2020-04-03 16:58 [PATCH 0/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
@ 2020-04-03 16:58 ` Tom Tromey
  2020-04-03 16:58 ` [PATCH 2/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
  2020-04-10 13:18 ` [PATCH 0/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
  2 siblings, 0 replies; 6+ messages in thread
From: Tom Tromey @ 2020-04-03 16:58 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

get_symbol_address and get_msymbol_address call
lookup_minimal_symbol_linkage, which iterates over the separate debug
files of the objfile that is passed in.

This means that if these functions pass in a separate debug objfile,
then they are doing unnecessary work.

This patch avoids the extra work by skipping separate debug objfiles
in the loops.

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

	* symtab.c (get_symbol_address, get_msymbol_address): Skip
	separate debug files.
---
 gdb/ChangeLog | 5 +++++
 gdb/symtab.c  | 6 +++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/gdb/symtab.c b/gdb/symtab.c
index 5f07f3cc93e..13a5a108e6f 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -6438,6 +6438,9 @@ get_symbol_address (const struct symbol *sym)
 
   for (objfile *objfile : current_program_space->objfiles ())
     {
+      if (objfile->separate_debug_objfile_backlink != nullptr)
+	continue;
+
       bound_minimal_symbol minsym
 	= lookup_minimal_symbol_linkage (linkage_name, objfile);
       if (minsym.minsym != nullptr)
@@ -6458,7 +6461,8 @@ get_msymbol_address (struct objfile *objf, const struct minimal_symbol *minsym)
 
   for (objfile *objfile : current_program_space->objfiles ())
     {
-      if ((objfile->flags & OBJF_MAINLINE) != 0)
+      if (objfile->separate_debug_objfile_backlink == nullptr
+	  && (objfile->flags & OBJF_MAINLINE) != 0)
 	{
 	  bound_minimal_symbol found
 	    = lookup_minimal_symbol_linkage (linkage_name, objfile);
-- 
2.21.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 2/2] Avoid infinite recursion in get_msymbol_address
  2020-04-03 16:58 [PATCH 0/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
  2020-04-03 16:58 ` [PATCH 1/2] Skip separate debug files when handling copy relocations Tom Tromey
@ 2020-04-03 16:58 ` Tom Tromey
  2020-05-17 16:39   ` FYI: pushed/gdb-9.2: [PATCH 2/2] Avoid infinite recursion in get_msymbol_address") Joel Brobecker
  2020-04-10 13:18 ` [PATCH 0/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
  2 siblings, 1 reply; 6+ messages in thread
From: Tom Tromey @ 2020-04-03 16:58 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

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-03  Tom Tromey  <tromey@adacore.com>

	* symfile.c (symbol_file_add_separate): Preserve OBJF_MAINLINE.
---
 gdb/ChangeLog | 4 ++++
 gdb/symfile.c | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

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);
 }
 
-- 
2.21.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/2] Avoid infinite recursion in get_msymbol_address
  2020-04-03 16:58 [PATCH 0/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
  2020-04-03 16:58 ` [PATCH 1/2] Skip separate debug files when handling copy relocations Tom Tromey
  2020-04-03 16:58 ` [PATCH 2/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
@ 2020-04-10 13:18 ` Tom Tromey
  2020-04-10 14:46   ` Simon Marchi
  2 siblings, 1 reply; 6+ messages in thread
From: Tom Tromey @ 2020-04-10 13:18 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

>>>>> "Tom" == Tom Tromey <tromey@adacore.com> writes:

Tom> Here's a couple of patches to fix up get_msymbol_address, including
Tom> fixing the infinite recursion bug.

I'm checking this in now.

Tom

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/2] Avoid infinite recursion in get_msymbol_address
  2020-04-10 13:18 ` [PATCH 0/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
@ 2020-04-10 14:46   ` Simon Marchi
  0 siblings, 0 replies; 6+ messages in thread
From: Simon Marchi @ 2020-04-10 14:46 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches, Ali Tamur

On 2020-04-10 9:18 a.m., Tom Tromey wrote:
>>>>>> "Tom" == Tom Tromey <tromey@adacore.com> writes:
> 
> Tom> Here's a couple of patches to fix up get_msymbol_address, including
> Tom> fixing the infinite recursion bug.
> 
> I'm checking this in now.
> 
> Tom

A bit late, but let me ask Ali, does this patch fix the problem you were trying to
fix with this patch that you sent earlier?

https://sourceware.org/legacy-ml/gdb-patches/2019-11/msg00199.html

Simon

^ permalink raw reply	[flat|nested] 6+ messages in thread

* FYI: pushed/gdb-9.2: [PATCH 2/2] Avoid infinite recursion in get_msymbol_address")
  2020-04-03 16:58 ` [PATCH 2/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
@ 2020-05-17 16:39   ` Joel Brobecker
  0 siblings, 0 replies; 6+ messages in thread
From: Joel Brobecker @ 2020-05-17 16:39 UTC (permalink / raw)
  To: Tom Tromey, Christian Biesinger; +Cc: gdb-patches

Hello,

Just a quick message to let everyone know that I pushed this patch
to gdb-9-branch. For that, I created PR symtab/26003.

The patch was re-tested on x86_64-linux in gdb-9-branch prior to pushing.

On Fri, Apr 03, 2020 at 10:58:38AM -0600, Tom Tromey wrote:
> 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-03  Tom Tromey  <tromey@adacore.com>
> 
> 	* symfile.c (symbol_file_add_separate): Preserve OBJF_MAINLINE.
> ---
>  gdb/ChangeLog | 4 ++++
>  gdb/symfile.c | 2 +-
>  2 files changed, 5 insertions(+), 1 deletion(-)
> 
> 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);
>  }
>  
> -- 
> 2.21.1

-- 
Joel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-05-17 16:39 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-03 16:58 [PATCH 0/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
2020-04-03 16:58 ` [PATCH 1/2] Skip separate debug files when handling copy relocations Tom Tromey
2020-04-03 16:58 ` [PATCH 2/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
2020-05-17 16:39   ` FYI: pushed/gdb-9.2: [PATCH 2/2] Avoid infinite recursion in get_msymbol_address") Joel Brobecker
2020-04-10 13:18 ` [PATCH 0/2] Avoid infinite recursion in get_msymbol_address Tom Tromey
2020-04-10 14:46   ` Simon Marchi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).