diff options
Diffstat (limited to 'lld/ELF/ScriptParser.cpp')
-rw-r--r-- | lld/ELF/ScriptParser.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index c68c25ad615..29dec116ce8 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -436,6 +436,7 @@ void ScriptParser::readSections() { Config->SingleRoRx = true; expect("{"); + std::vector<BaseCommand *> V; while (!errorCount() && !consume("}")) { StringRef Tok = next(); BaseCommand *Cmd = readProvideOrAssignment(Tok); @@ -445,8 +446,18 @@ void ScriptParser::readSections() { else Cmd = readOutputSectionDescription(Tok); } - Script->SectionCommands.push_back(Cmd); + V.push_back(Cmd); } + + if (!atEOF() && consume("INSERT")) { + consume("AFTER"); + std::vector<BaseCommand *> &Dest = Script->InsertAfterCommands[next()]; + Dest.insert(Dest.end(), V.begin(), V.end()); + return; + } + + Script->SectionCommands.insert(Script->SectionCommands.end(), V.begin(), + V.end()); } static int precedence(StringRef Op) { |