From 8178be5b0c4aa52ca8c63c68e474369b28e5d834 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 1 Jul 2016 09:07:15 +0200 Subject: [PATCH] x86-64/MPX: bndmk, bndldx, and bndstx don't allow RIP-relative addressing Additionally warn about scaling factors other than 1 for the latter two, as those get ignored by the hardware. --- gas/ChangeLog | 8 + gas/config/tc-i386.c | 17 ++ gas/testsuite/gas/i386/x86-64-mpx-inval-2.l | 318 ++++++++++++-------- gas/testsuite/gas/i386/x86-64-mpx-inval-2.s | 16 + 4 files changed, 227 insertions(+), 132 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 89e4a1ef13c..f0a4f9b5e3c 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2016-07-01 Jan Beulich + + * tc-i386.c (i386_index_check): Add special checks for bndmk, + bndldx, and bndstx. + * testsuite/gas/i386/mpx-inval-2.s: Add %rip and %eip relative + as well as scaling by other than 1 tests. + * testsuite/gas/i386/mpx-inval-2.l: Adjust accordingly. + 2016-07-01 Jan Beulich * tc-i386.c (md_assemble): Alter address size checking for MPX diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index db904964c59..4ba05baccb3 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -8612,6 +8612,23 @@ bad_address: || i.index_reg->reg_num == RegEiz)) || !i.index_reg->reg_type.bitfield.baseindex))) goto bad_address; + + /* bndmk, bndldx, and bndstx have special restrictions. */ + if (current_templates->start->base_opcode == 0xf30f1b + || (current_templates->start->base_opcode & ~1) == 0x0f1a) + { + /* They cannot use RIP-relative addressing. */ + if (i.base_reg && i.base_reg->reg_num == RegRip) + { + as_bad (_("`%s' cannot be used here"), operand_string); + return 0; + } + + /* bndldx and bndstx ignore their scale factor. */ + if (current_templates->start->base_opcode != 0xf30f1b + && i.log2_scale_factor) + as_warn (_("register scaling is being ignored here")); + } } else { diff --git a/gas/testsuite/gas/i386/x86-64-mpx-inval-2.l b/gas/testsuite/gas/i386/x86-64-mpx-inval-2.l index d9a1b6e747b..409e75fbfbc 100644 --- a/gas/testsuite/gas/i386/x86-64-mpx-inval-2.l +++ b/gas/testsuite/gas/i386/x86-64-mpx-inval-2.l @@ -1,36 +1,52 @@ .*: Assembler messages: .*:6: Error: 32-bit address isn't allowed in 64-bit MPX instructions. .*:7: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:10: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:11: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:8: Error: `\(%rip\)' cannot be used here +.*:9: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:12: Error: 32-bit address isn't allowed in 64-bit MPX instructions. .*:13: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:14: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:17: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:18: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:21: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:22: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:25: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:26: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:29: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:30: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:33: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:34: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:37: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:15: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:16: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:19: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:20: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:23: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:24: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:27: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:28: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:31: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:32: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:33: Warning: register scaling is being ignored here +.*:34: Error: `base\(%rip\)' cannot be used here +.*:35: Error: 32-bit address isn't allowed in 64-bit MPX instructions. .*:38: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:41: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:39: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:40: Warning: register scaling is being ignored here +.*:41: Error: `base\(%rip\)' cannot be used here .*:42: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:44: Error: 32-bit address isn't allowed in 64-bit MPX instructions. .*:45: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:46: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:47: Error: `\[rip\]' cannot be used here .*:48: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:49: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:51: Error: 32-bit address isn't allowed in 64-bit MPX instructions. .*:52: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:53: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:56: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:57: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:60: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:61: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:64: Error: 32-bit address isn't allowed in 64-bit MPX instructions. -.*:65: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:54: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:55: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:58: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:59: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:62: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:63: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:66: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:67: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:70: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:71: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:72: Warning: register scaling is being ignored here +.*:73: Error: `\[rip\+base\]' cannot be used here +.*:74: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:77: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:78: Error: 32-bit address isn't allowed in 64-bit MPX instructions. +.*:79: Warning: register scaling is being ignored here +.*:80: Error: `\[rip\+base\]' cannot be used here +.*:81: Error: 32-bit address isn't allowed in 64-bit MPX instructions. GAS LISTING .* @@ -45,130 +61,168 @@ GAS LISTING .* [ ]*7[ ]+\?\?\?\? 67F30F1B bndmk 0x3\(%ecx,%ebx,1\), %bnd1 .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. [ ]*7[ ]+4C1903 -[ ]*8[ ]+ -[ ]*9[ ]+\#\#\# bndmov -[ ]*10[ ]+\?\?\?\? 6766410F bndmov \(%r8d\), %bnd1 +[ ]*8[ ]+bndmk \(%rip\), %bnd3 +[ ]*9[ ]+\?\?\?\? 67F30F1B bndmk \(%eip\), %bnd2 .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*10[ ]+1A08 -[ ]*11[ ]+\?\?\?\? 6766410F bndmov 0x3\(%r9d,%edx,1\), %bnd1 +[ ]*9[ ]+15000000 +[ ]*9[ ]+00 +[ ]*10[ ]+ +[ ]*11[ ]+\#\#\# bndmov +[ ]*12[ ]+\?\?\?\? 6766410F bndmov \(%r8d\), %bnd1 .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*11[ ]+1A4C1103 -[ ]*12[ ]+ -[ ]*13[ ]+\?\?\?\? 67660F1B bndmov %bnd1, \(%eax\) +[ ]*12[ ]+1A08 +[ ]*13[ ]+\?\?\?\? 6766410F bndmov 0x3\(%r9d,%edx,1\), %bnd1 .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*13[ ]+08 -[ ]*14[ ]+\?\?\?\? 67660F1B bndmov %bnd1, 0x3\(%ecx,%eax,1\) +[ ]*13[ ]+1A4C1103 +[ ]*14[ ]+ +[ ]*15[ ]+\?\?\?\? 67660F1B bndmov %bnd1, \(%eax\) .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*14[ ]+4C0103 -[ ]*15[ ]+ -[ ]*16[ ]+\#\#\# bndcl -[ ]*17[ ]+\?\?\?\? 67F30F1A bndcl \(%ecx\), %bnd1 +[ ]*15[ ]+08 +[ ]*16[ ]+\?\?\?\? 67660F1B bndmov %bnd1, 0x3\(%ecx,%eax,1\) .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*17[ ]+09 -[ ]*18[ ]+\?\?\?\? 67F30F1A bndcl 0x3\(%ecx,%eax,1\), %bnd1 +[ ]*16[ ]+4C0103 +[ ]*17[ ]+ +[ ]*18[ ]+\#\#\# bndcl +[ ]*19[ ]+\?\?\?\? 67F30F1A bndcl \(%ecx\), %bnd1 .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*18[ ]+4C0103 -[ ]*19[ ]+ -[ ]*20[ ]+\#\#\# bndcu -[ ]*21[ ]+\?\?\?\? 67F20F1A bndcu \(%ecx\), %bnd1 +[ ]*19[ ]+09 +[ ]*20[ ]+\?\?\?\? 67F30F1A bndcl 0x3\(%ecx,%eax,1\), %bnd1 .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*21[ ]+09 -[ ]*22[ ]+\?\?\?\? 67F20F1A bndcu 0x3\(%ecx,%eax,1\), %bnd1 +[ ]*20[ ]+4C0103 +[ ]*21[ ]+ +[ ]*22[ ]+\#\#\# bndcu +[ ]*23[ ]+\?\?\?\? 67F20F1A bndcu \(%ecx\), %bnd1 .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*22[ ]+4C0103 -[ ]*23[ ]+ -[ ]*24[ ]+\#\#\# bndcn -[ ]*25[ ]+\?\?\?\? 67F20F1B bndcn \(%ecx\), %bnd1 +[ ]*23[ ]+09 +[ ]*24[ ]+\?\?\?\? 67F20F1A bndcu 0x3\(%ecx,%eax,1\), %bnd1 .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*25[ ]+09 -[ ]*26[ ]+\?\?\?\? 67F20F1B bndcn 0x3\(%ecx,%eax,1\), %bnd1 +[ ]*24[ ]+4C0103 +[ ]*25[ ]+ +[ ]*26[ ]+\#\#\# bndcn +[ ]*27[ ]+\?\?\?\? 67F20F1B bndcn \(%ecx\), %bnd1 .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*26[ ]+4C0103 -[ ]*27[ ]+ -[ ]*28[ ]+\#\#\# bndstx -[ ]*29[ ]+\?\?\?\? 670F1B44 bndstx %bnd0, 0x3\(%eax,%ebx,1\) -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*29[ ]+1803 -[ ]*30[ ]+\?\?\?\? 670F1B53 bndstx %bnd2, 3\(%ebx,1\) +[ ]*27[ ]+09 +[ ]*28[ ]+\?\?\?\? 67F20F1B bndcn 0x3\(%ecx,%eax,1\), %bnd1 .* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*28[ ]+4C0103 +[ ]*29[ ]+ +[ ]*30[ ]+\#\#\# bndstx GAS LISTING .* -[ ]*30[ ]+03 -[ ]*31[ ]+ -[ ]*32[ ]+\#\#\# bndldx -[ ]*33[ ]+\?\?\?\? 670F1A44 bndldx 0x3\(%eax,%ebx,1\), %bnd0 -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*33[ ]+1803 -[ ]*34[ ]+\?\?\?\? 670F1A53 bndldx 3\(%ebx,1\), %bnd2 -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*34[ ]+03 -[ ]*35[ ]+ -[ ]*36[ ]+\.intel_syntax noprefix -[ ]*37[ ]+\?\?\?\? 67F30F1B bndmk bnd1, \[eax\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*37[ ]+08 -[ ]*38[ ]+\?\?\?\? 67F30F1B bndmk bnd1, \[edx\+1\*eax\+0x3\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*38[ ]+4C0203 -[ ]*39[ ]+ -[ ]*40[ ]+\#\#\# bndmov -[ ]*41[ ]+\?\?\?\? 67660F1A bndmov bnd1, \[eax\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*41[ ]+08 -[ ]*42[ ]+\?\?\?\? 67660F1A bndmov bnd1, \[edx\+1\*eax\+0x3\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*42[ ]+4C0203 +[ ]*31[ ]+\?\?\?\? 670F1B44 bndstx %bnd0, 0x3\(%eax,%ebx,1\) +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*31[ ]+1803 +[ ]*32[ ]+\?\?\?\? 670F1B53 bndstx %bnd2, 3\(%ebx,1\) +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*32[ ]+03 +[ ]*33[ ]+\?\?\?\? 410F1B0C bndstx %bnd1, \(%r15,%rax,2\) +.* Warning: register scaling is being ignored here +[ ]*33[ ]+47 +[ ]*34[ ]+bndstx %bnd3, base\(%rip\) +[ ]*35[ ]+\?\?\?\? 670F1B0D bndstx %bnd1, base\(%eip\) +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*35[ ]+00000000 +[ ]*36[ ]+ +[ ]*37[ ]+\#\#\# bndldx +[ ]*38[ ]+\?\?\?\? 670F1A44 bndldx 0x3\(%eax,%ebx,1\), %bnd0 +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*38[ ]+1803 +[ ]*39[ ]+\?\?\?\? 670F1A53 bndldx 3\(%ebx,1\), %bnd2 +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*39[ ]+03 +[ ]*40[ ]*\?\?\?\? 420F1A1C bndldx \(%rax,%r15,4\), %bnd3 +.* Warning: register scaling is being ignored here +[ ]*40[ ]*B8 +[ ]*41[ ]*bndldx base\(%rip\), %bnd1 +[ ]*42[ ]*\?\?\?\? 670F1A1D bndldx base\(%eip\), %bnd3 +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*42[ ]*00000000 [ ]*43[ ]+ -[ ]*44[ ]+\?\?\?\? 67660F1B bndmov \[eax\], bnd1 -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*44[ ]+08 -[ ]*45[ ]+\?\?\?\? 67660F1B bndmov \[edx\+1\*eax\+0x3\], bnd1 -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*45[ ]+4C0203 -[ ]*46[ ]+ -[ ]*47[ ]+\#\#\# bndcl -[ ]*48[ ]+\?\?\?\? 67F30F1A bndcl bnd1, \[eax\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*48[ ]+08 -[ ]*49[ ]+\?\?\?\? 67F30F1A bndcl bnd1, \[edx\+1\*eax\+0x3\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*49[ ]+4C0203 -[ ]*50[ ]+ -[ ]*51[ ]+\#\#\# bndcu -[ ]*52[ ]+\?\?\?\? 67F20F1A bndcu bnd1, \[eax\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*52[ ]+08 -[ ]*53[ ]+\?\?\?\? 67F20F1A bndcu bnd1, \[edx\+1\*eax\+0x3\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*53[ ]+4C0203 -[ ]*54[ ]+ -[ ]*55[ ]+\#\#\# bndcn -[ ]*56[ ]+\?\?\?\? 67F20F1B bndcn bnd1, \[eax\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*56[ ]+08 -[ ]*57[ ]+\?\?\?\? 67F20F1B bndcn bnd1, \[edx\+1\*eax\+0x3\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*57[ ]+4C0203 -[ ]*58[ ]+ +[ ]*44[ ]+\.intel_syntax noprefix +[ ]*45[ ]+\?\?\?\? 67F30F1B bndmk bnd1, \[eax\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*45[ ]+08 +[ ]*46[ ]+\?\?\?\? 67F30F1B bndmk bnd1, \[edx\+1\*eax\+0x3\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*46[ ]+4C0203 +[ ]*47[ ]*bndmk bnd3, \[rip\] +[ ]*48[ ]*\?\?\?\? 67F30F1B bndmk bnd2, \[eip\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions. +[ ]*48[ ]*15000000 +[ ]*48[ ]*00 +[ ]*49[ ]+ +[ ]*50[ ]+\#\#\# bndmov +[ ]*51[ ]+\?\?\?\? 67660F1A bndmov bnd1, \[eax\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*51[ ]+08 +[ ]*52[ ]+\?\?\?\? 67660F1A bndmov bnd1, \[edx\+1\*eax\+0x3\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*52[ ]+4C0203 +[ ]*53[ ]+ +[ ]*54[ ]+\?\?\?\? 67660F1B bndmov \[eax\], bnd1 +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*54[ ]+08 +[ ]*55[ ]+\?\?\?\? 67660F1B bndmov \[edx\+1\*eax\+0x3\], bnd1 +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*55[ ]+4C0203 +[ ]*56[ ]+ GAS LISTING .* -[ ]*59[ ]+\#\#\# bndstx -[ ]*60[ ]+\?\?\?\? 670F1B44 bndstx \[eax\+ebx\*1\+0x3\], bnd0 -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*60[ ]+1803 -[ ]*61[ ]+\?\?\?\? 670F1B14 bndstx \[1\*ebx\+3\], bnd2 -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*61[ ]+1D030000 -[ ]*61[ ]+00 -[ ]*62[ ]+ -[ ]*63[ ]+\#\#\# bndldx -[ ]*64[ ]+\?\?\?\? 670F1A44 bndldx bnd0, \[eax\+ebx\*1\+0x3\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*64[ ]+1803 -[ ]*65[ ]+\?\?\?\? 670F1A14 bndldx bnd2, \[1\*ebx\+3\] -.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. -[ ]*65[ ]+1D030000 -[ ]*65[ ]+00(|909090 ) +[ ]*57[ ]+\#\#\# bndcl +[ ]*58[ ]+\?\?\?\? 67F30F1A bndcl bnd1, \[eax\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*58[ ]+08 +[ ]*59[ ]+\?\?\?\? 67F30F1A bndcl bnd1, \[edx\+1\*eax\+0x3\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*59[ ]+4C0203 +[ ]*60[ ]+ +[ ]*61[ ]+\#\#\# bndcu +[ ]*62[ ]+\?\?\?\? 67F20F1A bndcu bnd1, \[eax\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*62[ ]+08 +[ ]*63[ ]+\?\?\?\? 67F20F1A bndcu bnd1, \[edx\+1\*eax\+0x3\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*63[ ]+4C0203 +[ ]*64[ ]+ +[ ]*65[ ]+\#\#\# bndcn +[ ]*66[ ]+\?\?\?\? 67F20F1B bndcn bnd1, \[eax\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*66[ ]+08 +[ ]*67[ ]+\?\?\?\? 67F20F1B bndcn bnd1, \[edx\+1\*eax\+0x3\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*67[ ]+4C0203 +[ ]*68[ ]+ +[ ]*69[ ]+\#\#\# bndstx +[ ]*70[ ]+\?\?\?\? 670F1B44 bndstx \[eax\+ebx\*1\+0x3\], bnd0 +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*70[ ]+1803 +[ ]*71[ ]+\?\?\?\? 670F1B14 bndstx \[1\*ebx\+3\], bnd2 +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*71[ ]+1D030000 +[ ]*71[ ]+00 +[ ]*72[ ]+\?\?\?\? 410F1B14 bndstx \[r8\+rdi\*4\], bnd2 +.* Warning: register scaling is being ignored here +[ ]*72[ ]+B8 +[ ]*73[ ]+bndstx \[rip\+base\], bnd1 +[ ]*74[ ]+\?\?\?\? 670F1B1D bndstx \[eip\+base\], bnd3 +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*74[ ]+00000000 +[ ]*75[ ]+ +[ ]*76[ ]+\#\#\# bndldx +[ ]*77[ ]+\?\?\?\? 670F1A44 bndldx bnd0, \[eax\+ebx\*1\+0x3\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*77[ ]+1803 +[ ]*78[ ]+\?\?\?\? 670F1A14 bndldx bnd2, \[1\*ebx\+3\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*78[ ]+1D030000 +[ ]*78[ ]+00 +[ ]*79[ ]+\?\?\?\? 420F1A14 bndldx bnd2, \[rdi\+r8\*8\] +.* Warning: register scaling is being ignored here +[ ]*79[ ]+C7 +[ ]*80[ ]+bndldx bnd1, \[rip\+base\] +[ ]*81[ ]+\?\?\?\? 670F1A1D bndldx bnd3, \[eip\+base\] +.* Error: 32-bit address isn't allowed in 64-bit MPX instructions\. +[ ]*81 00000000 #pass diff --git a/gas/testsuite/gas/i386/x86-64-mpx-inval-2.s b/gas/testsuite/gas/i386/x86-64-mpx-inval-2.s index e15d9520f15..7e8e8d53d7f 100644 --- a/gas/testsuite/gas/i386/x86-64-mpx-inval-2.s +++ b/gas/testsuite/gas/i386/x86-64-mpx-inval-2.s @@ -5,6 +5,8 @@ ### bndmk bndmk (%eax), %bnd1 bndmk 0x3(%ecx,%ebx,1), %bnd1 + bndmk (%rip), %bnd3 + bndmk (%eip), %bnd2 ### bndmov bndmov (%r8d), %bnd1 @@ -28,14 +30,22 @@ ### bndstx bndstx %bnd0, 0x3(%eax,%ebx,1) bndstx %bnd2, 3(%ebx,1) + bndstx %bnd1, (%r15,%rax,2) + bndstx %bnd3, base(%rip) + bndstx %bnd1, base(%eip) ### bndldx bndldx 0x3(%eax,%ebx,1), %bnd0 bndldx 3(%ebx,1), %bnd2 + bndldx (%rax,%r15,4), %bnd3 + bndldx base(%rip), %bnd1 + bndldx base(%eip), %bnd3 .intel_syntax noprefix bndmk bnd1, [eax] bndmk bnd1, [edx+1*eax+0x3] + bndmk bnd3, [rip] + bndmk bnd2, [eip] ### bndmov bndmov bnd1, [eax] @@ -59,7 +69,13 @@ ### bndstx bndstx [eax+ebx*1+0x3], bnd0 bndstx [1*ebx+3], bnd2 + bndstx [r8+rdi*4], bnd2 + bndstx [rip+base], bnd1 + bndstx [eip+base], bnd3 ### bndldx bndldx bnd0, [eax+ebx*1+0x3] bndldx bnd2, [1*ebx+3] + bndldx bnd2, [rdi+r8*8] + bndldx bnd1, [rip+base] + bndldx bnd3, [eip+base] -- 2.30.2