PR ld/10269
authorAlan Modra <amodra@gmail.com>
Wed, 29 Jul 2009 06:22:13 +0000 (06:22 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 29 Jul 2009 06:22:13 +0000 (06:22 +0000)
* symbols.c (S_FORCE_RELOC): True for BSF_GNU_INDIRECT_FUNCTION.
* config/tc-i386.c: Revert 2009-06-13 change.
* config/tc-i386.h: Likewise.

gas/ChangeLog
gas/config/tc-i386.c
gas/config/tc-i386.h
gas/symbols.c

index 30be5a544fdcfaa6cd5a47fec9d40a88bedd05db..3f45e7d543d8721ac734655c1c33d328054f88af 100644 (file)
@@ -1,3 +1,10 @@
+2009-07-29  Alan Modra  <amodra@bigpond.net.au>
+
+       PR ld/10269
+       * symbols.c (S_FORCE_RELOC): True for BSF_GNU_INDIRECT_FUNCTION.
+       * config/tc-i386.c: Revert 2009-06-13 change.
+       * config/tc-i386.h: Likewise.
+
 2009-07-28  Jan Beulich  <jbeulich@novell.com>
 
        * expr.c (op_rank): Specify size. Remove O_md* initializers.
index c90cadca4c5bdf916c382a29105e05b8eff66dc3..4109dd9e02c5a80a57ca5d7aed2701efa098463b 100644 (file)
@@ -2566,10 +2566,6 @@ tc_i386_fix_adjustable (fixS *fixP ATTRIBUTE_UNUSED)
       || fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT
       || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
     return 0;
-
-  if (fixP->fx_addsy != NULL
-      && symbol_get_bfdsym (fixP->fx_addsy)->flags & BSF_GNU_INDIRECT_FUNCTION)
-    return 0;
 #endif
   return 1;
 }
@@ -7368,7 +7364,7 @@ md_apply_fix (fixP, valP, seg)
          if ((sym_seg == seg
               || (symbol_section_p (fixP->fx_addsy)
                   && sym_seg != absolute_section))
-             && !TC_FORCE_RELOCATION (fixP))
+             && !generic_force_reloc (fixP))
            {
              /* Yes, we add the values in twice.  This is because
                 bfd_install_relocation subtracts them out again.  I think
index 16665633165af0f9f4dd7a0afe82a98d65e811aa..b51a9f480e8092c922506fc4375ba77444aa9ecd 100644 (file)
@@ -143,12 +143,6 @@ extern int tc_i386_fix_adjustable (struct fix *);
   (OUTPUT_FLAVOR == bfd_target_elf_flavour)
 #endif
 
-/* BSF_GNU_INDIRECT_FUNCTION symbols always need relocatoon.  */
-#define TC_FORCE_RELOCATION(FIX)                       \
-  ((symbol_get_bfdsym ((FIX)->fx_addsy)->flags         \
-    & BSF_GNU_INDIRECT_FUNCTION)                       \
-   || generic_force_reloc (FIX))
-
 /* This expression evaluates to true if the relocation is for a local
    object for which we still want to do the relocation at runtime.
    False if we are willing to perform this relocation while building
index 761cebfbf094cfb5f26a63234bcc555c6b2caab8..c72946b8505b2974085b719de366971a61778048 100644 (file)
@@ -1,6 +1,6 @@
 /* symbols.c -symbol table-
    Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
@@ -2053,6 +2053,7 @@ 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->section == undefined_section