gas .macro quirks, and an ARM bug
Thu Jun 8 13:15:00 GMT 2000
> : No, this was intentional. The only problem I see with the current
> : implementation is that you actually can't pass a `\"' through it if
> : you really want a quote character in your string.
> : .macro hello narg1
> : .asciiz "\narg1"
> : .endm
> : hello "a quote char: \""
> : This assembles into
> : Contents of section .text:
> : 0000 61207175 6f746520 63686172 3a202200 a quote char: ".
> : Contents of section .data:
> : You can probably get the same effect by passing `\\"' with your patch, but I
> : think that's even more obscure since expansion of escape sequences usually
> : isn't done in arguments to macros. The logical syntax would have
> : been `\\\"'.
> Good point. OK I agree that your patch is the correct solution,
> although we still need to add one small extra test, to make sure that
> the character following the backslash is actually present:
Hm.. what if you want a backslash as the last character in your string? My
original patch didn't deal with that either of course, but it's a funny
thought anyway. To get a backslash as the last character in your string, you
would have to escape it so it would look like `\\"'. With your this patch
however we would try to pass on that sequence and we would never find the
ending `"'. I added a test that verifies that the backslash isn't escaped.
RCS file: /cvs/src/src/gas/macro.c,v
retrieving revision 1.7
diff -u -p -r1.7 macro.c
--- macro.c 2000/05/01 14:01:06 1.7
+++ macro.c 2000/06/08 20:10:45
@@ -312,6 +312,15 @@ getstring (idx, in, acc)
sb_add_char (acc, in->ptr[idx++]);
+ else if (in->ptr[idx] == '\\'
+ && in->ptr[idx-1] != '\\'
+ && idx + 1 < in->len
+ && in->ptr[idx+1] == tchar)
+ sb_add_char (acc, '\\');
+ sb_add_char (acc, tchar);
+ idx += 2;
if (in->ptr[idx] == tchar)
More information about the Binutils