+2020-07-20 Jan Beulich <jbeulich@suse.com>
+
+ PR gas/4572
+ * config/tc-i386.c (i386_comment_chars): Drop TE_I386AIX from
+ conditional around it.
+ (md_begin): Insert backslash into operand_chars[] when slash is
+ a comment character.
+ * config/tc-i386-intel.c (i386_operator): Recognize \/, \%, and
+ \* as operators when / may be a comment character.
+ * testsuite/gas/i386/svr4.s, testsuite/gas/i386/svr4.d: New.
+ * testsuite/gas/i386/i386.exp: Run new test.
+
2020-07-20 Jan Beulich <jbeulich@suse.com>
PR gas/4572
{
unsigned int j;
+#ifdef SVR4_COMMENT_CHARS
+ if (!name && operands == 2 && *input_line_pointer == '\\')
+ switch (input_line_pointer[1])
+ {
+ case '/': input_line_pointer += 2; return O_divide;
+ case '%': input_line_pointer += 2; return O_modulus;
+ case '*': input_line_pointer += 2; return O_multiply;
+ }
+#endif
+
if (!intel_syntax)
return O_absent;
#endif
;
-#if (defined (TE_I386AIX) \
- || ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
- && !defined (TE_GNU) \
- && !defined (TE_LINUX) \
- && !defined (TE_FreeBSD) \
- && !defined (TE_DragonFly) \
- && !defined (TE_NetBSD)))
+#if ((defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)) \
+ && !defined (TE_GNU) \
+ && !defined (TE_LINUX) \
+ && !defined (TE_FreeBSD) \
+ && !defined (TE_DragonFly) \
+ && !defined (TE_NetBSD))
/* This array holds the chars that always start a comment. If the
pre-processor is disabled, these aren't very useful. The option
--divide will remove '/' from this list. */
mnemonic_chars[c] = c;
operand_chars[c] = c;
}
+#ifdef SVR4_COMMENT_CHARS
+ else if (c == '\\' && strchr (i386_comment_chars, '/'))
+ operand_chars[c] = c;
+#endif
if (ISALPHA (c) || ISDIGIT (c))
identifier_chars[c] = c;
run_dump_test "dw2-compressed-1"
run_dump_test "dw2-compressed-3a"
run_dump_test "dw2-compressed-3b"
+
+ if {![istarget "*-*-dragonfly*"]
+ && ![istarget "*-*-gnu*"]
+ && ![istarget "*-*-freebsd*"]
+ && ![istarget "*-*-linux*"]
+ && ![istarget "*-*-netbsd*"]} then {
+ run_dump_test "svr4"
+ }
}
}
--- /dev/null
+#objdump: -dtw
+#name: SVR4 comment char escape handling
+
+.*: +file format .*
+
+SYMBOL TABLE:
+0+00 .* \.text[ ]+0+ \.text
+0+00 .* \.data[ ]+0+ \.data
+0+00 .* \.bss[ ]+0+ \.bss
+0+00 .* \.text[ ]+0+ svr4
+0+04 .* \*ABS\*[ ]+0+ a
+0+03 .* \*ABS\*[ ]+0+ b
+0+4c .* \*ABS\*[ ]+0+ c
+
+Disassembly of section .text:
+
+0+0 <svr4>:
+[ ]*[0-9a-f]+:[ ]+b0 07[ ]+mov \$0x7,%al
+[ ]*[0-9a-f]+:[ ]+b0 01[ ]+mov \$0x1,%al
+[ ]*[0-9a-f]+:[ ]+b0 1e[ ]+mov \$0x1e,%al
+[ ]*[0-9a-f]+:[ ]+b0 05[ ]+mov \$0x5,%al
+[ ]*[0-9a-f]+:[ ]+b0 02[ ]+mov \$0x2,%al
+[ ]*[0-9a-f]+:[ ]+b0 33[ ]+mov \$0x33,%al
+#pass
--- /dev/null
+ .text
+
+ .if 1 / 2
+ .else
+ .error
+ .endif
+
+ .if 1 \/ 2
+ .error
+ .endif
+
+ .if 4 \% 2
+ .error
+ .endif
+
+ .if 1 \* 0
+ .error
+ .endif
+
+svr4:
+ mov $(15 \/ 2), %al
+ mov $(15 \% 2), %al
+ mov $(15 \* 2), %al
+
+ .byte 0xb0, 17 \/ 3
+ .byte 0xb0, 17 \% 3
+ .byte 0xb0, 17 \* 3
+
+ .equiv a, 19 \/ 4
+ .equiv b, 19 \% 4
+ .equiv c, 19 \* 4