parent
91bab5364e
commit
2e36772caf
|
@ -64,7 +64,7 @@ std::string InputFile::getShortName() {
|
|||
|
||||
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 @@ void ArchiveFile::parse() {
|
|||
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 @@ MemoryBufferRef ArchiveFile::getMember(const Archive::Symbol *Sym) {
|
|||
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 @@ void ObjectFile::initializeSymbols() {
|
|||
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 @@ Defined *ObjectFile::createDefined(COFFSymbolRef Sym, const void *AuxP,
|
|||
|
||||
// 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]);
|
||||
|
|
|
@ -218,8 +218,9 @@ template <class ELFT> void LinkerScript<ELFT>::filter() {
|
|||
}
|
||||
}
|
||||
|
||||
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> void LinkerScript<ELFT>::assignAddresses() {
|
|||
}
|
||||
|
||||
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) {
|
||||
|
|
|
@ -133,11 +133,12 @@ public:
|
|||
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();
|
||||
|
|
|
@ -245,11 +245,12 @@ template <class ELFT> void Writer<ELFT>::run() {
|
|||
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();
|
||||
|
|
Loading…
Reference in New Issue