Support character escapes in linkerscript strings

This allows linkerscripts to refer to section names even if
they contain special characters: '\r' '\n' '\t' '"' '\\'.
This commit is contained in:
Rangi
2021-04-26 11:40:58 -04:00
committed by Rangi
parent d17e9c663e
commit e27a6d53a0
4 changed files with 27 additions and 3 deletions

View File

@@ -222,13 +222,29 @@ static struct LinkerScriptToken *nextToken(void)
size_t capacity = 16; /* Half of the default capacity */
do {
curchar = readChar(linkerScript);
if (curchar == EOF || isNewline(curchar)) {
errx(1, "%s(%" PRIu32 "): Unterminated string",
linkerScriptName, lineNo);
} else if (curchar == '"') {
/* Quotes force a string termination */
curchar = '\0';
} else if (curchar == '\\') {
/* Backslashes are escape sequences */
curchar = readChar(linkerScript);
if (curchar == EOF || isNewline(curchar))
errx(1, "%s(%" PRIu32 "): Unterminated string",
linkerScriptName, lineNo);
else if (curchar == '"')
/* Quotes force a string termination */
curchar = '\0';
else if (curchar == 'n')
curchar = '\n';
else if (curchar == 'r')
curchar = '\r';
else if (curchar == 't')
curchar = '\t';
else if (curchar != '\\' && curchar != '"')
errx(1, "%s(%" PRIu32 "): Illegal character escape",
linkerScriptName, lineNo);
}
if (size >= capacity || token.attr.string == NULL) {
capacity *= 2;

View File

@@ -0,0 +1,3 @@
ROM0
"A\"B\tC\rD\nE"
"in\{valid"

View File

@@ -0,0 +1 @@
error: ./linkerscript-escapes-test.link(3): Illegal character escape

View File

@@ -0,0 +1,4 @@
SECTION "A\"B\tC\rD\nE", ROM0
DS $1000
SECTION "in\{valid", ROM0
DS $1000