diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2020-05-10 08:03:08 -0700 |
---|---|---|
committer | Max Filippov <jcmvbkbc@gmail.com> | 2020-06-15 13:01:30 -0700 |
commit | 7a77f1ac2c6f899faa39e8c0b42d4284d586c44e (patch) | |
tree | a62d6ddd84a685332322b873f7b2cd4facdc3601 /gas/config | |
parent | cae64165f47b64898c4f1982d294862cfae89a47 (diff) | |
download | fsf-binutils-gdb-7a77f1ac2c6f899faa39e8c0b42d4284d586c44e.zip fsf-binutils-gdb-7a77f1ac2c6f899faa39e8c0b42d4284d586c44e.tar.gz fsf-binutils-gdb-7a77f1ac2c6f899faa39e8c0b42d4284d586c44e.tar.bz2 |
xtensa: allow runtime ABI selection
2020-06-15 Max Filippov <jcmvbkbc@gmail.com>
bfd/
* elf32-xtensa.c (XSHAL_ABI, XTHAL_ABI_UNDEFINED)
(XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): New macros.
(elf32xtensa_abi): New global variable.
(xtensa_abi_choice): New function.
(elf_xtensa_create_plt_entry): Use xtensa_abi_choice instead of
XSHAL_ABI to select PLT code.
gas/
* config/tc-xtensa.c (XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): New
macros.
(elf32xtensa_abi): New declaration.
(option_abi_windowed, option_abi_call0): New enum constants.
(md_longopts): Add entries for --abi-windowed and --abi-call0.
(md_parse_option): Add handlers for --abi-windowed and
--abi-call0.
(xtensa_add_config_info): Use xtensa_abi_choice instead of
XSHAL_ABI to format ABI tag.
* doc/as.texi (Target Xtensa options): Add --abi-windowed and
--abi-call0 to the list of options.
* doc/c-xtensa.texi: Add description for options --abi-windowed
and --abi-call0.
* testsuite/gas/xtensa/abi-call0.d: New test definition.
* testsuite/gas/xtensa/abi-windowed.d: New test definition.
* testsuite/gas/xtensa/abi.s: New test source.
include/
* elf/xtensa.h (xtensa_abi_choice): New declaration.
ld/
* emultempl/xtensaelf.em (XSHAL_ABI): Remove macro definition.
(XTHAL_ABI_UNDEFINED, XTHAL_ABI_WINDOWED, XTHAL_ABI_CALL0): New
macros.
(elf32xtensa_abi): New declaration.
(xt_config_info_unpack_and_check): Set elf32xtensa_abi if it is
undefined. Use xtensa_abi_choice instead of XSHAL_ABI to test
ABI tag consistency.
(xtensa_add_config_info): Use xtensa_abi_choice instead of
XSHAL_ABI to format ABI tag.
(PARSE_AND_LIST_PROLOGUE): Define OPTION_ABI_WINDOWED,
OPTION_ABI_CALL0 and declare elf32xtensa_abi.
(PARSE_AND_LIST_LONGOPTS): Add entries for --abi-windowed and
--abi-call0.
(PARSE_AND_LIST_OPTIONS): Add help text for --abi-windowed and
--abi-call0.
(PARSE_AND_LIST_ARGS_CASES): Add handlers for --abi-windowed and
--abi-call0.
* ld.texi: Add description for options --abi-windowed and
--abi-call0.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-xtensa.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index 14a5a2a..b512f7a 100644 --- a/gas/config/tc-xtensa.c +++ b/gas/config/tc-xtensa.c @@ -31,8 +31,12 @@ #include "elf/xtensa.h" /* Provide default values for new configuration settings. */ -#ifndef XSHAL_ABI -#define XSHAL_ABI 0 +#ifndef XTHAL_ABI_WINDOWED +#define XTHAL_ABI_WINDOWED 0 +#endif + +#ifndef XTHAL_ABI_CALL0 +#define XTHAL_ABI_CALL0 1 #endif #ifndef XTENSA_MARCH_EARLIEST @@ -648,6 +652,10 @@ static bfd_boolean workaround_all_short_loops = FALSE; This option is defined in BDF library. */ extern bfd_boolean elf32xtensa_separate_props; +/* Xtensa ABI. + This option is defined in BDF library. */ +extern int elf32xtensa_abi; + static void xtensa_setup_hw_workarounds (int earliest, int latest) { @@ -735,6 +743,9 @@ enum option_separate_props, option_no_separate_props, + + option_abi_windowed, + option_abi_call0, }; const char *md_shortopts = ""; @@ -816,6 +827,9 @@ struct option md_longopts[] = { "separate-prop-tables", no_argument, NULL, option_separate_props }, + { "abi-windowed", no_argument, NULL, option_abi_windowed }, + { "abi-call0", no_argument, NULL, option_abi_call0 }, + { NULL, no_argument, NULL, 0 } }; @@ -1044,6 +1058,14 @@ md_parse_option (int c, const char *arg) elf32xtensa_separate_props = FALSE; return 1; + case option_abi_windowed: + elf32xtensa_abi = XTHAL_ABI_WINDOWED; + return 1; + + case option_abi_call0: + elf32xtensa_abi = XTHAL_ABI_CALL0; + return 1; + default: return 0; } @@ -8958,7 +8980,6 @@ is_local_forward_loop (const TInsn *insn, fragS *fragP) return FALSE; } - #define XTINFO_NAME "Xtensa_Info" #define XTINFO_NAMESZ 12 #define XTINFO_TYPE 1 @@ -8975,7 +8996,7 @@ xtensa_add_config_info (void) data = XNEWVEC (char, 100); sprintf (data, "USE_ABSOLUTE_LITERALS=%d\nABI=%d\n", - XSHAL_USE_ABSOLUTE_LITERALS, XSHAL_ABI); + XSHAL_USE_ABSOLUTE_LITERALS, xtensa_abi_choice ()); sz = strlen (data) + 1; /* Add enough null terminators to pad to a word boundary. */ |