diff options
| author | Nico Weber <nicolasweber@gmx.de> | 2016-04-20 23:30:14 +0000 |
|---|---|---|
| committer | Nico Weber <nicolasweber@gmx.de> | 2016-04-20 23:30:14 +0000 |
| commit | 848334704d3853dbb5a9984e3b8bd670f3325066 (patch) | |
| tree | 7ceee9786466ed6fb7abbdc2c47ff28748e92717 | |
| parent | e63db09bea471b5a37b4ef4c0aea85c0457dd0cd (diff) | |
| download | bcm5719-llvm-848334704d3853dbb5a9984e3b8bd670f3325066.tar.gz bcm5719-llvm-848334704d3853dbb5a9984e3b8bd670f3325066.zip | |
unbreak COFF/out.test after r266929
llvm-svn: 266935
| -rw-r--r-- | lld/COFF/DriverUtils.cpp | 26 | ||||
| -rw-r--r-- | lld/test/COFF/out.test | 1 |
2 files changed, 26 insertions, 1 deletions
diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp index ba83f8691b3..ae463995467 100644 --- a/lld/COFF/DriverUtils.cpp +++ b/lld/COFF/DriverUtils.cpp @@ -559,6 +559,7 @@ static std::string getImplibPath() { } static std::unique_ptr<MemoryBuffer> createEmptyImportLibrary() { +#if 0 std::string S = (Twine("LIBRARY \"") + llvm::sys::path::filename(Config->OutputFile) + "\"\n") .str(); @@ -578,6 +579,27 @@ static std::unique_ptr<MemoryBuffer> createEmptyImportLibrary() { MemoryBuffer::getFile(Path2, -1, false); error(BufOrErr, Twine("Failed to open ") + Path2); return MemoryBuffer::getMemBufferCopy((*BufOrErr)->getBuffer()); +#else + const char kMagic[] = "!<arch>\n"; + size_t Size = sizeof(kMagic) + // Include trailing \0. + sizeof(object::ArchiveMemberHeader); + std::unique_ptr<MemoryBuffer> Buf = MemoryBuffer::getNewUninitMemBuffer( + Size, getImplibPath()); + char* B = const_cast<char*>(Buf->getBufferStart()); + memcpy(B, kMagic, sizeof(kMagic)); // Include trailing \0. + + auto *Hdr = + reinterpret_cast<object::ArchiveMemberHeader *>(B + sizeof(kMagic)); + sprintf(Hdr->Name, "%-12s", "/"); + sprintf(Hdr->LastModified, "%-12d", 0); + sprintf(Hdr->UID, "%-6d", 0); + sprintf(Hdr->GID, "%-6d", 0); + sprintf(Hdr->AccessMode, "%-8d", 0644); + sprintf(Hdr->Size, "%-10d", 0); + memcpy(Hdr->Terminator, "\n", 2); + + return Buf; +#endif } static std::vector<NewArchiveIterator> @@ -594,7 +616,7 @@ readMembers(const object::Archive &Archive) { } // This class creates short import files which is described in -// PE/COFF spec 7. Import Library Format. +// PE/COFF spec 8. Import Library Format. class ShortImportCreator { public: ShortImportCreator(object::Archive *A, StringRef S) : Parent(A), DLLName(S) {} @@ -675,6 +697,7 @@ void writeImportLibrary() { for (Export &E : Config->Exports) { if (E.Private) continue; +fprintf(stderr, "export %s\n", E.SymbolName.str().c_str()); if (E.ExtName.empty()) { Members.push_back(ShortImport.create( E.SymbolName, E.Ordinal, getNameType(E.SymbolName, E.Name), E.Data)); @@ -686,6 +709,7 @@ void writeImportLibrary() { } std::string Path = getImplibPath(); +fprintf(stderr, "writing implib to %s\n", Path.c_str()); std::pair<StringRef, std::error_code> Result = writeArchive(Path, Members, /*WriteSymtab*/ true, object::Archive::K_GNU, /*Deterministic*/ true, /*Thin*/ false); diff --git a/lld/test/COFF/out.test b/lld/test/COFF/out.test index a7b56145996..c9b5cbd6e0f 100644 --- a/lld/test/COFF/out.test +++ b/lld/test/COFF/out.test @@ -1,3 +1,4 @@ +# REQUIRES: winlib # RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.obj # RUN: mkdir -p %T/out/tmp |

