From 514a8bb031f64fc31a4d534249b9e3dfad171b28 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 14 Feb 2020 14:02:05 +0100 Subject: [PATCH] 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. --- 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(-) create mode 100644 gas/testsuite/gas/i386/lea.d create mode 100644 gas/testsuite/gas/i386/lea.e create mode 100644 gas/testsuite/gas/i386/lea.s diff --git a/gas/ChangeLog b/gas/ChangeLog index 67d137940f..4f1aeed7c7 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,12 @@ +2020-02-XX Jan Beulich + + * 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 PR gas/25438 diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 8e422fd2dc..05151f2a63 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 8cace3dc9f..147297e22f 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 0000000000..aa0414b912 --- /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+ : +[ ]*[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 0000000000..be965b39ee --- /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 0000000000..4324ad0c6c --- /dev/null +++ b/gas/testsuite/gas/i386/lea.s @@ -0,0 +1,4 @@ + .text +start: + lea %ss:(%eax), %eax + ss lea (%eax), %eax -- 2.34.1