File tree Expand file tree Collapse file tree 4 files changed +15
-20
lines changed Expand file tree Collapse file tree 4 files changed +15
-20
lines changed Original file line number Diff line number Diff line change @@ -1911,13 +1911,7 @@ void LinkerDriver::createFiles(opt::InputArgList &args) {
19111911 hasInput = true ;
19121912 break ;
19131913 case OPT_defsym: {
1914- StringRef from;
1915- StringRef to;
1916- std::tie (from, to) = StringRef (arg->getValue ()).split (' =' );
1917- if (from.empty () || to.empty ())
1918- error (" --defsym: syntax error: " + StringRef (arg->getValue ()));
1919- else
1920- readDefsym (from, MemoryBufferRef (to, " --defsym" ));
1914+ readDefsym (MemoryBufferRef (arg->getValue (), " --defsym" ));
19211915 break ;
19221916 }
19231917 case OPT_script:
Original file line number Diff line number Diff line change @@ -53,7 +53,7 @@ class ScriptParser final : ScriptLexer {
5353 void readLinkerScript ();
5454 void readVersionScript ();
5555 void readDynamicList ();
56- void readDefsym (StringRef name );
56+ void readDefsym ();
5757
5858private:
5959 void addFile (StringRef path);
@@ -283,9 +283,12 @@ void ScriptParser::readLinkerScript() {
283283 }
284284}
285285
286- void ScriptParser::readDefsym (StringRef name ) {
286+ void ScriptParser::readDefsym () {
287287 if (errorCount ())
288288 return ;
289+ inExpr = true ;
290+ StringRef name = readName ();
291+ expect (" =" );
289292 Expr e = readExpr ();
290293 if (!atEOF ())
291294 setError (" EOF expected, but got " + next ());
@@ -1854,7 +1857,4 @@ void elf::readDynamicList(MemoryBufferRef mb) {
18541857 ScriptParser (mb).readDynamicList ();
18551858}
18561859
1857- void elf::readDefsym (StringRef name, MemoryBufferRef mb) {
1858- llvm::TimeTraceScope timeScope (" Read defsym input" , name);
1859- ScriptParser (mb).readDefsym (name);
1860- }
1860+ void elf::readDefsym (MemoryBufferRef mb) { ScriptParser (mb).readDefsym (); }
Original file line number Diff line number Diff line change @@ -24,7 +24,7 @@ void readVersionScript(MemoryBufferRef mb);
2424void readDynamicList (MemoryBufferRef mb);
2525
2626// Parses the defsym expression.
27- void readDefsym (StringRef name, MemoryBufferRef mb);
27+ void readDefsym (MemoryBufferRef mb);
2828
2929bool hasWildcard (StringRef s);
3030
Original file line number Diff line number Diff line change 55# RUN: llvm-objdump -d --print-imm-hex %t | FileCheck %s --check-prefix=USE
66
77## Check that we accept --defsym foo2=foo1 form.
8- # RUN: ld.lld -o %t2 %t.o --defsym foo2=foo1
8+ # RUN: ld.lld -o %t2 %t.o --defsym '" foo2" =foo1'
99# RUN: llvm-readelf -s %t2 | FileCheck %s
1010# RUN: llvm-objdump -d --print-imm-hex %t2 | FileCheck %s --check-prefix=USE
1111
1212## Check we are reporting the error correctly and don't crash
1313## when handling the second --defsym.
14- # RUN: not ld.lld -o /dev/null %t.o --defsym ERR+ --defsym foo2=foo1 2>&1 | FileCheck %s --check-prefix=ERR
15- # ERR: error: --defsym: syntax error: ERR+
14+ # RUN: not ld.lld -o /dev/null %t.o --defsym ERR+ --defsym foo2=foo1 2>&1 | FileCheck %s --check-prefix=ERR --strict-whitespace
15+ # ERR:error: --defsym:1: = expected, but got +
16+ # ERR-NEXT:>>> ERR+
17+ # ERR-NEXT:>>> ^
1618
1719# CHECK-DAG: 0000000000000123 0 NOTYPE GLOBAL DEFAULT ABS foo1
1820# CHECK-DAG: 0000000000000123 0 NOTYPE GLOBAL DEFAULT ABS foo2
4143# ERR2: error: --defsym:1: EOF expected, but got ,
4244
4345# RUN: not ld.lld -o /dev/null %t.o --defsym=foo 2>&1 | FileCheck %s -check-prefix=ERR3
44- # ERR3: error: --defsym: syntax error: foo
46+ # ERR3: error: --defsym:1: unexpected EOF
4547
46- # RUN: not ld.lld -o /dev/null %t.o --defsym= 2>&1 | FileCheck %s -check-prefix=ERR4
47- # ERR4: error: --defsym: syntax error:
48+ # RUN: not ld.lld -o /dev/null %t.o --defsym= 2>&1 | FileCheck %s -check-prefix=ERR3
4849
4950.globl foo1
5051 foo1 = 0x123
You can’t perform that action at this time.
0 commit comments