From: H.J. Lu Date: Sat, 9 Sep 2017 12:31:30 +0000 (-0700) Subject: x86: Remove restriction on NOTRACK prefix position X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4e9ac44a8925c7da81735ef24beb5456a0c0fa24;p=binutils-gdb.git x86: Remove restriction on NOTRACK prefix position Since the NOTRACK prefix is no longer required to be the last prefix before the REX prefix, restriction on the NOTRACK prefix position is removed from assembler as well as disassembler. Assembler encodes the NOTRACK prefix the same way as the DS segment register, which places it before other prefixes. Disassembler displays prefixes in the order they appear. gas/ * config/tc-i386.c (NOTRACK_PREFIX): Removed. (REX_PREFIX): Updated. (MAX_PREFIXES): Likewise. (parse_insn): Remove restriction on NOTRACK prefix position. * testsuite/gas/i386/notrack.s: Add tests with NOTRACK prefix before other prefixes. * testsuite/gas/i386/x86-64-notrack.s: Likewise. * testsuite/gas/i386/notrackbad.s: Remove tests with NOTRACK prefix before other prefixes. * testsuite/gas/i386/x86-64-notrackbad.s: Likewise. * testsuite/gas/i386/notrack-intel.d: Updated. * testsuite/gas/i386/notrack.d: Likewise. * testsuite/gas/i386/notrackbad.l: Likewise. * testsuite/gas/i386/x86-64-notrack-intel.d: Likewise. * testsuite/gas/i386/x86-64-notrack.d: Likewise. * testsuite/gas/i386/x86-64-notrackbad.l: Likewise. opcodes/ * i386-dis.c (last_active_prefix): Removed. (ckprefix): Don't set last_active_prefix. (NOTRACK_Fixup): Don't check last_active_prefix. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 5dc06f5e5ca..1bbd8b8e7fe 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,22 @@ +2017-09-09 H.J. Lu + + * config/tc-i386.c (NOTRACK_PREFIX): Removed. + (REX_PREFIX): Updated. + (MAX_PREFIXES): Likewise. + (parse_insn): Remove restriction on NOTRACK prefix position. + * testsuite/gas/i386/notrack.s: Add tests with NOTRACK prefix + before other prefixes. + * testsuite/gas/i386/x86-64-notrack.s: Likewise. + * testsuite/gas/i386/notrackbad.s: Remove tests with NOTRACK + prefix before other prefixes. + * testsuite/gas/i386/x86-64-notrackbad.s: Likewise. + * testsuite/gas/i386/notrack-intel.d: Updated. + * testsuite/gas/i386/notrack.d: Likewise. + * testsuite/gas/i386/notrackbad.l: Likewise. + * testsuite/gas/i386/x86-64-notrack-intel.d: Likewise. + * testsuite/gas/i386/x86-64-notrack.d: Likewise. + * testsuite/gas/i386/x86-64-notrackbad.l: Likewise. + 2017-09-07 Palmer Dabbelt * config/tc-riscv.c (riscv_frag_align_code): Emit the entire diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 456be9e07cf..fdff30153dd 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -66,11 +66,8 @@ #define HLE_PREFIX REP_PREFIX #define BND_PREFIX REP_PREFIX #define LOCK_PREFIX 5 -/* Only one of NOTRACK_PREFIX and SEG_PREFIX can be used at the same - time. */ -#define NOTRACK_PREFIX 6 -#define REX_PREFIX 7 /* must come last. */ -#define MAX_PREFIXES 8 /* max prefixes per opcode */ +#define REX_PREFIX 6 /* must come last. */ +#define MAX_PREFIXES 7 /* max prefixes per opcode */ /* we define the syntax here (modulo base,index,scale syntax) */ #define REGISTER_PREFIX '%' @@ -3978,42 +3975,24 @@ parse_insn (char *line, char *mnemonic) else { /* Add prefix, checking for repeated prefixes. */ - enum PREFIX_GROUP p - = add_prefix (current_templates->start->base_opcode); - if (p == PREFIX_DS - && current_templates->start->cpu_flags.bitfield.cpucet) + switch (add_prefix (current_templates->start->base_opcode)) { - i.notrack_prefix = current_templates->start->name; - /* Move NOTRACK_PREFIX_OPCODE to NOTRACK_PREFIX slot so - that it is placed before others. */ - i.prefix[SEG_PREFIX] = 0; - i.prefix[NOTRACK_PREFIX] = NOTRACK_PREFIX_OPCODE; - } - else - { - switch (p) - { - case PREFIX_EXIST: - return NULL; - case PREFIX_REP: - if (current_templates->start->cpu_flags.bitfield.cpuhle) - i.hle_prefix = current_templates->start->name; - else if (current_templates->start->cpu_flags.bitfield.cpumpx) - i.bnd_prefix = current_templates->start->name; - else - i.rep_prefix = current_templates->start->name; - break; - default: - break; - } - - if (i.notrack_prefix != NULL) - { - /* There must be no other prefixes after NOTRACK - prefix. */ - as_bad (_("expecting no other prefixes after `notrack'")); - return NULL; - } + case PREFIX_EXIST: + return NULL; + case PREFIX_DS: + if (current_templates->start->cpu_flags.bitfield.cpucet) + i.notrack_prefix = current_templates->start->name; + break; + case PREFIX_REP: + if (current_templates->start->cpu_flags.bitfield.cpuhle) + i.hle_prefix = current_templates->start->name; + else if (current_templates->start->cpu_flags.bitfield.cpumpx) + i.bnd_prefix = current_templates->start->name; + else + i.rep_prefix = current_templates->start->name; + break; + default: + break; } } /* Skip past PREFIX_SEPARATOR and reset token_start. */ diff --git a/gas/testsuite/gas/i386/notrack-intel.d b/gas/testsuite/gas/i386/notrack-intel.d index 2ab6a8a7f82..7b72a39fd73 100644 --- a/gas/testsuite/gas/i386/notrack-intel.d +++ b/gas/testsuite/gas/i386/notrack-intel.d @@ -9,37 +9,45 @@ Disassembly of section .text: 0+ <_start>: [ ]*[a-f0-9]+: 3e ff d0 notrack call eax -[ ]*[a-f0-9]+: 66 3e ff d0 notrack call ax +[ ]*[a-f0-9]+: 3e 66 ff d0 notrack call ax [ ]*[a-f0-9]+: 3e ff e0 notrack jmp eax -[ ]*[a-f0-9]+: 66 3e ff e0 notrack jmp ax +[ ]*[a-f0-9]+: 3e 66 ff e0 notrack jmp ax [ ]*[a-f0-9]+: 3e ff 10 notrack call DWORD PTR \[eax\] -[ ]*[a-f0-9]+: 66 3e ff 10 notrack call WORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 66 ff 10 notrack call WORD PTR \[eax\] [ ]*[a-f0-9]+: 3e ff 20 notrack jmp DWORD PTR \[eax\] -[ ]*[a-f0-9]+: 66 3e ff 20 notrack jmp WORD PTR \[eax\] -[ ]*[a-f0-9]+: f2 3e ff d0 bnd notrack call eax -[ ]*[a-f0-9]+: 66 f2 3e ff d0 bnd notrack call ax -[ ]*[a-f0-9]+: f2 3e ff e0 bnd notrack jmp eax -[ ]*[a-f0-9]+: 66 f2 3e ff e0 bnd notrack jmp ax -[ ]*[a-f0-9]+: f2 3e ff 10 bnd notrack call DWORD PTR \[eax\] -[ ]*[a-f0-9]+: 66 f2 3e ff 10 bnd notrack call WORD PTR \[eax\] -[ ]*[a-f0-9]+: f2 3e ff 20 bnd notrack jmp DWORD PTR \[eax\] -[ ]*[a-f0-9]+: 66 f2 3e ff 20 bnd notrack jmp WORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 66 ff 20 notrack jmp WORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call eax +[ ]*[a-f0-9]+: 3e 66 f2 ff d0 notrack bnd call ax +[ ]*[a-f0-9]+: 3e f2 ff e0 notrack bnd jmp eax +[ ]*[a-f0-9]+: 3e 66 f2 ff e0 notrack bnd jmp ax +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call DWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 66 f2 ff 10 notrack bnd call WORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e f2 ff 20 notrack bnd jmp DWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 66 f2 ff 20 notrack bnd jmp WORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call eax +[ ]*[a-f0-9]+: 3e 66 f2 ff d0 notrack bnd call ax +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call DWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 66 f2 ff 10 notrack bnd call WORD PTR \[eax\] [ ]*[a-f0-9]+: 3e ff d0 notrack call eax -[ ]*[a-f0-9]+: 66 3e ff d0 notrack call ax +[ ]*[a-f0-9]+: 3e 66 ff d0 notrack call ax [ ]*[a-f0-9]+: 3e ff e0 notrack jmp eax -[ ]*[a-f0-9]+: 66 3e ff e0 notrack jmp ax +[ ]*[a-f0-9]+: 3e 66 ff e0 notrack jmp ax [ ]*[a-f0-9]+: 3e ff 10 notrack call DWORD PTR \[eax\] -[ ]*[a-f0-9]+: 66 3e ff 10 notrack call WORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 66 ff 10 notrack call WORD PTR \[eax\] [ ]*[a-f0-9]+: 3e ff 20 notrack jmp DWORD PTR \[eax\] -[ ]*[a-f0-9]+: 66 3e ff 20 notrack jmp WORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 66 ff 20 notrack jmp WORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call eax +[ ]*[a-f0-9]+: 3e 66 f2 ff d0 notrack bnd call ax +[ ]*[a-f0-9]+: 3e f2 ff e0 notrack bnd jmp eax +[ ]*[a-f0-9]+: 3e 66 f2 ff e0 notrack bnd jmp ax +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call DWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 66 f2 ff 10 notrack bnd call WORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e f2 ff 20 notrack bnd jmp DWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 66 f2 ff 20 notrack bnd jmp WORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call eax +[ ]*[a-f0-9]+: 3e 66 f2 ff d0 notrack bnd call ax +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call DWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 66 f2 ff 10 notrack bnd call WORD PTR \[eax\] [ ]*[a-f0-9]+: f2 3e ff d0 bnd notrack call eax -[ ]*[a-f0-9]+: 66 f2 3e ff d0 bnd notrack call ax -[ ]*[a-f0-9]+: f2 3e ff e0 bnd notrack jmp eax -[ ]*[a-f0-9]+: 66 f2 3e ff e0 bnd notrack jmp ax -[ ]*[a-f0-9]+: f2 3e ff 10 bnd notrack call DWORD PTR \[eax\] -[ ]*[a-f0-9]+: 66 f2 3e ff 10 bnd notrack call WORD PTR \[eax\] -[ ]*[a-f0-9]+: f2 3e ff 20 bnd notrack jmp DWORD PTR \[eax\] -[ ]*[a-f0-9]+: 66 f2 3e ff 20 bnd notrack jmp WORD PTR \[eax\] -[ ]*[a-f0-9]+: 3e f2 ff d0 ds bnd call eax -[ ]*[a-f0-9]+: 3e 66 ff d0 ds call ax +[ ]*[a-f0-9]+: 66 3e ff d0 notrack call ax #pass diff --git a/gas/testsuite/gas/i386/notrack.d b/gas/testsuite/gas/i386/notrack.d index 11d0ce9e155..44fd11036e2 100644 --- a/gas/testsuite/gas/i386/notrack.d +++ b/gas/testsuite/gas/i386/notrack.d @@ -8,37 +8,45 @@ Disassembly of section .text: 0+ <_start>: [ ]*[a-f0-9]+: 3e ff d0 notrack call \*%eax -[ ]*[a-f0-9]+: 66 3e ff d0 notrack callw \*%ax +[ ]*[a-f0-9]+: 3e 66 ff d0 notrack callw \*%ax [ ]*[a-f0-9]+: 3e ff e0 notrack jmp \*%eax -[ ]*[a-f0-9]+: 66 3e ff e0 notrack jmpw \*%ax +[ ]*[a-f0-9]+: 3e 66 ff e0 notrack jmpw \*%ax [ ]*[a-f0-9]+: 3e ff 10 notrack call \*\(%eax\) -[ ]*[a-f0-9]+: 66 3e ff 10 notrack callw \*\(%eax\) +[ ]*[a-f0-9]+: 3e 66 ff 10 notrack callw \*\(%eax\) [ ]*[a-f0-9]+: 3e ff 20 notrack jmp \*\(%eax\) -[ ]*[a-f0-9]+: 66 3e ff 20 notrack jmpw \*\(%eax\) -[ ]*[a-f0-9]+: f2 3e ff d0 bnd notrack call \*%eax -[ ]*[a-f0-9]+: 66 f2 3e ff d0 bnd notrack callw \*%ax -[ ]*[a-f0-9]+: f2 3e ff e0 bnd notrack jmp \*%eax -[ ]*[a-f0-9]+: 66 f2 3e ff e0 bnd notrack jmpw \*%ax -[ ]*[a-f0-9]+: f2 3e ff 10 bnd notrack call \*\(%eax\) -[ ]*[a-f0-9]+: 66 f2 3e ff 10 bnd notrack callw \*\(%eax\) -[ ]*[a-f0-9]+: f2 3e ff 20 bnd notrack jmp \*\(%eax\) -[ ]*[a-f0-9]+: 66 f2 3e ff 20 bnd notrack jmpw \*\(%eax\) +[ ]*[a-f0-9]+: 3e 66 ff 20 notrack jmpw \*\(%eax\) +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call \*%eax +[ ]*[a-f0-9]+: 3e 66 f2 ff d0 notrack bnd callw \*%ax +[ ]*[a-f0-9]+: 3e f2 ff e0 notrack bnd jmp \*%eax +[ ]*[a-f0-9]+: 3e 66 f2 ff e0 notrack bnd jmpw \*%ax +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call \*\(%eax\) +[ ]*[a-f0-9]+: 3e 66 f2 ff 10 notrack bnd callw \*\(%eax\) +[ ]*[a-f0-9]+: 3e f2 ff 20 notrack bnd jmp \*\(%eax\) +[ ]*[a-f0-9]+: 3e 66 f2 ff 20 notrack bnd jmpw \*\(%eax\) +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call \*%eax +[ ]*[a-f0-9]+: 3e 66 f2 ff d0 notrack bnd callw \*%ax +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call \*\(%eax\) +[ ]*[a-f0-9]+: 3e 66 f2 ff 10 notrack bnd callw \*\(%eax\) [ ]*[a-f0-9]+: 3e ff d0 notrack call \*%eax -[ ]*[a-f0-9]+: 66 3e ff d0 notrack callw \*%ax +[ ]*[a-f0-9]+: 3e 66 ff d0 notrack callw \*%ax [ ]*[a-f0-9]+: 3e ff e0 notrack jmp \*%eax -[ ]*[a-f0-9]+: 66 3e ff e0 notrack jmpw \*%ax +[ ]*[a-f0-9]+: 3e 66 ff e0 notrack jmpw \*%ax [ ]*[a-f0-9]+: 3e ff 10 notrack call \*\(%eax\) -[ ]*[a-f0-9]+: 66 3e ff 10 notrack callw \*\(%eax\) +[ ]*[a-f0-9]+: 3e 66 ff 10 notrack callw \*\(%eax\) [ ]*[a-f0-9]+: 3e ff 20 notrack jmp \*\(%eax\) -[ ]*[a-f0-9]+: 66 3e ff 20 notrack jmpw \*\(%eax\) +[ ]*[a-f0-9]+: 3e 66 ff 20 notrack jmpw \*\(%eax\) +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call \*%eax +[ ]*[a-f0-9]+: 3e 66 f2 ff d0 notrack bnd callw \*%ax +[ ]*[a-f0-9]+: 3e f2 ff e0 notrack bnd jmp \*%eax +[ ]*[a-f0-9]+: 3e 66 f2 ff e0 notrack bnd jmpw \*%ax +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call \*\(%eax\) +[ ]*[a-f0-9]+: 3e 66 f2 ff 10 notrack bnd callw \*\(%eax\) +[ ]*[a-f0-9]+: 3e f2 ff 20 notrack bnd jmp \*\(%eax\) +[ ]*[a-f0-9]+: 3e 66 f2 ff 20 notrack bnd jmpw \*\(%eax\) +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call \*%eax +[ ]*[a-f0-9]+: 3e 66 f2 ff d0 notrack bnd callw \*%ax +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call \*\(%eax\) +[ ]*[a-f0-9]+: 3e 66 f2 ff 10 notrack bnd callw \*\(%eax\) [ ]*[a-f0-9]+: f2 3e ff d0 bnd notrack call \*%eax -[ ]*[a-f0-9]+: 66 f2 3e ff d0 bnd notrack callw \*%ax -[ ]*[a-f0-9]+: f2 3e ff e0 bnd notrack jmp \*%eax -[ ]*[a-f0-9]+: 66 f2 3e ff e0 bnd notrack jmpw \*%ax -[ ]*[a-f0-9]+: f2 3e ff 10 bnd notrack call \*\(%eax\) -[ ]*[a-f0-9]+: 66 f2 3e ff 10 bnd notrack callw \*\(%eax\) -[ ]*[a-f0-9]+: f2 3e ff 20 bnd notrack jmp \*\(%eax\) -[ ]*[a-f0-9]+: 66 f2 3e ff 20 bnd notrack jmpw \*\(%eax\) -[ ]*[a-f0-9]+: 3e f2 ff d0 ds bnd call \*%eax -[ ]*[a-f0-9]+: 3e 66 ff d0 ds callw \*%ax +[ ]*[a-f0-9]+: 66 3e ff d0 notrack callw \*%ax #pass diff --git a/gas/testsuite/gas/i386/notrack.s b/gas/testsuite/gas/i386/notrack.s index 8383645b019..e6db928feeb 100644 --- a/gas/testsuite/gas/i386/notrack.s +++ b/gas/testsuite/gas/i386/notrack.s @@ -13,15 +13,20 @@ _start: notrack jmp *(%eax) notrack jmpw *(%eax) + notrack bnd call *%eax + notrack bnd call *%ax + notrack bnd jmp *%eax + notrack bnd jmp *%ax + + notrack bnd call *(%eax) + notrack bnd callw *(%eax) + notrack bnd jmp *(%eax) + notrack bnd jmpw *(%eax) + bnd notrack call *%eax bnd notrack call *%ax - bnd notrack jmp *%eax - bnd notrack jmp *%ax - bnd notrack call *(%eax) bnd notrack callw *(%eax) - bnd notrack jmp *(%eax) - bnd notrack jmpw *(%eax) .intel_syntax noprefix notrack call eax @@ -34,24 +39,29 @@ _start: notrack jmp DWORD PTR [eax] notrack jmp WORD PTR [eax] + notrack bnd call eax + notrack bnd call ax + notrack bnd jmp eax + notrack bnd jmp ax + + notrack bnd call DWORD PTR [eax] + notrack bnd call WORD PTR [eax] + notrack bnd jmp DWORD PTR [eax] + notrack bnd jmp WORD PTR [eax] + bnd notrack call eax bnd notrack call ax - bnd notrack jmp eax - bnd notrack jmp ax - bnd notrack call DWORD PTR [eax] bnd notrack call WORD PTR [eax] - bnd notrack jmp DWORD PTR [eax] - bnd notrack jmp WORD PTR [eax] - # ds bnd call *%eax - .byte 0x3e + # bnd notrack call *%eax .byte 0xf2 + .byte 0x3e .byte 0xff .byte 0xd0 - # ds callw *%ax - .byte 0x3e + # notrack callw *%ax .byte 0x66 + .byte 0x3e .byte 0xff .byte 0xd0 diff --git a/gas/testsuite/gas/i386/notrackbad.l b/gas/testsuite/gas/i386/notrackbad.l index 48ee69f96a1..2271a92bf6a 100644 --- a/gas/testsuite/gas/i386/notrackbad.l +++ b/gas/testsuite/gas/i386/notrackbad.l @@ -2,15 +2,10 @@ .*:6: Error: expecting indirect branch instruction after `notrack' .*:6: Warning: skipping prefixes on this instruction .*:7: Error: expecting indirect branch instruction after `notrack' -.*:7: Warning: skipping prefixes on this instruction .*:9: Error: same type of prefix used twice -.*:10: Error: expecting no other prefixes after `notrack' -.*:11: Error: expecting no other prefixes after `notrack' -.*:12: Error: expecting no other prefixes after `notrack' -.*:15: Error: same type of prefix used twice -.*:16: Error: expecting no other prefixes after `notrack' -.*:17: Error: expecting no other prefixes after `notrack' -.*:18: Error: expecting no other prefixes after `notrack' +.*:10: Error: same type of prefix used twice +.*:13: Error: same type of prefix used twice +.*:14: Error: same type of prefix used twice GAS LISTING .* @@ -25,17 +20,12 @@ GAS LISTING .* [ ]*6[ ]+[0-9A-F]* [ ]*7[ ]+\?\?\?\? [0-9A-F]* notrack jmp foo \*\*\*\* Error: expecting indirect branch instruction after `notrack' -\*\*\*\* Warning: skipping prefixes on this instruction [ ]*7[ ]+[0-9A-F]* [ ]*8[ ]+ [ ]*9[ ]+fs notrack call \*%eax [ ]*10[ ]+notrack fs call \*%eax -[ ]*11[ ]+notrack bnd call \*%eax -[ ]*12[ ]+notrack data16 call \*%eax -[ ]*13[ ]+ -[ ]*14[ ]+\.intel_syntax noprefix -[ ]*15[ ]+fs notrack call eax -[ ]*16[ ]+notrack fs call eax -[ ]*17[ ]+notrack bnd call eax -[ ]*18[ ]+[\? 0-9A-F]*[ ]+notrack data16 call eax +[ ]*11[ ]+ +[ ]*12[ ]+\.intel_syntax noprefix +[ ]*13[ ]+fs notrack call eax +[ ]*14[ ]+notrack fs call eax #pass diff --git a/gas/testsuite/gas/i386/notrackbad.s b/gas/testsuite/gas/i386/notrackbad.s index 3f57ef0fb57..535ec56bba9 100644 --- a/gas/testsuite/gas/i386/notrackbad.s +++ b/gas/testsuite/gas/i386/notrackbad.s @@ -8,11 +8,9 @@ _start: fs notrack call *%eax notrack fs call *%eax - notrack bnd call *%eax - notrack data16 call *%eax .intel_syntax noprefix fs notrack call eax notrack fs call eax - notrack bnd call eax - notrack data16 call eax + + .p2align 4,0 diff --git a/gas/testsuite/gas/i386/x86-64-notrack-intel.d b/gas/testsuite/gas/i386/x86-64-notrack-intel.d index 0170a82dbe9..b9967908324 100644 --- a/gas/testsuite/gas/i386/x86-64-notrack-intel.d +++ b/gas/testsuite/gas/i386/x86-64-notrack-intel.d @@ -16,22 +16,28 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 3e 41 ff 10 notrack call QWORD PTR \[r8\] [ ]*[a-f0-9]+: 3e ff 20 notrack jmp QWORD PTR \[rax\] [ ]*[a-f0-9]+: 3e 41 ff 20 notrack jmp QWORD PTR \[r8\] -[ ]*[a-f0-9]+: 67 3e ff 10 notrack call QWORD PTR \[eax\] -[ ]*[a-f0-9]+: 67 3e 41 ff 10 notrack call QWORD PTR \[r8d\] -[ ]*[a-f0-9]+: 67 3e ff 20 notrack jmp QWORD PTR \[eax\] -[ ]*[a-f0-9]+: 67 3e 41 ff 20 notrack jmp QWORD PTR \[r8d\] -[ ]*[a-f0-9]+: f2 3e ff d0 bnd notrack call rax -[ ]*[a-f0-9]+: f2 3e 41 ff d0 bnd notrack call r8 -[ ]*[a-f0-9]+: f2 3e ff e0 bnd notrack jmp rax -[ ]*[a-f0-9]+: f2 3e 41 ff e0 bnd notrack jmp r8 -[ ]*[a-f0-9]+: f2 3e ff 10 bnd notrack call QWORD PTR \[rax\] -[ ]*[a-f0-9]+: f2 3e 41 ff 10 bnd notrack call QWORD PTR \[r8\] -[ ]*[a-f0-9]+: f2 3e ff 20 bnd notrack jmp QWORD PTR \[rax\] -[ ]*[a-f0-9]+: f2 3e 41 ff 20 bnd notrack jmp QWORD PTR \[r8\] -[ ]*[a-f0-9]+: 67 f2 3e ff 10 bnd notrack call QWORD PTR \[eax\] -[ ]*[a-f0-9]+: 67 f2 3e 41 ff 10 bnd notrack call QWORD PTR \[r8d\] -[ ]*[a-f0-9]+: 67 f2 3e ff 20 bnd notrack jmp QWORD PTR \[eax\] -[ ]*[a-f0-9]+: 67 f2 3e 41 ff 20 bnd notrack jmp QWORD PTR \[r8d\] +[ ]*[a-f0-9]+: 3e 67 ff 10 notrack call QWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 67 41 ff 10 notrack call QWORD PTR \[r8d\] +[ ]*[a-f0-9]+: 3e 67 ff 20 notrack jmp QWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 67 41 ff 20 notrack jmp QWORD PTR \[r8d\] +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call rax +[ ]*[a-f0-9]+: 3e f2 41 ff d0 notrack bnd call r8 +[ ]*[a-f0-9]+: 3e f2 ff e0 notrack bnd jmp rax +[ ]*[a-f0-9]+: 3e f2 41 ff e0 notrack bnd jmp r8 +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call QWORD PTR \[rax\] +[ ]*[a-f0-9]+: 3e f2 41 ff 10 notrack bnd call QWORD PTR \[r8\] +[ ]*[a-f0-9]+: 3e f2 ff 20 notrack bnd jmp QWORD PTR \[rax\] +[ ]*[a-f0-9]+: 3e f2 41 ff 20 notrack bnd jmp QWORD PTR \[r8\] +[ ]*[a-f0-9]+: 3e 67 f2 ff 10 notrack bnd call QWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 10 notrack bnd call QWORD PTR \[r8d\] +[ ]*[a-f0-9]+: 3e 67 f2 ff 20 notrack bnd jmp QWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 20 notrack bnd jmp QWORD PTR \[r8d\] +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call rax +[ ]*[a-f0-9]+: 3e f2 41 ff d0 notrack bnd call r8 +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call QWORD PTR \[rax\] +[ ]*[a-f0-9]+: 3e f2 41 ff 10 notrack bnd call QWORD PTR \[r8\] +[ ]*[a-f0-9]+: 3e 67 f2 ff 10 notrack bnd call QWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 10 notrack bnd call QWORD PTR \[r8d\] [ ]*[a-f0-9]+: 3e ff d0 notrack call rax [ ]*[a-f0-9]+: 3e 41 ff d0 notrack call r8 [ ]*[a-f0-9]+: 3e ff e0 notrack jmp rax @@ -40,23 +46,29 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 3e 41 ff 10 notrack call QWORD PTR \[r8\] [ ]*[a-f0-9]+: 3e ff 20 notrack jmp QWORD PTR \[rax\] [ ]*[a-f0-9]+: 3e 41 ff 20 notrack jmp QWORD PTR \[r8\] -[ ]*[a-f0-9]+: 67 3e ff 10 notrack call QWORD PTR \[eax\] -[ ]*[a-f0-9]+: 67 3e 41 ff 10 notrack call QWORD PTR \[r8d\] -[ ]*[a-f0-9]+: 67 3e ff 20 notrack jmp QWORD PTR \[eax\] -[ ]*[a-f0-9]+: 67 3e 41 ff 20 notrack jmp QWORD PTR \[r8d\] +[ ]*[a-f0-9]+: 3e 67 ff 10 notrack call QWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 67 41 ff 10 notrack call QWORD PTR \[r8d\] +[ ]*[a-f0-9]+: 3e 67 ff 20 notrack jmp QWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 67 41 ff 20 notrack jmp QWORD PTR \[r8d\] +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call rax +[ ]*[a-f0-9]+: 3e f2 41 ff d0 notrack bnd call r8 +[ ]*[a-f0-9]+: 3e f2 ff e0 notrack bnd jmp rax +[ ]*[a-f0-9]+: 3e f2 41 ff e0 notrack bnd jmp r8 +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call QWORD PTR \[rax\] +[ ]*[a-f0-9]+: 3e f2 41 ff 10 notrack bnd call QWORD PTR \[r8\] +[ ]*[a-f0-9]+: 3e f2 ff 20 notrack bnd jmp QWORD PTR \[rax\] +[ ]*[a-f0-9]+: 3e f2 41 ff 20 notrack bnd jmp QWORD PTR \[r8\] +[ ]*[a-f0-9]+: 3e 67 f2 ff 10 notrack bnd call QWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 10 notrack bnd call QWORD PTR \[r8d\] +[ ]*[a-f0-9]+: 3e 67 f2 ff 20 notrack bnd jmp QWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 20 notrack bnd jmp QWORD PTR \[r8d\] +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd call rax +[ ]*[a-f0-9]+: 3e f2 41 ff d0 notrack bnd call r8 +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd call QWORD PTR \[rax\] +[ ]*[a-f0-9]+: 3e f2 41 ff 10 notrack bnd call QWORD PTR \[r8\] +[ ]*[a-f0-9]+: 3e 67 f2 ff 10 notrack bnd call QWORD PTR \[eax\] +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 10 notrack bnd call QWORD PTR \[r8d\] [ ]*[a-f0-9]+: f2 3e ff d0 bnd notrack call rax -[ ]*[a-f0-9]+: f2 3e 41 ff d0 bnd notrack call r8 -[ ]*[a-f0-9]+: f2 3e ff e0 bnd notrack jmp rax -[ ]*[a-f0-9]+: f2 3e 41 ff e0 bnd notrack jmp r8 -[ ]*[a-f0-9]+: f2 3e ff 10 bnd notrack call QWORD PTR \[rax\] -[ ]*[a-f0-9]+: f2 3e 41 ff 10 bnd notrack call QWORD PTR \[r8\] -[ ]*[a-f0-9]+: f2 3e ff 20 bnd notrack jmp QWORD PTR \[rax\] -[ ]*[a-f0-9]+: f2 3e 41 ff 20 bnd notrack jmp QWORD PTR \[r8\] -[ ]*[a-f0-9]+: 67 f2 3e ff 10 bnd notrack call QWORD PTR \[eax\] -[ ]*[a-f0-9]+: 67 f2 3e 41 ff 10 bnd notrack call QWORD PTR \[r8d\] -[ ]*[a-f0-9]+: 67 f2 3e ff 20 bnd notrack jmp QWORD PTR \[eax\] -[ ]*[a-f0-9]+: 67 f2 3e 41 ff 20 bnd notrack jmp QWORD PTR \[r8d\] -[ ]*[a-f0-9]+: 3e f2 ff d0 ds bnd call rax [ ]*[a-f0-9]+: 3e 66 ff d0 ds call ax [ ]*[a-f0-9]+: 66 3e ff d0 ds call ax #pass diff --git a/gas/testsuite/gas/i386/x86-64-notrack.d b/gas/testsuite/gas/i386/x86-64-notrack.d index cf725d45786..e525f43cbc8 100644 --- a/gas/testsuite/gas/i386/x86-64-notrack.d +++ b/gas/testsuite/gas/i386/x86-64-notrack.d @@ -15,22 +15,28 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 3e 41 ff 10 notrack callq \*\(%r8\) [ ]*[a-f0-9]+: 3e ff 20 notrack jmpq \*\(%rax\) [ ]*[a-f0-9]+: 3e 41 ff 20 notrack jmpq \*\(%r8\) -[ ]*[a-f0-9]+: 67 3e ff 10 notrack callq \*\(%eax\) -[ ]*[a-f0-9]+: 67 3e 41 ff 10 notrack callq \*\(%r8d\) -[ ]*[a-f0-9]+: 67 3e ff 20 notrack jmpq \*\(%eax\) -[ ]*[a-f0-9]+: 67 3e 41 ff 20 notrack jmpq \*\(%r8d\) -[ ]*[a-f0-9]+: f2 3e ff d0 bnd notrack callq \*%rax -[ ]*[a-f0-9]+: f2 3e 41 ff d0 bnd notrack callq \*%r8 -[ ]*[a-f0-9]+: f2 3e ff e0 bnd notrack jmpq \*%rax -[ ]*[a-f0-9]+: f2 3e 41 ff e0 bnd notrack jmpq \*%r8 -[ ]*[a-f0-9]+: f2 3e ff 10 bnd notrack callq \*\(%rax\) -[ ]*[a-f0-9]+: f2 3e 41 ff 10 bnd notrack callq \*\(%r8\) -[ ]*[a-f0-9]+: f2 3e ff 20 bnd notrack jmpq \*\(%rax\) -[ ]*[a-f0-9]+: f2 3e 41 ff 20 bnd notrack jmpq \*\(%r8\) -[ ]*[a-f0-9]+: 67 f2 3e ff 10 bnd notrack callq \*\(%eax\) -[ ]*[a-f0-9]+: 67 f2 3e 41 ff 10 bnd notrack callq \*\(%r8d\) -[ ]*[a-f0-9]+: 67 f2 3e ff 20 bnd notrack jmpq \*\(%eax\) -[ ]*[a-f0-9]+: 67 f2 3e 41 ff 20 bnd notrack jmpq \*\(%r8d\) +[ ]*[a-f0-9]+: 3e 67 ff 10 notrack callq \*\(%eax\) +[ ]*[a-f0-9]+: 3e 67 41 ff 10 notrack callq \*\(%r8d\) +[ ]*[a-f0-9]+: 3e 67 ff 20 notrack jmpq \*\(%eax\) +[ ]*[a-f0-9]+: 3e 67 41 ff 20 notrack jmpq \*\(%r8d\) +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd callq \*%rax +[ ]*[a-f0-9]+: 3e f2 41 ff d0 notrack bnd callq \*%r8 +[ ]*[a-f0-9]+: 3e f2 ff e0 notrack bnd jmpq \*%rax +[ ]*[a-f0-9]+: 3e f2 41 ff e0 notrack bnd jmpq \*%r8 +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd callq \*\(%rax\) +[ ]*[a-f0-9]+: 3e f2 41 ff 10 notrack bnd callq \*\(%r8\) +[ ]*[a-f0-9]+: 3e f2 ff 20 notrack bnd jmpq \*\(%rax\) +[ ]*[a-f0-9]+: 3e f2 41 ff 20 notrack bnd jmpq \*\(%r8\) +[ ]*[a-f0-9]+: 3e 67 f2 ff 10 notrack bnd callq \*\(%eax\) +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 10 notrack bnd callq \*\(%r8d\) +[ ]*[a-f0-9]+: 3e 67 f2 ff 20 notrack bnd jmpq \*\(%eax\) +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 20 notrack bnd jmpq \*\(%r8d\) +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd callq \*%rax +[ ]*[a-f0-9]+: 3e f2 41 ff d0 notrack bnd callq \*%r8 +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd callq \*\(%rax\) +[ ]*[a-f0-9]+: 3e f2 41 ff 10 notrack bnd callq \*\(%r8\) +[ ]*[a-f0-9]+: 3e 67 f2 ff 10 notrack bnd callq \*\(%eax\) +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 10 notrack bnd callq \*\(%r8d\) [ ]*[a-f0-9]+: 3e ff d0 notrack callq \*%rax [ ]*[a-f0-9]+: 3e 41 ff d0 notrack callq \*%r8 [ ]*[a-f0-9]+: 3e ff e0 notrack jmpq \*%rax @@ -39,23 +45,29 @@ Disassembly of section .text: [ ]*[a-f0-9]+: 3e 41 ff 10 notrack callq \*\(%r8\) [ ]*[a-f0-9]+: 3e ff 20 notrack jmpq \*\(%rax\) [ ]*[a-f0-9]+: 3e 41 ff 20 notrack jmpq \*\(%r8\) -[ ]*[a-f0-9]+: 67 3e ff 10 notrack callq \*\(%eax\) -[ ]*[a-f0-9]+: 67 3e 41 ff 10 notrack callq \*\(%r8d\) -[ ]*[a-f0-9]+: 67 3e ff 20 notrack jmpq \*\(%eax\) -[ ]*[a-f0-9]+: 67 3e 41 ff 20 notrack jmpq \*\(%r8d\) +[ ]*[a-f0-9]+: 3e 67 ff 10 notrack callq \*\(%eax\) +[ ]*[a-f0-9]+: 3e 67 41 ff 10 notrack callq \*\(%r8d\) +[ ]*[a-f0-9]+: 3e 67 ff 20 notrack jmpq \*\(%eax\) +[ ]*[a-f0-9]+: 3e 67 41 ff 20 notrack jmpq \*\(%r8d\) +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd callq \*%rax +[ ]*[a-f0-9]+: 3e f2 41 ff d0 notrack bnd callq \*%r8 +[ ]*[a-f0-9]+: 3e f2 ff e0 notrack bnd jmpq \*%rax +[ ]*[a-f0-9]+: 3e f2 41 ff e0 notrack bnd jmpq \*%r8 +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd callq \*\(%rax\) +[ ]*[a-f0-9]+: 3e f2 41 ff 10 notrack bnd callq \*\(%r8\) +[ ]*[a-f0-9]+: 3e f2 ff 20 notrack bnd jmpq \*\(%rax\) +[ ]*[a-f0-9]+: 3e f2 41 ff 20 notrack bnd jmpq \*\(%r8\) +[ ]*[a-f0-9]+: 3e 67 f2 ff 10 notrack bnd callq \*\(%eax\) +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 10 notrack bnd callq \*\(%r8d\) +[ ]*[a-f0-9]+: 3e 67 f2 ff 20 notrack bnd jmpq \*\(%eax\) +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 20 notrack bnd jmpq \*\(%r8d\) +[ ]*[a-f0-9]+: 3e f2 ff d0 notrack bnd callq \*%rax +[ ]*[a-f0-9]+: 3e f2 41 ff d0 notrack bnd callq \*%r8 +[ ]*[a-f0-9]+: 3e f2 ff 10 notrack bnd callq \*\(%rax\) +[ ]*[a-f0-9]+: 3e f2 41 ff 10 notrack bnd callq \*\(%r8\) +[ ]*[a-f0-9]+: 3e 67 f2 ff 10 notrack bnd callq \*\(%eax\) +[ ]*[a-f0-9]+: 3e 67 f2 41 ff 10 notrack bnd callq \*\(%r8d\) [ ]*[a-f0-9]+: f2 3e ff d0 bnd notrack callq \*%rax -[ ]*[a-f0-9]+: f2 3e 41 ff d0 bnd notrack callq \*%r8 -[ ]*[a-f0-9]+: f2 3e ff e0 bnd notrack jmpq \*%rax -[ ]*[a-f0-9]+: f2 3e 41 ff e0 bnd notrack jmpq \*%r8 -[ ]*[a-f0-9]+: f2 3e ff 10 bnd notrack callq \*\(%rax\) -[ ]*[a-f0-9]+: f2 3e 41 ff 10 bnd notrack callq \*\(%r8\) -[ ]*[a-f0-9]+: f2 3e ff 20 bnd notrack jmpq \*\(%rax\) -[ ]*[a-f0-9]+: f2 3e 41 ff 20 bnd notrack jmpq \*\(%r8\) -[ ]*[a-f0-9]+: 67 f2 3e ff 10 bnd notrack callq \*\(%eax\) -[ ]*[a-f0-9]+: 67 f2 3e 41 ff 10 bnd notrack callq \*\(%r8d\) -[ ]*[a-f0-9]+: 67 f2 3e ff 20 bnd notrack jmpq \*\(%eax\) -[ ]*[a-f0-9]+: 67 f2 3e 41 ff 20 bnd notrack jmpq \*\(%r8d\) -[ ]*[a-f0-9]+: 3e f2 ff d0 ds bnd callq \*%rax [ ]*[a-f0-9]+: 3e 66 ff d0 ds callw \*%ax [ ]*[a-f0-9]+: 66 3e ff d0 ds callw \*%ax #pass diff --git a/gas/testsuite/gas/i386/x86-64-notrack.s b/gas/testsuite/gas/i386/x86-64-notrack.s index 7db0812024d..aeebd11a766 100644 --- a/gas/testsuite/gas/i386/x86-64-notrack.s +++ b/gas/testsuite/gas/i386/x86-64-notrack.s @@ -18,20 +18,27 @@ _start: notrack jmp *(%eax) notrack jmp *(%r8d) + notrack bnd call *%rax + notrack bnd call *%r8 + notrack bnd jmp *%rax + notrack bnd jmp *%r8 + + notrack bnd call *(%rax) + notrack bnd call *(%r8) + notrack bnd jmp *(%rax) + notrack bnd jmp *(%r8) + + notrack bnd call *(%eax) + notrack bnd call *(%r8d) + notrack bnd jmp *(%eax) + notrack bnd jmp *(%r8d) + bnd notrack call *%rax bnd notrack call *%r8 - bnd notrack jmp *%rax - bnd notrack jmp *%r8 - bnd notrack call *(%rax) bnd notrack call *(%r8) - bnd notrack jmp *(%rax) - bnd notrack jmp *(%r8) - bnd notrack call *(%eax) bnd notrack call *(%r8d) - bnd notrack jmp *(%eax) - bnd notrack jmp *(%r8d) .intel_syntax noprefix notrack call rax @@ -49,24 +56,31 @@ _start: notrack jmp QWORD PTR [eax] notrack jmp QWORD PTR [r8d] + notrack bnd call rax + notrack bnd call r8 + notrack bnd jmp rax + notrack bnd jmp r8 + + notrack bnd call QWORD PTR [rax] + notrack bnd call QWORD PTR [r8] + notrack bnd jmp QWORD PTR [rax] + notrack bnd jmp QWORD PTR [r8] + + notrack bnd call QWORD PTR [eax] + notrack bnd call QWORD PTR [r8d] + notrack bnd jmp QWORD PTR [eax] + notrack bnd jmp QWORD PTR [r8d] + bnd notrack call rax bnd notrack call r8 - bnd notrack jmp rax - bnd notrack jmp r8 - bnd notrack call QWORD PTR [rax] bnd notrack call QWORD PTR [r8] - bnd notrack jmp QWORD PTR [rax] - bnd notrack jmp QWORD PTR [r8] - bnd notrack call QWORD PTR [eax] bnd notrack call QWORD PTR [r8d] - bnd notrack jmp QWORD PTR [eax] - bnd notrack jmp QWORD PTR [r8d] - # ds bnd callq *%rax - .byte 0x3e + # bnd notrack callq *%rax .byte 0xf2 + .byte 0x3e .byte 0xff .byte 0xd0 diff --git a/gas/testsuite/gas/i386/x86-64-notrackbad.l b/gas/testsuite/gas/i386/x86-64-notrackbad.l index cd516826b80..95a0f91ce10 100644 --- a/gas/testsuite/gas/i386/x86-64-notrackbad.l +++ b/gas/testsuite/gas/i386/x86-64-notrackbad.l @@ -2,15 +2,10 @@ .*:6: Error: expecting indirect branch instruction after `notrack' .*:6: Warning: skipping prefixes on this instruction .*:7: Error: expecting indirect branch instruction after `notrack' -.*:7: Warning: skipping prefixes on this instruction .*:9: Error: same type of prefix used twice -.*:10: Error: expecting no other prefixes after `notrack' -.*:11: Error: expecting no other prefixes after `notrack' -.*:12: Error: expecting no other prefixes after `notrack' -.*:15: Error: same type of prefix used twice -.*:16: Error: expecting no other prefixes after `notrack' -.*:17: Error: expecting no other prefixes after `notrack' -.*:18: Error: expecting no other prefixes after `notrack' +.*:10: Error: same type of prefix used twice +.*:13: Error: same type of prefix used twice +.*:14: Error: same type of prefix used twice GAS LISTING .* @@ -25,17 +20,12 @@ GAS LISTING .* [ ]*6[ ]+[0-9A-F]* [ ]*7[ ]+\?\?\?\? [0-9A-F]* notrack jmp foo \*\*\*\* Error: expecting indirect branch instruction after `notrack' -\*\*\*\* Warning: skipping prefixes on this instruction [ ]*7[ ]+[0-9A-F]* [ ]*8[ ]+ [ ]*9[ ]+fs notrack call \*%rax [ ]*10[ ]+notrack fs call \*%rax -[ ]*11[ ]+notrack bnd call \*%rax -[ ]*12[ ]+notrack data16 call \*%rax -[ ]*13[ ]+ -[ ]*14[ ]+\.intel_syntax noprefix -[ ]*15[ ]+fs notrack call rax -[ ]*16[ ]+notrack fs call rax -[ ]*17[ ]+notrack bnd call rax -[ ]*18[ ]+[\? 0-9A-F]*[ ]+notrack data16 call rax +[ ]*11[ ]+ +[ ]*12[ ]+\.intel_syntax noprefix +[ ]*13[ ]+fs notrack call rax +[ ]*14[ ]+notrack fs call rax #pass diff --git a/gas/testsuite/gas/i386/x86-64-notrackbad.s b/gas/testsuite/gas/i386/x86-64-notrackbad.s index f859a9fb055..4f49328ac5b 100644 --- a/gas/testsuite/gas/i386/x86-64-notrackbad.s +++ b/gas/testsuite/gas/i386/x86-64-notrackbad.s @@ -8,11 +8,9 @@ _start: fs notrack call *%rax notrack fs call *%rax - notrack bnd call *%rax - notrack data16 call *%rax .intel_syntax noprefix fs notrack call rax notrack fs call rax - notrack bnd call rax - notrack data16 call rax + + .p2align 4,0 diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index b8c1586ae44..fb1fc362bf8 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,9 @@ +2017-09-09 H.J. Lu + + * i386-dis.c (last_active_prefix): Removed. + (ckprefix): Don't set last_active_prefix. + (NOTRACK_Fixup): Don't check last_active_prefix. + 2017-08-31 Nick Clifton * po/fr.po: Updated French translation. diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index a3ce08d3084..edf534528dd 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -3169,7 +3169,6 @@ static int last_data_prefix; static int last_addr_prefix; static int last_rex_prefix; static int last_seg_prefix; -static int last_active_prefix; static int fwait_prefix; /* The active segment register prefix. */ static int active_seg_prefix; @@ -12303,7 +12302,6 @@ ckprefix (void) last_addr_prefix = -1; last_rex_prefix = -1; last_seg_prefix = -1; - last_active_prefix = -1; fwait_prefix = -1; active_seg_prefix = 0; for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++) @@ -12416,10 +12414,7 @@ ckprefix (void) return 1; } if (*codep != FWAIT_OPCODE) - { - last_active_prefix = i; - all_prefixes[i++] = *codep; - } + all_prefixes[i++] = *codep; rex = newrex; codep++; length++; @@ -16820,17 +16815,8 @@ NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED, if (active_seg_prefix == PREFIX_DS && (address_mode != mode_64bit || last_data_prefix < 0)) { - /* NOTRACK prefix is only valid on indirect branch instructions - and it must be the last prefix before REX prefix and opcode. + /* NOTRACK prefix is only valid on indirect branch instructions. NB: DATA prefix is unsupported for Intel64. */ - if (last_active_prefix >= 0) - { - int notrack_prefix = last_active_prefix; - if (last_rex_prefix == last_active_prefix) - notrack_prefix--; - if (all_prefixes[notrack_prefix] != NOTRACK_PREFIX_OPCODE) - return; - } active_seg_prefix = 0; all_prefixes[last_seg_prefix] = NOTRACK_PREFIX; }