From 1adecddd190f8eca8ea153dec2b003985bcc744d Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 8 Sep 2023 08:45:11 +0200 Subject: 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(+) (limited to 'gas') diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 00abfc7..ecf886c 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -10806,6 +10806,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). */ -- cgit v1.1