From 85143216ca14d79b3e384a1bcb871890a8ac7659 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Wed, 12 Aug 2009 03:40:48 +0000 Subject: [PATCH] * config/tc-mep.c (md_estimate_size_before_relax): Handle weak symbols correctly. (md_convert_frag): Likewise. (md_pcrel_from_section): Likewise. (mep_force_relocation): Likewise. --- gas/ChangeLog | 8 ++++++++ gas/config/tc-mep.c | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/gas/ChangeLog b/gas/ChangeLog index bef730cef4e..345a9e8db4a 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2009-08-11 DJ Delorie + + * config/tc-mep.c (md_estimate_size_before_relax): Handle weak + symbols correctly. + (md_convert_frag): Likewise. + (md_pcrel_from_section): Likewise. + (mep_force_relocation): Likewise. + 2009-08-11 Bernd Schmidt * config/bfin-parse.y (gen_multi_instr_1): New function. diff --git a/gas/config/tc-mep.c b/gas/config/tc-mep.c index 4e3c874c095..511d9686599 100644 --- a/gas/config/tc-mep.c +++ b/gas/config/tc-mep.c @@ -1529,6 +1529,7 @@ md_estimate_size_before_relax (fragS * fragP, segT segment) fragP->fr_subtype = insn_to_subtype (fragP->fr_cgen.insn->base->num); if (S_GET_SEGMENT (fragP->fr_symbol) != segment + || S_IS_WEAK (fragP->fr_symbol) #ifdef MEP_IVC2_SUPPORTED || (mep_cop == EF_MEP_COP_IVC2 && bfd_get_section_flags (stdoutput, segment) & SEC_MEP_VLIW) @@ -1764,6 +1765,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, } if (S_GET_SEGMENT (fragP->fr_symbol) != seg + || S_IS_WEAK (fragP->fr_symbol) || operand == MEP_OPERAND_PCABS24A2) { gas_assert (fragP->fr_cgen.insn != 0); @@ -1809,6 +1811,7 @@ md_pcrel_from_section (fixS *fixP, segT sec) { if (fixP->fx_addsy != (symbolS *) NULL && (! S_IS_DEFINED (fixP->fx_addsy) + || S_IS_WEAK (fixP->fx_addsy) || S_GET_SEGMENT (fixP->fx_addsy) != sec)) /* The symbol is undefined (or is defined but not in this section). Let the linker figure it out. */ @@ -2013,6 +2016,9 @@ mep_force_relocation (fixS *fixp) || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY) return 1; + if (generic_force_reloc (fixp)) + return 1; + /* Allow branches to global symbols to be resolved at assembly time. This is consistent with way relaxable branches are handled, since branches to both global and local symbols are relaxed. It also -- 2.30.2