[binutils-gdb] x86: extend LEA's segment override warning

Jan Beulich jbeulich@sourceware.org
Fri Feb 14 13:04:00 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=514a8bb031f64fc31a4d534249b9e3dfad171b28

commit 514a8bb031f64fc31a4d534249b9e3dfad171b28
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Feb 14 14:02:05 2020 +0100

    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.

Diff:
---
 gas/ChangeLog                   |  9 +++++++++
 gas/config/tc-i386.c            |  7 ++++---
 gas/testsuite/gas/i386/i386.exp |  1 +
 gas/testsuite/gas/i386/lea.d    | 12 ++++++++++++
 gas/testsuite/gas/i386/lea.e    |  3 +++
 gas/testsuite/gas/i386/lea.s    |  4 ++++
 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



More information about the Binutils-cvs mailing list