From: Jan Beulich Date: Tue, 16 Aug 2022 07:11:18 +0000 (+0200) Subject: revert "x86: Also pass -P to $(CPP) when processing i386-opc.tbl" X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=33b6a20af3854e1aa144fbfca6ff98fccd0ef86d;p=binutils-gdb.git revert "x86: Also pass -P to $(CPP) when processing i386-opc.tbl" This reverts commit 384f368958f2a5bb083660e58e5f8a010e6ad429, which broke i386-gen's emitting of diagnostics. As a replacement to address the original issue of newer gcc no longer splicing lines when dropping the line continuation backslashes, switch to using + as the line continuation character, doing the line splicing in i386-gen. --- diff --git a/opcodes/Makefile.am b/opcodes/Makefile.am index af843fb3786..87be5e7edb2 100644 --- a/opcodes/Makefile.am +++ b/opcodes/Makefile.am @@ -559,7 +559,7 @@ $(srcdir)/i386-tbl.h: $(srcdir)/i386-init.h @echo $@ $(srcdir)/i386-init.h: @MAINT@ i386-gen$(EXEEXT_FOR_BUILD) i386-opc.tbl i386-reg.tbl i386-opc.h - $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - \ + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - \ < $(srcdir)/i386-opc.tbl \ | ./i386-gen$(EXEEXT_FOR_BUILD) --srcdir $(srcdir) diff --git a/opcodes/Makefile.in b/opcodes/Makefile.in index 2257b0872af..581747edb7b 100644 --- a/opcodes/Makefile.in +++ b/opcodes/Makefile.in @@ -1534,7 +1534,7 @@ $(srcdir)/i386-tbl.h: $(srcdir)/i386-init.h @echo $@ $(srcdir)/i386-init.h: @MAINT@ i386-gen$(EXEEXT_FOR_BUILD) i386-opc.tbl i386-reg.tbl i386-opc.h - $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - \ + $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) - \ < $(srcdir)/i386-opc.tbl \ | ./i386-gen$(EXEEXT_FOR_BUILD) --srcdir $(srcdir) diff --git a/opcodes/i386-gen.c b/opcodes/i386-gen.c index 3390d82f59b..eaeb207e444 100644 --- a/opcodes/i386-gen.c +++ b/opcodes/i386-gen.c @@ -1764,17 +1764,36 @@ process_i386_opcodes (FILE *table) if (fgets (buf, sizeof (buf), fp) == NULL) break; - lineno++; - p = remove_leading_whitespaces (buf); - /* Skip comments. */ - str = strstr (p, "//"); - if (str != NULL) - str[0] = '\0'; + for ( ; ; ) + { + lineno++; - /* Remove trailing white spaces. */ - remove_trailing_whitespaces (p); + /* Skip comments. */ + str = strstr (p, "//"); + if (str != NULL) + { + str[0] = '\0'; + remove_trailing_whitespaces (p); + break; + } + + /* Look for line continuation character. */ + remove_trailing_whitespaces (p); + j = strlen (buf); + if (!j || buf[j - 1] != '+') + break; + if (j >= sizeof (buf) - 1) + fail (_("%s: %d: (continued) line too long\n"), filename, lineno); + + if (fgets (buf + j - 1, sizeof (buf) - j + 1, fp) == NULL) + { + fprintf (stderr, "%s: Line continuation on last line?\n", + filename); + break; + } + } switch (p[0]) { diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl index 37704f061ce..12779e651d7 100644 --- a/opcodes/i386-opc.tbl +++ b/opcodes/i386-opc.tbl @@ -22,6 +22,11 @@ #include "i386-opc.h" #undef None +// When necessary lines can be split in a non-standard way, by placing a +// trailing + on a to-be-continued line. This is intended mainly for non-insn +// templates. Insn templates are better kept all on one line to make grep and +// alike produce useful results. + #define Amd64 ISA64=AMD64 #define Intel64 ISA64=INTEL64 #define Intel64Only ISA64=INTEL64ONLY @@ -455,7 +460,7 @@ enter, 0xc8, None, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, leave, 0xc9, None, Cpu186|CpuNo64, DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, {} leave, 0xc9, None, Cpu64, DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, {} - // Conditional jumps. @@ -871,9 +876,9 @@ rex.wrxb, 0x4f, None, Cpu64, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|Is // Pseudo prefixes (base_opcode == PSEUDO_PREFIX) - {}, PSEUDO_PREFIX, Prefix_, , No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|IsPrefix, {} @@ -962,13 +967,13 @@ pause, 0xf390, None, Cpu186, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { // MMX/SSE2 instructions. - - emms, 0xf77, None, CpuMMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, {} @@ -1052,8 +1057,8 @@ pxor, 0x0fef, None, , Modrm||C|No_bSuf|No_wSuf| // SSE instructions. - @@ -1309,9 +1314,9 @@ invpcid, 0x660f3882, None, CpuINVPCID|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_qS // SSSE3 instructions. - phaddw, 0x0f3801, None, , Modrm|||No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { ||Unspecified|BaseIndex, } @@ -1469,14 +1474,14 @@ gf2p8mulb, 0x660f38cf, None, CpuGFNI, Modrm||No_bSuf|No // AVX instructions. - vaddpd, 0x6658, None, CpuAVX, Modrm|Vex|Space0F|VexVVVV=1|VexWIG|CheckRegSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Unspecified|BaseIndex|RegXMM|RegYMM, RegXMM|RegYMM, RegXMM|RegYMM }