diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 9 | ||||
-rw-r--r-- | gas/config/tc-hppa.c | 8 | ||||
-rw-r--r-- | gas/config/tc-hppa.h | 4 |
3 files changed, 20 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 486f9b2fe1..9494d8870e 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 c78d913255..dcaae9bdad 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 f8f9001f66..5a54f161a8 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. */ |