[lld] Add more complete support for the INCLUDE command.
Patch by Ian Tessier. This change adds INCLUDE support to the MEMORY and SECTION commands, and to output sections, as per: https://sourceware.org/binutils/docs/ld/File-Commands.html#File-Commands Differential Revision: https://reviews.llvm.org/D52951 llvm-svn: 344368
This commit is contained in:
@@ -501,6 +501,9 @@ void ScriptParser::readSections() {
|
||||
for (BaseCommand *Cmd : readOverlay())
|
||||
V.push_back(Cmd);
|
||||
continue;
|
||||
} else if (Tok == "INCLUDE") {
|
||||
readInclude();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (BaseCommand *Cmd = readAssignment(Tok))
|
||||
@@ -803,6 +806,8 @@ OutputSection *ScriptParser::readOutputSectionDescription(StringRef OutSec) {
|
||||
Cmd->Filler = readFill();
|
||||
} else if (Tok == "SORT") {
|
||||
readSort();
|
||||
} else if (Tok == "INCLUDE") {
|
||||
readInclude();
|
||||
} else if (peek() == "(") {
|
||||
Cmd->SectionCommands.push_back(readInputSectionDescription(Tok));
|
||||
} else {
|
||||
@@ -1429,7 +1434,11 @@ uint64_t ScriptParser::readMemoryAssignment(StringRef S1, StringRef S2,
|
||||
void ScriptParser::readMemory() {
|
||||
expect("{");
|
||||
while (!errorCount() && !consume("}")) {
|
||||
StringRef Name = next();
|
||||
StringRef Tok = next();
|
||||
if (Tok == "INCLUDE") {
|
||||
readInclude();
|
||||
continue;
|
||||
}
|
||||
|
||||
uint32_t Flags = 0;
|
||||
uint32_t NegFlags = 0;
|
||||
@@ -1444,10 +1453,9 @@ void ScriptParser::readMemory() {
|
||||
uint64_t Length = readMemoryAssignment("LENGTH", "len", "l");
|
||||
|
||||
// Add the memory region to the region map.
|
||||
MemoryRegion *MR =
|
||||
make<MemoryRegion>(Name, Origin, Length, Flags, NegFlags);
|
||||
if (!Script->MemoryRegions.insert({Name, MR}).second)
|
||||
setError("region '" + Name + "' already defined");
|
||||
MemoryRegion *MR = make<MemoryRegion>(Tok, Origin, Length, Flags, NegFlags);
|
||||
if (!Script->MemoryRegions.insert({Tok, MR}).second)
|
||||
setError("region '" + Tok + "' already defined");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user