diff options
| -rw-r--r-- | lld/ELF/LinkerScript.cpp | 5 | ||||
| -rw-r--r-- | lld/ELF/LinkerScript.h | 10 | ||||
| -rw-r--r-- | lld/ELF/ScriptParser.cpp | 19 |
3 files changed, 17 insertions, 17 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index fcb1f847272..78c14d08d79 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -815,8 +815,7 @@ std::vector<PhdrEntry *> LinkerScript::createPhdrs() { // Process PHDRS and FILEHDR keywords because they are not // real output sections and cannot be added in the following loop. for (const PhdrsCommand &Cmd : Opt.PhdrsCommands) { - PhdrEntry *Phdr = - make<PhdrEntry>(Cmd.Type, Cmd.Flags == UINT_MAX ? PF_R : Cmd.Flags); + PhdrEntry *Phdr = make<PhdrEntry>(Cmd.Type, Cmd.Flags ? *Cmd.Flags : PF_R); if (Cmd.HasFilehdr) Phdr->add(Out::ElfHeader); @@ -835,7 +834,7 @@ std::vector<PhdrEntry *> LinkerScript::createPhdrs() { // Assign headers specified by linker script for (size_t Id : getPhdrIndices(Sec)) { Ret[Id]->add(Sec); - if (Opt.PhdrsCommands[Id].Flags == UINT_MAX) + if (!Opt.PhdrsCommands[Id].Flags.hasValue()) Ret[Id]->p_flags |= Sec->getPhdrFlags(); } } diff --git a/lld/ELF/LinkerScript.h b/lld/ELF/LinkerScript.h index 3b56a8f0101..425cf33c806 100644 --- a/lld/ELF/LinkerScript.h +++ b/lld/ELF/LinkerScript.h @@ -166,11 +166,11 @@ struct BytesDataCommand : BaseCommand { struct PhdrsCommand { StringRef Name; - unsigned Type; - bool HasFilehdr; - bool HasPhdrs; - unsigned Flags; - Expr LMAExpr; + unsigned Type = llvm::ELF::PT_NULL; + bool HasFilehdr = false; + bool HasPhdrs = false; + llvm::Optional<unsigned> Flags; + Expr LMAExpr = nullptr; }; // ScriptConfiguration holds linker script parse results. diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index acd8b87fd74..6aa900380bd 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -388,25 +388,26 @@ void ScriptParser::readOutputFormat() { void ScriptParser::readPhdrs() { expect("{"); - while (!ErrorCount && !consume("}")) { - Script->Opt.PhdrsCommands.push_back( - {next(), PT_NULL, false, false, UINT_MAX, nullptr}); - PhdrsCommand &PhdrCmd = Script->Opt.PhdrsCommands.back(); - PhdrCmd.Type = readPhdrType(); + while (!ErrorCount && !consume("}")) { + PhdrsCommand Cmd; + Cmd.Name = next(); + Cmd.Type = readPhdrType(); while (!ErrorCount && !consume(";")) { if (consume("FILEHDR")) - PhdrCmd.HasFilehdr = true; + Cmd.HasFilehdr = true; else if (consume("PHDRS")) - PhdrCmd.HasPhdrs = true; + Cmd.HasPhdrs = true; else if (consume("AT")) - PhdrCmd.LMAExpr = readParenExpr(); + Cmd.LMAExpr = readParenExpr(); else if (consume("FLAGS")) - PhdrCmd.Flags = readParenExpr()().getValue(); + Cmd.Flags = readParenExpr()().getValue(); else setError("unexpected header attribute: " + next()); } + + Script->Opt.PhdrsCommands.push_back(Cmd); } } |

