aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2020-02-14 14:02:05 +0100
committerJan Beulich <jbeulich@suse.com>2020-02-14 14:02:05 +0100
commit514a8bb031f64fc31a4d534249b9e3dfad171b28 (patch)
treeaa7c6d26669fb82409664bc6ce1e79a3d139ac65
parent0e6724dee4984e62e2f8e7da431f3b875ab14c4a (diff)
downloadgdb-514a8bb031f64fc31a4d534249b9e3dfad171b28.zip
gdb-514a8bb031f64fc31a4d534249b9e3dfad171b28.tar.gz
gdb-514a8bb031f64fc31a4d534249b9e3dfad171b28.tar.bz2
x86: extend LEA's segment override warning
For one both possible forms should be warned about. And then, to guard against future surprises, qualify the original opcode check by excluding VEX/EVEX-like templates.
-rw-r--r--gas/ChangeLog9
-rw-r--r--gas/config/tc-i386.c7
-rw-r--r--gas/testsuite/gas/i386/i386.exp1
-rw-r--r--gas/testsuite/gas/i386/lea.d12
-rw-r--r--gas/testsuite/gas/i386/lea.e3
-rw-r--r--gas/testsuite/gas/i386/lea.s4
6 files changed, 33 insertions, 3 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 67d1379..4f1aeed 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,12 @@
+2020-02-XX Jan Beulich <jbeulich@suse.com>
+
+ * config/tc-i386.c (process_operands): Also check insn prefix
+ for ineffectual segment override warning. Don't cover possible
+ VEX/EVEX encoded insns there.
+ * testsuite/gas/i386/lea.s, testsuite/gas/i386/lea.d,
+ testsuite/gas/i386/lea.e: New.
+ * testsuite/gas/i386/i386.exp: Run new test.
+
2020-02-14 H.J. Lu <hongjiu.lu@intel.com>
PR gas/25438
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 8e422fd..05151f2 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -7164,9 +7164,10 @@ duplicate:
}
}
- if (i.tm.base_opcode == 0x8d /* lea */
- && i.seg[0]
- && !quiet_warnings)
+ if ((i.seg[0] || i.prefix[SEG_PREFIX])
+ && !quiet_warnings
+ && i.tm.base_opcode == 0x8d /* lea */
+ && !is_any_vex_encoding(&i.tm))
as_warn (_("segment override on `%s' is ineffectual"), i.tm.name);
/* If a segment was explicitly specified, and the specified segment
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index 8cace3d..147297e 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -65,6 +65,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]]
run_dump_test "intelok"
run_dump_test "prefix"
run_list_test "prefix32" "-al"
+ run_dump_test "lea"
run_dump_test "amd"
run_dump_test "katmai"
run_dump_test "jump"
diff --git a/gas/testsuite/gas/i386/lea.d b/gas/testsuite/gas/i386/lea.d
new file mode 100644
index 0000000..aa0414b
--- /dev/null
+++ b/gas/testsuite/gas/i386/lea.d
@@ -0,0 +1,12 @@
+#objdump: -dw
+#name: i386 LEA-like warnings
+#warning_output: lea.e
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <start>:
+[ ]*[0-9a-f]+:[ ]+36 8d 00[ ]+lea[ ]+%ss:\(%eax\),%eax
+[ ]*[0-9a-f]+:[ ]+36 8d 00[ ]+lea[ ]+%ss:\(%eax\),%eax
+#pass
diff --git a/gas/testsuite/gas/i386/lea.e b/gas/testsuite/gas/i386/lea.e
new file mode 100644
index 0000000..be965b3
--- /dev/null
+++ b/gas/testsuite/gas/i386/lea.e
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:3: Warning: .* `lea' .*
+.*:4: Warning: .* `lea' .*
diff --git a/gas/testsuite/gas/i386/lea.s b/gas/testsuite/gas/i386/lea.s
new file mode 100644
index 0000000..4324ad0
--- /dev/null
+++ b/gas/testsuite/gas/i386/lea.s
@@ -0,0 +1,4 @@
+ .text
+start:
+ lea %ss:(%eax), %eax
+ ss lea (%eax), %eax