aboutsummaryrefslogtreecommitdiffstats
path: root/meta-microblaze/recipes-devtools/binutils/binutils/0031-gas-revert-moving-of-md_pseudo_table-from-const.patch
blob: 83b293f3f92c1033d082f185072cf94ce66fd59d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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