blob: 83b293f3f92c1033d082f185072cf94ce66fd59d [file] [log] [blame]
From c45a69deeb210ebdb80cf055cef9e62bd0bda053 Mon Sep 17 00:00:00 2001
From: Mark Hatle <mark.hatle@kernel.crashing.org>
Date: Thu, 16 Jul 2020 12:38:11 -0500
Subject: [PATCH 31/52] gas: revert moving of md_pseudo_table from const
The base system expect md_pseudo_table to be constant, Changing the
definition will break other architectures when compiled with a
unified source code.
Patch reverts the change away from const, and implements a newer
dynamic handler that passes the correct argument value based on word
size.
Signed-off-by: Mark Hatle <mark.hatle@kernel.crashing.org>
---
gas/config/tc-microblaze.c | 16 +++++++++++++---
gas/tc.h | 2 +-
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/gas/config/tc-microblaze.c b/gas/config/tc-microblaze.c
index e565b2a99d..c6ca913f8b 100644
--- a/gas/config/tc-microblaze.c
+++ b/gas/config/tc-microblaze.c
@@ -385,6 +385,17 @@ microblaze_s_weakext (int ignore ATTRIBUTE_UNUSED)
demand_empty_rest_of_line ();
}
+/* Handle the .gpword pseudo-op, Pass to s_rva */
+
+static void
+microblaze_s_gpword (int ignore ATTRIBUTE_UNUSED)
+{
+ int size = 4;
+ if (microblaze_arch_size == 64)
+ size = 8;
+ s_rva(size);
+}
+
/* This table describes all the machine specific pseudo-ops the assembler
has to support. The fields are:
Pseudo-op name without dot
@@ -392,7 +403,7 @@ microblaze_s_weakext (int ignore ATTRIBUTE_UNUSED)
Integer arg to pass to the function. */
/* If the pseudo-op is not found in this table, it searches in the obj-elf.c,
and then in the read.c table. */
-pseudo_typeS md_pseudo_table[] =
+const pseudo_typeS md_pseudo_table[] =
{
{"lcomm", microblaze_s_lcomm, 1},
{"data", microblaze_s_data, 0},
@@ -401,7 +412,7 @@ pseudo_typeS md_pseudo_table[] =
{"data32", cons, 4}, /* Same as word. */
{"ent", s_func, 0}, /* Treat ent as function entry point. */
{"end", microblaze_s_func, 1}, /* Treat end as function end point. */
- {"gpword", s_rva, 4}, /* gpword label => store resolved label address in data section. */
+ {"gpword", microblaze_s_gpword, 0}, /* gpword label => store resolved label address in data section. */
{"weakext", microblaze_s_weakext, 0},
{"rodata", microblaze_s_rdata, 0},
{"sdata2", microblaze_s_rdata, 1},
@@ -3448,7 +3459,6 @@ md_parse_option (int c, const char * arg ATTRIBUTE_UNUSED)
case OPTION_M64:
//if (arg != NULL && strcmp (arg, "64") == 0)
microblaze_arch_size = 64;
- md_pseudo_table[7].poc_val = 8;
break;
default:
return 0;
diff --git a/gas/tc.h b/gas/tc.h
index 5bdfe5c347..da1738d67a 100644
--- a/gas/tc.h
+++ b/gas/tc.h
@@ -22,7 +22,7 @@
/* In theory (mine, at least!) the machine dependent part of the assembler
should only have to include one file. This one. -- JF */
-extern pseudo_typeS md_pseudo_table[];
+extern const pseudo_typeS md_pseudo_table[];
const char * md_atof (int, char *, int *);
int md_parse_option (int, const char *);
--
2.17.1