2000-04-21 22:22:24 +02:00
|
|
|
/* tc-ia64.h -- Header file for tc-ia64.c.
|
2014-03-05 12:46:15 +01:00
|
|
|
Copyright (C) 1998-2014 Free Software Foundation, Inc.
|
2000-04-21 22:22:24 +02:00
|
|
|
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
|
2007-07-03 13:01:12 +02:00
|
|
|
the Free Software Foundation; either version 3, or (at your option)
|
2000-04-21 22:22:24 +02:00
|
|
|
any later version.
|
|
|
|
|
|
|
|
GAS is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with GAS; see the file COPYING. If not, write to
|
2005-05-05 11:13:19 +02:00
|
|
|
the Free Software Foundation, 51 Franklin Street - Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA. */
|
2000-04-21 22:22:24 +02:00
|
|
|
|
2002-05-25 14:53:29 +02:00
|
|
|
#include "opcode/ia64.h"
|
|
|
|
#include "elf/ia64.h"
|
2000-04-21 22:22:24 +02:00
|
|
|
|
|
|
|
#define TC_IA64
|
|
|
|
|
2000-11-07 02:21:10 +01:00
|
|
|
/* Linux is little endian by default. HPUX is big endian by default. */
|
|
|
|
#ifdef TE_HPUX
|
|
|
|
#define TARGET_BYTES_BIG_ENDIAN 1
|
2002-01-11 10:27:39 +01:00
|
|
|
#define MD_FLAGS_DEFAULT EF_IA_64_BE
|
2000-11-07 02:21:10 +01:00
|
|
|
#else
|
|
|
|
#define TARGET_BYTES_BIG_ENDIAN 0
|
2002-01-11 10:27:39 +01:00
|
|
|
#define MD_FLAGS_DEFAULT EF_IA_64_ABI64
|
2000-11-07 02:21:10 +01:00
|
|
|
#endif /* TE_HPUX */
|
|
|
|
|
2008-08-13 01:39:31 +02:00
|
|
|
extern void (*ia64_number_to_chars) (char *, valueT, int);
|
2003-05-01 03:00:30 +02:00
|
|
|
#define md_number_to_chars (*ia64_number_to_chars)
|
|
|
|
|
2008-08-13 01:39:31 +02:00
|
|
|
extern void ia64_elf_section_change_hook (void);
|
2003-05-01 03:00:30 +02:00
|
|
|
#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
|
|
|
|
|
2008-08-13 01:39:31 +02:00
|
|
|
extern void ia64_adjust_symtab (void);
|
2003-05-07 21:31:10 +02:00
|
|
|
#define tc_adjust_symtab() ia64_adjust_symtab ()
|
|
|
|
|
2008-08-13 01:39:31 +02:00
|
|
|
extern void ia64_frob_file (void);
|
2003-05-07 21:31:10 +02:00
|
|
|
#define tc_frob_file() ia64_frob_file ()
|
|
|
|
|
2000-11-07 02:21:10 +01:00
|
|
|
/* 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
|
2008-08-13 01:39:31 +02:00
|
|
|
extern void ia64_init (int, char **);
|
2000-11-07 02:21:10 +01:00
|
|
|
|
|
|
|
#define TARGET_FORMAT ia64_target_format()
|
2008-08-13 01:39:31 +02:00
|
|
|
extern const char *ia64_target_format (void);
|
2000-04-21 22:22:24 +02:00
|
|
|
|
|
|
|
#define TARGET_ARCH bfd_arch_ia64
|
|
|
|
#define DOUBLESLASH_LINE_COMMENTS /* allow //-style comments */
|
|
|
|
|
|
|
|
#define NEED_LITERAL_POOL /* need gp literal pool */
|
|
|
|
#define RELOC_REQUIRES_SYMBOL
|
|
|
|
#define DIFF_EXPR_OK /* foo-. gets turned into PC relative relocs */
|
|
|
|
#define NEED_INDEX_OPERATOR /* [ ] is index operator */
|
|
|
|
|
|
|
|
#define QUOTES_IN_INSN /* allow `string "foo;bar"' */
|
2005-02-11 11:13:07 +01:00
|
|
|
#define LEX_AT (LEX_NAME|LEX_BEGIN_NAME) /* allow `@' inside name */
|
|
|
|
#define LEX_QM (LEX_NAME|LEX_BEGIN_NAME) /* allow `?' inside name */
|
2000-04-21 22:22:24 +02:00
|
|
|
#define LEX_HASH LEX_END_NAME /* allow `#' ending a name */
|
|
|
|
|
bfd:
* Makefile.am (ALL_MACHINES): Add cpu-tic6x.lo.
(ALL_MACHINES_CFILES): Add cpu-tic6x.c.
(BFD32_BACKENDS): Add elf32-tic6x.lo.
(BFD32_BACKENDS_CFILES): Add elf32-tic6x.c.
* Makefile.in: Regenerate.
* archures.c (bfd_arch_tic6x, bfd_tic6x_arch): New.
(bfd_archures_list): Update.
* config.bfd (tic6x-*-elf): New.
* configure.in (bfd_elf32_tic6x_be_vec, bfd_elf32_tic6x_le_vec):
New.
* configure: Regenerate.
* cpu-tic6x.c, elf32-tic6x.c: New.
* reloc.c (BFD_RELOC_C6000_PCR_S21, BFD_RELOC_C6000_PCR_S12,
BFD_RELOC_C6000_PCR_S10, BFD_RELOC_C6000_PCR_S7,
BFD_RELOC_C6000_ABS_S16, BFD_RELOC_C6000_ABS_L16,
BFD_RELOC_C6000_ABS_H16, BFD_RELOC_C6000_SBR_U15_B,
BFD_RELOC_C6000_SBR_U15_H, BFD_RELOC_C6000_SBR_U15_W,
BFD_RELOC_C6000_SBR_S16, BFD_RELOC_C6000_SBR_L16_B,
BFD_RELOC_C6000_SBR_L16_H, BFD_RELOC_C6000_SBR_L16_W,
BFD_RELOC_C6000_SBR_H16_B, BFD_RELOC_C6000_SBR_H16_H,
BFD_RELOC_C6000_SBR_H16_W, BFD_RELOC_C6000_SBR_GOT_U15_W,
BFD_RELOC_C6000_SBR_GOT_L16_W, BFD_RELOC_C6000_SBR_GOT_H16_W,
BFD_RELOC_C6000_DSBT_INDEX, BFD_RELOC_C6000_PREL31,
BFD_RELOC_C6000_COPY, BFD_RELOC_C6000_ALIGN,
BFD_RELOC_C6000_FPHEAD, BFD_RELOC_C6000_NOCMP): New.
* targets.c (bfd_elf32_tic6x_be_vec, bfd_elf32_tic6x_le_vec): New.
(_bfd_target_vector): Update.
* bfd-in2.h, libbfd.h: Regenerate.
binutils:
* MAINTAINERS: Add self as TI C6X maintainer.
* NEWS: Add news entry for TI C6X support.
* readelf.c: Include elf/tic6x.h.
(guess_is_rela): Handle EM_TI_C6000.
(dump_relocations): Likewise.
(get_tic6x_dynamic_type): New.
(get_dynamic_type): Call it.
(get_machine_flags): Handle EF_C6000_REL.
(get_osabi_name): Handle machine-specific values only for relevant
machines. Handle C6X values.
(get_tic6x_segment_type): New.
(get_segment_type): Call it.
(get_tic6x_section_type_name): New.
(get_section_type_name): Call it.
(is_32bit_abs_reloc, is_16bit_abs_reloc, is_none_reloc): Handle
EM_TI_C6000.
gas:
* Makefile.am (TARGET_CPU_CFILES): Add config/tc-tic6x.c.
(TARGET_CPU_HFILES): Add config/tc-tic6x.h.
* Makefile.in: Regenerate.
* NEWS: Add news entry for TI C6X support.
* app.c (do_scrub_chars): Handle "||^" for TI C6X. Handle
TC_PREDICATE_START_CHAR and TC_PREDICATE_END_CHAR. Keep spaces in
operands if TC_KEEP_OPERAND_SPACES.
* configure.tgt (tic6x-*-*): New.
* config/tc-ia64.h (TC_PREDICATE_START_CHAR,
TC_PREDICATE_END_CHAR): Define.
* config/tc-tic6x.c, config/tc-tic6x.h: New.
* doc/Makefile.am (CPU_DOCS): Add c-tic6x.texi.
* doc/Makefile.in: Regenerate.
* doc/all.texi (TIC6X): Define.
* doc/as.texinfo: Add TI C6X documentation. Include c-tic6x.texi.
* doc/c-tic6x.texi: New.
gas/testsuite:
* gas/tic6x: New directory and testcases.
include:
* dis-asm.h (print_insn_tic6x): Declare.
include/elf:
* common.h (ELFOSABI_C6000_ELFABI, ELFOSABI_C6000_LINUX): Define.
* tic6x.h: New.
include/opcode:
* tic6x-control-registers.h, tic6x-insn-formats.h,
tic6x-opcode-table.h, tic6x.h: New.
ld:
* Makefile.am (ALL_EMULATIONS): Add eelf32_tic6x_be.o and
eelf32_tic6x_le.o.
(eelf32_tic6x_be.c, eelf32_tic6x_le.c): New.
* NEWS: Add news entry for TI C6X support.
* configure.tgt (tic6x-*-*): New.
* emulparams/elf32_tic6x_be.sh, emulparams/elf32_tic6x_le.sh: New.
ld/testsuite:
* ld-elf/flags1.d, ld-elf/merge.d: XFAIL for tic6x-*-*.
* ld-elf/sec-to-seg.exp: Set B_test_same_seg to 0 for tic6x-*-*.
* ld-tic6x: New directory and testcases.
opcodes:
* Makefile.am (TARGET_LIBOPCODES_CFILES): Add tic6x-dis.c.
* Makefile.in: Regenerate.
* configure.in (bfd_tic6x_arch): New.
* configure: Regenerate.
* disassemble.c (ARCH_tic6x): Define if ARCH_all.
(disassembler): Handle TI C6X.
* tic6x-dis.c: New.
2010-03-25 22:12:36 +01:00
|
|
|
#define TC_PREDICATE_START_CHAR '('
|
|
|
|
#define TC_PREDICATE_END_CHAR ')'
|
|
|
|
|
2005-02-15 08:32:14 +01:00
|
|
|
extern const char ia64_symbol_chars[];
|
|
|
|
#define tc_symbol_chars ia64_symbol_chars
|
|
|
|
|
2003-05-01 02:53:39 +02:00
|
|
|
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
|
|
|
|
|
2000-04-21 22:22:24 +02:00
|
|
|
struct ia64_fix
|
|
|
|
{
|
|
|
|
int bigendian; /* byte order at fix location */
|
|
|
|
enum ia64_opnd opnd;
|
|
|
|
};
|
|
|
|
|
2008-08-13 01:39:31 +02:00
|
|
|
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 *);
|
2004-02-11 02:35:14 +01:00
|
|
|
#ifdef TE_HPUX
|
2008-08-13 01:39:31 +02:00
|
|
|
extern int ia64_frob_symbol (struct symbol *);
|
2004-02-11 02:35:14 +01:00
|
|
|
#endif
|
2008-08-13 01:39:31 +02:00
|
|
|
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 *);
|
gas TC_PARSE_CONS_EXPRESSION communication with TC_CONS_FIX_NEW
A number of targets pass extra information from TC_PARSE_CONS_EXPRESSION
to TC_CONS_FIX_NEW via static variables. That's OK, but not best
practice. tc-ppc.c goes further in implementing its own replacement
for cons(), because the generic one doesn't allow relocation modifiers
on constants. This patch fixes both of these warts.
* gas/config/tc-alpha.h (TC_CONS_FIX_NEW): Add RELOC parameter.
* gas/config/tc-arc.c (arc_cons_fix_new): Add reloc parameter.
* gas/config/tc-arc.h (arc_cons_fix_new): Update prototype.
(TC_CONS_FIX_NEW): Add RELOC parameter.
* gas/config/tc-arm.c (cons_fix_new_arm): Similarly
* gas/config/tc-arm.h (cons_fix_new_arm, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-cr16.c (cr16_cons_fix_new): Similarly.
* gas/config/tc-cr16.h (cr16_cons_fix_new, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-crx.h (TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-m32c.c (m32c_cons_fix_new): Similarly.
* gas/config/tc-m32c.h (m32c_cons_fix_new, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-mn10300.c (mn10300_cons_fix_new): Similarly.
* gas/config/tc-mn10300.h (mn10300_cons_fix_new, TC_CONS_FIX_NEW):
Similarly.
* gas/config/tc-ns32k.c (cons_fix_new_ns32k): Similarly.
* gas/config/tc-ns32k.h (cons_fix_new_ns32k): Similarly.
* gas/config/tc-pj.c (pj_cons_fix_new_pj): Similarly.
* gas/config/tc-pj.h (pj_cons_fix_new_pj, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-rx.c (rx_cons_fix_new): Similarly.
* gas/config/tc-rx.h (rx_cons_fix_new, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-sh.c (sh_cons_fix_new): Similarly.
* gas/config/tc-sh.h (sh_cons_fix_new, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-tic54x.c (tic54x_cons_fix_new): Similarly.
* gas/config/tc-tic54x.h (tic54x_cons_fix_new, TC_CONS_FIX_NEW):
Similarly.
* gas/config/tc-tic6x.c (tic6x_cons_fix_new): Similarly.
* gas/config/tc-tic6x.h (tic6x_cons_fix_new, TC_CONS_FIX_NEW):
Similarly.
* gas/config/tc-arc.c (arc_parse_cons_expression): Return reloc.
* gas/config/tc-arc.h (arc_parse_cons_expression): Update proto.
* gas/config/tc-avr.c (exp_mod_data): Make global.
(pexp_mod_data): Delete.
(avr_parse_cons_expression): Return exp_mod_data pointer.
(avr_cons_fix_new): Add exp_mod_data_t pointer param.
(exp_mod_data_t): Move typedef..
* gas/config/tc-avr.h: ..to here.
(exp_mod_data): Declare.
(TC_PARSE_CONS_RETURN_TYPE, TC_PARSE_CONS_RETURN_NONE): Define.
(avr_parse_cons_expression, avr_cons_fix_new): Update prototype.
(TC_CONS_FIX_NEW): Update.
* gas/config/tc-hppa.c (hppa_field_selector): Delete static var.
(cons_fix_new_hppa): Add hppa_field_selector param.
(fix_new_hppa): Adjust.
(parse_cons_expression_hppa): Return field selector.
* gas/config/tc-hppa.h (parse_cons_expression_hppa): Update proto.
(cons_fix_new_hppa): Likewise.
(TC_PARSE_CONS_RETURN_TYPE, TC_PARSE_CONS_RETURN_NONE): Define.
* gas/config/tc-i386.c (got_reloc): Delete static var.
(x86_cons_fix_new): Add reloc param.
(x86_cons): Return got reloc.
* gas/config/tc-i386.h (x86_cons, x86_cons_fix_new): Update proto.
(TC_CONS_FIX_NEW): Add RELOC param.
* gas/config/tc-ia64.c (ia64_cons_fix_new): Add reloc param. Adjust
calls.
* gas/config/tc-ia64.h (ia64_cons_fix_new): Update prototype.
(TC_CONS_FIX_NEW): Add reloc param.
* gas/config/tc-microblaze.c (parse_cons_expression_microblaze):
Return reloc.
(cons_fix_new_microblaze): Add reloc param.
* gas/config/tc-microblaze.h: Formatting.
(parse_cons_expression_microblaze): Update proto.
(cons_fix_new_microblaze): Likewise.
* gas/config/tc-nios2.c (nios2_tls_ldo_reloc): Delete static var.
(nios2_cons): Return ldo reloc.
(nios2_cons_fix_new): Delete.
* gas/config/tc-nios2.h (nios2_cons): Update prototype.
(nios2_cons_fix_new, TC_CONS_FIX_NEW): Delete.
* gas/config/tc-ppc.c (md_pseudo_table): Remove quad, long, word,
short. Make llong use cons.
(ppc_elf_suffix): Return BFD_RELOC_NONE rather than BFD_RELOC_UNUSED.
(ppc_elf_cons): Delete.
(ppc_elf_parse_cons): New function.
(ppc_elf_validate_fix): Don't check for BFD_RELOC_UNUSED.
(md_assemble): Use BFD_RELOC_NONE rather than BFD_RELOC_UNUSED.
* gas/config/tc-ppc.h (TC_PARSE_CONS_EXPRESSION): Define
(ppc_elf_parse_cons): Declare.
* gas/config/tc-sparc.c (sparc_cons_special_reloc): Delete static var.
(sparc_cons): Return reloc specifier.
(cons_fix_new_sparc): Add reloc specifier param.
(sparc_cfi_emit_pcrel_expr): Use emit_expr_with_reloc.
* gas/config/tc-sparc.h (TC_PARSE_CONS_RETURN_TYPE): Define.
(TC_PARSE_CONS_RETURN_NONE): Define.
(sparc_cons, cons_fix_new_sparc): Update prototype.
* gas/config/tc-v850.c (hold_cons_reloc): Delete static var.
(v850_reloc_prefix): Use BFD_RELOC_NONE rather than BFD_RELOC_UNUSED.
(md_assemble): Likewise.
(parse_cons_expression_v850): Return reloc.
(cons_fix_new_v850): Add reloc parameter.
* gas/config/tc-v850.h (parse_cons_expression_v850): Update proto.
(cons_fix_new_v850): Likewise.
* gas/config/tc-vax.c (vax_cons_special_reloc): Delete static var.
(vax_cons): Return reloc.
(vax_cons_fix_new): Add reloc parameter.
* gas/config/tc-vax.h (vax_cons, vax_cons_fix_new): Update proto.
* gas/config/tc-xstormy16.c (xstormy16_cons_fix_new): Add reloc param.
* gas/config/tc-xstormy16.h (xstormy16_cons_fix_new): Update proto.
* gas/dwarf2dbg.c (TC_PARSE_CONS_RETURN_NONE): Provide default.
(emit_fixed_inc_line_addr): Adjust exmit_expr_fix calls.
* gas/read.c (TC_PARSE_CONS_EXPRESSION): Return value.
(do_parse_cons_expression): Adjust.
(cons_worker): Pass return value from TC_PARSE_CONS_EXPRESSION
to emit_expr_with_reloc.
(emit_expr_with_reloc): New function handling reloc, mostly
extracted from..
(emit_expr): ..here.
(emit_expr_fix): Add reloc param. Adjust TC_CONS_FIX_NEW invocation.
Handle reloc.
(parse_mri_cons): Convert to ISO.
* gas/read.h (TC_PARSE_CONS_RETURN_TYPE): Define.
(TC_PARSE_CONS_RETURN_NONE): Define.
(emit_expr_with_reloc): Declare.
(emit_expr_fix): Update prototype.
* gas/write.c (write_object_file): Update TC_CONS_FIX_NEW invocation.
2014-04-08 07:08:22 +02:00
|
|
|
extern void ia64_cons_fix_new (fragS *, int, int, expressionS *,
|
|
|
|
bfd_reloc_code_real_type);
|
2008-08-13 01:39:31 +02:00
|
|
|
extern void ia64_validate_fix (struct fix *);
|
|
|
|
extern char * ia64_canonicalize_symbol_name (char *);
|
* include/elf/ia64.h (SHT_IA_64_VMS_DISPLAY_NAME_INFO,
EF_IA_64_ARCHVER_1): New macros. Minor reformatting.
* bfd/Makefile.am (BFD32_BACKENDS): Add new object vmsutil.lo
(BFD32_BACKENDS_CFILES): Add new file vmsutil.c
(vmsutil.lo): Add dependency rule
* bfd/Makefile.in: Regenerate
* bfd/config.bfd (ia64*-*-*vms*): Add case.
* bfd/configure.in (bfd_elf64_ia64_vms_vec): Add case.
* bfd/configure: Regenerate
* bfd/vmsutil.[ch]: New files
* bfd/elf-bfd.h (struct bfd_elf_special_section): Change type of
attr to bfd_vma.
* bfd/elfxx-ia64.c (elfNN_vms_post_process_headers,
elfNN_vms_section_processing, elfNN_vms_final_write_processing,
elfNN_vms_close_and_cleanup, elfNN_vms_section_from_shdr,
elfNN_vms_object_p): New functions
* bfd/targets.c (bfd_elf64_ia64_vms_vec): New target.
* gas/configure.tgt(ia64-*-*vms*): New target.
* gas/dwarf2dbg.h (dwarf2_loc_mark_labels): Make extern.
* gas/tc.h (md_number_to_chars): Declare iff undefined.
* gas/config/obj-elf.c (obj_elf_change_section): Change type of
arg attr to bfd_vma.
(obj_elf_parse_section_letters): Return a bfd_vma. Change type of
variables attr, md_attr to bfd_vma.
(obj_elf_section_word): Likewise.
(obj_elf_section): Change type of variable attr to bfd_vma
* gas/config/obj-elf.h (obj_elf_change_section): Change type of
arg attr to bfd_vma
* gas/config/tc-ia64.c (bfdver.h,time.h): Include.
(ia64_elf_section_letter): Now returns a bfd_vma.
Handle VMS specific attributes.
(ia64_elf_section_flags): Arg attr now a bfd_vma.
(ia64_init): Don't turn on dependency checking for VMS.
(ia64_target_format): Check for VMS flag bit.
(do_alias): Hande decc$ functions.
(get_vms_time): New function.
(ia64_vms_note): New function.
* gas/config/tc-ia64.h (ia64_elf_section_letter): Now returns a bfd_vma.
(ia64_elf_section_flags): Arg attr now a bfd_vma.
(tc_init_after_args): Define for VMS.
* gas/config/tc-alpha.c (alpha_elf_section_letter): Return a bfd_vma.
(alpha_elf_section_flags): Change type of arg attr to bfd_vma.
* gas/config/tc-alpha.h: Likewise.
* gas/config/tc-i386.c (x86_64_section_letter): Return a bfd_vma.
(x86_64_section_word): Return a bfd_vma.
* gas/config/tc-i386.h: Likewise.
* gas/config/tc-ip2k.c (ip2k_elf_section_flags): Change type of arg
attr to bfd_vma.
* gas/config/tc-ip2k.h: Likewise.
* gas/config/tc-mep.c (mep_elf_section_letter): Return a bfd_vma.
(mep_elf_section_flags): Change type of arg attr to bfd_vma.
* gas/config/tc-mep.h: Likewise.
* gas/config/tc-ppc.c (ppc_section_letter): Return a bfd_vma.
(ppc_section_word): Return a bfd_vma.
(ppc_section_flags): Change type of arg attr to bfd_vma.
* gas/config/tc-ppc.h: Likewise.
* gas/config/te-vms.h (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
DWAR2_FILE_TIME_NAME, DWARF2_FILE_SIZE_NAME, DWARF2_FILEN_NAME):
New file with new macros
* gas/dwarf2dbg.c (get_filenum, out_file_list): Default and call new
macros.
2009-01-15 13:42:52 +01:00
|
|
|
extern bfd_vma ia64_elf_section_letter (int, char **);
|
|
|
|
extern flagword ia64_elf_section_flags (flagword, bfd_vma, int);
|
2008-08-13 01:39:31 +02:00
|
|
|
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 *);
|
2004-02-21 01:24:15 +01:00
|
|
|
extern int ia64_estimate_size_before_relax (fragS *, asection *);
|
2004-01-07 20:19:35 +01:00
|
|
|
extern void ia64_convert_frag (fragS *);
|
2000-04-21 22:22:24 +02:00
|
|
|
|
|
|
|
#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)
|
2004-02-11 02:35:14 +01:00
|
|
|
#ifdef TE_HPUX
|
|
|
|
#define tc_frob_symbol(s,p) p |= ia64_frob_symbol (s)
|
|
|
|
#endif /* TE_HPUX */
|
2000-04-21 22:22:24 +02:00
|
|
|
#define md_flush_pending_output() ia64_flush_pending_output ()
|
2005-10-11 13:16:17 +02:00
|
|
|
#define md_parse_name(s,e,m,c) ia64_parse_name (s, e, c)
|
2007-09-26 10:34:24 +02:00
|
|
|
#define md_register_arithmetic 0
|
2000-04-21 22:22:24 +02:00
|
|
|
#define tc_canonicalize_symbol_name(s) ia64_canonicalize_symbol_name (s)
|
2003-05-02 04:46:36 +02:00
|
|
|
#define tc_canonicalize_section_name(s) ia64_canonicalize_symbol_name (s)
|
2000-04-21 22:22:24 +02:00
|
|
|
#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)
|
2002-09-05 02:01:18 +02:00
|
|
|
#define MD_APPLY_SYM_VALUE(FIX) 0
|
2004-01-07 20:19:35 +01:00
|
|
|
#define md_convert_frag(b,s,f) ia64_convert_frag (f)
|
2001-07-23 16:02:13 +02:00
|
|
|
#define md_create_long_jump(p,f,t,fr,s) as_fatal ("ia64_create_long_jump")
|
2000-04-21 22:22:24 +02:00
|
|
|
#define md_create_short_jump(p,f,t,fr,s) \
|
2001-07-23 16:02:13 +02:00
|
|
|
as_fatal ("ia64_create_short_jump")
|
2000-04-21 22:22:24 +02:00
|
|
|
#define md_estimate_size_before_relax(f,s) \
|
2004-02-21 01:24:15 +01:00
|
|
|
ia64_estimate_size_before_relax(f,s)
|
2001-09-11 20:26:04 +02:00
|
|
|
#define md_elf_section_letter ia64_elf_section_letter
|
2000-04-21 22:22:24 +02:00
|
|
|
#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; }
|
gas TC_PARSE_CONS_EXPRESSION communication with TC_CONS_FIX_NEW
A number of targets pass extra information from TC_PARSE_CONS_EXPRESSION
to TC_CONS_FIX_NEW via static variables. That's OK, but not best
practice. tc-ppc.c goes further in implementing its own replacement
for cons(), because the generic one doesn't allow relocation modifiers
on constants. This patch fixes both of these warts.
* gas/config/tc-alpha.h (TC_CONS_FIX_NEW): Add RELOC parameter.
* gas/config/tc-arc.c (arc_cons_fix_new): Add reloc parameter.
* gas/config/tc-arc.h (arc_cons_fix_new): Update prototype.
(TC_CONS_FIX_NEW): Add RELOC parameter.
* gas/config/tc-arm.c (cons_fix_new_arm): Similarly
* gas/config/tc-arm.h (cons_fix_new_arm, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-cr16.c (cr16_cons_fix_new): Similarly.
* gas/config/tc-cr16.h (cr16_cons_fix_new, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-crx.h (TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-m32c.c (m32c_cons_fix_new): Similarly.
* gas/config/tc-m32c.h (m32c_cons_fix_new, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-mn10300.c (mn10300_cons_fix_new): Similarly.
* gas/config/tc-mn10300.h (mn10300_cons_fix_new, TC_CONS_FIX_NEW):
Similarly.
* gas/config/tc-ns32k.c (cons_fix_new_ns32k): Similarly.
* gas/config/tc-ns32k.h (cons_fix_new_ns32k): Similarly.
* gas/config/tc-pj.c (pj_cons_fix_new_pj): Similarly.
* gas/config/tc-pj.h (pj_cons_fix_new_pj, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-rx.c (rx_cons_fix_new): Similarly.
* gas/config/tc-rx.h (rx_cons_fix_new, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-sh.c (sh_cons_fix_new): Similarly.
* gas/config/tc-sh.h (sh_cons_fix_new, TC_CONS_FIX_NEW): Similarly.
* gas/config/tc-tic54x.c (tic54x_cons_fix_new): Similarly.
* gas/config/tc-tic54x.h (tic54x_cons_fix_new, TC_CONS_FIX_NEW):
Similarly.
* gas/config/tc-tic6x.c (tic6x_cons_fix_new): Similarly.
* gas/config/tc-tic6x.h (tic6x_cons_fix_new, TC_CONS_FIX_NEW):
Similarly.
* gas/config/tc-arc.c (arc_parse_cons_expression): Return reloc.
* gas/config/tc-arc.h (arc_parse_cons_expression): Update proto.
* gas/config/tc-avr.c (exp_mod_data): Make global.
(pexp_mod_data): Delete.
(avr_parse_cons_expression): Return exp_mod_data pointer.
(avr_cons_fix_new): Add exp_mod_data_t pointer param.
(exp_mod_data_t): Move typedef..
* gas/config/tc-avr.h: ..to here.
(exp_mod_data): Declare.
(TC_PARSE_CONS_RETURN_TYPE, TC_PARSE_CONS_RETURN_NONE): Define.
(avr_parse_cons_expression, avr_cons_fix_new): Update prototype.
(TC_CONS_FIX_NEW): Update.
* gas/config/tc-hppa.c (hppa_field_selector): Delete static var.
(cons_fix_new_hppa): Add hppa_field_selector param.
(fix_new_hppa): Adjust.
(parse_cons_expression_hppa): Return field selector.
* gas/config/tc-hppa.h (parse_cons_expression_hppa): Update proto.
(cons_fix_new_hppa): Likewise.
(TC_PARSE_CONS_RETURN_TYPE, TC_PARSE_CONS_RETURN_NONE): Define.
* gas/config/tc-i386.c (got_reloc): Delete static var.
(x86_cons_fix_new): Add reloc param.
(x86_cons): Return got reloc.
* gas/config/tc-i386.h (x86_cons, x86_cons_fix_new): Update proto.
(TC_CONS_FIX_NEW): Add RELOC param.
* gas/config/tc-ia64.c (ia64_cons_fix_new): Add reloc param. Adjust
calls.
* gas/config/tc-ia64.h (ia64_cons_fix_new): Update prototype.
(TC_CONS_FIX_NEW): Add reloc param.
* gas/config/tc-microblaze.c (parse_cons_expression_microblaze):
Return reloc.
(cons_fix_new_microblaze): Add reloc param.
* gas/config/tc-microblaze.h: Formatting.
(parse_cons_expression_microblaze): Update proto.
(cons_fix_new_microblaze): Likewise.
* gas/config/tc-nios2.c (nios2_tls_ldo_reloc): Delete static var.
(nios2_cons): Return ldo reloc.
(nios2_cons_fix_new): Delete.
* gas/config/tc-nios2.h (nios2_cons): Update prototype.
(nios2_cons_fix_new, TC_CONS_FIX_NEW): Delete.
* gas/config/tc-ppc.c (md_pseudo_table): Remove quad, long, word,
short. Make llong use cons.
(ppc_elf_suffix): Return BFD_RELOC_NONE rather than BFD_RELOC_UNUSED.
(ppc_elf_cons): Delete.
(ppc_elf_parse_cons): New function.
(ppc_elf_validate_fix): Don't check for BFD_RELOC_UNUSED.
(md_assemble): Use BFD_RELOC_NONE rather than BFD_RELOC_UNUSED.
* gas/config/tc-ppc.h (TC_PARSE_CONS_EXPRESSION): Define
(ppc_elf_parse_cons): Declare.
* gas/config/tc-sparc.c (sparc_cons_special_reloc): Delete static var.
(sparc_cons): Return reloc specifier.
(cons_fix_new_sparc): Add reloc specifier param.
(sparc_cfi_emit_pcrel_expr): Use emit_expr_with_reloc.
* gas/config/tc-sparc.h (TC_PARSE_CONS_RETURN_TYPE): Define.
(TC_PARSE_CONS_RETURN_NONE): Define.
(sparc_cons, cons_fix_new_sparc): Update prototype.
* gas/config/tc-v850.c (hold_cons_reloc): Delete static var.
(v850_reloc_prefix): Use BFD_RELOC_NONE rather than BFD_RELOC_UNUSED.
(md_assemble): Likewise.
(parse_cons_expression_v850): Return reloc.
(cons_fix_new_v850): Add reloc parameter.
* gas/config/tc-v850.h (parse_cons_expression_v850): Update proto.
(cons_fix_new_v850): Likewise.
* gas/config/tc-vax.c (vax_cons_special_reloc): Delete static var.
(vax_cons): Return reloc.
(vax_cons_fix_new): Add reloc parameter.
* gas/config/tc-vax.h (vax_cons, vax_cons_fix_new): Update proto.
* gas/config/tc-xstormy16.c (xstormy16_cons_fix_new): Add reloc param.
* gas/config/tc-xstormy16.h (xstormy16_cons_fix_new): Update proto.
* gas/dwarf2dbg.c (TC_PARSE_CONS_RETURN_NONE): Provide default.
(emit_fixed_inc_line_addr): Adjust exmit_expr_fix calls.
* gas/read.c (TC_PARSE_CONS_EXPRESSION): Return value.
(do_parse_cons_expression): Adjust.
(cons_worker): Pass return value from TC_PARSE_CONS_EXPRESSION
to emit_expr_with_reloc.
(emit_expr_with_reloc): New function handling reloc, mostly
extracted from..
(emit_expr): ..here.
(emit_expr_fix): Add reloc param. Adjust TC_CONS_FIX_NEW invocation.
Handle reloc.
(parse_mri_cons): Convert to ISO.
* gas/read.h (TC_PARSE_CONS_RETURN_TYPE): Define.
(TC_PARSE_CONS_RETURN_NONE): Define.
(emit_expr_with_reloc): Declare.
(emit_expr_fix): Update prototype.
* gas/write.c (write_object_file): Update TC_CONS_FIX_NEW invocation.
2014-04-08 07:08:22 +02:00
|
|
|
#define TC_CONS_FIX_NEW(f,o,l,e,r) ia64_cons_fix_new (f, o, l, e, r)
|
2000-04-21 22:22:24 +02:00
|
|
|
#define TC_VALIDATE_FIX(fix,seg,skip) ia64_validate_fix (fix)
|
|
|
|
#define MD_PCREL_FROM_SECTION(fix,sec) ia64_pcrel_from_section (fix, sec)
|
2003-05-01 02:53:39 +02:00
|
|
|
#define md_section_align(seg,size) (size)
|
2000-12-28 11:07:56 +01:00
|
|
|
#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)
|
2001-02-10 02:42:04 +01:00
|
|
|
#define md_elf_section_type(str,len) ia64_elf_section_type (str, len)
|
2001-11-28 18:00:46 +01:00
|
|
|
#define md_after_parse_args() ia64_after_parse_args ()
|
2003-03-11 23:00:33 +01:00
|
|
|
#define TC_DWARF2_EMIT_OFFSET ia64_dwarf2_emit_offset
|
2003-05-02 04:41:45 +02:00
|
|
|
#define tc_check_label(l) ia64_check_label (l)
|
* include/elf/ia64.h (SHT_IA_64_VMS_DISPLAY_NAME_INFO,
EF_IA_64_ARCHVER_1): New macros. Minor reformatting.
* bfd/Makefile.am (BFD32_BACKENDS): Add new object vmsutil.lo
(BFD32_BACKENDS_CFILES): Add new file vmsutil.c
(vmsutil.lo): Add dependency rule
* bfd/Makefile.in: Regenerate
* bfd/config.bfd (ia64*-*-*vms*): Add case.
* bfd/configure.in (bfd_elf64_ia64_vms_vec): Add case.
* bfd/configure: Regenerate
* bfd/vmsutil.[ch]: New files
* bfd/elf-bfd.h (struct bfd_elf_special_section): Change type of
attr to bfd_vma.
* bfd/elfxx-ia64.c (elfNN_vms_post_process_headers,
elfNN_vms_section_processing, elfNN_vms_final_write_processing,
elfNN_vms_close_and_cleanup, elfNN_vms_section_from_shdr,
elfNN_vms_object_p): New functions
* bfd/targets.c (bfd_elf64_ia64_vms_vec): New target.
* gas/configure.tgt(ia64-*-*vms*): New target.
* gas/dwarf2dbg.h (dwarf2_loc_mark_labels): Make extern.
* gas/tc.h (md_number_to_chars): Declare iff undefined.
* gas/config/obj-elf.c (obj_elf_change_section): Change type of
arg attr to bfd_vma.
(obj_elf_parse_section_letters): Return a bfd_vma. Change type of
variables attr, md_attr to bfd_vma.
(obj_elf_section_word): Likewise.
(obj_elf_section): Change type of variable attr to bfd_vma
* gas/config/obj-elf.h (obj_elf_change_section): Change type of
arg attr to bfd_vma
* gas/config/tc-ia64.c (bfdver.h,time.h): Include.
(ia64_elf_section_letter): Now returns a bfd_vma.
Handle VMS specific attributes.
(ia64_elf_section_flags): Arg attr now a bfd_vma.
(ia64_init): Don't turn on dependency checking for VMS.
(ia64_target_format): Check for VMS flag bit.
(do_alias): Hande decc$ functions.
(get_vms_time): New function.
(ia64_vms_note): New function.
* gas/config/tc-ia64.h (ia64_elf_section_letter): Now returns a bfd_vma.
(ia64_elf_section_flags): Arg attr now a bfd_vma.
(tc_init_after_args): Define for VMS.
* gas/config/tc-alpha.c (alpha_elf_section_letter): Return a bfd_vma.
(alpha_elf_section_flags): Change type of arg attr to bfd_vma.
* gas/config/tc-alpha.h: Likewise.
* gas/config/tc-i386.c (x86_64_section_letter): Return a bfd_vma.
(x86_64_section_word): Return a bfd_vma.
* gas/config/tc-i386.h: Likewise.
* gas/config/tc-ip2k.c (ip2k_elf_section_flags): Change type of arg
attr to bfd_vma.
* gas/config/tc-ip2k.h: Likewise.
* gas/config/tc-mep.c (mep_elf_section_letter): Return a bfd_vma.
(mep_elf_section_flags): Change type of arg attr to bfd_vma.
* gas/config/tc-mep.h: Likewise.
* gas/config/tc-ppc.c (ppc_section_letter): Return a bfd_vma.
(ppc_section_word): Return a bfd_vma.
(ppc_section_flags): Change type of arg attr to bfd_vma.
* gas/config/tc-ppc.h: Likewise.
* gas/config/te-vms.h (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
DWAR2_FILE_TIME_NAME, DWARF2_FILE_SIZE_NAME, DWARF2_FILEN_NAME):
New file with new macros
* gas/dwarf2dbg.c (get_filenum, out_file_list): Default and call new
macros.
2009-01-15 13:42:52 +01:00
|
|
|
#ifdef TE_VMS
|
|
|
|
#define tc_init_after_args() ia64_vms_note ()
|
|
|
|
void ia64_vms_note (void);
|
|
|
|
#endif
|
2000-12-28 11:07:56 +01:00
|
|
|
|
2004-03-03 05:37:38 +01:00
|
|
|
/* Record if an alignment frag should end with a stop bit. */
|
|
|
|
#define TC_FRAG_TYPE int
|
|
|
|
#define TC_FRAG_INIT(FRAGP) do {(FRAGP)->tc_frag_data = 0;}while (0)
|
|
|
|
|
2004-07-04 02:29:21 +02:00
|
|
|
/* 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"));
|
|
|
|
|
2000-12-28 11:07:56 +01:00
|
|
|
#define MAX_MEM_FOR_RS_ALIGN_CODE (15 + 16)
|
2000-04-21 22:22:24 +02:00
|
|
|
|
|
|
|
#define WORKING_DOT_WORD /* don't do broken word processing for now */
|
|
|
|
|
|
|
|
#define DWARF2_LINE_MIN_INSN_LENGTH 1 /* so slot-multipliers can be 1 */
|
|
|
|
|
|
|
|
/* This is the information required for unwind records in an ia64
|
2000-09-16 02:56:47 +02:00
|
|
|
object file. This is required by GAS and the compiler runtime. */
|
2000-04-21 22:22:24 +02:00
|
|
|
|
|
|
|
/* These are the starting point masks for the various types of
|
|
|
|
unwind records. To create a record of type R3 for instance, one
|
2000-09-16 02:56:47 +02:00
|
|
|
starts by using the value UNW_R3 and or-ing in any other required values.
|
|
|
|
These values are also unique (in context), so they can be used to identify
|
2000-04-21 22:22:24 +02:00
|
|
|
the various record types as well. UNW_Bx and some UNW_Px do have the
|
|
|
|
same value, but Px can only occur in a prologue context, and Bx in
|
|
|
|
a body context. */
|
|
|
|
|
|
|
|
#define UNW_R1 0x00
|
|
|
|
#define UNW_R2 0x40
|
|
|
|
#define UNW_R3 0x60
|
|
|
|
#define UNW_P1 0x80
|
|
|
|
#define UNW_P2 0xA0
|
|
|
|
#define UNW_P3 0xB0
|
|
|
|
#define UNW_P4 0xB8
|
|
|
|
#define UNW_P5 0xB9
|
|
|
|
#define UNW_P6 0xC0
|
|
|
|
#define UNW_P7 0xE0
|
|
|
|
#define UNW_P8 0xF0
|
|
|
|
#define UNW_P9 0xF1
|
|
|
|
#define UNW_P10 0xFF
|
|
|
|
#define UNW_X1 0xF9
|
|
|
|
#define UNW_X2 0xFA
|
|
|
|
#define UNW_X3 0xFB
|
|
|
|
#define UNW_X4 0xFC
|
|
|
|
#define UNW_B1 0x80
|
|
|
|
#define UNW_B2 0xC0
|
|
|
|
#define UNW_B3 0xE0
|
|
|
|
#define UNW_B4 0xF0
|
|
|
|
|
|
|
|
/* These are all the various types of unwind records. */
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
prologue, prologue_gr, body, mem_stack_f, mem_stack_v, psp_gr, psp_sprel,
|
|
|
|
rp_when, rp_gr, rp_br, rp_psprel, rp_sprel, pfs_when, pfs_gr, pfs_psprel,
|
|
|
|
pfs_sprel, preds_when, preds_gr, preds_psprel, preds_sprel,
|
|
|
|
fr_mem, frgr_mem, gr_gr, gr_mem, br_mem, br_gr, spill_base, spill_mask,
|
|
|
|
unat_when, unat_gr, unat_psprel, unat_sprel, lc_when, lc_gr, lc_psprel,
|
2000-09-16 02:56:47 +02:00
|
|
|
lc_sprel, fpsr_when, fpsr_gr, fpsr_psprel, fpsr_sprel,
|
|
|
|
priunat_when_gr, priunat_when_mem, priunat_gr, priunat_psprel,
|
2000-04-21 22:22:24 +02:00
|
|
|
priunat_sprel, bsp_when, bsp_gr, bsp_psprel, bsp_sprel, bspstore_when,
|
|
|
|
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,
|
2004-02-06 00:50:21 +01:00
|
|
|
spill_reg_p, unwabi, endp
|
2000-04-21 22:22:24 +02:00
|
|
|
} unw_record_type;
|
|
|
|
|
2000-09-16 02:56:47 +02:00
|
|
|
/* These structures declare the fields that can be used in each of the
|
2000-04-21 22:22:24 +02:00
|
|
|
4 record formats, R, P, B and X. */
|
|
|
|
|
|
|
|
typedef struct unw_r_record
|
|
|
|
{
|
|
|
|
unsigned long rlen;
|
2000-05-25 04:00:14 +02:00
|
|
|
unsigned short grmask;
|
2000-04-21 22:22:24 +02:00
|
|
|
unsigned short grsave;
|
2000-05-25 04:00:14 +02:00
|
|
|
/* masks to represent the union of save.g, save.f, save.b, and
|
|
|
|
save.gf: */
|
|
|
|
unsigned long imask_size;
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
unsigned char *i;
|
2005-07-27 08:32:46 +02:00
|
|
|
unsigned int fr_mem;
|
2000-05-25 04:00:14 +02:00
|
|
|
unsigned char gr_mem;
|
|
|
|
unsigned char br_mem;
|
|
|
|
} mask;
|
2000-04-21 22:22:24 +02:00
|
|
|
} unw_r_record;
|
|
|
|
|
|
|
|
typedef struct unw_p_record
|
|
|
|
{
|
2005-07-27 08:32:46 +02:00
|
|
|
struct unw_rec_list *next;
|
2000-04-21 22:22:24 +02:00
|
|
|
unsigned long t;
|
|
|
|
unsigned long size;
|
2005-07-27 08:32:46 +02:00
|
|
|
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;
|
2000-05-25 04:00:14 +02:00
|
|
|
unsigned char abi;
|
|
|
|
unsigned char context;
|
2000-04-21 22:22:24 +02:00
|
|
|
} unw_p_record;
|
|
|
|
|
|
|
|
typedef struct unw_b_record
|
|
|
|
{
|
|
|
|
unsigned long t;
|
|
|
|
unsigned long label;
|
|
|
|
unsigned short ecount;
|
|
|
|
} unw_b_record;
|
|
|
|
|
|
|
|
typedef struct unw_x_record
|
|
|
|
{
|
|
|
|
unsigned long t;
|
2005-07-27 08:32:46 +02:00
|
|
|
union
|
|
|
|
{
|
|
|
|
unsigned long spoff;
|
|
|
|
unsigned long pspoff;
|
|
|
|
unsigned int reg;
|
|
|
|
} where;
|
2000-04-21 22:22:24 +02:00
|
|
|
unsigned short reg;
|
|
|
|
unsigned short qp;
|
2000-05-25 04:00:14 +02:00
|
|
|
unsigned short ab; /* Value of the AB field.. */
|
|
|
|
unsigned short xy; /* Value of the XY field.. */
|
2000-04-21 22:22:24 +02:00
|
|
|
} unw_x_record;
|
|
|
|
|
2000-09-16 02:56:47 +02:00
|
|
|
/* This structure is used to determine the specific record type and
|
2000-04-21 22:22:24 +02:00
|
|
|
its fields. */
|
|
|
|
typedef struct unwind_record
|
|
|
|
{
|
|
|
|
unw_record_type type;
|
|
|
|
union {
|
|
|
|
unw_r_record r;
|
|
|
|
unw_p_record p;
|
|
|
|
unw_b_record b;
|
|
|
|
unw_x_record x;
|
|
|
|
} record;
|
|
|
|
} unwind_record;
|
2001-02-06 20:09:01 +01:00
|
|
|
|
2002-09-05 02:01:18 +02:00
|
|
|
/* This expression evaluates to true if the relocation is for a local
|
2001-02-06 20:09:01 +01:00
|
|
|
object for which we still want to do the relocation at runtime.
|
2002-09-05 02:01:18 +02:00
|
|
|
False if we are willing to perform this relocation while building
|
|
|
|
the .o file. */
|
2001-02-06 20:09:01 +01:00
|
|
|
|
2001-02-14 02:46:10 +01:00
|
|
|
/* 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. */
|
|
|
|
|
2002-09-05 02:01:18 +02:00
|
|
|
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
|
|
|
|
((FIX)->fx_r_type != BFD_RELOC_UNUSED \
|
|
|
|
&& (!(FIX)->fx_pcrel \
|
2007-02-01 15:12:20 +01:00
|
|
|
|| (FIX)->fx_r_type == BFD_RELOC_IA64_PLTOFF22 \
|
2002-09-05 02:01:18 +02:00
|
|
|
|| TC_FORCE_RELOCATION (FIX)))
|
2011-03-31 10:02:41 +02:00
|
|
|
|
|
|
|
/* VMS backtraces expect dwarf version 3. */
|
|
|
|
#ifdef TE_VMS
|
|
|
|
#define DWARF2_VERSION 3
|
2012-04-30 16:32:28 +02:00
|
|
|
#define DWARF2_LINE_VERSION 3
|
2011-03-31 10:02:41 +02:00
|
|
|
#endif
|