Fix indentation in print_thread_info_1
[deliverable/binutils-gdb.git] / gas / config / tc-ia64.h
index 320798b50b3b7524a06d34ffb9df28d27b047d53..b478532549a9b93586347880794829fefd290490 100644 (file)
@@ -1,12 +1,12 @@
 /* tc-ia64.h -- Header file for tc-ia64.c.
 /* tc-ia64.h -- Header file for tc-ia64.c.
-   Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
    Contributed by David Mosberger-Tang <davidm@hpl.hp.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
    Contributed by David Mosberger-Tang <davidm@hpl.hp.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,
 
    You should have received a copy of the GNU General Public License
    along with GAS; see the file COPYING.  If not, write to
 
    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.  */
+   the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 
-#include <opcode/ia64.h>
-#include <elf/ia64.h>
+#include "opcode/ia64.h"
+#include "elf/ia64.h"
 
 #define TC_IA64
 
 /* Linux is little endian by default.  HPUX is big endian by default.  */
 #ifdef TE_HPUX
 
 #define TC_IA64
 
 /* Linux is little endian by default.  HPUX is big endian by default.  */
 #ifdef TE_HPUX
-#define md_number_to_chars             number_to_chars_bigendian
 #define TARGET_BYTES_BIG_ENDIAN                1
 #define TARGET_BYTES_BIG_ENDIAN                1
+#define MD_FLAGS_DEFAULT               EF_IA_64_BE
 #else
 #else
-#define md_number_to_chars             number_to_chars_littleendian
 #define TARGET_BYTES_BIG_ENDIAN                0
 #define TARGET_BYTES_BIG_ENDIAN                0
+#define MD_FLAGS_DEFAULT               EF_IA_64_ABI64
 #endif /* TE_HPUX */
 
 #endif /* TE_HPUX */
 
+extern void (*ia64_number_to_chars) (char *, valueT, int);
+#define md_number_to_chars             (*ia64_number_to_chars)
+
+extern void ia64_elf_section_change_hook (void);
+#define md_elf_section_change_hook     ia64_elf_section_change_hook
+
+/* We record the endian for this section. 0 means default, 1 means
+   big endian and 2 means little endian.  */
+struct ia64_segment_info_type
+{
+  unsigned int endian : 2;
+};
+
+#define TC_SEGMENT_INFO_TYPE           struct ia64_segment_info_type
+
+extern void ia64_adjust_symtab (void);
+#define tc_adjust_symtab()     ia64_adjust_symtab ()
+
+extern void ia64_frob_file (void);
+#define tc_frob_file()         ia64_frob_file ()
+
 /* We need to set the default object file format in ia64_init and not in
    md_begin.  This is because parse_args is called before md_begin, and we
    do not want md_begin to wipe out the flag settings set by options parsed in
    md_parse_args.  */
 
 #define HOST_SPECIAL_INIT ia64_init
 /* We need to set the default object file format in ia64_init and not in
    md_begin.  This is because parse_args is called before md_begin, and we
    do not want md_begin to wipe out the flag settings set by options parsed in
    md_parse_args.  */
 
 #define HOST_SPECIAL_INIT ia64_init
-extern void ia64_init PARAMS ((int, char **));
+extern void ia64_init (int, char **);
 
 #define TARGET_FORMAT ia64_target_format()
 
 #define TARGET_FORMAT ia64_target_format()
-extern const char *ia64_target_format PARAMS ((void));
+extern const char *ia64_target_format (void);
 
 #define TARGET_ARCH                    bfd_arch_ia64
 #define DOUBLESLASH_LINE_COMMENTS      /* allow //-style comments */
 
 #define TARGET_ARCH                    bfd_arch_ia64
 #define DOUBLESLASH_LINE_COMMENTS      /* allow //-style comments */
@@ -53,78 +74,112 @@ extern const char *ia64_target_format PARAMS ((void));
 #define NEED_INDEX_OPERATOR            /* [ ] is index operator */
 
 #define QUOTES_IN_INSN                 /* allow `string "foo;bar"' */
 #define NEED_INDEX_OPERATOR            /* [ ] is index operator */
 
 #define QUOTES_IN_INSN                 /* allow `string "foo;bar"' */
-#define LEX_AT         LEX_NAME        /* allow `@' inside name */
-#define LEX_QM         LEX_NAME        /* allow `?' inside name */
+#define LEX_AT         (LEX_NAME|LEX_BEGIN_NAME) /* allow `@' inside name */
+#define LEX_QM         (LEX_NAME|LEX_BEGIN_NAME) /* allow `?' inside name */
 #define LEX_HASH       LEX_END_NAME    /* allow `#' ending a name */
 
 #define LEX_HASH       LEX_END_NAME    /* allow `#' ending a name */
 
+#define TC_PREDICATE_START_CHAR '('
+#define TC_PREDICATE_END_CHAR ')'
+
+extern const char ia64_symbol_chars[];
+#define tc_symbol_chars ia64_symbol_chars
+
+#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
+
 struct ia64_fix
   {
     int bigendian;                     /* byte order at fix location */
     enum ia64_opnd opnd;
   };
 
 struct ia64_fix
   {
     int bigendian;                     /* byte order at fix location */
     enum ia64_opnd opnd;
   };
 
-extern void ia64_do_align PARAMS((int n));
-extern void ia64_end_of_source PARAMS((void));
-extern void ia64_start_line PARAMS((void));
-extern int ia64_unrecognized_line PARAMS((int ch));
-extern void ia64_frob_label PARAMS((struct symbol *sym));
-extern void ia64_flush_pending_output PARAMS((void));
-extern int ia64_parse_name (char *name, expressionS *e);
-extern int ia64_optimize_expr PARAMS((expressionS *l, operatorT op,
-                                     expressionS *r));
-extern void ia64_cons_align PARAMS((int));
-extern void ia64_flush_insns PARAMS((void));
-extern int ia64_fix_adjustable PARAMS((struct fix *fix));
-extern int ia64_force_relocation PARAMS((struct fix *));
-extern void ia64_cons_fix_new PARAMS ((fragS *f, int where, int nbytes,
-                                      expressionS *exp));
-extern void ia64_validate_fix PARAMS ((struct fix *fix));
-extern char * ia64_canonicalize_symbol_name PARAMS ((char *));
-extern int ia64_elf_section_letter PARAMS ((int, char **));
-extern flagword ia64_elf_section_flags PARAMS ((flagword, int, int));
-extern int ia64_elf_section_type PARAMS ((const char *, size_t len));
-extern long ia64_pcrel_from_section PARAMS ((struct fix *fix, segT sec));
-extern void ia64_md_do_align PARAMS ((int, const char *, int, int));
-extern void ia64_handle_align PARAMS ((fragS *f));
-extern void ia64_after_parse_args PARAMS ((void));
+extern void ia64_end_of_source (void);
+extern void ia64_start_line (void);
+extern int ia64_unrecognized_line (int);
+extern void ia64_frob_label (struct symbol *);
+#ifdef TE_HPUX
+extern int ia64_frob_symbol (struct symbol *);
+#endif
+extern void ia64_flush_pending_output (void);
+extern int ia64_parse_name (char *, expressionS *, char *);
+extern int ia64_optimize_expr (expressionS *, operatorT, expressionS *);
+extern void ia64_cons_align (int);
+extern void ia64_flush_insns (void);
+extern int ia64_fix_adjustable (struct fix *);
+extern int ia64_force_relocation (struct fix *);
+extern void ia64_cons_fix_new (fragS *, int, int, expressionS *,
+                              bfd_reloc_code_real_type);
+extern void ia64_validate_fix (struct fix *);
+extern char * ia64_canonicalize_symbol_name (char *);
+extern bfd_vma ia64_elf_section_letter (int, const char **);
+extern flagword ia64_elf_section_flags (flagword, bfd_vma, int);
+extern int ia64_elf_section_type (const char *, size_t);
+extern long ia64_pcrel_from_section (struct fix *, segT);
+extern void ia64_md_do_align (int, const char *, int, int);
+extern void ia64_handle_align (fragS *);
+extern void ia64_after_parse_args (void);
+extern void ia64_dwarf2_emit_offset (symbolS *, unsigned int);
+extern void ia64_check_label (symbolS *);
+extern int ia64_estimate_size_before_relax (fragS *, asection *);
+extern void ia64_convert_frag (fragS *);
 
 #define md_end()                               ia64_end_of_source ()
 #define md_start_line_hook()           ia64_start_line ()
 #define tc_unrecognized_line(ch)       ia64_unrecognized_line (ch)
 #define tc_frob_label(s)               ia64_frob_label (s)
 
 #define md_end()                               ia64_end_of_source ()
 #define md_start_line_hook()           ia64_start_line ()
 #define tc_unrecognized_line(ch)       ia64_unrecognized_line (ch)
 #define tc_frob_label(s)               ia64_frob_label (s)
+#ifdef TE_HPUX
+#define tc_frob_symbol(s,p)            p |= ia64_frob_symbol (s)
+#endif /* TE_HPUX */
 #define md_flush_pending_output()      ia64_flush_pending_output ()
 #define md_flush_pending_output()      ia64_flush_pending_output ()
-#define md_parse_name(s,e,c)           ia64_parse_name (s, e)
+#define md_parse_name(s,e,m,c)         ia64_parse_name (s, e, c)
+#define md_register_arithmetic         0
 #define tc_canonicalize_symbol_name(s) ia64_canonicalize_symbol_name (s)
 #define tc_canonicalize_symbol_name(s) ia64_canonicalize_symbol_name (s)
+#define tc_canonicalize_section_name(s)        ia64_canonicalize_symbol_name (s)
 #define md_optimize_expr(l,o,r)                ia64_optimize_expr (l, o, r)
 #define md_cons_align(n)               ia64_cons_align (n)
 #define TC_FORCE_RELOCATION(f)         ia64_force_relocation (f)
 #define tc_fix_adjustable(f)           ia64_fix_adjustable (f)
 #define md_optimize_expr(l,o,r)                ia64_optimize_expr (l, o, r)
 #define md_cons_align(n)               ia64_cons_align (n)
 #define TC_FORCE_RELOCATION(f)         ia64_force_relocation (f)
 #define tc_fix_adjustable(f)           ia64_fix_adjustable (f)
-#define md_convert_frag(b,s,f)         as_fatal ("ia64_convert_frag")
+#define MD_APPLY_SYM_VALUE(FIX)                0
+#define md_convert_frag(b,s,f)         ia64_convert_frag (f)
 #define md_create_long_jump(p,f,t,fr,s)        as_fatal ("ia64_create_long_jump")
 #define md_create_short_jump(p,f,t,fr,s) \
                                        as_fatal ("ia64_create_short_jump")
 #define md_estimate_size_before_relax(f,s) \
 #define md_create_long_jump(p,f,t,fr,s)        as_fatal ("ia64_create_long_jump")
 #define md_create_short_jump(p,f,t,fr,s) \
                                        as_fatal ("ia64_create_short_jump")
 #define md_estimate_size_before_relax(f,s) \
-                       (as_fatal ("ia64_estimate_size_before_relax"), 1)
+                                       ia64_estimate_size_before_relax(f,s)
 #define md_elf_section_letter          ia64_elf_section_letter
 #define md_elf_section_flags           ia64_elf_section_flags
 #define TC_FIX_TYPE                    struct ia64_fix
 #define TC_INIT_FIX_DATA(f)            { f->tc_fix_data.opnd = 0; }
 #define md_elf_section_letter          ia64_elf_section_letter
 #define md_elf_section_flags           ia64_elf_section_flags
 #define TC_FIX_TYPE                    struct ia64_fix
 #define TC_INIT_FIX_DATA(f)            { f->tc_fix_data.opnd = 0; }
-#define TC_CONS_FIX_NEW(f,o,l,e)       ia64_cons_fix_new (f, o, l, e)
+#define TC_CONS_FIX_NEW(f,o,l,e,r)     ia64_cons_fix_new (f, o, l, e, r)
 #define TC_VALIDATE_FIX(fix,seg,skip)  ia64_validate_fix (fix)
 #define MD_PCREL_FROM_SECTION(fix,sec) ia64_pcrel_from_section (fix, sec)
 #define TC_VALIDATE_FIX(fix,seg,skip)  ia64_validate_fix (fix)
 #define MD_PCREL_FROM_SECTION(fix,sec) ia64_pcrel_from_section (fix, sec)
+#define md_section_align(seg,size)     (size)
 #define md_do_align(n,f,l,m,j)         ia64_md_do_align (n,f,l,m)
 #define HANDLE_ALIGN(f)                        ia64_handle_align (f)
 #define md_elf_section_type(str,len)   ia64_elf_section_type (str, len)
 #define md_after_parse_args()          ia64_after_parse_args ()
 #define md_do_align(n,f,l,m,j)         ia64_md_do_align (n,f,l,m)
 #define HANDLE_ALIGN(f)                        ia64_handle_align (f)
 #define md_elf_section_type(str,len)   ia64_elf_section_type (str, len)
 #define md_after_parse_args()          ia64_after_parse_args ()
+#define TC_DWARF2_EMIT_OFFSET          ia64_dwarf2_emit_offset
+#define tc_check_label(l)              ia64_check_label (l)
+#ifdef TE_VMS
+#define tc_init_after_args() ia64_vms_note ()
+void ia64_vms_note (void);
+#endif
+
+/* Record if an alignment frag should end with a stop bit.  */
+#define TC_FRAG_TYPE                   int
+#define TC_FRAG_INIT(FRAGP, MAX_BYTES) do {(FRAGP)->tc_frag_data = 0;}while (0)
+
+/* Give an error if a frag containing code is not aligned to a 16 byte
+   boundary.  */
+#define md_frag_check(FRAGP) \
+  if ((FRAGP)->has_code                                                        \
+      && (((FRAGP)->fr_address + (FRAGP)->insn_addr) & 15) != 0)       \
+     as_bad_where ((FRAGP)->fr_file, (FRAGP)->fr_line,                 \
+                  _("instruction address is not a multiple of 16"));
 
 #define MAX_MEM_FOR_RS_ALIGN_CODE  (15 + 16)
 
 #define WORKING_DOT_WORD       /* don't do broken word processing for now */
 
 
 #define MAX_MEM_FOR_RS_ALIGN_CODE  (15 + 16)
 
 #define WORKING_DOT_WORD       /* don't do broken word processing for now */
 
-#define ELF_TC_SPECIAL_SECTIONS                                                   \
-{ ".sbss",     SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT }, \
-{ ".sdata",    SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_IA_64_SHORT },
-
 #define DWARF2_LINE_MIN_INSN_LENGTH 1  /* so slot-multipliers can be 1 */
 
 /* This is the information required for unwind records in an ia64
 #define DWARF2_LINE_MIN_INSN_LENGTH 1  /* so slot-multipliers can be 1 */
 
 /* This is the information required for unwind records in an ia64
@@ -175,7 +230,7 @@ typedef enum
   bspstore_gr, bspstore_psprel, bspstore_sprel, rnat_when, rnat_gr,
   rnat_psprel, rnat_sprel, epilogue, label_state, copy_state,
   spill_psprel, spill_sprel, spill_reg, spill_psprel_p, spill_sprel_p,
   bspstore_gr, bspstore_psprel, bspstore_sprel, rnat_when, rnat_gr,
   rnat_psprel, rnat_sprel, epilogue, label_state, copy_state,
   spill_psprel, spill_sprel, spill_reg, spill_psprel_p, spill_sprel_p,
-  spill_reg_p, unwabi
+  spill_reg_p, unwabi, endp
 } unw_record_type;
 
 /* These structures declare the fields that can be used in each of the
 } unw_record_type;
 
 /* These structures declare the fields that can be used in each of the
@@ -192,7 +247,7 @@ typedef struct unw_r_record
   struct
   {
     unsigned char *i;
   struct
   {
     unsigned char *i;
-    unsigned long fr_mem;
+    unsigned int fr_mem;
     unsigned char gr_mem;
     unsigned char br_mem;
   } mask;
     unsigned char gr_mem;
     unsigned char br_mem;
   } mask;
@@ -200,17 +255,22 @@ typedef struct unw_r_record
 
 typedef struct unw_p_record
 {
 
 typedef struct unw_p_record
 {
-  void *imask;
+  struct unw_rec_list *next;
   unsigned long t;
   unsigned long size;
   unsigned long t;
   unsigned long size;
-  unsigned long spoff;
-  unsigned long br;
-  unsigned long pspoff;
-  unsigned short gr;
-  unsigned short rmask;
-  unsigned short grmask;
-  unsigned long frmask;
-  unsigned short brmask;
+  union
+  {
+    unsigned long sp;
+    unsigned long psp;
+  } off;
+  union
+  {
+    unsigned short gr;
+    unsigned short br;
+  } r;
+  unsigned char grmask;
+  unsigned char brmask;
+  unsigned int frmask;
   unsigned char abi;
   unsigned char context;
 } unw_p_record;
   unsigned char abi;
   unsigned char context;
 } unw_p_record;
@@ -225,10 +285,13 @@ typedef struct unw_b_record
 typedef struct unw_x_record
 {
   unsigned long t;
 typedef struct unw_x_record
 {
   unsigned long t;
-  unsigned long spoff;
-  unsigned long pspoff;
+  union
+  {
+    unsigned long spoff;
+    unsigned long pspoff;
+    unsigned int reg;
+  } where;
   unsigned short reg;
   unsigned short reg;
-  unsigned short treg;
   unsigned short qp;
   unsigned short ab;   /* Value of the AB field..  */
   unsigned short xy;   /* Value of the XY field..  */
   unsigned short qp;
   unsigned short ab;   /* Value of the AB field..  */
   unsigned short xy;   /* Value of the XY field..  */
@@ -247,18 +310,21 @@ typedef struct unwind_record
   } record;
 } unwind_record;
 
   } record;
 } unwind_record;
 
-/* This expression evaluates to false if the relocation is for a local 
+/* This expression evaluates to true if the relocation is for a local
    object for which we still want to do the relocation at runtime.
    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.  */
+   False if we are willing to perform this relocation while building
+   the .o file.  */
 
 /* If the reloc type is BFD_RELOC_UNUSED, then this is for a TAG13/TAG13b field
    which has no external reloc, so we must resolve the value now.  */
 
 
 /* If the reloc type is BFD_RELOC_UNUSED, then this is for a TAG13/TAG13b field
    which has no external reloc, so we must resolve the value now.  */
 
-#define TC_RELOC_RTSYM_LOC_FIXUP(FIX)                          \
-  ((FIX)->fx_addsy == NULL                                     \
-   || (FIX)->fx_r_type == BFD_RELOC_UNUSED                     \
-   || (! S_IS_EXTERNAL ((FIX)->fx_addsy)                       \
-       && ! S_IS_WEAK ((FIX)->fx_addsy)                                \
-       && S_IS_DEFINED ((FIX)->fx_addsy)                       \
-       && ! S_IS_COMMON ((FIX)->fx_addsy)))
+#define TC_FORCE_RELOCATION_LOCAL(FIX)                 \
+  ((FIX)->fx_r_type != BFD_RELOC_UNUSED                        \
+   && (GENERIC_FORCE_RELOCATION_LOCAL (FIX)            \
+       || (FIX)->fx_r_type == BFD_RELOC_IA64_PLTOFF22))
+
+/* VMS backtraces expect dwarf version 3.  */
+#ifdef TE_VMS
+#define DWARF2_VERSION 3
+#define DWARF2_LINE_VERSION 3
+#endif
This page took 0.03241 seconds and 4 git commands to generate.