From 263b257428741e10dc4a127cc46c57379307f421 Mon Sep 17 00:00:00 2001 From: mfortune Date: Wed, 7 May 2014 22:37:00 +0100 Subject: [PATCH] Implement CONVERT_SYMBOLIC_ATTRIBUTE for MIPS. gas/ * config/tc-mips.c (streq): Define. (mips_convert_symbolic_attribute): New function. * config/tc-mips.h (CONVERT_SYMBOLIC_ATTRIBUTE): Define. (mips_convert_symbolic_attribute): New prototype gas/testsuite/ * gas/mips/attr-gnu-abi-fp-1.s: New. * gas/mips/attr-gnu-abi-fp-1.d: New. * gas/mips/attr-gnu-abi-msa-1.s: New. * gas/mips/attr-gnu-abi-msa-1.d: New. * gas/mips/mips.exp: Add new tests. --- gas/ChangeLog | 7 ++++++ gas/config/tc-mips.c | 33 +++++++++++++++++++++++++++++ gas/config/tc-mips.h | 3 +++ gas/testsuite/ChangeLog | 8 +++++++ gas/testsuite/gas/mips/attr-gnu-abi-fp-1.d | 8 +++++++ gas/testsuite/gas/mips/attr-gnu-abi-fp-1.s | 1 + gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d | 7 ++++++ gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s | 1 + gas/testsuite/gas/mips/mips.exp | 3 +++ 9 files changed, 71 insertions(+) create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-fp-1.d create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-fp-1.s create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s diff --git a/gas/ChangeLog b/gas/ChangeLog index 0c0d191..28f828b 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2014-05-08 Matthew Fortune + + * config/tc-mips.c (streq): Define. + (mips_convert_symbolic_attribute): New function. + * config/tc-mips.h (CONVERT_SYMBOLIC_ATTRIBUTE): Define. + (mips_convert_symbolic_attribute): New prototype. + 2014-05-02 Max Filippov * config/tc-xtensa.c (md_apply_fix): mark BFD_RELOC_XTENSA_DIFF* diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 1c950a7..edbab71 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -42,6 +42,8 @@ typedef char static_assert2[sizeof (valueT) < 8 ? -1 : 1]; #define DBG(x) #endif +#define streq(a, b) (strcmp (a, b) == 0) + #define SKIP_SPACE_TABS(S) \ do { while (*(S) == ' ' || *(S) == '\t') ++(S); } while (0) @@ -18342,3 +18344,34 @@ tc_mips_regname_to_dw2regnum (char *regname) return regnum; } + +/* Implement CONVERT_SYMBOLIC_ATTRIBUTE. + Given a symbolic attribute NAME, return the proper integer value. + Returns -1 if the attribute is not known. */ + +int +mips_convert_symbolic_attribute (const char *name) +{ + static const struct + { + const char * name; + const int tag; + } + attribute_table[] = + { +#define T(tag) {#tag, tag} + T (Tag_GNU_MIPS_ABI_FP), + T (Tag_GNU_MIPS_ABI_MSA), +#undef T + }; + unsigned int i; + + if (name == NULL) + return -1; + + for (i = 0; i < ARRAY_SIZE (attribute_table); i++) + if (streq (name, attribute_table[i].name)) + return attribute_table[i].tag; + + return -1; +} diff --git a/gas/config/tc-mips.h b/gas/config/tc-mips.h index 510e811..0b8e607 100644 --- a/gas/config/tc-mips.h +++ b/gas/config/tc-mips.h @@ -194,4 +194,7 @@ extern int tc_mips_regname_to_dw2regnum (char *regname); 64-bit form for n64 CFIs. */ #define CFI_DIFF_EXPR_OK 0 +#define CONVERT_SYMBOLIC_ATTRIBUTE(name) mips_convert_symbolic_attribute (name) +extern int mips_convert_symbolic_attribute (const char *); + #endif /* TC_MIPS */ diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 9ff1b38..3c1be34 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2014-05-08 Matthew Fortune + + * gas/mips/attr-gnu-abi-fp-1.s: New. + * gas/mips/attr-gnu-abi-fp-1.d: New. + * gas/mips/attr-gnu-abi-msa-1.s: New. + * gas/mips/attr-gnu-abi-msa-1.d: New. + * gas/mips/mips.exp: Add new tests. + 2014-05-07 Andrew Bennett * gas/mips/mips.exp: Add MIPS32r5 tests. Also add the mips32r3, diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-fp-1.d b/gas/testsuite/gas/mips/attr-gnu-abi-fp-1.d new file mode 100644 index 0000000..63eaf8d --- /dev/null +++ b/gas/testsuite/gas/mips/attr-gnu-abi-fp-1.d @@ -0,0 +1,8 @@ +#as: -32 +#source: attr-gnu-abi-fp-1.s +#readelf: -A +#name: MIPS gnu_attribute Tag_GNU_MIPS_ABI_FP,1 + +Attribute Section: gnu +File Attributes + Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\) diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-fp-1.s b/gas/testsuite/gas/mips/attr-gnu-abi-fp-1.s new file mode 100644 index 0000000..a96caaf --- /dev/null +++ b/gas/testsuite/gas/mips/attr-gnu-abi-fp-1.s @@ -0,0 +1 @@ +.gnu_attribute Tag_GNU_MIPS_ABI_FP,1 diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d b/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d new file mode 100644 index 0000000..4720029 --- /dev/null +++ b/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d @@ -0,0 +1,7 @@ +#source: attr-gnu-abi-msa-1.s +#readelf: -A +#name: MIPS gnu_attribute Tag_GNU_MIPS_ABI_MSA,1 + +Attribute Section: gnu +File Attributes + Tag_GNU_MIPS_ABI_MSA: 128-bit MSA diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s b/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s new file mode 100644 index 0000000..f22883e --- /dev/null +++ b/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s @@ -0,0 +1 @@ +.gnu_attribute Tag_GNU_MIPS_ABI_MSA,1 diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp index 9da95c6..7ccbed5 100644 --- a/gas/testsuite/gas/mips/mips.exp +++ b/gas/testsuite/gas/mips/mips.exp @@ -1197,4 +1197,7 @@ if { [istarget mips*-*-vxworks*] } { run_dump_test "pcrel-4-n32" run_dump_test "pcrel-4-64" } + + run_dump_test "attr-gnu-abi-fp-1" + run_dump_test "attr-gnu-abi-msa-1" } -- 2.7.4