diff options
author | Jan Beulich <jbeulich@suse.com> | 2020-02-14 14:02:05 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2020-02-14 14:02:05 +0100 |
commit | 514a8bb031f64fc31a4d534249b9e3dfad171b28 (patch) | |
tree | aa7c6d26669fb82409664bc6ce1e79a3d139ac65 | |
parent | 0e6724dee4984e62e2f8e7da431f3b875ab14c4a (diff) | |
download | gdb-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/ChangeLog | 9 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 7 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/i386.exp | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/lea.d | 12 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/lea.e | 3 | ||||
-rw-r--r-- | 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 |