diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -1429,8 +1429,9 @@ return [=] { return *val; }; // Tok is a symbol name. - tok = unquote(tok); - if (!isValidSymbolName(tok)) + if (tok.startswith("\"")) + tok = unquote(tok); + else if (!isValidSymbolName(tok)) setError("malformed number: " + tok); script->referencedSymbols.push_back(tok); return [=] { return script->getSymbolValue(tok, location); }; diff --git a/lld/test/ELF/linkerscript/symbol-name.test b/lld/test/ELF/linkerscript/symbol-name.test --- a/lld/test/ELF/linkerscript/symbol-name.test +++ b/lld/test/ELF/linkerscript/symbol-name.test @@ -1,5 +1,5 @@ # REQUIRES: x86 -## Test that ., $ and " can be used by symbol names in expressions. +## Test that ., $, space and " can be used by symbol names in expressions. # RUN: llvm-mc -filetype=obj -triple=x86_64 /dev/null -o %t.o # RUN: ld.lld -T %s %t.o -o %t @@ -8,8 +8,10 @@ # CHECK: Value Size Type Bind Vis Ndx Name # CHECK-DAG: 0000000000000000 0 NOTYPE GLOBAL DEFAULT ABS a1 # CHECK-DAG: 0000000000000000 0 NOTYPE GLOBAL DEFAULT ABS a0 -# CHECK-DAG: 0000000000000003 0 NOTYPE GLOBAL DEFAULT ABS a2 +# CHECK-DAG: 0000000000000003 0 NOTYPE GLOBAL DEFAULT ABS a 2 +# CHECK-DAG: 0000000000000004 0 NOTYPE GLOBAL DEFAULT ABS a 3 a0 = DEFINED(.TOC.) ? .TOC. : 0; "a1" = DEFINED(__global_pointer$) ? __global_pointer$ : 0; -"a2" = DEFINED("a1") ? "a1" + 3 : 0; +"a 2" = DEFINED("a1") ? "a1" + 3 : 0; +"a 3" = "a 2" + 1;