diff options
Diffstat (limited to 'gcc/config/arm/arm.c')
| -rw-r--r-- | gcc/config/arm/arm.c | 67 |
1 files changed, 18 insertions, 49 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 7c614fd..f8907be 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -8657,8 +8657,14 @@ int_log2 (HOST_WIDE_INT power) return shift; } -/* Output a .ascii pseudo-op, keeping track of lengths. This is because - /bin/as is horribly restrictive. */ +/* Output a .ascii pseudo-op, keeping track of lengths. This is + because /bin/as is horribly restrictive. The judgement about + whether or not each character is 'printable' (and can be output as + is) or not (and must be printed with an octal escape) must be made + with reference to the *host* character set -- the situation is + similar to that discussed in the comments above pp_c_char in + c-pretty-print.c. */ + #define MAX_ASCII_LEN 51 void @@ -8679,57 +8685,20 @@ output_ascii_pseudo_op (FILE *stream, const unsigned char *p, int len) len_so_far = 0; } - switch (c) + if (ISPRINT (c)) { - case TARGET_TAB: - fputs ("\\t", stream); - len_so_far += 2; - break; - - case TARGET_FF: - fputs ("\\f", stream); - len_so_far += 2; - break; - - case TARGET_BS: - fputs ("\\b", stream); - len_so_far += 2; - break; - - case TARGET_CR: - fputs ("\\r", stream); - len_so_far += 2; - break; - - case TARGET_NEWLINE: - fputs ("\\n", stream); - c = p [i + 1]; - if ((c >= ' ' && c <= '~') - || c == TARGET_TAB) - /* This is a good place for a line break. */ - len_so_far = MAX_ASCII_LEN; - else - len_so_far += 2; - break; - - case '\"': - case '\\': - putc ('\\', stream); - len_so_far++; - /* Drop through. */ - - default: - if (c >= ' ' && c <= '~') + if (c == '\\' || c == '\"') { - putc (c, stream); + putc ('\\', stream); len_so_far++; } - else - { - fprintf (stream, "\\%03o", c); - len_so_far += 4; - } - break; + putc (c, stream); + len_so_far++; + } + else + { + fprintf (stream, "\\%03o", c); + len_so_far += 4; } } |
