Revert 277594, it caused PR28827
llvm-svn: 277599
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index 32057b4..92d14c1 100644
--- a/lld/COFF/InputFiles.cpp
+++ b/lld/COFF/InputFiles.cpp
@@ -64,7 +64,7 @@
void ArchiveFile::parse() {
// Parse a MemoryBufferRef as an archive file.
- File = check(Archive::create(MB), "failed to parse static library");
+ File = check(Archive::create(MB), getShortName());
// Allocate a buffer for Lazy objects.
size_t NumSyms = File->getNumberOfSymbols();
@@ -81,7 +81,7 @@
for (auto &Child : File->children(Err))
Seen[Child.getChildOffset()].clear();
if (Err)
- fatal(Err, "failed to parse static library");
+ fatal(Err, getShortName());
}
// Returns a buffer pointing to a member file containing a given symbol.
@@ -109,13 +109,13 @@
void ObjectFile::parse() {
// Parse a memory buffer as a COFF file.
std::unique_ptr<Binary> Bin =
- check(createBinary(MB), "failed to parse object file");
+ check(createBinary(MB), getShortName());
if (auto *Obj = dyn_cast<COFFObjectFile>(Bin.get())) {
Bin.release();
COFFObj.reset(Obj);
} else {
- fatal(getName() + " is not a COFF file");
+ fatal(getShortName() + " is not a COFF file");
}
// Read section and symbol tables.
@@ -169,7 +169,7 @@
for (uint32_t I = 0; I < NumSymbols; ++I) {
// Get a COFFSymbolRef object.
COFFSymbolRef Sym =
- check(COFFObj->getSymbol(I), "broken object file: " + getName());
+ check(COFFObj->getSymbol(I), "broken object file: " + getShortName());
const void *AuxP = nullptr;
if (Sym.getNumberOfAuxSymbols())
@@ -231,12 +231,12 @@
// Reserved sections numbers don't have contents.
if (llvm::COFF::isReservedSectionNumber(SectionNumber))
- fatal("broken object file: " + getName());
+ fatal("broken object file: " + getShortName());
// This symbol references a section which is not present in the section
// header.
if ((uint32_t)SectionNumber >= SparseChunks.size())
- fatal("broken object file: " + getName());
+ fatal("broken object file: " + getShortName());
// Nothing else to do without a section chunk.
auto *SC = cast_or_null<SectionChunk>(SparseChunks[SectionNumber]);
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index d0dee08..656e646 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -218,8 +218,9 @@
}
}
-template <class ELFT> void LinkerScript<ELFT>::assignAddresses() {
- ArrayRef<OutputSectionBase<ELFT> *> Sections = *OutputSections;
+template <class ELFT>
+void LinkerScript<ELFT>::assignAddresses(
+ ArrayRef<OutputSectionBase<ELFT> *> Sections) {
// Orphan sections are sections present in the input files which
// are not explicitly placed into the output file by the linker script.
// We place orphan sections at end of file.
@@ -288,8 +289,8 @@
}
template <class ELFT>
-std::vector<PhdrEntry<ELFT>> LinkerScript<ELFT>::createPhdrs() {
- ArrayRef<OutputSectionBase<ELFT> *> Sections = *OutputSections;
+std::vector<PhdrEntry<ELFT>>
+LinkerScript<ELFT>::createPhdrs(ArrayRef<OutputSectionBase<ELFT> *> Sections) {
std::vector<PhdrEntry<ELFT>> Ret;
for (const PhdrsCommand &Cmd : Opt.PhdrsCommands) {
diff --git a/lld/ELF/LinkerScript.h b/lld/ELF/LinkerScript.h
index 2319cae..e853d0c 100644
--- a/lld/ELF/LinkerScript.h
+++ b/lld/ELF/LinkerScript.h
@@ -133,11 +133,12 @@
void createSections(std::vector<OutputSectionBase<ELFT> *> *Out,
OutputSectionFactory<ELFT> &Factory);
- std::vector<PhdrEntry<ELFT>> createPhdrs();
+ std::vector<PhdrEntry<ELFT>>
+ createPhdrs(ArrayRef<OutputSectionBase<ELFT> *> S);
ArrayRef<uint8_t> getFiller(StringRef Name);
bool shouldKeep(InputSectionBase<ELFT> *S);
- void assignAddresses();
+ void assignAddresses(ArrayRef<OutputSectionBase<ELFT> *> S);
int compareSections(StringRef A, StringRef B);
void addScriptedSymbols();
bool hasPhdrsCommands();
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 1211f4f..7dafdb7 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -245,11 +245,12 @@
if (Config->Relocatable) {
assignFileOffsets();
} else {
- Phdrs = Script<ELFT>::X->hasPhdrsCommands() ? Script<ELFT>::X->createPhdrs()
- : createPhdrs();
+ Phdrs = Script<ELFT>::X->hasPhdrsCommands()
+ ? Script<ELFT>::X->createPhdrs(OutputSections)
+ : createPhdrs();
fixHeaders();
if (ScriptConfig->HasContents) {
- Script<ELFT>::X->assignAddresses();
+ Script<ELFT>::X->assignAddresses(OutputSections);
} else {
fixSectionAlignments();
assignAddresses();