* config/tc-m68k.c (relaxable_symbol): Only treat external symbols

as relaxable if embedded system, make weak syms non-relaxable.
	Move definition..
	(tc_m68k_fix_adjustable): ..so it can be used here.
	(md_apply_fix_2): Sign extend without conditional.
This commit is contained in:
Alan Modra 2001-05-22 09:01:55 +00:00
parent 507c8a1a57
commit c801568a3a
2 changed files with 23 additions and 27 deletions

View file

@ -1,5 +1,11 @@
2001-05-22 Alan Modra <amodra@one.net.au>
* config/tc-m68k.c (relaxable_symbol): Only treat external symbols
as relaxable if embedded system, make weak syms non-relaxable.
Move definition..
(tc_m68k_fix_adjustable): ..so it can be used here.
(md_apply_fix_2): Sign extend without conditional.
* config/tc-v850.c: Update copyright.
2001-05-16 Jeff Johnston <jjohnstn@redhat.com>

View file

@ -714,6 +714,19 @@ tc_coff_fix2rtype (fixP)
#ifdef OBJ_ELF
/* Return zero if the reference to SYMBOL from within the same segment may
be relaxed. */
/* On an ELF system, we can't relax an externally visible symbol,
because it may be overridden by a shared library. However, if
TARGET_OS is "elf", then we presume that we are assembling for an
embedded system, in which case we don't have to worry about shared
libraries, and we can relax any external sym. */
#define relaxable_symbol(symbol) \
(!((S_IS_EXTERNAL (symbol) && strcmp (TARGET_OS, "elf") != 0) \
|| S_IS_WEAK (symbol)))
/* Compute the relocation code for a fixup of SIZE bytes, using pc
relative relocation if PCREL is non-zero. PIC says whether a special
pic relocation was requested. */
@ -832,8 +845,7 @@ tc_m68k_fix_adjustable (fixP)
fixS *fixP;
{
/* Prevent all adjustments to global symbols. */
if (S_IS_EXTERNAL (fixP->fx_addsy)
|| S_IS_WEAK (fixP->fx_addsy))
if (! relaxable_symbol (fixP->fx_addsy))
return 0;
/* adjust_reloc_syms doesn't know about the GOT */
@ -866,6 +878,8 @@ tc_m68k_fix_adjustable (fixP)
#define get_reloc_code(SIZE,PCREL,OTHER) NO_RELOC
#define relaxable_symbol(symbol) 1
#endif /* OBJ_ELF */
#ifdef BFD_ASSEMBLER
@ -983,27 +997,6 @@ tc_gen_reloc (section, fixp)
#endif /* BFD_ASSEMBLER */
/* Return zero if the reference to SYMBOL from within the same segment may
be relaxed. */
#ifdef OBJ_ELF
/* On an ELF system, we can't relax an externally visible symbol,
because it may be overridden by a shared library. However, if
TARGET_OS is "elf", then we presume that we are assembling for an
embedded system, in which case we don't have to worry about shared
libraries, and we can relax anything. */
#define relaxable_symbol(symbol) \
(strcmp (TARGET_OS, "elf") == 0 \
|| (! S_IS_EXTERNAL (symbol) \
&& ! S_IS_WEAK (symbol)))
#else
#define relaxable_symbol(symbol) 1
#endif
/* Handle of the OPCODE hash table. NULL means any use before
m68k_ip_begin() will crash. */
static struct hash_control *op_hash;
@ -4226,10 +4219,7 @@ md_apply_fix_2 (fixP, val)
buf += fixP->fx_where;
/* end ibm compiler workaround */
if (val & 0x80000000)
val |= ~(addressT)0x7fffffff;
else
val &= 0x7fffffff;
val = ((val & 0xffffffff) ^ 0x80000000) - 0x80000000;
#ifdef OBJ_ELF
if (fixP->fx_addsy)