From f7e16c2a9cc405707e646e951397938d2b4eea48 Mon Sep 17 00:00:00 2001 From: Max Filippov Date: Wed, 17 May 2017 02:09:14 -0700 Subject: xtensa: don't expect XCHAL_* macros to be constant Get rid of the assumption that XCHAL_* macros are preprocessor constants: don't use them in preprocessor conditionals or in static variable initializers. 2017-06-14 Max Filippov bfd/ * elf32-xtensa.c (elf_xtensa_be_plt_entry, elf_xtensa_le_plt_entry): Add dimension for the ABI to arrays, keep both windowed and call0 ABI PLT definitions. (elf_xtensa_create_plt_entry): Use selected ABI to choose upper elf_xtensa_*_plt_entry endex. (ELF_MAXPAGESIZE): Fix at minimal supported MMU page size. gas/ * config/tc-xtensa.c (density_supported, xtensa_fetch_width, absolute_literals_supported): Leave definitions uninitialized. (directive_state): Leave entries for directive_density and directive_absolute_literals initialized to false. (xg_init_global_config, xtensa_init): New functions. * config/tc-xtensa.h (TARGET_BYTES_BIG_ENDIAN): Define as 0. (HOST_SPECIAL_INIT): New definition. (xtensa_init): New declaration. --- gas/ChangeLog | 11 +++++++++++ gas/config/tc-xtensa.c | 32 +++++++++++++++++++++----------- gas/config/tc-xtensa.h | 9 ++++++++- 3 files changed, 40 insertions(+), 12 deletions(-) (limited to 'gas') diff --git a/gas/ChangeLog b/gas/ChangeLog index a1853a4..f4506ce 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,14 @@ +2017-06-14 Max Filippov + + * config/tc-xtensa.c (density_supported, xtensa_fetch_width, + absolute_literals_supported): Leave definitions uninitialized. + (directive_state): Leave entries for directive_density and + directive_absolute_literals initialized to false. + (xg_init_global_config, xtensa_init): New functions. + * config/tc-xtensa.h (TARGET_BYTES_BIG_ENDIAN): Define as 0. + (HOST_SPECIAL_INIT): New definition. + (xtensa_init): New declaration. + 2017-06-07 Michael Collison * config/tc-aarch64.c (reg_entry_reg_names): Add IP0, diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index e1efaae..836b550 100644 --- a/gas/config/tc-xtensa.c +++ b/gas/config/tc-xtensa.c @@ -72,13 +72,13 @@ const char FLT_CHARS[] = "rRsSfFdDxXpP"; /* Flags to indicate whether the hardware supports the density and absolute literals options. */ -bfd_boolean density_supported = XCHAL_HAVE_DENSITY; -bfd_boolean absolute_literals_supported = XSHAL_USE_ABSOLUTE_LITERALS; +bfd_boolean density_supported; +bfd_boolean absolute_literals_supported; static vliw_insn cur_vinsn; unsigned xtensa_num_pipe_stages; -unsigned xtensa_fetch_width = XCHAL_INST_FETCH_WIDTH; +unsigned xtensa_fetch_width; static enum debug_info_type xt_saved_debug_type = DEBUG_NONE; @@ -419,21 +419,13 @@ bfd_boolean directive_state[] = { FALSE, /* none */ FALSE, /* literal */ -#if !XCHAL_HAVE_DENSITY FALSE, /* density */ -#else - TRUE, /* density */ -#endif TRUE, /* transform */ FALSE, /* freeregs */ FALSE, /* longcalls */ FALSE, /* literal_prefix */ FALSE, /* schedule */ -#if XSHAL_USE_ABSOLUTE_LITERALS - TRUE /* absolute_literals */ -#else FALSE /* absolute_literals */ -#endif }; /* A circular list of all potential and actual literal pool locations @@ -5216,6 +5208,24 @@ md_number_to_chars (char *buf, valueT val, int n) number_to_chars_littleendian (buf, val, n); } +static void +xg_init_global_config (void) +{ + target_big_endian = XCHAL_HAVE_BE; + + density_supported = XCHAL_HAVE_DENSITY; + absolute_literals_supported = XSHAL_USE_ABSOLUTE_LITERALS; + xtensa_fetch_width = XCHAL_INST_FETCH_WIDTH; + + directive_state[directive_density] = XCHAL_HAVE_DENSITY; + directive_state[directive_absolute_literals] = XSHAL_USE_ABSOLUTE_LITERALS; +} + +void +xtensa_init (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) +{ + xg_init_global_config (); +} /* This function is called once, at assembler startup time. It should set up all the tables, etc. that the MD part of the assembler will diff --git a/gas/config/tc-xtensa.h b/gas/config/tc-xtensa.h index 257ca05..912c890 100644 --- a/gas/config/tc-xtensa.h +++ b/gas/config/tc-xtensa.h @@ -30,7 +30,7 @@ struct fix; #include "xtensa-isa.h" #include "xtensa-config.h" -#define TARGET_BYTES_BIG_ENDIAN XCHAL_HAVE_BE +#define TARGET_BYTES_BIG_ENDIAN 0 /* Maximum number of opcode slots in a VLIW instruction. */ @@ -335,6 +335,13 @@ extern bfd_boolean xtensa_check_inside_bundle (void); extern void xtensa_handle_align (fragS *); extern char *xtensa_section_rename (const char *); +/* We need to set the target endianness in xtensa_init and not in md_begin. + This is because xtensa_target_format is called before md_begin, and we + want to have all non-statically initialized fields initialized. */ + +#define HOST_SPECIAL_INIT xtensa_init +extern void xtensa_init (int, char **); + #define TARGET_FORMAT xtensa_target_format () #define TARGET_ARCH bfd_arch_xtensa #define TC_SEGMENT_INFO_TYPE xtensa_segment_info -- cgit v1.1