aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-i386.c
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2023-11-17 11:23:50 +0100
committerJan Beulich <jbeulich@suse.com>2023-11-17 11:23:50 +0100
commit97f31cb469f288995d3dcaae406531053dff09fa (patch)
tree79e5aa09003a6b54fa9e7b7c67d4ee54541b9755 /gas/config/tc-i386.c
parent3086ed9a458f9bc3a52633fc2a10ffc3f21753f4 (diff)
downloadgdb-97f31cb469f288995d3dcaae406531053dff09fa.zip
gdb-97f31cb469f288995d3dcaae406531053dff09fa.tar.gz
gdb-97f31cb469f288995d3dcaae406531053dff09fa.tar.bz2
x86: don't allow pseudo-prefixes to be overridden by legacy suffixes
Deprecated functionality would better not win over its modern counterparts.
Diffstat (limited to 'gas/config/tc-i386.c')
-rw-r--r--gas/config/tc-i386.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 6e788d8..1692dfc 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -5887,16 +5887,32 @@ parse_insn (const char *line, char *mnemonic, bool prefix_only)
Check if we should swap operand or force 32bit displacement in
encoding. */
if (mnem_p - 2 == dot_p && dot_p[1] == 's')
- i.dir_encoding = dir_encoding_swap;
+ {
+ if (i.dir_encoding == dir_encoding_default)
+ i.dir_encoding = dir_encoding_swap;
+ else
+ as_warn (_("ignoring `.s' suffix due to earlier `{%s}'"),
+ i.dir_encoding == dir_encoding_load ? "load" : "store");
+ }
else if (mnem_p - 3 == dot_p
&& dot_p[1] == 'd'
&& dot_p[2] == '8')
- i.disp_encoding = disp_encoding_8bit;
+ {
+ if (i.disp_encoding == disp_encoding_default)
+ i.disp_encoding = disp_encoding_8bit;
+ else if (i.disp_encoding != disp_encoding_8bit)
+ as_warn (_("ignoring `.d8' suffix due to earlier `{disp<N>}'"));
+ }
else if (mnem_p - 4 == dot_p
&& dot_p[1] == 'd'
&& dot_p[2] == '3'
&& dot_p[3] == '2')
- i.disp_encoding = disp_encoding_32bit;
+ {
+ if (i.disp_encoding == disp_encoding_default)
+ i.disp_encoding = disp_encoding_32bit;
+ else if (i.disp_encoding != disp_encoding_32bit)
+ as_warn (_("ignoring `.d32' suffix due to earlier `{disp<N>}'"));
+ }
else
goto check_suffix;
mnem_p = dot_p;