aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf32-hppa.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2003-02-08 08:18:41 +0000
committerAlan Modra <amodra@gmail.com>2003-02-08 08:18:41 +0000
commit00b28bb047a8304ba4f00433072b8f1bd8f35e60 (patch)
tree51c9d6becacbbf224b2842ccd7c6ba897024d5c3 /bfd/elf32-hppa.c
parentacc990f282141b0857da1b22b0fa4b0f7c06c4f5 (diff)
downloadfsf-binutils-gdb-00b28bb047a8304ba4f00433072b8f1bd8f35e60.zip
fsf-binutils-gdb-00b28bb047a8304ba4f00433072b8f1bd8f35e60.tar.gz
fsf-binutils-gdb-00b28bb047a8304ba4f00433072b8f1bd8f35e60.tar.bz2
* elf32-hppa.c (group_sections): Don't share a stub section if
stubs are for a large section.
Diffstat (limited to 'bfd/elf32-hppa.c')
-rw-r--r--bfd/elf32-hppa.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c
index 69ead0d..80e8b18 100644
--- a/bfd/elf32-hppa.c
+++ b/bfd/elf32-hppa.c
@@ -2686,12 +2686,15 @@ group_sections (htab, stub_group_size, stubs_always_before_branch)
asection *curr;
asection *prev;
bfd_size_type total;
+ bfd_boolean big_sec;
curr = tail;
if (tail->_cooked_size)
total = tail->_cooked_size;
else
total = tail->_raw_size;
+ big_sec = total >= stub_group_size;
+
while ((prev = PREV_SEC (curr)) != NULL
&& ((total += curr->output_offset - prev->output_offset)
< stub_group_size))
@@ -2719,8 +2722,11 @@ group_sections (htab, stub_group_size, stubs_always_before_branch)
while (tail != curr && (tail = prev) != NULL);
/* But wait, there's more! Input sections up to 240000
- bytes before the stub section can be handled by it too. */
- if (!stubs_always_before_branch)
+ bytes before the stub section can be handled by it too.
+ Don't do this if we have a really large section after the
+ stubs, as adding more stubs increases the chance that
+ branches may not reach into the stub section. */
+ if (!stubs_always_before_branch && !big_sec)
{
total = 0;
while (prev != NULL