* config/tc-hppa.h (TC_FORCE_RELOCATION_SECTION): For ELF, allow
authorAlan Modra <amodra@gmail.com>
Mon, 18 Sep 2000 12:36:03 +0000 (12:36 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 18 Sep 2000 12:36:03 +0000 (12:36 +0000)
subtraction of two syms without emitting a relocation.
* config/tc-hppa.c (hppa_force_relocation): Force relocations for
global or weak symbols.

gas/ChangeLog
gas/config/tc-hppa.c
gas/config/tc-hppa.h

index 486f9b2fe1475478f92778950d82eb349f80a43f..9494d8870e2417a2a2b0b3244eb7a5f7e966edd6 100644 (file)
@@ -1,3 +1,12 @@
+2000-09-18  Alan Modra  <alan@linuxcare.com.au>
+
+       * config/tc-hppa.h (TC_FORCE_RELOCATION_SECTION): Allow
+       subtraction of two syms without emitting a relocation.
+
+       From  David Huggins-Daines  <dhd@linuxcare.com>
+       * config/tc-hppa.c (hppa_force_relocation): Force relocations for
+       global or weak symbols.
+
 2000-09-15  Kazu Hirata  <kazu@hxi.com>
 
        * config/tc-h8300.h: Fix formatting.
index c78d9132559a6b696e83f22738b0bf597d132eb3..dcaae9bdad285f6ad12d1e2455d6b765ec6517cf 100644 (file)
@@ -8416,9 +8416,15 @@ hppa_force_relocation (fixp)
     return 1;
 #endif
 
+  /* Ensure we emit a relocation for global symbols so that dynamic
+     linking works.  */
+  if (fixp->fx_addsy && (S_IS_EXTERNAL (fixp->fx_addsy)
+                        || S_IS_WEAK (fixp->fx_addsy)))
+    return 1;
+
   /* It is necessary to force PC-relative calls/jumps to have a relocation
      entry if they're going to need either a argument relocation or long
-     call stub.  FIXME.  Can't we need the same for absolute calls?  */
+     call stub.  */
   if (fixp->fx_pcrel && fixp->fx_addsy
       && (arg_reloc_stub_needed (symbol_arg_reloc_info (fixp->fx_addsy),
                                 hppa_fixp->fx_arg_reloc)))
index f8f9001f66123ddde4562fb0819c33446e051ef1..5a54f161a83a3a029c06c864436f1c2405963231 100644 (file)
@@ -145,6 +145,10 @@ int hppa_fix_adjustable PARAMS((struct fix *));
 #endif
 
 #ifdef OBJ_ELF
+/* It's OK to subtract two symbols in the same section without
+   emitting a relocation.  */
+#define TC_FORCE_RELOCATION_SECTION(FIXP, SEC) 0
+
 /* Handle .type psuedo.  Given a type string of `millicode', set the
    internal elf symbol type to STT_PARISC_MILLI, and return
    BSF_FUNCTION for the BFD symbol type.  */