include/opcode/
[deliverable/binutils-gdb.git] / gas / config / tc-mep.c
index 4e3c874c095c9b3e21e17bbac997e4c1a865097d..377e4c3f36ed875e0846c9935dbeae72952c54d3 100644 (file)
@@ -1,5 +1,5 @@
 /* tc-mep.c -- Assembler for the Toshiba Media Processor.
-   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007
+   Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2012
    Free Software Foundation. Inc.
 
    This file is part of GAS, the GNU Assembler.
@@ -19,8 +19,8 @@
    the Free Software Foundation, 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.  */
 
-#include <stdio.h>
 #include "as.h"
+#include <stdio.h>
 #include "dwarf2dbg.h"
 #include "subsegs.h"
 #include "symcat.h"
@@ -80,8 +80,6 @@ static void mep_noregerr (int);
 const pseudo_typeS md_pseudo_table[] =
 {
   { "word",    cons,                           4 },
-  { "file",    (void (*) (int)) dwarf2_directive_file,         0 },
-  { "loc",     dwarf2_directive_loc,           0 },
   { "vliw",    mep_switch_to_vliw_mode,        0 },
   { "core",    mep_switch_to_core_mode,        0 },
   { "vtext",   mep_s_vtext,                    0 },
@@ -1529,6 +1527,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 +1763,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,11 +1809,17 @@ 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.  */
     return 0;
 
+  /* If we've got other reasons for emitting this relocation, let the
+     linker handle pc-rel also.  */
+  if (mep_force_relocation (fixP))
+    return 0;
+
   /* Return the address of the opcode - cgen adjusts for opcode size
      itself, to be consistent with the disassembler, which must do
      so.  */
@@ -2013,6 +2019,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
@@ -2077,8 +2086,8 @@ mep_elf_section_letter (int letter, char **ptrmsg)
   if (letter == 'v')
     return SHF_MEP_VLIW;
 
-  *ptrmsg = _("Bad .section directive: want a,v,w,x,M,S in string");
-  return 0;
+  *ptrmsg = _("bad .section directive: want a,v,w,x,M,S in string");
+  return -1;
 }
 
 flagword
This page took 0.024714 seconds and 4 git commands to generate.