gas/riscv: Produce version 3 DWARF CIE by default
[deliverable/binutils-gdb.git] / gas / config / tc-alpha.h
index 7edc412aff8334e32c86710153a491cbbb4b4e08..65c371276f79c1b8269217f3a18cab6a346cb384 100644 (file)
@@ -1,12 +1,12 @@
 /* This file is tc-alpha.h
 /* This file is tc-alpha.h
-   Copyright (C) 1994, 95, 96, 97, 98, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1994-2019 Free Software Foundation, Inc.
    Written by Ken Raeburn <raeburn@cygnus.com>.
 
    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
    Written by Ken Raeburn <raeburn@cygnus.com>.
 
    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,
@@ -16,8 +16,8 @@
 
    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_ALPHA
 
 
 #define TC_ALPHA
 
 
 #define TARGET_ARCH                    bfd_arch_alpha
 
 
 #define TARGET_ARCH                    bfd_arch_alpha
 
+#ifdef TE_FreeBSD
+#define ELF_TARGET_FORMAT      "elf64-alpha-freebsd"
+#endif
+#ifndef ELF_TARGET_FORMAT
+#define ELF_TARGET_FORMAT      "elf64-alpha"
+#endif
+
 #define TARGET_FORMAT (OUTPUT_FLAVOR == bfd_target_ecoff_flavour       \
                       ? "ecoff-littlealpha"                            \
                       : OUTPUT_FLAVOR == bfd_target_elf_flavour        \
 #define TARGET_FORMAT (OUTPUT_FLAVOR == bfd_target_ecoff_flavour       \
                       ? "ecoff-littlealpha"                            \
                       : OUTPUT_FLAVOR == bfd_target_elf_flavour        \
-                      ? "elf64-alpha"                                  \
+                      ? ELF_TARGET_FORMAT                              \
                       : OUTPUT_FLAVOR == bfd_target_evax_flavour       \
                       ? "vms-alpha"                                    \
                       : "unknown-format")
 
 #define NEED_LITERAL_POOL
                       : OUTPUT_FLAVOR == bfd_target_evax_flavour       \
                       ? "vms-alpha"                                    \
                       : "unknown-format")
 
 #define NEED_LITERAL_POOL
-#define TC_HANDLES_FX_DONE
 #define REPEAT_CONS_EXPRESSIONS
 
 #define REPEAT_CONS_EXPRESSIONS
 
-extern int alpha_force_relocation PARAMS ((struct fix *));
-extern int alpha_fix_adjustable PARAMS ((struct fix *));
+struct fix;
+struct alpha_reloc_tag;
+
+extern int alpha_force_relocation (struct fix *);
+extern int alpha_fix_adjustable   (struct fix *);
 
 extern unsigned long alpha_gprmask, alpha_fprmask;
 extern valueT alpha_gp_value;
 
 
 extern unsigned long alpha_gprmask, alpha_fprmask;
 extern valueT alpha_gp_value;
 
-#define TC_FORCE_RELOCATION(FIXP)      alpha_force_relocation (FIXP)
-#define tc_fix_adjustable(FIXP)                alpha_fix_adjustable (FIXP)
+#define TC_FORCE_RELOCATION(FIX)       alpha_force_relocation (FIX)
+#define tc_fix_adjustable(FIX)         alpha_fix_adjustable (FIX)
 #define RELOC_REQUIRES_SYMBOL
 
 #define RELOC_REQUIRES_SYMBOL
 
-/* 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.  This is only used for pcrel relocations.  */
-
-#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 the symbol value.  */
+#define MD_APPLY_SYM_VALUE(FIX) 0
 
 #define md_convert_frag(b,s,f)         as_fatal ("alpha convert_frag\n")
 #define md_estimate_size_before_relax(f,s) \
 
 #define md_convert_frag(b,s,f)         as_fatal ("alpha convert_frag\n")
 #define md_estimate_size_before_relax(f,s) \
-                       (as_fatal("estimate_size_before_relax called"),1)
+                       (as_fatal ("estimate_size_before_relax called"),1)
 #define md_operand(x)
 
 #ifdef OBJ_EVAX
 #define md_operand(x)
 
 #ifdef OBJ_EVAX
+#define TC_VALIDATE_FIX_SUB(FIX, SEG) 1
 
 
-/* This field keeps the symbols position in the link section.  */
-#define OBJ_SYMFIELD_TYPE valueT
+#define tc_canonicalize_symbol_name evax_shorten_name
 
 
-#define TC_CONS_FIX_NEW(FRAG,OFF,LEN,EXP) \
+#define TC_CONS_FIX_NEW(FRAG,OFF,LEN,EXP,RELOC)        \
+      (void) RELOC,                            \
       fix_new_exp (FRAG, OFF, (int)LEN, EXP, 0, \
        LEN == 2 ? BFD_RELOC_16 \
        : LEN == 4 ? BFD_RELOC_32 \
       fix_new_exp (FRAG, OFF, (int)LEN, EXP, 0, \
        LEN == 2 ? BFD_RELOC_16 \
        : LEN == 4 ? BFD_RELOC_32 \
@@ -79,49 +80,73 @@ extern valueT alpha_gp_value;
        : BFD_RELOC_ALPHA_LINKAGE);
 #endif
 
        : BFD_RELOC_ALPHA_LINKAGE);
 #endif
 
+#ifdef OBJ_EVAX
+#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) (P2VAR) = 3
+#else
+#define TC_IMPLICIT_LCOMM_ALIGNMENT(size, align) \
+  do                                                   \
+    {                                                  \
+      align = 0;                                       \
+      if (size > 1)                                    \
+       {                                               \
+         addressT temp = 1;                            \
+         while ((size & temp) == 0)                    \
+           ++align, temp <<= 1;                        \
+       }                                               \
+    }                                                  \
+  while (0)
+#endif
+
 #define md_number_to_chars             number_to_chars_littleendian
 
 #define md_number_to_chars             number_to_chars_littleendian
 
-extern int tc_get_register PARAMS ((int frame));
-extern void alpha_frob_ecoff_data PARAMS ((void));
+extern int tc_get_register (int);
+extern void alpha_frob_ecoff_data (void);
 
 #define tc_frob_label(sym) alpha_define_label (sym)
 
 #define tc_frob_label(sym) alpha_define_label (sym)
-extern void alpha_define_label PARAMS ((symbolS *));
+extern void alpha_define_label (symbolS *);
 
 #define md_cons_align(nbytes) alpha_cons_align (nbytes)
 
 #define md_cons_align(nbytes) alpha_cons_align (nbytes)
-extern void alpha_cons_align PARAMS ((int));
+extern void alpha_cons_align (int);
 
 #define HANDLE_ALIGN(fragp) alpha_handle_align (fragp)
 
 #define HANDLE_ALIGN(fragp) alpha_handle_align (fragp)
-extern void alpha_handle_align PARAMS ((struct frag *));
+extern void alpha_handle_align (struct frag *);
 
 #define MAX_MEM_FOR_RS_ALIGN_CODE  (3 + 4 + 8)
 
 #ifdef OBJ_ECOFF
 #define tc_frob_file_before_adjust() alpha_frob_file_before_adjust ()
 
 #define MAX_MEM_FOR_RS_ALIGN_CODE  (3 + 4 + 8)
 
 #ifdef OBJ_ECOFF
 #define tc_frob_file_before_adjust() alpha_frob_file_before_adjust ()
-extern void alpha_frob_file_before_adjust PARAMS ((void));
+extern void alpha_frob_file_before_adjust (void);
 #endif
 
 #endif
 
-#define DIFF_EXPR_OK   /* foo-. gets turned into PC relative relocs */
+#define DIFF_EXPR_OK   /* foo-. gets turned into PC relative relocs */
 
 #ifdef OBJ_ELF
 
 #ifdef OBJ_ELF
-#define ELF_TC_SPECIAL_SECTIONS \
-  { ".sdata",   SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_ALPHA_GPREL  }, \
-  { ".sbss",    SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_ALPHA_GPREL  },
+#define md_elf_section_letter          alpha_elf_section_letter
+extern bfd_vma alpha_elf_section_letter (int, const char **);
+#define md_elf_section_flags           alpha_elf_section_flags
+extern flagword alpha_elf_section_flags (flagword, bfd_vma, int);
 #endif
 
 #endif
 
-/* Whether to add support for explict !relocation_op!sequence_number.  At the
+/* Whether to add support for explicit !relocation_op!sequence_number.  At the
    moment, only do this for ELF, though ECOFF could use it as well.  */
 
 #ifdef OBJ_ELF
 #define RELOC_OP_P
 #endif
 
    moment, only do this for ELF, though ECOFF could use it as well.  */
 
 #ifdef OBJ_ELF
 #define RELOC_OP_P
 #endif
 
-#ifdef RELOC_OP_P
-/* Before the relocations are written, reorder them, so that user supplied
-   !lituse relocations follow the appropriate !literal relocations.  Also
-   convert the gas-internal relocations to the appropriate linker relocations.
-   */
-#define tc_adjust_symtab() alpha_adjust_symtab ()
-extern void alpha_adjust_symtab PARAMS ((void));
+#ifndef OBJ_EVAX
+/* Before the relocations are written, reorder them, so that user
+   supplied !lituse relocations follow the appropriate !literal
+   relocations.  Also convert the gas-internal relocations to the
+   appropriate linker relocations.  */
+#define tc_frob_file_before_fix() alpha_before_fix ()
+extern void alpha_before_fix (void);
+#endif
+
+#ifdef OBJ_ELF
+#define md_end  alpha_elf_md_end
+extern void alpha_elf_md_end (void);
+#endif
 
 /* New fields for supporting explicit relocations (such as !literal to mark
    where a pointer is loaded from the global table, and !lituse_base to track
 
 /* New fields for supporting explicit relocations (such as !literal to mark
    where a pointer is loaded from the global table, and !lituse_base to track
@@ -131,25 +156,31 @@ extern void alpha_adjust_symtab PARAMS ((void));
 
 struct alpha_fix_tag
 {
 
 struct alpha_fix_tag
 {
-  struct fix *next_lituse;             /* next !lituse */
-  struct alpha_literal_tag *info;      /* other members with same sequence */
+  struct fix *next_reloc;              /* Next !lituse or !gpdisp.  */
+  struct alpha_reloc_tag *info;                /* Other members with same sequence.  */
 };
 
 /* Initialize the TC_FIX_TYPE field.  */
 };
 
 /* Initialize the TC_FIX_TYPE field.  */
-#define TC_INIT_FIX_DATA(fixP)                                         \
+#define TC_INIT_FIX_DATA(FIX)                                          \
 do {                                                                   \
 do {                                                                   \
-  fixP->tc_fix_data.next_lituse = (struct fix *)0;                     \
-  fixP->tc_fix_data.info = (struct alpha_literal_tag *)0;              \
+  FIX->tc_fix_data.next_reloc = NULL;                                  \
+  FIX->tc_fix_data.info = NULL;                                                \
 } while (0)
 
 /* Work with DEBUG5 to print fields in tc_fix_type.  */
 } while (0)
 
 /* Work with DEBUG5 to print fields in tc_fix_type.  */
-#define TC_FIX_DATA_PRINT(stream,fixP)                                 \
+#define TC_FIX_DATA_PRINT(STREAM, FIX)                                 \
 do {                                                                   \
 do {                                                                   \
-  if (fixP->tc_fix_data.info)                                          \
-    fprintf (stderr, "\tinfo = 0x%lx, next_lituse = 0x%lx\n", \
-            (long)fixP->tc_fix_data.info,                              \
-            (long)fixP->tc_fix_data.next_lituse);                      \
+  if (FIX->tc_fix_data.info)                                           \
+    fprintf (STREAM, "\tinfo = 0x%lx, next_reloc = 0x%lx\n", \
+            (long) FIX->tc_fix_data.info,                              \
+            (long) FIX->tc_fix_data.next_reloc);                       \
 } while (0)
 } while (0)
-#endif
 
 
-#define DWARF2_LINE_MIN_INSN_LENGTH 4
+#define TARGET_USE_CFIPOP 1
+
+#define tc_cfi_frame_initial_instructions alpha_cfi_frame_initial_instructions
+extern void alpha_cfi_frame_initial_instructions (void);
+
+#define DWARF2_LINE_MIN_INSN_LENGTH    4
+#define DWARF2_DEFAULT_RETURN_COLUMN   26
+#define DWARF2_CIE_DATA_ALIGNMENT      (-8)
This page took 0.027102 seconds and 4 git commands to generate.