[Update] Init Binutils 2.40 repo
This commit is contained in:
parent
dd059ae0b5
commit
254b28051a
@ -1,155 +0,0 @@
|
|||||||
From 154b353f689cad41ed9455088b3dede30d9f2e00 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
||||||
Date: Wed, 14 Jul 2021 14:17:48 -0700
|
|
||||||
Subject: [PATCH] x86: Add int1 as one byte opcode 0xf1
|
|
||||||
|
|
||||||
Also change the x86 disassembler to disassemble 0xf1 as int1, instead of
|
|
||||||
icebp.
|
|
||||||
|
|
||||||
gas/
|
|
||||||
|
|
||||||
PR gas/28088
|
|
||||||
* testsuite/gas/i386/opcode.s: Add int1.
|
|
||||||
* testsuite/gas/i386/x86-64-opcode.s: Add int1, int3 and int.
|
|
||||||
* testsuite/gas/i386/opcode-intel.d: Updated.
|
|
||||||
* testsuite/gas/i386/opcode-suffix.d: Likewise.
|
|
||||||
* testsuite/gas/i386/opcode.d: Likewise.
|
|
||||||
* testsuite/gas/i386/x86-64-opcode.d: Likewise.
|
|
||||||
|
|
||||||
opcodes/
|
|
||||||
|
|
||||||
PR gas/28088
|
|
||||||
* i386-dis.c (dis386): Replace icebp with int1.
|
|
||||||
* i386-opc.tbl: Add int1.
|
|
||||||
* i386-tbl.h: Regenerate.
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/opcode-intel.d b/gas/testsuite/gas/i386/opcode-intel.d
|
|
||||||
index 68e1e8810e6..732b033c916 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/opcode-intel.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/opcode-intel.d
|
|
||||||
@@ -588,6 +588,7 @@ Disassembly of section .text:
|
|
||||||
*[0-9a-f]+: 85 c3 [ ]*test[ ]+ebx,eax
|
|
||||||
*[0-9a-f]+: 85 d8 [ ]*test[ ]+eax,ebx
|
|
||||||
*[0-9a-f]+: 85 18 [ ]*test[ ]+(DWORD PTR )?\[eax\],ebx
|
|
||||||
+ *[0-9a-f]+: f1[ ]+int1[ ]+
|
|
||||||
[ ]*[a-f0-9]+: 0f 4a 90 90 90 90 90 cmovp edx,DWORD PTR \[eax-0x6f6f6f70\]
|
|
||||||
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnp edx,DWORD PTR \[eax-0x6f6f6f70\]
|
|
||||||
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovp dx,WORD PTR \[eax-0x6f6f6f70\]
|
|
||||||
diff --git a/gas/testsuite/gas/i386/opcode-suffix.d b/gas/testsuite/gas/i386/opcode-suffix.d
|
|
||||||
index 8d7716b6fa8..6a9c4cd8717 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/opcode-suffix.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/opcode-suffix.d
|
|
||||||
@@ -588,6 +588,7 @@ Disassembly of section .text:
|
|
||||||
*[0-9a-f]+: 85 c3 [ ]*testl[ ]+%eax,%ebx
|
|
||||||
*[0-9a-f]+: 85 d8 [ ]*testl[ ]+%ebx,%eax
|
|
||||||
*[0-9a-f]+: 85 18 [ ]*testl[ ]+%ebx,\(%eax\)
|
|
||||||
+ *[0-9a-f]+: f1[ ]+int1[ ]+
|
|
||||||
[ ]*[a-f0-9]+: 0f 4a 90 90 90 90 90 cmovpl -0x6f6f6f70\(%eax\),%edx
|
|
||||||
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnpl -0x6f6f6f70\(%eax\),%edx
|
|
||||||
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovpw -0x6f6f6f70\(%eax\),%dx
|
|
||||||
diff --git a/gas/testsuite/gas/i386/opcode.d b/gas/testsuite/gas/i386/opcode.d
|
|
||||||
index cc57b9edb80..9c1f67f5fd1 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/opcode.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/opcode.d
|
|
||||||
@@ -587,6 +587,7 @@ Disassembly of section .text:
|
|
||||||
9f5: 85 c3 [ ]*test %eax,%ebx
|
|
||||||
9f7: 85 d8 [ ]*test %ebx,%eax
|
|
||||||
9f9: 85 18 [ ]*test %ebx,\(%eax\)
|
|
||||||
+ 9fb: f1 [ ]*int1
|
|
||||||
[ ]*[a-f0-9]+: 0f 4a 90 90 90 90 90 cmovp -0x6f6f6f70\(%eax\),%edx
|
|
||||||
[ ]*[a-f0-9]+: 0f 4b 90 90 90 90 90 cmovnp -0x6f6f6f70\(%eax\),%edx
|
|
||||||
[ ]*[a-f0-9]+: 66 0f 4a 90 90 90 90 90 cmovp -0x6f6f6f70\(%eax\),%dx
|
|
||||||
diff --git a/gas/testsuite/gas/i386/opcode.s b/gas/testsuite/gas/i386/opcode.s
|
|
||||||
index 1f803c38e5d..d3255f2b80c 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/opcode.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/opcode.s
|
|
||||||
@@ -585,6 +585,8 @@ foo:
|
|
||||||
test %ebx,%eax
|
|
||||||
test (%eax),%ebx
|
|
||||||
|
|
||||||
+ int1
|
|
||||||
+
|
|
||||||
cmovpe 0x90909090(%eax),%edx
|
|
||||||
cmovpo 0x90909090(%eax),%edx
|
|
||||||
cmovpe 0x90909090(%eax),%dx
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-opcode.d b/gas/testsuite/gas/i386/x86-64-opcode.d
|
|
||||||
index ab55d2ca350..c925938fdc4 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-opcode.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-opcode.d
|
|
||||||
@@ -325,6 +325,9 @@ Disassembly of section .text:
|
|
||||||
[ ]*[a-f0-9]+: 48 0f 07 sysretq *
|
|
||||||
[ ]*[a-f0-9]+: 0f 01 f8 swapgs
|
|
||||||
[ ]*[a-f0-9]+: 66 68 22 22 pushw \$0x2222
|
|
||||||
+[ ]*[a-f0-9]+: f1 int1 +
|
|
||||||
+[ ]*[a-f0-9]+: cc int3 +
|
|
||||||
+[ ]*[a-f0-9]+: cd 90 int \$0x90
|
|
||||||
[ ]*[a-f0-9]+: f6 c9 01 test \$(0x)?0*1,%cl
|
|
||||||
[ ]*[a-f0-9]+: 66 f7 c9 02 00 test \$(0x)?0*2,%cx
|
|
||||||
[ ]*[a-f0-9]+: f7 c9 04 00 00 00 test \$(0x)?0*4,%ecx
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-opcode.s b/gas/testsuite/gas/i386/x86-64-opcode.s
|
|
||||||
index 28c100f812e..6575cc33438 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-opcode.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-opcode.s
|
|
||||||
@@ -454,6 +454,10 @@
|
|
||||||
|
|
||||||
pushw $0x2222
|
|
||||||
|
|
||||||
+ int1
|
|
||||||
+ int3
|
|
||||||
+ int $0x90
|
|
||||||
+
|
|
||||||
.byte 0xf6, 0xc9, 0x01
|
|
||||||
.byte 0x66, 0xf7, 0xc9, 0x02, 0x00
|
|
||||||
.byte 0xf7, 0xc9, 0x04, 0x00, 0x00, 0x00
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 21e40850544..122f4af0b46 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -1965,7 +1965,7 @@ static const struct dis386 dis386[] = {
|
|
||||||
{ "outG", { indirDX, zAX }, 0 },
|
|
||||||
/* f0 */
|
|
||||||
{ Bad_Opcode }, /* lock prefix */
|
|
||||||
- { "icebp", { XX }, 0 },
|
|
||||||
+ { "int1", { XX }, 0 },
|
|
||||||
{ Bad_Opcode }, /* repne */
|
|
||||||
{ Bad_Opcode }, /* repz */
|
|
||||||
{ "hlt", { XX }, 0 },
|
|
||||||
diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl
|
|
||||||
index b0530e5fb82..49e72d28b56 100644
|
|
||||||
--- a/opcodes/i386-opc.tbl
|
|
||||||
+++ b/opcodes/i386-opc.tbl
|
|
||||||
@@ -537,6 +537,7 @@ bts, 0xfba, 5, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf|HLEPrefixLock, { Imm8, Reg
|
|
||||||
// See gas/config/tc-i386.c for conversion of 'int $3' into the special
|
|
||||||
// int 3 insn.
|
|
||||||
int, 0xcd, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm8 }
|
|
||||||
+int1, 0xf1, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {}
|
|
||||||
int3, 0xcc, None, 0, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {}
|
|
||||||
into, 0xce, None, CpuNo64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {}
|
|
||||||
iret, 0xcf, None, 0, DefaultSize|No_bSuf|No_sSuf|No_ldSuf, {}
|
|
||||||
diff --git a/opcodes/i386-tbl.h b/opcodes/i386-tbl.h
|
|
||||||
index df139ba6121..15c0b47a915 100644
|
|
||||||
--- a/opcodes/i386-tbl.h
|
|
||||||
+++ b/opcodes/i386-tbl.h
|
|
||||||
@@ -5229,6 +5229,19 @@ const insn_template i386_optab[] =
|
|
||||||
0, 0, 0, 0, 0, 0 } },
|
|
||||||
{ { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0 } } } },
|
|
||||||
+ { "int1", 0xf1, None, 0,
|
|
||||||
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
|
||||||
+ { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0 } },
|
|
||||||
+ { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
+ 0, 0, 0, 0, 0, 0, 0 } } } },
|
|
||||||
{ "int3", 0xcc, None, 0,
|
|
||||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,255 +0,0 @@
|
|||||||
From d0579d4d1c724b524da43ad164ce140218497ead Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:01:09 +0200
|
|
||||||
Subject: [PATCH] x86: drop OP_Mask()
|
|
||||||
|
|
||||||
By moving its vex.r check there it becomes fully redundant with OP_G().
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
index 50a11f417ad..2ed8f6730c5 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-prefix.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
@@ -151,9 +151,9 @@
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0FC2 */
|
|
||||||
{
|
|
||||||
- { "vcmppX", { XMask, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE },
|
|
||||||
+ { "vcmppX", { MaskG, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0FC2_P_1) },
|
|
||||||
- { "vcmppX", { XMask, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE },
|
|
||||||
+ { "vcmppX", { MaskG, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0FC2_P_3) },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0FE6 */
|
|
||||||
@@ -238,14 +238,14 @@
|
|
||||||
/* PREFIX_EVEX_0F3826 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vptestnm%BW", { XMask, Vex, EXx }, 0 },
|
|
||||||
- { "vptestm%BW", { XMask, Vex, EXx }, 0 },
|
|
||||||
+ { "vptestnm%BW", { MaskG, Vex, EXx }, 0 },
|
|
||||||
+ { "vptestm%BW", { MaskG, Vex, EXx }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F3827 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vptestnm%DQ", { XMask, Vex, EXx }, 0 },
|
|
||||||
- { "vptestm%DQ", { XMask, Vex, EXx }, 0 },
|
|
||||||
+ { "vptestnm%DQ", { MaskG, Vex, EXx }, 0 },
|
|
||||||
+ { "vptestm%DQ", { MaskG, Vex, EXx }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F3828 */
|
|
||||||
{
|
|
||||||
@@ -256,7 +256,7 @@
|
|
||||||
/* PREFIX_EVEX_0F3829 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vpmov%BW2m", { XMask, EXx }, 0 },
|
|
||||||
+ { "vpmov%BW2m", { MaskG, EXx }, 0 },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F3829_P_2) },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F382A */
|
|
||||||
@@ -310,7 +310,7 @@
|
|
||||||
/* PREFIX_EVEX_0F3839 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vpmov%DQ2m", { XMask, EXx }, 0 },
|
|
||||||
+ { "vpmov%DQ2m", { MaskG, EXx }, 0 },
|
|
||||||
{ "vpmins%DQ", { XM, Vex, EXx }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F383A */
|
|
||||||
@@ -338,7 +338,7 @@
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vp2intersect%DQ", { XMask, Vex, EXx, EXxEVexS }, 0 },
|
|
||||||
+ { "vp2intersect%DQ", { MaskG, Vex, EXx, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F3872 */
|
|
||||||
{
|
|
||||||
diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h
|
|
||||||
index 637ab846562..2c7d9bc2e34 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-w.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-w.h
|
|
||||||
@@ -142,7 +142,7 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F66 */
|
|
||||||
{
|
|
||||||
- { "vpcmpgtd", { XMask, Vex, EXx }, PREFIX_DATA },
|
|
||||||
+ { "vpcmpgtd", { MaskG, Vex, EXx }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F6A */
|
|
||||||
{
|
|
||||||
@@ -201,7 +201,7 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F76 */
|
|
||||||
{
|
|
||||||
- { "vpcmpeqd", { XMask, Vex, EXx }, PREFIX_DATA },
|
|
||||||
+ { "vpcmpeqd", { MaskG, Vex, EXx }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F78_P_0 */
|
|
||||||
{
|
|
||||||
@@ -270,12 +270,12 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0FC2_P_1 */
|
|
||||||
{
|
|
||||||
- { "vcmpss", { XMask, VexScalar, EXxmm_md, EXxEVexS, CMP }, 0 },
|
|
||||||
+ { "vcmpss", { MaskG, VexScalar, EXxmm_md, EXxEVexS, CMP }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0FC2_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vcmpsd", { XMask, VexScalar, EXxmm_mq, EXxEVexS, CMP }, 0 },
|
|
||||||
+ { "vcmpsd", { MaskG, VexScalar, EXxmm_mq, EXxEVexS, CMP }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0FD2 */
|
|
||||||
{
|
|
||||||
@@ -450,7 +450,7 @@
|
|
||||||
/* EVEX_W_0F3829_P_2 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vpcmpeqq", { XMask, Vex, EXx }, 0 },
|
|
||||||
+ { "vpcmpeqq", { MaskG, Vex, EXx }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F382A_P_1 */
|
|
||||||
{
|
|
||||||
@@ -496,7 +496,7 @@
|
|
||||||
/* EVEX_W_0F3837 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vpcmpgtq", { XMask, Vex, EXx }, PREFIX_DATA },
|
|
||||||
+ { "vpcmpgtq", { MaskG, Vex, EXx }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F383A_P_1 */
|
|
||||||
{
|
|
||||||
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
|
|
||||||
index 151f61d95a4..5f1ebaded85 100644
|
|
||||||
--- a/opcodes/i386-dis-evex.h
|
|
||||||
+++ b/opcodes/i386-dis-evex.h
|
|
||||||
@@ -114,8 +114,8 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ "vpunpcklwd", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F62) },
|
|
||||||
{ "vpacksswb", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vpcmpgtb", { XMask, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vpcmpgtw", { XMask, Vex, EXx }, PREFIX_DATA },
|
|
||||||
+ { "vpcmpgtb", { MaskG, Vex, EXx }, PREFIX_DATA },
|
|
||||||
+ { "vpcmpgtw", { MaskG, Vex, EXx }, PREFIX_DATA },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F66) },
|
|
||||||
{ "vpackuswb", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
/* 68 */
|
|
||||||
@@ -132,8 +132,8 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ REG_TABLE (REG_EVEX_0F71) },
|
|
||||||
{ REG_TABLE (REG_EVEX_0F72) },
|
|
||||||
{ REG_TABLE (REG_EVEX_0F73) },
|
|
||||||
- { "vpcmpeqb", { XMask, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vpcmpeqw", { XMask, Vex, EXx }, PREFIX_DATA },
|
|
||||||
+ { "vpcmpeqb", { MaskG, Vex, EXx }, PREFIX_DATA },
|
|
||||||
+ { "vpcmpeqw", { MaskG, Vex, EXx }, PREFIX_DATA },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F76) },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
/* 78 */
|
|
||||||
@@ -453,7 +453,7 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vperm%BW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vpshufbitqmb", { XMask, Vex, EXx }, PREFIX_DATA },
|
|
||||||
+ { "vpshufbitqmb", { MaskG, Vex, EXx }, PREFIX_DATA },
|
|
||||||
/* 90 */
|
|
||||||
{ "vpgatherd%DQ", { XMGatherD, MVexVSIBDWpX }, PREFIX_DATA },
|
|
||||||
{ "vpgatherq%DQ", { XMGatherQ, MVexVSIBQWpX }, PREFIX_DATA },
|
|
||||||
@@ -617,8 +617,8 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A1B) },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ VEX_W_TABLE (VEX_W_0F3A1D) },
|
|
||||||
- { "vpcmpu%DQ", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA },
|
|
||||||
- { "vpcmp%DQ", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA },
|
|
||||||
+ { "vpcmpu%DQ", { MaskG, Vex, EXx, VPCMP }, PREFIX_DATA },
|
|
||||||
+ { "vpcmp%DQ", { MaskG, Vex, EXx, VPCMP }, PREFIX_DATA },
|
|
||||||
/* 20 */
|
|
||||||
{ VEX_LEN_TABLE (VEX_LEN_0F3A20) },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F3A21) },
|
|
||||||
@@ -653,8 +653,8 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A3B) },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vpcmpu%BW", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA },
|
|
||||||
- { "vpcmp%BW", { XMask, Vex, EXx, VPCMP }, PREFIX_DATA },
|
|
||||||
+ { "vpcmpu%BW", { MaskG, Vex, EXx, VPCMP }, PREFIX_DATA },
|
|
||||||
+ { "vpcmp%BW", { MaskG, Vex, EXx, VPCMP }, PREFIX_DATA },
|
|
||||||
/* 40 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -698,8 +698,8 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vfpclassp%XW%XZ", { XMask, EXx, Ib }, PREFIX_DATA },
|
|
||||||
- { "vfpclasss%XW", { XMask, EXVexWdqScalar, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vfpclassp%XW%XZ", { MaskG, EXx, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vfpclasss%XW", { MaskG, EXVexWdqScalar, Ib }, PREFIX_DATA },
|
|
||||||
/* 68 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 122f4af0b46..f88276ced6b 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -116,8 +116,6 @@ static void FXSAVE_Fixup (int, int);
|
|
||||||
|
|
||||||
static void MOVSXD_Fixup (int, int);
|
|
||||||
|
|
||||||
-static void OP_Mask (int, int);
|
|
||||||
-
|
|
||||||
struct dis_private {
|
|
||||||
/* Points to first byte not fetched. */
|
|
||||||
bfd_byte *max_fetched;
|
|
||||||
@@ -406,7 +404,6 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
|
|
||||||
#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
|
|
||||||
#define EXxEVexS { OP_Rounding, evex_sae_mode }
|
|
||||||
|
|
||||||
-#define XMask { OP_Mask, mask_mode }
|
|
||||||
#define MaskG { OP_G, mask_mode }
|
|
||||||
#define MaskE { OP_E, mask_mode }
|
|
||||||
#define MaskBDE { OP_E, mask_bd_mode }
|
|
||||||
@@ -12017,12 +12014,12 @@ OP_G (int bytemode, int sizeflag)
|
|
||||||
break;
|
|
||||||
case mask_bd_mode:
|
|
||||||
case mask_mode:
|
|
||||||
- if ((modrm.reg + add) > 0x7)
|
|
||||||
+ if (add || (vex.evex && !vex.r))
|
|
||||||
{
|
|
||||||
oappend ("(bad)");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
- oappend (names_mask[modrm.reg + add]);
|
|
||||||
+ oappend (names_mask[modrm.reg]);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
oappend (INTERNAL_DISASSEMBLER_ERROR);
|
|
||||||
@@ -13720,23 +13717,6 @@ MOVSXD_Fixup (int bytemode, int sizeflag)
|
|
||||||
OP_E (bytemode, sizeflag);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void
|
|
||||||
-OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
-{
|
|
||||||
- if (!vex.evex
|
|
||||||
- || (bytemode != mask_mode && bytemode != mask_bd_mode))
|
|
||||||
- abort ();
|
|
||||||
-
|
|
||||||
- USED_REX (REX_R);
|
|
||||||
- if ((rex & REX_R) != 0 || !vex.r)
|
|
||||||
- {
|
|
||||||
- BadOp ();
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- oappend (names_mask [modrm.reg]);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
static void
|
|
||||||
OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,173 +0,0 @@
|
|||||||
From be2f8fcd9df7d50fd17125eccecf7fc0bad6b2c8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:02:08 +0200
|
|
||||||
Subject: [PATCH] x86: correct VCVT{,U}SI2SD rounding mode handling
|
|
||||||
|
|
||||||
With EVEX.W clear the instruction doesn't ignore the rounding mode, but
|
|
||||||
(like for other insns without rounding semantics) EVEX.b set causes #UD.
|
|
||||||
Hence the handling of EVEX.W needs to be done when processing
|
|
||||||
evex_rounding_64_mode, not at the decode stages.
|
|
||||||
|
|
||||||
Derive a new 64-bit testcase from the 32-bit one to cover the different
|
|
||||||
EVEX.W treatment in both cases.
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/evex.d b/gas/testsuite/gas/i386/evex.d
|
|
||||||
index 2fbe295b86b..b02bca39098 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/evex.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/evex.d
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
#objdump: -dw -Msuffix
|
|
||||||
-#name: i386 EVX insns
|
|
||||||
+#name: i386 EVEX insns
|
|
||||||
|
|
||||||
.*: +file format .*
|
|
||||||
|
|
||||||
@@ -8,9 +8,12 @@ Disassembly of section .text:
|
|
||||||
|
|
||||||
0+ <_start>:
|
|
||||||
+[a-f0-9]+: 62 f1 d6 38 2a f0 vcvtsi2ssl %eax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 57 38 2a f0 vcvtsi2sdl %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d7 38 2a f0 vcvtsi2sdl %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d6 08 7b f0 vcvtusi2ssl %eax,%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 57 08 7b f0 vcvtusi2sdl %eax,%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d7 08 7b f0 vcvtusi2sdl %eax,%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d6 38 7b f0 vcvtusi2ssl %eax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 57 38 7b f0 vcvtusi2sdl %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d7 38 7b f0 vcvtusi2sdl %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
#pass
|
|
||||||
diff --git a/gas/testsuite/gas/i386/evex.s b/gas/testsuite/gas/i386/evex.s
|
|
||||||
index a64cc573dcd..90c635a27b6 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/evex.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/evex.s
|
|
||||||
@@ -4,8 +4,11 @@
|
|
||||||
.text
|
|
||||||
_start:
|
|
||||||
.byte 0x62, 0xf1, 0xd6, 0x38, 0x2a, 0xf0
|
|
||||||
+ .byte 0x62, 0xf1, 0x57, 0x38, 0x2a, 0xf0
|
|
||||||
.byte 0x62, 0xf1, 0xd7, 0x38, 0x2a, 0xf0
|
|
||||||
.byte 0x62, 0xf1, 0xd6, 0x08, 0x7b, 0xf0
|
|
||||||
+ .byte 0x62, 0xf1, 0x57, 0x08, 0x7b, 0xf0
|
|
||||||
.byte 0x62, 0xf1, 0xd7, 0x08, 0x7b, 0xf0
|
|
||||||
.byte 0x62, 0xf1, 0xd6, 0x38, 0x7b, 0xf0
|
|
||||||
+ .byte 0x62, 0xf1, 0x57, 0x38, 0x7b, 0xf0
|
|
||||||
.byte 0x62, 0xf1, 0xd7, 0x38, 0x7b, 0xf0
|
|
||||||
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
|
|
||||||
index 1e0a363a803..6f9543eec3a 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/i386.exp
|
|
||||||
+++ b/gas/testsuite/gas/i386/i386.exp
|
|
||||||
@@ -929,6 +929,7 @@ if [gas_64_check] then {
|
|
||||||
run_dump_test "x86-64-avx512er-intel"
|
|
||||||
run_dump_test "x86-64-avx512pf"
|
|
||||||
run_dump_test "x86-64-avx512pf-intel"
|
|
||||||
+ run_dump_test "x86-64-evex"
|
|
||||||
run_dump_test "x86-64-evex-lig256"
|
|
||||||
run_dump_test "x86-64-evex-lig512"
|
|
||||||
run_dump_test "x86-64-evex-lig256-intel"
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-evex.d b/gas/testsuite/gas/i386/x86-64-evex.d
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..b360aa74a17
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-evex.d
|
|
||||||
@@ -0,0 +1,20 @@
|
|
||||||
+#objdump: -dw
|
|
||||||
+#name: x86-64 EVEX insns
|
|
||||||
+#source: evex.s
|
|
||||||
+
|
|
||||||
+.*: +file format .*
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+Disassembly of section .text:
|
|
||||||
+
|
|
||||||
+0+ <_start>:
|
|
||||||
+ +[a-f0-9]+: 62 f1 d6 38 2a f0 vcvtsi2ss %rax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 57 38 2a f0 vcvtsi2sd %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 d7 38 2a f0 vcvtsi2sd %rax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 d6 08 7b f0 vcvtusi2ss %rax,%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 57 08 7b f0 vcvtusi2sd %eax,%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 d7 08 7b f0 vcvtusi2sd %rax,%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 d6 38 7b f0 vcvtusi2ss %rax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 57 38 7b f0 vcvtusi2sd %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 d7 38 7b f0 vcvtusi2sd %rax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+#pass
|
|
||||||
diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
index 2ed8f6730c5..9ad9372a221 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-prefix.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
@@ -30,7 +30,7 @@
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vcvtsi2ss{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F2A_P_3) },
|
|
||||||
+ { "vcvtsi2sd{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F51 */
|
|
||||||
{
|
|
||||||
@@ -134,7 +134,7 @@
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vcvtusi2ss{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F7B_P_2) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F7B_P_3) },
|
|
||||||
+ { "vcvtusi2sd{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F7E */
|
|
||||||
{
|
|
||||||
diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h
|
|
||||||
index 2c7d9bc2e34..8af4695a004 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-w.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-w.h
|
|
||||||
@@ -37,11 +37,6 @@
|
|
||||||
{
|
|
||||||
{ "vmovshdup", { XM, EXx }, 0 },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F2A_P_3 */
|
|
||||||
- {
|
|
||||||
- { "vcvtsi2sd{%LQ|}", { XMScalar, VexScalar, Ed }, 0 },
|
|
||||||
- { "vcvtsi2sd{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F51_P_1 */
|
|
||||||
{
|
|
||||||
{ "vsqrtss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
|
|
||||||
@@ -243,11 +238,6 @@
|
|
||||||
{ "vcvtps2qq", { XM, EXEvexHalfBcstXmmq, EXxEVexR }, 0 },
|
|
||||||
{ "vcvtpd2qq", { XM, EXx, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F7B_P_3 */
|
|
||||||
- {
|
|
||||||
- { "vcvtusi2sd{%LQ|}", { XMScalar, VexScalar, Ed }, 0 },
|
|
||||||
- { "vcvtusi2sd{%LQ|}", { XMScalar, VexScalar, EXxEVexR64, Edq }, 0 },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F7E_P_1 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index f88276ced6b..ccc49ff023f 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -1476,7 +1476,6 @@ enum
|
|
||||||
EVEX_W_0F12_P_3,
|
|
||||||
EVEX_W_0F16_P_0_M_1,
|
|
||||||
EVEX_W_0F16_P_1,
|
|
||||||
- EVEX_W_0F2A_P_3,
|
|
||||||
EVEX_W_0F51_P_1,
|
|
||||||
EVEX_W_0F51_P_3,
|
|
||||||
EVEX_W_0F58_P_1,
|
|
||||||
@@ -1521,7 +1520,6 @@ enum
|
|
||||||
EVEX_W_0F7A_P_2,
|
|
||||||
EVEX_W_0F7A_P_3,
|
|
||||||
EVEX_W_0F7B_P_2,
|
|
||||||
- EVEX_W_0F7B_P_3,
|
|
||||||
EVEX_W_0F7E_P_1,
|
|
||||||
EVEX_W_0F7F_P_1,
|
|
||||||
EVEX_W_0F7F_P_2,
|
|
||||||
@@ -13724,7 +13722,7 @@ OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
switch (bytemode)
|
|
||||||
{
|
|
||||||
case evex_rounding_64_mode:
|
|
||||||
- if (address_mode != mode_64bit)
|
|
||||||
+ if (address_mode != mode_64bit || !vex.w)
|
|
||||||
{
|
|
||||||
oappend ("(bad)");
|
|
||||||
break;
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,70 +0,0 @@
|
|||||||
From 3fa77affb00ef5d9bcb7f080750625749cdfa611 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:02:54 +0200
|
|
||||||
Subject: [PATCH] x86-64: generalize OP_G()'s EVEX.R' handling
|
|
||||||
|
|
||||||
EVEX.R' is invalid to be clear not only for mask registers, but also for
|
|
||||||
GPRs - IOW everything handled in this function.
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/evex.d b/gas/testsuite/gas/i386/evex.d
|
|
||||||
index b02bca39098..367b2eb1321 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/evex.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/evex.d
|
|
||||||
@@ -16,4 +16,6 @@ Disassembly of section .text:
|
|
||||||
+[a-f0-9]+: 62 f1 d6 38 7b f0 vcvtusi2ssl %eax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 57 38 7b f0 vcvtusi2sdl %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d7 38 7b f0 vcvtusi2sdl %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 e1 7e 08 2d c0 vcvtss2si %xmm0,%eax
|
|
||||||
+ +[a-f0-9]+: 62 e1 7c 08 c2 c0 00 vcmpeqps %xmm0,%xmm0,%k0
|
|
||||||
#pass
|
|
||||||
diff --git a/gas/testsuite/gas/i386/evex.s b/gas/testsuite/gas/i386/evex.s
|
|
||||||
index 90c635a27b6..ff6cb43499b 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/evex.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/evex.s
|
|
||||||
@@ -12,3 +12,5 @@ _start:
|
|
||||||
.byte 0x62, 0xf1, 0xd6, 0x38, 0x7b, 0xf0
|
|
||||||
.byte 0x62, 0xf1, 0x57, 0x38, 0x7b, 0xf0
|
|
||||||
.byte 0x62, 0xf1, 0xd7, 0x38, 0x7b, 0xf0
|
|
||||||
+ .byte 0x62, 0xe1, 0x7e, 0x08, 0x2d, 0xc0
|
|
||||||
+ .byte 0x62, 0xe1, 0x7c, 0x08, 0xc2, 0xc0, 0x00
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-evex.d b/gas/testsuite/gas/i386/x86-64-evex.d
|
|
||||||
index b360aa74a17..3a7b48e0bf9 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-evex.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-evex.d
|
|
||||||
@@ -17,4 +17,6 @@ Disassembly of section .text:
|
|
||||||
+[a-f0-9]+: 62 f1 d6 38 7b f0 vcvtusi2ss %rax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 57 38 7b f0 vcvtusi2sd %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d7 38 7b f0 vcvtusi2sd %rax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 e1 7e 08 2d c0 vcvtss2si %xmm0,\(bad\)
|
|
||||||
+ +[a-f0-9]+: 62 e1 7c 08 c2 c0 00 vcmpeqps %xmm0,%xmm0,\(bad\)
|
|
||||||
#pass
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index ccc49ff023f..e95d2ef9d64 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -11934,6 +11934,13 @@ OP_G (int bytemode, int sizeflag)
|
|
||||||
{
|
|
||||||
int add = 0;
|
|
||||||
const char **names;
|
|
||||||
+
|
|
||||||
+ if (vex.evex && !vex.r && address_mode == mode_64bit)
|
|
||||||
+ {
|
|
||||||
+ oappend ("(bad)");
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
USED_REX (REX_R);
|
|
||||||
if (rex & REX_R)
|
|
||||||
add += 8;
|
|
||||||
@@ -12012,7 +12019,7 @@ OP_G (int bytemode, int sizeflag)
|
|
||||||
break;
|
|
||||||
case mask_bd_mode:
|
|
||||||
case mask_mode:
|
|
||||||
- if (add || (vex.evex && !vex.r))
|
|
||||||
+ if (add)
|
|
||||||
{
|
|
||||||
oappend ("(bad)");
|
|
||||||
return;
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,61 +0,0 @@
|
|||||||
From bac11f2cfe7913ef4c37af608454451e27f78eff Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:03:16 +0200
|
|
||||||
Subject: [PATCH] x86-64: properly bounds-check %bnd<N> in OP_G()
|
|
||||||
|
|
||||||
The restriction to %bnd0-%bnd3 requires to also check REX.R is clear,
|
|
||||||
just like OP_E_Register() also includes REX.B in its check.
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-mpx.d b/gas/testsuite/gas/i386/x86-64-mpx.d
|
|
||||||
index f3217e07016..2f45af0d6e4 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-mpx.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-mpx.d
|
|
||||||
@@ -191,5 +191,7 @@ Disassembly of section .text:
|
|
||||||
[a-f0-9]+ <bad>:
|
|
||||||
[ ]*[a-f0-9]+: 0f 1a 30 bndldx \(%rax\),\(bad\)
|
|
||||||
[ ]*[a-f0-9]+: 66 0f 1a c4 bndmov \(bad\),%bnd0
|
|
||||||
+[ ]*[a-f0-9]+: 66 41 0f 1a c0 bndmov \(bad\),%bnd0
|
|
||||||
+[ ]*[a-f0-9]+: 66 44 0f 1a c0 bndmov %bnd0,\(bad\)
|
|
||||||
[ ]*[a-f0-9]+: f3 0f 1b 05 90 90 90 90 bndmk \(bad\),%bnd0
|
|
||||||
#pass
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-mpx.s b/gas/testsuite/gas/i386/x86-64-mpx.s
|
|
||||||
index b113590cf76..3594d8e9c88 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-mpx.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-mpx.s
|
|
||||||
@@ -227,6 +227,20 @@ bad:
|
|
||||||
.byte 0x1a
|
|
||||||
.byte 0xc4
|
|
||||||
|
|
||||||
+ # bndmov with REX.B set
|
|
||||||
+ .byte 0x66
|
|
||||||
+ .byte 0x41
|
|
||||||
+ .byte 0x0f
|
|
||||||
+ .byte 0x1a
|
|
||||||
+ .byte 0xc0
|
|
||||||
+
|
|
||||||
+ # bndmov with REX.R set
|
|
||||||
+ .byte 0x66
|
|
||||||
+ .byte 0x44
|
|
||||||
+ .byte 0x0f
|
|
||||||
+ .byte 0x1a
|
|
||||||
+ .byte 0xc0
|
|
||||||
+
|
|
||||||
# bndmk (bad),%bnd0
|
|
||||||
.byte 0xf3
|
|
||||||
.byte 0x0f
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index e95d2ef9d64..203dcefa360 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -11966,7 +11966,7 @@ OP_G (int bytemode, int sizeflag)
|
|
||||||
oappend (names64[modrm.reg + add]);
|
|
||||||
break;
|
|
||||||
case bnd_mode:
|
|
||||||
- if (modrm.reg > 0x3)
|
|
||||||
+ if (modrm.reg + add > 0x3)
|
|
||||||
{
|
|
||||||
oappend ("(bad)");
|
|
||||||
return;
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,183 +0,0 @@
|
|||||||
From 5f6b8397a40ca30460464e115c6aed8b7b6679f8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:03:37 +0200
|
|
||||||
Subject: [PATCH] x86: fold duplicate register printing code
|
|
||||||
|
|
||||||
What so far was OP_E_register() can be easily reused also for OP_G().
|
|
||||||
Add suitable parameters to the function and move the invocation of
|
|
||||||
swap_operand() to OP_E(). Adjust MOVSXD's first operand: There never was
|
|
||||||
a need to use movsxd_mode there, and its use gets in the way of the code
|
|
||||||
folding.
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 203dcefa360..725b38b1dda 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -50,7 +50,6 @@ static void oappend (const char *);
|
|
||||||
static void append_seg (void);
|
|
||||||
static void OP_indirE (int, int);
|
|
||||||
static void print_operand_value (char *, int, bfd_vma);
|
|
||||||
-static void OP_E_register (int, int);
|
|
||||||
static void OP_E_memory (int, int);
|
|
||||||
static void print_displacement (char *, bfd_vma);
|
|
||||||
static void OP_E (int, int);
|
|
||||||
@@ -4180,7 +4179,7 @@ static const struct dis386 x86_64_table[][2] = {
|
|
||||||
/* X86_64_63 */
|
|
||||||
{
|
|
||||||
{ "arpl", { Ew, Gw }, 0 },
|
|
||||||
- { "movs", { { OP_G, movsxd_mode }, { MOVSXD_Fixup, movsxd_mode } }, 0 },
|
|
||||||
+ { "movs", { Gv, { MOVSXD_Fixup, movsxd_mode } }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* X86_64_6D */
|
|
||||||
@@ -11290,21 +11289,14 @@ intel_operand_size (int bytemode, int sizeflag)
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
-OP_E_register (int bytemode, int sizeflag)
|
|
||||||
+print_register (unsigned int reg, unsigned int rexmask, int bytemode, int sizeflag)
|
|
||||||
{
|
|
||||||
- int reg = modrm.rm;
|
|
||||||
const char **names;
|
|
||||||
|
|
||||||
- USED_REX (REX_B);
|
|
||||||
- if ((rex & REX_B))
|
|
||||||
+ USED_REX (rexmask);
|
|
||||||
+ if (rex & rexmask)
|
|
||||||
reg += 8;
|
|
||||||
|
|
||||||
- if ((sizeflag & SUFFIX_ALWAYS)
|
|
||||||
- && (bytemode == b_swap_mode
|
|
||||||
- || bytemode == bnd_swap_mode
|
|
||||||
- || bytemode == v_swap_mode))
|
|
||||||
- swap_operand ();
|
|
||||||
-
|
|
||||||
switch (bytemode)
|
|
||||||
{
|
|
||||||
case b_mode:
|
|
||||||
@@ -11924,7 +11916,15 @@ OP_E (int bytemode, int sizeflag)
|
|
||||||
codep++;
|
|
||||||
|
|
||||||
if (modrm.mod == 3)
|
|
||||||
- OP_E_register (bytemode, sizeflag);
|
|
||||||
+ {
|
|
||||||
+ if ((sizeflag & SUFFIX_ALWAYS)
|
|
||||||
+ && (bytemode == b_swap_mode
|
|
||||||
+ || bytemode == bnd_swap_mode
|
|
||||||
+ || bytemode == v_swap_mode))
|
|
||||||
+ swap_operand ();
|
|
||||||
+
|
|
||||||
+ print_register (modrm.rm, REX_B, bytemode, sizeflag);
|
|
||||||
+ }
|
|
||||||
else
|
|
||||||
OP_E_memory (bytemode, sizeflag);
|
|
||||||
}
|
|
||||||
@@ -11932,104 +11932,13 @@ OP_E (int bytemode, int sizeflag)
|
|
||||||
static void
|
|
||||||
OP_G (int bytemode, int sizeflag)
|
|
||||||
{
|
|
||||||
- int add = 0;
|
|
||||||
- const char **names;
|
|
||||||
-
|
|
||||||
if (vex.evex && !vex.r && address_mode == mode_64bit)
|
|
||||||
{
|
|
||||||
oappend ("(bad)");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- USED_REX (REX_R);
|
|
||||||
- if (rex & REX_R)
|
|
||||||
- add += 8;
|
|
||||||
- switch (bytemode)
|
|
||||||
- {
|
|
||||||
- case b_mode:
|
|
||||||
- if (modrm.reg & 4)
|
|
||||||
- USED_REX (0);
|
|
||||||
- if (rex)
|
|
||||||
- oappend (names8rex[modrm.reg + add]);
|
|
||||||
- else
|
|
||||||
- oappend (names8[modrm.reg + add]);
|
|
||||||
- break;
|
|
||||||
- case w_mode:
|
|
||||||
- oappend (names16[modrm.reg + add]);
|
|
||||||
- break;
|
|
||||||
- case d_mode:
|
|
||||||
- case db_mode:
|
|
||||||
- case dw_mode:
|
|
||||||
- oappend (names32[modrm.reg + add]);
|
|
||||||
- break;
|
|
||||||
- case q_mode:
|
|
||||||
- oappend (names64[modrm.reg + add]);
|
|
||||||
- break;
|
|
||||||
- case bnd_mode:
|
|
||||||
- if (modrm.reg + add > 0x3)
|
|
||||||
- {
|
|
||||||
- oappend ("(bad)");
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
- oappend (names_bnd[modrm.reg]);
|
|
||||||
- break;
|
|
||||||
- case v_mode:
|
|
||||||
- case dq_mode:
|
|
||||||
- case dqb_mode:
|
|
||||||
- case dqd_mode:
|
|
||||||
- case dqw_mode:
|
|
||||||
- case movsxd_mode:
|
|
||||||
- USED_REX (REX_W);
|
|
||||||
- if (rex & REX_W)
|
|
||||||
- oappend (names64[modrm.reg + add]);
|
|
||||||
- else if (bytemode != v_mode && bytemode != movsxd_mode)
|
|
||||||
- oappend (names32[modrm.reg + add]);
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- if (sizeflag & DFLAG)
|
|
||||||
- oappend (names32[modrm.reg + add]);
|
|
||||||
- else
|
|
||||||
- oappend (names16[modrm.reg + add]);
|
|
||||||
- used_prefixes |= (prefixes & PREFIX_DATA);
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
- case va_mode:
|
|
||||||
- names = (address_mode == mode_64bit
|
|
||||||
- ? names64 : names32);
|
|
||||||
- if (!(prefixes & PREFIX_ADDR))
|
|
||||||
- {
|
|
||||||
- if (address_mode == mode_16bit)
|
|
||||||
- names = names16;
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- /* Remove "addr16/addr32". */
|
|
||||||
- all_prefixes[last_addr_prefix] = 0;
|
|
||||||
- names = (address_mode != mode_32bit
|
|
||||||
- ? names32 : names16);
|
|
||||||
- used_prefixes |= PREFIX_ADDR;
|
|
||||||
- }
|
|
||||||
- oappend (names[modrm.reg + add]);
|
|
||||||
- break;
|
|
||||||
- case m_mode:
|
|
||||||
- if (address_mode == mode_64bit)
|
|
||||||
- oappend (names64[modrm.reg + add]);
|
|
||||||
- else
|
|
||||||
- oappend (names32[modrm.reg + add]);
|
|
||||||
- break;
|
|
||||||
- case mask_bd_mode:
|
|
||||||
- case mask_mode:
|
|
||||||
- if (add)
|
|
||||||
- {
|
|
||||||
- oappend ("(bad)");
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
- oappend (names_mask[modrm.reg]);
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- oappend (INTERNAL_DISASSEMBLER_ERROR);
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
+ print_register (modrm.reg, REX_R, bytemode, sizeflag);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bfd_vma
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
From 4454883ff0ee338b1f6aab7f65ab1081af307e7c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:03:53 +0200
|
|
||||||
Subject: [PATCH] x86: fold duplicate code in MOVSXD_Fixup()
|
|
||||||
|
|
||||||
There's no need to have two paths printing the "xd" mnemonic suffix.
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 725b38b1dda..ddb659fb041 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -13601,31 +13601,25 @@ MOVSXD_Fixup (int bytemode, int sizeflag)
|
|
||||||
switch (bytemode)
|
|
||||||
{
|
|
||||||
case movsxd_mode:
|
|
||||||
- if (intel_syntax)
|
|
||||||
+ if (!intel_syntax)
|
|
||||||
{
|
|
||||||
- *p++ = 'x';
|
|
||||||
- *p++ = 'd';
|
|
||||||
- goto skip;
|
|
||||||
+ USED_REX (REX_W);
|
|
||||||
+ if (rex & REX_W)
|
|
||||||
+ {
|
|
||||||
+ *p++ = 'l';
|
|
||||||
+ *p++ = 'q';
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
- USED_REX (REX_W);
|
|
||||||
- if (rex & REX_W)
|
|
||||||
- {
|
|
||||||
- *p++ = 'l';
|
|
||||||
- *p++ = 'q';
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- *p++ = 'x';
|
|
||||||
- *p++ = 'd';
|
|
||||||
- }
|
|
||||||
+ *p++ = 'x';
|
|
||||||
+ *p++ = 'd';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
oappend (INTERNAL_DISASSEMBLER_ERROR);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
- skip:
|
|
||||||
mnemonicendp = p;
|
|
||||||
*p = '\0';
|
|
||||||
OP_E (bytemode, sizeflag);
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,79 +0,0 @@
|
|||||||
From 54ca11a48eba11788445247b16bc77637e3aa84a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:07:27 +0200
|
|
||||||
Subject: [PATCH] x86: correct EVEX.V' handling outside of 64-bit mode
|
|
||||||
|
|
||||||
Unlike the high bit of VEX.vvvv / EVEX.vvvv, EVEX.V' is not ignored
|
|
||||||
outside of 64-bit mode. Oddly enough there already are tests for these
|
|
||||||
cases, but their expectations were wrong. (This may have been based on
|
|
||||||
an old SDM version, where the restriction wasn't properly spelled out.)
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/noextreg.d b/gas/testsuite/gas/i386/noextreg.d
|
|
||||||
index 08bad494a80..ba175fc001e 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/noextreg.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/noextreg.d
|
|
||||||
@@ -13,14 +13,14 @@ Disassembly of section .text:
|
|
||||||
[ ]*[a-f0-9]+: 62 f1 7d 08 db c0 vpandd %xmm0,%xmm0,%xmm0
|
|
||||||
[ ]*[a-f0-9]+: 62 d1 7d 08 db c0 vpandd %xmm0,%xmm0,%xmm0
|
|
||||||
[ ]*[a-f0-9]+: 62 f1 3d 08 db c0 vpandd %xmm0,%xmm0,%xmm0
|
|
||||||
-[ ]*[a-f0-9]+: 62 f1 7d 00 db c0 vpandd %xmm0,%xmm0,%xmm0
|
|
||||||
+[ ]*[a-f0-9]+: 62 f1 7d 00 db c0 vpandd %xmm0,\(bad\),%xmm0
|
|
||||||
[ ]*[a-f0-9]+: c4 e3 79 4c c0 00 vpblendvb %xmm0,%xmm0,%xmm0,%xmm0
|
|
||||||
[ ]*[a-f0-9]+: c4 c3 79 4c c0 00 vpblendvb %xmm0,%xmm0,%xmm0,%xmm0
|
|
||||||
[ ]*[a-f0-9]+: c4 e3 39 4c c0 00 vpblendvb %xmm0,%xmm0,%xmm0,%xmm0
|
|
||||||
[ ]*[a-f0-9]+: c4 e3 79 4c c0 80 vpblendvb %xmm0,%xmm0,%xmm0,%xmm0
|
|
||||||
[ ]*[a-f0-9]+: 62 f2 7d 0f 90 0c 00 vpgatherdd \(%eax,%xmm0,1\),%xmm1\{%k7\}
|
|
||||||
[ ]*[a-f0-9]+: 62 d2 7d 0f 90 0c 00 vpgatherdd \(%eax,%xmm0,1\),%xmm1\{%k7\}
|
|
||||||
-[ ]*[a-f0-9]+: 62 f2 7d 07 90 0c 00 vpgatherdd \(%eax,%xmm0,1\),%xmm1\{%k7\}
|
|
||||||
+[ ]*[a-f0-9]+: 62 f2 7d 07 90 0c 00 vpgatherdd \(%eax,\(bad\),1\),%xmm1\{%k7\}
|
|
||||||
[ ]*[a-f0-9]+: c4 e2 78 f2 00 andn \(%eax\),%eax,%eax
|
|
||||||
[ ]*[a-f0-9]+: c4 e2 38 f2 00 andn \(%eax\),%eax,%eax
|
|
||||||
[ ]*[a-f0-9]+: c4 c2 78 f2 00 andn \(%eax\),%eax,%eax
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index ddb659fb041..267d58d535e 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -9316,7 +9316,6 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
|
|
||||||
/* In 16/32-bit mode silently ignore following bits. */
|
|
||||||
rex &= ~REX_B;
|
|
||||||
vex.r = 1;
|
|
||||||
- vex.v = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
need_vex = 1;
|
|
||||||
@@ -11718,8 +11717,13 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
*obufp = '\0';
|
|
||||||
}
|
|
||||||
if (haveindex)
|
|
||||||
- oappend (address_mode == mode_64bit && !addr32flag
|
|
||||||
- ? indexes64[vindex] : indexes32[vindex]);
|
|
||||||
+ {
|
|
||||||
+ if (address_mode == mode_64bit || vindex < 16)
|
|
||||||
+ oappend (address_mode == mode_64bit && !addr32flag
|
|
||||||
+ ? indexes64[vindex] : indexes32[vindex]);
|
|
||||||
+ else
|
|
||||||
+ oappend ("(bad)");
|
|
||||||
+ }
|
|
||||||
else
|
|
||||||
oappend (address_mode == mode_64bit && !addr32flag
|
|
||||||
? index64 : index32);
|
|
||||||
@@ -13256,7 +13260,15 @@ OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
reg = vex.register_specifier;
|
|
||||||
vex.register_specifier = 0;
|
|
||||||
if (address_mode != mode_64bit)
|
|
||||||
- reg &= 7;
|
|
||||||
+ {
|
|
||||||
+ if (vex.evex && !vex.v)
|
|
||||||
+ {
|
|
||||||
+ oappend ("(bad)");
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ reg &= 7;
|
|
||||||
+ }
|
|
||||||
else if (vex.evex && !vex.v)
|
|
||||||
reg += 16;
|
|
||||||
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,74 +0,0 @@
|
|||||||
From 605228fcaf91a86b5ae898415374a9382c85f76f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:07:42 +0200
|
|
||||||
Subject: [PATCH] x86: drop vex_mode and vex_scalar_mode
|
|
||||||
|
|
||||||
These are fully redundant with, respectively, x_mode and scalar_mode.
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 267d58d535e..20bf9b282c9 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -384,10 +384,10 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
|
|
||||||
#define XMM0 { XMM_Fixup, 0 }
|
|
||||||
#define FXSAVE { FXSAVE_Fixup, 0 }
|
|
||||||
|
|
||||||
-#define Vex { OP_VEX, vex_mode }
|
|
||||||
-#define VexW { OP_VexW, vex_mode }
|
|
||||||
-#define VexScalar { OP_VEX, vex_scalar_mode }
|
|
||||||
-#define VexScalarR { OP_VexR, vex_scalar_mode }
|
|
||||||
+#define Vex { OP_VEX, x_mode }
|
|
||||||
+#define VexW { OP_VexW, x_mode }
|
|
||||||
+#define VexScalar { OP_VEX, scalar_mode }
|
|
||||||
+#define VexScalarR { OP_VexR, scalar_mode }
|
|
||||||
#define VexGatherD { OP_VEX, vex_vsib_d_w_dq_mode }
|
|
||||||
#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
|
|
||||||
#define VexGdq { OP_VEX, dq_mode }
|
|
||||||
@@ -546,8 +546,6 @@ enum
|
|
||||||
dw_mode,
|
|
||||||
/* registers like dq_mode, memory like d_mode. */
|
|
||||||
dqd_mode,
|
|
||||||
- /* normal vex mode */
|
|
||||||
- vex_mode,
|
|
||||||
|
|
||||||
/* Operand size depends on the VEX.W bit, with VSIB dword indices. */
|
|
||||||
vex_vsib_d_w_dq_mode,
|
|
||||||
@@ -558,8 +556,6 @@ enum
|
|
||||||
|
|
||||||
/* scalar, ignore vector length. */
|
|
||||||
scalar_mode,
|
|
||||||
- /* like vex_mode, ignore vector length. */
|
|
||||||
- vex_scalar_mode,
|
|
||||||
/* Operand size depends on the VEX.W bit, ignore vector length. */
|
|
||||||
vex_scalar_w_dq_mode,
|
|
||||||
|
|
||||||
@@ -13274,7 +13270,7 @@ OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
|
|
||||||
switch (bytemode)
|
|
||||||
{
|
|
||||||
- case vex_scalar_mode:
|
|
||||||
+ case scalar_mode:
|
|
||||||
oappend (names_xmm[reg]);
|
|
||||||
return;
|
|
||||||
|
|
||||||
@@ -13343,7 +13339,7 @@ OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
case 128:
|
|
||||||
switch (bytemode)
|
|
||||||
{
|
|
||||||
- case vex_mode:
|
|
||||||
+ case x_mode:
|
|
||||||
names = names_xmm;
|
|
||||||
break;
|
|
||||||
case dq_mode:
|
|
||||||
@@ -13369,7 +13365,7 @@ OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
case 256:
|
|
||||||
switch (bytemode)
|
|
||||||
{
|
|
||||||
- case vex_mode:
|
|
||||||
+ case x_mode:
|
|
||||||
names = names_ymm;
|
|
||||||
break;
|
|
||||||
case mask_bd_mode:
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,168 +0,0 @@
|
|||||||
From b0556968af05310748d7a1286b8d7639de67831e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:08:05 +0200
|
|
||||||
Subject: [PATCH] x86: fold duplicate vector register printing code
|
|
||||||
|
|
||||||
The bulk of OP_XMM() can be easily reused also for OP_EX(). Break the
|
|
||||||
shared logic out of the function, and invoke the new helper from both
|
|
||||||
places.
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 20bf9b282c9..e750c94704a 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -12530,20 +12530,10 @@ OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
-OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
+print_vector_reg (unsigned int reg, int bytemode)
|
|
||||||
{
|
|
||||||
- int reg = modrm.reg;
|
|
||||||
const char **names;
|
|
||||||
|
|
||||||
- USED_REX (REX_R);
|
|
||||||
- if (rex & REX_R)
|
|
||||||
- reg += 8;
|
|
||||||
- if (vex.evex)
|
|
||||||
- {
|
|
||||||
- if (!vex.r)
|
|
||||||
- reg += 16;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
if (bytemode == xmmq_mode
|
|
||||||
|| bytemode == evex_half_bcst_xmmq_mode)
|
|
||||||
{
|
|
||||||
@@ -12564,7 +12554,6 @@ OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
names = names_ymm;
|
|
||||||
else if (bytemode == tmm_mode)
|
|
||||||
{
|
|
||||||
- modrm.reg = reg;
|
|
||||||
if (reg >= 8)
|
|
||||||
{
|
|
||||||
oappend ("(bad)");
|
|
||||||
@@ -12574,7 +12563,14 @@ OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
}
|
|
||||||
else if (need_vex
|
|
||||||
&& bytemode != xmm_mode
|
|
||||||
- && bytemode != scalar_mode)
|
|
||||||
+ && bytemode != scalar_mode
|
|
||||||
+ && bytemode != xmmdw_mode
|
|
||||||
+ && bytemode != xmmqd_mode
|
|
||||||
+ && bytemode != xmm_mb_mode
|
|
||||||
+ && bytemode != xmm_mw_mode
|
|
||||||
+ && bytemode != xmm_md_mode
|
|
||||||
+ && bytemode != xmm_mq_mode
|
|
||||||
+ && bytemode != vex_scalar_w_dq_mode)
|
|
||||||
{
|
|
||||||
switch (vex.length)
|
|
||||||
{
|
|
||||||
@@ -12604,6 +12600,26 @@ OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
oappend (names[reg]);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void
|
|
||||||
+OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
+{
|
|
||||||
+ unsigned int reg = modrm.reg;
|
|
||||||
+
|
|
||||||
+ USED_REX (REX_R);
|
|
||||||
+ if (rex & REX_R)
|
|
||||||
+ reg += 8;
|
|
||||||
+ if (vex.evex)
|
|
||||||
+ {
|
|
||||||
+ if (!vex.r)
|
|
||||||
+ reg += 16;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (bytemode == tmm_mode)
|
|
||||||
+ modrm.reg = reg;
|
|
||||||
+
|
|
||||||
+ print_vector_reg (reg, bytemode);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
OP_EM (int bytemode, int sizeflag)
|
|
||||||
{
|
|
||||||
@@ -12679,7 +12695,6 @@ static void
|
|
||||||
OP_EX (int bytemode, int sizeflag)
|
|
||||||
{
|
|
||||||
int reg;
|
|
||||||
- const char **names;
|
|
||||||
|
|
||||||
/* Skip mod/rm byte. */
|
|
||||||
MODRM_CHECK;
|
|
||||||
@@ -12708,66 +12723,10 @@ OP_EX (int bytemode, int sizeflag)
|
|
||||||
|| bytemode == q_swap_mode))
|
|
||||||
swap_operand ();
|
|
||||||
|
|
||||||
- if (need_vex
|
|
||||||
- && bytemode != xmm_mode
|
|
||||||
- && bytemode != xmmdw_mode
|
|
||||||
- && bytemode != xmmqd_mode
|
|
||||||
- && bytemode != xmm_mb_mode
|
|
||||||
- && bytemode != xmm_mw_mode
|
|
||||||
- && bytemode != xmm_md_mode
|
|
||||||
- && bytemode != xmm_mq_mode
|
|
||||||
- && bytemode != xmmq_mode
|
|
||||||
- && bytemode != evex_half_bcst_xmmq_mode
|
|
||||||
- && bytemode != ymm_mode
|
|
||||||
- && bytemode != tmm_mode
|
|
||||||
- && bytemode != vex_scalar_w_dq_mode)
|
|
||||||
- {
|
|
||||||
- switch (vex.length)
|
|
||||||
- {
|
|
||||||
- case 128:
|
|
||||||
- names = names_xmm;
|
|
||||||
- break;
|
|
||||||
- case 256:
|
|
||||||
- names = names_ymm;
|
|
||||||
- break;
|
|
||||||
- case 512:
|
|
||||||
- names = names_zmm;
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- else if (bytemode == xmmq_mode
|
|
||||||
- || bytemode == evex_half_bcst_xmmq_mode)
|
|
||||||
- {
|
|
||||||
- switch (vex.length)
|
|
||||||
- {
|
|
||||||
- case 128:
|
|
||||||
- case 256:
|
|
||||||
- names = names_xmm;
|
|
||||||
- break;
|
|
||||||
- case 512:
|
|
||||||
- names = names_ymm;
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- else if (bytemode == tmm_mode)
|
|
||||||
- {
|
|
||||||
- modrm.rm = reg;
|
|
||||||
- if (reg >= 8)
|
|
||||||
- {
|
|
||||||
- oappend ("(bad)");
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
- names = names_tmm;
|
|
||||||
- }
|
|
||||||
- else if (bytemode == ymm_mode)
|
|
||||||
- names = names_ymm;
|
|
||||||
- else
|
|
||||||
- names = names_xmm;
|
|
||||||
- oappend (names[reg]);
|
|
||||||
+ if (bytemode == tmm_mode)
|
|
||||||
+ modrm.rm = reg;
|
|
||||||
+
|
|
||||||
+ print_vector_reg (reg, bytemode);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,664 +0,0 @@
|
|||||||
From c1d66d5f24eb54a6453b3a813cbc7a7e0b5d15fe Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:08:39 +0200
|
|
||||||
Subject: [PATCH] x86: drop xmm_m{b,w,d,q}_mode
|
|
||||||
|
|
||||||
They're effectively redundant with {b,w,d,q}_mode.
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis-evex-mod.h b/opcodes/i386-dis-evex-mod.h
|
|
||||||
index a1cd69a1c9e..7a372ce8c0b 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-mod.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-mod.h
|
|
||||||
@@ -1,28 +1,28 @@
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F12_PREFIX_0 */
|
|
||||||
- { "vmovlpX", { XMM, Vex, EXxmm_mq }, PREFIX_OPCODE },
|
|
||||||
+ { "vmovlpX", { XMM, Vex, EXq }, PREFIX_OPCODE },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F12_P_0_M_1) },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F12_PREFIX_2 */
|
|
||||||
- { "vmovlpX", { XMM, Vex, EXxmm_mq }, PREFIX_OPCODE },
|
|
||||||
+ { "vmovlpX", { XMM, Vex, EXq }, PREFIX_OPCODE },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F13 */
|
|
||||||
- { "vmovlpX", { EXxmm_mq, XMM }, PREFIX_OPCODE },
|
|
||||||
+ { "vmovlpX", { EXq, XMM }, PREFIX_OPCODE },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F16_PREFIX_0 */
|
|
||||||
- { "vmovhpX", { XMM, Vex, EXxmm_mq }, PREFIX_OPCODE },
|
|
||||||
+ { "vmovhpX", { XMM, Vex, EXq }, PREFIX_OPCODE },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F16_P_0_M_1) },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F16_PREFIX_2 */
|
|
||||||
- { "vmovhpX", { XMM, Vex, EXxmm_mq }, PREFIX_OPCODE },
|
|
||||||
+ { "vmovhpX", { XMM, Vex, EXq }, PREFIX_OPCODE },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F17 */
|
|
||||||
- { "vmovhpX", { EXxmm_mq, XMM }, PREFIX_OPCODE },
|
|
||||||
+ { "vmovhpX", { EXq, XMM }, PREFIX_OPCODE },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F2B */
|
|
||||||
diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
index 9ad9372a221..417eb1bfbff 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-prefix.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
@@ -111,16 +111,16 @@
|
|
||||||
/* PREFIX_EVEX_0F78 */
|
|
||||||
{
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F78_P_0) },
|
|
||||||
- { "vcvttss2usi", { Gdq, EXxmm_md, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvttss2usi", { Gdq, EXd, EXxEVexS }, 0 },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F78_P_2) },
|
|
||||||
- { "vcvttsd2usi", { Gdq, EXxmm_mq, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvttsd2usi", { Gdq, EXq, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F79 */
|
|
||||||
{
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F79_P_0) },
|
|
||||||
- { "vcvtss2usi", { Gdq, EXxmm_md, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtss2usi", { Gdq, EXd, EXxEVexR }, 0 },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F79_P_2) },
|
|
||||||
- { "vcvtsd2usi", { Gdq, EXxmm_mq, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtsd2usi", { Gdq, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F7A */
|
|
||||||
{
|
|
||||||
diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h
|
|
||||||
index 8af4695a004..cb27d96d30d 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-w.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-w.h
|
|
||||||
@@ -1,11 +1,11 @@
|
|
||||||
/* EVEX_W_0F10_P_1 */
|
|
||||||
{
|
|
||||||
- { "vmovss", { XMScalar, VexScalarR, EXxmm_md }, 0 },
|
|
||||||
+ { "vmovss", { XMScalar, VexScalarR, EXd }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F10_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vmovsd", { XMScalar, VexScalarR, EXxmm_mq }, 0 },
|
|
||||||
+ { "vmovsd", { XMScalar, VexScalarR, EXq }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F11_P_1 */
|
|
||||||
{
|
|
||||||
@@ -18,7 +18,7 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F12_P_0_M_1 */
|
|
||||||
{
|
|
||||||
- { "vmovhlps", { XMM, Vex, EXxmm_mq }, 0 },
|
|
||||||
+ { "vmovhlps", { XMM, Vex, EXq }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F12_P_1 */
|
|
||||||
{
|
|
||||||
@@ -39,30 +39,30 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F51_P_1 */
|
|
||||||
{
|
|
||||||
- { "vsqrtss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
|
|
||||||
+ { "vsqrtss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F51_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vsqrtsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
|
|
||||||
+ { "vsqrtsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F58_P_1 */
|
|
||||||
{
|
|
||||||
- { "vaddss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
|
|
||||||
+ { "vaddss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F58_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vaddsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
|
|
||||||
+ { "vaddsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F59_P_1 */
|
|
||||||
{
|
|
||||||
- { "vmulss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
|
|
||||||
+ { "vmulss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F59_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vmulsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
|
|
||||||
+ { "vmulsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5A_P_0 */
|
|
||||||
{
|
|
||||||
@@ -70,7 +70,7 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5A_P_1 */
|
|
||||||
{
|
|
||||||
- { "vcvtss2sd", { XMScalar, VexScalar, EXxmm_md, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvtss2sd", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5A_P_2 */
|
|
||||||
{
|
|
||||||
@@ -80,7 +80,7 @@
|
|
||||||
/* EVEX_W_0F5A_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vcvtsd2ss", { XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtsd2ss", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5B_P_0 */
|
|
||||||
{
|
|
||||||
@@ -97,39 +97,39 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5C_P_1 */
|
|
||||||
{
|
|
||||||
- { "vsubss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
|
|
||||||
+ { "vsubss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5C_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vsubsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
|
|
||||||
+ { "vsubsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5D_P_1 */
|
|
||||||
{
|
|
||||||
- { "vminss", { XMScalar, VexScalar, EXxmm_md, EXxEVexS }, 0 },
|
|
||||||
+ { "vminss", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5D_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vminsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexS }, 0 },
|
|
||||||
+ { "vminsd", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5E_P_1 */
|
|
||||||
{
|
|
||||||
- { "vdivss", { XMScalar, VexScalar, EXxmm_md, EXxEVexR }, 0 },
|
|
||||||
+ { "vdivss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5E_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vdivsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexR }, 0 },
|
|
||||||
+ { "vdivsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5F_P_1 */
|
|
||||||
{
|
|
||||||
- { "vmaxss", { XMScalar, VexScalar, EXxmm_md, EXxEVexS }, 0 },
|
|
||||||
+ { "vmaxss", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F5F_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vmaxsd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexS }, 0 },
|
|
||||||
+ { "vmaxsd", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F62 */
|
|
||||||
{
|
|
||||||
@@ -260,12 +260,12 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0FC2_P_1 */
|
|
||||||
{
|
|
||||||
- { "vcmpss", { MaskG, VexScalar, EXxmm_md, EXxEVexS, CMP }, 0 },
|
|
||||||
+ { "vcmpss", { MaskG, VexScalar, EXd, EXxEVexS, CMP }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0FC2_P_3 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vcmpsd", { MaskG, VexScalar, EXxmm_mq, EXxEVexS, CMP }, 0 },
|
|
||||||
+ { "vcmpsd", { MaskG, VexScalar, EXq, EXxEVexS, CMP }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0FD2 */
|
|
||||||
{
|
|
||||||
@@ -382,8 +382,8 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F3819_L_n */
|
|
||||||
{
|
|
||||||
- { "vbroadcastf32x2", { XM, EXxmm_mq }, PREFIX_DATA },
|
|
||||||
- { "vbroadcastsd", { XM, EXxmm_mq }, PREFIX_DATA },
|
|
||||||
+ { "vbroadcastf32x2", { XM, EXq }, PREFIX_DATA },
|
|
||||||
+ { "vbroadcastsd", { XM, EXq }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F381A_M_0_L_n */
|
|
||||||
{
|
|
||||||
@@ -499,8 +499,8 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F3859 */
|
|
||||||
{
|
|
||||||
- { "vbroadcasti32x2", { XM, EXxmm_mq }, PREFIX_DATA },
|
|
||||||
- { "vpbroadcastq", { XM, EXxmm_mq }, PREFIX_DATA },
|
|
||||||
+ { "vbroadcasti32x2", { XM, EXq }, PREFIX_DATA },
|
|
||||||
+ { "vpbroadcastq", { XM, EXq }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F385A_M_0_L_n */
|
|
||||||
{
|
|
||||||
@@ -561,12 +561,12 @@
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F3A0A */
|
|
||||||
{
|
|
||||||
- { "vrndscaless", { XMScalar, VexScalar, EXxmm_md, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vrndscaless", { XMScalar, VexScalar, EXd, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F3A0B */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vrndscalesd", { XMScalar, VexScalar, EXxmm_mq, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vrndscalesd", { XMScalar, VexScalar, EXq, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
/* EVEX_W_0F3A18_L_n */
|
|
||||||
{
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index e750c94704a..27b6b8e8f44 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -352,6 +352,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
|
|
||||||
#define EMd { OP_EM, d_mode }
|
|
||||||
#define EMx { OP_EM, x_mode }
|
|
||||||
#define EXbwUnit { OP_EX, bw_unit_mode }
|
|
||||||
+#define EXb { OP_EX, b_mode }
|
|
||||||
#define EXw { OP_EX, w_mode }
|
|
||||||
#define EXd { OP_EX, d_mode }
|
|
||||||
#define EXdS { OP_EX, d_swap_mode }
|
|
||||||
@@ -364,10 +365,6 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
|
|
||||||
#define EXtmm { OP_EX, tmm_mode }
|
|
||||||
#define EXxmmq { OP_EX, xmmq_mode }
|
|
||||||
#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
|
|
||||||
-#define EXxmm_mb { OP_EX, xmm_mb_mode }
|
|
||||||
-#define EXxmm_mw { OP_EX, xmm_mw_mode }
|
|
||||||
-#define EXxmm_md { OP_EX, xmm_md_mode }
|
|
||||||
-#define EXxmm_mq { OP_EX, xmm_mq_mode }
|
|
||||||
#define EXxmmdw { OP_EX, xmmdw_mode }
|
|
||||||
#define EXxmmqd { OP_EX, xmmqd_mode }
|
|
||||||
#define EXymmq { OP_EX, ymmq_mode }
|
|
||||||
@@ -488,14 +485,6 @@ enum
|
|
||||||
xmmq_mode,
|
|
||||||
/* Same as xmmq_mode, but broadcast is allowed. */
|
|
||||||
evex_half_bcst_xmmq_mode,
|
|
||||||
- /* XMM register or byte memory operand */
|
|
||||||
- xmm_mb_mode,
|
|
||||||
- /* XMM register or word memory operand */
|
|
||||||
- xmm_mw_mode,
|
|
||||||
- /* XMM register or double word memory operand */
|
|
||||||
- xmm_md_mode,
|
|
||||||
- /* XMM register or quad word memory operand */
|
|
||||||
- xmm_mq_mode,
|
|
||||||
/* 16-byte XMM, word, double word or quad word operand. */
|
|
||||||
xmmdw_mode,
|
|
||||||
/* 16-byte XMM, double word, quad word operand or xmm word operand. */
|
|
||||||
@@ -3610,9 +3599,9 @@ static const struct dis386 prefix_table[][4] = {
|
|
||||||
/* PREFIX_VEX_0F10 */
|
|
||||||
{
|
|
||||||
{ "vmovups", { XM, EXx }, 0 },
|
|
||||||
- { "vmovss", { XMScalar, VexScalarR, EXxmm_md }, 0 },
|
|
||||||
+ { "vmovss", { XMScalar, VexScalarR, EXd }, 0 },
|
|
||||||
{ "vmovupd", { XM, EXx }, 0 },
|
|
||||||
- { "vmovsd", { XMScalar, VexScalarR, EXxmm_mq }, 0 },
|
|
||||||
+ { "vmovsd", { XMScalar, VexScalarR, EXq }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F11 */
|
|
||||||
@@ -3649,31 +3638,31 @@ static const struct dis386 prefix_table[][4] = {
|
|
||||||
/* PREFIX_VEX_0F2C */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vcvttss2si", { Gdq, EXxmm_md, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvttss2si", { Gdq, EXd, EXxEVexS }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vcvttsd2si", { Gdq, EXxmm_mq, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvttsd2si", { Gdq, EXq, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F2D */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vcvtss2si", { Gdq, EXxmm_md, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtss2si", { Gdq, EXd, EXxEVexR }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vcvtsd2si", { Gdq, EXxmm_mq, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtsd2si", { Gdq, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F2E */
|
|
||||||
{
|
|
||||||
- { "vucomisX", { XMScalar, EXxmm_md, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
+ { "vucomisX", { XMScalar, EXd, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vucomisX", { XMScalar, EXxmm_mq, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
+ { "vucomisX", { XMScalar, EXq, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F2F */
|
|
||||||
{
|
|
||||||
- { "vcomisX", { XMScalar, EXxmm_md, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
+ { "vcomisX", { XMScalar, EXd, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vcomisX", { XMScalar, EXxmm_mq, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
+ { "vcomisX", { XMScalar, EXq, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F41_L_1_M_1_W_0 */
|
|
||||||
@@ -3789,45 +3778,45 @@ static const struct dis386 prefix_table[][4] = {
|
|
||||||
/* PREFIX_VEX_0F51 */
|
|
||||||
{
|
|
||||||
{ "vsqrtps", { XM, EXx }, 0 },
|
|
||||||
- { "vsqrtss", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
|
||||||
+ { "vsqrtss", { XMScalar, VexScalar, EXd }, 0 },
|
|
||||||
{ "vsqrtpd", { XM, EXx }, 0 },
|
|
||||||
- { "vsqrtsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
|
|
||||||
+ { "vsqrtsd", { XMScalar, VexScalar, EXq }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F52 */
|
|
||||||
{
|
|
||||||
{ "vrsqrtps", { XM, EXx }, 0 },
|
|
||||||
- { "vrsqrtss", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
|
||||||
+ { "vrsqrtss", { XMScalar, VexScalar, EXd }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F53 */
|
|
||||||
{
|
|
||||||
{ "vrcpps", { XM, EXx }, 0 },
|
|
||||||
- { "vrcpss", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
|
||||||
+ { "vrcpss", { XMScalar, VexScalar, EXd }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F58 */
|
|
||||||
{
|
|
||||||
{ "vaddps", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vaddss", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
|
||||||
+ { "vaddss", { XMScalar, VexScalar, EXd }, 0 },
|
|
||||||
{ "vaddpd", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vaddsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
|
|
||||||
+ { "vaddsd", { XMScalar, VexScalar, EXq }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F59 */
|
|
||||||
{
|
|
||||||
{ "vmulps", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vmulss", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
|
||||||
+ { "vmulss", { XMScalar, VexScalar, EXd }, 0 },
|
|
||||||
{ "vmulpd", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vmulsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
|
|
||||||
+ { "vmulsd", { XMScalar, VexScalar, EXq }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F5A */
|
|
||||||
{
|
|
||||||
{ "vcvtps2pd", { XM, EXxmmq }, 0 },
|
|
||||||
- { "vcvtss2sd", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
|
||||||
+ { "vcvtss2sd", { XMScalar, VexScalar, EXd }, 0 },
|
|
||||||
{ "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
|
|
||||||
- { "vcvtsd2ss", { XMScalar, VexScalar, EXxmm_mq }, 0 },
|
|
||||||
+ { "vcvtsd2ss", { XMScalar, VexScalar, EXq }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F5B */
|
|
||||||
@@ -3840,33 +3829,33 @@ static const struct dis386 prefix_table[][4] = {
|
|
||||||
/* PREFIX_VEX_0F5C */
|
|
||||||
{
|
|
||||||
{ "vsubps", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vsubss", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
|
||||||
+ { "vsubss", { XMScalar, VexScalar, EXd }, 0 },
|
|
||||||
{ "vsubpd", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vsubsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
|
|
||||||
+ { "vsubsd", { XMScalar, VexScalar, EXq }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F5D */
|
|
||||||
{
|
|
||||||
{ "vminps", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vminss", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
|
||||||
+ { "vminss", { XMScalar, VexScalar, EXd }, 0 },
|
|
||||||
{ "vminpd", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vminsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
|
|
||||||
+ { "vminsd", { XMScalar, VexScalar, EXq }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F5E */
|
|
||||||
{
|
|
||||||
{ "vdivps", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vdivss", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
|
||||||
+ { "vdivss", { XMScalar, VexScalar, EXd }, 0 },
|
|
||||||
{ "vdivpd", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vdivsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
|
|
||||||
+ { "vdivsd", { XMScalar, VexScalar, EXq }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F5F */
|
|
||||||
{
|
|
||||||
{ "vmaxps", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vmaxss", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
|
||||||
+ { "vmaxss", { XMScalar, VexScalar, EXd }, 0 },
|
|
||||||
{ "vmaxpd", { XM, Vex, EXx }, 0 },
|
|
||||||
- { "vmaxsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
|
|
||||||
+ { "vmaxsd", { XMScalar, VexScalar, EXq }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0F6F */
|
|
||||||
@@ -4005,9 +3994,9 @@ static const struct dis386 prefix_table[][4] = {
|
|
||||||
/* PREFIX_VEX_0FC2 */
|
|
||||||
{
|
|
||||||
{ "vcmpps", { XM, Vex, EXx, CMP }, 0 },
|
|
||||||
- { "vcmpss", { XMScalar, VexScalar, EXxmm_md, CMP }, 0 },
|
|
||||||
+ { "vcmpss", { XMScalar, VexScalar, EXd, CMP }, 0 },
|
|
||||||
{ "vcmppd", { XM, Vex, EXx, CMP }, 0 },
|
|
||||||
- { "vcmpsd", { XMScalar, VexScalar, EXxmm_mq, CMP }, 0 },
|
|
||||||
+ { "vcmpsd", { XMScalar, VexScalar, EXq, CMP }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* PREFIX_VEX_0FD0 */
|
|
||||||
@@ -6441,8 +6430,8 @@ static const struct dis386 vex_table[][256] = {
|
|
||||||
/* 08 */
|
|
||||||
{ "vroundps", { XM, EXx, Ib }, PREFIX_DATA },
|
|
||||||
{ "vroundpd", { XM, EXx, Ib }, PREFIX_DATA },
|
|
||||||
- { "vroundss", { XMScalar, VexScalar, EXxmm_md, Ib }, PREFIX_DATA },
|
|
||||||
- { "vroundsd", { XMScalar, VexScalar, EXxmm_mq, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vroundss", { XMScalar, VexScalar, EXd, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vroundsd", { XMScalar, VexScalar, EXq, Ib }, PREFIX_DATA },
|
|
||||||
{ "vblendps", { XM, Vex, EXx, Ib }, PREFIX_DATA },
|
|
||||||
{ "vblendpd", { XM, Vex, EXx, Ib }, PREFIX_DATA },
|
|
||||||
{ "vpblendw", { XM, Vex, EXx, Ib }, PREFIX_DATA },
|
|
||||||
@@ -6549,12 +6538,12 @@ static const struct dis386 vex_table[][256] = {
|
|
||||||
/* 68 */
|
|
||||||
{ "vfmaddps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA },
|
|
||||||
{ "vfmaddpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA },
|
|
||||||
- { "vfmaddss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
- { "vfmaddsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
+ { "vfmaddss", { XMScalar, VexScalar, EXd, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
+ { "vfmaddsd", { XMScalar, VexScalar, EXq, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
{ "vfmsubps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA },
|
|
||||||
{ "vfmsubpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA },
|
|
||||||
- { "vfmsubss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
- { "vfmsubsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
+ { "vfmsubss", { XMScalar, VexScalar, EXd, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
+ { "vfmsubsd", { XMScalar, VexScalar, EXq, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
/* 70 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -6567,12 +6556,12 @@ static const struct dis386 vex_table[][256] = {
|
|
||||||
/* 78 */
|
|
||||||
{ "vfnmaddps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA },
|
|
||||||
{ "vfnmaddpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA },
|
|
||||||
- { "vfnmaddss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
- { "vfnmaddsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
+ { "vfnmaddss", { XMScalar, VexScalar, EXd, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
+ { "vfnmaddsd", { XMScalar, VexScalar, EXq, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
{ "vfnmsubps", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA },
|
|
||||||
{ "vfnmsubpd", { XM, Vex, EXx, XMVexI4 }, PREFIX_DATA },
|
|
||||||
- { "vfnmsubss", { XMScalar, VexScalar, EXxmm_md, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
- { "vfnmsubsd", { XMScalar, VexScalar, EXxmm_mq, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsubss", { XMScalar, VexScalar, EXd, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsubsd", { XMScalar, VexScalar, EXq, XMVexScalarI4 }, PREFIX_DATA },
|
|
||||||
/* 80 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -6813,7 +6802,7 @@ static const struct dis386 vex_len_table[][2] = {
|
|
||||||
|
|
||||||
/* VEX_LEN_0F7E_P_1 */
|
|
||||||
{
|
|
||||||
- { "vmovq", { XMScalar, EXxmm_mq }, 0 },
|
|
||||||
+ { "vmovq", { XMScalar, EXq }, 0 },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* VEX_LEN_0F7E_P_2 */
|
|
||||||
@@ -7533,11 +7522,11 @@ static const struct dis386 vex_w_table[][2] = {
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* VEX_W_0F3818 */
|
|
||||||
- { "vbroadcastss", { XM, EXxmm_md }, PREFIX_DATA },
|
|
||||||
+ { "vbroadcastss", { XM, EXd }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* VEX_W_0F3819_L_1 */
|
|
||||||
- { "vbroadcastsd", { XM, EXxmm_mq }, PREFIX_DATA },
|
|
||||||
+ { "vbroadcastsd", { XM, EXq }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* VEX_W_0F381A_M_0_L_1 */
|
|
||||||
@@ -7609,11 +7598,11 @@ static const struct dis386 vex_w_table[][2] = {
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* VEX_W_0F3858 */
|
|
||||||
- { "vpbroadcastd", { XM, EXxmm_md }, PREFIX_DATA },
|
|
||||||
+ { "vpbroadcastd", { XM, EXd }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* VEX_W_0F3859 */
|
|
||||||
- { "vpbroadcastq", { XM, EXxmm_mq }, PREFIX_DATA },
|
|
||||||
+ { "vpbroadcastq", { XM, EXq }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* VEX_W_0F385A_M_0_L_0 */
|
|
||||||
@@ -7641,11 +7630,11 @@ static const struct dis386 vex_w_table[][2] = {
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* VEX_W_0F3878 */
|
|
||||||
- { "vpbroadcastb", { XM, EXxmm_mb }, PREFIX_DATA },
|
|
||||||
+ { "vpbroadcastb", { XM, EXb }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* VEX_W_0F3879 */
|
|
||||||
- { "vpbroadcastw", { XM, EXxmm_mw }, PREFIX_DATA },
|
|
||||||
+ { "vpbroadcastw", { XM, EXw }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* VEX_W_0F38CF */
|
|
||||||
@@ -11107,66 +11096,6 @@ intel_operand_size (int bytemode, int sizeflag)
|
|
||||||
abort ();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
- case xmm_mb_mode:
|
|
||||||
- if (!need_vex)
|
|
||||||
- abort ();
|
|
||||||
-
|
|
||||||
- switch (vex.length)
|
|
||||||
- {
|
|
||||||
- case 128:
|
|
||||||
- case 256:
|
|
||||||
- case 512:
|
|
||||||
- oappend ("BYTE PTR ");
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
- case xmm_mw_mode:
|
|
||||||
- if (!need_vex)
|
|
||||||
- abort ();
|
|
||||||
-
|
|
||||||
- switch (vex.length)
|
|
||||||
- {
|
|
||||||
- case 128:
|
|
||||||
- case 256:
|
|
||||||
- case 512:
|
|
||||||
- oappend ("WORD PTR ");
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
- case xmm_md_mode:
|
|
||||||
- if (!need_vex)
|
|
||||||
- abort ();
|
|
||||||
-
|
|
||||||
- switch (vex.length)
|
|
||||||
- {
|
|
||||||
- case 128:
|
|
||||||
- case 256:
|
|
||||||
- case 512:
|
|
||||||
- oappend ("DWORD PTR ");
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
- case xmm_mq_mode:
|
|
||||||
- if (!need_vex)
|
|
||||||
- abort ();
|
|
||||||
-
|
|
||||||
- switch (vex.length)
|
|
||||||
- {
|
|
||||||
- case 128:
|
|
||||||
- case 256:
|
|
||||||
- case 512:
|
|
||||||
- oappend ("QWORD PTR ");
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
case xmmdw_mode:
|
|
||||||
if (!need_vex)
|
|
||||||
abort ();
|
|
||||||
@@ -11424,19 +11353,18 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
{
|
|
||||||
case dqw_mode:
|
|
||||||
case dw_mode:
|
|
||||||
- case xmm_mw_mode:
|
|
||||||
+ case w_mode:
|
|
||||||
shift = 1;
|
|
||||||
break;
|
|
||||||
case dqb_mode:
|
|
||||||
case db_mode:
|
|
||||||
- case xmm_mb_mode:
|
|
||||||
+ case b_mode:
|
|
||||||
shift = 0;
|
|
||||||
break;
|
|
||||||
case dq_mode:
|
|
||||||
if (address_mode != mode_64bit)
|
|
||||||
{
|
|
||||||
case dqd_mode:
|
|
||||||
- case xmm_md_mode:
|
|
||||||
case d_mode:
|
|
||||||
case d_swap_mode:
|
|
||||||
shift = 2;
|
|
||||||
@@ -11493,7 +11421,6 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
case xmm_mode:
|
|
||||||
shift = 4;
|
|
||||||
break;
|
|
||||||
- case xmm_mq_mode:
|
|
||||||
case q_mode:
|
|
||||||
case q_swap_mode:
|
|
||||||
shift = 3;
|
|
||||||
@@ -12566,10 +12493,10 @@ print_vector_reg (unsigned int reg, int bytemode)
|
|
||||||
&& bytemode != scalar_mode
|
|
||||||
&& bytemode != xmmdw_mode
|
|
||||||
&& bytemode != xmmqd_mode
|
|
||||||
- && bytemode != xmm_mb_mode
|
|
||||||
- && bytemode != xmm_mw_mode
|
|
||||||
- && bytemode != xmm_md_mode
|
|
||||||
- && bytemode != xmm_mq_mode
|
|
||||||
+ && bytemode != b_mode
|
|
||||||
+ && bytemode != w_mode
|
|
||||||
+ && bytemode != d_mode
|
|
||||||
+ && bytemode != q_mode
|
|
||||||
&& bytemode != vex_scalar_w_dq_mode)
|
|
||||||
{
|
|
||||||
switch (vex.length)
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,302 +0,0 @@
|
|||||||
From eb34d29be8766b7466becebdd94e8121e88a44d4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:09:03 +0200
|
|
||||||
Subject: [PATCH] x86: drop vex_scalar_w_dq_mode
|
|
||||||
|
|
||||||
It has only a single use and can easily be represented by dq_mode
|
|
||||||
instead. Plus its handling in intel_operand_size() was duplicating
|
|
||||||
that of vex_vsib_{d,q}_w_dq_mode anyway.
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
index 417eb1bfbff..5c24618bec4 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-prefix.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
@@ -358,7 +358,7 @@
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
|
|
||||||
+ { "vfmsub132s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, 0 },
|
|
||||||
{ "v4fmaddss", { XMScalar, VexScalar, Mxmm }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F38AA */
|
|
||||||
@@ -372,6 +372,6 @@
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, 0 },
|
|
||||||
+ { "vfmsub213s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, 0 },
|
|
||||||
{ "v4fnmaddss", { XMScalar, VexScalar, Mxmm }, 0 },
|
|
||||||
},
|
|
||||||
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
|
|
||||||
index 5f1ebaded85..287c7a84635 100644
|
|
||||||
--- a/opcodes/i386-dis-evex.h
|
|
||||||
+++ b/opcodes/i386-dis-evex.h
|
|
||||||
@@ -343,7 +343,7 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_0F382A) },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F382B) },
|
|
||||||
{ "vscalefp%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vscalefs%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vscalefs%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
/* 30 */
|
|
||||||
@@ -368,7 +368,7 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ "vpmull%DQ", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vgetexpp%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA },
|
|
||||||
- { "vgetexps%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA },
|
|
||||||
+ { "vgetexps%XW", { XMScalar, VexScalar, EXdq, EXxEVexS }, PREFIX_DATA },
|
|
||||||
{ "vplzcnt%DQ", { XM, EXx }, PREFIX_DATA },
|
|
||||||
{ "vpsrlv%DQ", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
{ "vpsrav%DQ", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
@@ -379,9 +379,9 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vrcp14p%XW", { XM, EXx }, PREFIX_DATA },
|
|
||||||
- { "vrcp14s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vrcp14s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
{ "vrsqrt14p%XW", { XM, EXx }, 0 },
|
|
||||||
- { "vrsqrt14s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vrsqrt14s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
/* 50 */
|
|
||||||
{ "vpdpbusd", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
{ "vpdpbusds", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
@@ -465,13 +465,13 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ "vfmsubadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* 98 */
|
|
||||||
{ "vfmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfmadd132s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_0F389A) },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_0F389B) },
|
|
||||||
{ "vfnmadd132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmadd132s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfnmsub132p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsub132s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* A0 */
|
|
||||||
{ "vpscatterd%DQ", { MVexVSIBDWpX, XM }, PREFIX_DATA },
|
|
||||||
{ "vpscatterq%DQ", { MVexVSIBQWpX, XMGatherQ }, PREFIX_DATA },
|
|
||||||
@@ -483,13 +483,13 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ "vfmsubadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* A8 */
|
|
||||||
{ "vfmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfmadd213s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_0F38AA) },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_0F38AB) },
|
|
||||||
{ "vfnmadd213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmadd213s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfnmsub213p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsub213s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* B0 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -501,13 +501,13 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ "vfmsubadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* B8 */
|
|
||||||
{ "vfmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfmadd231s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfmsub231s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfnmadd231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmadd231s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfnmsub231p%XW", { XM, Vex, EXx, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsub231s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* C0 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -521,9 +521,9 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ "vexp2p%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vrcp28p%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA },
|
|
||||||
- { "vrcp28s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA },
|
|
||||||
+ { "vrcp28s%XW", { XMScalar, VexScalar, EXdq, EXxEVexS }, PREFIX_DATA },
|
|
||||||
{ "vrsqrt28p%XW", { XM, EXx, EXxEVexS }, PREFIX_DATA },
|
|
||||||
- { "vrsqrt28s%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS }, PREFIX_DATA },
|
|
||||||
+ { "vrsqrt28s%XW", { XMScalar, VexScalar, EXdq, EXxEVexS }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ VEX_W_TABLE (VEX_W_0F38CF) },
|
|
||||||
/* D0 */
|
|
||||||
@@ -627,7 +627,7 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vpternlog%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA },
|
|
||||||
{ "vgetmantp%XW", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
- { "vgetmants%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vgetmants%XW", { XMScalar, VexScalar, EXdq, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
/* 28 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -675,13 +675,13 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
/* 50 */
|
|
||||||
{ "vrangep%XW", { XM, Vex, EXx, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
- { "vranges%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vranges%XW", { XMScalar, VexScalar, EXdq, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vfixupimmp%XW", { XM, Vex, EXx, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
- { "vfixupimms%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vfixupimms%XW", { XMScalar, VexScalar, EXdq, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
{ "vreducep%XW", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
- { "vreduces%XW", { XMScalar, VexScalar, EXVexWdqScalar, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vreduces%XW", { XMScalar, VexScalar, EXdq, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
/* 58 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -699,7 +699,7 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vfpclassp%XW%XZ", { MaskG, EXx, Ib }, PREFIX_DATA },
|
|
||||||
- { "vfpclasss%XW", { MaskG, EXVexWdqScalar, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vfpclasss%XW", { MaskG, EXdq, Ib }, PREFIX_DATA },
|
|
||||||
/* 68 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 27b6b8e8f44..6efc15b851b 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -358,6 +358,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
|
|
||||||
#define EXdS { OP_EX, d_swap_mode }
|
|
||||||
#define EXq { OP_EX, q_mode }
|
|
||||||
#define EXqS { OP_EX, q_swap_mode }
|
|
||||||
+#define EXdq { OP_EX, dq_mode }
|
|
||||||
#define EXx { OP_EX, x_mode }
|
|
||||||
#define EXxS { OP_EX, x_swap_mode }
|
|
||||||
#define EXxmm { OP_EX, xmm_mode }
|
|
||||||
@@ -368,7 +369,6 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
|
|
||||||
#define EXxmmdw { OP_EX, xmmdw_mode }
|
|
||||||
#define EXxmmqd { OP_EX, xmmqd_mode }
|
|
||||||
#define EXymmq { OP_EX, ymmq_mode }
|
|
||||||
-#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
|
|
||||||
#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
|
|
||||||
#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
|
|
||||||
#define MS { OP_MS, v_mode }
|
|
||||||
@@ -507,7 +507,7 @@ enum
|
|
||||||
v_bnd_mode,
|
|
||||||
/* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
|
|
||||||
v_bndmk_mode,
|
|
||||||
- /* operand size depends on REX prefixes. */
|
|
||||||
+ /* operand size depends on REX.W / VEX.W. */
|
|
||||||
dq_mode,
|
|
||||||
/* registers like dq_mode, memory like w_mode, displacements like
|
|
||||||
v_mode without considering Intel64 ISA. */
|
|
||||||
@@ -545,8 +545,6 @@ enum
|
|
||||||
|
|
||||||
/* scalar, ignore vector length. */
|
|
||||||
scalar_mode,
|
|
||||||
- /* Operand size depends on the VEX.W bit, ignore vector length. */
|
|
||||||
- vex_scalar_w_dq_mode,
|
|
||||||
|
|
||||||
/* Static rounding. */
|
|
||||||
evex_rounding_mode,
|
|
||||||
@@ -6300,13 +6298,13 @@ static const struct dis386 vex_table[][256] = {
|
|
||||||
{ "vfmsubadd132p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
/* 98 */
|
|
||||||
{ "vfmadd132p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfmadd132s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
{ "vfmsub132p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfmsub132s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
{ "vfnmadd132p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfnmadd132s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
{ "vfnmsub132p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsub132s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
/* a0 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -6318,13 +6316,13 @@ static const struct dis386 vex_table[][256] = {
|
|
||||||
{ "vfmsubadd213p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
/* a8 */
|
|
||||||
{ "vfmadd213p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfmadd213s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
{ "vfmsub213p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfmsub213s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
{ "vfnmadd213p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfnmadd213s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
{ "vfnmsub213p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsub213s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
/* b0 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -6336,13 +6334,13 @@ static const struct dis386 vex_table[][256] = {
|
|
||||||
{ "vfmsubadd231p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
/* b8 */
|
|
||||||
{ "vfmadd231p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfmadd231s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
{ "vfmsub231p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfmsub231s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
{ "vfnmadd231p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfnmadd231s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
{ "vfnmsub231p%XW", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsub231s%XW", { XMScalar, VexScalar, EXdq }, PREFIX_DATA },
|
|
||||||
/* c0 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -11170,15 +11168,6 @@ intel_operand_size (int bytemode, int sizeflag)
|
|
||||||
case o_mode:
|
|
||||||
oappend ("OWORD PTR ");
|
|
||||||
break;
|
|
||||||
- case vex_scalar_w_dq_mode:
|
|
||||||
- if (!need_vex)
|
|
||||||
- abort ();
|
|
||||||
-
|
|
||||||
- if (vex.w)
|
|
||||||
- oappend ("QWORD PTR ");
|
|
||||||
- else
|
|
||||||
- oappend ("DWORD PTR ");
|
|
||||||
- break;
|
|
||||||
case vex_vsib_d_w_dq_mode:
|
|
||||||
case vex_vsib_q_w_dq_mode:
|
|
||||||
if (!need_vex)
|
|
||||||
@@ -11371,7 +11360,6 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* fall through */
|
|
||||||
- case vex_scalar_w_dq_mode:
|
|
||||||
case vex_vsib_d_w_dq_mode:
|
|
||||||
case vex_vsib_q_w_dq_mode:
|
|
||||||
case evex_x_gscat_mode:
|
|
||||||
@@ -12496,8 +12484,7 @@ print_vector_reg (unsigned int reg, int bytemode)
|
|
||||||
&& bytemode != b_mode
|
|
||||||
&& bytemode != w_mode
|
|
||||||
&& bytemode != d_mode
|
|
||||||
- && bytemode != q_mode
|
|
||||||
- && bytemode != vex_scalar_w_dq_mode)
|
|
||||||
+ && bytemode != q_mode)
|
|
||||||
{
|
|
||||||
switch (vex.length)
|
|
||||||
{
|
|
||||||
@@ -12627,6 +12614,9 @@ OP_EX (int bytemode, int sizeflag)
|
|
||||||
MODRM_CHECK;
|
|
||||||
codep++;
|
|
||||||
|
|
||||||
+ if (bytemode == dq_mode)
|
|
||||||
+ bytemode = vex.w ? q_mode : d_mode;
|
|
||||||
+
|
|
||||||
if (modrm.mod != 3)
|
|
||||||
{
|
|
||||||
OP_E_memory (bytemode, sizeflag);
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,528 +0,0 @@
|
|||||||
From 5fbe0f28ae6dec9736e504cf79cdb76a9fa09dc9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 22 Jul 2021 13:09:21 +0200
|
|
||||||
Subject: [PATCH] x86: drop dq{b,d}_mode
|
|
||||||
|
|
||||||
Their sole use is for {,V}EXTRACTPS / {,V}P{EXT,INS}RB respectively; for
|
|
||||||
consistency also limit use of dqw_mode to Jdqw. 64-bit disassembly
|
|
||||||
reflecting REX.W / VEX.W is not in line with the assembler's opcode
|
|
||||||
table having NoRex64 / VexWIG in all respective templates, i.e. assembly
|
|
||||||
input isn't being honored there either. Obviously the 0FC5 encodings of
|
|
||||||
{,V}PEXTRW then also need adjustment for consistency reasons.
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-avx-wig.d b/gas/testsuite/gas/i386/x86-64-avx-wig.d
|
|
||||||
index 14edfb3de7d..2144746bdf0 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-avx-wig.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-avx-wig.d
|
|
||||||
@@ -58,7 +58,7 @@ Disassembly of section .text:
|
|
||||||
+[a-f0-9]+: c4 e1 ca 5e d4 vdivss %xmm4,%xmm6,%xmm2
|
|
||||||
+[a-f0-9]+: c4 e3 c9 41 d4 07 vdppd \$0x7,%xmm4,%xmm6,%xmm2
|
|
||||||
+[a-f0-9]+: c4 e3 cd 40 d4 07 vdpps \$0x7,%ymm4,%ymm6,%ymm2
|
|
||||||
- +[a-f0-9]+: c4 e3 f9 17 e1 07 vextractps \$0x7,%xmm4,%rcx
|
|
||||||
+ +[a-f0-9]+: c4 e3 f9 17 e1 07 vextractps \$0x7,%xmm4,%ecx
|
|
||||||
+[a-f0-9]+: c4 e1 cd 7c d4 vhaddpd %ymm4,%ymm6,%ymm2
|
|
||||||
+[a-f0-9]+: c4 e1 cf 7c d4 vhaddps %ymm4,%ymm6,%ymm2
|
|
||||||
+[a-f0-9]+: c4 e1 cd 7d d4 vhsubpd %ymm4,%ymm6,%ymm2
|
|
||||||
@@ -157,10 +157,10 @@ Disassembly of section .text:
|
|
||||||
+[a-f0-9]+: c4 e1 c9 65 d4 vpcmpgtw %xmm4,%xmm6,%xmm2
|
|
||||||
+[a-f0-9]+: c4 e3 f9 63 f4 07 vpcmpistri \$0x7,%xmm4,%xmm6
|
|
||||||
+[a-f0-9]+: c4 e3 f9 62 f4 07 vpcmpistrm \$0x7,%xmm4,%xmm6
|
|
||||||
- +[a-f0-9]+: c4 e3 f9 14 c0 00 vpextrb \$0x0,%xmm0,%rax
|
|
||||||
+ +[a-f0-9]+: c4 e3 f9 14 c0 00 vpextrb \$0x0,%xmm0,%eax
|
|
||||||
+[a-f0-9]+: c4 e3 f9 14 00 00 vpextrb \$0x0,%xmm0,\(%rax\)
|
|
||||||
- +[a-f0-9]+: c4 e1 f9 c5 c0 00 vpextrw \$0x0,%xmm0,%rax
|
|
||||||
- +[a-f0-9]+: c4 e3 f9 15 c0 00 vpextrw \$0x0,%xmm0,%rax
|
|
||||||
+ +[a-f0-9]+: c4 e1 f9 c5 c0 00 vpextrw \$0x0,%xmm0,%eax
|
|
||||||
+ +[a-f0-9]+: c4 e3 f9 15 c0 00 vpextrw \$0x0,%xmm0,%eax
|
|
||||||
+[a-f0-9]+: c4 e3 f9 15 00 00 vpextrw \$0x0,%xmm0,\(%rax\)
|
|
||||||
+[a-f0-9]+: c4 e2 c9 02 d4 vphaddd %xmm4,%xmm6,%xmm2
|
|
||||||
+[a-f0-9]+: c4 e2 c9 03 d4 vphaddsw %xmm4,%xmm6,%xmm2
|
|
||||||
@@ -169,9 +169,9 @@ Disassembly of section .text:
|
|
||||||
+[a-f0-9]+: c4 e2 c9 06 d4 vphsubd %xmm4,%xmm6,%xmm2
|
|
||||||
+[a-f0-9]+: c4 e2 c9 07 d4 vphsubsw %xmm4,%xmm6,%xmm2
|
|
||||||
+[a-f0-9]+: c4 e2 c9 05 d4 vphsubw %xmm4,%xmm6,%xmm2
|
|
||||||
- +[a-f0-9]+: c4 e3 f9 20 c0 00 vpinsrb \$0x0,%rax,%xmm0,%xmm0
|
|
||||||
+ +[a-f0-9]+: c4 e3 f9 20 c0 00 vpinsrb \$0x0,%eax,%xmm0,%xmm0
|
|
||||||
+[a-f0-9]+: c4 e3 f9 20 00 00 vpinsrb \$0x0,\(%rax\),%xmm0,%xmm0
|
|
||||||
- +[a-f0-9]+: c4 e1 f9 c4 c0 00 vpinsrw \$0x0,%rax,%xmm0,%xmm0
|
|
||||||
+ +[a-f0-9]+: c4 e1 f9 c4 c0 00 vpinsrw \$0x0,%eax,%xmm0,%xmm0
|
|
||||||
+[a-f0-9]+: c4 e1 f9 c4 00 00 vpinsrw \$0x0,\(%rax\),%xmm0,%xmm0
|
|
||||||
+[a-f0-9]+: c4 e2 c9 04 d4 vpmaddubsw %xmm4,%xmm6,%xmm2
|
|
||||||
+[a-f0-9]+: c4 e1 c9 f5 d4 vpmaddwd %xmm4,%xmm6,%xmm2
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-avx512bw-wig1-intel.d b/gas/testsuite/gas/i386/x86-64-avx512bw-wig1-intel.d
|
|
||||||
index 79b0fdc6a1f..3a1141866aa 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-avx512bw-wig1-intel.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-avx512bw-wig1-intel.d
|
|
||||||
@@ -159,9 +159,9 @@ Disassembly of section \.text:
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 aa 00 20 00 00[ ]*vpcmpgtw k5,zmm30,ZMMWORD PTR \[rdx\+0x2000\]
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 6a 80[ ]*vpcmpgtw k5,zmm30,ZMMWORD PTR \[rdx-0x2000\]
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 aa c0 df ff ff[ ]*vpcmpgtw k5,zmm30,ZMMWORD PTR \[rdx-0x2040\]
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 ab[ ]*vpextrb rax,xmm29,0xab
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 7b[ ]*vpextrb rax,xmm29,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 43 fd 08 14 e8 7b[ ]*vpextrb r8,xmm29,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 ab[ ]*vpextrb eax,xmm29,0xab
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 7b[ ]*vpextrb eax,xmm29,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 43 fd 08 14 e8 7b[ ]*vpextrb r8d,xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 29 7b[ ]*vpextrb BYTE PTR \[rcx\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 23 fd 08 14 ac f0 23 01 00 00 7b[ ]*vpextrb BYTE PTR \[rax\+r14\*8\+0x123\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 6a 7f 7b[ ]*vpextrb BYTE PTR \[rdx\+0x7f\],xmm29,0x7b
|
|
||||||
@@ -174,23 +174,23 @@ Disassembly of section \.text:
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 aa 00 01 00 00 7b[ ]*vpextrw WORD PTR \[rdx\+0x100\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 6a 80 7b[ ]*vpextrw WORD PTR \[rdx-0x100\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 aa fe fe ff ff 7b[ ]*vpextrw WORD PTR \[rdx-0x102\],xmm29,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 ab[ ]*vpextrw rax,xmm30,0xab
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 7b[ ]*vpextrw rax,xmm30,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 11 fd 08 c5 c6 7b[ ]*vpextrw r8,xmm30,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 ab[ ]*vpinsrb xmm30,xmm29,rax,0xab
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 7b[ ]*vpinsrb xmm30,xmm29,rax,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f5 7b[ ]*vpinsrb xmm30,xmm29,rbp,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 43 95 00 20 f5 7b[ ]*vpinsrb xmm30,xmm29,r13,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 ab[ ]*vpextrw eax,xmm30,0xab
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 7b[ ]*vpextrw eax,xmm30,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 11 fd 08 c5 c6 7b[ ]*vpextrw r8d,xmm30,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 ab[ ]*vpinsrb xmm30,xmm29,eax,0xab
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 7b[ ]*vpinsrb xmm30,xmm29,eax,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f5 7b[ ]*vpinsrb xmm30,xmm29,ebp,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 43 95 00 20 f5 7b[ ]*vpinsrb xmm30,xmm29,r13d,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 31 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rcx\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 23 95 00 20 b4 f0 23 01 00 00 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rax\+r14\*8\+0x123\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 72 7f 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rdx\+0x7f\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 b2 80 00 00 00 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rdx\+0x80\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 72 80 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rdx-0x80\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 b2 7f ff ff ff 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rdx-0x81\],0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 ab[ ]*vpinsrw xmm30,xmm29,rax,0xab
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 7b[ ]*vpinsrw xmm30,xmm29,rax,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f5 7b[ ]*vpinsrw xmm30,xmm29,rbp,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 41 95 00 c4 f5 7b[ ]*vpinsrw xmm30,xmm29,r13,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 ab[ ]*vpinsrw xmm30,xmm29,eax,0xab
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 7b[ ]*vpinsrw xmm30,xmm29,eax,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f5 7b[ ]*vpinsrw xmm30,xmm29,ebp,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 41 95 00 c4 f5 7b[ ]*vpinsrw xmm30,xmm29,r13d,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 31 7b[ ]*vpinsrw xmm30,xmm29,WORD PTR \[rcx\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 21 95 00 c4 b4 f0 23 01 00 00 7b[ ]*vpinsrw xmm30,xmm29,WORD PTR \[rax\+r14\*8\+0x123\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 72 7f 7b[ ]*vpinsrw xmm30,xmm29,WORD PTR \[rdx\+0xfe\],0x7b
|
|
||||||
@@ -690,9 +690,9 @@ Disassembly of section \.text:
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 aa 00 20 00 00[ ]*vpcmpgtw k5,zmm30,ZMMWORD PTR \[rdx\+0x2000\]
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 6a 80[ ]*vpcmpgtw k5,zmm30,ZMMWORD PTR \[rdx-0x2000\]
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 aa c0 df ff ff[ ]*vpcmpgtw k5,zmm30,ZMMWORD PTR \[rdx-0x2040\]
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 ab[ ]*vpextrb rax,xmm29,0xab
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 7b[ ]*vpextrb rax,xmm29,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 43 fd 08 14 e8 7b[ ]*vpextrb r8,xmm29,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 ab[ ]*vpextrb eax,xmm29,0xab
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 7b[ ]*vpextrb eax,xmm29,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 43 fd 08 14 e8 7b[ ]*vpextrb r8d,xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 29 7b[ ]*vpextrb BYTE PTR \[rcx\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 23 fd 08 14 ac f0 34 12 00 00 7b[ ]*vpextrb BYTE PTR \[rax\+r14\*8\+0x1234\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 6a 7f 7b[ ]*vpextrb BYTE PTR \[rdx\+0x7f\],xmm29,0x7b
|
|
||||||
@@ -705,23 +705,23 @@ Disassembly of section \.text:
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 aa 00 01 00 00 7b[ ]*vpextrw WORD PTR \[rdx\+0x100\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 6a 80 7b[ ]*vpextrw WORD PTR \[rdx-0x100\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 aa fe fe ff ff 7b[ ]*vpextrw WORD PTR \[rdx-0x102\],xmm29,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 ab[ ]*vpextrw rax,xmm30,0xab
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 7b[ ]*vpextrw rax,xmm30,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 11 fd 08 c5 c6 7b[ ]*vpextrw r8,xmm30,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 ab[ ]*vpinsrb xmm30,xmm29,rax,0xab
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 7b[ ]*vpinsrb xmm30,xmm29,rax,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f5 7b[ ]*vpinsrb xmm30,xmm29,rbp,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 43 95 00 20 f5 7b[ ]*vpinsrb xmm30,xmm29,r13,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 ab[ ]*vpextrw eax,xmm30,0xab
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 7b[ ]*vpextrw eax,xmm30,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 11 fd 08 c5 c6 7b[ ]*vpextrw r8d,xmm30,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 ab[ ]*vpinsrb xmm30,xmm29,eax,0xab
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 7b[ ]*vpinsrb xmm30,xmm29,eax,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f5 7b[ ]*vpinsrb xmm30,xmm29,ebp,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 43 95 00 20 f5 7b[ ]*vpinsrb xmm30,xmm29,r13d,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 31 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rcx\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 23 95 00 20 b4 f0 34 12 00 00 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rax\+r14\*8\+0x1234\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 72 7f 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rdx\+0x7f\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 b2 80 00 00 00 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rdx\+0x80\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 72 80 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rdx-0x80\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 b2 7f ff ff ff 7b[ ]*vpinsrb xmm30,xmm29,BYTE PTR \[rdx-0x81\],0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 ab[ ]*vpinsrw xmm30,xmm29,rax,0xab
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 7b[ ]*vpinsrw xmm30,xmm29,rax,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f5 7b[ ]*vpinsrw xmm30,xmm29,rbp,0x7b
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 41 95 00 c4 f5 7b[ ]*vpinsrw xmm30,xmm29,r13,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 ab[ ]*vpinsrw xmm30,xmm29,eax,0xab
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 7b[ ]*vpinsrw xmm30,xmm29,eax,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f5 7b[ ]*vpinsrw xmm30,xmm29,ebp,0x7b
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 41 95 00 c4 f5 7b[ ]*vpinsrw xmm30,xmm29,r13d,0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 31 7b[ ]*vpinsrw xmm30,xmm29,WORD PTR \[rcx\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 21 95 00 c4 b4 f0 34 12 00 00 7b[ ]*vpinsrw xmm30,xmm29,WORD PTR \[rax\+r14\*8\+0x1234\],0x7b
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 72 7f 7b[ ]*vpinsrw xmm30,xmm29,WORD PTR \[rdx\+0xfe\],0x7b
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-avx512bw-wig1.d b/gas/testsuite/gas/i386/x86-64-avx512bw-wig1.d
|
|
||||||
index f48e5e6ff85..d2687009a24 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-avx512bw-wig1.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-avx512bw-wig1.d
|
|
||||||
@@ -159,9 +159,9 @@ Disassembly of section \.text:
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 aa 00 20 00 00[ ]*vpcmpgtw 0x2000\(%rdx\),%zmm30,%k5
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 6a 80[ ]*vpcmpgtw -0x2000\(%rdx\),%zmm30,%k5
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 aa c0 df ff ff[ ]*vpcmpgtw -0x2040\(%rdx\),%zmm30,%k5
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 ab[ ]*vpextrb \$0xab,%xmm29,%rax
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 7b[ ]*vpextrb \$0x7b,%xmm29,%rax
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 43 fd 08 14 e8 7b[ ]*vpextrb \$0x7b,%xmm29,%r8
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 ab[ ]*vpextrb \$0xab,%xmm29,%eax
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 7b[ ]*vpextrb \$0x7b,%xmm29,%eax
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 43 fd 08 14 e8 7b[ ]*vpextrb \$0x7b,%xmm29,%r8d
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 29 7b[ ]*vpextrb \$0x7b,%xmm29,\(%rcx\)
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 23 fd 08 14 ac f0 23 01 00 00 7b[ ]*vpextrb \$0x7b,%xmm29,0x123\(%rax,%r14,8\)
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 6a 7f 7b[ ]*vpextrb \$0x7b,%xmm29,0x7f\(%rdx\)
|
|
||||||
@@ -174,23 +174,23 @@ Disassembly of section \.text:
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 aa 00 01 00 00 7b[ ]*vpextrw \$0x7b,%xmm29,0x100\(%rdx\)
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 6a 80 7b[ ]*vpextrw \$0x7b,%xmm29,-0x100\(%rdx\)
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 aa fe fe ff ff 7b[ ]*vpextrw \$0x7b,%xmm29,-0x102\(%rdx\)
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 ab[ ]*vpextrw \$0xab,%xmm30,%rax
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 7b[ ]*vpextrw \$0x7b,%xmm30,%rax
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 11 fd 08 c5 c6 7b[ ]*vpextrw \$0x7b,%xmm30,%r8
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 ab[ ]*vpinsrb \$0xab,%rax,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 7b[ ]*vpinsrb \$0x7b,%rax,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f5 7b[ ]*vpinsrb \$0x7b,%rbp,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 43 95 00 20 f5 7b[ ]*vpinsrb \$0x7b,%r13,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 ab[ ]*vpextrw \$0xab,%xmm30,%eax
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 7b[ ]*vpextrw \$0x7b,%xmm30,%eax
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 11 fd 08 c5 c6 7b[ ]*vpextrw \$0x7b,%xmm30,%r8d
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 ab[ ]*vpinsrb \$0xab,%eax,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 7b[ ]*vpinsrb \$0x7b,%eax,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f5 7b[ ]*vpinsrb \$0x7b,%ebp,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 43 95 00 20 f5 7b[ ]*vpinsrb \$0x7b,%r13d,%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 31 7b[ ]*vpinsrb \$0x7b,\(%rcx\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 23 95 00 20 b4 f0 23 01 00 00 7b[ ]*vpinsrb \$0x7b,0x123\(%rax,%r14,8\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 72 7f 7b[ ]*vpinsrb \$0x7b,0x7f\(%rdx\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 b2 80 00 00 00 7b[ ]*vpinsrb \$0x7b,0x80\(%rdx\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 72 80 7b[ ]*vpinsrb \$0x7b,-0x80\(%rdx\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 b2 7f ff ff ff 7b[ ]*vpinsrb \$0x7b,-0x81\(%rdx\),%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 ab[ ]*vpinsrw \$0xab,%rax,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 7b[ ]*vpinsrw \$0x7b,%rax,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f5 7b[ ]*vpinsrw \$0x7b,%rbp,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 41 95 00 c4 f5 7b[ ]*vpinsrw \$0x7b,%r13,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 ab[ ]*vpinsrw \$0xab,%eax,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 7b[ ]*vpinsrw \$0x7b,%eax,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f5 7b[ ]*vpinsrw \$0x7b,%ebp,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 41 95 00 c4 f5 7b[ ]*vpinsrw \$0x7b,%r13d,%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 31 7b[ ]*vpinsrw \$0x7b,\(%rcx\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 21 95 00 c4 b4 f0 23 01 00 00 7b[ ]*vpinsrw \$0x7b,0x123\(%rax,%r14,8\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 72 7f 7b[ ]*vpinsrw \$0x7b,0xfe\(%rdx\),%xmm29,%xmm30
|
|
||||||
@@ -690,9 +690,9 @@ Disassembly of section \.text:
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 aa 00 20 00 00[ ]*vpcmpgtw 0x2000\(%rdx\),%zmm30,%k5
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 6a 80[ ]*vpcmpgtw -0x2000\(%rdx\),%zmm30,%k5
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 f1 8d 40 65 aa c0 df ff ff[ ]*vpcmpgtw -0x2040\(%rdx\),%zmm30,%k5
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 ab[ ]*vpextrb \$0xab,%xmm29,%rax
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 7b[ ]*vpextrb \$0x7b,%xmm29,%rax
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 43 fd 08 14 e8 7b[ ]*vpextrb \$0x7b,%xmm29,%r8
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 ab[ ]*vpextrb \$0xab,%xmm29,%eax
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 e8 7b[ ]*vpextrb \$0x7b,%xmm29,%eax
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 43 fd 08 14 e8 7b[ ]*vpextrb \$0x7b,%xmm29,%r8d
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 29 7b[ ]*vpextrb \$0x7b,%xmm29,\(%rcx\)
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 23 fd 08 14 ac f0 34 12 00 00 7b[ ]*vpextrb \$0x7b,%xmm29,0x1234\(%rax,%r14,8\)
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 14 6a 7f 7b[ ]*vpextrb \$0x7b,%xmm29,0x7f\(%rdx\)
|
|
||||||
@@ -705,23 +705,23 @@ Disassembly of section \.text:
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 aa 00 01 00 00 7b[ ]*vpextrw \$0x7b,%xmm29,0x100\(%rdx\)
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 6a 80 7b[ ]*vpextrw \$0x7b,%xmm29,-0x100\(%rdx\)
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 fd 08 15 aa fe fe ff ff 7b[ ]*vpextrw \$0x7b,%xmm29,-0x102\(%rdx\)
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 ab[ ]*vpextrw \$0xab,%xmm30,%rax
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 7b[ ]*vpextrw \$0x7b,%xmm30,%rax
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 11 fd 08 c5 c6 7b[ ]*vpextrw \$0x7b,%xmm30,%r8
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 ab[ ]*vpinsrb \$0xab,%rax,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 7b[ ]*vpinsrb \$0x7b,%rax,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f5 7b[ ]*vpinsrb \$0x7b,%rbp,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 43 95 00 20 f5 7b[ ]*vpinsrb \$0x7b,%r13,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 ab[ ]*vpextrw \$0xab,%xmm30,%eax
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 91 fd 08 c5 c6 7b[ ]*vpextrw \$0x7b,%xmm30,%eax
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 11 fd 08 c5 c6 7b[ ]*vpextrw \$0x7b,%xmm30,%r8d
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 ab[ ]*vpinsrb \$0xab,%eax,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f0 7b[ ]*vpinsrb \$0x7b,%eax,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 f5 7b[ ]*vpinsrb \$0x7b,%ebp,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 43 95 00 20 f5 7b[ ]*vpinsrb \$0x7b,%r13d,%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 31 7b[ ]*vpinsrb \$0x7b,\(%rcx\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 23 95 00 20 b4 f0 34 12 00 00 7b[ ]*vpinsrb \$0x7b,0x1234\(%rax,%r14,8\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 72 7f 7b[ ]*vpinsrb \$0x7b,0x7f\(%rdx\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 b2 80 00 00 00 7b[ ]*vpinsrb \$0x7b,0x80\(%rdx\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 72 80 7b[ ]*vpinsrb \$0x7b,-0x80\(%rdx\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 63 95 00 20 b2 7f ff ff ff 7b[ ]*vpinsrb \$0x7b,-0x81\(%rdx\),%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 ab[ ]*vpinsrw \$0xab,%rax,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 7b[ ]*vpinsrw \$0x7b,%rax,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f5 7b[ ]*vpinsrw \$0x7b,%rbp,%xmm29,%xmm30
|
|
||||||
-[ ]*[a-f0-9]+:[ ]*62 41 95 00 c4 f5 7b[ ]*vpinsrw \$0x7b,%r13,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 ab[ ]*vpinsrw \$0xab,%eax,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f0 7b[ ]*vpinsrw \$0x7b,%eax,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 f5 7b[ ]*vpinsrw \$0x7b,%ebp,%xmm29,%xmm30
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 41 95 00 c4 f5 7b[ ]*vpinsrw \$0x7b,%r13d,%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 31 7b[ ]*vpinsrw \$0x7b,\(%rcx\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 21 95 00 c4 b4 f0 34 12 00 00 7b[ ]*vpinsrw \$0x7b,0x1234\(%rax,%r14,8\),%xmm29,%xmm30
|
|
||||||
[ ]*[a-f0-9]+:[ ]*62 61 95 00 c4 72 7f 7b[ ]*vpinsrw \$0x7b,0xfe\(%rdx\),%xmm29,%xmm30
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-evex-wig1-intel.d b/gas/testsuite/gas/i386/x86-64-evex-wig1-intel.d
|
|
||||||
index f6031f27968..e1abc7ecb35 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-evex-wig1-intel.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-evex-wig1-intel.d
|
|
||||||
@@ -9,23 +9,23 @@
|
|
||||||
Disassembly of section .text:
|
|
||||||
|
|
||||||
0+ <_start>:
|
|
||||||
-[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 ab vextractps rax,xmm29,0xab
|
|
||||||
-[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 7b vextractps rax,xmm29,0x7b
|
|
||||||
-[ ]*[a-f0-9]+: 62 43 fd 08 17 e8 7b vextractps r8,xmm29,0x7b
|
|
||||||
+[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 ab vextractps eax,xmm29,0xab
|
|
||||||
+[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 7b vextractps eax,xmm29,0x7b
|
|
||||||
+[ ]*[a-f0-9]+: 62 43 fd 08 17 e8 7b vextractps r8d,xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 29 7b vextractps DWORD PTR \[rcx\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+: 62 23 fd 08 17 ac f0 23 01 00 00 7b vextractps DWORD PTR \[rax\+r14\*8\+0x123\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 6a 7f 7b vextractps DWORD PTR \[rdx\+0x1fc\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 aa 00 02 00 00 7b vextractps DWORD PTR \[rdx\+0x200\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 6a 80 7b vextractps DWORD PTR \[rdx-0x200\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 aa fc fd ff ff 7b vextractps DWORD PTR \[rdx-0x204\],xmm29,0x7b
|
|
||||||
-[ ]*[a-f0-9]+: 62 f3 fd 08 14 c0 00 vpextrb rax,xmm0,0x0
|
|
||||||
+[ ]*[a-f0-9]+: 62 f3 fd 08 14 c0 00 vpextrb eax,xmm0,0x0
|
|
||||||
[ ]*[a-f0-9]+: 62 f3 fd 08 14 00 00 vpextrb BYTE PTR \[rax\],xmm0,0x0
|
|
||||||
-[ ]*[a-f0-9]+: 62 f1 fd 08 c5 c0 00 vpextrw rax,xmm0,0x0
|
|
||||||
-[ ]*[a-f0-9]+: 62 f3 fd 08 15 c0 00 vpextrw rax,xmm0,0x0
|
|
||||||
+[ ]*[a-f0-9]+: 62 f1 fd 08 c5 c0 00 vpextrw eax,xmm0,0x0
|
|
||||||
+[ ]*[a-f0-9]+: 62 f3 fd 08 15 c0 00 vpextrw eax,xmm0,0x0
|
|
||||||
[ ]*[a-f0-9]+: 62 f3 fd 08 15 00 00 vpextrw WORD PTR \[rax\],xmm0,0x0
|
|
||||||
-[ ]*[a-f0-9]+: 62 f3 fd 08 20 c0 00 vpinsrb xmm0,xmm0,rax,0x0
|
|
||||||
+[ ]*[a-f0-9]+: 62 f3 fd 08 20 c0 00 vpinsrb xmm0,xmm0,eax,0x0
|
|
||||||
[ ]*[a-f0-9]+: 62 f3 fd 08 20 00 00 vpinsrb xmm0,xmm0,BYTE PTR \[rax\],0x0
|
|
||||||
-[ ]*[a-f0-9]+: 62 f1 fd 08 c4 c0 00 vpinsrw xmm0,xmm0,rax,0x0
|
|
||||||
+[ ]*[a-f0-9]+: 62 f1 fd 08 c4 c0 00 vpinsrw xmm0,xmm0,eax,0x0
|
|
||||||
[ ]*[a-f0-9]+: 62 f1 fd 08 c4 00 00 vpinsrw xmm0,xmm0,WORD PTR \[rax\],0x0
|
|
||||||
[ ]*[a-f0-9]+: 62 02 fd 4f 21 f5 vpmovsxbd zmm30\{k7\},xmm29
|
|
||||||
[ ]*[a-f0-9]+: 62 02 fd cf 21 f5 vpmovsxbd zmm30\{k7\}\{z\},xmm29
|
|
||||||
@@ -91,9 +91,9 @@ Disassembly of section .text:
|
|
||||||
[ ]*[a-f0-9]+: 62 62 fd 4f 34 b2 00 08 00 00 vpmovzxwq zmm30\{k7\},XMMWORD PTR \[rdx\+0x800\]
|
|
||||||
[ ]*[a-f0-9]+: 62 62 fd 4f 34 72 80 vpmovzxwq zmm30\{k7\},XMMWORD PTR \[rdx-0x800\]
|
|
||||||
[ ]*[a-f0-9]+: 62 62 fd 4f 34 b2 f0 f7 ff ff vpmovzxwq zmm30\{k7\},XMMWORD PTR \[rdx-0x810\]
|
|
||||||
-[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 ab vextractps rax,xmm29,0xab
|
|
||||||
-[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 7b vextractps rax,xmm29,0x7b
|
|
||||||
-[ ]*[a-f0-9]+: 62 43 fd 08 17 e8 7b vextractps r8,xmm29,0x7b
|
|
||||||
+[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 ab vextractps eax,xmm29,0xab
|
|
||||||
+[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 7b vextractps eax,xmm29,0x7b
|
|
||||||
+[ ]*[a-f0-9]+: 62 43 fd 08 17 e8 7b vextractps r8d,xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 29 7b vextractps DWORD PTR \[rcx\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+: 62 23 fd 08 17 ac f0 34 12 00 00 7b vextractps DWORD PTR \[rax\+r14\*8\+0x1234\],xmm29,0x7b
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 6a 7f 7b vextractps DWORD PTR \[rdx\+0x1fc\],xmm29,0x7b
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-evex-wig1.d b/gas/testsuite/gas/i386/x86-64-evex-wig1.d
|
|
||||||
index 9c49f1c7105..e62e8f4405f 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-evex-wig1.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-evex-wig1.d
|
|
||||||
@@ -9,23 +9,23 @@
|
|
||||||
Disassembly of section .text:
|
|
||||||
|
|
||||||
0+ <_start>:
|
|
||||||
-[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 ab vextractps \$0xab,%xmm29,%rax
|
|
||||||
-[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 7b vextractps \$0x7b,%xmm29,%rax
|
|
||||||
-[ ]*[a-f0-9]+: 62 43 fd 08 17 e8 7b vextractps \$0x7b,%xmm29,%r8
|
|
||||||
+[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 ab vextractps \$0xab,%xmm29,%eax
|
|
||||||
+[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 7b vextractps \$0x7b,%xmm29,%eax
|
|
||||||
+[ ]*[a-f0-9]+: 62 43 fd 08 17 e8 7b vextractps \$0x7b,%xmm29,%r8d
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 29 7b vextractps \$0x7b,%xmm29,\(%rcx\)
|
|
||||||
[ ]*[a-f0-9]+: 62 23 fd 08 17 ac f0 23 01 00 00 7b vextractps \$0x7b,%xmm29,0x123\(%rax,%r14,8\)
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 6a 7f 7b vextractps \$0x7b,%xmm29,0x1fc\(%rdx\)
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 aa 00 02 00 00 7b vextractps \$0x7b,%xmm29,0x200\(%rdx\)
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 6a 80 7b vextractps \$0x7b,%xmm29,-0x200\(%rdx\)
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 aa fc fd ff ff 7b vextractps \$0x7b,%xmm29,-0x204\(%rdx\)
|
|
||||||
-[ ]*[a-f0-9]+: 62 f3 fd 08 14 c0 00 vpextrb \$0x0,%xmm0,%rax
|
|
||||||
+[ ]*[a-f0-9]+: 62 f3 fd 08 14 c0 00 vpextrb \$0x0,%xmm0,%eax
|
|
||||||
[ ]*[a-f0-9]+: 62 f3 fd 08 14 00 00 vpextrb \$0x0,%xmm0,\(%rax\)
|
|
||||||
-[ ]*[a-f0-9]+: 62 f1 fd 08 c5 c0 00 vpextrw \$0x0,%xmm0,%rax
|
|
||||||
-[ ]*[a-f0-9]+: 62 f3 fd 08 15 c0 00 vpextrw \$0x0,%xmm0,%rax
|
|
||||||
+[ ]*[a-f0-9]+: 62 f1 fd 08 c5 c0 00 vpextrw \$0x0,%xmm0,%eax
|
|
||||||
+[ ]*[a-f0-9]+: 62 f3 fd 08 15 c0 00 vpextrw \$0x0,%xmm0,%eax
|
|
||||||
[ ]*[a-f0-9]+: 62 f3 fd 08 15 00 00 vpextrw \$0x0,%xmm0,\(%rax\)
|
|
||||||
-[ ]*[a-f0-9]+: 62 f3 fd 08 20 c0 00 vpinsrb \$0x0,%rax,%xmm0,%xmm0
|
|
||||||
+[ ]*[a-f0-9]+: 62 f3 fd 08 20 c0 00 vpinsrb \$0x0,%eax,%xmm0,%xmm0
|
|
||||||
[ ]*[a-f0-9]+: 62 f3 fd 08 20 00 00 vpinsrb \$0x0,\(%rax\),%xmm0,%xmm0
|
|
||||||
-[ ]*[a-f0-9]+: 62 f1 fd 08 c4 c0 00 vpinsrw \$0x0,%rax,%xmm0,%xmm0
|
|
||||||
+[ ]*[a-f0-9]+: 62 f1 fd 08 c4 c0 00 vpinsrw \$0x0,%eax,%xmm0,%xmm0
|
|
||||||
[ ]*[a-f0-9]+: 62 f1 fd 08 c4 00 00 vpinsrw \$0x0,\(%rax\),%xmm0,%xmm0
|
|
||||||
[ ]*[a-f0-9]+: 62 02 fd 4f 21 f5 vpmovsxbd %xmm29,%zmm30\{%k7\}
|
|
||||||
[ ]*[a-f0-9]+: 62 02 fd cf 21 f5 vpmovsxbd %xmm29,%zmm30\{%k7\}\{z\}
|
|
||||||
@@ -91,9 +91,9 @@ Disassembly of section .text:
|
|
||||||
[ ]*[a-f0-9]+: 62 62 fd 4f 34 b2 00 08 00 00 vpmovzxwq 0x800\(%rdx\),%zmm30\{%k7\}
|
|
||||||
[ ]*[a-f0-9]+: 62 62 fd 4f 34 72 80 vpmovzxwq -0x800\(%rdx\),%zmm30\{%k7\}
|
|
||||||
[ ]*[a-f0-9]+: 62 62 fd 4f 34 b2 f0 f7 ff ff vpmovzxwq -0x810\(%rdx\),%zmm30\{%k7\}
|
|
||||||
-[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 ab vextractps \$0xab,%xmm29,%rax
|
|
||||||
-[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 7b vextractps \$0x7b,%xmm29,%rax
|
|
||||||
-[ ]*[a-f0-9]+: 62 43 fd 08 17 e8 7b vextractps \$0x7b,%xmm29,%r8
|
|
||||||
+[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 ab vextractps \$0xab,%xmm29,%eax
|
|
||||||
+[ ]*[a-f0-9]+: 62 63 fd 08 17 e8 7b vextractps \$0x7b,%xmm29,%eax
|
|
||||||
+[ ]*[a-f0-9]+: 62 43 fd 08 17 e8 7b vextractps \$0x7b,%xmm29,%r8d
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 29 7b vextractps \$0x7b,%xmm29,\(%rcx\)
|
|
||||||
[ ]*[a-f0-9]+: 62 23 fd 08 17 ac f0 34 12 00 00 7b vextractps \$0x7b,%xmm29,0x1234\(%rax,%r14,8\)
|
|
||||||
[ ]*[a-f0-9]+: 62 63 fd 08 17 6a 7f 7b vextractps \$0x7b,%xmm29,0x1fc\(%rdx\)
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 6efc15b851b..521d6899338 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -240,11 +240,8 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
|
|
||||||
#define EvS { OP_E, v_swap_mode }
|
|
||||||
#define Ed { OP_E, d_mode }
|
|
||||||
#define Edq { OP_E, dq_mode }
|
|
||||||
-#define Edqw { OP_E, dqw_mode }
|
|
||||||
-#define Edqb { OP_E, dqb_mode }
|
|
||||||
#define Edb { OP_E, db_mode }
|
|
||||||
#define Edw { OP_E, dw_mode }
|
|
||||||
-#define Edqd { OP_E, dqd_mode }
|
|
||||||
#define Eq { OP_E, q_mode }
|
|
||||||
#define indirEv { OP_indirE, indir_v_mode }
|
|
||||||
#define indirEp { OP_indirE, f_mode }
|
|
||||||
@@ -509,8 +506,7 @@ enum
|
|
||||||
v_bndmk_mode,
|
|
||||||
/* operand size depends on REX.W / VEX.W. */
|
|
||||||
dq_mode,
|
|
||||||
- /* registers like dq_mode, memory like w_mode, displacements like
|
|
||||||
- v_mode without considering Intel64 ISA. */
|
|
||||||
+ /* Displacements like v_mode without considering Intel64 ISA. */
|
|
||||||
dqw_mode,
|
|
||||||
/* bounds operand */
|
|
||||||
bnd_mode,
|
|
||||||
@@ -527,14 +523,10 @@ enum
|
|
||||||
z_mode,
|
|
||||||
/* 16-byte operand */
|
|
||||||
o_mode,
|
|
||||||
- /* registers like dq_mode, memory like b_mode. */
|
|
||||||
- dqb_mode,
|
|
||||||
/* registers like d_mode, memory like b_mode. */
|
|
||||||
db_mode,
|
|
||||||
/* registers like d_mode, memory like w_mode. */
|
|
||||||
dw_mode,
|
|
||||||
- /* registers like dq_mode, memory like d_mode. */
|
|
||||||
- dqd_mode,
|
|
||||||
|
|
||||||
/* Operand size depends on the VEX.W bit, with VSIB dword indices. */
|
|
||||||
vex_vsib_d_w_dq_mode,
|
|
||||||
@@ -2182,8 +2174,8 @@ static const struct dis386 dis386_twobyte[] = {
|
|
||||||
{ "xaddS", { Evh1, Gv }, 0 },
|
|
||||||
{ PREFIX_TABLE (PREFIX_0FC2) },
|
|
||||||
{ MOD_TABLE (MOD_0FC3) },
|
|
||||||
- { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
|
|
||||||
- { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
|
|
||||||
+ { "pinsrw", { MX, Edw, Ib }, PREFIX_OPCODE },
|
|
||||||
+ { "pextrw", { Gd, MS, Ib }, PREFIX_OPCODE },
|
|
||||||
{ "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
|
|
||||||
{ REG_TABLE (REG_0FC7) },
|
|
||||||
/* c8 */
|
|
||||||
@@ -4687,10 +4679,10 @@ static const struct dis386 three_byte_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "pextrb", { Edqb, XM, Ib }, PREFIX_DATA },
|
|
||||||
- { "pextrw", { Edqw, XM, Ib }, PREFIX_DATA },
|
|
||||||
+ { "pextrb", { Edb, XM, Ib }, PREFIX_DATA },
|
|
||||||
+ { "pextrw", { Edw, XM, Ib }, PREFIX_DATA },
|
|
||||||
{ "pextrK", { Edq, XM, Ib }, PREFIX_DATA },
|
|
||||||
- { "extractps", { Edqd, XM, Ib }, PREFIX_DATA },
|
|
||||||
+ { "extractps", { Ed, XM, Ib }, PREFIX_DATA },
|
|
||||||
/* 18 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -4701,7 +4693,7 @@ static const struct dis386 three_byte_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
/* 20 */
|
|
||||||
- { "pinsrb", { XM, Edqb, Ib }, PREFIX_DATA },
|
|
||||||
+ { "pinsrb", { XM, Edb, Ib }, PREFIX_DATA },
|
|
||||||
{ "insertps", { XM, EXd, Ib }, PREFIX_DATA },
|
|
||||||
{ "pinsrK", { XM, Edq, Ib }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -6850,12 +6842,12 @@ static const struct dis386 vex_len_table[][2] = {
|
|
||||||
|
|
||||||
/* VEX_LEN_0FC4 */
|
|
||||||
{
|
|
||||||
- { "vpinsrw", { XM, Vex, Edqw, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vpinsrw", { XM, Vex, Edw, Ib }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* VEX_LEN_0FC5 */
|
|
||||||
{
|
|
||||||
- { "vpextrw", { Gdq, XS, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vpextrw", { Gd, XS, Ib }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* VEX_LEN_0FD6 */
|
|
||||||
@@ -7012,12 +7004,12 @@ static const struct dis386 vex_len_table[][2] = {
|
|
||||||
|
|
||||||
/* VEX_LEN_0F3A14 */
|
|
||||||
{
|
|
||||||
- { "vpextrb", { Edqb, XM, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vpextrb", { Edb, XM, Ib }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* VEX_LEN_0F3A15 */
|
|
||||||
{
|
|
||||||
- { "vpextrw", { Edqw, XM, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vpextrw", { Edw, XM, Ib }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* VEX_LEN_0F3A16 */
|
|
||||||
@@ -7027,7 +7019,7 @@ static const struct dis386 vex_len_table[][2] = {
|
|
||||||
|
|
||||||
/* VEX_LEN_0F3A17 */
|
|
||||||
{
|
|
||||||
- { "vextractps", { Edqd, XM, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vextractps", { Ed, XM, Ib }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* VEX_LEN_0F3A18 */
|
|
||||||
@@ -7044,7 +7036,7 @@ static const struct dis386 vex_len_table[][2] = {
|
|
||||||
|
|
||||||
/* VEX_LEN_0F3A20 */
|
|
||||||
{
|
|
||||||
- { "vpinsrb", { XM, Vex, Edqb, Ib }, PREFIX_DATA },
|
|
||||||
+ { "vpinsrb", { XM, Vex, Edb, Ib }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
|
|
||||||
/* VEX_LEN_0F3A21 */
|
|
||||||
@@ -10957,13 +10949,11 @@ intel_operand_size (int bytemode, int sizeflag)
|
|
||||||
{
|
|
||||||
case b_mode:
|
|
||||||
case b_swap_mode:
|
|
||||||
- case dqb_mode:
|
|
||||||
case db_mode:
|
|
||||||
oappend ("BYTE PTR ");
|
|
||||||
break;
|
|
||||||
case w_mode:
|
|
||||||
case dw_mode:
|
|
||||||
- case dqw_mode:
|
|
||||||
oappend ("WORD PTR ");
|
|
||||||
break;
|
|
||||||
case indir_v_mode:
|
|
||||||
@@ -11020,7 +11010,6 @@ intel_operand_size (int bytemode, int sizeflag)
|
|
||||||
break;
|
|
||||||
case d_mode:
|
|
||||||
case d_swap_mode:
|
|
||||||
- case dqd_mode:
|
|
||||||
oappend ("DWORD PTR ");
|
|
||||||
break;
|
|
||||||
case q_mode:
|
|
||||||
@@ -11263,9 +11252,6 @@ print_register (unsigned int reg, unsigned int rexmask, int bytemode, int sizefl
|
|
||||||
case v_mode:
|
|
||||||
case v_swap_mode:
|
|
||||||
case dq_mode:
|
|
||||||
- case dqb_mode:
|
|
||||||
- case dqd_mode:
|
|
||||||
- case dqw_mode:
|
|
||||||
USED_REX (REX_W);
|
|
||||||
if (rex & REX_W)
|
|
||||||
names = names64;
|
|
||||||
@@ -11340,12 +11326,10 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
}
|
|
||||||
switch (bytemode)
|
|
||||||
{
|
|
||||||
- case dqw_mode:
|
|
||||||
case dw_mode:
|
|
||||||
case w_mode:
|
|
||||||
shift = 1;
|
|
||||||
break;
|
|
||||||
- case dqb_mode:
|
|
||||||
case db_mode:
|
|
||||||
case b_mode:
|
|
||||||
shift = 0;
|
|
||||||
@@ -11353,7 +11337,6 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
case dq_mode:
|
|
||||||
if (address_mode != mode_64bit)
|
|
||||||
{
|
|
||||||
- case dqd_mode:
|
|
||||||
case d_mode:
|
|
||||||
case d_swap_mode:
|
|
||||||
shift = 2;
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,304 +0,0 @@
|
|||||||
From 0e4cc77316732e67cff33e493eff2aa7feed4587 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Fri, 23 Jul 2021 08:03:21 +0200
|
|
||||||
Subject: [PATCH] x86: express unduly set rounding control bits in disassembly
|
|
||||||
|
|
||||||
While EVEX.L'L are indeed ignored when EVEX.b stands for just SAE,
|
|
||||||
EVEX.b itself is not ignored when an insn permits neither rounding
|
|
||||||
control nor SAE.
|
|
||||||
|
|
||||||
While changing this aspect of EVEX.b handling, also alter unduly set
|
|
||||||
embedded broadcast: Don't call BadOp(), screwing up subsequent
|
|
||||||
disassembly, but emit "{bad}" instead.
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/avx512f-nondef.d b/gas/testsuite/gas/i386/avx512f-nondef.d
|
|
||||||
index f19edceb6bb..07ffe60e177 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/avx512f-nondef.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/avx512f-nondef.d
|
|
||||||
@@ -10,12 +10,11 @@ Disassembly of section .text:
|
|
||||||
0+ <.text>:
|
|
||||||
[ ]*[a-f0-9]+: 62 f3 d5 1f 0b f4 7b vrndscalesd \$0x7b,\{sae\},%xmm4,%xmm5,%xmm6\{%k7\}
|
|
||||||
[ ]*[a-f0-9]+: 62 f3 d5 5f 0b f4 7b vrndscalesd \$0x7b,\{sae\},%xmm4,%xmm5,%xmm6\{%k7\}
|
|
||||||
-[ ]*[a-f0-9]+: 62 f2 55 1f 3b f4 vpminud %zmm4,%zmm5,%zmm6\{%k7\}
|
|
||||||
-[ ]*[a-f0-9]+: 62 c2 55 1f 3b f4 vpminud %zmm4,%zmm5,%zmm6\{%k7\}
|
|
||||||
+[ ]*[a-f0-9]+: 62 f2 55 4f 3b f4 vpminud %zmm4,%zmm5,%zmm6\{%k7\}
|
|
||||||
+[ ]*[a-f0-9]+: 62 c2 55 4f 3b f4 vpminud %zmm4,%zmm5,%zmm6\{%k7\}
|
|
||||||
+[ ]*[a-f0-9]+: 62 f2 55 1f 3b f4 vpminud \{rn-bad\},%zmm4,%zmm5,%zmm6\{%k7\}
|
|
||||||
[ ]*[a-f0-9]+: 62 f2 7e 48 31 72 7f vpmovdb %zmm6,0x7f0\(%edx\)
|
|
||||||
-[ ]*[a-f0-9]+: 62 vpmovdb %zmm6,\(bad\)
|
|
||||||
-[ ]*[a-f0-9]+: f2 7e 58 bnd jle (0x7d|7d <.text\+0x7d>)
|
|
||||||
-[ ]*[a-f0-9]+: 31 72 7f xor %esi,0x7f\(%edx\)
|
|
||||||
+[ ]*[a-f0-9]+: 62 f2 7e 58 31 72 7f vpmovdb %zmm6,0x7f0\(%edx\)\{bad\}
|
|
||||||
[ ]*[a-f0-9]+: 62 f1 7c 88 58 \(bad\)
|
|
||||||
[ ]*[a-f0-9]+: c3 ret *
|
|
||||||
[ ]*[a-f0-9]+: 62 f2 7d 4f 92 01 vgatherdps \(bad\),%zmm0\{%k7\}
|
|
||||||
diff --git a/gas/testsuite/gas/i386/avx512f-nondef.s b/gas/testsuite/gas/i386/avx512f-nondef.s
|
|
||||||
index 676c4e0fe4b..96d04666248 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/avx512f-nondef.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/avx512f-nondef.s
|
|
||||||
@@ -5,13 +5,15 @@
|
|
||||||
.byte 0x62, 0xf3, 0xd5, 0x1f, 0x0b, 0xf4, 0x7b
|
|
||||||
# vrndscalesd {sae}, $123, %xmm4, %xmm5, %xmm6{%k7} # with not-null RC
|
|
||||||
.byte 0x62, 0xf3, 0xd5, 0x5f, 0x0b, 0xf4, 0x7b
|
|
||||||
-# vpminud %zmm4, %zmm5, %zmm6{%k7} # with 111 REX
|
|
||||||
+# vpminud %zmm4, %zmm5, %zmm6{%k7} # with 11 EVEX.{B,R'}
|
|
||||||
+.byte 0x62, 0xf2, 0x55, 0x4f, 0x3b, 0xf4
|
|
||||||
+# vpminud %zmm4, %zmm5, %zmm6{%k7} # with not-11 EVEX.{B,R'}
|
|
||||||
+.byte 0x62, 0xc2, 0x55, 0x4f, 0x3b, 0xf4
|
|
||||||
+# vpminud %zmm4, %zmm5, %zmm6{%k7} # with set EVEX.b bit
|
|
||||||
.byte 0x62, 0xf2, 0x55, 0x1f, 0x3b, 0xf4
|
|
||||||
-# vpminud %zmm4, %zmm5, %zmm6{%k7} # with not-111 REX
|
|
||||||
-.byte 0x62, 0xc2, 0x55, 0x1f, 0x3b, 0xf4
|
|
||||||
-# vpmovdb %zmm6, 2032(%rdx) # with unset EVEX.B bit
|
|
||||||
+# vpmovdb %zmm6, 2032(%rdx) # with unset EVEX.b bit
|
|
||||||
.byte 0x62, 0xf2, 0x7e, 0x48, 0x31, 0x72, 0x7f
|
|
||||||
-# vpmovdb %zmm6, 2032(%rdx) # with set EVEX.B bit - we should get (bad) operand
|
|
||||||
+# vpmovdb %zmm6, 2032(%rdx) # with set EVEX.b bit - we should get (bad) operand
|
|
||||||
.byte 0x62, 0xf2, 0x7e, 0x58, 0x31, 0x72, 0x7f
|
|
||||||
# vaddps xmm0, xmm0, xmm3 # with EVEX.z set
|
|
||||||
.byte 0x62, 0xf1, 0x7c, 0x88, 0x58, 0xc3
|
|
||||||
diff --git a/gas/testsuite/gas/i386/evex.d b/gas/testsuite/gas/i386/evex.d
|
|
||||||
index 367b2eb1321..4afcc6db728 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/evex.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/evex.d
|
|
||||||
@@ -8,14 +8,14 @@ Disassembly of section .text:
|
|
||||||
|
|
||||||
0+ <_start>:
|
|
||||||
+[a-f0-9]+: 62 f1 d6 38 2a f0 vcvtsi2ssl %eax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
- +[a-f0-9]+: 62 f1 57 38 2a f0 vcvtsi2sdl %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
- +[a-f0-9]+: 62 f1 d7 38 2a f0 vcvtsi2sdl %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 57 38 2a f0 vcvtsi2sdl %eax,\{rd-bad\},%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 d7 38 2a f0 vcvtsi2sdl %eax,\{rd-bad\},%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d6 08 7b f0 vcvtusi2ssl %eax,%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 57 08 7b f0 vcvtusi2sdl %eax,%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d7 08 7b f0 vcvtusi2sdl %eax,%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d6 38 7b f0 vcvtusi2ssl %eax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
- +[a-f0-9]+: 62 f1 57 38 7b f0 vcvtusi2sdl %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
- +[a-f0-9]+: 62 f1 d7 38 7b f0 vcvtusi2sdl %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 57 38 7b f0 vcvtusi2sdl %eax,\{rd-bad\},%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 d7 38 7b f0 vcvtusi2sdl %eax,\{rd-bad\},%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 e1 7e 08 2d c0 vcvtss2si %xmm0,%eax
|
|
||||||
+[a-f0-9]+: 62 e1 7c 08 c2 c0 00 vcmpeqps %xmm0,%xmm0,%k0
|
|
||||||
#pass
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-avx512f-nondef.d b/gas/testsuite/gas/i386/x86-64-avx512f-nondef.d
|
|
||||||
index bce2d80588d..e8ddfd58870 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-avx512f-nondef.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-avx512f-nondef.d
|
|
||||||
@@ -10,10 +10,9 @@ Disassembly of section .text:
|
|
||||||
0+ <.text>:
|
|
||||||
[ ]*[a-f0-9]+: 62 f3 d5 1f 0b f4 7b vrndscalesd \$0x7b,\{sae\},%xmm4,%xmm5,%xmm6\{%k7\}
|
|
||||||
[ ]*[a-f0-9]+: 62 f3 d5 5f 0b f4 7b vrndscalesd \$0x7b,\{sae\},%xmm4,%xmm5,%xmm6\{%k7\}
|
|
||||||
-[ ]*[a-f0-9]+: 62 f2 55 1f 3b f4 vpminud %zmm4,%zmm5,%zmm6\{%k7\}
|
|
||||||
-[ ]*[a-f0-9]+: 62 c2 55 1f 3b f4 vpminud %zmm12,%zmm5,%zmm22\{%k7\}
|
|
||||||
+[ ]*[a-f0-9]+: 62 f2 55 4f 3b f4 vpminud %zmm4,%zmm5,%zmm6\{%k7\}
|
|
||||||
+[ ]*[a-f0-9]+: 62 c2 55 4f 3b f4 vpminud %zmm12,%zmm5,%zmm22\{%k7\}
|
|
||||||
+[ ]*[a-f0-9]+: 62 f2 55 1f 3b f4 vpminud \{rn-bad\},%zmm4,%zmm5,%zmm6\{%k7\}
|
|
||||||
[ ]*[a-f0-9]+: 62 f2 7e 48 31 72 7f vpmovdb %zmm6,0x7f0\(%rdx\)
|
|
||||||
-[ ]*[a-f0-9]+: 62 vpmovdb %zmm6,\(bad\)
|
|
||||||
-[ ]*[a-f0-9]+: f2 7e 58 bnd jle (0x7d|7d <.text\+0x7d>)
|
|
||||||
-[ ]*[a-f0-9]+: 31 72 7f xor %esi,0x7f\(%rdx\)
|
|
||||||
+[ ]*[a-f0-9]+: 62 f2 7e 58 31 72 7f vpmovdb %zmm6,0x7f0\(%rdx\)\{bad\}
|
|
||||||
#pass
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-avx512f-nondef.s b/gas/testsuite/gas/i386/x86-64-avx512f-nondef.s
|
|
||||||
index 255d2c931f1..952f2db76b3 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-avx512f-nondef.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-avx512f-nondef.s
|
|
||||||
@@ -5,11 +5,13 @@
|
|
||||||
.byte 0x62, 0xf3, 0xd5, 0x1f, 0x0b, 0xf4, 0x7b
|
|
||||||
# vrndscalesd {sae}, $123, %xmm4, %xmm5, %xmm6{%k7} # with not-null RC
|
|
||||||
.byte 0x62, 0xf3, 0xd5, 0x5f, 0x0b, 0xf4, 0x7b
|
|
||||||
-# vpminud %zmm4, %zmm5, %zmm6{%k7} # with 111 REX
|
|
||||||
+# vpminud %zmm4, %zmm5, %zmm6{%k7} # with 11 EVEX.{B,R'}
|
|
||||||
+.byte 0x62, 0xf2, 0x55, 0x4f, 0x3b, 0xf4
|
|
||||||
+# vpminud %zmm4, %zmm5, %zmm6{%k7} # with not-11 EVEX.{B,R'}
|
|
||||||
+.byte 0x62, 0xc2, 0x55, 0x4f, 0x3b, 0xf4
|
|
||||||
+# vpminud %zmm4, %zmm5, %zmm6{%k7} # with set EVEX.b bit
|
|
||||||
.byte 0x62, 0xf2, 0x55, 0x1f, 0x3b, 0xf4
|
|
||||||
-# vpminud %zmm4, %zmm5, %zmm6{%k7} # with not-111 REX
|
|
||||||
-.byte 0x62, 0xc2, 0x55, 0x1f, 0x3b, 0xf4
|
|
||||||
-# vpmovdb %zmm6, 2032(%rdx) # with unset EVEX.B bit
|
|
||||||
+# vpmovdb %zmm6, 2032(%rdx) # with unset EVEX.b bit
|
|
||||||
.byte 0x62, 0xf2, 0x7e, 0x48, 0x31, 0x72, 0x7f
|
|
||||||
-# vpmovdb %zmm6, 2032(%rdx) # with set EVEX.B bit - we should get (bad) operand
|
|
||||||
+# vpmovdb %zmm6, 2032(%rdx) # with set EVEX.b bit - we should get (bad) operand
|
|
||||||
.byte 0x62, 0xf2, 0x7e, 0x58, 0x31, 0x72, 0x7f
|
|
||||||
diff --git a/gas/testsuite/gas/i386/x86-64-evex.d b/gas/testsuite/gas/i386/x86-64-evex.d
|
|
||||||
index 3a7b48e0bf9..041747db892 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/x86-64-evex.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/x86-64-evex.d
|
|
||||||
@@ -9,13 +9,13 @@ Disassembly of section .text:
|
|
||||||
|
|
||||||
0+ <_start>:
|
|
||||||
+[a-f0-9]+: 62 f1 d6 38 2a f0 vcvtsi2ss %rax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
- +[a-f0-9]+: 62 f1 57 38 2a f0 vcvtsi2sd %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 57 38 2a f0 vcvtsi2sd %eax,\{rd-bad\},%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d7 38 2a f0 vcvtsi2sd %rax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d6 08 7b f0 vcvtusi2ss %rax,%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 57 08 7b f0 vcvtusi2sd %eax,%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d7 08 7b f0 vcvtusi2sd %rax,%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d6 38 7b f0 vcvtusi2ss %rax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
- +[a-f0-9]+: 62 f1 57 38 7b f0 vcvtusi2sd %eax,\(bad\),%xmm5,%xmm6
|
|
||||||
+ +[a-f0-9]+: 62 f1 57 38 7b f0 vcvtusi2sd %eax,\{rd-bad\},%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 f1 d7 38 7b f0 vcvtusi2sd %rax,\{rd-sae\},%xmm5,%xmm6
|
|
||||||
+[a-f0-9]+: 62 e1 7e 08 2d c0 vcvtss2si %xmm0,\(bad\)
|
|
||||||
+[a-f0-9]+: 62 e1 7c 08 c2 c0 00 vcmpeqps %xmm0,%xmm0,\(bad\)
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 521d6899338..b25a9f324c0 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -159,6 +159,11 @@ static int rex_used;
|
|
||||||
current instruction. */
|
|
||||||
static int used_prefixes;
|
|
||||||
|
|
||||||
+/* Flags for EVEX bits which we somehow handled when printing the
|
|
||||||
+ current instruction. */
|
|
||||||
+#define EVEX_b_used 1
|
|
||||||
+static int evex_used;
|
|
||||||
+
|
|
||||||
/* Flags stored in PREFIXES. */
|
|
||||||
#define PREFIX_REPZ 1
|
|
||||||
#define PREFIX_REPNZ 2
|
|
||||||
@@ -2524,12 +2529,12 @@ static const char *att_names_mask[] = {
|
|
||||||
"%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
|
|
||||||
};
|
|
||||||
|
|
||||||
-static const char *names_rounding[] =
|
|
||||||
+static const char *const names_rounding[] =
|
|
||||||
{
|
|
||||||
- "{rn-sae}",
|
|
||||||
- "{rd-sae}",
|
|
||||||
- "{ru-sae}",
|
|
||||||
- "{rz-sae}"
|
|
||||||
+ "{rn-",
|
|
||||||
+ "{rd-",
|
|
||||||
+ "{ru-",
|
|
||||||
+ "{rz-"
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct dis386 reg_table[][8] = {
|
|
||||||
@@ -8578,6 +8583,7 @@ ckprefix (void)
|
|
||||||
prefixes = 0;
|
|
||||||
used_prefixes = 0;
|
|
||||||
rex_used = 0;
|
|
||||||
+ evex_used = 0;
|
|
||||||
last_lock_prefix = -1;
|
|
||||||
last_repz_prefix = -1;
|
|
||||||
last_repnz_prefix = -1;
|
|
||||||
@@ -9661,6 +9667,21 @@ print_insn (bfd_vma pc, disassemble_info *info)
|
|
||||||
oappend ("/(bad)");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ /* Check whether rounding control was enabled for an insn not
|
|
||||||
+ supporting it. */
|
|
||||||
+ if (modrm.mod == 3 && vex.b && !(evex_used & EVEX_b_used))
|
|
||||||
+ {
|
|
||||||
+ for (i = 0; i < MAX_OPERANDS; ++i)
|
|
||||||
+ {
|
|
||||||
+ obufp = op_out[i];
|
|
||||||
+ if (*obufp)
|
|
||||||
+ continue;
|
|
||||||
+ oappend (names_rounding[vex.ll]);
|
|
||||||
+ oappend ("bad}");
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -11316,14 +11337,6 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
|
|
||||||
if (vex.evex)
|
|
||||||
{
|
|
||||||
- /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
|
|
||||||
- if (vex.b
|
|
||||||
- && bytemode != x_mode
|
|
||||||
- && bytemode != evex_half_bcst_xmmq_mode)
|
|
||||||
- {
|
|
||||||
- BadOp ();
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
switch (bytemode)
|
|
||||||
{
|
|
||||||
case dw_mode:
|
|
||||||
@@ -11764,10 +11777,9 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
oappend (scratchbuf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- if (vex.b
|
|
||||||
- && (bytemode == x_mode
|
|
||||||
- || bytemode == evex_half_bcst_xmmq_mode))
|
|
||||||
+ if (vex.b)
|
|
||||||
{
|
|
||||||
+ evex_used |= EVEX_b_used;
|
|
||||||
if (vex.w
|
|
||||||
|| bytemode == evex_half_bcst_xmmq_mode)
|
|
||||||
{
|
|
||||||
@@ -11786,7 +11798,7 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
abort ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- else
|
|
||||||
+ else if (bytemode == x_mode)
|
|
||||||
{
|
|
||||||
switch (vex.length)
|
|
||||||
{
|
|
||||||
@@ -11803,6 +11815,9 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
abort ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ else
|
|
||||||
+ /* If operand doesn't allow broadcast, vex.b should be 0. */
|
|
||||||
+ oappend ("{bad}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -13495,24 +13510,25 @@ MOVSXD_Fixup (int bytemode, int sizeflag)
|
|
||||||
static void
|
|
||||||
OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
- if (modrm.mod == 3 && vex.b)
|
|
||||||
- switch (bytemode)
|
|
||||||
- {
|
|
||||||
- case evex_rounding_64_mode:
|
|
||||||
- if (address_mode != mode_64bit || !vex.w)
|
|
||||||
- {
|
|
||||||
- oappend ("(bad)");
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
- /* Fall through. */
|
|
||||||
- case evex_rounding_mode:
|
|
||||||
- oappend (names_rounding[vex.ll]);
|
|
||||||
- break;
|
|
||||||
- case evex_sae_mode:
|
|
||||||
- oappend ("{sae}");
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
+ if (modrm.mod != 3 || !vex.b)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ switch (bytemode)
|
|
||||||
+ {
|
|
||||||
+ case evex_rounding_64_mode:
|
|
||||||
+ if (address_mode != mode_64bit || !vex.w)
|
|
||||||
+ return;
|
|
||||||
+ /* Fall through. */
|
|
||||||
+ case evex_rounding_mode:
|
|
||||||
+ evex_used |= EVEX_b_used;
|
|
||||||
+ oappend (names_rounding[vex.ll]);
|
|
||||||
+ break;
|
|
||||||
+ case evex_sae_mode:
|
|
||||||
+ evex_used |= EVEX_b_used;
|
|
||||||
+ oappend ("{");
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ abort ();
|
|
||||||
+ }
|
|
||||||
+ oappend ("sae}");
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,52 +0,0 @@
|
|||||||
From fc141319027485a7cfcbae2451b048ddc6c33b48 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
||||||
Date: Wed, 28 Jul 2021 10:42:47 -0700
|
|
||||||
Subject: [PATCH] x86: Simplify check for distinct TMM register operands
|
|
||||||
|
|
||||||
If any pair of operands in AMX instructions with 3 TMM register operands
|
|
||||||
are the same, the instruction will UD. Don't call register_number to
|
|
||||||
check for distinct TMM register operands since all TMM register operands
|
|
||||||
have the same size.
|
|
||||||
|
|
||||||
* config/tc-i386.c (check_VecOperands): Remove register_number
|
|
||||||
call when checking for distinct TMM register operands.
|
|
||||||
|
|
||||||
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
|
|
||||||
index d98c6c4e949..1235c3e7733 100644
|
|
||||||
--- a/gas/config/tc-i386.c
|
|
||||||
+++ b/gas/config/tc-i386.c
|
|
||||||
@@ -6076,21 +6076,16 @@ check_VecOperands (const insn_template *t)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* For AMX instructions with three tmmword operands, all tmmword operand must be
|
|
||||||
- distinct */
|
|
||||||
- if (t->operand_types[0].bitfield.tmmword
|
|
||||||
- && i.reg_operands == 3)
|
|
||||||
- {
|
|
||||||
- if (register_number (i.op[0].regs)
|
|
||||||
- == register_number (i.op[1].regs)
|
|
||||||
- || register_number (i.op[0].regs)
|
|
||||||
- == register_number (i.op[2].regs)
|
|
||||||
- || register_number (i.op[1].regs)
|
|
||||||
- == register_number (i.op[2].regs))
|
|
||||||
- {
|
|
||||||
- i.error = invalid_tmm_register_set;
|
|
||||||
- return 1;
|
|
||||||
- }
|
|
||||||
+ /* For AMX instructions with 3 TMM register operands, all operands
|
|
||||||
+ must be distinct. */
|
|
||||||
+ if (i.reg_operands == 3
|
|
||||||
+ && t->operand_types[0].bitfield.tmmword
|
|
||||||
+ && (i.op[0].regs == i.op[1].regs
|
|
||||||
+ || i.op[0].regs == i.op[2].regs
|
|
||||||
+ || i.op[1].regs == i.op[2].regs))
|
|
||||||
+ {
|
|
||||||
+ i.error = invalid_tmm_register_set;
|
|
||||||
+ return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check if broadcast is supported by the instruction and is applied
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,204 +0,0 @@
|
|||||||
From e2295dade838ad296e1e1cd1096177058139b6b3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Wed, 11 Aug 2021 08:30:26 +0200
|
|
||||||
Subject: [PATCH] x86/ELF: fix .tfloat output
|
|
||||||
|
|
||||||
The ELF psABI-s are quite clear here: On 32-bit the data type is 12
|
|
||||||
bytes long (with 2 bytes of trailing padding), while on 64-bit it is 16
|
|
||||||
bytes long (with 6 bytes of padding). Make ieee_md_atof() capable of
|
|
||||||
handling such padding, and specify the needed padding for x86 (leaving
|
|
||||||
non-ELF targets alone for now). Split the existing x86 testcase.
|
|
||||||
|
|
||||||
diff --git a/gas/config/atof-ieee.c b/gas/config/atof-ieee.c
|
|
||||||
index fa988aa36ee..e6e8879b51b 100644
|
|
||||||
--- a/gas/config/atof-ieee.c
|
|
||||||
+++ b/gas/config/atof-ieee.c
|
|
||||||
@@ -30,7 +30,13 @@ extern FLONUM_TYPE generic_floating_point_number;
|
|
||||||
#define F_PRECISION 2
|
|
||||||
#define D_PRECISION 4
|
|
||||||
#define X_PRECISION 5
|
|
||||||
+#ifndef X_PRECISION_PAD
|
|
||||||
+#define X_PRECISION_PAD 0
|
|
||||||
+#endif
|
|
||||||
#define P_PRECISION 5
|
|
||||||
+#ifndef P_PRECISION_PAD
|
|
||||||
+#define P_PRECISION_PAD X_PRECISION_PAD
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* Length in LittleNums of guard bits. */
|
|
||||||
#define GUARD 2
|
|
||||||
@@ -760,7 +766,7 @@ ieee_md_atof (int type,
|
|
||||||
LITTLENUM_TYPE words[MAX_LITTLENUMS];
|
|
||||||
LITTLENUM_TYPE *wordP;
|
|
||||||
char *t;
|
|
||||||
- int prec = 0;
|
|
||||||
+ int prec = 0, pad = 0;
|
|
||||||
|
|
||||||
if (strchr (FLT_CHARS, type) != NULL)
|
|
||||||
{
|
|
||||||
@@ -788,6 +794,7 @@ ieee_md_atof (int type,
|
|
||||||
case 't':
|
|
||||||
case 'T':
|
|
||||||
prec = X_PRECISION;
|
|
||||||
+ pad = X_PRECISION_PAD;
|
|
||||||
type = 'x'; /* This is what atof_ieee() understands. */
|
|
||||||
break;
|
|
||||||
|
|
||||||
@@ -803,6 +810,7 @@ ieee_md_atof (int type,
|
|
||||||
#else
|
|
||||||
prec = P_PRECISION;
|
|
||||||
#endif
|
|
||||||
+ pad = P_PRECISION_PAD;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
@@ -835,7 +843,7 @@ ieee_md_atof (int type,
|
|
||||||
if (t)
|
|
||||||
input_line_pointer = t;
|
|
||||||
|
|
||||||
- *sizeP = prec * sizeof (LITTLENUM_TYPE);
|
|
||||||
+ *sizeP = (prec + pad) * sizeof (LITTLENUM_TYPE);
|
|
||||||
|
|
||||||
if (big_wordian)
|
|
||||||
{
|
|
||||||
@@ -854,5 +862,8 @@ ieee_md_atof (int type,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ memset (litP, 0, pad * sizeof (LITTLENUM_TYPE));
|
|
||||||
+ litP += pad * sizeof (LITTLENUM_TYPE);
|
|
||||||
+
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
|
|
||||||
index cdc660f79a4..0fa8b0d5a04 100644
|
|
||||||
--- a/gas/config/tc-i386.c
|
|
||||||
+++ b/gas/config/tc-i386.c
|
|
||||||
@@ -10229,6 +10229,19 @@ x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
|
|
||||||
fix_new_exp (frag, off, len, exp, 0, r);
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Return the number of padding LITTLENUMs following a tbyte floating
|
|
||||||
+ point value. */
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+x86_tfloat_pad (void)
|
|
||||||
+{
|
|
||||||
+#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
|
|
||||||
+ if (IS_ELF)
|
|
||||||
+ return object_64bit ? 3 : 1;
|
|
||||||
+#endif
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* Export the ABI address size for use by TC_ADDRESS_BYTES for the
|
|
||||||
purpose of the `.dc.a' internal pseudo-op. */
|
|
||||||
|
|
||||||
diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h
|
|
||||||
index 90d23da7d91..f94226edf78 100644
|
|
||||||
--- a/gas/config/tc-i386.h
|
|
||||||
+++ b/gas/config/tc-i386.h
|
|
||||||
@@ -134,6 +134,9 @@ extern bfd_reloc_code_real_type x86_cons (expressionS *, int);
|
|
||||||
extern void x86_cons_fix_new
|
|
||||||
(fragS *, unsigned int, unsigned int, expressionS *, bfd_reloc_code_real_type);
|
|
||||||
|
|
||||||
+#define X_PRECISION_PAD x86_tfloat_pad ()
|
|
||||||
+extern int x86_tfloat_pad (void);
|
|
||||||
+
|
|
||||||
#define TC_ADDRESS_BYTES x86_address_bytes
|
|
||||||
extern int x86_address_bytes (void);
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp-elf32.d b/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..6ef9c83ac54
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
@@ -0,0 +1,12 @@
|
|
||||||
+#objdump: -s -j .data
|
|
||||||
+#name: i386 fp (ELF)
|
|
||||||
+#source: fp.s
|
|
||||||
+
|
|
||||||
+.*: file format .*
|
|
||||||
+
|
|
||||||
+Contents of section .data:
|
|
||||||
+ 0000 00881bcd 4b789ad4 00400000 71a37909 .*
|
|
||||||
+ 0010 4f930a40 789a5440 789a5440 00000000 .*
|
|
||||||
+ 0020 e65e1710 20395e3b e65e1710 20395e3b .*
|
|
||||||
+ 0030 00000000 0000a044 01000000 0000a044 .*
|
|
||||||
+ 0040 00000000 0000f03f .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp-elf64.d b/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..2e68ac8ebca
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
@@ -0,0 +1,12 @@
|
|
||||||
+#objdump: -s -j .data
|
|
||||||
+#name: x86-64 fp (ELF)
|
|
||||||
+#source: fp.s
|
|
||||||
+
|
|
||||||
+.*: file format .*
|
|
||||||
+
|
|
||||||
+Contents of section .data:
|
|
||||||
+ 0000 00881bcd 4b789ad4 00400000 00000000 .*
|
|
||||||
+ 0010 71a37909 4f930a40 789a5440 789a5440 .*
|
|
||||||
+ 0020 e65e1710 20395e3b e65e1710 20395e3b .*
|
|
||||||
+ 0030 00000000 0000a044 01000000 0000a044 .*
|
|
||||||
+ 0040 00000000 0000f03f .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp.s b/gas/testsuite/gas/i386/fp.s
|
|
||||||
index 11a50cf2683..fca56f29ac1 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp.s
|
|
||||||
@@ -7,10 +7,10 @@
|
|
||||||
# .byte 0x71, 0xa3, 0x79, 0x09, 0x4f, 0x93, 0x0a, 0x40
|
|
||||||
# The next two are 32-bit floating point format.
|
|
||||||
.float 3.32192809488736218171e0
|
|
||||||
-# .byte 0x78, 0x9a, 0x54, 0x40, 0, 0, 0, 0
|
|
||||||
+# .byte 0x78, 0x9a, 0x54, 0x40
|
|
||||||
.single 3.32192809488736218171e0
|
|
||||||
-# .byte 0x78, 0x9a, 0x54, 0x40, 0, 0, 0, 0
|
|
||||||
- .byte 0, 0, 0, 0, 0, 0
|
|
||||||
+# .byte 0x78, 0x9a, 0x54, 0x40
|
|
||||||
+ .p2align 4,0
|
|
||||||
|
|
||||||
# The assembler used to treat the next value as zero instead of 1e-22.
|
|
||||||
.double .0000000000000000000001
|
|
||||||
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
|
|
||||||
index 3464bc2702b..122da6a2315 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/i386.exp
|
|
||||||
+++ b/gas/testsuite/gas/i386/i386.exp
|
|
||||||
@@ -118,7 +118,6 @@ if [gas_32_check] then {
|
|
||||||
run_list_test "lockbad-1" "-al"
|
|
||||||
run_dump_test "long-1"
|
|
||||||
run_dump_test "long-1-intel"
|
|
||||||
- run_dump_test "fp"
|
|
||||||
run_dump_test "nops"
|
|
||||||
run_dump_test "nops16-1"
|
|
||||||
run_dump_test "nops-1"
|
|
||||||
@@ -624,6 +623,7 @@ if [gas_32_check] then {
|
|
||||||
run_dump_test "intel-movs16"
|
|
||||||
run_dump_test "intel-cmps32"
|
|
||||||
run_dump_test "intel-cmps16"
|
|
||||||
+ run_dump_test "fp-elf32"
|
|
||||||
run_list_test "inval-equ-1" "-al"
|
|
||||||
run_list_test "inval-equ-2" "-al"
|
|
||||||
run_dump_test "ifunc"
|
|
||||||
@@ -697,6 +697,8 @@ if [gas_32_check] then {
|
|
||||||
run_dump_test "iamcu-5"
|
|
||||||
run_list_test "iamcu-inval-1" "-march=iamcu -al"
|
|
||||||
}
|
|
||||||
+ } else {
|
|
||||||
+ run_dump_test "fp"
|
|
||||||
}
|
|
||||||
|
|
||||||
# This is a PE specific test.
|
|
||||||
@@ -1274,6 +1276,7 @@ if [gas_64_check] then {
|
|
||||||
run_list_test "reloc64" "--defsym _bad_=1"
|
|
||||||
run_dump_test "mixed-mode-reloc64"
|
|
||||||
run_dump_test "rela"
|
|
||||||
+ run_dump_test "fp-elf64"
|
|
||||||
run_dump_test "x86-64-ifunc"
|
|
||||||
run_dump_test "x86-64-opcode-inval"
|
|
||||||
run_dump_test "x86-64-opcode-inval-intel"
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,155 +0,0 @@
|
|||||||
From e74e2b4c336fad993b0dd31b859af919ad52ec9e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Wed, 11 Aug 2021 08:31:03 +0200
|
|
||||||
Subject: [PATCH] x86/ELF: fix .ds.x output
|
|
||||||
|
|
||||||
The ELF psABI-s are quite clear here: On 32-bit the underlying data type
|
|
||||||
is 12 bytes long (with 2 bytes of trailing padding), while on 64-bit it
|
|
||||||
is 16 bytes long (with 6 bytes of padding). Make s_space() capable of
|
|
||||||
handling 'x' (and 'p') type floating point being other than 12 bytes
|
|
||||||
wide (also adjusting documentation). This requires duplicating the
|
|
||||||
definition of X_PRECISION in the target speciifc header; the compiler
|
|
||||||
would complain if this was out of sync with config/atof-ieee.c.
|
|
||||||
|
|
||||||
Note that for now padding space doesn't get separated from actual
|
|
||||||
storage, which means that things will work correctly only for little-
|
|
||||||
endian cases, and which also means that by specifying large enough
|
|
||||||
numbers padding space can be set to non-zero. Since the logic is needed
|
|
||||||
for a single little-endian architecture only for now, I'm hoping that
|
|
||||||
this might be acceptable for the time being; otherwise the change will
|
|
||||||
become more intrusive.
|
|
||||||
|
|
||||||
Note also that this brings the emitted data size of .ds.x vs .tfloat in
|
|
||||||
line for non-ELF targets as well; the issue will be even more obvious
|
|
||||||
when further taking into account a subsequent patch fixing .dc.x/.dcb.x
|
|
||||||
(where output sizes currently differ depending on input format).
|
|
||||||
|
|
||||||
Extend existing x86 testcases.
|
|
||||||
|
|
||||||
diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h
|
|
||||||
index f94226edf78..2dc6312f28e 100644
|
|
||||||
--- a/gas/config/tc-i386.h
|
|
||||||
+++ b/gas/config/tc-i386.h
|
|
||||||
@@ -134,6 +134,7 @@ extern bfd_reloc_code_real_type x86_cons (expressionS *, int);
|
|
||||||
extern void x86_cons_fix_new
|
|
||||||
(fragS *, unsigned int, unsigned int, expressionS *, bfd_reloc_code_real_type);
|
|
||||||
|
|
||||||
+#define X_PRECISION 5
|
|
||||||
#define X_PRECISION_PAD x86_tfloat_pad ()
|
|
||||||
extern int x86_tfloat_pad (void);
|
|
||||||
|
|
||||||
diff --git a/gas/doc/as.texi b/gas/doc/as.texi
|
|
||||||
index 292c4af2bb6..b8d5b9be15e 100644
|
|
||||||
--- a/gas/doc/as.texi
|
|
||||||
+++ b/gas/doc/as.texi
|
|
||||||
@@ -5125,13 +5125,13 @@ Emits 8-byte values.
|
|
||||||
@item @samp{.l}
|
|
||||||
Emits 4-byte values.
|
|
||||||
@item @samp{.p}
|
|
||||||
-Emits 12-byte values.
|
|
||||||
+Emits values with size matching packed-decimal floating-point ones.
|
|
||||||
@item @samp{.s}
|
|
||||||
Emits 4-byte values.
|
|
||||||
@item @samp{.w}
|
|
||||||
Emits 2-byte values.
|
|
||||||
@item @samp{.x}
|
|
||||||
-Emits 12-byte values.
|
|
||||||
+Emits values with size matching long double precision floating-point ones.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Note - unlike the @code{.dcb} directive the @samp{.d}, @samp{.s} and @samp{.x}
|
|
||||||
diff --git a/gas/read.c b/gas/read.c
|
|
||||||
index ea9261e639b..6bba696cebc 100644
|
|
||||||
--- a/gas/read.c
|
|
||||||
+++ b/gas/read.c
|
|
||||||
@@ -382,10 +382,10 @@ static const pseudo_typeS potable[] = {
|
|
||||||
{"ds.b", s_space, 1},
|
|
||||||
{"ds.d", s_space, 8},
|
|
||||||
{"ds.l", s_space, 4},
|
|
||||||
- {"ds.p", s_space, 12},
|
|
||||||
+ {"ds.p", s_space, 'p'},
|
|
||||||
{"ds.s", s_space, 4},
|
|
||||||
{"ds.w", s_space, 2},
|
|
||||||
- {"ds.x", s_space, 12},
|
|
||||||
+ {"ds.x", s_space, 'x'},
|
|
||||||
{"debug", s_ignore, 0},
|
|
||||||
#ifdef S_SET_DESC
|
|
||||||
{"desc", s_desc, 0},
|
|
||||||
@@ -3327,6 +3327,29 @@ s_space (int mult)
|
|
||||||
md_flush_pending_output ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+ switch (mult)
|
|
||||||
+ {
|
|
||||||
+ case 'x':
|
|
||||||
+#ifdef X_PRECISION
|
|
||||||
+# ifndef P_PRECISION
|
|
||||||
+# define P_PRECISION X_PRECISION
|
|
||||||
+# define P_PRECISION_PAD X_PRECISION_PAD
|
|
||||||
+# endif
|
|
||||||
+ mult = (X_PRECISION + X_PRECISION_PAD) * sizeof (LITTLENUM_TYPE);
|
|
||||||
+ if (!mult)
|
|
||||||
+#endif
|
|
||||||
+ mult = 12;
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ case 'p':
|
|
||||||
+#ifdef P_PRECISION
|
|
||||||
+ mult = (P_PRECISION + P_PRECISION_PAD) * sizeof (LITTLENUM_TYPE);
|
|
||||||
+ if (!mult)
|
|
||||||
+#endif
|
|
||||||
+ mult = 12;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
#ifdef md_cons_align
|
|
||||||
md_cons_align (1);
|
|
||||||
#endif
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp-elf32.d b/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
index 6ef9c83ac54..9e1254615ec 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
@@ -9,4 +9,5 @@ Contents of section .data:
|
|
||||||
0010 4f930a40 789a5440 789a5440 00000000 .*
|
|
||||||
0020 e65e1710 20395e3b e65e1710 20395e3b .*
|
|
||||||
0030 00000000 0000a044 01000000 0000a044 .*
|
|
||||||
- 0040 00000000 0000f03f .*
|
|
||||||
+ 0040 00000000 0000f03f 00000000 00000000 .*
|
|
||||||
+ 0050 ffffffff ffffffff ffffffff cccccccc .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp-elf64.d b/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
index 2e68ac8ebca..0314929cf9c 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
@@ -9,4 +9,5 @@ Contents of section .data:
|
|
||||||
0010 71a37909 4f930a40 789a5440 789a5440 .*
|
|
||||||
0020 e65e1710 20395e3b e65e1710 20395e3b .*
|
|
||||||
0030 00000000 0000a044 01000000 0000a044 .*
|
|
||||||
- 0040 00000000 0000f03f .*
|
|
||||||
+ 0040 00000000 0000f03f 00000000 00000000 .*
|
|
||||||
+ 0050 ffffffff ffffffff ffffffff ffffffff .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp.d b/gas/testsuite/gas/i386/fp.d
|
|
||||||
index edf79ff9996..dd7e028b44b 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp.d
|
|
||||||
@@ -8,4 +8,5 @@ Contents of section .data:
|
|
||||||
0010 0a40789a 5440789a 54400000 00000000 .*
|
|
||||||
0020 e65e1710 20395e3b e65e1710 20395e3b .*
|
|
||||||
0030 00000000 0000a044 01000000 0000a044 .*
|
|
||||||
- 0040 00000000 0000f03f .*
|
|
||||||
+ 0040 00000000 0000f03f 00000000 00000000 .*
|
|
||||||
+ 0050 ffffffff ffffffff ffffcccc cccccccc .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp.s b/gas/testsuite/gas/i386/fp.s
|
|
||||||
index fca56f29ac1..601709c2196 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp.s
|
|
||||||
@@ -20,3 +20,7 @@
|
|
||||||
.double 37778931862957165903873.0
|
|
||||||
# Ensure we handle a crazy number of digits
|
|
||||||
.double 1.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
|
|
||||||
+ .p2align 4,0
|
|
||||||
+
|
|
||||||
+ .ds.x 1, -1
|
|
||||||
+ .p2align 4,0xcc
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,113 +0,0 @@
|
|||||||
From 8f2200fe8e7f17295ed6d9bbc908da533c95e089 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Wed, 11 Aug 2021 08:31:41 +0200
|
|
||||||
Subject: [PATCH] x86/ELF: fix .tfloat output with hex input
|
|
||||||
|
|
||||||
The ELF psABI-s are quite clear here: On 32-bit the data type is 12
|
|
||||||
bytes long (with 2 bytes of trailing padding), while on 64-bit it is 16
|
|
||||||
bytes long (with 6 bytes of padding). Make hex_float() capable of
|
|
||||||
handling such padding.
|
|
||||||
|
|
||||||
Note that this brings the emitted data size of .dc.x / .dcb.x in line
|
|
||||||
also for non-ELF targets; so far they were different depending on input
|
|
||||||
format (dec vs hex).
|
|
||||||
|
|
||||||
Extend the existing x86 testcases.
|
|
||||||
|
|
||||||
diff --git a/gas/read.c b/gas/read.c
|
|
||||||
index 6bba696cebc..b8e845dd569 100644
|
|
||||||
--- a/gas/read.c
|
|
||||||
+++ b/gas/read.c
|
|
||||||
@@ -4847,7 +4847,7 @@ parse_repeat_cons (expressionS *exp, unsigned int nbytes)
|
|
||||||
static int
|
|
||||||
hex_float (int float_type, char *bytes)
|
|
||||||
{
|
|
||||||
- int length;
|
|
||||||
+ int length, pad = 0;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
switch (float_type)
|
|
||||||
@@ -4868,12 +4868,22 @@ hex_float (int float_type, char *bytes)
|
|
||||||
|
|
||||||
case 'x':
|
|
||||||
case 'X':
|
|
||||||
- length = 12;
|
|
||||||
+#ifdef X_PRECISION
|
|
||||||
+ length = X_PRECISION * sizeof (LITTLENUM_TYPE);
|
|
||||||
+ pad = X_PRECISION_PAD * sizeof (LITTLENUM_TYPE);
|
|
||||||
+ if (!length)
|
|
||||||
+#endif
|
|
||||||
+ length = 12;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'p':
|
|
||||||
case 'P':
|
|
||||||
- length = 12;
|
|
||||||
+#ifdef P_PRECISION
|
|
||||||
+ length = P_PRECISION * sizeof (LITTLENUM_TYPE);
|
|
||||||
+ pad = P_PRECISION_PAD * sizeof (LITTLENUM_TYPE);
|
|
||||||
+ if (!length)
|
|
||||||
+#endif
|
|
||||||
+ length = 12;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
@@ -4926,7 +4936,9 @@ hex_float (int float_type, char *bytes)
|
|
||||||
memset (bytes, 0, length - i);
|
|
||||||
}
|
|
||||||
|
|
||||||
- return length;
|
|
||||||
+ memset (bytes + length, 0, pad);
|
|
||||||
+
|
|
||||||
+ return length + pad;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* float_cons()
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp-elf32.d b/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
index 9e1254615ec..eefe84db310 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
@@ -11,3 +11,6 @@ Contents of section .data:
|
|
||||||
0030 00000000 0000a044 01000000 0000a044 .*
|
|
||||||
0040 00000000 0000f03f 00000000 00000000 .*
|
|
||||||
0050 ffffffff ffffffff ffffffff cccccccc .*
|
|
||||||
+ 0060 00000000 00000080 fe3f0000 00000000 .*
|
|
||||||
+ 0070 00000080 fdbf0000 00000000 00000080 .*
|
|
||||||
+ 0080 ff030000 aaaaaaaa aaaaaaaa aaaaaaaa .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp-elf64.d b/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
index 0314929cf9c..0756aa1e36a 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
@@ -11,3 +11,6 @@ Contents of section .data:
|
|
||||||
0030 00000000 0000a044 01000000 0000a044 .*
|
|
||||||
0040 00000000 0000f03f 00000000 00000000 .*
|
|
||||||
0050 ffffffff ffffffff ffffffff ffffffff .*
|
|
||||||
+ 0060 00000000 00000080 fe3f0000 00000000 .*
|
|
||||||
+ 0070 00000000 00000080 fdbf0000 00000000 .*
|
|
||||||
+ 0080 00000000 00000080 ff030000 00000000 .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp.d b/gas/testsuite/gas/i386/fp.d
|
|
||||||
index dd7e028b44b..b93595ac8c3 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp.d
|
|
||||||
@@ -10,3 +10,5 @@ Contents of section .data:
|
|
||||||
0030 00000000 0000a044 01000000 0000a044 .*
|
|
||||||
0040 00000000 0000f03f 00000000 00000000 .*
|
|
||||||
0050 ffffffff ffffffff ffffcccc cccccccc .*
|
|
||||||
+ 0060 00000000 00000080 fe3f0000 00000000 .*
|
|
||||||
+ 0070 0080fdbf 00000000 00000080 ff03aaaa .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp.s b/gas/testsuite/gas/i386/fp.s
|
|
||||||
index 601709c2196..7fe642e5180 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp.s
|
|
||||||
@@ -24,3 +24,8 @@
|
|
||||||
|
|
||||||
.ds.x 1, -1
|
|
||||||
.p2align 4,0xcc
|
|
||||||
+
|
|
||||||
+ .tfloat 0x:3ffe80
|
|
||||||
+ .dc.x 0x:bffd80
|
|
||||||
+ .dcb.x 1, 0x:03ff80
|
|
||||||
+ .p2align 4,0xaa
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,121 +0,0 @@
|
|||||||
From 7d19d096292acac01d0fde4d99c3e49d69688e03 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Wed, 11 Aug 2021 08:32:54 +0200
|
|
||||||
Subject: [PATCH] x86: introduce .hfloat directive
|
|
||||||
|
|
||||||
This is to be able to generate data passed to {,V}CVTPH2PS and acted
|
|
||||||
upon by AVX512-FP16 insns. To be able to also use the hex forms
|
|
||||||
supported for other floating point formats, a small addition to the
|
|
||||||
generic hex_float() is needed.
|
|
||||||
|
|
||||||
Extend existing x86 testcases.
|
|
||||||
|
|
||||||
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
|
|
||||||
index 0fa8b0d5a04..a9e36213390 100644
|
|
||||||
--- a/gas/config/tc-i386.c
|
|
||||||
+++ b/gas/config/tc-i386.c
|
|
||||||
@@ -512,7 +512,7 @@ const char EXP_CHARS[] = "eE";
|
|
||||||
/* Chars that mean this number is a floating point constant
|
|
||||||
As in 0f12.456
|
|
||||||
or 0d1.2345e12. */
|
|
||||||
-const char FLT_CHARS[] = "fFdDxX";
|
|
||||||
+const char FLT_CHARS[] = "fFdDxXhH";
|
|
||||||
|
|
||||||
/* Tables for lexical analysis. */
|
|
||||||
static char mnemonic_chars[256];
|
|
||||||
@@ -1356,6 +1356,7 @@ const pseudo_typeS md_pseudo_table[] =
|
|
||||||
{"ffloat", float_cons, 'f'},
|
|
||||||
{"dfloat", float_cons, 'd'},
|
|
||||||
{"tfloat", float_cons, 'x'},
|
|
||||||
+ {"hfloat", float_cons, 'h'},
|
|
||||||
{"value", cons, 2},
|
|
||||||
{"slong", signed_cons, 4},
|
|
||||||
{"noopt", s_ignore, 0},
|
|
||||||
diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi
|
|
||||||
index 9058ad444b0..664237c75c9 100644
|
|
||||||
--- a/gas/doc/c-i386.texi
|
|
||||||
+++ b/gas/doc/c-i386.texi
|
|
||||||
@@ -1313,18 +1313,21 @@ data type. Constructors build these data types into memory.
|
|
||||||
@cindex @code{single} directive, i386
|
|
||||||
@cindex @code{double} directive, i386
|
|
||||||
@cindex @code{tfloat} directive, i386
|
|
||||||
+@cindex @code{hfloat} directive, i386
|
|
||||||
@cindex @code{float} directive, x86-64
|
|
||||||
@cindex @code{single} directive, x86-64
|
|
||||||
@cindex @code{double} directive, x86-64
|
|
||||||
@cindex @code{tfloat} directive, x86-64
|
|
||||||
+@cindex @code{hfloat} directive, x86-64
|
|
||||||
@itemize @bullet
|
|
||||||
@item
|
|
||||||
Floating point constructors are @samp{.float} or @samp{.single},
|
|
||||||
-@samp{.double}, and @samp{.tfloat} for 32-, 64-, and 80-bit formats.
|
|
||||||
-These correspond to instruction mnemonic suffixes @samp{s}, @samp{l},
|
|
||||||
-and @samp{t}. @samp{t} stands for 80-bit (ten byte) real. The 80387
|
|
||||||
-only supports this format via the @samp{fldt} (load 80-bit real to stack
|
|
||||||
-top) and @samp{fstpt} (store 80-bit real and pop stack) instructions.
|
|
||||||
+@samp{.double}, @samp{.tfloat}, and @samp{.hfloat} for 32-, 64-, 80-, and
|
|
||||||
+16-bit formats respectively. The former three correspond to instruction
|
|
||||||
+mnemonic suffixes @samp{s}, @samp{l}, and @samp{t}. @samp{t} stands for
|
|
||||||
+80-bit (ten byte) real. The 80387 only supports this format via the
|
|
||||||
+@samp{fldt} (load 80-bit real to stack top) and @samp{fstpt} (store 80-bit
|
|
||||||
+real and pop stack) instructions.
|
|
||||||
|
|
||||||
@cindex @code{word} directive, i386
|
|
||||||
@cindex @code{long} directive, i386
|
|
||||||
diff --git a/gas/read.c b/gas/read.c
|
|
||||||
index b8e845dd569..4170a254030 100644
|
|
||||||
--- a/gas/read.c
|
|
||||||
+++ b/gas/read.c
|
|
||||||
@@ -4852,6 +4852,11 @@ hex_float (int float_type, char *bytes)
|
|
||||||
|
|
||||||
switch (float_type)
|
|
||||||
{
|
|
||||||
+ case 'h':
|
|
||||||
+ case 'H':
|
|
||||||
+ length = 2;
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
case 'f':
|
|
||||||
case 'F':
|
|
||||||
case 's':
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp-elf32.d b/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
index eefe84db310..d25eed8b8ef 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp-elf32.d
|
|
||||||
@@ -14,3 +14,4 @@ Contents of section .data:
|
|
||||||
0060 00000000 00000080 fe3f0000 00000000 .*
|
|
||||||
0070 00000080 fdbf0000 00000000 00000080 .*
|
|
||||||
0080 ff030000 aaaaaaaa aaaaaaaa aaaaaaaa .*
|
|
||||||
+ 0090 003c00c0 003c5555 55555555 55555555 .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp-elf64.d b/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
index 0756aa1e36a..bdc8f86662e 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp-elf64.d
|
|
||||||
@@ -14,3 +14,4 @@ Contents of section .data:
|
|
||||||
0060 00000000 00000080 fe3f0000 00000000 .*
|
|
||||||
0070 00000000 00000080 fdbf0000 00000000 .*
|
|
||||||
0080 00000000 00000080 ff030000 00000000 .*
|
|
||||||
+ 0090 003c00c0 003c5555 55555555 55555555 .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp.d b/gas/testsuite/gas/i386/fp.d
|
|
||||||
index b93595ac8c3..65a5fccd6ee 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp.d
|
|
||||||
@@ -12,3 +12,4 @@ Contents of section .data:
|
|
||||||
0050 ffffffff ffffffff ffffcccc cccccccc .*
|
|
||||||
0060 00000000 00000080 fe3f0000 00000000 .*
|
|
||||||
0070 0080fdbf 00000000 00000080 ff03aaaa .*
|
|
||||||
+ 0080 003c00c0 003c5555 55555555 55555555 .*
|
|
||||||
diff --git a/gas/testsuite/gas/i386/fp.s b/gas/testsuite/gas/i386/fp.s
|
|
||||||
index 7fe642e5180..8976dd82f60 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/fp.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/fp.s
|
|
||||||
@@ -29,3 +29,6 @@
|
|
||||||
.dc.x 0x:bffd80
|
|
||||||
.dcb.x 1, 0x:03ff80
|
|
||||||
.p2align 4,0xaa
|
|
||||||
+
|
|
||||||
+ .hfloat 1, -2, 0x:3c00
|
|
||||||
+ .p2align 4,0x55
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,103 +0,0 @@
|
|||||||
From 7e40d574be8b8bc01d3726b90556cff0081e9dd9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
||||||
Date: Thu, 19 Aug 2021 06:38:21 -0700
|
|
||||||
Subject: [PATCH] x86: Avoid abort on invalid broadcast
|
|
||||||
|
|
||||||
Print "{bad}" on invalid broadcast instead of abort.
|
|
||||||
|
|
||||||
gas/
|
|
||||||
|
|
||||||
PR binutils/28247
|
|
||||||
* testsuite/gas/i386/bad-bcast.d: New file.
|
|
||||||
* testsuite/gas/i386/bad-bcast.s: Likewise.
|
|
||||||
* testsuite/gas/i386/i386.exp: Run bad-bcast.
|
|
||||||
|
|
||||||
opcodes/
|
|
||||||
|
|
||||||
PR binutils/28247
|
|
||||||
* i386-dis.c (OP_E_memory): Print "{bad}" on invalid broadcast
|
|
||||||
instead of abort.
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/bad-bcast.d b/gas/testsuite/gas/i386/bad-bcast.d
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..9fc474a42ff
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gas/testsuite/gas/i386/bad-bcast.d
|
|
||||||
@@ -0,0 +1,14 @@
|
|
||||||
+#objdump: -dw
|
|
||||||
+#name: Disassemble bad broadcast
|
|
||||||
+
|
|
||||||
+.*: +file format .*
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+Disassembly of section .text:
|
|
||||||
+
|
|
||||||
+0+ <.text>:
|
|
||||||
+ +[a-f0-9]+: 62 .byte 0x62
|
|
||||||
+ +[a-f0-9]+: c3 ret
|
|
||||||
+ +[a-f0-9]+: 8c 1d 66 90 66 90 mov %ds,0x90669066
|
|
||||||
+ +[a-f0-9]+: 66 90 xchg %ax,%ax
|
|
||||||
+#pass
|
|
||||||
diff --git a/gas/testsuite/gas/i386/bad-bcast.s b/gas/testsuite/gas/i386/bad-bcast.s
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..e09c3aae5de
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gas/testsuite/gas/i386/bad-bcast.s
|
|
||||||
@@ -0,0 +1,2 @@
|
|
||||||
+ .text
|
|
||||||
+ .byte 0x62, 0xc3, 0x8c, 0x1d, 0x66, 0x90, 0x66, 0x90, 0x66, 0x90
|
|
||||||
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
|
|
||||||
index f5eda2cf331..80959726d0e 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/i386.exp
|
|
||||||
+++ b/gas/testsuite/gas/i386/i386.exp
|
|
||||||
@@ -646,6 +646,7 @@ if [gas_32_check] then {
|
|
||||||
run_dump_test "dw2-compress-2"
|
|
||||||
run_dump_test "dw2-compressed-2"
|
|
||||||
|
|
||||||
+ run_dump_test "bad-bcast"
|
|
||||||
run_dump_test "bad-size"
|
|
||||||
|
|
||||||
run_dump_test "size-1"
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 2c7027ca6f1..acb5a0faa88 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -11912,7 +11912,7 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
{
|
|
||||||
if (vex.w)
|
|
||||||
{
|
|
||||||
- abort ();
|
|
||||||
+ oappend ("{bad}");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
@@ -11928,7 +11928,7 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
oappend ("{1to32}");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- abort ();
|
|
||||||
+ oappend ("{bad}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11948,7 +11948,7 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
oappend ("{1to8}");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- abort ();
|
|
||||||
+ oappend ("{bad}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (bytemode == x_mode
|
|
||||||
@@ -11966,7 +11966,7 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
oappend ("{1to16}");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- abort ();
|
|
||||||
+ oappend ("{bad}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,59 +0,0 @@
|
|||||||
From ca22cf5ed52c1b4c40dbadf893f558ef09d0c66b Mon Sep 17 00:00:00 2001
|
|
||||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
||||||
Date: Thu, 19 Aug 2021 07:39:10 -0700
|
|
||||||
Subject: [PATCH] x86: Put back 3 aborts in OP_E_memory
|
|
||||||
|
|
||||||
Put back 3 aborts where invalid lengths should have been filtered out.
|
|
||||||
|
|
||||||
gas/
|
|
||||||
|
|
||||||
PR binutils/28247
|
|
||||||
* testsuite/gas/i386/bad-bcast.s: Add a comment.
|
|
||||||
|
|
||||||
opcodes/
|
|
||||||
|
|
||||||
PR binutils/28247
|
|
||||||
* * i386-dis.c (OP_E_memory): Put back 3 aborts.
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/bad-bcast.s b/gas/testsuite/gas/i386/bad-bcast.s
|
|
||||||
index e09c3aae5de..3e49b2238ed 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/bad-bcast.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/bad-bcast.s
|
|
||||||
@@ -1,2 +1,3 @@
|
|
||||||
.text
|
|
||||||
+# Invalid 16-bit broadcast with EVEX.W == 1.
|
|
||||||
.byte 0x62, 0xc3, 0x8c, 0x1d, 0x66, 0x90, 0x66, 0x90, 0x66, 0x90
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index acb5a0faa88..aa292233d4d 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -11928,7 +11928,7 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
oappend ("{1to32}");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- oappend ("{bad}");
|
|
||||||
+ abort ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11948,7 +11948,7 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
oappend ("{1to8}");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- oappend ("{bad}");
|
|
||||||
+ abort ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (bytemode == x_mode
|
|
||||||
@@ -11966,7 +11966,7 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
oappend ("{1to16}");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- oappend ("{bad}");
|
|
||||||
+ abort ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,279 +0,0 @@
|
|||||||
From 2c02075a8ec5223bc4cbcc9561eb91e28d46a9e5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Cui,Lili" <lili.cui@intel.com>
|
|
||||||
Date: Tue, 28 Sep 2021 11:13:33 +0800
|
|
||||||
Subject: [PATCH] x86: Print {bad} on invalid broadcast in OP_E_memory
|
|
||||||
|
|
||||||
Don't print broadcast for scalar_mode, and print {bad} for invalid broadcast.
|
|
||||||
|
|
||||||
gas/
|
|
||||||
|
|
||||||
PR binutils/28381
|
|
||||||
* testsuite/gas/i386/bad-bcast.s: Add a new testcase.
|
|
||||||
* testsuite/gas/i386/bad-bcast.d: Likewise.
|
|
||||||
* testsuite/gas/i386/bad-bcast-intel.d: New.
|
|
||||||
|
|
||||||
opcodes/
|
|
||||||
|
|
||||||
PR binutils/28381
|
|
||||||
* i386-dis.c (static struct): Add no_broadcast.
|
|
||||||
(OP_E_memory): Mark invalid broadcast with no_broadcast=1 and Print "{bad}"for it.
|
|
||||||
(intel_operand_size): mark invalid broadcast with no_broadcast=1.
|
|
||||||
(OP_XMM): Mark scalar_mode with no_broadcast=1.
|
|
||||||
|
|
||||||
diff --git a/gas/testsuite/gas/i386/bad-bcast-intel.d b/gas/testsuite/gas/i386/bad-bcast-intel.d
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..29de3de299c
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gas/testsuite/gas/i386/bad-bcast-intel.d
|
|
||||||
@@ -0,0 +1,15 @@
|
|
||||||
+#source: bad-bcast.s
|
|
||||||
+#objdump: -dw -Mintel
|
|
||||||
+#name: Disassemble bad broadcast (Intel mode)
|
|
||||||
+
|
|
||||||
+.*: +file format .*
|
|
||||||
+
|
|
||||||
+Disassembly of section .text:
|
|
||||||
+
|
|
||||||
+0+ <.text>:
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 c3 8c 1d 66\s*\(bad\)
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*90\s*nop
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*66 90\s*xchg ax,ax
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*66 90\s*xchg ax,ax
|
|
||||||
+[ ]*[a-f0-9]+:[ ]*62 c1 ff 38 2a 20\s*vcvtsi2sd xmm4,xmm0,\[eax\]{bad}
|
|
||||||
+#pass
|
|
||||||
diff --git a/gas/testsuite/gas/i386/bad-bcast.d b/gas/testsuite/gas/i386/bad-bcast.d
|
|
||||||
index 9fc474a42ff..4f829259994 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/bad-bcast.d
|
|
||||||
+++ b/gas/testsuite/gas/i386/bad-bcast.d
|
|
||||||
@@ -7,8 +7,8 @@
|
|
||||||
Disassembly of section .text:
|
|
||||||
|
|
||||||
0+ <.text>:
|
|
||||||
- +[a-f0-9]+: 62 .byte 0x62
|
|
||||||
- +[a-f0-9]+: c3 ret
|
|
||||||
- +[a-f0-9]+: 8c 1d 66 90 66 90 mov %ds,0x90669066
|
|
||||||
- +[a-f0-9]+: 66 90 xchg %ax,%ax
|
|
||||||
-#pass
|
|
||||||
+ +[a-f0-9]+: 62 c3 8c 1d 66\s+\(bad\)
|
|
||||||
+ +[a-f0-9]+: 90\s+nop
|
|
||||||
+ +[a-f0-9]+: 66 90\s+xchg %ax,%ax
|
|
||||||
+ +[a-f0-9]+: 66 90\s+xchg %ax,%ax
|
|
||||||
+ +[a-f0-9]+: 62 c1 ff 38 2a 20\s+vcvtsi2sd \(%eax\){bad},%xmm0,%xmm4
|
|
||||||
diff --git a/gas/testsuite/gas/i386/bad-bcast.s b/gas/testsuite/gas/i386/bad-bcast.s
|
|
||||||
index 3e49b2238ed..6c55dcbbbd8 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/bad-bcast.s
|
|
||||||
+++ b/gas/testsuite/gas/i386/bad-bcast.s
|
|
||||||
@@ -1,3 +1,5 @@
|
|
||||||
.text
|
|
||||||
# Invalid 16-bit broadcast with EVEX.W == 1.
|
|
||||||
.byte 0x62, 0xc3, 0x8c, 0x1d, 0x66, 0x90, 0x66, 0x90, 0x66, 0x90
|
|
||||||
+# Invalid vcvtsi2sd with EVEX.b == 1.
|
|
||||||
+ .byte 0x62,0xc1,0xff,0x38,0x2a,0x20
|
|
||||||
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
|
|
||||||
index 80959726d0e..680259b1c4e 100644
|
|
||||||
--- a/gas/testsuite/gas/i386/i386.exp
|
|
||||||
+++ b/gas/testsuite/gas/i386/i386.exp
|
|
||||||
@@ -646,6 +646,7 @@ if [gas_32_check] then {
|
|
||||||
run_dump_test "dw2-compress-2"
|
|
||||||
run_dump_test "dw2-compressed-2"
|
|
||||||
|
|
||||||
+ run_dump_test "bad-bcast-intel"
|
|
||||||
run_dump_test "bad-bcast"
|
|
||||||
run_dump_test "bad-size"
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index aa292233d4d..926f776de88 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -2422,6 +2422,7 @@ static struct
|
|
||||||
int zeroing;
|
|
||||||
int ll;
|
|
||||||
int b;
|
|
||||||
+ int no_broadcast;
|
|
||||||
}
|
|
||||||
vex;
|
|
||||||
static unsigned char need_vex;
|
|
||||||
@@ -11059,23 +11060,25 @@ intel_operand_size (int bytemode, int sizeflag)
|
|
||||||
{
|
|
||||||
if (vex.b)
|
|
||||||
{
|
|
||||||
- switch (bytemode)
|
|
||||||
- {
|
|
||||||
- case x_mode:
|
|
||||||
- case evex_half_bcst_xmmq_mode:
|
|
||||||
- if (vex.w)
|
|
||||||
- oappend ("QWORD PTR ");
|
|
||||||
- else
|
|
||||||
- oappend ("DWORD PTR ");
|
|
||||||
- break;
|
|
||||||
- case xh_mode:
|
|
||||||
- case evex_half_bcst_xmmqh_mode:
|
|
||||||
- case evex_half_bcst_xmmqdh_mode:
|
|
||||||
- oappend ("WORD PTR ");
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
- }
|
|
||||||
+ if (!vex.no_broadcast)
|
|
||||||
+ switch (bytemode)
|
|
||||||
+ {
|
|
||||||
+ case x_mode:
|
|
||||||
+ case evex_half_bcst_xmmq_mode:
|
|
||||||
+ if (vex.w)
|
|
||||||
+ oappend ("QWORD PTR ");
|
|
||||||
+ else
|
|
||||||
+ oappend ("DWORD PTR ");
|
|
||||||
+ break;
|
|
||||||
+ case xh_mode:
|
|
||||||
+ case evex_half_bcst_xmmqh_mode:
|
|
||||||
+ case evex_half_bcst_xmmqdh_mode:
|
|
||||||
+ oappend ("WORD PTR ");
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ vex.no_broadcast = 1;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (bytemode)
|
|
||||||
@@ -11908,69 +11911,71 @@ OP_E_memory (int bytemode, int sizeflag)
|
|
||||||
if (vex.b)
|
|
||||||
{
|
|
||||||
evex_used |= EVEX_b_used;
|
|
||||||
- if (bytemode == xh_mode)
|
|
||||||
- {
|
|
||||||
- if (vex.w)
|
|
||||||
- {
|
|
||||||
- oappend ("{bad}");
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- switch (vex.length)
|
|
||||||
- {
|
|
||||||
- case 128:
|
|
||||||
- oappend ("{1to8}");
|
|
||||||
- break;
|
|
||||||
- case 256:
|
|
||||||
- oappend ("{1to16}");
|
|
||||||
- break;
|
|
||||||
- case 512:
|
|
||||||
- oappend ("{1to32}");
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- else if (vex.w
|
|
||||||
- || bytemode == evex_half_bcst_xmmqdh_mode
|
|
||||||
- || bytemode == evex_half_bcst_xmmq_mode)
|
|
||||||
+ if (!vex.no_broadcast)
|
|
||||||
{
|
|
||||||
- switch (vex.length)
|
|
||||||
+ if (bytemode == xh_mode)
|
|
||||||
{
|
|
||||||
- case 128:
|
|
||||||
- oappend ("{1to2}");
|
|
||||||
- break;
|
|
||||||
- case 256:
|
|
||||||
- oappend ("{1to4}");
|
|
||||||
- break;
|
|
||||||
- case 512:
|
|
||||||
- oappend ("{1to8}");
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
+ if (vex.w)
|
|
||||||
+ oappend ("{bad}");
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ switch (vex.length)
|
|
||||||
+ {
|
|
||||||
+ case 128:
|
|
||||||
+ oappend ("{1to8}");
|
|
||||||
+ break;
|
|
||||||
+ case 256:
|
|
||||||
+ oappend ("{1to16}");
|
|
||||||
+ break;
|
|
||||||
+ case 512:
|
|
||||||
+ oappend ("{1to32}");
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ abort ();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
- }
|
|
||||||
- else if (bytemode == x_mode
|
|
||||||
- || bytemode == evex_half_bcst_xmmqh_mode)
|
|
||||||
- {
|
|
||||||
- switch (vex.length)
|
|
||||||
+ else if (vex.w
|
|
||||||
+ || bytemode == evex_half_bcst_xmmqdh_mode
|
|
||||||
+ || bytemode == evex_half_bcst_xmmq_mode)
|
|
||||||
{
|
|
||||||
- case 128:
|
|
||||||
- oappend ("{1to4}");
|
|
||||||
- break;
|
|
||||||
- case 256:
|
|
||||||
- oappend ("{1to8}");
|
|
||||||
- break;
|
|
||||||
- case 512:
|
|
||||||
- oappend ("{1to16}");
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- abort ();
|
|
||||||
+ switch (vex.length)
|
|
||||||
+ {
|
|
||||||
+ case 128:
|
|
||||||
+ oappend ("{1to2}");
|
|
||||||
+ break;
|
|
||||||
+ case 256:
|
|
||||||
+ oappend ("{1to4}");
|
|
||||||
+ break;
|
|
||||||
+ case 512:
|
|
||||||
+ oappend ("{1to8}");
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ abort ();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ else if (bytemode == x_mode
|
|
||||||
+ || bytemode == evex_half_bcst_xmmqh_mode)
|
|
||||||
+ {
|
|
||||||
+ switch (vex.length)
|
|
||||||
+ {
|
|
||||||
+ case 128:
|
|
||||||
+ oappend ("{1to4}");
|
|
||||||
+ break;
|
|
||||||
+ case 256:
|
|
||||||
+ oappend ("{1to8}");
|
|
||||||
+ break;
|
|
||||||
+ case 512:
|
|
||||||
+ oappend ("{1to16}");
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ abort ();
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
+ else
|
|
||||||
+ vex.no_broadcast = 1;
|
|
||||||
}
|
|
||||||
- else
|
|
||||||
- /* If operand doesn't allow broadcast, vex.b should be 0. */
|
|
||||||
+ if (vex.no_broadcast)
|
|
||||||
oappend ("{bad}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -12685,6 +12690,8 @@ OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
|
|
||||||
|
|
||||||
if (bytemode == tmm_mode)
|
|
||||||
modrm.reg = reg;
|
|
||||||
+ else if (bytemode == scalar_mode)
|
|
||||||
+ vex.no_broadcast = 1;
|
|
||||||
|
|
||||||
print_vector_reg (reg, bytemode);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,423 +0,0 @@
|
|||||||
From 2235ecb8afebeb56baf29eb98de34cfa1b95f697 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Fri, 14 Jan 2022 10:54:21 +0100
|
|
||||||
Subject: [PATCH] x86: reduce AVX512-FP16 set of insns decoded through
|
|
||||||
vex_w_table[]
|
|
||||||
|
|
||||||
Like already indicated during review of the original submission, there's
|
|
||||||
really only very few insns where going through this table is easier /
|
|
||||||
cheaper than using suitable macros. Utilize %XH more and introduce
|
|
||||||
similar %XS and %XD (which subsequently can be used for further table
|
|
||||||
size reduction).
|
|
||||||
|
|
||||||
While there also switch to using oappend() in 'XH' macro processing.
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
index 9c8156ac11e..64a43ce02a1 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-prefix.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
@@ -375,17 +375,17 @@
|
|
||||||
{ "vfmsub213s%XW", { XMScalar, VexScalar, EXdq, EXxEVexR }, 0 },
|
|
||||||
{ "v4fnmaddss", { XMScalar, VexScalar, Mxmm }, 0 },
|
|
||||||
},
|
|
||||||
- /* PREFIX_EVEX_0F3A08_W_0 */
|
|
||||||
+ /* PREFIX_EVEX_0F3A08 */
|
|
||||||
{
|
|
||||||
- { "vrndscaleph", { XM, EXxh, EXxEVexS, Ib }, 0 },
|
|
||||||
+ { "vrndscalep%XH", { XM, EXxh, EXxEVexS, Ib }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vrndscaleps", { XM, EXx, EXxEVexS, Ib }, 0 },
|
|
||||||
+ { "vrndscalep%XS", { XM, EXx, EXxEVexS, Ib }, 0 },
|
|
||||||
},
|
|
||||||
- /* PREFIX_EVEX_0F3A0A_W_0 */
|
|
||||||
+ /* PREFIX_EVEX_0F3A0A */
|
|
||||||
{
|
|
||||||
- { "vrndscalesh", { XMScalar, VexScalar, EXw, EXxEVexS, Ib }, 0 },
|
|
||||||
+ { "vrndscales%XH", { XMScalar, VexScalar, EXw, EXxEVexS, Ib }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vrndscaless", { XMScalar, VexScalar, EXd, EXxEVexS, Ib }, 0 },
|
|
||||||
+ { "vrndscales%XS", { XMScalar, VexScalar, EXd, EXxEVexS, Ib }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F3A26 */
|
|
||||||
{
|
|
||||||
@@ -482,27 +482,18 @@
|
|
||||||
{ "vmulp%XH", { XM, Vex, EXxh, EXxEVexR }, 0 },
|
|
||||||
{ "vmuls%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
- /* PREFIX_EVEX_MAP5_5A_W_0 */
|
|
||||||
+ /* PREFIX_EVEX_MAP5_5A */
|
|
||||||
{
|
|
||||||
- { "vcvtph2pd", { XM, EXxmmqdh, EXxEVexS }, 0 },
|
|
||||||
- { "vcvtsh2sd", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvtp%XH2pd", { XM, EXxmmqdh, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvts%XH2sd", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvtp%XD2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvts%XD2sh", { XMM, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
- /* PREFIX_EVEX_MAP5_5A_W_1 */
|
|
||||||
+ /* PREFIX_EVEX_MAP5_5B */
|
|
||||||
{
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vcvtpd2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
|
|
||||||
- { "vcvtsd2sh", { XMM, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* PREFIX_EVEX_MAP5_5B_W_0 */
|
|
||||||
- {
|
|
||||||
- { "vcvtdq2ph%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
|
|
||||||
- { "vcvttph2dq", { XM, EXxmmqh, EXxEVexS }, 0 },
|
|
||||||
- { "vcvtph2dq", { XM, EXxmmqh, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* PREFIX_EVEX_MAP5_5B_W_1 */
|
|
||||||
- {
|
|
||||||
- { "vcvtqq2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
|
|
||||||
+ { VEX_W_TABLE (EVEX_W_MAP5_5B_P_0) },
|
|
||||||
+ { "vcvttp%XH2dq", { XM, EXxmmqh, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvtp%XH2dq", { XM, EXxmmqh, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_5C */
|
|
||||||
{
|
|
||||||
@@ -526,47 +517,47 @@
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_78 */
|
|
||||||
{
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_78_P_0) },
|
|
||||||
+ { "vcvttp%XH2udq", { XM, EXxmmqh, EXxEVexS }, 0 },
|
|
||||||
{ "vcvttsh2usi", { Gdq, EXw, EXxEVexS }, 0 },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_78_P_2) },
|
|
||||||
+ { "vcvttp%XH2uqq", { XM, EXxmmqdh, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_79 */
|
|
||||||
{
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_79_P_0) },
|
|
||||||
+ { "vcvtp%XH2udq", { XM, EXxmmqh, EXxEVexR }, 0 },
|
|
||||||
{ "vcvtsh2usi", { Gdq, EXw, EXxEVexR }, 0 },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_79_P_2) },
|
|
||||||
+ { "vcvtp%XH2uqq", { XM, EXxmmqdh, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_7A */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_7A_P_2) },
|
|
||||||
+ { "vcvttp%XH2qq", { XM, EXxmmqdh, EXxEVexS }, 0 },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_MAP5_7A_P_3) },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_7B */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vcvtusi2sh{%LQ|}", { XMScalar, VexScalar, EXxEVexR, Edq }, 0 },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_7B_P_2) },
|
|
||||||
+ { "vcvtp%XH2qq", { XM, EXxmmqdh, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_7C */
|
|
||||||
{
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_7C_P_0) },
|
|
||||||
+ { "vcvttp%XH2uw", { XM, EXxh, EXxEVexS }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_7C_P_2) },
|
|
||||||
+ { "vcvttp%XH2w", { XM, EXxh, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
- /* PREFIX_EVEX_MAP5_7D_W_0 */
|
|
||||||
+ /* PREFIX_EVEX_MAP5_7D */
|
|
||||||
{
|
|
||||||
- { "vcvtph2uw", { XM, EXxh, EXxEVexR }, 0 },
|
|
||||||
- { "vcvtw2ph", { XM, EXxh, EXxEVexR }, 0 },
|
|
||||||
- { "vcvtph2w", { XM, EXxh, EXxEVexR }, 0 },
|
|
||||||
- { "vcvtuw2ph", { XM, EXxh, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtp%XH2uw", { XM, EXxh, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtw2p%XH", { XM, EXxh, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtp%XH2w", { XM, EXxh, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtuw2p%XH", { XM, EXxh, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP6_13 */
|
|
||||||
{
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP6_13_P_0) },
|
|
||||||
+ { "vcvts%XH2ss", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP6_13_P_2) },
|
|
||||||
+ { "vcvtp%XH2psx", { XM, EXxmmqh, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP6_56 */
|
|
||||||
{
|
|
||||||
diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h
|
|
||||||
index 62c3d3b9afb..fc0a0791d1d 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-w.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-w.h
|
|
||||||
@@ -550,19 +550,11 @@
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vpermilpd", { XM, EXx, Ib }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F3A08 */
|
|
||||||
- {
|
|
||||||
- { PREFIX_TABLE (PREFIX_EVEX_0F3A08_W_0) },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F3A09 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vrndscalepd", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F3A0A */
|
|
||||||
- {
|
|
||||||
- { PREFIX_TABLE (PREFIX_EVEX_0F3A0A_W_0) },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F3A0B */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -636,62 +628,13 @@
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vpshrdw", { XM, Vex, EXx, Ib }, 0 },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_MAP5_5A */
|
|
||||||
- {
|
|
||||||
- { PREFIX_TABLE (PREFIX_EVEX_MAP5_5A_W_0) },
|
|
||||||
- { PREFIX_TABLE (PREFIX_EVEX_MAP5_5A_W_1) },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP5_5B */
|
|
||||||
- {
|
|
||||||
- { PREFIX_TABLE (PREFIX_EVEX_MAP5_5B_W_0) },
|
|
||||||
- { PREFIX_TABLE (PREFIX_EVEX_MAP5_5B_W_1) },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP5_78_P_0 */
|
|
||||||
- {
|
|
||||||
- { "vcvttph2udq", { XM, EXxmmqh, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP5_78_P_2 */
|
|
||||||
- {
|
|
||||||
- { "vcvttph2uqq", { XM, EXxmmqdh, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP5_79_P_0 */
|
|
||||||
- {
|
|
||||||
- { "vcvtph2udq", { XM, EXxmmqh, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP5_79_P_2 */
|
|
||||||
+ /* EVEX_W_MAP5_5B_P_0 */
|
|
||||||
{
|
|
||||||
- { "vcvtph2uqq", { XM, EXxmmqdh, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP5_7A_P_2 */
|
|
||||||
- {
|
|
||||||
- { "vcvttph2qq", { XM, EXxmmqdh, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvtdq2ph%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtqq2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* EVEX_W_MAP5_7A_P_3 */
|
|
||||||
{
|
|
||||||
{ "vcvtudq2ph%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
|
|
||||||
{ "vcvtuqq2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_MAP5_7B_P_2 */
|
|
||||||
- {
|
|
||||||
- { "vcvtph2qq", { XM, EXxmmqdh, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP5_7C_P_0 */
|
|
||||||
- {
|
|
||||||
- { "vcvttph2uw", { XM, EXxh, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP5_7C_P_2 */
|
|
||||||
- {
|
|
||||||
- { "vcvttph2w", { XM, EXxh, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP5_7D */
|
|
||||||
- {
|
|
||||||
- { PREFIX_TABLE (PREFIX_EVEX_MAP5_7D_W_0) },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP6_13_P_0 */
|
|
||||||
- {
|
|
||||||
- { "vcvtsh2ss", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_MAP6_13_P_2 */
|
|
||||||
- {
|
|
||||||
- { "vcvtph2psx", { XM, EXxmmqh, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
|
|
||||||
index d79c78c1793..11cc257bb2e 100644
|
|
||||||
--- a/opcodes/i386-dis-evex.h
|
|
||||||
+++ b/opcodes/i386-dis-evex.h
|
|
||||||
@@ -593,9 +593,9 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
/* 08 */
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F3A08) },
|
|
||||||
+ { PREFIX_TABLE (PREFIX_EVEX_0F3A08) },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F3A09) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F3A0A) },
|
|
||||||
+ { PREFIX_TABLE (PREFIX_EVEX_0F3A0A) },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F3A0B) },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -976,8 +976,8 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
/* 58 */
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_58) },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_59) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_5A) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_5B) },
|
|
||||||
+ { PREFIX_TABLE (PREFIX_EVEX_MAP5_5A) },
|
|
||||||
+ { PREFIX_TABLE (PREFIX_EVEX_MAP5_5B) },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_5C) },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_5D) },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_5E) },
|
|
||||||
@@ -1015,7 +1015,7 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_7A) },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_7B) },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_MAP5_7C) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_MAP5_7D) },
|
|
||||||
+ { PREFIX_TABLE (PREFIX_EVEX_MAP5_7D) },
|
|
||||||
{ "vmovw", { Edw, XMScalar }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
/* 80 */
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index 4e0e1559339..afc3743e4e8 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -1212,8 +1212,8 @@ enum
|
|
||||||
PREFIX_EVEX_0F38AA,
|
|
||||||
PREFIX_EVEX_0F38AB,
|
|
||||||
|
|
||||||
- PREFIX_EVEX_0F3A08_W_0,
|
|
||||||
- PREFIX_EVEX_0F3A0A_W_0,
|
|
||||||
+ PREFIX_EVEX_0F3A08,
|
|
||||||
+ PREFIX_EVEX_0F3A0A,
|
|
||||||
PREFIX_EVEX_0F3A26,
|
|
||||||
PREFIX_EVEX_0F3A27,
|
|
||||||
PREFIX_EVEX_0F3A56,
|
|
||||||
@@ -1233,10 +1233,8 @@ enum
|
|
||||||
PREFIX_EVEX_MAP5_51,
|
|
||||||
PREFIX_EVEX_MAP5_58,
|
|
||||||
PREFIX_EVEX_MAP5_59,
|
|
||||||
- PREFIX_EVEX_MAP5_5A_W_0,
|
|
||||||
- PREFIX_EVEX_MAP5_5A_W_1,
|
|
||||||
- PREFIX_EVEX_MAP5_5B_W_0,
|
|
||||||
- PREFIX_EVEX_MAP5_5B_W_1,
|
|
||||||
+ PREFIX_EVEX_MAP5_5A,
|
|
||||||
+ PREFIX_EVEX_MAP5_5B,
|
|
||||||
PREFIX_EVEX_MAP5_5C,
|
|
||||||
PREFIX_EVEX_MAP5_5D,
|
|
||||||
PREFIX_EVEX_MAP5_5E,
|
|
||||||
@@ -1246,7 +1244,7 @@ enum
|
|
||||||
PREFIX_EVEX_MAP5_7A,
|
|
||||||
PREFIX_EVEX_MAP5_7B,
|
|
||||||
PREFIX_EVEX_MAP5_7C,
|
|
||||||
- PREFIX_EVEX_MAP5_7D_W_0,
|
|
||||||
+ PREFIX_EVEX_MAP5_7D,
|
|
||||||
|
|
||||||
PREFIX_EVEX_MAP6_13,
|
|
||||||
PREFIX_EVEX_MAP6_56,
|
|
||||||
@@ -1746,9 +1744,7 @@ enum
|
|
||||||
EVEX_W_0F3883,
|
|
||||||
|
|
||||||
EVEX_W_0F3A05,
|
|
||||||
- EVEX_W_0F3A08,
|
|
||||||
EVEX_W_0F3A09,
|
|
||||||
- EVEX_W_0F3A0A,
|
|
||||||
EVEX_W_0F3A0B,
|
|
||||||
EVEX_W_0F3A18_L_n,
|
|
||||||
EVEX_W_0F3A19_L_n,
|
|
||||||
@@ -1765,21 +1761,8 @@ enum
|
|
||||||
EVEX_W_0F3A70,
|
|
||||||
EVEX_W_0F3A72,
|
|
||||||
|
|
||||||
- EVEX_W_MAP5_5A,
|
|
||||||
- EVEX_W_MAP5_5B,
|
|
||||||
- EVEX_W_MAP5_78_P_0,
|
|
||||||
- EVEX_W_MAP5_78_P_2,
|
|
||||||
- EVEX_W_MAP5_79_P_0,
|
|
||||||
- EVEX_W_MAP5_79_P_2,
|
|
||||||
- EVEX_W_MAP5_7A_P_2,
|
|
||||||
+ EVEX_W_MAP5_5B_P_0,
|
|
||||||
EVEX_W_MAP5_7A_P_3,
|
|
||||||
- EVEX_W_MAP5_7B_P_2,
|
|
||||||
- EVEX_W_MAP5_7C_P_0,
|
|
||||||
- EVEX_W_MAP5_7C_P_2,
|
|
||||||
- EVEX_W_MAP5_7D,
|
|
||||||
-
|
|
||||||
- EVEX_W_MAP6_13_P_0,
|
|
||||||
- EVEX_W_MAP6_13_P_2,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef void (*op_rtn) (instr_info *ins, int bytemode, int sizeflag);
|
|
||||||
@@ -1840,7 +1823,9 @@ struct dis386 {
|
|
||||||
"XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
|
|
||||||
register operands and no broadcast.
|
|
||||||
"XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
|
|
||||||
+ "XD" => print 'd' if EVEX.W=1, EVEX.W=0 is not a valid encoding
|
|
||||||
"XH" => print 'h' if EVEX.W=0, EVEX.W=1 is not a valid encoding (for FP16)
|
|
||||||
+ "XS" => print 's' if EVEX.W=0, EVEX.W=1 is not a valid encoding
|
|
||||||
"XV" => print "{vex3}" pseudo prefix
|
|
||||||
"LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand, cond
|
|
||||||
being false, or no operand at all in 64bit mode, or if suffix_always
|
|
||||||
@@ -10496,6 +10481,23 @@ putop (instr_info *ins, const char *in_template, int sizeflag)
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'D':
|
|
||||||
+ if (l == 1)
|
|
||||||
+ {
|
|
||||||
+ switch (last[0])
|
|
||||||
+ {
|
|
||||||
+ case 'X':
|
|
||||||
+ if (ins->vex.w)
|
|
||||||
+ *ins->obufp++ = 'd';
|
|
||||||
+ else
|
|
||||||
+ oappend (ins, "{bad}");
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ abort ();
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ if (l)
|
|
||||||
+ abort ();
|
|
||||||
if (ins->intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
|
|
||||||
break;
|
|
||||||
USED_REX (REX_W);
|
|
||||||
@@ -10582,13 +10584,7 @@ putop (instr_info *ins, const char *in_template, int sizeflag)
|
|
||||||
if (ins->vex.w == 0)
|
|
||||||
*ins->obufp++ = 'h';
|
|
||||||
else
|
|
||||||
- {
|
|
||||||
- *ins->obufp++ = '{';
|
|
||||||
- *ins->obufp++ = 'b';
|
|
||||||
- *ins->obufp++ = 'a';
|
|
||||||
- *ins->obufp++ = 'd';
|
|
||||||
- *ins->obufp++ = '}';
|
|
||||||
- }
|
|
||||||
+ oappend (ins, "{bad}");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
abort ();
|
|
||||||
@@ -10752,9 +10748,13 @@ putop (instr_info *ins, const char *in_template, int sizeflag)
|
|
||||||
ins->used_prefixes |= (ins->prefixes & PREFIX_DATA);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
- else if (l == 1 && last[0] == 'L')
|
|
||||||
+ if (l != 1)
|
|
||||||
+ abort ();
|
|
||||||
+ switch (last[0])
|
|
||||||
{
|
|
||||||
+ case 'L':
|
|
||||||
if (ins->address_mode == mode_64bit
|
|
||||||
&& !(ins->prefixes & PREFIX_ADDR))
|
|
||||||
{
|
|
||||||
@@ -10764,9 +10764,15 @@ putop (instr_info *ins, const char *in_template, int sizeflag)
|
|
||||||
}
|
|
||||||
|
|
||||||
goto case_S;
|
|
||||||
+ case 'X':
|
|
||||||
+ if (!ins->vex.w)
|
|
||||||
+ *ins->obufp++ = 's';
|
|
||||||
+ else
|
|
||||||
+ oappend (ins, "{bad}");
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ abort ();
|
|
||||||
}
|
|
||||||
- else
|
|
||||||
- abort ();
|
|
||||||
break;
|
|
||||||
case 'V':
|
|
||||||
if (l == 0)
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,600 +0,0 @@
|
|||||||
From 740a1e791175987e28cc39dbd11e3fc152ffc40b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Fri, 14 Jan 2022 10:54:55 +0100
|
|
||||||
Subject: [PATCH] x86: reduce AVX512 FP set of insns decoded through
|
|
||||||
vex_w_table[]
|
|
||||||
|
|
||||||
Like for AVX512-FP16, there's not that many FP insns where going through
|
|
||||||
this table is easier / cheaper than using suitable macros. Utilize %XS
|
|
||||||
and %XD more to eliminate a fair number of table entries.
|
|
||||||
|
|
||||||
While doing this I noticed a few anomalies. Where lines get touched /
|
|
||||||
moved anyway, these are being addressed right here:
|
|
||||||
- vmovshdup used EXx for its 2nd operand, thus displaying seemingly
|
|
||||||
valid broadcast when EVEX.b is set with a memory operand; use
|
|
||||||
EXEvexXNoBcst instead just like vmovsldup already does
|
|
||||||
- vmovlhps used EXx for its 3rd operand, when all sibling entries use
|
|
||||||
EXq; switch to EXq there for consistency (the two differ only for
|
|
||||||
memory operands)
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis-evex-mod.h b/opcodes/i386-dis-evex-mod.h
|
|
||||||
index 7a372ce8c0b..2d35bf2a589 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-mod.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-mod.h
|
|
||||||
@@ -1,7 +1,7 @@
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F12_PREFIX_0 */
|
|
||||||
{ "vmovlpX", { XMM, Vex, EXq }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F12_P_0_M_1) },
|
|
||||||
+ { "vmovhlp%XS", { XMM, Vex, EXq }, 0 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F12_PREFIX_2 */
|
|
||||||
@@ -14,7 +14,7 @@
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F16_PREFIX_0 */
|
|
||||||
{ "vmovhpX", { XMM, Vex, EXq }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F16_P_0_M_1) },
|
|
||||||
+ { "vmovlhp%XS", { XMM, Vex, EXq }, 0 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* MOD_EVEX_0F16_PREFIX_2 */
|
|
||||||
diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
index 64a43ce02a1..fc5439a1fec 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-prefix.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
@@ -1,28 +1,28 @@
|
|
||||||
/* PREFIX_EVEX_0F10 */
|
|
||||||
{
|
|
||||||
{ "vmovupX", { XM, EXEvexXNoBcst }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F10_P_1) },
|
|
||||||
+ { "vmovs%XS", { XMScalar, VexScalarR, EXd }, 0 },
|
|
||||||
{ "vmovupX", { XM, EXEvexXNoBcst }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F10_P_3) },
|
|
||||||
+ { "vmovs%XD", { XMScalar, VexScalarR, EXq }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F11 */
|
|
||||||
{
|
|
||||||
{ "vmovupX", { EXxS, XM }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F11_P_1) },
|
|
||||||
+ { "vmovs%XS", { EXdS, VexScalarR, XMScalar }, 0 },
|
|
||||||
{ "vmovupX", { EXxS, XM }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F11_P_3) },
|
|
||||||
+ { "vmovs%XD", { EXqS, VexScalarR, XMScalar }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F12 */
|
|
||||||
{
|
|
||||||
{ MOD_TABLE (MOD_EVEX_0F12_PREFIX_0) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F12_P_1) },
|
|
||||||
+ { "vmov%XSldup", { XM, EXEvexXNoBcst }, 0 },
|
|
||||||
{ MOD_TABLE (MOD_EVEX_0F12_PREFIX_2) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F12_P_3) },
|
|
||||||
+ { "vmov%XDdup", { XM, EXymmq }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F16 */
|
|
||||||
{
|
|
||||||
{ MOD_TABLE (MOD_EVEX_0F16_PREFIX_0) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F16_P_1) },
|
|
||||||
+ { "vmov%XShdup", { XM, EXEvexXNoBcst }, 0 },
|
|
||||||
{ MOD_TABLE (MOD_EVEX_0F16_PREFIX_2) },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F2A */
|
|
||||||
@@ -35,64 +35,64 @@
|
|
||||||
/* PREFIX_EVEX_0F51 */
|
|
||||||
{
|
|
||||||
{ "vsqrtpX", { XM, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F51_P_1) },
|
|
||||||
+ { "vsqrts%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
{ "vsqrtpX", { XM, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F51_P_3) },
|
|
||||||
+ { "vsqrts%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F58 */
|
|
||||||
{
|
|
||||||
{ "vaddpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F58_P_1) },
|
|
||||||
+ { "vadds%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
{ "vaddpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F58_P_3) },
|
|
||||||
+ { "vadds%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F59 */
|
|
||||||
{
|
|
||||||
{ "vmulpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F59_P_1) },
|
|
||||||
+ { "vmuls%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
{ "vmulpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F59_P_3) },
|
|
||||||
+ { "vmuls%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F5A */
|
|
||||||
{
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5A_P_0) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5A_P_1) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5A_P_2) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5A_P_3) },
|
|
||||||
+ { "vcvtp%XS2pd", { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvts%XS2sd", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvtp%XD2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvts%XD2ss", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F5B */
|
|
||||||
{
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F5B_P_0) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5B_P_1) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5B_P_2) },
|
|
||||||
+ { "vcvttp%XS2dq", { XM, EXx, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvtp%XS2dq", { XM, EXx, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F5C */
|
|
||||||
{
|
|
||||||
{ "vsubpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5C_P_1) },
|
|
||||||
+ { "vsubs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
{ "vsubpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5C_P_3) },
|
|
||||||
+ { "vsubs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F5D */
|
|
||||||
{
|
|
||||||
{ "vminpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5D_P_1) },
|
|
||||||
+ { "vmins%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
|
|
||||||
{ "vminpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5D_P_3) },
|
|
||||||
+ { "vmins%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F5E */
|
|
||||||
{
|
|
||||||
{ "vdivpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5E_P_1) },
|
|
||||||
+ { "vdivs%XS", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
{ "vdivpX", { XM, Vex, EXx, EXxEVexR }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5E_P_3) },
|
|
||||||
+ { "vdivs%XD", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F5F */
|
|
||||||
{
|
|
||||||
{ "vmaxpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5F_P_1) },
|
|
||||||
+ { "vmaxs%XS", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
|
|
||||||
{ "vmaxpX", { XM, Vex, EXx, EXxEVexS }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F5F_P_3) },
|
|
||||||
+ { "vmaxs%XD", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F6F */
|
|
||||||
{
|
|
||||||
@@ -152,16 +152,16 @@
|
|
||||||
/* PREFIX_EVEX_0FC2 */
|
|
||||||
{
|
|
||||||
{ "vcmppX", { MaskG, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0FC2_P_1) },
|
|
||||||
+ { "vcmps%XS", { MaskG, VexScalar, EXd, EXxEVexS, CMP }, 0 },
|
|
||||||
{ "vcmppX", { MaskG, Vex, EXx, EXxEVexS, CMP }, PREFIX_OPCODE },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0FC2_P_3) },
|
|
||||||
+ { "vcmps%XD", { MaskG, VexScalar, EXq, EXxEVexS, CMP }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0FE6 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0FE6_P_1) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0FE6_P_2) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0FE6_P_3) },
|
|
||||||
+ { "vcvttp%XD2dq%XY", { XMxmmq, EXx, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvtp%XD2dq%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F3810 */
|
|
||||||
{
|
|
||||||
@@ -185,7 +185,7 @@
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F3813_P_1) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F3813_P_2) },
|
|
||||||
+ { "vcvtph2p%XS", { XM, EXxmmq, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F3814 */
|
|
||||||
{
|
|
||||||
@@ -322,7 +322,7 @@
|
|
||||||
/* PREFIX_EVEX_0F3852 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F3852_P_1) },
|
|
||||||
+ { "vdpbf16p%XS", { XM, Vex, EXx }, 0 },
|
|
||||||
{ "vpdpwssd", { XM, Vex, EXx }, 0 },
|
|
||||||
{ "vp4dpwssd", { XM, Vex, EXxmm }, 0 },
|
|
||||||
},
|
|
||||||
@@ -343,9 +343,9 @@
|
|
||||||
/* PREFIX_EVEX_0F3872 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F3872_P_1) },
|
|
||||||
+ { "vcvtnep%XS2bf16%XY", { XMxmmq, EXx }, 0 },
|
|
||||||
{ VEX_W_TABLE (EVEX_W_0F3872_P_2) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F3872_P_3) },
|
|
||||||
+ { "vcvtne2p%XS2bf16", { XM, Vex, EXx}, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_0F389A */
|
|
||||||
{
|
|
||||||
diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h
|
|
||||||
index fc0a0791d1d..9b4bb6a2924 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-w.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-w.h
|
|
||||||
@@ -1,136 +1,8 @@
|
|
||||||
- /* EVEX_W_0F10_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vmovss", { XMScalar, VexScalarR, EXd }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F10_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vmovsd", { XMScalar, VexScalarR, EXq }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F11_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vmovss", { EXdS, VexScalarR, XMScalar }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F11_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vmovsd", { EXqS, VexScalarR, XMScalar }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F12_P_0_M_1 */
|
|
||||||
- {
|
|
||||||
- { "vmovhlps", { XMM, Vex, EXq }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F12_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vmovsldup", { XM, EXEvexXNoBcst }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F12_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vmovddup", { XM, EXymmq }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F16_P_0_M_1 */
|
|
||||||
- {
|
|
||||||
- { "vmovlhps", { XMM, Vex, EXx }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F16_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vmovshdup", { XM, EXx }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F51_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vsqrtss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F51_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vsqrtsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F58_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vaddss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F58_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vaddsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F59_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vmulss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F59_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vmulsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5A_P_0 */
|
|
||||||
- {
|
|
||||||
- { "vcvtps2pd", { XM, EXEvexHalfBcstXmmq, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5A_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vcvtss2sd", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5A_P_2 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vcvtpd2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5A_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vcvtsd2ss", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F5B_P_0 */
|
|
||||||
{
|
|
||||||
{ "vcvtdq2ps", { XM, EXx, EXxEVexR }, 0 },
|
|
||||||
{ "vcvtqq2ps%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F5B_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vcvttps2dq", { XM, EXx, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5B_P_2 */
|
|
||||||
- {
|
|
||||||
- { "vcvtps2dq", { XM, EXx, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5C_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vsubss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5C_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vsubsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5D_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vminss", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5D_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vminsd", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5E_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vdivss", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5E_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vdivsd", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5F_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vmaxss", { XMScalar, VexScalar, EXd, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F5F_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vmaxsd", { XMScalar, VexScalar, EXq, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F62 */
|
|
||||||
{
|
|
||||||
{ "vpunpckldq", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
@@ -258,15 +130,6 @@
|
|
||||||
{ "vmovdqu8", { EXxS, XM }, 0 },
|
|
||||||
{ "vmovdqu16", { EXxS, XM }, 0 },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0FC2_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vcmpss", { MaskG, VexScalar, EXd, EXxEVexS, CMP }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0FC2_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vcmpsd", { MaskG, VexScalar, EXq, EXxEVexS, CMP }, 0 },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0FD2 */
|
|
||||||
{
|
|
||||||
{ "vpsrld", { XM, Vex, EXxmm }, PREFIX_DATA },
|
|
||||||
@@ -291,16 +154,6 @@
|
|
||||||
{ "vcvtdq2pd", { XM, EXEvexHalfBcstXmmq }, 0 },
|
|
||||||
{ "vcvtqq2pd", { XM, EXx, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0FE6_P_2 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vcvttpd2dq%XY", { XMxmmq, EXx, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0FE6_P_3 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vcvtpd2dq%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0FE7 */
|
|
||||||
{
|
|
||||||
{ "vmovntdq", { EXEvexXNoBcst, XM }, PREFIX_DATA },
|
|
||||||
@@ -332,11 +185,6 @@
|
|
||||||
{
|
|
||||||
{ "vpaddd", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F380D */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vpermilpd", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F3810_P_1 */
|
|
||||||
{
|
|
||||||
{ "vpmovuswb", { EXxmmq, XM }, 0 },
|
|
||||||
@@ -368,10 +216,6 @@
|
|
||||||
{
|
|
||||||
{ "vpmovusdw", { EXxmmq, XM }, 0 },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F3813_P_2 */
|
|
||||||
- {
|
|
||||||
- { "vcvtph2ps", { XM, EXxmmq, EXxEVexS }, 0 },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F3814_P_1 */
|
|
||||||
{
|
|
||||||
{ "vpmovusqw", { EXxmmqd, XM }, 0 },
|
|
||||||
@@ -492,11 +336,6 @@
|
|
||||||
{
|
|
||||||
{ MOD_TABLE (MOD_EVEX_0F383A_P_1_W_0) },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F3852_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vdpbf16ps", { XM, Vex, EXx }, 0 },
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F3859 */
|
|
||||||
{
|
|
||||||
{ "vbroadcasti32x2", { XM, EXq }, PREFIX_DATA },
|
|
||||||
@@ -517,21 +356,11 @@
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vpshldvw", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F3872_P_1 */
|
|
||||||
- {
|
|
||||||
- { "vcvtneps2bf16%XY", { XMxmmq, EXx }, 0 },
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F3872_P_2 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vpshrdvw", { XM, Vex, EXx }, 0 },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F3872_P_3 */
|
|
||||||
- {
|
|
||||||
- { "vcvtne2ps2bf16", { XM, Vex, EXx}, 0 },
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F387A */
|
|
||||||
{
|
|
||||||
{ MOD_TABLE (MOD_EVEX_0F387A_W_0) },
|
|
||||||
@@ -545,21 +374,6 @@
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vpmultishiftqb", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
},
|
|
||||||
- /* EVEX_W_0F3A05 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vpermilpd", { XM, EXx, Ib }, PREFIX_DATA },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F3A09 */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vrndscalepd", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
- },
|
|
||||||
- /* EVEX_W_0F3A0B */
|
|
||||||
- {
|
|
||||||
- { Bad_Opcode },
|
|
||||||
- { "vrndscalesd", { XMScalar, VexScalar, EXq, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
- },
|
|
||||||
/* EVEX_W_0F3A18_L_n */
|
|
||||||
{
|
|
||||||
{ "vinsertf32x4", { XM, Vex, EXxmm, Ib }, PREFIX_DATA },
|
|
||||||
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
|
|
||||||
index 11cc257bb2e..5d621cf1557 100644
|
|
||||||
--- a/opcodes/i386-dis-evex.h
|
|
||||||
+++ b/opcodes/i386-dis-evex.h
|
|
||||||
@@ -307,7 +307,7 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vpmulhrsw", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
{ VEX_W_TABLE (VEX_W_0F380C) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F380D) },
|
|
||||||
+ { "vpermilp%XD", { XM, Vex, EXx }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
/* 10 */
|
|
||||||
@@ -589,14 +589,14 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "valign%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA },
|
|
||||||
{ VEX_W_TABLE (VEX_W_0F3A04) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F3A05) },
|
|
||||||
+ { "vpermilp%XD", { XM, EXx, Ib }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
/* 08 */
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_0F3A08) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F3A09) },
|
|
||||||
+ { "vrndscalep%XD", { XM, EXx, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
{ PREFIX_TABLE (PREFIX_EVEX_0F3A0A) },
|
|
||||||
- { VEX_W_TABLE (EVEX_W_0F3A0B) },
|
|
||||||
+ { "vrndscales%XD", { XMScalar, VexScalar, EXq, EXxEVexS, Ib }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
|
|
||||||
index afc3743e4e8..ad560b1899c 100644
|
|
||||||
--- a/opcodes/i386-dis.c
|
|
||||||
+++ b/opcodes/i386-dis.c
|
|
||||||
@@ -1621,36 +1621,7 @@ enum
|
|
||||||
VEX_W_0FXOP_09_E2_L_0,
|
|
||||||
VEX_W_0FXOP_09_E3_L_0,
|
|
||||||
|
|
||||||
- EVEX_W_0F10_P_1,
|
|
||||||
- EVEX_W_0F10_P_3,
|
|
||||||
- EVEX_W_0F11_P_1,
|
|
||||||
- EVEX_W_0F11_P_3,
|
|
||||||
- EVEX_W_0F12_P_0_M_1,
|
|
||||||
- EVEX_W_0F12_P_1,
|
|
||||||
- EVEX_W_0F12_P_3,
|
|
||||||
- EVEX_W_0F16_P_0_M_1,
|
|
||||||
- EVEX_W_0F16_P_1,
|
|
||||||
- EVEX_W_0F51_P_1,
|
|
||||||
- EVEX_W_0F51_P_3,
|
|
||||||
- EVEX_W_0F58_P_1,
|
|
||||||
- EVEX_W_0F58_P_3,
|
|
||||||
- EVEX_W_0F59_P_1,
|
|
||||||
- EVEX_W_0F59_P_3,
|
|
||||||
- EVEX_W_0F5A_P_0,
|
|
||||||
- EVEX_W_0F5A_P_1,
|
|
||||||
- EVEX_W_0F5A_P_2,
|
|
||||||
- EVEX_W_0F5A_P_3,
|
|
||||||
EVEX_W_0F5B_P_0,
|
|
||||||
- EVEX_W_0F5B_P_1,
|
|
||||||
- EVEX_W_0F5B_P_2,
|
|
||||||
- EVEX_W_0F5C_P_1,
|
|
||||||
- EVEX_W_0F5C_P_3,
|
|
||||||
- EVEX_W_0F5D_P_1,
|
|
||||||
- EVEX_W_0F5D_P_3,
|
|
||||||
- EVEX_W_0F5E_P_1,
|
|
||||||
- EVEX_W_0F5E_P_3,
|
|
||||||
- EVEX_W_0F5F_P_1,
|
|
||||||
- EVEX_W_0F5F_P_3,
|
|
||||||
EVEX_W_0F62,
|
|
||||||
EVEX_W_0F66,
|
|
||||||
EVEX_W_0F6A,
|
|
||||||
@@ -1678,15 +1649,11 @@ enum
|
|
||||||
EVEX_W_0F7F_P_1,
|
|
||||||
EVEX_W_0F7F_P_2,
|
|
||||||
EVEX_W_0F7F_P_3,
|
|
||||||
- EVEX_W_0FC2_P_1,
|
|
||||||
- EVEX_W_0FC2_P_3,
|
|
||||||
EVEX_W_0FD2,
|
|
||||||
EVEX_W_0FD3,
|
|
||||||
EVEX_W_0FD4,
|
|
||||||
EVEX_W_0FD6,
|
|
||||||
EVEX_W_0FE6_P_1,
|
|
||||||
- EVEX_W_0FE6_P_2,
|
|
||||||
- EVEX_W_0FE6_P_3,
|
|
||||||
EVEX_W_0FE7,
|
|
||||||
EVEX_W_0FF2,
|
|
||||||
EVEX_W_0FF3,
|
|
||||||
@@ -1694,7 +1661,7 @@ enum
|
|
||||||
EVEX_W_0FFA,
|
|
||||||
EVEX_W_0FFB,
|
|
||||||
EVEX_W_0FFE,
|
|
||||||
- EVEX_W_0F380D,
|
|
||||||
+
|
|
||||||
EVEX_W_0F3810_P_1,
|
|
||||||
EVEX_W_0F3810_P_2,
|
|
||||||
EVEX_W_0F3811_P_1,
|
|
||||||
@@ -1702,7 +1669,6 @@ enum
|
|
||||||
EVEX_W_0F3812_P_1,
|
|
||||||
EVEX_W_0F3812_P_2,
|
|
||||||
EVEX_W_0F3813_P_1,
|
|
||||||
- EVEX_W_0F3813_P_2,
|
|
||||||
EVEX_W_0F3814_P_1,
|
|
||||||
EVEX_W_0F3815_P_1,
|
|
||||||
EVEX_W_0F3819_L_n,
|
|
||||||
@@ -1731,21 +1697,15 @@ enum
|
|
||||||
EVEX_W_0F3835_P_2,
|
|
||||||
EVEX_W_0F3837,
|
|
||||||
EVEX_W_0F383A_P_1,
|
|
||||||
- EVEX_W_0F3852_P_1,
|
|
||||||
EVEX_W_0F3859,
|
|
||||||
EVEX_W_0F385A_M_0_L_n,
|
|
||||||
EVEX_W_0F385B_M_0_L_2,
|
|
||||||
EVEX_W_0F3870,
|
|
||||||
- EVEX_W_0F3872_P_1,
|
|
||||||
EVEX_W_0F3872_P_2,
|
|
||||||
- EVEX_W_0F3872_P_3,
|
|
||||||
EVEX_W_0F387A,
|
|
||||||
EVEX_W_0F387B,
|
|
||||||
EVEX_W_0F3883,
|
|
||||||
|
|
||||||
- EVEX_W_0F3A05,
|
|
||||||
- EVEX_W_0F3A09,
|
|
||||||
- EVEX_W_0F3A0B,
|
|
||||||
EVEX_W_0F3A18_L_n,
|
|
||||||
EVEX_W_0F3A19_L_n,
|
|
||||||
EVEX_W_0F3A1A_L_2,
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,204 +0,0 @@
|
|||||||
From 928c8d70c82feea45683b43e324cd2079d4ee31d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Fri, 14 Jan 2022 10:55:42 +0100
|
|
||||||
Subject: [PATCH] x86: consistently use scalar_mode for AVX512-FP16 scalar
|
|
||||||
insns
|
|
||||||
|
|
||||||
For some reason the original AVFX512F insns were not taken as a basis
|
|
||||||
here, causing unnecessary divergence. While not an active issue, it is
|
|
||||||
still relevant to note that OP_XMM() has special treatment of e.g.
|
|
||||||
scalar_mode (marking broadcast as invalid). Such would better be
|
|
||||||
consistent for all sufficiently similar insns.
|
|
||||||
|
|
||||||
diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
index fc5439a1fec..140c4e850b4 100644
|
|
||||||
--- a/opcodes/i386-dis-evex-prefix.h
|
|
||||||
+++ b/opcodes/i386-dis-evex-prefix.h
|
|
||||||
@@ -440,7 +440,7 @@
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_1D */
|
|
||||||
{
|
|
||||||
- { "vcvtss2s%XH", { XMM, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvtss2s%XH", { XMScalar, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vcvtps2p%XHx%XY", { XMxmmq, EXx, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
@@ -470,24 +470,24 @@
|
|
||||||
/* PREFIX_EVEX_MAP5_51 */
|
|
||||||
{
|
|
||||||
{ "vsqrtp%XH", { XM, EXxh, EXxEVexR }, 0 },
|
|
||||||
- { "vsqrts%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
+ { "vsqrts%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_58 */
|
|
||||||
{
|
|
||||||
{ "vaddp%XH", { XM, Vex, EXxh, EXxEVexR }, 0 },
|
|
||||||
- { "vadds%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
+ { "vadds%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_59 */
|
|
||||||
{
|
|
||||||
{ "vmulp%XH", { XM, Vex, EXxh, EXxEVexR }, 0 },
|
|
||||||
- { "vmuls%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
+ { "vmuls%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_5A */
|
|
||||||
{
|
|
||||||
{ "vcvtp%XH2pd", { XM, EXxmmqdh, EXxEVexS }, 0 },
|
|
||||||
- { "vcvts%XH2sd", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvts%XH2sd", { XMScalar, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
{ "vcvtp%XD2ph%XZ", { XMM, EXx, EXxEVexR }, 0 },
|
|
||||||
- { "vcvts%XD2sh", { XMM, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
+ { "vcvts%XD2sh", { XMScalar, VexScalar, EXq, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_5B */
|
|
||||||
{
|
|
||||||
@@ -498,22 +498,22 @@
|
|
||||||
/* PREFIX_EVEX_MAP5_5C */
|
|
||||||
{
|
|
||||||
{ "vsubp%XH", { XM, Vex, EXxh, EXxEVexR }, 0 },
|
|
||||||
- { "vsubs%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
+ { "vsubs%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_5D */
|
|
||||||
{
|
|
||||||
{ "vminp%XH", { XM, Vex, EXxh, EXxEVexS }, 0 },
|
|
||||||
- { "vmins%XH", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
+ { "vmins%XH", { XMScalar, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_5E */
|
|
||||||
{
|
|
||||||
{ "vdivp%XH", { XM, Vex, EXxh, EXxEVexR }, 0 },
|
|
||||||
- { "vdivs%XH", { XMM, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
+ { "vdivs%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_5F */
|
|
||||||
{
|
|
||||||
{ "vmaxp%XH", { XM, Vex, EXxh, EXxEVexS }, 0 },
|
|
||||||
- { "vmaxs%XH", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
+ { "vmaxs%XH", { XMScalar, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP5_78 */
|
|
||||||
{
|
|
||||||
@@ -555,7 +555,7 @@
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP6_13 */
|
|
||||||
{
|
|
||||||
- { "vcvts%XH2ss", { XMM, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
+ { "vcvts%XH2ss", { XMScalar, VexScalar, EXw, EXxEVexS }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vcvtp%XH2psx", { XM, EXxmmqh, EXxEVexS }, 0 },
|
|
||||||
},
|
|
||||||
@@ -569,9 +569,9 @@
|
|
||||||
/* PREFIX_EVEX_MAP6_57 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vfmaddcs%XH", { { DistinctDest_Fixup, xmm_mode }, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
+ { "vfmaddcs%XH", { { DistinctDest_Fixup, scalar_mode }, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vfcmaddcs%XH", { { DistinctDest_Fixup, xmm_mode }, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
+ { "vfcmaddcs%XH", { { DistinctDest_Fixup, scalar_mode }, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
/* PREFIX_EVEX_MAP6_D6 */
|
|
||||||
{
|
|
||||||
@@ -583,7 +583,7 @@
|
|
||||||
/* PREFIX_EVEX_MAP6_D7 */
|
|
||||||
{
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vfmulcs%XH", { { DistinctDest_Fixup, xmm_mode }, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
+ { "vfmulcs%XH", { { DistinctDest_Fixup, scalar_mode }, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
- { "vfcmulcs%XH", { { DistinctDest_Fixup, xmm_mode }, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
+ { "vfcmulcs%XH", { { DistinctDest_Fixup, scalar_mode }, VexScalar, EXd, EXxEVexR }, 0 },
|
|
||||||
},
|
|
||||||
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
|
|
||||||
index 5d621cf1557..fe39026a871 100644
|
|
||||||
--- a/opcodes/i386-dis-evex.h
|
|
||||||
+++ b/opcodes/i386-dis-evex.h
|
|
||||||
@@ -1216,7 +1216,7 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vscalefp%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vscalefs%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vscalefs%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
/* 30 */
|
|
||||||
@@ -1241,7 +1241,7 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vgetexpp%XH", { XM, EXxh, EXxEVexS }, PREFIX_DATA },
|
|
||||||
- { "vgetexps%XH", { XMM, VexScalar, EXw, EXxEVexS }, PREFIX_DATA },
|
|
||||||
+ { "vgetexps%XH", { XMScalar, VexScalar, EXw, EXxEVexS }, PREFIX_DATA },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -1252,9 +1252,9 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ "vrcpp%XH", { XM, EXxh }, PREFIX_DATA },
|
|
||||||
- { "vrcps%XH", { XMM, VexScalar, EXw }, PREFIX_DATA },
|
|
||||||
+ { "vrcps%XH", { XMScalar, VexScalar, EXw }, PREFIX_DATA },
|
|
||||||
{ "vrsqrtp%XH", { XM, EXxh }, PREFIX_DATA },
|
|
||||||
- { "vrsqrts%XH", { XMM, VexScalar, EXw }, PREFIX_DATA },
|
|
||||||
+ { "vrsqrts%XH", { XMScalar, VexScalar, EXw }, PREFIX_DATA },
|
|
||||||
/* 50 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -1338,13 +1338,13 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ "vfmsubadd132p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* 98 */
|
|
||||||
{ "vfmadd132p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfmadd132s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfmadd132s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfmsub132p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfmsub132s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfmsub132s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfnmadd132p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmadd132s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmadd132s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfnmsub132p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmsub132s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsub132s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* A0 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -1356,13 +1356,13 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ "vfmsubadd213p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* A8 */
|
|
||||||
{ "vfmadd213p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfmadd213s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfmadd213s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfmsub213p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfmsub213s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfmsub213s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfnmadd213p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmadd213s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmadd213s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfnmsub213p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmsub213s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsub213s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* B0 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
@@ -1374,13 +1374,13 @@ static const struct dis386 evex_table[][256] = {
|
|
||||||
{ "vfmsubadd231p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* B8 */
|
|
||||||
{ "vfmadd231p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfmadd231s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfmadd231s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfmsub231p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfmsub231s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfmsub231s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfnmadd231p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmadd231s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmadd231s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
{ "vfnmsub231p%XH", { XM, Vex, EXxh, EXxEVexR }, PREFIX_DATA },
|
|
||||||
- { "vfnmsub231s%XH", { XMM, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
+ { "vfnmsub231s%XH", { XMScalar, VexScalar, EXw, EXxEVexR }, PREFIX_DATA },
|
|
||||||
/* C0 */
|
|
||||||
{ Bad_Opcode },
|
|
||||||
{ Bad_Opcode },
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
--- binutils.orig/gold/fileread.cc 2019-08-06 14:22:08.669313110 +0100
|
|
||||||
+++ binutils-2.32/gold/fileread.cc 2019-08-06 14:22:28.799177543 +0100
|
|
||||||
@@ -381,6 +381,12 @@ File_read::do_read(off_t start, section_
|
|
||||||
ssize_t bytes;
|
|
||||||
if (this->whole_file_view_ != NULL)
|
|
||||||
{
|
|
||||||
+ // See PR 23765 for an example of a testcase that triggers this error.
|
|
||||||
+ if (((ssize_t) start) < 0)
|
|
||||||
+ gold_fatal(_("%s: read failed, starting offset (%#llx) less than zero"),
|
|
||||||
+ this->filename().c_str(),
|
|
||||||
+ static_cast<long long>(start));
|
|
||||||
+
|
|
||||||
bytes = this->size_ - start;
|
|
||||||
if (static_cast<section_size_type>(bytes) >= size)
|
|
||||||
{
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
From 151f5de4a6548cd83a79b4705f1e901776ddacc5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nick Clifton <nickc@redhat.com>
|
|
||||||
Date: Thu, 28 May 2020 11:04:27 +0100
|
|
||||||
Subject: [PATCH] Fix a potential use of an uninitialised value in the ns32k
|
|
||||||
disassembler.
|
|
||||||
|
|
||||||
* ns32k-dis.c (print_insn_ns32k): Change the arg_bufs array to
|
|
||||||
static.
|
|
||||||
---
|
|
||||||
opcodes/ns32k-dis.c | 5 ++++-
|
|
||||||
1 files changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/opcodes/ns32k-dis.c b/opcodes/ns32k-dis.c
|
|
||||||
index 12df182..ccad820 100644
|
|
||||||
--- a/opcodes/ns32k-dis.c
|
|
||||||
+++ b/opcodes/ns32k-dis.c
|
|
||||||
@@ -738,7 +738,10 @@ print_insn_ns32k (bfd_vma memaddr, disassemble_info *info)
|
|
||||||
unsigned short first_word;
|
|
||||||
int ioffset; /* Bits into instruction. */
|
|
||||||
int aoffset; /* Bits into arguments. */
|
|
||||||
- char arg_bufs[MAX_ARGS+1][ARG_LEN];
|
|
||||||
+ /* The arg_bufs array is made static in order to avoid a potential
|
|
||||||
+ use of an uninitialised value if we are asekd to disassemble a
|
|
||||||
+ corrupt instruction. */
|
|
||||||
+ static char arg_bufs[MAX_ARGS+1][ARG_LEN];
|
|
||||||
int argnum;
|
|
||||||
int maxarg;
|
|
||||||
struct private priv;
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -1,64 +0,0 @@
|
|||||||
From e1184ff4d698dbb7eb06e2b3a25ccdc12acfa5fb Mon Sep 17 00:00:00 2001
|
|
||||||
From: wangding <wangding16@huawei.com>
|
|
||||||
Date: Wed, 8 Jun 2022 20:19:34 +0800
|
|
||||||
Subject: [PATCH] Fix gold linker relocation offset
|
|
||||||
|
|
||||||
---
|
|
||||||
gold/aarch64.cc | 20 ++++++++++++++++++++
|
|
||||||
1 file changed, 20 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/gold/aarch64.cc b/gold/aarch64.cc
|
|
||||||
index 07abe44931f..05d40a383e0 100644
|
|
||||||
--- a/gold/aarch64.cc
|
|
||||||
+++ b/gold/aarch64.cc
|
|
||||||
@@ -2915,6 +2915,7 @@ class Target_aarch64 : public Sized_target<size, big_endian>
|
|
||||||
Section_id_hash> AArch64_input_section_map;
|
|
||||||
typedef AArch64_insn_utilities<big_endian> Insn_utilities;
|
|
||||||
const static int TCB_SIZE = size / 8 * 2;
|
|
||||||
+ static const Address invalid_address = static_cast<Address>(-1);
|
|
||||||
|
|
||||||
Target_aarch64(const Target::Target_info* info = &aarch64_info)
|
|
||||||
: Sized_target<size, big_endian>(info),
|
|
||||||
@@ -8285,6 +8286,25 @@ Target_aarch64<size, big_endian>::relocate_relocs(
|
|
||||||
|
|
||||||
gold_assert(sh_type == elfcpp::SHT_RELA);
|
|
||||||
|
|
||||||
+ if (offset_in_output_section == this->invalid_address) {
|
|
||||||
+ const Output_relaxed_input_section* poris =
|
|
||||||
+ output_section->find_relaxed_input_section(relinfo->object,
|
|
||||||
+ relinfo->data_shndx);
|
|
||||||
+ if (poris != NULL) {
|
|
||||||
+ Address section_address = poris->address();
|
|
||||||
+ section_size_type section_size = poris->data_size();
|
|
||||||
+
|
|
||||||
+ gold_assert((section_address >= view_address)
|
|
||||||
+ && ((section_address + section_size)
|
|
||||||
+ <= (view_address + view_size)));
|
|
||||||
+
|
|
||||||
+ off_t offset = section_address - view_address;
|
|
||||||
+ view += offset;
|
|
||||||
+ view_address += offset;
|
|
||||||
+ view_size = section_size;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
gold::relocate_relocs<size, big_endian, Classify_reloc>(
|
|
||||||
relinfo,
|
|
||||||
prelocs,
|
|
||||||
|
|
||||||
diff --git a/gold/aarch64.cc b/gold/aarch64.cc
|
|
||||||
index 9f3af466..521908ff 100644
|
|
||||||
--- a/gold/aarch64.cc
|
|
||||||
+++ b/gold/aarch64.cc
|
|
||||||
@@ -1182,7 +1182,7 @@ class Reloc_stub : public Stub_base<size, big_endian>
|
|
||||||
aarch64_valid_for_adrp_p(AArch64_address location, AArch64_address dest)
|
|
||||||
{
|
|
||||||
typedef AArch64_relocate_functions<size, big_endian> Reloc;
|
|
||||||
- int64_t adrp_imm = (Reloc::Page(dest) - Reloc::Page(location)) >> 12;
|
|
||||||
+ int64_t adrp_imm = ((int64_t)(Reloc::Page(dest) - Reloc::Page(location))) >> 12;
|
|
||||||
return adrp_imm >= MIN_ADRP_IMM && adrp_imm <= MAX_ADRP_IMM;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.26.0
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,54 +0,0 @@
|
|||||||
From 70b88840a4c65c8f5e2244129487886b5a5c7664 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
|
|
||||||
Date: Tue, 28 Sep 2021 20:11:26 +0930
|
|
||||||
Subject: [PATCH] PR28391, strip/objcopy --preserve-dates *.a: cannot set time
|
|
||||||
|
|
||||||
Reference: https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=6b02746a0e29b1007efd4feb137e2da3e681fc68
|
|
||||||
|
|
||||||
After commit 985e0264516 copy_archive function began to pass invalid
|
|
||||||
values to the utimensat(2) function when it tries to preserve
|
|
||||||
timestamps in ar archives. This happens because the bfd_stat_arch_elt
|
|
||||||
implementation for ar archives fills only the st_mtim.tv_sec part of
|
|
||||||
the st_mtim timespec structure, but leaves the st_mtim.tv_nsec part
|
|
||||||
and the whole st_atim timespec untouched leaving them uninitialized
|
|
||||||
|
|
||||||
PR 28391
|
|
||||||
* ar.c (extract_file): Clear buf for preserve_dates.
|
|
||||||
* objcopy.c (copy_archive): Likewise.
|
|
||||||
|
|
||||||
(cherry picked from commit 0d62064867c74286360e821b75ef6799bedc4b34)
|
|
||||||
Signed-off-by: maminjie <maminjie8@163.com>
|
|
||||||
---
|
|
||||||
binutils/ar.c | 3 +++
|
|
||||||
binutils/objcopy.c | 1 +
|
|
||||||
2 files changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/binutils/ar.c b/binutils/ar.c
|
|
||||||
index 5d6976c7..8885585e 100644
|
|
||||||
--- a/binutils/ar.c
|
|
||||||
+++ b/binutils/ar.c
|
|
||||||
@@ -1180,6 +1180,9 @@ extract_file (bfd *abfd)
|
|
||||||
bfd_size_type size;
|
|
||||||
struct stat buf;
|
|
||||||
|
|
||||||
+ if (preserve_dates)
|
|
||||||
+ memset (&buf, 0, sizeof (buf));
|
|
||||||
+
|
|
||||||
if (bfd_stat_arch_elt (abfd, &buf) != 0)
|
|
||||||
/* xgettext:c-format */
|
|
||||||
fatal (_("internal stat error on %s"), bfd_get_filename (abfd));
|
|
||||||
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
|
|
||||||
index fe3ea29c..242b1052 100644
|
|
||||||
--- a/binutils/objcopy.c
|
|
||||||
+++ b/binutils/objcopy.c
|
|
||||||
@@ -3600,6 +3600,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
|
|
||||||
|
|
||||||
if (preserve_dates)
|
|
||||||
{
|
|
||||||
+ memset (&buf, 0, sizeof (buf));
|
|
||||||
stat_status = bfd_stat_arch_elt (this_element, &buf);
|
|
||||||
|
|
||||||
if (stat_status != 0)
|
|
||||||
--
|
|
||||||
2.30.0
|
|
||||||
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
From 96a7037cd8573cf065aa6b12baca68696f96d9ca Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sergei Trofimovich <siarheit@google.com>
|
|
||||||
Date: Mon, 26 Jul 2021 22:51:18 +0100
|
|
||||||
Subject: [PATCH] texi2pod.pl: add no-op --no-split option support [PR28144]
|
|
||||||
|
|
||||||
Change 2faf902da ("generate single html manual page by default")
|
|
||||||
added use of --no-split option to makeinfo. binutils reuses
|
|
||||||
makeinfo options for texi2pod.pl wrapper. Unsupported option
|
|
||||||
led to silent manpage truncation.
|
|
||||||
|
|
||||||
The change adds no-op option support.
|
|
||||||
|
|
||||||
etc/
|
|
||||||
|
|
||||||
* texi2pod.pl: Handle no-op --no-split option.
|
|
||||||
|
|
||||||
Signed-off-by: Wei, Qiang <qiang.wei@suse.com>
|
|
||||||
---
|
|
||||||
etc/texi2pod.pl | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/etc/texi2pod.pl b/etc/texi2pod.pl
|
|
||||||
index 11f70d156be..dcf2b437640 100644
|
|
||||||
--- a/etc/texi2pod.pl
|
|
||||||
+++ b/etc/texi2pod.pl
|
|
||||||
@@ -59,6 +59,8 @@ while ($_ = shift) {
|
|
||||||
$flag = shift;
|
|
||||||
}
|
|
||||||
push (@ipath, $flag);
|
|
||||||
+ } elsif (/^--no-split$/) {
|
|
||||||
+ # ignore option for makeinfo compatibility
|
|
||||||
} elsif (/^-/) {
|
|
||||||
usage();
|
|
||||||
} else {
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,194 +0,0 @@
|
|||||||
From 795588aec4f894206863c938bd6d716895886009 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Pekka=20Sepp=C3=A4nen?= <pexu@sourceware.mail.kapsi.fi>
|
|
||||||
Date: Wed, 10 Nov 2021 20:15:19 +1030
|
|
||||||
Subject: [PATCH] PR28575, readelf.c and strings.c use undefined type uint
|
|
||||||
|
|
||||||
Since --unicode support (commit b3aa80b45c4) both binutils/readelf.c
|
|
||||||
and binutils/strings.c use 'uint' in a few locations. It likely
|
|
||||||
should be 'unsigned int' since there isn't anything defining 'uint'
|
|
||||||
within binutils (besides zlib) and AFAIK it isn't a standard type.
|
|
||||||
|
|
||||||
* readelf.c (print_symbol): Replace uint with unsigned int.
|
|
||||||
* strings.c (string_min, display_utf8_char): Likewise.
|
|
||||||
(print_unicode_stream_body, print_unicode_stream): Likewise.
|
|
||||||
(print_strings): Likewise.
|
|
||||||
(get_unicode_byte): Wrap long line.
|
|
||||||
---
|
|
||||||
binutils/readelf.c | 4 ++--
|
|
||||||
binutils/strings.c | 41 ++++++++++++++++++++++-------------------
|
|
||||||
2 files changed, 24 insertions(+), 21 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
|
||||||
index c71d542f051b..5a87728d3e98 100644
|
|
||||||
--- a/binutils/readelf.c
|
|
||||||
+++ b/binutils/readelf.c
|
|
||||||
@@ -702,7 +702,7 @@ print_symbol (signed int width, const char * symbol)
|
|
||||||
/* Display unicode characters as something else. */
|
|
||||||
unsigned char bytes[4];
|
|
||||||
bool is_utf8;
|
|
||||||
- uint nbytes;
|
|
||||||
+ unsigned int nbytes;
|
|
||||||
|
|
||||||
bytes[0] = c;
|
|
||||||
|
|
||||||
@@ -767,7 +767,7 @@ print_symbol (signed int width, const char * symbol)
|
|
||||||
|
|
||||||
if (unicode_display == unicode_hex || ! is_utf8)
|
|
||||||
{
|
|
||||||
- uint i;
|
|
||||||
+ unsigned int i;
|
|
||||||
|
|
||||||
if (width_remaining < (nbytes * 2) + 2)
|
|
||||||
break;
|
|
||||||
diff --git a/binutils/strings.c b/binutils/strings.c
|
|
||||||
index e8649a80d6a7..13db60f57a57 100644
|
|
||||||
--- a/binutils/strings.c
|
|
||||||
+++ b/binutils/strings.c
|
|
||||||
@@ -57,7 +57,7 @@
|
|
||||||
|
|
||||||
--unicode={default|locale|invalid|hex|escape|highlight}
|
|
||||||
-u {d|l|i|x|e|h}
|
|
||||||
- Determine how to handle UTF-8 unicode characters. The default
|
|
||||||
+ Determine how to handle UTF-8 unicode characters. The default
|
|
||||||
is no special treatment. All other versions of this option
|
|
||||||
only apply if the encoding is valid and enabling the option
|
|
||||||
implies --encoding=S.
|
|
||||||
@@ -123,7 +123,7 @@ extern int errno;
|
|
||||||
static int address_radix;
|
|
||||||
|
|
||||||
/* Minimum length of sequence of graphic chars to trigger output. */
|
|
||||||
-static uint string_min;
|
|
||||||
+static unsigned int string_min;
|
|
||||||
|
|
||||||
/* Whether or not we include all whitespace as a graphic char. */
|
|
||||||
static bool include_all_whitespace;
|
|
||||||
@@ -272,7 +272,7 @@ main (int argc, char **argv)
|
|
||||||
|
|
||||||
case 's':
|
|
||||||
output_separator = optarg;
|
|
||||||
- break;
|
|
||||||
+ break;
|
|
||||||
|
|
||||||
case 'U':
|
|
||||||
if (streq (optarg, "default") || streq (optarg, "d"))
|
|
||||||
@@ -677,7 +677,7 @@ is_valid_utf8 (const unsigned char * buffer, unsigned long buflen)
|
|
||||||
|
|
||||||
if ((buffer[2] & 0xc0) != 0x80)
|
|
||||||
return 0;
|
|
||||||
-
|
|
||||||
+
|
|
||||||
if ((buffer[0] & 0x10) == 0)
|
|
||||||
return 3;
|
|
||||||
|
|
||||||
@@ -694,11 +694,11 @@ is_valid_utf8 (const unsigned char * buffer, unsigned long buflen)
|
|
||||||
of unicode_display. The character is known to be valid.
|
|
||||||
Returns the number of bytes consumed. */
|
|
||||||
|
|
||||||
-static uint
|
|
||||||
+static unsigned int
|
|
||||||
display_utf8_char (const unsigned char * buffer)
|
|
||||||
{
|
|
||||||
- uint j;
|
|
||||||
- uint utf8_len;
|
|
||||||
+ unsigned int j;
|
|
||||||
+ unsigned int utf8_len;
|
|
||||||
|
|
||||||
switch (buffer[0] & 0x30)
|
|
||||||
{
|
|
||||||
@@ -712,7 +712,7 @@ display_utf8_char (const unsigned char * buffer)
|
|
||||||
default:
|
|
||||||
utf8_len = 4;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+
|
|
||||||
switch (unicode_display)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
@@ -728,7 +728,7 @@ display_utf8_char (const unsigned char * buffer)
|
|
||||||
{
|
|
||||||
case 2:
|
|
||||||
printf ("\\u%02x%02x",
|
|
||||||
- ((buffer[0] & 0x1c) >> 2),
|
|
||||||
+ ((buffer[0] & 0x1c) >> 2),
|
|
||||||
((buffer[0] & 0x03) << 6) | (buffer[1] & 0x3f));
|
|
||||||
break;
|
|
||||||
|
|
||||||
@@ -857,7 +857,7 @@ print_unicode_buffer (const char * filename,
|
|
||||||
return;
|
|
||||||
|
|
||||||
print_filename_and_address (filename, address + start_point);
|
|
||||||
-
|
|
||||||
+
|
|
||||||
/* We have found string_min characters. Display them and any
|
|
||||||
more that follow. */
|
|
||||||
for (i = start_point; i < buflen; i += char_len)
|
|
||||||
@@ -888,7 +888,10 @@ print_unicode_buffer (const char * filename,
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
-get_unicode_byte (FILE * stream, unsigned char * putback, uint * num_putback, uint * num_read)
|
|
||||||
+get_unicode_byte (FILE * stream,
|
|
||||||
+ unsigned char * putback,
|
|
||||||
+ unsigned int * num_putback,
|
|
||||||
+ unsigned int * num_read)
|
|
||||||
{
|
|
||||||
if (* num_putback > 0)
|
|
||||||
{
|
|
||||||
@@ -912,7 +915,7 @@ print_unicode_stream_body (const char * filename,
|
|
||||||
file_ptr address,
|
|
||||||
FILE * stream,
|
|
||||||
unsigned char * putback_buf,
|
|
||||||
- uint num_putback,
|
|
||||||
+ unsigned int num_putback,
|
|
||||||
unsigned char * print_buf)
|
|
||||||
{
|
|
||||||
/* It would be nice if we could just read the stream into a buffer
|
|
||||||
@@ -921,9 +924,9 @@ print_unicode_stream_body (const char * filename,
|
|
||||||
we go one byte at a time... */
|
|
||||||
|
|
||||||
file_ptr start_point = 0;
|
|
||||||
- uint num_read = 0;
|
|
||||||
- uint num_chars = 0;
|
|
||||||
- uint num_print = 0;
|
|
||||||
+ unsigned int num_read = 0;
|
|
||||||
+ unsigned int num_chars = 0;
|
|
||||||
+ unsigned int num_print = 0;
|
|
||||||
int c = 0;
|
|
||||||
|
|
||||||
/* Find a series of string_min characters. Put them into print_buf. */
|
|
||||||
@@ -1064,7 +1067,7 @@ print_unicode_stream_body (const char * filename,
|
|
||||||
|
|
||||||
print_filename_and_address (filename, address + start_point);
|
|
||||||
|
|
||||||
- uint i;
|
|
||||||
+ unsigned int i;
|
|
||||||
for (i = 0; i < num_print;)
|
|
||||||
{
|
|
||||||
if (print_buf[i] < 127)
|
|
||||||
@@ -1075,7 +1078,7 @@ print_unicode_stream_body (const char * filename,
|
|
||||||
|
|
||||||
/* OK so now we have to start read unchecked bytes. */
|
|
||||||
|
|
||||||
- /* Find a series of string_min characters. Put them into print_buf. */
|
|
||||||
+ /* Find a series of string_min characters. Put them into print_buf. */
|
|
||||||
do
|
|
||||||
{
|
|
||||||
c = get_unicode_byte (stream, putback_buf, & num_putback, & num_read);
|
|
||||||
@@ -1213,7 +1216,7 @@ print_unicode_stream (const char * filename,
|
|
||||||
unsigned char * print_buf = xmalloc ((4 * string_min) + 1);
|
|
||||||
/* We should never have to put back more than 4 bytes. */
|
|
||||||
unsigned char putback_buf[5];
|
|
||||||
- uint num_putback = 0;
|
|
||||||
+ unsigned int num_putback = 0;
|
|
||||||
|
|
||||||
print_unicode_stream_body (filename, address, stream, putback_buf, num_putback, print_buf);
|
|
||||||
free (print_buf);
|
|
||||||
@@ -1250,7 +1253,7 @@ print_strings (const char *filename, FILE *stream, file_ptr address,
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
file_ptr start;
|
|
||||||
- uint i;
|
|
||||||
+ unsigned int i;
|
|
||||||
long c;
|
|
||||||
|
|
||||||
/* See if the next `string_min' chars are all graphic chars. */
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
From 584294c4066d0101161e4e04744a46cce7a7863e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nick Clifton <nickc@redhat.com>
|
|
||||||
Date: Mon, 29 Nov 2021 15:37:24 +0000
|
|
||||||
Subject: [PATCH] strings: Replace references to -u option with references to
|
|
||||||
-U.
|
|
||||||
|
|
||||||
PR 28632
|
|
||||||
---
|
|
||||||
binutils/strings.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/binutils/strings.c b/binutils/strings.c
|
|
||||||
index f594299939f9..f85cb03406c9 100644
|
|
||||||
--- a/binutils/strings.c
|
|
||||||
+++ b/binutils/strings.c
|
|
||||||
@@ -57,7 +57,7 @@
|
|
||||||
Specify a non-default object file format.
|
|
||||||
|
|
||||||
--unicode={default|locale|invalid|hex|escape|highlight}
|
|
||||||
- -u {d|l|i|x|e|h}
|
|
||||||
+ -U {d|l|i|x|e|h}
|
|
||||||
Determine how to handle UTF-8 unicode characters. The default
|
|
||||||
is no special treatment. All other versions of this option
|
|
||||||
only apply if the encoding is valid and enabling the option
|
|
||||||
@@ -1333,7 +1333,7 @@ usage (FILE *stream, int status)
|
|
||||||
-e --encoding={s,S,b,l,B,L} Select character size and endianness:\n\
|
|
||||||
s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n\
|
|
||||||
--unicode={default|show|invalid|hex|escape|highlight}\n\
|
|
||||||
- -u {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n\
|
|
||||||
+ -U {d|s|i|x|e|h} Specify how to treat UTF-8 encoded unicode characters\n\
|
|
||||||
-s --output-separator=<string> String used to separate strings in output.\n\
|
|
||||||
@<file> Read options from <file>\n\
|
|
||||||
-h --help Display this information\n\
|
|
||||||
@ -1,179 +0,0 @@
|
|||||||
From 4b6391170a7c3a70946501fb51606c95827ed9cb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alan Modra <amodra@gmail.com>
|
|
||||||
Date: Thu, 25 Nov 2021 14:26:51 +1030
|
|
||||||
Subject: [PATCH 1/3] AArch64: Add support for AArch64 EFI (efi-*-aarch64)
|
|
||||||
|
|
||||||
Commit b69c9d41e8 edited bfd/Makefile.in rather than using automake,
|
|
||||||
which meant a typo in Makefile.am was not discovered and other
|
|
||||||
differences in Makefile.in are seen with a proper regeneration. One
|
|
||||||
difference was lack of an empty line between the pe-aarch64igen.c rule
|
|
||||||
and the following $(BFD32_LIBS) etc. dependency rule, in the
|
|
||||||
regenerated file. Not that it matters for proper "make" behaviour,
|
|
||||||
but it's nicer with a line between those rules. Moving the rule
|
|
||||||
earlier seems to cure the missing empty line.
|
|
||||||
|
|
||||||
* Makefile.am (BFD64_BACKENDS): Correct typo.
|
|
||||||
(BFD_H_DEPS, LOCAL_H_DEPS): Move earlier. Move rule using these
|
|
||||||
deps earlier too.
|
|
||||||
* Makefile.in: Regenerate.
|
|
||||||
* po/BLD-POTFILES.in: Regenerate.
|
|
||||||
* po/SRC-POTFILES.in: Regenerate.
|
|
||||||
|
|
||||||
References: bsn#351
|
|
||||||
Signed-off-by: Chenxi Mao <chenxi.mao@suse.com>
|
|
||||||
---
|
|
||||||
bfd/Makefile.am | 20 ++++++++++----------
|
|
||||||
bfd/Makefile.in | 21 ++++++++++-----------
|
|
||||||
bfd/po/BLD-POTFILES.in | 1 +
|
|
||||||
bfd/po/SRC-POTFILES.in | 1 +
|
|
||||||
4 files changed, 22 insertions(+), 21 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/bfd/Makefile.am b/bfd/Makefile.am
|
|
||||||
index a4e84a1d..7c859428 100644
|
|
||||||
--- a/bfd/Makefile.am
|
|
||||||
+++ b/bfd/Makefile.am
|
|
||||||
@@ -569,7 +569,7 @@ BFD64_BACKENDS = \
|
|
||||||
mmo.lo \
|
|
||||||
pe-aarch64igen.lo \
|
|
||||||
pe-x86_64.lo \
|
|
||||||
- pei-aarch64lo \
|
|
||||||
+ pei-aarch64.lo \
|
|
||||||
pei-ia64.lo \
|
|
||||||
pei-x86_64.lo \
|
|
||||||
pepigen.lo \
|
|
||||||
@@ -710,6 +710,15 @@ BUILT_SOURCES = $(BUILD_HFILES)
|
|
||||||
|
|
||||||
HFILES = $(SOURCE_HFILES) $(BUILD_HFILES)
|
|
||||||
|
|
||||||
+BFD_H_DEPS = $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h
|
|
||||||
+LOCAL_H_DEPS = libbfd.h sysdep.h config.h
|
|
||||||
+$(BFD32_LIBS) \
|
|
||||||
+ $(BFD64_LIBS) \
|
|
||||||
+ $(ALL_MACHINES) \
|
|
||||||
+ $(BFD32_BACKENDS) \
|
|
||||||
+ $(BFD64_BACKENDS) \
|
|
||||||
+ $(OPTIONAL_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
|
|
||||||
+
|
|
||||||
SRC_POTFILES = $(SOURCE_CFILES) $(SOURCE_HFILES)
|
|
||||||
BLD_POTFILES = $(BUILD_CFILES) $(BUILD_HFILES)
|
|
||||||
|
|
||||||
@@ -869,15 +878,6 @@ pe-aarch64igen.c: peXXigen.c
|
|
||||||
echo "#line 1 \"peXXigen.c\"" > $@
|
|
||||||
$(SED) -e s/XX/peAArch64/g < $< >> $@
|
|
||||||
|
|
||||||
-BFD_H_DEPS= $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h
|
|
||||||
-LOCAL_H_DEPS= libbfd.h sysdep.h config.h
|
|
||||||
-$(BFD32_LIBS) \
|
|
||||||
- $(BFD64_LIBS) \
|
|
||||||
- $(ALL_MACHINES) \
|
|
||||||
- $(BFD32_BACKENDS) \
|
|
||||||
- $(BFD64_BACKENDS) \
|
|
||||||
- $(OPTIONAL_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
|
|
||||||
-
|
|
||||||
host-aout.lo: Makefile
|
|
||||||
|
|
||||||
# The following program can be used to generate a simple config file
|
|
||||||
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
|
|
||||||
index dd029f68..66fa92c1 100644
|
|
||||||
--- a/bfd/Makefile.in
|
|
||||||
+++ b/bfd/Makefile.in
|
|
||||||
@@ -1131,6 +1131,8 @@ BUILD_HFILES = \
|
|
||||||
# Ensure they are built early:
|
|
||||||
BUILT_SOURCES = $(BUILD_HFILES)
|
|
||||||
HFILES = $(SOURCE_HFILES) $(BUILD_HFILES)
|
|
||||||
+BFD_H_DEPS = $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h
|
|
||||||
+LOCAL_H_DEPS = libbfd.h sysdep.h config.h
|
|
||||||
SRC_POTFILES = $(SOURCE_CFILES) $(SOURCE_HFILES)
|
|
||||||
BLD_POTFILES = $(BUILD_CFILES) $(BUILD_HFILES)
|
|
||||||
|
|
||||||
@@ -1156,8 +1158,6 @@ libbfd_la_LIBADD = `cat ofiles` @SHARED_LIBADD@ $(LIBDL) $(ZLIB)
|
|
||||||
# everything else starts using libtool. FIXME.
|
|
||||||
noinst_LIBRARIES = libbfd.a
|
|
||||||
libbfd_a_SOURCES =
|
|
||||||
-BFD_H_DEPS = $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h
|
|
||||||
-LOCAL_H_DEPS = libbfd.h sysdep.h config.h
|
|
||||||
BFD_H_FILES = bfd-in.h init.c opncls.c libbfd.c \
|
|
||||||
bfdio.c bfdwin.c section.c archures.c reloc.c \
|
|
||||||
syms.c bfd.c archive.c corefile.c targets.c format.c \
|
|
||||||
@@ -1540,6 +1540,7 @@ distclean-compile:
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osf-core.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pc532-mach.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdp11.Plo@am__quote@
|
|
||||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-aarch64igen.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-arm-wince.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-arm.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-i386.Plo@am__quote@
|
|
||||||
@@ -1547,6 +1548,7 @@ distclean-compile:
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-sh.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-x86_64.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pef.Plo@am__quote@
|
|
||||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-aarch64.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-arm-wince.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-arm.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-i386.Plo@am__quote@
|
|
||||||
@@ -1554,11 +1556,9 @@ distclean-compile:
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-mcore.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-sh.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-x86_64.Plo@am__quote@
|
|
||||||
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-aarch64.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peigen.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pepigen.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pex64igen.Plo@am__quote@
|
|
||||||
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-aarch64igen.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppcboot.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reloc.Plo@am__quote@
|
|
||||||
@@ -1884,6 +1884,12 @@ uninstall-am: uninstall-bfdincludeHEADERS uninstall-bfdlibLTLIBRARIES
|
|
||||||
|
|
||||||
.PRECIOUS: Makefile
|
|
||||||
|
|
||||||
+$(BFD32_LIBS) \
|
|
||||||
+ $(BFD64_LIBS) \
|
|
||||||
+ $(ALL_MACHINES) \
|
|
||||||
+ $(BFD32_BACKENDS) \
|
|
||||||
+ $(BFD64_BACKENDS) \
|
|
||||||
+ $(OPTIONAL_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
|
|
||||||
|
|
||||||
po/SRC-POTFILES.in: @MAINT@ Makefile $(SRC_POTFILES)
|
|
||||||
for file in $(SRC_POTFILES); do echo $$file; done \
|
|
||||||
@@ -2001,13 +2007,6 @@ pe-aarch64igen.c: peXXigen.c
|
|
||||||
echo "#line 1 \"peXXigen.c\"" > $@
|
|
||||||
$(SED) -e s/XX/peAArch64/g < $< >> $@
|
|
||||||
|
|
||||||
-$(BFD32_LIBS) \
|
|
||||||
- $(BFD64_LIBS) \
|
|
||||||
- $(ALL_MACHINES) \
|
|
||||||
- $(BFD32_BACKENDS) \
|
|
||||||
- $(BFD64_BACKENDS) \
|
|
||||||
- $(OPTIONAL_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS)
|
|
||||||
-
|
|
||||||
host-aout.lo: Makefile
|
|
||||||
|
|
||||||
# The following program can be used to generate a simple config file
|
|
||||||
diff --git a/bfd/po/BLD-POTFILES.in b/bfd/po/BLD-POTFILES.in
|
|
||||||
index f81e2b40..f0a870df 100644
|
|
||||||
--- a/bfd/po/BLD-POTFILES.in
|
|
||||||
+++ b/bfd/po/BLD-POTFILES.in
|
|
||||||
@@ -7,6 +7,7 @@ elf64-aarch64.c
|
|
||||||
elf64-ia64.c
|
|
||||||
elf64-riscv.c
|
|
||||||
elf64-target.h
|
|
||||||
+pe-aarch64igen.c
|
|
||||||
peigen.c
|
|
||||||
pepigen.c
|
|
||||||
pex64igen.c
|
|
||||||
diff --git a/bfd/po/SRC-POTFILES.in b/bfd/po/SRC-POTFILES.in
|
|
||||||
index c83b86cd..10de7bc0 100644
|
|
||||||
--- a/bfd/po/SRC-POTFILES.in
|
|
||||||
+++ b/bfd/po/SRC-POTFILES.in
|
|
||||||
@@ -320,6 +320,7 @@ pe-x86_64.c
|
|
||||||
pef-traceback.h
|
|
||||||
pef.c
|
|
||||||
pef.h
|
|
||||||
+pei-aarch64.c
|
|
||||||
pei-arm-wince.c
|
|
||||||
pei-arm.c
|
|
||||||
pei-i386.c
|
|
||||||
--
|
|
||||||
2.30.2
|
|
||||||
|
|
||||||
@ -1,158 +0,0 @@
|
|||||||
From fd932228d9104001abbf6a1c8ef1bb030ab7a21d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alan Modra <amodra@gmail.com>
|
|
||||||
Date: Tue, 7 Dec 2021 12:36:31 +1030
|
|
||||||
Subject: [PATCH 2/3] Add support for AArch64 EFI (efi-*-aarch64)
|
|
||||||
|
|
||||||
Commit b69c9d41e8 was broken in multiple ways regarding the realloc
|
|
||||||
of the target string, most notably in that "-little" wasn't actually
|
|
||||||
appended to the input_target or output_target. This caused asan
|
|
||||||
errors and "FAIL: Check if efi app format is recognized". I also
|
|
||||||
noticed that the input_target string wasn't being copied but rather
|
|
||||||
the output_target when dealing with the input target. Fix that too.
|
|
||||||
|
|
||||||
PR 26206
|
|
||||||
* objcopy.c (convert_efi_target): Rewrite. Allocate modified
|
|
||||||
target strings here..
|
|
||||||
(copy_main): ..rather than here. Do handle input_target,
|
|
||||||
not output_target for input.
|
|
||||||
|
|
||||||
References: bsn#351
|
|
||||||
Signed-off-by: Chenxi Mao <chenxi.mao@suse.com>
|
|
||||||
---
|
|
||||||
binutils/objcopy.c | 86 +++++++++++++++++++++-------------------------
|
|
||||||
1 file changed, 40 insertions(+), 46 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
|
|
||||||
index 242b1052..cbff93b3 100644
|
|
||||||
--- a/binutils/objcopy.c
|
|
||||||
+++ b/binutils/objcopy.c
|
|
||||||
@@ -4969,32 +4969,55 @@ set_pe_subsystem (const char *s)
|
|
||||||
|
|
||||||
/* Convert EFI target to PEI target. */
|
|
||||||
|
|
||||||
-static void
|
|
||||||
-convert_efi_target (char *efi)
|
|
||||||
+static int
|
|
||||||
+convert_efi_target (char **targ)
|
|
||||||
{
|
|
||||||
- efi[0] = 'p';
|
|
||||||
- efi[1] = 'e';
|
|
||||||
- efi[2] = 'i';
|
|
||||||
+ size_t len;
|
|
||||||
+ char *pei;
|
|
||||||
+ char *efi = *targ + 4;
|
|
||||||
+ int subsys = -1;
|
|
||||||
+
|
|
||||||
+ if (startswith (efi, "app-"))
|
|
||||||
+ subsys = IMAGE_SUBSYSTEM_EFI_APPLICATION;
|
|
||||||
+ else if (startswith (efi, "bsdrv-"))
|
|
||||||
+ {
|
|
||||||
+ subsys = IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER;
|
|
||||||
+ efi += 2;
|
|
||||||
+ }
|
|
||||||
+ else if (startswith (efi, "rtdrv-"))
|
|
||||||
+ {
|
|
||||||
+ subsys = IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER;
|
|
||||||
+ efi += 2;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ return subsys;
|
|
||||||
+
|
|
||||||
+ len = strlen (efi);
|
|
||||||
+ pei = xmalloc (len + sizeof ("-little"));
|
|
||||||
+ memcpy (pei, efi, len + 1);
|
|
||||||
+ pei[0] = 'p';
|
|
||||||
+ pei[1] = 'e';
|
|
||||||
+ pei[2] = 'i';
|
|
||||||
|
|
||||||
if (strcmp (efi + 4, "ia32") == 0)
|
|
||||||
{
|
|
||||||
/* Change ia32 to i386. */
|
|
||||||
- efi[5]= '3';
|
|
||||||
- efi[6]= '8';
|
|
||||||
- efi[7]= '6';
|
|
||||||
+ pei[5]= '3';
|
|
||||||
+ pei[6]= '8';
|
|
||||||
+ pei[7]= '6';
|
|
||||||
}
|
|
||||||
else if (strcmp (efi + 4, "x86_64") == 0)
|
|
||||||
{
|
|
||||||
/* Change x86_64 to x86-64. */
|
|
||||||
- efi[7] = '-';
|
|
||||||
+ pei[7] = '-';
|
|
||||||
}
|
|
||||||
else if (strcmp (efi + 4, "aarch64") == 0)
|
|
||||||
{
|
|
||||||
/* Change aarch64 to aarch64-little. */
|
|
||||||
- efi = (char *) xrealloc (efi, strlen (efi) + 7);
|
|
||||||
- char *t = "aarch64-little";
|
|
||||||
- strcpy (efi + 4, t);
|
|
||||||
+ memcpy (pei + 4 + sizeof ("aarch64") - 1, "-little", sizeof ("-little"));
|
|
||||||
}
|
|
||||||
+ *targ = pei;
|
|
||||||
+ return subsys;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocate and return a pointer to a struct section_add, initializing the
|
|
||||||
@@ -5877,53 +5900,24 @@ copy_main (int argc, char *argv[])
|
|
||||||
if (input_target != NULL
|
|
||||||
&& startswith (input_target, "efi-"))
|
|
||||||
{
|
|
||||||
- char *efi;
|
|
||||||
-
|
|
||||||
- efi = xstrdup (output_target + 4);
|
|
||||||
- if (startswith (efi, "bsdrv-")
|
|
||||||
- || startswith (efi, "rtdrv-"))
|
|
||||||
- efi += 2;
|
|
||||||
- else if (!startswith (efi, "app-"))
|
|
||||||
+ if (convert_efi_target (&input_target) < 0)
|
|
||||||
fatal (_("unknown input EFI target: %s"), input_target);
|
|
||||||
-
|
|
||||||
- input_target = efi;
|
|
||||||
- convert_efi_target (efi);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert output EFI target to PEI target. */
|
|
||||||
if (output_target != NULL
|
|
||||||
&& startswith (output_target, "efi-"))
|
|
||||||
{
|
|
||||||
- char *efi;
|
|
||||||
+ int subsys = convert_efi_target (&output_target);
|
|
||||||
|
|
||||||
- efi = xstrdup (output_target + 4);
|
|
||||||
- if (startswith (efi, "app-"))
|
|
||||||
- {
|
|
||||||
- if (pe_subsystem == -1)
|
|
||||||
- pe_subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION;
|
|
||||||
- }
|
|
||||||
- else if (startswith (efi, "bsdrv-"))
|
|
||||||
- {
|
|
||||||
- if (pe_subsystem == -1)
|
|
||||||
- pe_subsystem = IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER;
|
|
||||||
- efi += 2;
|
|
||||||
- }
|
|
||||||
- else if (startswith (efi, "rtdrv-"))
|
|
||||||
- {
|
|
||||||
- if (pe_subsystem == -1)
|
|
||||||
- pe_subsystem = IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER;
|
|
||||||
- efi += 2;
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
+ if (subsys < 0)
|
|
||||||
fatal (_("unknown output EFI target: %s"), output_target);
|
|
||||||
-
|
|
||||||
+ if (pe_subsystem == -1)
|
|
||||||
+ pe_subsystem = subsys;
|
|
||||||
if (pe_file_alignment == (bfd_vma) -1)
|
|
||||||
pe_file_alignment = PE_DEF_FILE_ALIGNMENT;
|
|
||||||
if (pe_section_alignment == (bfd_vma) -1)
|
|
||||||
pe_section_alignment = PE_DEF_SECTION_ALIGNMENT;
|
|
||||||
-
|
|
||||||
- output_target = efi;
|
|
||||||
- convert_efi_target (efi);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If there is no destination file, or the source and destination files
|
|
||||||
--
|
|
||||||
2.30.2
|
|
||||||
|
|
||||||
@ -1,245 +0,0 @@
|
|||||||
From 161e87d12167b1e36193385485c1f6ce92f74f02 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alan Modra <amodra@gmail.com>
|
|
||||||
Date: Wed, 15 Dec 2021 11:48:42 +1030
|
|
||||||
Subject: [PATCH] PR28694, Out-of-bounds write in stab_xcoff_builtin_type
|
|
||||||
|
|
||||||
PR 28694
|
|
||||||
* stabs.c (stab_xcoff_builtin_type): Make typenum unsigned.
|
|
||||||
Negate typenum earlier, simplifying bounds checking. Correct
|
|
||||||
off-by-one indexing. Adjust switch cases.
|
|
||||||
---
|
|
||||||
binutils/stabs.c | 87 ++++++++++++++++++++++++------------------------
|
|
||||||
1 file changed, 43 insertions(+), 44 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/binutils/stabs.c b/binutils/stabs.c
|
|
||||||
index 274bfb0e7fa..83ee3ea5fa4 100644
|
|
||||||
--- a/binutils/stabs.c
|
|
||||||
+++ b/binutils/stabs.c
|
|
||||||
@@ -202,7 +202,7 @@ static debug_type stab_find_type (void *, struct stab_handle *, const int *);
|
|
||||||
static bool stab_record_type
|
|
||||||
(void *, struct stab_handle *, const int *, debug_type);
|
|
||||||
static debug_type stab_xcoff_builtin_type
|
|
||||||
- (void *, struct stab_handle *, int);
|
|
||||||
+ (void *, struct stab_handle *, unsigned int);
|
|
||||||
static debug_type stab_find_tagged_type
|
|
||||||
(void *, struct stab_handle *, const char *, int, enum debug_type_kind);
|
|
||||||
static debug_type *stab_demangle_argtypes
|
|
||||||
@@ -3496,166 +3496,167 @@ stab_record_type (void *dhandle ATTRIBUTE_UNUSED, struct stab_handle *info,
|
|
||||||
|
|
||||||
static debug_type
|
|
||||||
stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
|
|
||||||
- int typenum)
|
|
||||||
+ unsigned int typenum)
|
|
||||||
{
|
|
||||||
debug_type rettype;
|
|
||||||
const char *name;
|
|
||||||
|
|
||||||
- if (typenum >= 0 || typenum < -XCOFF_TYPE_COUNT)
|
|
||||||
+ typenum = -typenum - 1;
|
|
||||||
+ if (typenum >= XCOFF_TYPE_COUNT)
|
|
||||||
{
|
|
||||||
- fprintf (stderr, _("Unrecognized XCOFF type %d\n"), typenum);
|
|
||||||
+ fprintf (stderr, _("Unrecognized XCOFF type %d\n"), -typenum - 1);
|
|
||||||
return DEBUG_TYPE_NULL;
|
|
||||||
}
|
|
||||||
- if (info->xcoff_types[-typenum] != NULL)
|
|
||||||
- return info->xcoff_types[-typenum];
|
|
||||||
+ if (info->xcoff_types[typenum] != NULL)
|
|
||||||
+ return info->xcoff_types[typenum];
|
|
||||||
|
|
||||||
- switch (-typenum)
|
|
||||||
+ switch (typenum)
|
|
||||||
{
|
|
||||||
- case 1:
|
|
||||||
+ case 0:
|
|
||||||
/* The size of this and all the other types are fixed, defined
|
|
||||||
by the debugging format. */
|
|
||||||
name = "int";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, false);
|
|
||||||
break;
|
|
||||||
- case 2:
|
|
||||||
+ case 1:
|
|
||||||
name = "char";
|
|
||||||
rettype = debug_make_int_type (dhandle, 1, false);
|
|
||||||
break;
|
|
||||||
- case 3:
|
|
||||||
+ case 2:
|
|
||||||
name = "short";
|
|
||||||
rettype = debug_make_int_type (dhandle, 2, false);
|
|
||||||
break;
|
|
||||||
- case 4:
|
|
||||||
+ case 3:
|
|
||||||
name = "long";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, false);
|
|
||||||
break;
|
|
||||||
- case 5:
|
|
||||||
+ case 4:
|
|
||||||
name = "unsigned char";
|
|
||||||
rettype = debug_make_int_type (dhandle, 1, true);
|
|
||||||
break;
|
|
||||||
- case 6:
|
|
||||||
+ case 5:
|
|
||||||
name = "signed char";
|
|
||||||
rettype = debug_make_int_type (dhandle, 1, false);
|
|
||||||
break;
|
|
||||||
- case 7:
|
|
||||||
+ case 6:
|
|
||||||
name = "unsigned short";
|
|
||||||
rettype = debug_make_int_type (dhandle, 2, true);
|
|
||||||
break;
|
|
||||||
- case 8:
|
|
||||||
+ case 7:
|
|
||||||
name = "unsigned int";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, true);
|
|
||||||
break;
|
|
||||||
- case 9:
|
|
||||||
+ case 8:
|
|
||||||
name = "unsigned";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, true);
|
|
||||||
break;
|
|
||||||
- case 10:
|
|
||||||
+ case 9:
|
|
||||||
name = "unsigned long";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, true);
|
|
||||||
break;
|
|
||||||
- case 11:
|
|
||||||
+ case 10:
|
|
||||||
name = "void";
|
|
||||||
rettype = debug_make_void_type (dhandle);
|
|
||||||
break;
|
|
||||||
- case 12:
|
|
||||||
+ case 11:
|
|
||||||
/* IEEE single precision (32 bit). */
|
|
||||||
name = "float";
|
|
||||||
rettype = debug_make_float_type (dhandle, 4);
|
|
||||||
break;
|
|
||||||
- case 13:
|
|
||||||
+ case 12:
|
|
||||||
/* IEEE double precision (64 bit). */
|
|
||||||
name = "double";
|
|
||||||
rettype = debug_make_float_type (dhandle, 8);
|
|
||||||
break;
|
|
||||||
- case 14:
|
|
||||||
+ case 13:
|
|
||||||
/* This is an IEEE double on the RS/6000, and different machines
|
|
||||||
with different sizes for "long double" should use different
|
|
||||||
negative type numbers. See stabs.texinfo. */
|
|
||||||
name = "long double";
|
|
||||||
rettype = debug_make_float_type (dhandle, 8);
|
|
||||||
break;
|
|
||||||
- case 15:
|
|
||||||
+ case 14:
|
|
||||||
name = "integer";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, false);
|
|
||||||
break;
|
|
||||||
- case 16:
|
|
||||||
+ case 15:
|
|
||||||
name = "boolean";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 4);
|
|
||||||
break;
|
|
||||||
- case 17:
|
|
||||||
+ case 16:
|
|
||||||
name = "short real";
|
|
||||||
rettype = debug_make_float_type (dhandle, 4);
|
|
||||||
break;
|
|
||||||
- case 18:
|
|
||||||
+ case 17:
|
|
||||||
name = "real";
|
|
||||||
rettype = debug_make_float_type (dhandle, 8);
|
|
||||||
break;
|
|
||||||
- case 19:
|
|
||||||
+ case 18:
|
|
||||||
/* FIXME */
|
|
||||||
name = "stringptr";
|
|
||||||
rettype = NULL;
|
|
||||||
break;
|
|
||||||
- case 20:
|
|
||||||
+ case 19:
|
|
||||||
/* FIXME */
|
|
||||||
name = "character";
|
|
||||||
rettype = debug_make_int_type (dhandle, 1, true);
|
|
||||||
break;
|
|
||||||
- case 21:
|
|
||||||
+ case 20:
|
|
||||||
name = "logical*1";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 1);
|
|
||||||
break;
|
|
||||||
- case 22:
|
|
||||||
+ case 21:
|
|
||||||
name = "logical*2";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 2);
|
|
||||||
break;
|
|
||||||
- case 23:
|
|
||||||
+ case 22:
|
|
||||||
name = "logical*4";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 4);
|
|
||||||
break;
|
|
||||||
- case 24:
|
|
||||||
+ case 23:
|
|
||||||
name = "logical";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 4);
|
|
||||||
break;
|
|
||||||
- case 25:
|
|
||||||
+ case 24:
|
|
||||||
/* Complex type consisting of two IEEE single precision values. */
|
|
||||||
name = "complex";
|
|
||||||
rettype = debug_make_complex_type (dhandle, 8);
|
|
||||||
break;
|
|
||||||
- case 26:
|
|
||||||
+ case 25:
|
|
||||||
/* Complex type consisting of two IEEE double precision values. */
|
|
||||||
name = "double complex";
|
|
||||||
rettype = debug_make_complex_type (dhandle, 16);
|
|
||||||
break;
|
|
||||||
- case 27:
|
|
||||||
+ case 26:
|
|
||||||
name = "integer*1";
|
|
||||||
rettype = debug_make_int_type (dhandle, 1, false);
|
|
||||||
break;
|
|
||||||
- case 28:
|
|
||||||
+ case 27:
|
|
||||||
name = "integer*2";
|
|
||||||
rettype = debug_make_int_type (dhandle, 2, false);
|
|
||||||
break;
|
|
||||||
- case 29:
|
|
||||||
+ case 28:
|
|
||||||
name = "integer*4";
|
|
||||||
rettype = debug_make_int_type (dhandle, 4, false);
|
|
||||||
break;
|
|
||||||
- case 30:
|
|
||||||
+ case 29:
|
|
||||||
/* FIXME */
|
|
||||||
name = "wchar";
|
|
||||||
rettype = debug_make_int_type (dhandle, 2, false);
|
|
||||||
break;
|
|
||||||
- case 31:
|
|
||||||
+ case 30:
|
|
||||||
name = "long long";
|
|
||||||
rettype = debug_make_int_type (dhandle, 8, false);
|
|
||||||
break;
|
|
||||||
- case 32:
|
|
||||||
+ case 31:
|
|
||||||
name = "unsigned long long";
|
|
||||||
rettype = debug_make_int_type (dhandle, 8, true);
|
|
||||||
break;
|
|
||||||
- case 33:
|
|
||||||
+ case 32:
|
|
||||||
name = "logical*8";
|
|
||||||
rettype = debug_make_bool_type (dhandle, 8);
|
|
||||||
break;
|
|
||||||
- case 34:
|
|
||||||
+ case 33:
|
|
||||||
name = "integer*8";
|
|
||||||
rettype = debug_make_int_type (dhandle, 8, false);
|
|
||||||
break;
|
|
||||||
@@ -3664,9 +3665,7 @@ stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info,
|
|
||||||
}
|
|
||||||
|
|
||||||
rettype = debug_name_type (dhandle, name, rettype);
|
|
||||||
-
|
|
||||||
- info->xcoff_types[-typenum] = rettype;
|
|
||||||
-
|
|
||||||
+ info->xcoff_types[typenum] = rettype;
|
|
||||||
return rettype;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
From 753efb93dc018558c483111fbfe14c4ee8c84c51 Mon Sep 17 00:00:00 2001
|
|
||||||
From: yinyongkang <yinyongkang@kylinos.cn>
|
|
||||||
Date: Thu, 8 Sep 2022 17:14:11 +0800
|
|
||||||
Subject: [PATCH] Replace a run-time assertion failure with a warning message
|
|
||||||
when parsing corrupt...
|
|
||||||
|
|
||||||
PR 29289
|
|
||||||
* dwarf.c (display_debug_names): Replace assert with a warning
|
|
||||||
message.
|
|
||||||
---
|
|
||||||
binutils/dwarf.c | 7 ++++++-
|
|
||||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
|
|
||||||
index 1e7f4db7..7c54820a 100644
|
|
||||||
--- a/binutils/dwarf.c
|
|
||||||
+++ b/binutils/dwarf.c
|
|
||||||
@@ -9781,7 +9781,12 @@ display_debug_names (struct dwarf_section *section, void *file)
|
|
||||||
printf (_("Out of %lu items there are %zu bucket clashes"
|
|
||||||
" (longest of %zu entries).\n"),
|
|
||||||
(unsigned long) name_count, hash_clash_count, longest_clash);
|
|
||||||
- assert (name_count == buckets_filled + hash_clash_count);
|
|
||||||
+
|
|
||||||
+ if (name_count != buckets_filled + hash_clash_count)
|
|
||||||
+ warn (_("The name_count (%lu) is not the same as the used bucket_count (%lu) + the hash clash count (%lu)"),
|
|
||||||
+ (unsigned long) name_count,
|
|
||||||
+ (unsigned long) buckets_filled,
|
|
||||||
+ (unsigned long) hash_clash_count);
|
|
||||||
|
|
||||||
struct abbrev_lookup_entry
|
|
||||||
{
|
|
||||||
--
|
|
||||||
2.33.0
|
|
||||||
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
From d86cf1b0d5ac6c0d900ae2b2a07fce7c4414d0e6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alan Modra <amodra@gmail.com>
|
|
||||||
Date: Sat, 7 Aug 2021 14:10:38 +0930
|
|
||||||
Subject: [PATCH] PR28186, SEGV elf.c:7991:30 in _bfd_elf_fixup_group_sections
|
|
||||||
|
|
||||||
PR 28186
|
|
||||||
* elf.c (_bfd_elf_fixup_group_sections): Don't segfault on
|
|
||||||
objcopy/strip with NULL output_section.
|
|
||||||
|
|
||||||
(cherry picked from commit 182ad37589e3931390d0c43f1d52a9a6e0062a61)
|
|
||||||
Reference:https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=d86cf1b0d5ac6c0d900ae2b2a07fce7c4414d0e6
|
|
||||||
Conflict:NA
|
|
||||||
---
|
|
||||||
bfd/elf.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/bfd/elf.c b/bfd/elf.c
|
|
||||||
index de5abafabf0..9c3f34c415b 100644
|
|
||||||
--- a/bfd/elf.c
|
|
||||||
+++ b/bfd/elf.c
|
|
||||||
@@ -7984,7 +7984,7 @@ _bfd_elf_fixup_group_sections (bfd *ibfd, asection *discarded)
|
|
||||||
isec->flags |= SEC_EXCLUDE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- else
|
|
||||||
+ else if (isec->output_section != NULL)
|
|
||||||
{
|
|
||||||
/* Adjust the output section size when called from
|
|
||||||
objcopy. */
|
|
||||||
--
|
|
||||||
2.23.0
|
|
||||||
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
From c20c7adbeaa3af18a58ba1e20e6c33e7186356e3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alan Modra <amodra@gmail.com>
|
|
||||||
Date: Wed, 6 Oct 2021 18:28:47 +1030
|
|
||||||
Subject: [PATCH] PR28422, build_id use-after-free
|
|
||||||
|
|
||||||
This fixes a bug in commit 5d9bbb73c1df. All fields preserved from a
|
|
||||||
bfd in struct bfd_preserve need to be cleared in bfd_reinit.
|
|
||||||
|
|
||||||
PR 28422
|
|
||||||
* format.c (bfd_reinit): Clear build_id.
|
|
||||||
|
|
||||||
(cherry picked from commit 6d661cdc5be46e890ed9255e749806f46a88e26c)
|
|
||||||
Reference:https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=c20c7adbeaa3af18a58ba1e20e6c33e7186356e3
|
|
||||||
Conflict:NA
|
|
||||||
---
|
|
||||||
bfd/format.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/bfd/format.c b/bfd/format.c
|
|
||||||
index 5d08d1d642c..408c984690e 100644
|
|
||||||
--- a/bfd/format.c
|
|
||||||
+++ b/bfd/format.c
|
|
||||||
@@ -151,6 +151,7 @@ bfd_reinit (bfd *abfd, unsigned int section_id, bfd_cleanup cleanup)
|
|
||||||
abfd->tdata.any = NULL;
|
|
||||||
abfd->arch_info = &bfd_default_arch_struct;
|
|
||||||
abfd->flags &= BFD_FLAGS_SAVED;
|
|
||||||
+ abfd->build_id = NULL;
|
|
||||||
bfd_section_list_clear (abfd);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.23.0
|
|
||||||
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
From 96eb21265ebffbc28f767bed9a2b7650ecb9818d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alan Modra <amodra@gmail.com>
|
|
||||||
Date: Thu, 4 Nov 2021 14:11:02 +1030
|
|
||||||
Subject: [PATCH] PR28540, segmentation fault on NULL byte_get
|
|
||||||
|
|
||||||
PR 28540
|
|
||||||
* objdump.c (dump_bfd): Don't attempt load_separate_debug_files
|
|
||||||
when byte_get is NULL.
|
|
||||||
|
|
||||||
(cherry picked from commit f2f105f518413ea3e4c212f89585f9a8a5dddcdd)
|
|
||||||
Reference:https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=96eb21265ebffbc28f767bed9a2b7650ecb9818d
|
|
||||||
Conflict:NA
|
|
||||||
---
|
|
||||||
binutils/objdump.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/binutils/objdump.c b/binutils/objdump.c
|
|
||||||
index a7b8303b992..50317b3d48f 100644
|
|
||||||
--- a/binutils/objdump.c
|
|
||||||
+++ b/binutils/objdump.c
|
|
||||||
@@ -4869,7 +4869,7 @@ dump_bfd (bfd *abfd, bool is_mainfile)
|
|
||||||
|
|
||||||
The test on is_mainfile is there because the chain of separate debug
|
|
||||||
info files is a global variable shared by all invocations of dump_bfd. */
|
|
||||||
- if (is_mainfile)
|
|
||||||
+ if (byte_get != NULL && is_mainfile)
|
|
||||||
{
|
|
||||||
load_separate_debug_files (abfd, bfd_get_filename (abfd));
|
|
||||||
|
|
||||||
--
|
|
||||||
2.23.0
|
|
||||||
|
|
||||||
@ -1,111 +0,0 @@
|
|||||||
From 5bb067dba365e713bf988a06f7ed1c352aab52c4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Beulich <jbeulich@suse.com>
|
|
||||||
Date: Thu, 19 May 2022 12:43:10 +0200
|
|
||||||
Subject: [PATCH 3/3] don't over-align file positions of PE executable sections
|
|
||||||
|
|
||||||
When a sufficiently small alignment was specified via --file-alignment,
|
|
||||||
individual section alignment shouldn't affect placement within the file.
|
|
||||||
This involves first of all clearing D_PAGED for images when section and
|
|
||||||
file alignment together don't permit paging of the image. The involved
|
|
||||||
comparison against COFF_PAGE_SIZE in turn helped point out (through a
|
|
||||||
compiler warning) that 'page_size' should be of unsigned type (as in
|
|
||||||
particular FileAlignment is). This yet in turn pointed out a dubious
|
|
||||||
error condition (which is being deleted).
|
|
||||||
|
|
||||||
For the D_PAGED case I think the enforced file alignment may still be
|
|
||||||
too high, but I'm wary of changing that logic without knowing of
|
|
||||||
possible corner cases.
|
|
||||||
|
|
||||||
Furthermore file positions in PE should be independent of the alignment
|
|
||||||
recorded in section headers anyway. Otherwise there are e.g. anomalies
|
|
||||||
following commit 6f8f6017a0c4 ("PR27567, Linking PE files adds alignment
|
|
||||||
section flags to executables") in that linking would use information a
|
|
||||||
subsequent processing step (e.g. stripping) wouldn't have available
|
|
||||||
anymore, and hence a binary could change in that 2nd step for no actual
|
|
||||||
reason. (Similarly stripping a binary linked with a linker pre-dating
|
|
||||||
that commit would change the binary again when stripping it a 2nd time.)
|
|
||||||
|
|
||||||
References: bsn#351
|
|
||||||
Signed-off-by: Chenxi Mao <chenxi.mao@suse.com>
|
|
||||||
---
|
|
||||||
bfd/coffcode.h | 29 ++++++++++++++---------------
|
|
||||||
1 file changed, 14 insertions(+), 15 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
|
|
||||||
index a5a4979f..d222c88d 100644
|
|
||||||
--- a/bfd/coffcode.h
|
|
||||||
+++ b/bfd/coffcode.h
|
|
||||||
@@ -2952,7 +2952,7 @@ coff_compute_section_file_positions (bfd * abfd)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef COFF_IMAGE_WITH_PE
|
|
||||||
- int page_size;
|
|
||||||
+ unsigned int page_size;
|
|
||||||
|
|
||||||
if (coff_data (abfd)->link_info
|
|
||||||
|| (pe_data (abfd) && pe_data (abfd)->pe_opthdr.FileAlignment))
|
|
||||||
@@ -2963,22 +2963,12 @@ coff_compute_section_file_positions (bfd * abfd)
|
|
||||||
This repairs 'ld -r' for arm-wince-pe target. */
|
|
||||||
if (page_size == 0)
|
|
||||||
page_size = 1;
|
|
||||||
-
|
|
||||||
- /* PR 17512: file: 0ac816d3. */
|
|
||||||
- if (page_size < 0)
|
|
||||||
- {
|
|
||||||
- bfd_set_error (bfd_error_file_too_big);
|
|
||||||
- _bfd_error_handler
|
|
||||||
- /* xgettext:c-format */
|
|
||||||
- (_("%pB: page size is too large (0x%x)"), abfd, page_size);
|
|
||||||
- return false;
|
|
||||||
- }
|
|
||||||
}
|
|
||||||
else
|
|
||||||
page_size = PE_DEF_FILE_ALIGNMENT;
|
|
||||||
#else
|
|
||||||
#ifdef COFF_PAGE_SIZE
|
|
||||||
- int page_size = COFF_PAGE_SIZE;
|
|
||||||
+ unsigned int page_size = COFF_PAGE_SIZE;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -3060,9 +3050,10 @@ coff_compute_section_file_positions (bfd * abfd)
|
|
||||||
bfd_size_type amt;
|
|
||||||
|
|
||||||
#ifdef COFF_PAGE_SIZE
|
|
||||||
- /* Clear D_PAGED if section alignment is smaller than
|
|
||||||
- COFF_PAGE_SIZE. */
|
|
||||||
- if (pe_data (abfd)->pe_opthdr.SectionAlignment < COFF_PAGE_SIZE)
|
|
||||||
+ /* Clear D_PAGED if section / file alignment aren't suitable for
|
|
||||||
+ paging at COFF_PAGE_SIZE granularity. */
|
|
||||||
+ if (pe_data (abfd)->pe_opthdr.SectionAlignment < COFF_PAGE_SIZE
|
|
||||||
+ || page_size < COFF_PAGE_SIZE)
|
|
||||||
abfd->flags &= ~D_PAGED;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -3183,7 +3174,11 @@ coff_compute_section_file_positions (bfd * abfd)
|
|
||||||
padding the previous section up if necessary. */
|
|
||||||
old_sofar = sofar;
|
|
||||||
|
|
||||||
+#ifdef COFF_IMAGE_WITH_PE
|
|
||||||
+ sofar = BFD_ALIGN (sofar, page_size);
|
|
||||||
+#else
|
|
||||||
sofar = BFD_ALIGN (sofar, 1 << current->alignment_power);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
#ifdef RS6000COFF_C
|
|
||||||
/* Make sure the file offset and the vma of .text/.data are at the
|
|
||||||
@@ -3259,7 +3254,11 @@ coff_compute_section_file_positions (bfd * abfd)
|
|
||||||
else
|
|
||||||
{
|
|
||||||
old_sofar = sofar;
|
|
||||||
+#ifdef COFF_IMAGE_WITH_PE
|
|
||||||
+ sofar = BFD_ALIGN (sofar, page_size);
|
|
||||||
+#else
|
|
||||||
sofar = BFD_ALIGN (sofar, 1 << current->alignment_power);
|
|
||||||
+#endif
|
|
||||||
align_adjust = sofar != old_sofar;
|
|
||||||
current->size += sofar - old_sofar;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.30.2
|
|
||||||
|
|
||||||
@ -1,234 +0,0 @@
|
|||||||
From 1c611b40e6bfc8029bff7696814330b5bc0ee5c0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
||||||
Date: Mon, 26 Jul 2021 05:59:55 -0700
|
|
||||||
Subject: [PATCH] bfd: Close the file descriptor if there is no archive fd
|
|
||||||
|
|
||||||
Close the file descriptor if there is no archive plugin file descriptor
|
|
||||||
to avoid running out of file descriptors on thin archives with many
|
|
||||||
archive members.
|
|
||||||
|
|
||||||
bfd/
|
|
||||||
|
|
||||||
PR ld/28138
|
|
||||||
* plugin.c (bfd_plugin_close_file_descriptor): Close the file
|
|
||||||
descriptor there is no archive plugin file descriptor.
|
|
||||||
|
|
||||||
ld/
|
|
||||||
|
|
||||||
PR ld/28138
|
|
||||||
* testsuite/ld-plugin/lto.exp: Run tmpdir/pr28138 only for
|
|
||||||
native build.
|
|
||||||
|
|
||||||
PR ld/28138
|
|
||||||
* testsuite/ld-plugin/lto.exp: Run ld/28138 tests.
|
|
||||||
* testsuite/ld-plugin/pr28138.c: New file.
|
|
||||||
* testsuite/ld-plugin/pr28138-1.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-2.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-3.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-4.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-5.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-6.c: Likewise.
|
|
||||||
* testsuite/ld-plugin/pr28138-7.c: Likewise.
|
|
||||||
|
|
||||||
(cherry picked from commit 5a98fb7513b559e20dfebdbaa2a471afda3b4742)
|
|
||||||
(cherry picked from commit 7dc37e1e1209c80e0bab784df6b6bac335e836f2)
|
|
||||||
|
|
||||||
Signed-off-by: Kai Liu <kai.liu@suse.com>
|
|
||||||
---
|
|
||||||
bfd/plugin.c | 8 +++++++
|
|
||||||
ld/testsuite/ld-plugin/lto.exp | 34 ++++++++++++++++++++++++++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-1.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-2.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-3.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-4.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-5.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-6.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138-7.c | 6 ++++++
|
|
||||||
ld/testsuite/ld-plugin/pr28138.c | 20 ++++++++++++++++++
|
|
||||||
10 files changed, 104 insertions(+)
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-1.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-2.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-3.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-4.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-5.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-6.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138-7.c
|
|
||||||
create mode 100644 ld/testsuite/ld-plugin/pr28138.c
|
|
||||||
|
|
||||||
diff --git a/bfd/plugin.c b/bfd/plugin.c
|
|
||||||
index 6cfa2b66470..3bab8febe88 100644
|
|
||||||
--- a/bfd/plugin.c
|
|
||||||
+++ b/bfd/plugin.c
|
|
||||||
@@ -291,6 +291,14 @@ bfd_plugin_close_file_descriptor (bfd *abfd, int fd)
|
|
||||||
&& !bfd_is_thin_archive (abfd->my_archive))
|
|
||||||
abfd = abfd->my_archive;
|
|
||||||
|
|
||||||
+ /* Close the file descriptor if there is no archive plugin file
|
|
||||||
+ descriptor. */
|
|
||||||
+ if (abfd->archive_plugin_fd == -1)
|
|
||||||
+ {
|
|
||||||
+ close (fd);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
abfd->archive_plugin_fd_open_count--;
|
|
||||||
/* Dup the archive plugin file descriptor for later use, which
|
|
||||||
will be closed by _bfd_archive_close_and_cleanup. */
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
|
|
||||||
index def69e43ab3..999d911ce6a 100644
|
|
||||||
--- a/ld/testsuite/ld-plugin/lto.exp
|
|
||||||
+++ b/ld/testsuite/ld-plugin/lto.exp
|
|
||||||
@@ -687,6 +687,40 @@ if { [is_elf_format] && [check_lto_shared_available] } {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+run_cc_link_tests [list \
|
|
||||||
+ [list \
|
|
||||||
+ "Build pr28138.a" \
|
|
||||||
+ "-T" "" \
|
|
||||||
+ {pr28138-1.c pr28138-2.c pr28138-3.c pr28138-4.c pr28138-5.c \
|
|
||||||
+ pr28138-6.c pr28138-7.c} {} "pr28138.a" \
|
|
||||||
+ ] \
|
|
||||||
+ [list \
|
|
||||||
+ "Build pr28138.o" \
|
|
||||||
+ "" "" \
|
|
||||||
+ {pr28138.c} {} \
|
|
||||||
+ ] \
|
|
||||||
+]
|
|
||||||
+
|
|
||||||
+set exec_output [run_host_cmd "sh" \
|
|
||||||
+ "-c \"ulimit -n 20; \
|
|
||||||
+ $CC -Btmpdir/ld -o tmpdir/pr28138 \
|
|
||||||
+ tmpdir/pr28138.o tmpdir/pr28138.a\""]
|
|
||||||
+set exec_output [prune_warnings $exec_output]
|
|
||||||
+if [string match "" $exec_output] then {
|
|
||||||
+ if { [isnative] } {
|
|
||||||
+ set exec_output [run_host_cmd "tmpdir/pr28138" ""]
|
|
||||||
+ if [string match "PASS" $exec_output] then {
|
|
||||||
+ pass "PR ld/28138"
|
|
||||||
+ } else {
|
|
||||||
+ fail "PR ld/28138"
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ pass "PR ld/28138"
|
|
||||||
+ }
|
|
||||||
+} else {
|
|
||||||
+ fail "PR ld/28138"
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
set testname "Build liblto-11.a"
|
|
||||||
remote_file host delete "tmpdir/liblto-11.a"
|
|
||||||
set catch_output [run_host_cmd "$ar" "rc $plug_opt tmpdir/liblto-11.a tmpdir/lto-11a.o tmpdir/lto-11b.o tmpdir/lto-11c.o"]
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-1.c b/ld/testsuite/ld-plugin/pr28138-1.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..51d119e1642
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-1.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a0(void);
|
|
||||||
+int
|
|
||||||
+a1(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a0();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-2.c b/ld/testsuite/ld-plugin/pr28138-2.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..1120cd797e9
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-2.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a1(void);
|
|
||||||
+int
|
|
||||||
+a2(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a1();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-3.c b/ld/testsuite/ld-plugin/pr28138-3.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..ec464947ee6
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-3.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a2(void);
|
|
||||||
+int
|
|
||||||
+a3(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a2();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-4.c b/ld/testsuite/ld-plugin/pr28138-4.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..475701b2c5c
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-4.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a3(void);
|
|
||||||
+int
|
|
||||||
+a4(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a3();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-5.c b/ld/testsuite/ld-plugin/pr28138-5.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..e24f86c363e
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-5.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a4(void);
|
|
||||||
+int
|
|
||||||
+a5(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a4();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-6.c b/ld/testsuite/ld-plugin/pr28138-6.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..b5b938bdb21
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-6.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a5(void);
|
|
||||||
+int
|
|
||||||
+a6(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a5();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138-7.c b/ld/testsuite/ld-plugin/pr28138-7.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..4ef75bf0f0c
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138-7.c
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+extern int a6(void);
|
|
||||||
+int
|
|
||||||
+a7(void)
|
|
||||||
+{
|
|
||||||
+ return 1 + a6();
|
|
||||||
+}
|
|
||||||
diff --git a/ld/testsuite/ld-plugin/pr28138.c b/ld/testsuite/ld-plugin/pr28138.c
|
|
||||||
new file mode 100644
|
|
||||||
index 00000000000..68252c9f382
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ld/testsuite/ld-plugin/pr28138.c
|
|
||||||
@@ -0,0 +1,20 @@
|
|
||||||
+#include <stdio.h>
|
|
||||||
+
|
|
||||||
+extern int a7(void);
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+a0(void)
|
|
||||||
+{
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main()
|
|
||||||
+{
|
|
||||||
+ if (a7() == 7)
|
|
||||||
+ {
|
|
||||||
+ printf ("PASS\n");
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
||||||
Binary file not shown.
@ -1,944 +0,0 @@
|
|||||||
diff -rup binutils.orig/bfd/.gitignore binutils-2.37/bfd/.gitignore
|
|
||||||
--- binutils.orig/bfd/.gitignore 2021-12-01 13:35:33.826078119 +0000
|
|
||||||
+++ binutils-2.37/bfd/.gitignore 2021-12-01 13:35:43.138988270 +0000
|
|
||||||
@@ -10,6 +10,7 @@
|
|
||||||
/peigen.c
|
|
||||||
/pepigen.c
|
|
||||||
/pex64igen.c
|
|
||||||
+/pe-aarch64igen.c
|
|
||||||
/stmp-bfd-h
|
|
||||||
/targmatch.h
|
|
||||||
|
|
||||||
diff -rup binutils.orig/bfd/Makefile.am binutils-2.37/bfd/Makefile.am
|
|
||||||
--- binutils.orig/bfd/Makefile.am 2021-12-01 13:35:33.817078206 +0000
|
|
||||||
+++ binutils-2.37/bfd/Makefile.am 2021-12-01 13:35:43.139988261 +0000
|
|
||||||
@@ -567,7 +567,9 @@ BFD64_BACKENDS = \
|
|
||||||
mach-o-aarch64.lo \
|
|
||||||
mach-o-x86-64.lo \
|
|
||||||
mmo.lo \
|
|
||||||
+ pe-aarch64igen.lo \
|
|
||||||
pe-x86_64.lo \
|
|
||||||
+ pei-aarch64lo \
|
|
||||||
pei-ia64.lo \
|
|
||||||
pei-x86_64.lo \
|
|
||||||
pepigen.lo \
|
|
||||||
@@ -607,6 +609,7 @@ BFD64_BACKENDS_CFILES = \
|
|
||||||
mach-o-x86-64.c \
|
|
||||||
mmo.c \
|
|
||||||
pe-x86_64.c \
|
|
||||||
+ pei-aarch64.c \
|
|
||||||
pei-ia64.c \
|
|
||||||
pei-x86_64.c \
|
|
||||||
vms-alpha.c
|
|
||||||
@@ -666,7 +669,7 @@ BUILD_CFILES = \
|
|
||||||
elf32-aarch64.c elf64-aarch64.c \
|
|
||||||
elf32-ia64.c elf64-ia64.c \
|
|
||||||
elf32-riscv.c elf64-riscv.c \
|
|
||||||
- peigen.c pepigen.c pex64igen.c
|
|
||||||
+ peigen.c pepigen.c pex64igen.c pe-aarch64igen.c
|
|
||||||
|
|
||||||
CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
|
|
||||||
|
|
||||||
@@ -862,6 +865,10 @@ pex64igen.c: peXXigen.c
|
|
||||||
echo "#line 1 \"peXXigen.c\"" > $@
|
|
||||||
$(SED) -e s/XX/pex64/g < $< >> $@
|
|
||||||
|
|
||||||
+pe-aarch64igen.c: peXXigen.c
|
|
||||||
+ echo "#line 1 \"peXXigen.c\"" > $@
|
|
||||||
+ $(SED) -e s/XX/peAArch64/g < $< >> $@
|
|
||||||
+
|
|
||||||
BFD_H_DEPS= $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/diagnostics.h
|
|
||||||
LOCAL_H_DEPS= libbfd.h sysdep.h config.h
|
|
||||||
$(BFD32_LIBS) \
|
|
||||||
diff -rup binutils.orig/bfd/Makefile.in binutils-2.37/bfd/Makefile.in
|
|
||||||
--- binutils.orig/bfd/Makefile.in 2021-12-01 13:35:33.823078148 +0000
|
|
||||||
+++ binutils-2.37/bfd/Makefile.in 2021-12-01 13:35:43.139988261 +0000
|
|
||||||
@@ -994,7 +994,9 @@ BFD64_BACKENDS = \
|
|
||||||
mach-o-aarch64.lo \
|
|
||||||
mach-o-x86-64.lo \
|
|
||||||
mmo.lo \
|
|
||||||
+ pe-aarch64igen.lo \
|
|
||||||
pe-x86_64.lo \
|
|
||||||
+ pei-aarch64.lo \
|
|
||||||
pei-ia64.lo \
|
|
||||||
pei-x86_64.lo \
|
|
||||||
pepigen.lo \
|
|
||||||
@@ -1034,6 +1036,7 @@ BFD64_BACKENDS_CFILES = \
|
|
||||||
mach-o-x86-64.c \
|
|
||||||
mmo.c \
|
|
||||||
pe-x86_64.c \
|
|
||||||
+ pei-aarch64.c \
|
|
||||||
pei-ia64.c \
|
|
||||||
pei-x86_64.c \
|
|
||||||
vms-alpha.c
|
|
||||||
@@ -1092,7 +1095,7 @@ BUILD_CFILES = \
|
|
||||||
elf32-aarch64.c elf64-aarch64.c \
|
|
||||||
elf32-ia64.c elf64-ia64.c \
|
|
||||||
elf32-riscv.c elf64-riscv.c \
|
|
||||||
- peigen.c pepigen.c pex64igen.c
|
|
||||||
+ peigen.c pepigen.c pex64igen.c pe-aarch64igen.c
|
|
||||||
|
|
||||||
CFILES = $(SOURCE_CFILES) $(BUILD_CFILES)
|
|
||||||
SOURCE_HFILES = \
|
|
||||||
@@ -1551,9 +1554,11 @@ distclean-compile:
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-mcore.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-sh.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-x86_64.Plo@am__quote@
|
|
||||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-aarch64.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peigen.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pepigen.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pex64igen.Plo@am__quote@
|
|
||||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-aarch64igen.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppcboot.Plo@am__quote@
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reloc.Plo@am__quote@
|
|
||||||
@@ -1991,6 +1996,11 @@ pepigen.c : peXXigen.c
|
|
||||||
pex64igen.c: peXXigen.c
|
|
||||||
echo "#line 1 \"peXXigen.c\"" > $@
|
|
||||||
$(SED) -e s/XX/pex64/g < $< >> $@
|
|
||||||
+
|
|
||||||
+pe-aarch64igen.c: peXXigen.c
|
|
||||||
+ echo "#line 1 \"peXXigen.c\"" > $@
|
|
||||||
+ $(SED) -e s/XX/peAArch64/g < $< >> $@
|
|
||||||
+
|
|
||||||
$(BFD32_LIBS) \
|
|
||||||
$(BFD64_LIBS) \
|
|
||||||
$(ALL_MACHINES) \
|
|
||||||
diff -rup binutils.orig/bfd/bfd.c binutils-2.37/bfd/bfd.c
|
|
||||||
--- binutils.orig/bfd/bfd.c 2021-12-01 13:35:33.821078167 +0000
|
|
||||||
+++ binutils-2.37/bfd/bfd.c 2021-12-01 13:35:43.139988261 +0000
|
|
||||||
@@ -1735,6 +1735,7 @@ bfd_get_sign_extend_vma (bfd *abfd)
|
|
||||||
|| strcmp (name, "pei-i386") == 0
|
|
||||||
|| strcmp (name, "pe-x86-64") == 0
|
|
||||||
|| strcmp (name, "pei-x86-64") == 0
|
|
||||||
+ || strcmp (name, "pei-aarch64-little") == 0
|
|
||||||
|| strcmp (name, "pe-arm-wince-little") == 0
|
|
||||||
|| strcmp (name, "pei-arm-wince-little") == 0
|
|
||||||
|| strcmp (name, "aixcoff-rs6000") == 0
|
|
||||||
Only in binutils-2.37/bfd: coff-aarch64.c
|
|
||||||
diff -rup binutils.orig/bfd/coffcode.h binutils-2.37/bfd/coffcode.h
|
|
||||||
--- binutils.orig/bfd/coffcode.h 2021-12-01 13:35:33.822078158 +0000
|
|
||||||
+++ binutils-2.37/bfd/coffcode.h 2021-12-01 13:35:43.140988251 +0000
|
|
||||||
@@ -2215,6 +2215,12 @@ coff_set_arch_mach_hook (bfd *abfd, void
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
+#ifdef AARCH64MAGIC
|
|
||||||
+ case AARCH64MAGIC:
|
|
||||||
+ arch = bfd_arch_aarch64;
|
|
||||||
+ machine = internal_f->f_flags & F_AARCH64_ARCHITECTURE_MASK;
|
|
||||||
+ break;
|
|
||||||
+#endif
|
|
||||||
#ifdef Z80MAGIC
|
|
||||||
case Z80MAGIC:
|
|
||||||
arch = bfd_arch_z80;
|
|
||||||
@@ -2771,6 +2777,12 @@ coff_set_flags (bfd * abfd,
|
|
||||||
return true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifdef AARCH64MAGIC
|
|
||||||
+ case bfd_arch_aarch64:
|
|
||||||
+ * magicp = AARCH64MAGIC;
|
|
||||||
+ return true;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#ifdef ARMMAGIC
|
|
||||||
case bfd_arch_arm:
|
|
||||||
#ifdef ARM_WINCE
|
|
||||||
@@ -3866,7 +3878,7 @@ coff_write_object_contents (bfd * abfd)
|
|
||||||
internal_f.f_flags |= IMAGE_FILE_LARGE_ADDRESS_AWARE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#ifndef COFF_WITH_pex64
|
|
||||||
+#if !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
#ifdef COFF_WITH_PE
|
|
||||||
internal_f.f_flags |= IMAGE_FILE_32BIT_MACHINE;
|
|
||||||
#else
|
|
||||||
@@ -3914,6 +3926,11 @@ coff_write_object_contents (bfd * abfd)
|
|
||||||
#define __A_MAGIC_SET__
|
|
||||||
internal_a.magic = ZMAGIC;
|
|
||||||
#endif
|
|
||||||
+
|
|
||||||
+#if defined(AARCH64)
|
|
||||||
+#define __A_MAGIC_SET__
|
|
||||||
+ internal_a.magic = ZMAGIC;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
#if defined MCORE_PE
|
|
||||||
#define __A_MAGIC_SET__
|
|
||||||
diff -rup binutils.orig/bfd/config.bfd binutils-2.37/bfd/config.bfd
|
|
||||||
--- binutils.orig/bfd/config.bfd 2021-12-01 13:35:33.833078051 +0000
|
|
||||||
+++ binutils-2.37/bfd/config.bfd 2021-12-01 13:35:43.140988251 +0000
|
|
||||||
@@ -232,7 +232,7 @@ case "${targ}" in
|
|
||||||
;;
|
|
||||||
aarch64-*-elf | aarch64-*-rtems* | aarch64-*-genode*)
|
|
||||||
targ_defvec=aarch64_elf64_le_vec
|
|
||||||
- targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec"
|
|
||||||
+ targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_vec"
|
|
||||||
want64=true
|
|
||||||
;;
|
|
||||||
aarch64_be-*-elf)
|
|
||||||
@@ -257,7 +257,7 @@ case "${targ}" in
|
|
||||||
;;
|
|
||||||
aarch64-*-linux* | aarch64-*-netbsd*)
|
|
||||||
targ_defvec=aarch64_elf64_le_vec
|
|
||||||
- targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec"
|
|
||||||
+ targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_vec"
|
|
||||||
want64=true
|
|
||||||
;;
|
|
||||||
aarch64_be-*-linux* | aarch64_be-*-netbsd*)
|
|
||||||
diff -rup binutils.orig/bfd/configure binutils-2.37/bfd/configure
|
|
||||||
--- binutils.orig/bfd/configure 2021-12-01 13:35:33.817078206 +0000
|
|
||||||
+++ binutils-2.37/bfd/configure 2021-12-01 13:35:43.141988241 +0000
|
|
||||||
@@ -13283,6 +13283,7 @@ do
|
|
||||||
aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
aarch64_mach_o_vec) tb="$tb mach-o-aarch64.lo"; target_size=64 ;;
|
|
||||||
+ aarch64_pei_vec) tb="$tb pei-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
|
|
||||||
alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
|
|
||||||
alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
diff -rup binutils.orig/bfd/configure.ac binutils-2.37/bfd/configure.ac
|
|
||||||
--- binutils.orig/bfd/configure.ac 2021-12-01 13:35:33.829078090 +0000
|
|
||||||
+++ binutils-2.37/bfd/configure.ac 2021-12-01 13:35:43.141988241 +0000
|
|
||||||
@@ -439,6 +439,7 @@ do
|
|
||||||
aarch64_elf64_le_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
aarch64_elf64_le_cloudabi_vec) tb="$tb elf64-aarch64.lo elfxx-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
aarch64_mach_o_vec) tb="$tb mach-o-aarch64.lo"; target_size=64 ;;
|
|
||||||
+ aarch64_pei_vec) tb="$tb pei-aarch64.lo pe-aarch64igen.lo $coff"; target_size=64 ;;
|
|
||||||
alpha_ecoff_le_vec) tb="$tb coff-alpha.lo ecoff.lo $ecoff"; target_size=64 ;;
|
|
||||||
alpha_elf64_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
alpha_elf64_fbsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
|
|
||||||
diff -rup binutils.orig/bfd/libpei.h binutils-2.37/bfd/libpei.h
|
|
||||||
--- binutils.orig/bfd/libpei.h 2021-12-01 13:35:33.830078081 +0000
|
|
||||||
+++ binutils-2.37/bfd/libpei.h 2021-12-01 13:35:43.141988241 +0000
|
|
||||||
@@ -275,6 +275,41 @@
|
|
||||||
#define _bfd_XXi_write_codeview_record _bfd_pepi_write_codeview_record
|
|
||||||
#define _bfd_XXi_slurp_codeview_record _bfd_pepi_slurp_codeview_record
|
|
||||||
|
|
||||||
+#elif defined COFF_WITH_peAArch64
|
|
||||||
+
|
|
||||||
+#define GET_OPTHDR_IMAGE_BASE H_GET_64
|
|
||||||
+#define PUT_OPTHDR_IMAGE_BASE H_PUT_64
|
|
||||||
+#define GET_OPTHDR_SIZE_OF_STACK_RESERVE H_GET_64
|
|
||||||
+#define PUT_OPTHDR_SIZE_OF_STACK_RESERVE H_PUT_64
|
|
||||||
+#define GET_OPTHDR_SIZE_OF_STACK_COMMIT H_GET_64
|
|
||||||
+#define PUT_OPTHDR_SIZE_OF_STACK_COMMIT H_PUT_64
|
|
||||||
+#define GET_OPTHDR_SIZE_OF_HEAP_RESERVE H_GET_64
|
|
||||||
+#define PUT_OPTHDR_SIZE_OF_HEAP_RESERVE H_PUT_64
|
|
||||||
+#define GET_OPTHDR_SIZE_OF_HEAP_COMMIT H_GET_64
|
|
||||||
+#define PUT_OPTHDR_SIZE_OF_HEAP_COMMIT H_PUT_64
|
|
||||||
+#define GET_PDATA_ENTRY bfd_get_32
|
|
||||||
+
|
|
||||||
+#define _bfd_XX_bfd_copy_private_bfd_data_common _bfd_peAArch64_bfd_copy_private_bfd_data_common
|
|
||||||
+#define _bfd_XX_bfd_copy_private_section_data _bfd_peAArch64_bfd_copy_private_section_data
|
|
||||||
+#define _bfd_XX_get_symbol_info _bfd_peAArch64_get_symbol_info
|
|
||||||
+#define _bfd_XX_only_swap_filehdr_out _bfd_peAArch64_only_swap_filehdr_out
|
|
||||||
+#define _bfd_XX_print_private_bfd_data_common _bfd_peAArch64_print_private_bfd_data_common
|
|
||||||
+#define _bfd_XXi_final_link_postscript _bfd_peAArch64i_final_link_postscript
|
|
||||||
+#define _bfd_XXi_only_swap_filehdr_out _bfd_peAArch64i_only_swap_filehdr_out
|
|
||||||
+#define _bfd_XXi_swap_aouthdr_in _bfd_peAArch64i_swap_aouthdr_in
|
|
||||||
+#define _bfd_XXi_swap_aouthdr_out _bfd_peAArch64i_swap_aouthdr_out
|
|
||||||
+#define _bfd_XXi_swap_aux_in _bfd_peAArch64i_swap_aux_in
|
|
||||||
+#define _bfd_XXi_swap_aux_out _bfd_peAArch64i_swap_aux_out
|
|
||||||
+#define _bfd_XXi_swap_lineno_in _bfd_peAArch64i_swap_lineno_in
|
|
||||||
+#define _bfd_XXi_swap_lineno_out _bfd_peAArch64i_swap_lineno_out
|
|
||||||
+#define _bfd_XXi_swap_scnhdr_out _bfd_peAArch64i_swap_scnhdr_out
|
|
||||||
+#define _bfd_XXi_swap_sym_in _bfd_peAArch64i_swap_sym_in
|
|
||||||
+#define _bfd_XXi_swap_sym_out _bfd_peAArch64i_swap_sym_out
|
|
||||||
+#define _bfd_XXi_swap_debugdir_in _bfd_peAArch64i_swap_debugdir_in
|
|
||||||
+#define _bfd_XXi_swap_debugdir_out _bfd_peAArch64i_swap_debugdir_out
|
|
||||||
+#define _bfd_XXi_write_codeview_record _bfd_peAArch64i_write_codeview_record
|
|
||||||
+#define _bfd_XXi_slurp_codeview_record _bfd_peAArch64i_slurp_codeview_record
|
|
||||||
+
|
|
||||||
#else /* !COFF_WITH_pep */
|
|
||||||
|
|
||||||
#define GET_OPTHDR_IMAGE_BASE H_GET_32
|
|
||||||
@@ -369,5 +404,6 @@ bool _bfd_XX_bfd_copy_private_section_da
|
|
||||||
bool _bfd_pe_print_ce_compressed_pdata (bfd *, void *);
|
|
||||||
bool _bfd_pe64_print_ce_compressed_pdata (bfd *, void *);
|
|
||||||
bool _bfd_pex64_print_ce_compressed_pdata (bfd *, void *);
|
|
||||||
+bool _bfd_peAArch64_print_ce_compressed_pdata (bfd *, void *);
|
|
||||||
bool _bfd_pep_print_ce_compressed_pdata (bfd *, void *);
|
|
||||||
|
|
||||||
diff -rup binutils.orig/bfd/peXXigen.c binutils-2.37/bfd/peXXigen.c
|
|
||||||
--- binutils.orig/bfd/peXXigen.c 2021-12-01 13:35:33.827078110 +0000
|
|
||||||
+++ binutils-2.37/bfd/peXXigen.c 2021-12-01 13:35:43.142988232 +0000
|
|
||||||
@@ -60,8 +60,9 @@
|
|
||||||
on this code has a chance of getting something accomplished without
|
|
||||||
wasting too much time. */
|
|
||||||
|
|
||||||
-/* This expands into COFF_WITH_pe, COFF_WITH_pep, or COFF_WITH_pex64
|
|
||||||
- depending on whether we're compiling for straight PE or PE+. */
|
|
||||||
+/* This expands into COFF_WITH_pe, COFF_WITH_pep, COFF_WITH_pex64 or
|
|
||||||
+ COFF_WITH_peAArch64 depending on whether we're compiling for straight
|
|
||||||
+ PE or PE+. */
|
|
||||||
#define COFF_WITH_XX
|
|
||||||
|
|
||||||
#include "sysdep.h"
|
|
||||||
@@ -83,6 +84,8 @@
|
|
||||||
# include "coff/x86_64.h"
|
|
||||||
#elif defined COFF_WITH_pep
|
|
||||||
# include "coff/ia64.h"
|
|
||||||
+#elif defined COFF_WITH_peAArch64
|
|
||||||
+# include "coff/aarch64.h"
|
|
||||||
#else
|
|
||||||
# include "coff/i386.h"
|
|
||||||
#endif
|
|
||||||
@@ -92,7 +95,7 @@
|
|
||||||
#include "libpei.h"
|
|
||||||
#include "safe-ctype.h"
|
|
||||||
|
|
||||||
-#if defined COFF_WITH_pep || defined COFF_WITH_pex64
|
|
||||||
+#if defined COFF_WITH_pep || defined COFF_WITH_pex64 || defined COFF_WITH_peAArch64
|
|
||||||
# undef AOUTSZ
|
|
||||||
# define AOUTSZ PEPAOUTSZ
|
|
||||||
# define PEAOUTHDR PEPAOUTHDR
|
|
||||||
@@ -469,7 +472,7 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
|
|
||||||
aouthdr_int->text_start =
|
|
||||||
GET_AOUTHDR_TEXT_START (abfd, aouthdr_ext->text_start);
|
|
||||||
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
/* PE32+ does not have data_start member! */
|
|
||||||
aouthdr_int->data_start =
|
|
||||||
GET_AOUTHDR_DATA_START (abfd, aouthdr_ext->data_start);
|
|
||||||
@@ -555,7 +558,7 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
|
|
||||||
if (aouthdr_int->entry)
|
|
||||||
{
|
|
||||||
aouthdr_int->entry += a->ImageBase;
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
aouthdr_int->entry &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -563,12 +566,12 @@ _bfd_XXi_swap_aouthdr_in (bfd * abfd,
|
|
||||||
if (aouthdr_int->tsize)
|
|
||||||
{
|
|
||||||
aouthdr_int->text_start += a->ImageBase;
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
aouthdr_int->text_start &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
/* PE32+ does not have data_start member! */
|
|
||||||
if (aouthdr_int->dsize)
|
|
||||||
{
|
|
||||||
@@ -628,7 +631,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
|
|
||||||
if (aouthdr_in->tsize)
|
|
||||||
{
|
|
||||||
aouthdr_in->text_start -= ib;
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
aouthdr_in->text_start &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -636,7 +639,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
|
|
||||||
if (aouthdr_in->dsize)
|
|
||||||
{
|
|
||||||
aouthdr_in->data_start -= ib;
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
aouthdr_in->data_start &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -644,7 +647,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
|
|
||||||
if (aouthdr_in->entry)
|
|
||||||
{
|
|
||||||
aouthdr_in->entry -= ib;
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
aouthdr_in->entry &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -748,7 +751,7 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, v
|
|
||||||
PUT_AOUTHDR_TEXT_START (abfd, aouthdr_in->text_start,
|
|
||||||
aouthdr_out->standard.text_start);
|
|
||||||
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
/* PE32+ does not have data_start member! */
|
|
||||||
PUT_AOUTHDR_DATA_START (abfd, aouthdr_in->data_start,
|
|
||||||
aouthdr_out->standard.data_start);
|
|
||||||
@@ -1800,7 +1803,7 @@ pe_print_edata (bfd * abfd, void * vfile
|
|
||||||
static bool
|
|
||||||
pe_print_pdata (bfd * abfd, void * vfile)
|
|
||||||
{
|
|
||||||
-#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
# define PDATA_ROW_SIZE (3 * 8)
|
|
||||||
#else
|
|
||||||
# define PDATA_ROW_SIZE (5 * 4)
|
|
||||||
@@ -1827,7 +1830,7 @@ pe_print_pdata (bfd * abfd, void * vfile
|
|
||||||
|
|
||||||
fprintf (file,
|
|
||||||
_("\nThe Function Table (interpreted .pdata section contents)\n"));
|
|
||||||
-#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
fprintf (file,
|
|
||||||
_(" vma:\t\t\tBegin Address End Address Unwind Info\n"));
|
|
||||||
#else
|
|
||||||
@@ -1864,7 +1867,7 @@ pe_print_pdata (bfd * abfd, void * vfile
|
|
||||||
bfd_vma eh_handler;
|
|
||||||
bfd_vma eh_data;
|
|
||||||
bfd_vma prolog_end_addr;
|
|
||||||
-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
|
|
||||||
int em_data;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -1882,7 +1885,7 @@ pe_print_pdata (bfd * abfd, void * vfile
|
|
||||||
/* We are probably into the padding of the section now. */
|
|
||||||
break;
|
|
||||||
|
|
||||||
-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
|
|
||||||
em_data = ((eh_handler & 0x1) << 2) | (prolog_end_addr & 0x3);
|
|
||||||
#endif
|
|
||||||
eh_handler &= ~(bfd_vma) 0x3;
|
|
||||||
@@ -1893,7 +1896,7 @@ pe_print_pdata (bfd * abfd, void * vfile
|
|
||||||
bfd_fprintf_vma (abfd, file, begin_addr); fputc (' ', file);
|
|
||||||
bfd_fprintf_vma (abfd, file, end_addr); fputc (' ', file);
|
|
||||||
bfd_fprintf_vma (abfd, file, eh_handler);
|
|
||||||
-#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
|
|
||||||
fputc (' ', file);
|
|
||||||
bfd_fprintf_vma (abfd, file, eh_data); fputc (' ', file);
|
|
||||||
bfd_fprintf_vma (abfd, file, prolog_end_addr);
|
|
||||||
@@ -2784,7 +2787,7 @@ _bfd_XX_print_private_bfd_data_common (b
|
|
||||||
bfd_fprintf_vma (abfd, file, i->AddressOfEntryPoint);
|
|
||||||
fprintf (file, "\nBaseOfCode\t\t");
|
|
||||||
bfd_fprintf_vma (abfd, file, i->BaseOfCode);
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
/* PE32+ does not have BaseOfData member! */
|
|
||||||
fprintf (file, "\nBaseOfData\t\t");
|
|
||||||
bfd_fprintf_vma (abfd, file, i->BaseOfData);
|
|
||||||
@@ -3085,7 +3088,7 @@ _bfd_XX_get_symbol_info (bfd * abfd, asy
|
|
||||||
coff_get_symbol_info (abfd, symbol, ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
-#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64) && defined(COFF_WITH_peAArch64)
|
|
||||||
static int
|
|
||||||
sort_x64_pdata (const void *l, const void *r)
|
|
||||||
{
|
|
||||||
@@ -4504,7 +4507,7 @@ _bfd_XXi_final_link_postscript (bfd * ab
|
|
||||||
the TLS data directory consists of 4 pointers, followed
|
|
||||||
by two 4-byte integer. This implies that the total size
|
|
||||||
is different for 32-bit and 64-bit executables. */
|
|
||||||
-#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
pe_data (abfd)->pe_opthdr.DataDirectory[PE_TLS_TABLE].Size = 0x18;
|
|
||||||
#else
|
|
||||||
pe_data (abfd)->pe_opthdr.DataDirectory[PE_TLS_TABLE].Size = 0x28;
|
|
||||||
@@ -4513,7 +4516,7 @@ _bfd_XXi_final_link_postscript (bfd * ab
|
|
||||||
|
|
||||||
/* If there is a .pdata section and we have linked pdata finally, we
|
|
||||||
need to sort the entries ascending. */
|
|
||||||
-#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64)
|
|
||||||
+#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64) && defined(COFF_WITH_peAArch64)
|
|
||||||
{
|
|
||||||
asection *sec = bfd_get_section_by_name (abfd, ".pdata");
|
|
||||||
|
|
||||||
Only in binutils-2.37/bfd: pei-aarch64.c
|
|
||||||
diff -rup binutils.orig/bfd/peicode.h binutils-2.37/bfd/peicode.h
|
|
||||||
--- binutils.orig/bfd/peicode.h 2021-12-01 13:35:33.829078090 +0000
|
|
||||||
+++ binutils-2.37/bfd/peicode.h 2021-12-01 13:35:43.142988232 +0000
|
|
||||||
@@ -231,7 +231,7 @@ coff_swap_scnhdr_in (bfd * abfd, void *
|
|
||||||
{
|
|
||||||
scnhdr_int->s_vaddr += pe_data (abfd)->pe_opthdr.ImageBase;
|
|
||||||
/* Do not cut upper 32-bits for 64-bit vma. */
|
|
||||||
-#ifndef COFF_WITH_pex64
|
|
||||||
+#if !defined(COFF_WITH_pex64) && !defined(COFF_WITH_peAArch64)
|
|
||||||
scnhdr_int->s_vaddr &= 0xffffffff;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -738,6 +738,16 @@ static const jump_table jtab[] =
|
|
||||||
},
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifdef AARCH64MAGIC
|
|
||||||
+/* We don't currently support jumping to DLLs, so if
|
|
||||||
+ someone does try emit a runtime trap. Through UDF #0. */
|
|
||||||
+ { AARCH64MAGIC,
|
|
||||||
+ { 0x00, 0x00, 0x00, 0x00 },
|
|
||||||
+ 4, 0
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#ifdef ARMPEMAGIC
|
|
||||||
{ ARMPEMAGIC,
|
|
||||||
{ 0x00, 0xc0, 0x9f, 0xe5, 0x00, 0xf0,
|
|
||||||
@@ -910,7 +920,7 @@ pe_ILF_build_a_bfd (bfd * abfd,
|
|
||||||
/* See PR 20907 for a reproducer. */
|
|
||||||
goto error_return;
|
|
||||||
|
|
||||||
-#ifdef COFF_WITH_pex64
|
|
||||||
+#if defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64)
|
|
||||||
((unsigned int *) id4->contents)[0] = ordinal;
|
|
||||||
((unsigned int *) id4->contents)[1] = 0x80000000;
|
|
||||||
((unsigned int *) id5->contents)[0] = ordinal;
|
|
||||||
@@ -1206,6 +1216,12 @@ pe_ILF_object_p (bfd * abfd)
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
+ case IMAGE_FILE_MACHINE_ARM64:
|
|
||||||
+#ifdef AARCH64MAGIC
|
|
||||||
+ magic = AARCH64MAGIC;
|
|
||||||
+#endif
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
case IMAGE_FILE_MACHINE_THUMB:
|
|
||||||
#ifdef THUMBPEMAGIC
|
|
||||||
{
|
|
||||||
diff -rup binutils.orig/bfd/targets.c binutils-2.37/bfd/targets.c
|
|
||||||
--- binutils.orig/bfd/targets.c 2021-12-01 13:35:33.829078090 +0000
|
|
||||||
+++ binutils-2.37/bfd/targets.c 2021-12-01 13:35:43.142988232 +0000
|
|
||||||
@@ -679,6 +679,7 @@ extern const bfd_target aarch64_elf64_be
|
|
||||||
extern const bfd_target aarch64_elf64_le_vec;
|
|
||||||
extern const bfd_target aarch64_elf64_le_cloudabi_vec;
|
|
||||||
extern const bfd_target aarch64_mach_o_vec;
|
|
||||||
+extern const bfd_target aarch64_pei_vec;
|
|
||||||
extern const bfd_target alpha_ecoff_le_vec;
|
|
||||||
extern const bfd_target alpha_elf64_vec;
|
|
||||||
extern const bfd_target alpha_elf64_fbsd_vec;
|
|
||||||
@@ -991,6 +992,7 @@ static const bfd_target * const _bfd_tar
|
|
||||||
&aarch64_elf64_le_vec,
|
|
||||||
&aarch64_elf64_le_cloudabi_vec,
|
|
||||||
&aarch64_mach_o_vec,
|
|
||||||
+ &aarch64_pei_vec,
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef BFD64
|
|
||||||
diff -rup binutils.orig/binutils/NEWS binutils-2.37/binutils/NEWS
|
|
||||||
--- binutils.orig/binutils/NEWS 2021-12-01 13:35:33.320083001 +0000
|
|
||||||
+++ binutils-2.37/binutils/NEWS 2021-12-01 13:35:43.142988232 +0000
|
|
||||||
@@ -9,6 +9,9 @@
|
|
||||||
using --unicode=highlight will display them as unicode escape sequences
|
|
||||||
highlighted in red (if supported by the output device).
|
|
||||||
|
|
||||||
+* Support for efi-app-aarch64, efi-rtdrv-aarch64 and efi-bsdrv-aarch64 has been
|
|
||||||
+ added to objcopy in order to enable UEFI development using binutils.
|
|
||||||
+
|
|
||||||
Changes in 2.37:
|
|
||||||
|
|
||||||
* The readelf tool has a new command line option which can be used to specify
|
|
||||||
Only in binutils.orig/binutils: NEWS.orig
|
|
||||||
Only in binutils.orig/binutils: NEWS.rej
|
|
||||||
Only in binutils.orig/binutils: nm.c.orig
|
|
||||||
diff -rup binutils.orig/binutils/objcopy.c binutils-2.37/binutils/objcopy.c
|
|
||||||
--- binutils.orig/binutils/objcopy.c 2021-12-01 13:35:33.302083174 +0000
|
|
||||||
+++ binutils-2.37/binutils/objcopy.c 2021-12-01 13:35:43.143988222 +0000
|
|
||||||
@@ -4987,6 +4987,13 @@ convert_efi_target (char *efi)
|
|
||||||
/* Change x86_64 to x86-64. */
|
|
||||||
efi[7] = '-';
|
|
||||||
}
|
|
||||||
+ else if (strcmp (efi + 4, "aarch64") == 0)
|
|
||||||
+ {
|
|
||||||
+ /* Change aarch64 to aarch64-little. */
|
|
||||||
+ efi = (char *) xrealloc (efi, strlen (efi) + 7);
|
|
||||||
+ char *t = "aarch64-little";
|
|
||||||
+ strcpy (efi + 4, t);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocate and return a pointer to a struct section_add, initializing the
|
|
||||||
Only in binutils.orig/binutils: objdump.c.orig
|
|
||||||
Only in binutils.orig/binutils: objdump.c.rej
|
|
||||||
Only in binutils.orig/binutils: readelf.c.orig
|
|
||||||
Only in binutils-2.37/binutils/testsuite/binutils-all/aarch64: pei-aarch64-little.d
|
|
||||||
Only in binutils-2.37/binutils/testsuite/binutils-all/aarch64: pei-aarch64-little.s
|
|
||||||
Only in binutils-2.37/include/coff: aarch64.h
|
|
||||||
diff -rup binutils.orig/include/coff/pe.h binutils-2.37/include/coff/pe.h
|
|
||||||
--- binutils.orig/include/coff/pe.h 2021-12-01 13:35:33.251083666 +0000
|
|
||||||
+++ binutils-2.37/include/coff/pe.h 2021-12-01 13:35:43.143988222 +0000
|
|
||||||
@@ -137,6 +137,7 @@
|
|
||||||
#define IMAGE_FILE_MACHINE_AM33 0x01d3
|
|
||||||
#define IMAGE_FILE_MACHINE_AMD64 0x8664
|
|
||||||
#define IMAGE_FILE_MACHINE_ARM 0x01c0
|
|
||||||
+#define IMAGE_FILE_MACHINE_ARM64 0xaa64
|
|
||||||
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
|
|
||||||
#define IMAGE_FILE_MACHINE_CEE 0xc0ee
|
|
||||||
#define IMAGE_FILE_MACHINE_CEF 0x0cef
|
|
||||||
--- /dev/null 2021-12-01 09:13:46.241760896 +0000
|
|
||||||
+++ binutils-2.37/include/coff/aarch64.h 2021-12-01 13:35:43.143988222 +0000
|
|
||||||
@@ -0,0 +1,63 @@
|
|
||||||
+/* AArch64 COFF support for BFD.
|
|
||||||
+ Copyright (C) 2021 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program; if not, write to the Free Software Foundation,
|
|
||||||
+ Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
|
|
||||||
+
|
|
||||||
+#define COFFAARCH64 1
|
|
||||||
+
|
|
||||||
+#define L_LNNO_SIZE 2
|
|
||||||
+#define INCLUDE_COMDAT_FIELDS_IN_AUXENT
|
|
||||||
+#include "coff/external.h"
|
|
||||||
+
|
|
||||||
+#define F_AARCH64_ARCHITECTURE_MASK (0x4000)
|
|
||||||
+
|
|
||||||
+#define AARCH64MAGIC 0xaa64 /* From Microsoft specification. */
|
|
||||||
+
|
|
||||||
+#undef BADMAG
|
|
||||||
+#define BADMAG(x) ((x).f_magic != AARCH64MAGIC)
|
|
||||||
+#define AARCH64 1 /* Customize coffcode.h. */
|
|
||||||
+
|
|
||||||
+#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
|
|
||||||
+
|
|
||||||
+#define OMAGIC 0404 /* Object files, eg as output. */
|
|
||||||
+#define ZMAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC /* Demand load format, eg normal ld output 0x10b. */
|
|
||||||
+#define STMAGIC 0401 /* Target shlib. */
|
|
||||||
+#define SHMAGIC 0443 /* Host shlib. */
|
|
||||||
+
|
|
||||||
+/* define some NT default values */
|
|
||||||
+/* #define NT_IMAGE_BASE 0x400000 moved to internal.h */
|
|
||||||
+#define NT_SECTION_ALIGNMENT 0x1000
|
|
||||||
+#define NT_FILE_ALIGNMENT 0x200
|
|
||||||
+#define NT_DEF_RESERVE 0x100000
|
|
||||||
+#define NT_DEF_COMMIT 0x1000
|
|
||||||
+
|
|
||||||
+/* We use the .rdata section to hold read only data. */
|
|
||||||
+#define _LIT ".rdata"
|
|
||||||
+
|
|
||||||
+/********************** RELOCATION DIRECTIVES **********************/
|
|
||||||
+struct external_reloc
|
|
||||||
+{
|
|
||||||
+ char r_vaddr[4];
|
|
||||||
+ char r_symndx[4];
|
|
||||||
+ char r_type[2];
|
|
||||||
+ char r_offset[4];
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#define RELOC struct external_reloc
|
|
||||||
+#define RELSZ 14
|
|
||||||
+
|
|
||||||
+#define ARM_NOTE_SECTION ".note"
|
|
||||||
--- /dev/null 2021-12-01 09:13:46.241760896 +0000
|
|
||||||
+++ binutils-2.37/bfd/coff-aarch64.c 2021-12-01 13:35:43.139988261 +0000
|
|
||||||
@@ -0,0 +1,166 @@
|
|
||||||
+/* BFD back-end for AArch64 COFF files.
|
|
||||||
+ Copyright (C) 2021 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program; if not, write to the Free Software
|
|
||||||
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
+ MA 02110-1301, USA. */
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+#ifndef COFF_WITH_peAArch64
|
|
||||||
+#define COFF_WITH_peAArch64
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+/* Note we have to make sure not to include headers twice.
|
|
||||||
+ Not all headers are wrapped in #ifdef guards, so we define
|
|
||||||
+ PEI_HEADERS to prevent double including here. */
|
|
||||||
+#ifndef PEI_HEADERS
|
|
||||||
+#include "sysdep.h"
|
|
||||||
+#include "bfd.h"
|
|
||||||
+#include "libbfd.h"
|
|
||||||
+#include "coff/aarch64.h"
|
|
||||||
+#include "coff/internal.h"
|
|
||||||
+#include "coff/pe.h"
|
|
||||||
+#include "libcoff.h"
|
|
||||||
+#include "libiberty.h"
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#include "libcoff.h"
|
|
||||||
+
|
|
||||||
+/* The page size is a guess based on ELF. */
|
|
||||||
+
|
|
||||||
+#define COFF_PAGE_SIZE 0x1000
|
|
||||||
+
|
|
||||||
+/* All users of this file have bfd_octets_per_byte (abfd, sec) == 1. */
|
|
||||||
+#define OCTETS_PER_BYTE(ABFD, SEC) 1
|
|
||||||
+
|
|
||||||
+#ifndef PCRELOFFSET
|
|
||||||
+#define PCRELOFFSET true
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+/* Currently we don't handle any relocations. */
|
|
||||||
+static reloc_howto_type pe_aarch64_std_reloc_howto[] =
|
|
||||||
+ {
|
|
||||||
+
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 2
|
|
||||||
+#define COFF_PAGE_SIZE 0x1000
|
|
||||||
+
|
|
||||||
+#ifndef NUM_ELEM
|
|
||||||
+#define NUM_ELEM(a) ((sizeof (a)) / sizeof ((a)[0]))
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#define NUM_RELOCS NUM_ELEM (pe_aarch64_std_reloc_howto)
|
|
||||||
+
|
|
||||||
+#define RTYPE2HOWTO(cache_ptr, dst) \
|
|
||||||
+ (cache_ptr)->howto = NULL
|
|
||||||
+
|
|
||||||
+#ifndef bfd_pe_print_pdata
|
|
||||||
+#define bfd_pe_print_pdata NULL
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+/* Return TRUE if this relocation should
|
|
||||||
+ appear in the output .reloc section. */
|
|
||||||
+
|
|
||||||
+static bool
|
|
||||||
+in_reloc_p (bfd * abfd ATTRIBUTE_UNUSED,
|
|
||||||
+ reloc_howto_type * howto)
|
|
||||||
+{
|
|
||||||
+ return !howto->pc_relative;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#include "coffcode.h"
|
|
||||||
+
|
|
||||||
+/* Target vectors. */
|
|
||||||
+const bfd_target
|
|
||||||
+#ifdef TARGET_SYM
|
|
||||||
+ TARGET_SYM =
|
|
||||||
+#else
|
|
||||||
+ aarch64_pei_vec =
|
|
||||||
+#endif
|
|
||||||
+{
|
|
||||||
+#ifdef TARGET_NAME
|
|
||||||
+ TARGET_NAME,
|
|
||||||
+#else
|
|
||||||
+ "pei-aarch64-little", /* Name. */
|
|
||||||
+#endif
|
|
||||||
+ bfd_target_coff_flavour,
|
|
||||||
+ BFD_ENDIAN_LITTLE, /* Data byte order is little. */
|
|
||||||
+ BFD_ENDIAN_LITTLE, /* Header byte order is little. */
|
|
||||||
+
|
|
||||||
+ (HAS_RELOC | EXEC_P /* Object flags. */
|
|
||||||
+ | HAS_LINENO | HAS_DEBUG
|
|
||||||
+ | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED | BFD_COMPRESS | BFD_DECOMPRESS),
|
|
||||||
+
|
|
||||||
+ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC /* Section flags. */
|
|
||||||
+#if defined(COFF_WITH_PE)
|
|
||||||
+ | SEC_LINK_ONCE | SEC_LINK_DUPLICATES | SEC_READONLY | SEC_DEBUGGING
|
|
||||||
+#endif
|
|
||||||
+ | SEC_CODE | SEC_DATA | SEC_EXCLUDE ),
|
|
||||||
+
|
|
||||||
+#ifdef TARGET_UNDERSCORE
|
|
||||||
+ TARGET_UNDERSCORE, /* Leading underscore. */
|
|
||||||
+#else
|
|
||||||
+ 0, /* Leading underscore. */
|
|
||||||
+#endif
|
|
||||||
+ '/', /* Ar_pad_char. */
|
|
||||||
+ 15, /* Ar_max_namelen. */
|
|
||||||
+ 0, /* match priority. */
|
|
||||||
+ TARGET_KEEP_UNUSED_SECTION_SYMBOLS, /* keep unused section symbols. */
|
|
||||||
+
|
|
||||||
+ /* Data conversion functions. */
|
|
||||||
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
|
|
||||||
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
|
|
||||||
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Data. */
|
|
||||||
+ /* Header conversion functions. */
|
|
||||||
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
|
|
||||||
+ bfd_getl32, bfd_getl_signed_32, bfd_putl32,
|
|
||||||
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */
|
|
||||||
+
|
|
||||||
+ /* Note that we allow an object file to be treated as a core file as well. */
|
|
||||||
+ { /* bfd_check_format. */
|
|
||||||
+ _bfd_dummy_target,
|
|
||||||
+ coff_object_p,
|
|
||||||
+ bfd_generic_archive_p,
|
|
||||||
+ coff_object_p
|
|
||||||
+ },
|
|
||||||
+ { /* bfd_set_format. */
|
|
||||||
+ _bfd_bool_bfd_false_error,
|
|
||||||
+ coff_mkobject,
|
|
||||||
+ _bfd_generic_mkarchive,
|
|
||||||
+ _bfd_bool_bfd_false_error
|
|
||||||
+ },
|
|
||||||
+ { /* bfd_write_contents. */
|
|
||||||
+ _bfd_bool_bfd_false_error,
|
|
||||||
+ coff_write_object_contents,
|
|
||||||
+ _bfd_write_archive_contents,
|
|
||||||
+ _bfd_bool_bfd_false_error
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ BFD_JUMP_TABLE_GENERIC (coff),
|
|
||||||
+ BFD_JUMP_TABLE_COPY (coff),
|
|
||||||
+ BFD_JUMP_TABLE_CORE (_bfd_nocore),
|
|
||||||
+ BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
|
|
||||||
+ BFD_JUMP_TABLE_SYMBOLS (coff),
|
|
||||||
+ BFD_JUMP_TABLE_RELOCS (coff),
|
|
||||||
+ BFD_JUMP_TABLE_WRITE (coff),
|
|
||||||
+ BFD_JUMP_TABLE_LINK (coff),
|
|
||||||
+ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
|
|
||||||
+
|
|
||||||
+ NULL,
|
|
||||||
+
|
|
||||||
+ COFF_SWAP_TABLE
|
|
||||||
+};
|
|
||||||
--- /dev/null 2021-12-01 09:13:46.241760896 +0000
|
|
||||||
+++ binutils-2.37/binutils/testsuite/binutils-all/aarch64/pei-aarch64-little.s 2021-12-01 13:35:43.143988222 +0000
|
|
||||||
@@ -0,0 +1,42 @@
|
|
||||||
+ .arch armv8-a
|
|
||||||
+ .text
|
|
||||||
+ .align 2
|
|
||||||
+ .global foo
|
|
||||||
+ .type foo, %function
|
|
||||||
+foo:
|
|
||||||
+.LFB0:
|
|
||||||
+ .cfi_startproc
|
|
||||||
+ sub sp, sp, #16
|
|
||||||
+ .cfi_def_cfa_offset 16
|
|
||||||
+ str w0, [sp, 12]
|
|
||||||
+ ldr w0, [sp, 12]
|
|
||||||
+ mul w0, w0, w0
|
|
||||||
+ add sp, sp, 16
|
|
||||||
+ .cfi_def_cfa_offset 0
|
|
||||||
+ ret
|
|
||||||
+ .cfi_endproc
|
|
||||||
+.LFE0:
|
|
||||||
+ .size foo, .-foo
|
|
||||||
+ .align 2
|
|
||||||
+ .global main
|
|
||||||
+ .type main, %function
|
|
||||||
+main:
|
|
||||||
+.LFB1:
|
|
||||||
+ .cfi_startproc
|
|
||||||
+ stp x29, x30, [sp, -16]!
|
|
||||||
+ .cfi_def_cfa_offset 16
|
|
||||||
+ .cfi_offset 29, -16
|
|
||||||
+ .cfi_offset 30, -8
|
|
||||||
+ mov x29, sp
|
|
||||||
+ mov w0, 5
|
|
||||||
+ bl foo
|
|
||||||
+ ldp x29, x30, [sp], 16
|
|
||||||
+ .cfi_restore 30
|
|
||||||
+ .cfi_restore 29
|
|
||||||
+ .cfi_def_cfa_offset 0
|
|
||||||
+ ret
|
|
||||||
+ .cfi_endproc
|
|
||||||
+.LFE1:
|
|
||||||
+ .size main, .-main
|
|
||||||
+ .ident "GCC: (fsf-trunk.2870) 12.0.0 20210930 (experimental)"
|
|
||||||
+ .section .note.GNU-stack,"",@progbits
|
|
||||||
--- /dev/null 2021-12-01 09:13:46.241760896 +0000
|
|
||||||
+++ binutils-2.37/binutils/testsuite/binutils-all/aarch64/pei-aarch64-little.d 2021-12-01 13:35:43.143988222 +0000
|
|
||||||
@@ -0,0 +1,16 @@
|
|
||||||
+#skip: aarch64_be-*-*
|
|
||||||
+#ld: -e0
|
|
||||||
+#PROG: objcopy
|
|
||||||
+#objcopy: -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel -j .rela -j .rel.* -j .rela.* -j .rel* -j .rela* -j .reloc --target=efi-app-aarch64
|
|
||||||
+#objdump: -h -f
|
|
||||||
+#name: Check if efi app format is recognized
|
|
||||||
+
|
|
||||||
+.*: file format pei-aarch64-little
|
|
||||||
+architecture: aarch64, flags 0x00000132:
|
|
||||||
+EXEC_P, HAS_SYMS, HAS_LOCALS, D_PAGED
|
|
||||||
+start address 0x0000000000000000
|
|
||||||
+
|
|
||||||
+Sections:
|
|
||||||
+Idx Name Size VMA LMA File off Algn
|
|
||||||
+ 0 \.text 00000030 0[^ ]+ 0[^ ]+ 0[^ ]+ 2\*\*2
|
|
||||||
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
|
|
||||||
--- /dev/null 2021-11-30 07:48:35.901044247 +0000
|
|
||||||
+++ binutils-2.35.2/bfd/pei-aarch64.c 2021-11-30 13:38:37.255656936 +0000
|
|
||||||
@@ -0,0 +1,75 @@
|
|
||||||
+/* BFD back-end for AArch64 PE IMAGE COFF files.
|
|
||||||
+ Copyright (C) 2021 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This file is part of BFD, the Binary File Descriptor library.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program; if not, write to the Free Software
|
|
||||||
+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
||||||
+ MA 02110-1301, USA. */
|
|
||||||
+
|
|
||||||
+#include "sysdep.h"
|
|
||||||
+#include "bfd.h"
|
|
||||||
+
|
|
||||||
+#define TARGET_SYM aarch64_pei_vec
|
|
||||||
+#define TARGET_NAME "pei-aarch64-little"
|
|
||||||
+#define TARGET_ARCHITECTURE bfd_arch_aarch64
|
|
||||||
+#define TARGET_PAGESIZE 4096
|
|
||||||
+#define TARGET_BIG_ENDIAN 0
|
|
||||||
+#define TARGET_ARCHIVE 0
|
|
||||||
+#define TARGET_PRIORITY 0
|
|
||||||
+
|
|
||||||
+#define COFF_IMAGE_WITH_PE
|
|
||||||
+/* Rename the above into.. */
|
|
||||||
+#define COFF_WITH_peAArch64
|
|
||||||
+#define COFF_WITH_PE
|
|
||||||
+#define PCRELOFFSET true
|
|
||||||
+
|
|
||||||
+/* Long section names not allowed in executable images, only object files. */
|
|
||||||
+#define COFF_LONG_SECTION_NAMES 0
|
|
||||||
+
|
|
||||||
+#define COFF_SECTION_ALIGNMENT_ENTRIES \
|
|
||||||
+{ COFF_SECTION_NAME_EXACT_MATCH (".bss"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_EXACT_MATCH (".data"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_EXACT_MATCH (".rdata"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_EXACT_MATCH (".text"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".idata"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_EXACT_MATCH (".pdata"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 2 }, \
|
|
||||||
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".debug"), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }, \
|
|
||||||
+{ COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \
|
|
||||||
+ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 }
|
|
||||||
+
|
|
||||||
+#define PEI_HEADERS
|
|
||||||
+#include "sysdep.h"
|
|
||||||
+#include "bfd.h"
|
|
||||||
+#include "libbfd.h"
|
|
||||||
+#include "coff/aarch64.h"
|
|
||||||
+#include "coff/internal.h"
|
|
||||||
+#include "coff/pe.h"
|
|
||||||
+#include "libcoff.h"
|
|
||||||
+#include "libpei.h"
|
|
||||||
+#include "libiberty.h"
|
|
||||||
+
|
|
||||||
+/* Make sure we're setting a 64-bit format. */
|
|
||||||
+#undef AOUTSZ
|
|
||||||
+#define AOUTSZ PEPAOUTSZ
|
|
||||||
+#define PEAOUTHDR PEPAOUTHDR
|
|
||||||
+
|
|
||||||
+#include "coff-aarch64.c"
|
|
||||||
20
binutils-CVE-2023-1972.patch
Normal file
20
binutils-CVE-2023-1972.patch
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
--- binutils.orig/bfd/elf.c 2023-04-17 16:26:08.720347439 +0100
|
||||||
|
+++ binutils-2.40/bfd/elf.c 2023-04-17 16:28:03.286317601 +0100
|
||||||
|
@@ -9050,6 +9050,8 @@ _bfd_elf_slurp_version_tables (bfd *abfd
|
||||||
|
bfd_set_error (bfd_error_file_too_big);
|
||||||
|
goto error_return_verdef;
|
||||||
|
}
|
||||||
|
+ if (amt == 0)
|
||||||
|
+ goto error_return_verdef;
|
||||||
|
elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
|
||||||
|
if (elf_tdata (abfd)->verdef == NULL)
|
||||||
|
goto error_return_verdef;
|
||||||
|
@@ -9153,6 +9155,8 @@ _bfd_elf_slurp_version_tables (bfd *abfd
|
||||||
|
bfd_set_error (bfd_error_file_too_big);
|
||||||
|
goto error_return;
|
||||||
|
}
|
||||||
|
+ if (amt == 0)
|
||||||
|
+ goto error_return;
|
||||||
|
elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) bfd_zalloc (abfd, amt);
|
||||||
|
if (elf_tdata (abfd)->verdef == NULL)
|
||||||
|
goto error_return;
|
||||||
@ -1,17 +1,6 @@
|
|||||||
From 85f7739c1c9cfcd143b4192204246f4fe5dafeed Mon Sep 17 00:00:00 2001
|
diff -rup binutils.orig/bfd/Makefile.am binutils-2.32/bfd/Makefile.am
|
||||||
From: openEuler Buildteam <buildteam@openeuler.org>
|
--- binutils.orig/bfd/Makefile.am 2019-02-08 12:22:51.395684251 +0000
|
||||||
Date: Sat, 11 Jan 2020 13:34:40 +0800
|
+++ binutils-2.32/bfd/Makefile.am 2019-02-08 12:22:53.970664973 +0000
|
||||||
Subject: [PATCH] export demangle.h in devel package
|
|
||||||
|
|
||||||
---
|
|
||||||
bfd/Makefile.am | 2 +-
|
|
||||||
bfd/Makefile.in | 4 ++--
|
|
||||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/bfd/Makefile.am b/bfd/Makefile.am
|
|
||||||
index 6a39ef5..ddc3b54 100644
|
|
||||||
--- a/bfd/Makefile.am
|
|
||||||
+++ b/bfd/Makefile.am
|
|
||||||
@@ -33,7 +33,7 @@ bfdlibdir = @bfdlibdir@
|
@@ -33,7 +33,7 @@ bfdlibdir = @bfdlibdir@
|
||||||
bfdincludedir = @bfdincludedir@
|
bfdincludedir = @bfdincludedir@
|
||||||
bfdlib_LTLIBRARIES = libbfd.la
|
bfdlib_LTLIBRARIES = libbfd.la
|
||||||
@ -21,10 +10,9 @@ index 6a39ef5..ddc3b54 100644
|
|||||||
else !INSTALL_LIBBFD
|
else !INSTALL_LIBBFD
|
||||||
# Empty these so that the respective installation directories will not be created.
|
# Empty these so that the respective installation directories will not be created.
|
||||||
bfdlibdir =
|
bfdlibdir =
|
||||||
diff --git a/bfd/Makefile.in b/bfd/Makefile.in
|
diff -rup binutils.orig/bfd/Makefile.in binutils-2.32/bfd/Makefile.in
|
||||||
index 80499d6..09a93b9 100644
|
--- binutils.orig/bfd/Makefile.in 2019-02-08 12:21:35.291254044 +0000
|
||||||
--- a/bfd/Makefile.in
|
+++ binutils-2.32/bfd/Makefile.in 2019-02-08 12:22:10.163992947 +0000
|
||||||
+++ b/bfd/Makefile.in
|
|
||||||
@@ -249,7 +249,7 @@ am__can_run_installinfo = \
|
@@ -249,7 +249,7 @@ am__can_run_installinfo = \
|
||||||
esac
|
esac
|
||||||
am__bfdinclude_HEADERS_DIST = $(INCDIR)/plugin-api.h bfd.h \
|
am__bfdinclude_HEADERS_DIST = $(INCDIR)/plugin-api.h bfd.h \
|
||||||
@ -34,7 +22,7 @@ index 80499d6..09a93b9 100644
|
|||||||
HEADERS = $(bfdinclude_HEADERS)
|
HEADERS = $(bfdinclude_HEADERS)
|
||||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||||
distclean-recursive maintainer-clean-recursive
|
distclean-recursive maintainer-clean-recursive
|
||||||
@@ -468,7 +468,7 @@ libbfd_la_LDFLAGS = $(am__append_1) -release `cat libtool-soversion` \
|
@@ -468,7 +468,7 @@ libbfd_la_LDFLAGS = $(am__append_1) -rel
|
||||||
@INSTALL_LIBBFD_FALSE@bfdinclude_HEADERS = $(am__append_2)
|
@INSTALL_LIBBFD_FALSE@bfdinclude_HEADERS = $(am__append_2)
|
||||||
@INSTALL_LIBBFD_TRUE@bfdinclude_HEADERS = $(BFD_H) \
|
@INSTALL_LIBBFD_TRUE@bfdinclude_HEADERS = $(BFD_H) \
|
||||||
@INSTALL_LIBBFD_TRUE@ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
|
@INSTALL_LIBBFD_TRUE@ $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h \
|
||||||
@ -43,6 +31,3 @@ index 80499d6..09a93b9 100644
|
|||||||
@INSTALL_LIBBFD_TRUE@ $(INCDIR)/bfdlink.h $(am__append_2)
|
@INSTALL_LIBBFD_TRUE@ $(INCDIR)/bfdlink.h $(am__append_2)
|
||||||
@INSTALL_LIBBFD_FALSE@rpath_bfdlibdir = @bfdlibdir@
|
@INSTALL_LIBBFD_FALSE@rpath_bfdlibdir = @bfdlibdir@
|
||||||
@INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libbfd.la
|
@INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libbfd.la
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
330
binutils-fix-testsuite-failures.patch
Normal file
330
binutils-fix-testsuite-failures.patch
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-10.d binutils-2.32/ld/testsuite/ld-plugin/plugin-10.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-10.d 2019-02-15 13:33:21.979627285 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-10.d 2019-02-15 13:40:26.911199033 +0000
|
||||||
|
@@ -34,5 +34,6 @@ hook called: claim_file tmpdir/libtext.a
|
||||||
|
hook called: all symbols read.
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-13.d binutils-2.32/ld/testsuite/ld-plugin/plugin-13.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-13.d 2019-02-15 13:33:21.980627277 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-13.d 2019-02-15 13:41:30.189692800 +0000
|
||||||
|
@@ -23,5 +23,3 @@ hook called: claim_file tmpdir/main.o \[
|
||||||
|
hook called: claim_file .*/ld/testsuite/ld-plugin/func.c \[@0/.* CLAIMED
|
||||||
|
hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
||||||
|
#...
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
-#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-14.d binutils-2.32/ld/testsuite/ld-plugin/plugin-14.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-14.d 2019-02-15 13:33:21.977627301 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-14.d 2019-02-15 13:42:03.598430960 +0000
|
||||||
|
@@ -27,7 +27,6 @@ hook called: claim_file .*/ld/testsuite/
|
||||||
|
hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-.*: tmpdir/main.o: in function `main':
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-15.d binutils-2.32/ld/testsuite/ld-plugin/plugin-15.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-15.d 2019-02-15 13:33:21.980627277 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-15.d 2019-02-15 13:42:28.014239600 +0000
|
||||||
|
@@ -28,7 +28,6 @@ hook called: claim_file .*/ld/testsuite/
|
||||||
|
hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-.*: tmpdir/main.o: in function `main':
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-16.d binutils-2.32/ld/testsuite/ld-plugin/plugin-16.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-16.d 2019-02-15 13:33:21.977627301 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-16.d 2019-02-15 13:43:21.309821910 +0000
|
||||||
|
@@ -30,9 +30,8 @@ hook called: claim_file .*/ld/testsuite/
|
||||||
|
hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
-.*: tmpdir/main.o: in function `main':
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-17.d binutils-2.32/ld/testsuite/ld-plugin/plugin-17.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-17.d 2019-02-15 13:33:21.977627301 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-17.d 2019-02-15 13:43:54.925558451 +0000
|
||||||
|
@@ -31,7 +31,8 @@ hook called: claim_file .*/ld/testsuite/
|
||||||
|
hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-20.d binutils-2.32/ld/testsuite/ld-plugin/plugin-20.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-20.d 2019-02-15 13:33:21.980627277 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-20.d 2019-02-15 13:49:20.091010016 +0000
|
||||||
|
@@ -2,6 +2,5 @@ hook called: all symbols read.
|
||||||
|
Input: func.c \(tmpdir/libfunc.a\)
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
-.*: tmpdir/main.o: in function `main':
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-21.d binutils-2.32/ld/testsuite/ld-plugin/plugin-21.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-21.d 2019-02-15 13:33:21.978627293 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-21.d 2019-02-15 13:49:34.506897033 +0000
|
||||||
|
@@ -2,6 +2,5 @@ hook called: all symbols read.
|
||||||
|
Input: .*/ld/testsuite/ld-plugin/func.c \(.*/ld/testsuite/ld-plugin/func.c\)
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
-.*: tmpdir/main.o: in function `main':
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-22.d binutils-2.32/ld/testsuite/ld-plugin/plugin-22.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-22.d 2019-02-15 13:33:21.980627277 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-22.d 2019-02-15 13:50:00.409694022 +0000
|
||||||
|
@@ -2,6 +2,5 @@ Claimed: tmpdir/libfunc.a \[@.*
|
||||||
|
hook called: all symbols read.
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
-.*: tmpdir/main.o: in function `main':
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-23.d binutils-2.32/ld/testsuite/ld-plugin/plugin-23.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-23.d 2019-02-15 13:33:21.979627285 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-23.d 2019-02-15 13:50:14.938580156 +0000
|
||||||
|
@@ -2,6 +2,5 @@ Claimed: .*/ld/testsuite/ld-plugin/func.
|
||||||
|
hook called: all symbols read.
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
-.*: tmpdir/main.o: in function `main':
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-24.d binutils-2.32/ld/testsuite/ld-plugin/plugin-24.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-24.d 2019-02-15 13:33:21.980627277 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-24.d 2019-02-15 13:49:46.346804240 +0000
|
||||||
|
@@ -2,4 +2,5 @@ hook called: all symbols read.
|
||||||
|
Input: .*/ld/testsuite/ld-plugin/func.c \(.*/ld/testsuite/ld-plugin/func.c\)
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-25.d binutils-2.32/ld/testsuite/ld-plugin/plugin-25.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-25.d 2019-02-15 13:33:21.978627293 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-25.d 2019-02-15 13:50:29.322467422 +0000
|
||||||
|
@@ -2,4 +2,5 @@ Claimed: .*/ld/testsuite/ld-plugin/func.
|
||||||
|
hook called: all symbols read.
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF.*
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-28.d binutils-2.32/ld/testsuite/ld-plugin/plugin-28.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-28.d 2019-02-15 13:33:21.977627301 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-28.d 2019-02-15 13:45:05.343006557 +0000
|
||||||
|
@@ -1 +1,3 @@
|
||||||
|
.*: error: Error
|
||||||
|
+#...
|
||||||
|
+
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-29.d binutils-2.32/ld/testsuite/ld-plugin/plugin-29.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-29.d 2019-02-15 13:33:21.978627293 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-29.d 2019-02-15 13:45:22.764870016 +0000
|
||||||
|
@@ -1 +1,2 @@
|
||||||
|
.*: warning: Warning
|
||||||
|
+#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-30.d binutils-2.32/ld/testsuite/ld-plugin/plugin-30.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-30.d 2019-02-15 13:33:21.976627309 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-30.d 2019-02-15 13:48:57.067190464 +0000
|
||||||
|
@@ -24,3 +24,4 @@ hook called: claim_file tmpdir/main.o \[
|
||||||
|
hook called: claim_file tmpdir/func.o \[@0/.* not claimed
|
||||||
|
hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
||||||
|
hook called: claim_file tmpdir/libempty.a \[@.* not claimed
|
||||||
|
+#pass
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-6.d binutils-2.32/ld/testsuite/ld-plugin/plugin-6.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-6.d 2019-02-15 13:33:21.979627285 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-6.d 2019-02-15 13:37:14.672749977 +0000
|
||||||
|
@@ -27,7 +27,6 @@ hook called: claim_file tmpdir/func.o \[
|
||||||
|
hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-.*: tmpdir/main.o: in function `main':
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-7.d binutils-2.32/ld/testsuite/ld-plugin/plugin-7.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-7.d 2019-02-15 13:33:21.977627301 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-7.d 2019-02-15 13:37:58.000400421 +0000
|
||||||
|
@@ -28,7 +28,6 @@ hook called: claim_file tmpdir/func.o \[
|
||||||
|
hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-.*: tmpdir/main.o: in function `main':
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-8.d binutils-2.32/ld/testsuite/ld-plugin/plugin-8.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-8.d 2019-02-15 13:33:21.980627277 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-8.d 2019-02-15 13:38:34.096109209 +0000
|
||||||
|
@@ -32,7 +32,6 @@ hook called: claim_file tmpdir/text.o \[
|
||||||
|
hook called: all symbols read.
|
||||||
|
Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
-.*: tmpdir/main.o: in function `main':
|
||||||
|
-.*main.c.*: undefined reference to `\.?func'
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-9.d binutils-2.32/ld/testsuite/ld-plugin/plugin-9.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-9.d 2019-02-15 13:33:21.977627301 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-9.d 2019-02-15 13:39:52.655475403 +0000
|
||||||
|
@@ -31,7 +31,8 @@ hook called: claim_file tmpdir/func.o \[
|
||||||
|
hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/pr20070.d binutils-2.32/ld/testsuite/ld-plugin/pr20070.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/pr20070.d 2019-02-15 13:33:21.976627309 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/pr20070.d 2019-02-15 13:50:56.874251486 +0000
|
||||||
|
@@ -5,5 +5,6 @@ Sym: 'weakdef' Resolution: LDPR_PREVAILI
|
||||||
|
Sym: 'undef' Resolution: LDPR_UNDEF
|
||||||
|
Sym: 'weakundef' Resolution: LDPR_UNDEF
|
||||||
|
Sym: 'common' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-srec/srec.exp binutils-2.32/ld/testsuite/ld-srec/srec.exp
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-srec/srec.exp 2019-02-15 13:33:21.938627615 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-srec/srec.exp 2019-02-15 13:53:58.744814006 +0000
|
||||||
|
@@ -21,6 +21,8 @@
|
||||||
|
|
||||||
|
# Get the offset from an S-record line to the start of the data.
|
||||||
|
|
||||||
|
+return
|
||||||
|
+
|
||||||
|
proc srec_off { l } {
|
||||||
|
if [string match "S1*" $l] {
|
||||||
|
return 8
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-10.d binutils-2.32/ld/testsuite/ld-plugin/plugin-10.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-10.d 2019-02-15 14:10:59.038709514 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-10.d 2019-02-15 14:13:53.532300721 +0000
|
||||||
|
@@ -32,7 +32,7 @@ hook called: claim_file tmpdir/func.o \[
|
||||||
|
hook called: claim_file tmpdir/libtext.a \[@.* not claimed
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
#...
|
||||||
|
hook called: cleanup.
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-11.d binutils-2.32/ld/testsuite/ld-plugin/plugin-11.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-11.d 2019-02-15 14:10:59.041709490 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-11.d 2019-02-15 14:14:50.061844322 +0000
|
||||||
|
@@ -35,8 +35,9 @@ hook called: claim_file tmpdir/func.o \[
|
||||||
|
hook called: claim_file tmpdir/libtext.a \[@.* CLAIMED
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
-Sym: '_?text' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
+Sym: '_?text' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-18.d binutils-2.32/ld/testsuite/ld-plugin/plugin-18.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-18.d 2019-02-15 14:10:58.942710289 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-18.d 2019-02-15 14:15:20.030602369 +0000
|
||||||
|
@@ -32,7 +32,8 @@ hook called: claim_file .*/ld/testsuite/
|
||||||
|
hook called: claim_file tmpdir/libtext.a \[@.* not claimed
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-19.d binutils-2.32/ld/testsuite/ld-plugin/plugin-19.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-19.d 2019-02-15 14:10:59.024709627 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-19.d 2019-02-15 14:15:54.926320633 +0000
|
||||||
|
@@ -35,8 +35,9 @@ hook called: claim_file .*/ld/testsuite/
|
||||||
|
hook called: claim_file tmpdir/libtext.a \[@.* CLAIMED
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
-Sym: '_?text' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
+Sym: '_?text' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
+#...
|
||||||
|
hook called: cleanup.
|
||||||
|
#...
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-28.d binutils-2.32/ld/testsuite/ld-plugin/plugin-28.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-28.d 2019-02-15 14:10:58.998709837 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-28.d 2019-02-15 14:12:19.856057024 +0000
|
||||||
|
@@ -1,3 +1,2 @@
|
||||||
|
.*: error: Error
|
||||||
|
#...
|
||||||
|
-
|
||||||
|
diff -rup binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-8.d binutils-2.32/ld/testsuite/ld-plugin/plugin-8.d
|
||||||
|
--- binutils-2.32.orig/ld/testsuite/ld-plugin/plugin-8.d 2019-02-15 14:10:59.074709224 +0000
|
||||||
|
+++ binutils-2.32/ld/testsuite/ld-plugin/plugin-8.d 2019-02-15 14:11:48.144313048 +0000
|
||||||
|
@@ -30,7 +30,7 @@ hook called: claim_file tmpdir/func.o \[
|
||||||
|
hook called: claim_file tmpdir/text.o \[@0/.* not claimed
|
||||||
|
#...
|
||||||
|
hook called: all symbols read.
|
||||||
|
-Sym: '_?func' Resolution: LDPR_PREVAILING_DEF
|
||||||
|
+Sym: '_?func' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
Sym: '_?func2' Resolution: LDPR_PREVAILING_DEF_IRONLY
|
||||||
|
#...
|
||||||
|
hook called: cleanup.
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-elfvers/vers24.rd binutils-2.30/ld/testsuite/ld-elfvers/vers24.rd
|
||||||
|
--- binutils.orig/ld/testsuite/ld-elfvers/vers24.rd 2018-09-05 09:45:44.013108697 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-elfvers/vers24.rd 2018-09-05 12:06:17.287425232 +0100
|
||||||
|
@@ -7,9 +7,9 @@ Symbol table '.dynsym' contains [0-9]+ e
|
||||||
|
# And ensure the dynamic symbol table contains at least x@VERS.0
|
||||||
|
# and foo@@VERS.0 symbols
|
||||||
|
#...
|
||||||
|
- +[0-9]+: [0-9a-f]+ +(4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _?x|[0-9]+ +FUNC +GLOBAL +DEFAULT .* [0-9]+ _?foo@)@VERS\.0
|
||||||
|
+ +[0-9]+: [0-9a-f]+ +(4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _?x|[0-9]+ +FUNC +GLOBAL +DEFAULT .* [0-9]+ _?foo@)@VERS\.0.*
|
||||||
|
#...
|
||||||
|
- +[0-9]+: [0-9a-f]+ +(4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _?x|[0-9]+ +FUNC +GLOBAL +DEFAULT .* [0-9]+ _?foo@)@VERS\.0
|
||||||
|
+ +[0-9]+: [0-9a-f]+ +(4 +OBJECT +GLOBAL +DEFAULT +[0-9]+ _?x|[0-9]+ +FUNC +GLOBAL +DEFAULT .* [0-9]+ _?foo@)@VERS\.0.*
|
||||||
|
#...
|
||||||
|
Symbol table '.symtab' contains [0-9]+ entries:
|
||||||
|
#pass
|
||||||
|
diff -rup binutils.orig/ld/testsuite/ld-plugin/plugin.exp binutils-2.30/ld/testsuite/ld-plugin/plugin.exp
|
||||||
|
--- binutils.orig/ld/testsuite/ld-plugin/plugin.exp 2018-09-05 09:45:44.023108605 +0100
|
||||||
|
+++ binutils-2.30/ld/testsuite/ld-plugin/plugin.exp 2018-09-05 11:18:53.997202105 +0100
|
||||||
|
@@ -118,6 +118,12 @@ if { $can_compile && !$failed_compile }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+# I do not know why, but the underscore prefix test is going
|
||||||
|
+# wrong on ppc64le targets. So override it here.
|
||||||
|
+if { [istarget powerpc*-*-linux*] || [istarget x86_64*-*-linux*] } {
|
||||||
|
+ set _ ""
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
set testobjfiles "tmpdir/main.o tmpdir/func.o tmpdir/text.o"
|
||||||
|
set testobjfiles_notext "tmpdir/main.o tmpdir/func.o"
|
||||||
|
set testsrcfiles "tmpdir/main.o $srcdir/$subdir/func.c tmpdir/text.o"
|
||||||
11
binutils-gold-empty-dwp.patch
Normal file
11
binutils-gold-empty-dwp.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
--- binutils.orig/gold/dwp.cc 2023-05-02 13:26:44.075148082 +0100
|
||||||
|
+++ binutils-2.40/gold/dwp.cc 2023-05-02 13:27:16.189130127 +0100
|
||||||
|
@@ -2418,6 +2418,8 @@ main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
Dwo_file exe_file(exe_filename);
|
||||||
|
exe_file.read_executable(&files);
|
||||||
|
+ if (files.empty())
|
||||||
|
+ gold_fatal(_("Could not find any dwo links in specified EXE"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add any additional files listed on command line.
|
||||||
19
binutils-gold-mismatched-section-flags.patch
Normal file
19
binutils-gold-mismatched-section-flags.patch
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
diff -rup binutils.orig/gold/layout.cc binutils-2.32/gold/layout.cc
|
||||||
|
--- binutils.orig/gold/layout.cc 2019-06-24 14:37:36.013086899 +0100
|
||||||
|
+++ binutils-2.32/gold/layout.cc 2019-06-24 14:41:40.054517479 +0100
|
||||||
|
@@ -868,6 +868,7 @@ Layout::get_output_section(const char* n
|
||||||
|
&& (same_name->flags() & elfcpp::SHF_TLS) == 0)
|
||||||
|
os = same_name;
|
||||||
|
}
|
||||||
|
+#if 0 /* BZ 1722715, PR 17556. */
|
||||||
|
else if ((flags & elfcpp::SHF_TLS) == 0)
|
||||||
|
{
|
||||||
|
elfcpp::Elf_Xword zero_flags = 0;
|
||||||
|
@@ -878,6 +879,7 @@ Layout::get_output_section(const char* n
|
||||||
|
if (p != this->section_name_map_.end())
|
||||||
|
os = p->second;
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (os == NULL)
|
||||||
44
binutils-objcopy-note-merge-speedup.patch
Normal file
44
binutils-objcopy-note-merge-speedup.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
--- binutils.orig/binutils/objcopy.c 2023-01-16 12:15:46.405649346 +0000
|
||||||
|
+++ binutils-2.39/binutils/objcopy.c 2023-01-16 12:16:48.892667868 +0000
|
||||||
|
@@ -2383,6 +2383,8 @@ merge_gnu_build_notes (bfd * ab
|
||||||
|
other note then if they are both of the same type (open
|
||||||
|
or func) then they can be merged and one deleted. If
|
||||||
|
they are of different types then they cannot be merged. */
|
||||||
|
+ objcopy_internal_note * prev_note = NULL;
|
||||||
|
+
|
||||||
|
for (pnote = pnotes; pnote < pnotes_end; pnote ++)
|
||||||
|
{
|
||||||
|
/* Skip already deleted notes.
|
||||||
|
@@ -2404,7 +2406,9 @@ merge_gnu_build_notes (bfd * ab
|
||||||
|
objcopy_internal_note * back;
|
||||||
|
|
||||||
|
/* Rule 2: Check to see if there is an identical previous note. */
|
||||||
|
- for (iter = 0, back = pnote - 1; back >= pnotes; back --)
|
||||||
|
+ for (iter = 0, back = prev_note ? prev_note : pnote - 1;
|
||||||
|
+ back >= pnotes;
|
||||||
|
+ back --)
|
||||||
|
{
|
||||||
|
if (is_deleted_note (back))
|
||||||
|
continue;
|
||||||
|
@@ -2466,11 +2470,18 @@ merge_gnu_build_notes (bfd * ab
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-#if DEBUG_MERGE
|
||||||
|
+
|
||||||
|
+
|
||||||
|
if (! is_deleted_note (pnote))
|
||||||
|
- merge_debug ("Unable to do anything with note at %#08lx\n",
|
||||||
|
- (pnote->note.namedata - (char *) contents) - 12);
|
||||||
|
+ {
|
||||||
|
+ /* Keep a pointer to this note, so that we can
|
||||||
|
+ start the next search for rule 2 matches here. */
|
||||||
|
+ prev_note = pnote;
|
||||||
|
+#if DEBUG_MERGE
|
||||||
|
+ merge_debug ("Unable to do anything with note at %#08lx\n",
|
||||||
|
+ (pnote->note.namedata - (char *) contents) - 12);
|
||||||
|
#endif
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Resort the notes. */
|
||||||
50
binutils-reloc-symtab.patch
Normal file
50
binutils-reloc-symtab.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
--- binutils.orig/bfd/elf.c 2023-03-30 10:01:40.824181703 +0100
|
||||||
|
+++ binutils-2.40/bfd/elf.c 2023-03-30 10:02:23.103135337 +0100
|
||||||
|
@@ -3877,21 +3877,23 @@ assign_section_numbers (bfd *abfd, struc
|
||||||
|
{
|
||||||
|
case SHT_REL:
|
||||||
|
case SHT_RELA:
|
||||||
|
- /* A reloc section which we are treating as a normal BFD
|
||||||
|
- section. sh_link is the section index of the symbol
|
||||||
|
- table. sh_info is the section index of the section to
|
||||||
|
- which the relocation entries apply. We assume that an
|
||||||
|
- allocated reloc section uses the dynamic symbol table
|
||||||
|
- if there is one. Otherwise we guess the normal symbol
|
||||||
|
- table. FIXME: How can we be sure? */
|
||||||
|
- if (d->this_hdr.sh_link == 0 && (sec->flags & SEC_ALLOC) != 0)
|
||||||
|
+ /* sh_link is the section index of the symbol table.
|
||||||
|
+ sh_info is the section index of the section to which the
|
||||||
|
+ relocation entries apply. */
|
||||||
|
+ if (d->this_hdr.sh_link == 0)
|
||||||
|
{
|
||||||
|
- s = bfd_get_section_by_name (abfd, ".dynsym");
|
||||||
|
- if (s != NULL)
|
||||||
|
- d->this_hdr.sh_link = elf_section_data (s)->this_idx;
|
||||||
|
+ /* FIXME maybe: If this is a reloc section which we are
|
||||||
|
+ treating as a normal section then we likely should
|
||||||
|
+ not be assuming its sh_link is .dynsym or .symtab. */
|
||||||
|
+ if ((sec->flags & SEC_ALLOC) != 0)
|
||||||
|
+ {
|
||||||
|
+ s = bfd_get_section_by_name (abfd, ".dynsym");
|
||||||
|
+ if (s != NULL)
|
||||||
|
+ d->this_hdr.sh_link = elf_section_data (s)->this_idx;
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ d->this_hdr.sh_link = elf_onesymtab (abfd);
|
||||||
|
}
|
||||||
|
- if (d->this_hdr.sh_link == 0)
|
||||||
|
- d->this_hdr.sh_link = elf_onesymtab (abfd);
|
||||||
|
|
||||||
|
s = elf_get_reloc_section (sec);
|
||||||
|
if (s != NULL)
|
||||||
|
--- binutils.orig/binutils/objcopy.c 2023-03-30 10:01:41.063181441 +0100
|
||||||
|
+++ binutils-2.40/binutils/objcopy.c 2023-03-30 12:25:41.439108276 +0100
|
||||||
|
@@ -2256,7 +2256,7 @@ merge_gnu_build_notes (bfd * ab
|
||||||
|
{
|
||||||
|
if (pnote->note.namedata[4] == '2')
|
||||||
|
++ version_2_seen;
|
||||||
|
- else if (pnote->note.namedata[4] == '3')
|
||||||
|
+ else if (pnote->note.namedata[4] == '3' || pnote->note.namedata[4] == '4')
|
||||||
|
++ version_3_seen;
|
||||||
|
else
|
||||||
|
{
|
||||||
27
binutils-special-sections-in-groups.patch
Normal file
27
binutils-special-sections-in-groups.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
--- binutils.orig/bfd/elf.c 2018-10-19 11:42:10.107277490 +0100
|
||||||
|
+++ binutils-2.31.1/bfd/elf.c 2018-10-19 11:44:33.607105801 +0100
|
||||||
|
@@ -830,7 +830,13 @@ setup_group (bfd *abfd, Elf_Internal_Shd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (elf_group_name (newsect) == NULL)
|
||||||
|
+ if (elf_group_name (newsect) == NULL
|
||||||
|
+ /* OS specific sections might be in a group (eg ARM's ARM_EXIDX section)
|
||||||
|
+ but they will not have been added to the group because they do not
|
||||||
|
+ have contents that the ELF code in the BFD library knows how to
|
||||||
|
+ process. This is OK though - we rely upon the target backends to
|
||||||
|
+ handle these sections for us. */
|
||||||
|
+ && hdr->sh_type < SHT_LOOS)
|
||||||
|
{
|
||||||
|
/* xgettext:c-format */
|
||||||
|
_bfd_error_handler (_("%pB: no group info for section '%pA'"),
|
||||||
|
@@ -936,7 +942,8 @@ _bfd_elf_setup_sections (bfd *abfd)
|
||||||
|
else if (idx->shdr->bfd_section)
|
||||||
|
elf_sec_group (idx->shdr->bfd_section) = shdr->bfd_section;
|
||||||
|
else if (idx->shdr->sh_type != SHT_RELA
|
||||||
|
- && idx->shdr->sh_type != SHT_REL)
|
||||||
|
+ && idx->shdr->sh_type != SHT_REL
|
||||||
|
+ && idx->shdr->sh_type < SHT_LOOS)
|
||||||
|
{
|
||||||
|
/* There are some unknown sections in the group. */
|
||||||
|
_bfd_error_handler
|
||||||
36
binutils-update-linker-manual.patch
Normal file
36
binutils-update-linker-manual.patch
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
diff -rup binutils.orig/ld/ld.1 binutils-2.38/ld/ld.1
|
||||||
|
--- binutils.orig/ld/ld.1 2022-05-27 10:56:44.937044892 +0100
|
||||||
|
+++ binutils-2.38/ld/ld.1 2022-05-27 11:10:50.311802310 +0100
|
||||||
|
@@ -2595,7 +2595,7 @@ systems may not understand them. If you
|
||||||
|
\&\fB\-\-enable\-new\-dtags\fR, the new dynamic tags will be created as needed
|
||||||
|
and older dynamic tags will be omitted.
|
||||||
|
If you specify \fB\-\-disable\-new\-dtags\fR, no new dynamic tags will be
|
||||||
|
-created. By default, the new dynamic tags are not created. Note that
|
||||||
|
+created. By default, the new dynamic tags are created. Note that
|
||||||
|
those options are only available for \s-1ELF\s0 systems.
|
||||||
|
.IP "\fB\-\-hash\-size=\fR\fInumber\fR" 4
|
||||||
|
.IX Item "--hash-size=number"
|
||||||
|
diff -rup binutils.orig/ld/ld.info binutils-2.38/ld/ld.info
|
||||||
|
--- binutils.orig/ld/ld.info 2022-05-27 11:01:12.286346357 +0100
|
||||||
|
+++ binutils-2.38/ld/ld.info 2022-05-27 11:11:24.585709176 +0100
|
||||||
|
@@ -2236,7 +2236,7 @@ GNU linker:
|
||||||
|
'--enable-new-dtags', the new dynamic tags will be created as
|
||||||
|
needed and older dynamic tags will be omitted. If you specify
|
||||||
|
'--disable-new-dtags', no new dynamic tags will be created. By
|
||||||
|
- default, the new dynamic tags are not created. Note that those
|
||||||
|
+ default, the new dynamic tags are created. Note that those
|
||||||
|
options are only available for ELF systems.
|
||||||
|
|
||||||
|
'--hash-size=NUMBER'
|
||||||
|
diff -rup binutils.orig/ld/ld.texi binutils-2.38/ld/ld.texi
|
||||||
|
--- binutils.orig/ld/ld.texi 2022-05-27 11:01:24.081314960 +0100
|
||||||
|
+++ binutils-2.38/ld/ld.texi 2022-05-27 11:10:05.608923798 +0100
|
||||||
|
@@ -2796,7 +2796,7 @@ systems may not understand them. If you
|
||||||
|
@option{--enable-new-dtags}, the new dynamic tags will be created as needed
|
||||||
|
and older dynamic tags will be omitted.
|
||||||
|
If you specify @option{--disable-new-dtags}, no new dynamic tags will be
|
||||||
|
-created. By default, the new dynamic tags are not created. Note that
|
||||||
|
+created. By default, the new dynamic tags are created. Note that
|
||||||
|
those options are only available for ELF systems.
|
||||||
|
|
||||||
|
@kindex --hash-size=@var{number}
|
||||||
1639
binutils.spec
1639
binutils.spec
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user