From: Fangrui Song Date: Sun, 26 Jun 2022 03:26:47 +0000 (-0700) Subject: [ELF] Fix assertion failure when PROVIDE/HIDDEN/PROVIDE_HIDDEN does not have = X-Git-Tag: upstream/15.0.7~3541 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=21bf6bb3d369e5de70b65ad3a9e1149070e3a7cd;p=platform%2Fupstream%2Fllvm.git [ELF] Fix assertion failure when PROVIDE/HIDDEN/PROVIDE_HIDDEN does not have = --- diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index d0fa449..1f06005 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -1017,7 +1017,14 @@ std::array ScriptParser::readFill() { SymbolAssignment *ScriptParser::readProvideHidden(bool provide, bool hidden) { expect("("); - SymbolAssignment *cmd = readSymbolAssignment(next()); + StringRef name = next(), eq = peek(); + if (eq != "=") { + setError("= expected, but got " + next()); + while (!atEOF() && next() != ")") + ; + return nullptr; + } + SymbolAssignment *cmd = readSymbolAssignment(name); cmd->provide = provide; cmd->hidden = hidden; expect(")"); diff --git a/lld/test/ELF/linkerscript/symbols.s b/lld/test/ELF/linkerscript/symbols.s index d5c3c22..1e6da7b 100644 --- a/lld/test/ELF/linkerscript/symbols.s +++ b/lld/test/ELF/linkerscript/symbols.s @@ -73,6 +73,11 @@ # SIMPLE2: 0000000000000100 g *ABS* 0000000000000000 bar # SIMPLE2: 0000000000000100 g *ABS* 0000000000000000 baz +# RUN: echo 'PROVIDE(somesym + 1);' > %t.script +# RUN: not ld.lld -T %t.script %t -o /dev/null 2>&1 | FileCheck %s --check-prefix=PROVIDE-ERR + +# PROVIDE-ERR: {{.*}}:1: = expected, but got + + .global _start _start: nop