[BACK]Return to tc-ia64.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / external / gpl3 / binutils.old / dist / gas / config

Annotation of src/external/gpl3/binutils.old/dist/gas/config/tc-ia64.h, Revision 1.1.1.1.2.1

1.1       christos    1: /* tc-ia64.h -- Header file for tc-ia64.c.
1.1.1.1.2.1! pgoyette    2:    Copyright (C) 1998-2015 Free Software Foundation, Inc.
1.1       christos    3:    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
                      4:
                      5:    This file is part of GAS, the GNU Assembler.
                      6:
                      7:    GAS is free software; you can redistribute it and/or modify
                      8:    it under the terms of the GNU General Public License as published by
                      9:    the Free Software Foundation; either version 3, or (at your option)
                     10:    any later version.
                     11:
                     12:    GAS is distributed in the hope that it will be useful,
                     13:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     14:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     15:    GNU General Public License for more details.
                     16:
                     17:    You should have received a copy of the GNU General Public License
                     18:    along with GAS; see the file COPYING.  If not, write to
                     19:    the Free Software Foundation, 51 Franklin Street - Fifth Floor,
                     20:    Boston, MA 02110-1301, USA.  */
                     21:
                     22: #include "opcode/ia64.h"
                     23: #include "elf/ia64.h"
                     24:
                     25: #define TC_IA64
                     26:
                     27: /* Linux is little endian by default.  HPUX is big endian by default.  */
                     28: #ifdef TE_HPUX
                     29: #define TARGET_BYTES_BIG_ENDIAN                1
                     30: #define MD_FLAGS_DEFAULT               EF_IA_64_BE
                     31: #else
                     32: #define TARGET_BYTES_BIG_ENDIAN                0
                     33: #define MD_FLAGS_DEFAULT               EF_IA_64_ABI64
                     34: #endif /* TE_HPUX */
                     35:
                     36: extern void (*ia64_number_to_chars) (char *, valueT, int);
                     37: #define md_number_to_chars             (*ia64_number_to_chars)
                     38:
                     39: extern void ia64_elf_section_change_hook (void);
                     40: #define md_elf_section_change_hook     ia64_elf_section_change_hook
                     41:
                     42: /* We record the endian for this section. 0 means default, 1 means
                     43:    big endian and 2 means little endian.  */
                     44: struct ia64_segment_info_type
                     45: {
                     46:   unsigned int endian : 2;
                     47: };
                     48:
                     49: #define TC_SEGMENT_INFO_TYPE           struct ia64_segment_info_type
                     50:
                     51: extern void ia64_adjust_symtab (void);
                     52: #define tc_adjust_symtab()     ia64_adjust_symtab ()
                     53:
                     54: extern void ia64_frob_file (void);
                     55: #define tc_frob_file()         ia64_frob_file ()
                     56:
                     57: /* We need to set the default object file format in ia64_init and not in
                     58:    md_begin.  This is because parse_args is called before md_begin, and we
                     59:    do not want md_begin to wipe out the flag settings set by options parsed in
                     60:    md_parse_args.  */
                     61:
                     62: #define HOST_SPECIAL_INIT ia64_init
                     63: extern void ia64_init (int, char **);
                     64:
                     65: #define TARGET_FORMAT ia64_target_format()
                     66: extern const char *ia64_target_format (void);
                     67:
                     68: #define TARGET_ARCH                    bfd_arch_ia64
                     69: #define DOUBLESLASH_LINE_COMMENTS      /* allow //-style comments */
                     70:
                     71: #define NEED_LITERAL_POOL              /* need gp literal pool */
                     72: #define RELOC_REQUIRES_SYMBOL
                     73: #define DIFF_EXPR_OK   /* foo-. gets turned into PC relative relocs */
                     74: #define NEED_INDEX_OPERATOR            /* [ ] is index operator */
                     75:
                     76: #define QUOTES_IN_INSN                 /* allow `string "foo;bar"' */
                     77: #define LEX_AT         (LEX_NAME|LEX_BEGIN_NAME) /* allow `@' inside name */
                     78: #define LEX_QM         (LEX_NAME|LEX_BEGIN_NAME) /* allow `?' inside name */
                     79: #define LEX_HASH       LEX_END_NAME    /* allow `#' ending a name */
                     80:
                     81: #define TC_PREDICATE_START_CHAR '('
                     82: #define TC_PREDICATE_END_CHAR ')'
                     83:
                     84: extern const char ia64_symbol_chars[];
                     85: #define tc_symbol_chars ia64_symbol_chars
                     86:
                     87: #define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
                     88:
                     89: struct ia64_fix
                     90:   {
                     91:     int bigendian;                     /* byte order at fix location */
                     92:     enum ia64_opnd opnd;
                     93:   };
                     94:
                     95: extern void ia64_end_of_source (void);
                     96: extern void ia64_start_line (void);
                     97: extern int ia64_unrecognized_line (int);
                     98: extern void ia64_frob_label (struct symbol *);
                     99: #ifdef TE_HPUX
                    100: extern int ia64_frob_symbol (struct symbol *);
                    101: #endif
                    102: extern void ia64_flush_pending_output (void);
                    103: extern int ia64_parse_name (char *, expressionS *, char *);
                    104: extern int ia64_optimize_expr (expressionS *, operatorT, expressionS *);
                    105: extern void ia64_cons_align (int);
                    106: extern void ia64_flush_insns (void);
                    107: extern int ia64_fix_adjustable (struct fix *);
                    108: extern int ia64_force_relocation (struct fix *);
1.1.1.1.2.1! pgoyette  109: extern void ia64_cons_fix_new (fragS *, int, int, expressionS *,
        !           110:                               bfd_reloc_code_real_type);
1.1       christos  111: extern void ia64_validate_fix (struct fix *);
                    112: extern char * ia64_canonicalize_symbol_name (char *);
                    113: extern bfd_vma ia64_elf_section_letter (int, char **);
                    114: extern flagword ia64_elf_section_flags (flagword, bfd_vma, int);
                    115: extern int ia64_elf_section_type (const char *, size_t);
                    116: extern long ia64_pcrel_from_section (struct fix *, segT);
                    117: extern void ia64_md_do_align (int, const char *, int, int);
                    118: extern void ia64_handle_align (fragS *);
                    119: extern void ia64_after_parse_args (void);
                    120: extern void ia64_dwarf2_emit_offset (symbolS *, unsigned int);
                    121: extern void ia64_check_label (symbolS *);
                    122: extern int ia64_estimate_size_before_relax (fragS *, asection *);
                    123: extern void ia64_convert_frag (fragS *);
                    124:
                    125: #define md_end()                               ia64_end_of_source ()
                    126: #define md_start_line_hook()           ia64_start_line ()
                    127: #define tc_unrecognized_line(ch)       ia64_unrecognized_line (ch)
                    128: #define tc_frob_label(s)               ia64_frob_label (s)
                    129: #ifdef TE_HPUX
                    130: #define tc_frob_symbol(s,p)            p |= ia64_frob_symbol (s)
                    131: #endif /* TE_HPUX */
                    132: #define md_flush_pending_output()      ia64_flush_pending_output ()
                    133: #define md_parse_name(s,e,m,c)         ia64_parse_name (s, e, c)
                    134: #define md_register_arithmetic         0
                    135: #define tc_canonicalize_symbol_name(s) ia64_canonicalize_symbol_name (s)
                    136: #define tc_canonicalize_section_name(s)        ia64_canonicalize_symbol_name (s)
                    137: #define md_optimize_expr(l,o,r)                ia64_optimize_expr (l, o, r)
                    138: #define md_cons_align(n)               ia64_cons_align (n)
                    139: #define TC_FORCE_RELOCATION(f)         ia64_force_relocation (f)
                    140: #define tc_fix_adjustable(f)           ia64_fix_adjustable (f)
                    141: #define MD_APPLY_SYM_VALUE(FIX)                0
                    142: #define md_convert_frag(b,s,f)         ia64_convert_frag (f)
                    143: #define md_create_long_jump(p,f,t,fr,s)        as_fatal ("ia64_create_long_jump")
                    144: #define md_create_short_jump(p,f,t,fr,s) \
                    145:                                        as_fatal ("ia64_create_short_jump")
                    146: #define md_estimate_size_before_relax(f,s) \
                    147:                                        ia64_estimate_size_before_relax(f,s)
                    148: #define md_elf_section_letter          ia64_elf_section_letter
                    149: #define md_elf_section_flags           ia64_elf_section_flags
                    150: #define TC_FIX_TYPE                    struct ia64_fix
                    151: #define TC_INIT_FIX_DATA(f)            { f->tc_fix_data.opnd = 0; }
1.1.1.1.2.1! pgoyette  152: #define TC_CONS_FIX_NEW(f,o,l,e,r)     ia64_cons_fix_new (f, o, l, e, r)
1.1       christos  153: #define TC_VALIDATE_FIX(fix,seg,skip)  ia64_validate_fix (fix)
                    154: #define MD_PCREL_FROM_SECTION(fix,sec) ia64_pcrel_from_section (fix, sec)
                    155: #define md_section_align(seg,size)     (size)
                    156: #define md_do_align(n,f,l,m,j)         ia64_md_do_align (n,f,l,m)
                    157: #define HANDLE_ALIGN(f)                        ia64_handle_align (f)
                    158: #define md_elf_section_type(str,len)   ia64_elf_section_type (str, len)
                    159: #define md_after_parse_args()          ia64_after_parse_args ()
                    160: #define TC_DWARF2_EMIT_OFFSET          ia64_dwarf2_emit_offset
                    161: #define tc_check_label(l)              ia64_check_label (l)
                    162: #ifdef TE_VMS
                    163: #define tc_init_after_args() ia64_vms_note ()
                    164: void ia64_vms_note (void);
                    165: #endif
                    166:
                    167: /* Record if an alignment frag should end with a stop bit.  */
                    168: #define TC_FRAG_TYPE                   int
                    169: #define TC_FRAG_INIT(FRAGP)            do {(FRAGP)->tc_frag_data = 0;}while (0)
                    170:
                    171: /* Give an error if a frag containing code is not aligned to a 16 byte
                    172:    boundary.  */
                    173: #define md_frag_check(FRAGP) \
                    174:   if ((FRAGP)->has_code                                                        \
                    175:       && (((FRAGP)->fr_address + (FRAGP)->insn_addr) & 15) != 0)       \
                    176:      as_bad_where ((FRAGP)->fr_file, (FRAGP)->fr_line,                 \
                    177:                   _("instruction address is not a multiple of 16"));
                    178:
                    179: #define MAX_MEM_FOR_RS_ALIGN_CODE  (15 + 16)
                    180:
                    181: #define WORKING_DOT_WORD       /* don't do broken word processing for now */
                    182:
                    183: #define DWARF2_LINE_MIN_INSN_LENGTH 1  /* so slot-multipliers can be 1 */
                    184:
                    185: /* This is the information required for unwind records in an ia64
                    186:    object file. This is required by GAS and the compiler runtime.  */
                    187:
                    188: /* These are the starting point masks for the various types of
                    189:    unwind records. To create a record of type R3 for instance, one
                    190:    starts by using the value UNW_R3 and or-ing in any other required values.
                    191:    These values are also unique (in context), so they can be used to identify
                    192:    the various record types as well. UNW_Bx and some UNW_Px do have the
                    193:    same value, but Px can only occur in a prologue context, and Bx in
                    194:    a body context.  */
                    195:
                    196: #define UNW_R1 0x00
                    197: #define UNW_R2 0x40
                    198: #define UNW_R3 0x60
                    199: #define UNW_P1 0x80
                    200: #define UNW_P2 0xA0
                    201: #define UNW_P3 0xB0
                    202: #define UNW_P4 0xB8
                    203: #define UNW_P5 0xB9
                    204: #define UNW_P6 0xC0
                    205: #define UNW_P7 0xE0
                    206: #define UNW_P8 0xF0
                    207: #define UNW_P9 0xF1
                    208: #define UNW_P10        0xFF
                    209: #define UNW_X1 0xF9
                    210: #define UNW_X2 0xFA
                    211: #define UNW_X3 0xFB
                    212: #define UNW_X4 0xFC
                    213: #define UNW_B1 0x80
                    214: #define UNW_B2 0xC0
                    215: #define UNW_B3 0xE0
                    216: #define UNW_B4 0xF0
                    217:
                    218: /* These are all the various types of unwind records.  */
                    219:
                    220: typedef enum
                    221: {
                    222:   prologue, prologue_gr, body, mem_stack_f, mem_stack_v, psp_gr, psp_sprel,
                    223:   rp_when, rp_gr, rp_br, rp_psprel, rp_sprel, pfs_when, pfs_gr, pfs_psprel,
                    224:   pfs_sprel, preds_when, preds_gr, preds_psprel, preds_sprel,
                    225:   fr_mem, frgr_mem, gr_gr, gr_mem, br_mem, br_gr, spill_base, spill_mask,
                    226:   unat_when, unat_gr, unat_psprel, unat_sprel, lc_when, lc_gr, lc_psprel,
                    227:   lc_sprel, fpsr_when, fpsr_gr, fpsr_psprel, fpsr_sprel,
                    228:   priunat_when_gr, priunat_when_mem, priunat_gr, priunat_psprel,
                    229:   priunat_sprel, bsp_when, bsp_gr, bsp_psprel, bsp_sprel, bspstore_when,
                    230:   bspstore_gr, bspstore_psprel, bspstore_sprel, rnat_when, rnat_gr,
                    231:   rnat_psprel, rnat_sprel, epilogue, label_state, copy_state,
                    232:   spill_psprel, spill_sprel, spill_reg, spill_psprel_p, spill_sprel_p,
                    233:   spill_reg_p, unwabi, endp
                    234: } unw_record_type;
                    235:
                    236: /* These structures declare the fields that can be used in each of the
                    237:    4 record formats, R, P, B and X.  */
                    238:
                    239: typedef struct unw_r_record
                    240: {
                    241:   unsigned long rlen;
                    242:   unsigned short grmask;
                    243:   unsigned short grsave;
                    244:   /* masks to represent the union of save.g, save.f, save.b, and
                    245:      save.gf: */
                    246:   unsigned long imask_size;
                    247:   struct
                    248:   {
                    249:     unsigned char *i;
                    250:     unsigned int fr_mem;
                    251:     unsigned char gr_mem;
                    252:     unsigned char br_mem;
                    253:   } mask;
                    254: } unw_r_record;
                    255:
                    256: typedef struct unw_p_record
                    257: {
                    258:   struct unw_rec_list *next;
                    259:   unsigned long t;
                    260:   unsigned long size;
                    261:   union
                    262:   {
                    263:     unsigned long sp;
                    264:     unsigned long psp;
                    265:   } off;
                    266:   union
                    267:   {
                    268:     unsigned short gr;
                    269:     unsigned short br;
                    270:   } r;
                    271:   unsigned char grmask;
                    272:   unsigned char brmask;
                    273:   unsigned int frmask;
                    274:   unsigned char abi;
                    275:   unsigned char context;
                    276: } unw_p_record;
                    277:
                    278: typedef struct unw_b_record
                    279: {
                    280:   unsigned long t;
                    281:   unsigned long label;
                    282:   unsigned short ecount;
                    283: } unw_b_record;
                    284:
                    285: typedef struct unw_x_record
                    286: {
                    287:   unsigned long t;
                    288:   union
                    289:   {
                    290:     unsigned long spoff;
                    291:     unsigned long pspoff;
                    292:     unsigned int reg;
                    293:   } where;
                    294:   unsigned short reg;
                    295:   unsigned short qp;
                    296:   unsigned short ab;   /* Value of the AB field..  */
                    297:   unsigned short xy;   /* Value of the XY field..  */
                    298: } unw_x_record;
                    299:
                    300: /* This structure is used to determine the specific record type and
                    301:    its fields.  */
                    302: typedef struct unwind_record
                    303: {
                    304:   unw_record_type type;
                    305:   union {
                    306:     unw_r_record r;
                    307:     unw_p_record p;
                    308:     unw_b_record b;
                    309:     unw_x_record x;
                    310:   } record;
                    311: } unwind_record;
                    312:
                    313: /* This expression evaluates to true if the relocation is for a local
                    314:    object for which we still want to do the relocation at runtime.
                    315:    False if we are willing to perform this relocation while building
                    316:    the .o file.  */
                    317:
                    318: /* If the reloc type is BFD_RELOC_UNUSED, then this is for a TAG13/TAG13b field
                    319:    which has no external reloc, so we must resolve the value now.  */
                    320:
                    321: #define TC_FORCE_RELOCATION_LOCAL(FIX)                 \
                    322:   ((FIX)->fx_r_type != BFD_RELOC_UNUSED                        \
                    323:    && (!(FIX)->fx_pcrel                                        \
                    324:        || (FIX)->fx_r_type == BFD_RELOC_IA64_PLTOFF22  \
                    325:        || TC_FORCE_RELOCATION (FIX)))
                    326:
                    327: /* VMS backtraces expect dwarf version 3.  */
                    328: #ifdef TE_VMS
                    329: #define DWARF2_VERSION 3
                    330: #define DWARF2_LINE_VERSION 3
                    331: #endif

CVSweb <webmaster@jp.NetBSD.org>