aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog9
-rw-r--r--gas/config/tc-hppa.c8
-rw-r--r--gas/config/tc-hppa.h4
3 files changed, 20 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 486f9b2..9494d88 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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.
diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c
index c78d913..dcaae9b 100644
--- a/gas/config/tc-hppa.c
+++ b/gas/config/tc-hppa.c
@@ -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)))
diff --git a/gas/config/tc-hppa.h b/gas/config/tc-hppa.h
index f8f9001..5a54f16 100644
--- a/gas/config/tc-hppa.h
+++ b/gas/config/tc-hppa.h
@@ -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. */