aboutsummaryrefslogtreecommitdiff
path: root/bfd/linker.c
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2009-07-31 02:25:56 +0000
committerHans-Peter Nilsson <hp@axis.com>2009-07-31 02:25:56 +0000
commit080a1b9fb589cccd3ec63e91e871ef832c67abfd (patch)
tree82f8a62f94365675038b068951d0970fcda10880 /bfd/linker.c
parent463bde6807db91a0485a41ab50535f062dd1574a (diff)
downloadfsf-binutils-gdb-080a1b9fb589cccd3ec63e91e871ef832c67abfd.zip
fsf-binutils-gdb-080a1b9fb589cccd3ec63e91e871ef832c67abfd.tar.gz
fsf-binutils-gdb-080a1b9fb589cccd3ec63e91e871ef832c67abfd.tar.bz2
* linker.c (fix_syms): Consider SEC_LOAD when choosing section.
Diffstat (limited to 'bfd/linker.c')
-rw-r--r--bfd/linker.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/bfd/linker.c b/bfd/linker.c
index 66ec2fa..1c22beb 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -3149,10 +3149,16 @@ fix_syms (struct bfd_link_hash_entry *h, void *data)
else if (op == NULL)
op = op1;
else if (((op1->flags ^ op->flags)
- & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0)
+ & (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_LOAD)) != 0)
{
if (((op->flags ^ s->flags)
- & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0)
+ & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0
+ /* We prefer to choose a loaded section. Section S
+ doesn't have SEC_LOAD set (it being excluded, that
+ part of the flag processing didn't happen) so we
+ can't compare that flag to those of OP and OP1. */
+ || ((op1->flags & SEC_LOAD) != 0
+ && (op->flags & SEC_LOAD) == 0))
op = op1;
}
else if (((op1->flags ^ op->flags) & SEC_READONLY) != 0)