PR 10437
[deliverable/binutils-gdb.git] / gas / config / tc-m68k.h
index b3daf5e023c7a0e43c7d7cf622f7902ac27044c3..4149c9106452fdc89f0b52a3017e1f2a54e98e30 100644 (file)
@@ -1,12 +1,13 @@
 /* This file is tc-m68k.h
 /* This file is tc-m68k.h
-   Copyright (C) 1987, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 2000
+   Copyright 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+   1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    GAS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
+   the Free Software Foundation; either version 3, or (at your option)
    any later version.
 
    GAS is distributed in the hope that it will be useful,
    any later version.
 
    GAS is distributed in the hope that it will be useful,
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to the Free
-   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.  */
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 #define TC_M68K 1
 
 
 #define TC_M68K 1
 
-#ifdef ANSI_PROTOTYPES
 struct fix;
 struct fix;
-#endif
 
 #define TARGET_BYTES_BIG_ENDIAN 1
 
 
 #define TARGET_BYTES_BIG_ENDIAN 1
 
@@ -52,9 +51,6 @@ struct fix;
 #undef OBJ_COFF_OMIT_OPTIONAL_HEADER
 #endif
 
 #undef OBJ_COFF_OMIT_OPTIONAL_HEADER
 #endif
 
-#ifdef TE_LYNX
-#define TARGET_FORMAT          "coff-m68k-lynx"
-#endif
 #ifdef TE_AUX
 #define TARGET_FORMAT          "coff-m68k-aux"
 #endif
 #ifdef TE_AUX
 #define TARGET_FORMAT          "coff-m68k-aux"
 #endif
@@ -65,34 +61,11 @@ struct fix;
 #ifndef COFF_MAGIC
 #define COFF_MAGIC MC68MAGIC
 #endif
 #ifndef COFF_MAGIC
 #define COFF_MAGIC MC68MAGIC
 #endif
-#define BFD_ARCH bfd_arch_m68k /* for non-BFD_ASSEMBLER */
-#define TARGET_ARCH bfd_arch_m68k /* BFD_ASSEMBLER */
-#define COFF_FLAGS F_AR32W
-#define TC_COUNT_RELOC(x) ((x)->fx_addsy||(x)->fx_subsy)
-
-#define TC_COFF_FIX2RTYPE(fixP) tc_coff_fix2rtype(fixP)
-#define TC_COFF_SIZEMACHDEP(frag) tc_coff_sizemachdep(frag)
-extern int tc_coff_sizemachdep PARAMS ((struct frag *));
-#ifdef TE_SUN3
-/* This variable contains the value to write out at the beginning of
-   the a.out file.  The 2<<16 means that this is a 68020 file instead
-   of an old-style 68000 file */
-
-#define DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE (2<<16|OMAGIC);   /* Magic byte for file header */
-#endif /* TE_SUN3 */
-
-#ifndef AOUT_MACHTYPE
-#define AOUT_MACHTYPE m68k_aout_machtype
-extern int m68k_aout_machtype;
-#endif
+#define TARGET_ARCH bfd_arch_m68k
 
 #define tc_comment_chars m68k_comment_chars
 extern const char *m68k_comment_chars;
 
 
 #define tc_comment_chars m68k_comment_chars
 extern const char *m68k_comment_chars;
 
-#define tc_crawl_symbol_chain(a)       {;}     /* not used */
-#define tc_headers_hook(a)             {;}     /* not used */
-#define tc_aout_pre_write_hook(x)      {;}     /* not used */
-
 #define LISTING_WORD_SIZE 2    /* A word is 2 bytes */
 #define LISTING_LHS_WIDTH 2    /* One word on the first line */
 #define LISTING_LHS_WIDTH_SECOND 2     /* One word on the second line */
 #define LISTING_WORD_SIZE 2    /* A word is 2 bytes */
 #define LISTING_LHS_WIDTH 2    /* One word on the first line */
 #define LISTING_LHS_WIDTH_SECOND 2     /* One word on the second line */
@@ -105,10 +78,6 @@ extern const char *m68k_comment_chars;
 
 #if !defined (REGISTER_PREFIX_OPTIONAL)
 #if defined (M68KCOFF) || defined (OBJ_ELF)
 
 #if !defined (REGISTER_PREFIX_OPTIONAL)
 #if defined (M68KCOFF) || defined (OBJ_ELF)
-#ifndef BFD_ASSEMBLER
-#define LOCAL_LABEL(name) (name[0] == '.' \
-                          && (name[1] == 'L' || name[1] == '.'))
-#endif /* ! BFD_ASSEMBLER */
 #define REGISTER_PREFIX_OPTIONAL 0
 #else /* ! (COFF || ELF) */
 #define REGISTER_PREFIX_OPTIONAL 1
 #define REGISTER_PREFIX_OPTIONAL 0
 #else /* ! (COFF || ELF) */
 #define REGISTER_PREFIX_OPTIONAL 1
@@ -119,33 +88,26 @@ extern const char *m68k_comment_chars;
 /* On the Delta, `%' can occur within a label name, but not as the
    initial character.  */
 #define LEX_PCT LEX_NAME
 /* On the Delta, `%' can occur within a label name, but not as the
    initial character.  */
 #define LEX_PCT LEX_NAME
-/* On the Delta, `~' can start a label name, but is converted to '.'. */
+/* On the Delta, `~' can start a label name, but is converted to '.'.  */
 #define LEX_TILDE LEX_BEGIN_NAME
 #define tc_canonicalize_symbol_name(s) ((*(s) == '~' ? *(s) = '.' : '.'), s)
 /* On the Delta, dots are not required before pseudo-ops.  */
 #define NO_PSEUDO_DOT 1
 #define LEX_TILDE LEX_BEGIN_NAME
 #define tc_canonicalize_symbol_name(s) ((*(s) == '~' ? *(s) = '.' : '.'), s)
 /* On the Delta, dots are not required before pseudo-ops.  */
 #define NO_PSEUDO_DOT 1
-#ifndef BFD_ASSEMBLER
-#undef LOCAL_LABEL
-#define LOCAL_LABEL(name) \
-  (name[0] == '.' || (name[0] == 'L' && name[1] == '%'))
-#endif
 #endif
 
 #endif
 
-extern void m68k_mri_mode_change PARAMS ((int));
+extern void m68k_mri_mode_change (int);
 #define MRI_MODE_CHANGE(i) m68k_mri_mode_change (i)
 
 #define MRI_MODE_CHANGE(i) m68k_mri_mode_change (i)
 
-extern int m68k_conditional_pseudoop PARAMS ((pseudo_typeS *));
+extern int m68k_conditional_pseudoop (pseudo_typeS *);
 #define tc_conditional_pseudoop(pop) m68k_conditional_pseudoop (pop)
 
 #define tc_conditional_pseudoop(pop) m68k_conditional_pseudoop (pop)
 
-extern void m68k_frob_label PARAMS ((symbolS *));
+extern void m68k_frob_label (symbolS *);
 #define tc_frob_label(sym) m68k_frob_label (sym)
 
 #define tc_frob_label(sym) m68k_frob_label (sym)
 
-extern void m68k_flush_pending_output PARAMS ((void));
+extern void m68k_flush_pending_output (void);
 #define md_flush_pending_output() m68k_flush_pending_output ()
 
 #define md_flush_pending_output() m68k_flush_pending_output ()
 
-extern void m68k_frob_symbol PARAMS ((symbolS *));
-
-#ifdef BFD_ASSEMBLER
+extern void m68k_frob_symbol (symbolS *);
 
 #define tc_frob_symbol(sym,punt)                               \
 do                                                             \
 
 #define tc_frob_symbol(sym,punt)                               \
 do                                                             \
@@ -157,61 +119,62 @@ do                                                                \
 while (0)
 
 #define NO_RELOC BFD_RELOC_NONE
 while (0)
 
 #define NO_RELOC BFD_RELOC_NONE
+#define RELAX_RELOC_ABS8  BFD_RELOC_8
+#define RELAX_RELOC_ABS16 BFD_RELOC_16
+#define RELAX_RELOC_ABS32 BFD_RELOC_32
+#define RELAX_RELOC_PC8   BFD_RELOC_8_PCREL
+#define RELAX_RELOC_PC16  BFD_RELOC_16_PCREL
+#define RELAX_RELOC_PC32  BFD_RELOC_32_PCREL
 
 #ifdef OBJ_ELF
 
 #ifdef OBJ_ELF
+#define tc_fix_adjustable(X) tc_m68k_fix_adjustable(X)
+extern int tc_m68k_fix_adjustable (struct fix *);
 
 
-/* This expression evaluates to false if the relocation is for a local object
-   for which we still want to do the relocation at runtime.  True if we
-   are willing to perform this relocation while building the .o file.  If
-   the reloc is against an externally visible symbol, then the assembler
-   should never do the relocation.  */
+/* Target *-*-elf implies an embedded target.  No shared libs.
+   *-*-uclinux also requires special casing to prevent GAS from
+   generating unsupported R_68K_PC16 relocs.  */
+#define EXTERN_FORCE_RELOC \
+  ((strcmp (TARGET_OS, "elf") != 0) && (strcmp (TARGET_OS, "uclinux") != 0))
 
 
-#define TC_RELOC_RTSYM_LOC_FIXUP(FIX)                  \
-       ((FIX)->fx_addsy == NULL                        \
-        || (! S_IS_EXTERNAL ((FIX)->fx_addsy)          \
-            && ! S_IS_WEAK ((FIX)->fx_addsy)           \
-            && S_IS_DEFINED ((FIX)->fx_addsy)          \
-            && ! S_IS_COMMON ((FIX)->fx_addsy)))
+/* Values passed to md_apply_fix don't include symbol values.  */
+#define MD_APPLY_SYM_VALUE(FIX) 0
 
 
-#define tc_fix_adjustable(X) tc_m68k_fix_adjustable(X)
-extern int tc_m68k_fix_adjustable PARAMS ((struct fix *));
 #define elf_tc_final_processing m68k_elf_final_processing
 #define elf_tc_final_processing m68k_elf_final_processing
-extern void m68k_elf_final_processing PARAMS ((void));
+extern void m68k_elf_final_processing (void);
 #endif
 
 #endif
 
-#define TC_FORCE_RELOCATION(FIX)                       \
-       ((FIX)->fx_r_type == BFD_RELOC_VTABLE_INHERIT   \
-        || (FIX)->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
-
-#else /* ! BFD_ASSEMBLER */
-
-#define tc_frob_coff_symbol(sym) m68k_frob_symbol (sym)
-
-#define NO_RELOC 0
-
-#endif /* ! BFD_ASSEMBLER */
-
 #define DIFF_EXPR_OK
 
 #define DIFF_EXPR_OK
 
-extern void m68k_init_after_args PARAMS ((void));
-#define tc_init_after_args m68k_init_after_args
-
-extern int m68k_parse_long_option PARAMS ((char *));
+extern int m68k_parse_long_option (char *);
 #define md_parse_long_option m68k_parse_long_option
 
 #define md_operand(x)
 
 #define md_parse_long_option m68k_parse_long_option
 
 #define md_operand(x)
 
-#define TARGET_WORD_SIZE 32
 #define TARGET_ARCH bfd_arch_m68k
 
 extern struct relax_type md_relax_table[];
 #define TC_GENERIC_RELAX_TABLE md_relax_table
 
 #define TARGET_ARCH bfd_arch_m68k
 
 extern struct relax_type md_relax_table[];
 #define TC_GENERIC_RELAX_TABLE md_relax_table
 
-/* Copied from write.c */
-/* This was formerly called M68K_AIM_KLUDGE.  */
+/* We can't do a byte jump to the next instruction, so in that case
+   force word mode by faking AIM.  */
 #define md_prepare_relax_scan(fragP, address, aim, this_state, this_type) \
 #define md_prepare_relax_scan(fragP, address, aim, this_state, this_type) \
-  if (aim==0 && this_state== 4) { /* hard encoded from tc-m68k.c */ \
-    aim=this_type->rlx_forward+1; /* Force relaxation into word mode */ \
-  }
+  do                                                                     \
+    {                                                                    \
+      if (aim == 0 && this_type->rlx_forward == 127)                     \
+        aim = 128;                                                       \
+    }                                                                    \
+  while (0)
+
+#define DWARF2_LINE_MIN_INSN_LENGTH 2
+
+/* We want .cfi_* pseudo-ops for generating unwind info.  */
+#define TARGET_USE_CFIPOP 1
+
+#define DWARF2_DEFAULT_RETURN_COLUMN 24
+#define DWARF2_CIE_DATA_ALIGNMENT (-4)
+
+#define tc_regname_to_dw2regnum tc_m68k_regname_to_dw2regnum
+extern int tc_m68k_regname_to_dw2regnum (char *regname);
 
 
-/* end of tc-m68k.h */
+#define tc_cfi_frame_initial_instructions tc_m68k_frame_initial_instructions
+extern void tc_m68k_frame_initial_instructions (void);
This page took 0.036957 seconds and 4 git commands to generate.