[lld] r289097 - COFF: Use make() to create a new file object in createFile.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 8 12:20:22 PST 2016
Author: ruiu
Date: Thu Dec 8 14:20:22 2016
New Revision: 289097
URL: http://llvm.org/viewvc/llvm-project?rev=289097&view=rev
Log:
COFF: Use make() to create a new file object in createFile.
Modified:
lld/trunk/COFF/Driver.cpp
lld/trunk/COFF/SymbolTable.cpp
lld/trunk/COFF/SymbolTable.h
lld/trunk/COFF/Symbols.cpp
lld/trunk/COFF/Symbols.h
Modified: lld/trunk/COFF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=289097&r1=289096&r2=289097&view=diff
==============================================================================
--- lld/trunk/COFF/Driver.cpp (original)
+++ lld/trunk/COFF/Driver.cpp Thu Dec 8 14:20:22 2016
@@ -68,7 +68,7 @@ MemoryBufferRef LinkerDriver::openFile(S
return MBRef;
}
-static std::unique_ptr<InputFile> createFile(MemoryBufferRef MB) {
+static InputFile *createFile(MemoryBufferRef MB) {
if (Driver->Cpio)
Driver->Cpio->append(relativeToRoot(MB.getBufferIdentifier()),
MB.getBuffer());
@@ -76,15 +76,15 @@ static std::unique_ptr<InputFile> create
// File type is detected by contents, not by file extension.
file_magic Magic = identify_magic(MB.getBuffer());
if (Magic == file_magic::archive)
- return std::unique_ptr<InputFile>(new ArchiveFile(MB));
+ return make<ArchiveFile>(MB);
if (Magic == file_magic::bitcode)
- return std::unique_ptr<InputFile>(new BitcodeFile(MB));
+ return make<BitcodeFile>(MB);
if (Magic == file_magic::coff_cl_gl_object)
fatal(MB.getBufferIdentifier() + ": is not a native COFF file. "
"Recompile without /GL");
if (Config->OutputFile == "")
Config->OutputFile = getOutputPath(MB.getBufferIdentifier());
- return std::unique_ptr<InputFile>(new ObjectFile(MB));
+ return make<ObjectFile>(MB);
}
static bool isDecorated(StringRef Sym) {
@@ -571,7 +571,7 @@ void LinkerDriver::link(llvm::ArrayRef<c
// Determine machine type and check if all object files are
// for the same CPU type. Note that this needs to be done before
// any call to mangle().
- for (std::unique_ptr<InputFile> &File : Symtab.getFiles()) {
+ for (InputFile *File : Symtab.getFiles()) {
MachineTypes MT = File->getMachineType();
if (MT == IMAGE_FILE_MACHINE_UNKNOWN)
continue;
@@ -580,7 +580,7 @@ void LinkerDriver::link(llvm::ArrayRef<c
continue;
}
if (Config->Machine != MT)
- fatal(toString(File.get()) + ": machine type " + machineToStr(MT) +
+ fatal(toString(File) + ": machine type " + machineToStr(MT) +
" conflicts with " + machineToStr(Config->Machine));
}
if (Config->Machine == IMAGE_FILE_MACHINE_UNKNOWN) {
Modified: lld/trunk/COFF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/SymbolTable.cpp?rev=289097&r1=289096&r2=289097&view=diff
==============================================================================
--- lld/trunk/COFF/SymbolTable.cpp (original)
+++ lld/trunk/COFF/SymbolTable.cpp Thu Dec 8 14:20:22 2016
@@ -7,12 +7,13 @@
//
//===----------------------------------------------------------------------===//
+#include "SymbolTable.h"
#include "Config.h"
#include "Driver.h"
#include "Error.h"
-#include "SymbolTable.h"
#include "Symbols.h"
#include "lld/Core/Parallel.h"
+#include "lld/Support/Memory.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/LTO/legacy/LTOCodeGenerator.h"
#include "llvm/Support/Debug.h"
@@ -24,15 +25,14 @@ using namespace llvm;
namespace lld {
namespace coff {
-void SymbolTable::addFile(std::unique_ptr<InputFile> FileP) {
+void SymbolTable::addFile(InputFile *File) {
#if LLVM_ENABLE_THREADS
std::launch Policy = std::launch::async;
#else
std::launch Policy = std::launch::deferred;
#endif
- InputFile *File = FileP.get();
- Files.push_back(std::move(FileP));
+ Files.push_back(File);
if (auto *F = dyn_cast<ArchiveFile>(File)) {
ArchiveQueue.push_back(
std::async(Policy, [=]() { F->parse(); return F; }));
@@ -156,11 +156,11 @@ void SymbolTable::reportRemainingUndefin
for (Undefined *U : Config->GCRoot)
if (Undefs.count(U->repl()))
llvm::errs() << "<root>: undefined symbol: " << U->getName() << "\n";
- for (std::unique_ptr<InputFile> &File : Files)
- if (!isa<ArchiveFile>(File.get()))
+ for (InputFile *File : Files)
+ if (!isa<ArchiveFile>(File))
for (SymbolBody *Sym : File->getSymbols())
if (Undefs.count(Sym->repl()))
- llvm::errs() << toString(File.get())
+ llvm::errs() << toString(File)
<< ": undefined symbol: " << Sym->getName() << "\n";
if (!Config->Force)
fatal("link failed");
@@ -230,16 +230,16 @@ Symbol *SymbolTable::insert(SymbolBody *
// Reads an archive member file pointed by a given symbol.
void SymbolTable::addMemberFile(Lazy *Body) {
- std::unique_ptr<InputFile> File = Body->getMember();
+ InputFile *File = Body->getMember();
// getMember returns an empty buffer if the member was already
// read from the library.
if (!File)
return;
if (Config->Verbose)
- llvm::outs() << "Loaded " << toString(File.get()) << " for "
- << Body->getName() << "\n";
- addFile(std::move(File));
+ llvm::outs() << "Loaded " << toString(File) << " for " << Body->getName()
+ << "\n";
+ addFile(File);
}
std::vector<Chunk *> SymbolTable::getChunks() {
Modified: lld/trunk/COFF/SymbolTable.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/SymbolTable.h?rev=289097&r1=289096&r2=289097&view=diff
==============================================================================
--- lld/trunk/COFF/SymbolTable.h (original)
+++ lld/trunk/COFF/SymbolTable.h Thu Dec 8 14:20:22 2016
@@ -32,6 +32,8 @@ namespace coff {
class Chunk;
class Defined;
+class DefinedAbsolute;
+class DefinedRelative;
class Lazy;
class SectionChunk;
class SymbolBody;
@@ -49,8 +51,8 @@ struct Symbol;
// to replace the lazy symbol. The logic is implemented in resolve().
class SymbolTable {
public:
- void addFile(std::unique_ptr<InputFile> File);
- std::vector<std::unique_ptr<InputFile>> &getFiles() { return Files; }
+ void addFile(InputFile *File);
+ std::vector<InputFile *> &getFiles() { return Files; }
void step();
void run();
bool queueEmpty();
@@ -111,7 +113,7 @@ private:
llvm::DenseMap<StringRef, Symbol *> Symtab;
- std::vector<std::unique_ptr<InputFile>> Files;
+ std::vector<InputFile *> Files;
std::vector<std::future<ArchiveFile *>> ArchiveQueue;
std::vector<std::future<InputFile *>> ObjectQueue;
Modified: lld/trunk/COFF/Symbols.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Symbols.cpp?rev=289097&r1=289096&r2=289097&view=diff
==============================================================================
--- lld/trunk/COFF/Symbols.cpp (original)
+++ lld/trunk/COFF/Symbols.cpp Thu Dec 8 14:20:22 2016
@@ -11,6 +11,7 @@
#include "Error.h"
#include "InputFiles.h"
#include "Strings.h"
+#include "lld/Support/Memory.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
@@ -181,23 +182,23 @@ DefinedImportThunk::DefinedImportThunk(S
}
}
-std::unique_ptr<InputFile> Lazy::getMember() {
+InputFile *Lazy::getMember() {
MemoryBufferRef MBRef = File->getMember(&Sym);
// getMember returns an empty buffer if the member was already
// read from the library.
if (MBRef.getBuffer().empty())
- return std::unique_ptr<InputFile>(nullptr);
+ return nullptr;
file_magic Magic = identify_magic(MBRef.getBuffer());
if (Magic == file_magic::coff_import_library)
- return std::unique_ptr<InputFile>(new ImportFile(MBRef));
+ return make<ImportFile>(MBRef);
- std::unique_ptr<InputFile> Obj;
+ InputFile *Obj;
if (Magic == file_magic::coff_object)
- Obj.reset(new ObjectFile(MBRef));
+ Obj = make<ObjectFile>(MBRef);
else if (Magic == file_magic::bitcode)
- Obj.reset(new BitcodeFile(MBRef));
+ Obj = make<BitcodeFile>(MBRef);
else
fatal("unknown file type: " + File->getName());
Modified: lld/trunk/COFF/Symbols.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Symbols.h?rev=289097&r1=289096&r2=289097&view=diff
==============================================================================
--- lld/trunk/COFF/Symbols.h (original)
+++ lld/trunk/COFF/Symbols.h Thu Dec 8 14:20:22 2016
@@ -256,7 +256,7 @@ public:
// Returns an object file for this symbol, or a nullptr if the file
// was already returned.
- std::unique_ptr<InputFile> getMember();
+ InputFile *getMember();
int getFileIndex() { return File->Index; }
More information about the llvm-commits
mailing list