* config/tc-mep.c (md_estimate_size_before_relax): Handle weak
authorDJ Delorie <dj@redhat.com>
Wed, 12 Aug 2009 03:40:48 +0000 (03:40 +0000)
committerDJ Delorie <dj@redhat.com>
Wed, 12 Aug 2009 03:40:48 +0000 (03:40 +0000)
symbols correctly.
(md_convert_frag): Likewise.
(md_pcrel_from_section): Likewise.
(mep_force_relocation): Likewise.

gas/ChangeLog
gas/config/tc-mep.c

index bef730cef4ee0bec6161d36f5cd537c2f428d3f9..345a9e8db4af13b333580ede9a391bbdd658d3b2 100644 (file)
@@ -1,3 +1,11 @@
+2009-08-11  DJ Delorie  <dj@redhat.com>
+
+       * 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  <bernd.schmidt@analog.com>
 
        * config/bfin-parse.y (gen_multi_instr_1): New function.
index 4e3c874c095c9b3e21e17bbac997e4c1a865097d..511d9686599b7a9a4e83292070701a60c5e1a833 100644 (file)
@@ -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