From b6f6a3ecd15f4c55a4652933f8478feb8b685788 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 8 Sep 2023 08:45:11 +0200 Subject: [PATCH] x86: restrict prefix use with .insn VEX/XOP/EVEX Avoid triggering the respective abort() in output_insn(). --- gas/config/tc-i386.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index de35ee2a2c6..4d85f8bcf14 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -10671,6 +10671,29 @@ s_insn (int dummy ATTRIBUTE_UNUSED) if (line > end && i.vec_encoding == vex_encoding_default) i.vec_encoding = evex ? vex_encoding_evex : vex_encoding_vex; + if (i.vec_encoding != vex_encoding_default) + { + /* Only address size and segment override prefixes are permitted with + VEX/XOP/EVEX encodings. */ + const unsigned char *p = i.prefix; + + for (j = 0; j < ARRAY_SIZE (i.prefix); ++j, ++p) + { + if (!*p) + continue; + + switch (j) + { + case SEG_PREFIX: + case ADDR_PREFIX: + break; + default: + as_bad (_("illegal prefix used with VEX/XOP/EVEX")); + goto bad; + } + } + } + if (line > end && *line == '.') { /* Length specifier (VEX.L, XOP.L, EVEX.L'L). */ -- 2.47.3