From: Jan Beulich Date: Fri, 8 Sep 2023 06:45:11 +0000 (+0200) Subject: x86: restrict prefix use with .insn VEX/XOP/EVEX X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1adecddd190f8eca8ea153dec2b003985bcc744d;p=binutils-gdb.git x86: restrict prefix use with .insn VEX/XOP/EVEX Avoid triggering the respective abort() in output_insn(). --- diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 00abfc78264..ecf886cfee9 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). */