Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: gdb-patches@sourceware.org
Subject: Re: RFC: Fix an infinite loop placing sections in relocatable objects
Date: Mon, 20 Feb 2006 15:03:00 -0000	[thread overview]
Message-ID: <20060220150257.GA14155@nevyn.them.org> (raw)
In-Reply-To: <20060216152444.GA22371@nevyn.them.org>

On Thu, Feb 16, 2006 at 10:24:44AM -0500, Daniel Jacobowitz wrote:
> While trying to track down something completely different, I accidentally
> got GDB stuck in an infinite loop.  I'm not entirely sure what I was
> thinking when I wrote this, but I believe the attached patch is a correct
> fix:
>   - if we can't place at this address, we bump start_addr, so we should
>     restart the inner for loop.
>   - arg->lowest and align are both invariant in the function up to this
>     point, so there's no point resetting start_addr inside the loop and
>     clobbering the retry logic.
> 
> Tested x86_64-pc-linux-gnu, where I can no longer trigger an infinite loop
> here.  Any opinions?

I've checked in this version; thanks to both Jim and Andreas.


-- 
Daniel Jacobowitz
CodeSourcery

2006-02-20  Daniel Jacobowitz  <dan@codesourcery.com>

	* symfile.c (place_section): Correct retry logic.

Index: symfile.c
===================================================================
RCS file: /cvs/src/src/gdb/symfile.c,v
retrieving revision 1.167
diff -u -p -r1.167 symfile.c
--- symfile.c	7 Feb 2006 19:40:30 -0000	1.167
+++ symfile.c	20 Feb 2006 14:58:31 -0000
@@ -476,6 +476,7 @@ place_section (bfd *abfd, asection *sect
   struct place_section_arg *arg = obj;
   CORE_ADDR *offsets = arg->offsets->offsets, start_addr;
   int done;
+  ULONGEST align = ((ULONGEST) 1) << bfd_get_section_alignment (abfd, sect);
 
   /* We are only interested in loadable sections.  */
   if ((bfd_get_section_flags (abfd, sect) & SEC_LOAD) == 0)
@@ -486,11 +487,11 @@ place_section (bfd *abfd, asection *sect
     return;
 
   /* Otherwise, let's try to find a place for the section.  */
+  start_addr = (arg->lowest + align - 1) & -align;
+
   do {
     asection *cur_sec;
-    ULONGEST align = 1 << bfd_get_section_alignment (abfd, sect);
 
-    start_addr = (arg->lowest + align - 1) & -align;
     done = 1;
 
     for (cur_sec = abfd->sections; cur_sec != NULL; cur_sec = cur_sec->next)
@@ -524,7 +525,7 @@ place_section (bfd *abfd, asection *sect
 	    start_addr = offsets[indx] + bfd_get_section_size (cur_sec);
 	    start_addr = (start_addr + align - 1) & -align;
 	    done = 0;
-	    continue;
+	    break;
 	  }
 
 	/* Otherwise, we appear to be OK.  So far.  */


      parent reply	other threads:[~2006-02-20 15:03 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-02-16 15:24 Daniel Jacobowitz
2006-02-16 19:16 ` Jim Blandy
2006-02-16 22:04 ` Andreas Schwab
2006-02-16 22:17   ` Daniel Jacobowitz
2006-02-16 22:23     ` Jim Blandy
2006-02-16 22:24       ` Daniel Jacobowitz
2006-02-20 15:03 ` Daniel Jacobowitz [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060220150257.GA14155@nevyn.them.org \
    --to=drow@false.org \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox