X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fconfig%2Ftc-arm.h;h=319b2c2dfef4d8030f4403ea5b18aa0c517684f3;hb=c84364ece4faa7b3eb0f60f4dc301282e9693e1e;hp=702e4053b0231689f3f0a258d5fa9831e924ba65;hpb=1fc5d88e4ba59db7a934cb63503a78a8655c9e53;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/tc-arm.h b/gas/config/tc-arm.h index 702e4053b0..319b2c2dfe 100644 --- a/gas/config/tc-arm.h +++ b/gas/config/tc-arm.h @@ -1,6 +1,5 @@ /* This file is tc-arm.h - Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, - 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 1994-2016 Free Software Foundation, Inc. Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) Modified by David Taylor (dtaylor@armltd.co.uk) @@ -79,8 +78,21 @@ struct fix; # define TARGET_FORMAT elf32_arm_target_format () #endif +/* We support double slash line-comments for compatibility with the ARM AArch64 Assembler. */ +#define DOUBLESLASH_LINE_COMMENTS + +/* We conditionally support labels without a colon. */ +#define LABELS_WITHOUT_COLONS codecomposer_syntax +extern bfd_boolean codecomposer_syntax; + +#define tc_symbol_chars arm_symbol_chars +extern const char arm_symbol_chars[]; + #define TC_FORCE_RELOCATION(FIX) arm_force_relocation (FIX) +extern unsigned int arm_frag_max_var (struct frag *); +#define md_frag_max_var arm_frag_max_var + #define md_relax_frag(segment, fragp, stretch) \ arm_relax_frag (segment, fragp, stretch) extern int arm_relax_frag (asection *, struct frag *, long); @@ -92,6 +104,10 @@ extern int arm_optimize_expr (expressionS *, operatorT, expressionS *); #define md_start_line_hook() arm_start_line_hook () +#define TC_START_LABEL_WITHOUT_COLON(NUL_CHAR, NEXT_CHAR) \ + tc_start_label_without_colon () +extern bfd_boolean tc_start_label_without_colon (void); + #define tc_frob_label(S) arm_frob_label (S) /* We also need to mark assembler created symbols: */ @@ -101,6 +117,9 @@ extern int arm_optimize_expr (expressionS *, operatorT, expressionS *); #define md_end arm_md_end extern void arm_md_end (void); bfd_boolean arm_is_eabi (void); + +#define md_post_relax_hook aeabi_set_public_attributes () +extern void aeabi_set_public_attributes (void); #endif /* NOTE: The fake label creation in stabs.c:s_stab_generic() has @@ -161,7 +180,8 @@ void arm_copy_symbol_attributes (symbolS *, symbolS *); (arm_copy_symbol_attributes (DEST, SRC)) #endif -#define TC_START_LABEL(C,S,STR) (C == ':' || (C == '/' && arm_data_in_code ())) +#define TC_START_LABEL(STR, NUL_CHAR, NEXT_CHAR) \ + (NEXT_CHAR == ':' || (NEXT_CHAR == '/' && arm_data_in_code ())) #define tc_canonicalize_symbol_name(str) arm_canonicalize_symbol_name (str); #define obj_adjust_symtab() arm_adjust_symtab () @@ -192,6 +212,12 @@ void arm_copy_symbol_attributes (symbolS *, symbolS *); (THUMB_IS_FUNC ((FIX)->fx_addsy) \ || !SEG_NORMAL (SEG)) +#define TC_FORCE_RELOCATION_ABS(FIX) \ + (((FIX)->fx_pcrel \ + && (FIX)->fx_r_type != BFD_RELOC_32 \ + && (FIX)->fx_r_type != BFD_RELOC_ARM_GOT32) \ + || TC_FORCE_RELOCATION(FIX)) + #define TC_CONS_FIX_NEW cons_fix_new_arm #define MAX_MEM_ALIGNMENT_BYTES 6 @@ -212,10 +238,23 @@ struct arm_frag_type #endif }; +static inline int +arm_min (int am_p1, int am_p2) +{ + return am_p1 < am_p2 ? am_p1 : am_p2; +} + #define TC_FRAG_TYPE struct arm_frag_type /* NOTE: max_chars is a local variable from frag_var / frag_variant. */ #define TC_FRAG_INIT(fragp) arm_init_frag (fragp, max_chars) +#define TC_ALIGN_ZERO_IS_DEFAULT 1 #define HANDLE_ALIGN(fragp) arm_handle_align (fragp) +/* PR gas/19276: COFF/PE segment alignment is already handled in coff_frob_section(). */ +#ifndef TE_PE +#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) \ + ((!(FRCHAIN)->frch_next && subseg_text_p (SEG)) \ + ? arm_min (2, get_recorded_alignment (SEG)) : 0) +#endif #define md_do_align(N, FILL, LEN, MAX, LABEL) \ if (FILL == NULL && (N) != 0 && ! need_pass_2 && subseg_text_p (now_seg)) \ @@ -245,6 +284,8 @@ struct current_it int block_length; char *insn; int state_handled; + int warn_deprecated; + int insn_cond; }; #ifdef OBJ_ELF @@ -301,7 +342,7 @@ struct arm_segment_info_type #ifdef OBJ_ELF /* Values passed to md_apply_fix don't include the symbol value. */ -# define MD_APPLY_SYM_VALUE(FIX) arm_apply_sym_value (FIX) +# define MD_APPLY_SYM_VALUE(FIX) arm_apply_sym_value (FIX, this_segment) #endif #ifdef OBJ_COFF @@ -325,7 +366,8 @@ extern int arm_data_in_code (void); extern char * arm_canonicalize_symbol_name (char *); extern void arm_adjust_symtab (void); extern void armelf_frob_symbol (symbolS *, int *); -extern void cons_fix_new_arm (fragS *, int, int, expressionS *); +extern void cons_fix_new_arm (fragS *, int, int, expressionS *, + bfd_reloc_code_real_type); extern void arm_init_frag (struct frag *, int); extern void arm_handle_align (struct frag *); extern bfd_boolean arm_fix_adjustable (struct fix *); @@ -345,5 +387,14 @@ void tc_pe_dwarf2_emit_offset (symbolS *, unsigned int); #ifdef OBJ_ELF #define CONVERT_SYMBOLIC_ATTRIBUTE(name) arm_convert_symbolic_attribute (name) extern int arm_convert_symbolic_attribute (const char *); -extern int arm_apply_sym_value (struct fix *); +extern int arm_apply_sym_value (struct fix *, segT); #endif + +#define tc_comment_chars arm_comment_chars +extern char arm_comment_chars[]; + +#define tc_line_separator_chars arm_line_separator_chars +extern char arm_line_separator_chars[]; + +#define TC_EQUAL_IN_INSN(c, s) arm_tc_equal_in_insn ((c), (s)) +extern bfd_boolean arm_tc_equal_in_insn (int, char *);