aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2010-05-04 16:21:07 +0000
committerNick Clifton <nickc@redhat.com>2010-05-04 16:21:07 +0000
commit1fc5d88e4ba59db7a934cb63503a78a8655c9e53 (patch)
treef3e2ef9da1eb52fb1aacc3893c67bdbb04fb3547
parent63b4f126d12867bff0f4e8dd37e4c11129f1ba87 (diff)
downloadgdb-1fc5d88e4ba59db7a934cb63503a78a8655c9e53.zip
gdb-1fc5d88e4ba59db7a934cb63503a78a8655c9e53.tar.gz
gdb-1fc5d88e4ba59db7a934cb63503a78a8655c9e53.tar.bz2
* write.c (fixup_segment): Revert previous delta.
* config/tc-arm.h (TC_FORCE_RELOCATION_LOCAL): Also force the generation of relocations for fixups against weak symbols.
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-arm.h1
-rw-r--r--gas/write.c4
3 files changed, 8 insertions, 3 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index c2b3faa..d8bfcd0 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2010-05-04 Nick Clifton <nickc@redhat.com>
+
+ * write.c (fixup_segment): Revert previous delta.
+ * config/tc-arm.h (TC_FORCE_RELOCATION_LOCAL): Also force the
+ generation of relocations for fixups against weak symbols.
+
2010-04-29 Nathan Sidwell <nathan@codesourcery.com>
* write.c (fixup_segment): Do not assume we know the section a
diff --git a/gas/config/tc-arm.h b/gas/config/tc-arm.h
index dacb342..702e405 100644
--- a/gas/config/tc-arm.h
+++ b/gas/config/tc-arm.h
@@ -183,6 +183,7 @@ void arm_copy_symbol_attributes (symbolS *, symbolS *);
(!(FIX)->fx_pcrel \
|| (FIX)->fx_r_type == BFD_RELOC_ARM_GOT32 \
|| (FIX)->fx_r_type == BFD_RELOC_32 \
+ || ((FIX)->fx_addsy != NULL && S_IS_WEAK ((FIX)->fx_addsy)) \
|| TC_FORCE_RELOCATION (FIX))
/* Force output of R_ARM_REL32 relocations against thumb function symbols.
diff --git a/gas/write.c b/gas/write.c
index b50b0d4..a148b24 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -992,9 +992,7 @@ fixup_segment (fixS *fixP, segT this_segment)
if (fixP->fx_addsy)
{
- if (S_IS_WEAK (fixP->fx_addsy))
- ; // even if it is defined, it might be overridden later
- else if (add_symbol_segment == this_segment
+ if (add_symbol_segment == this_segment
&& !TC_FORCE_RELOCATION_LOCAL (fixP))
{
/* This fixup was made when the symbol's segment was