aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormfortune <matthew.fortune@imgtec.com>2014-05-07 22:37:00 +0100
committermfortune <matthew.fortune@imgtec.com>2014-05-08 15:09:35 +0100
commit263b257428741e10dc4a127cc46c57379307f421 (patch)
tree6d60ee48f0ce4e47f69e57e9d5a7d7a04d36d561
parent68e0f6b16d6ce24c912affec6b049a5452c7df3e (diff)
downloadfsf-binutils-gdb-263b257428741e10dc4a127cc46c57379307f421.zip
fsf-binutils-gdb-263b257428741e10dc4a127cc46c57379307f421.tar.gz
fsf-binutils-gdb-263b257428741e10dc4a127cc46c57379307f421.tar.bz2
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.
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-mips.c33
-rw-r--r--gas/config/tc-mips.h3
-rw-r--r--gas/testsuite/ChangeLog8
-rw-r--r--gas/testsuite/gas/mips/attr-gnu-abi-fp-1.d8
-rw-r--r--gas/testsuite/gas/mips/attr-gnu-abi-fp-1.s1
-rw-r--r--gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d7
-rw-r--r--gas/testsuite/gas/mips/attr-gnu-abi-msa-1.s1
-rw-r--r--gas/testsuite/gas/mips/mips.exp3
9 files changed, 71 insertions, 0 deletions
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 <matthew.fortune@imgtec.com>
+
+ * 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 <jcmvbkbc@gmail.com>
* 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 <matthew.fortune@imgtec.com>
+
+ * 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 <andrew.bennett@imgtec.com>
* 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"
}