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. */
prev 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