projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Re: gas/ELF: don't accumulate .type settings
[deliverable/binutils-gdb.git]
/
gas
/
config
/
tc-arm.h
diff --git
a/gas/config/tc-arm.h
b/gas/config/tc-arm.h
index da6469cc311a5a79670525468a219e413783cdb6..39cc9680b96524c730c15fff1af22b180b9c70d1 100644
(file)
--- a/
gas/config/tc-arm.h
+++ b/
gas/config/tc-arm.h
@@
-1,6
+1,5
@@
/* This file is tc-arm.h
/* This file is tc-arm.h
- Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006, 2007, 2008, 2009, 2012 Free Software Foundation, Inc.
+ Copyright (C) 1994-2019 Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
Modified by David Taylor (dtaylor@armltd.co.uk)
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
Modified by David Taylor (dtaylor@armltd.co.uk)
@@
-47,26
+46,10
@@
struct fix;
struct fix;
-#if defined OBJ_AOUT
-# if defined TE_RISCIX
-# define TARGET_FORMAT "a.out-riscix"
-# elif defined TE_LINUX
-# define ARM_BI_ENDIAN
-# define TARGET_FORMAT "a.out-arm-linux"
-# elif defined TE_NetBSD
-# define TARGET_FORMAT "a.out-arm-netbsd"
-# else
-# define ARM_BI_ENDIAN
-# define TARGET_FORMAT (target_big_endian ? "a.out-arm-big" : "a.out-arm-little")
-# endif
-#elif defined OBJ_AIF
-# define TARGET_FORMAT "aif"
-#elif defined OBJ_COFF
+#if defined OBJ_COFF
# define ARM_BI_ENDIAN
# if defined TE_PE
# define ARM_BI_ENDIAN
# if defined TE_PE
-# if defined TE_EPOC
-# define TARGET_FORMAT (target_big_endian ? "epoc-pe-arm-big" : "epoc-pe-arm-little")
-# elif defined TE_WINCE
+# if defined TE_WINCE
# define TARGET_FORMAT (target_big_endian ? "pe-arm-wince-big" : "pe-arm-wince-little")
# else
# define TARGET_FORMAT (target_big_endian ? "pe-arm-big" : "pe-arm-little")
# define TARGET_FORMAT (target_big_endian ? "pe-arm-wince-big" : "pe-arm-wince-little")
# else
# define TARGET_FORMAT (target_big_endian ? "pe-arm-big" : "pe-arm-little")
@@
-82,6
+65,13
@@
struct fix;
/* We support double slash line-comments for compatibility with the ARM AArch64 Assembler. */
#define DOUBLESLASH_LINE_COMMENTS
/* 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 TC_FORCE_RELOCATION(FIX) arm_force_relocation (FIX)
extern unsigned int arm_frag_max_var (struct frag *);
@@
-98,6
+88,10
@@
extern int arm_optimize_expr (expressionS *, operatorT, expressionS *);
#define md_start_line_hook() arm_start_line_hook ()
#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: */
#define tc_frob_label(S) arm_frob_label (S)
/* We also need to mark assembler created symbols: */
@@
-107,6
+101,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_end arm_md_end
extern void arm_md_end (void);
bfd_boolean arm_is_eabi (void);
+
+#define md_post_relax_hook arm_md_post_relax ()
+extern void arm_md_post_relax (void);
#endif
/* NOTE: The fake label creation in stabs.c:s_stab_generic() has
#endif
/* NOTE: The fake label creation in stabs.c:s_stab_generic() has
@@
-167,7
+164,8
@@
void arm_copy_symbol_attributes (symbolS *, symbolS *);
(arm_copy_symbol_attributes (DEST, SRC))
#endif
(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 ()
#define tc_canonicalize_symbol_name(str) arm_canonicalize_symbol_name (str);
#define obj_adjust_symtab() arm_adjust_symtab ()
@@
-186,17
+184,17
@@
void arm_copy_symbol_attributes (symbolS *, symbolS *);
pcrel, but it is easier to be safe than sorry. */
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
pcrel, but it is easier to be safe than sorry. */
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
- (
!(FIX)->fx_pcrel
\
+ (
GENERIC_FORCE_RELOCATION_LOCAL (FIX)
\
|| (FIX)->fx_r_type == BFD_RELOC_ARM_GOT32 \
|| (FIX)->fx_r_type == BFD_RELOC_32 \
|| (FIX)->fx_r_type == BFD_RELOC_ARM_GOT32 \
|| (FIX)->fx_r_type == BFD_RELOC_32 \
- || ((FIX)->fx_addsy != NULL
&& S_IS_WEAK ((FIX)->fx_addsy))
\
-
|| TC_FORCE_RELOCATION (FIX
))
+ || ((FIX)->fx_addsy != NULL
\
+
&& S_IS_WEAK ((FIX)->fx_addsy)
))
/* Force output of R_ARM_REL32 relocations against thumb function symbols.
This is needed to ensure the low bit is handled correctly. */
#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
/* Force output of R_ARM_REL32 relocations against thumb function symbols.
This is needed to ensure the low bit is handled correctly. */
#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
- (
THUMB_IS_FUNC ((FIX)->fx_addsy)
\
- ||
!SEG_NORMAL (SEG
))
+ (
GENERIC_FORCE_RELOCATION_SUB_SAME (FIX, SEG)
\
+ ||
THUMB_IS_FUNC ((FIX)->fx_addsy
))
#define TC_FORCE_RELOCATION_ABS(FIX) \
(((FIX)->fx_pcrel \
#define TC_FORCE_RELOCATION_ABS(FIX) \
(((FIX)->fx_pcrel \
@@
-224,10
+222,22
@@
struct arm_frag_type
#endif
};
#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
#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_FRAG_INIT(fragp, max_bytes) arm_init_frag (fragp, max_bytes)
+#define TC_
ALIGN_ZERO_IS_DEFAULT 1
#define HANDLE_ALIGN(fragp) arm_handle_align (fragp)
#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)) \
#define md_do_align(N, FILL, LEN, MAX, LABEL) \
if (FILL == NULL && (N) != 0 && ! need_pass_2 && subseg_text_p (now_seg)) \
@@
-244,21
+254,25
@@
struct arm_frag_type
/* Registers are generally saved at negative offsets to the CFA. */
#define DWARF2_CIE_DATA_ALIGNMENT (-4)
/* Registers are generally saved at negative offsets to the CFA. */
#define DWARF2_CIE_DATA_ALIGNMENT (-4)
-/* State variables for
IT
block handling. */
-enum
it
_state
+/* State variables for
predication
block handling. */
+enum
pred
_state
{
{
- OUTSIDE_IT_BLOCK, MANUAL_IT_BLOCK, AUTOMATIC_IT_BLOCK
+ OUTSIDE_PRED_BLOCK, MANUAL_PRED_BLOCK, AUTOMATIC_PRED_BLOCK
+};
+enum pred_type {
+ SCALAR_PRED, VECTOR_PRED
};
};
-struct current_
it
+struct current_
pred
{
int mask;
{
int mask;
- enum
it
_state state;
+ enum
pred
_state state;
int cc;
int block_length;
char *insn;
int state_handled;
int warn_deprecated;
int insn_cond;
int cc;
int block_length;
char *insn;
int state_handled;
int warn_deprecated;
int insn_cond;
+ enum pred_type type;
};
#ifdef OBJ_ELF
};
#ifdef OBJ_ELF
@@
-293,7
+307,7
@@
struct arm_segment_info_type
emitted only once per section, to save unnecessary bloat. */
unsigned int marked_pr_dependency;
emitted only once per section, to save unnecessary bloat. */
unsigned int marked_pr_dependency;
- struct current_
it current_it
;
+ struct current_
pred current_pred
;
};
/* We want .cfi_* pseudo-ops for generating unwind info. */
};
/* We want .cfi_* pseudo-ops for generating unwind info. */
@@
-315,7
+329,7
@@
struct arm_segment_info_type
#ifdef OBJ_ELF
/* Values passed to md_apply_fix don't include the symbol value. */
#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
#endif
#ifdef OBJ_COFF
@@
-339,7
+353,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 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 *);
extern void arm_init_frag (struct frag *, int);
extern void arm_handle_align (struct frag *);
extern bfd_boolean arm_fix_adjustable (struct fix *);
@@
-359,5
+374,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 *);
#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
#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 *);
This page took
0.02603 seconds
and
4
git commands to generate.