diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2010-12-02 13:25:13 +0000 |
---|---|---|
committer | Richard Sandiford <rdsandiford@googlemail.com> | 2010-12-02 13:25:13 +0000 |
commit | c969da647374bec1548589cd47406e2a12a7800c (patch) | |
tree | 70576c6e17cf11e39b7eb45aac6bf109929e911e /gas/symbols.c | |
parent | 0c98115d15fbd16d6808a5a7718d748072c00dd7 (diff) | |
download | binutils-gdb-c969da647374bec1548589cd47406e2a12a7800c.tar.gz |
gas/
* symbols.c (S_FORCE_RELOC): Return true for indirect functions
even if !strict.
* expr.c (operand): Don't convert absolute symbols to constants
if S_FORCE_RELOC is true.
(expr): Only reduce subtractions between different symbols if
S_FORCE_RELOC is false for both of them.
* write.c (fixup_segment): Don't remove symbols if S_FORCE_RELOC
is true for them, regardless of their segment.
gas/testsuite/
* gas/i386/ifunc-2.s, gas/i386/ifunc-2.l: New test.
* gas/i386/ifunc-3.s, gas/i386/ifunc-3.d: Likeise.
* gas/i386/i386.exp: Run them.
Diffstat (limited to 'gas/symbols.c')
-rw-r--r-- | gas/symbols.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gas/symbols.c b/gas/symbols.c index 5fae5471b14..4e4ad775b3b 100644 --- a/gas/symbols.c +++ b/gas/symbols.c @@ -2065,9 +2065,9 @@ S_FORCE_RELOC (symbolS *s, int strict) return ((strict && ((s->bsym->flags & BSF_WEAK) != 0 - || (s->bsym->flags & BSF_GNU_INDIRECT_FUNCTION) != 0 || (EXTERN_FORCE_RELOC && (s->bsym->flags & BSF_GLOBAL) != 0))) + || (s->bsym->flags & BSF_GNU_INDIRECT_FUNCTION) != 0 || s->bsym->section == undefined_section || bfd_is_com_section (s->bsym->section)); } |