diff options
| author | 2017-01-24 08:32:59 +0000 | |
|---|---|---|
| committer | 2017-01-24 08:32:59 +0000 | |
| commit | 53d771aafdbe5b919f264f53cba3788e2c4cffd2 (patch) | |
| tree | 7eca39498be0ff1e3a6daf583cd9ca5886bb2636 /gnu/llvm/tools/llvm-ar/llvm-ar.cpp | |
| parent | In preparation of compiling our kernels with -ffreestanding, explicitly map (diff) | |
| download | wireguard-openbsd-53d771aafdbe5b919f264f53cba3788e2c4cffd2.tar.xz wireguard-openbsd-53d771aafdbe5b919f264f53cba3788e2c4cffd2.zip | |
Import LLVM 4.0.0 rc1 including clang and lld to help the current
development effort on OpenBSD/arm64.
Diffstat (limited to 'gnu/llvm/tools/llvm-ar/llvm-ar.cpp')
| -rw-r--r-- | gnu/llvm/tools/llvm-ar/llvm-ar.cpp | 77 |
1 files changed, 50 insertions, 27 deletions
diff --git a/gnu/llvm/tools/llvm-ar/llvm-ar.cpp b/gnu/llvm/tools/llvm-ar/llvm-ar.cpp index 865152b6af8..b99a396da62 100644 --- a/gnu/llvm/tools/llvm-ar/llvm-ar.cpp +++ b/gnu/llvm/tools/llvm-ar/llvm-ar.cpp @@ -21,6 +21,7 @@ #include "llvm/Object/ArchiveWriter.h" #include "llvm/Object/MachO.h" #include "llvm/Object/ObjectFile.h" +#include "llvm/Support/Chrono.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Errc.h" #include "llvm/Support/FileSystem.h" @@ -93,7 +94,7 @@ static cl::opt<Format> FormatOpt("format", cl::desc("Archive format to create"), cl::values(clEnumValN(Default, "default", "default"), clEnumValN(GNU, "gnu", "gnu"), - clEnumValN(BSD, "bsd", "bsd"), clEnumValEnd)); + clEnumValN(BSD, "bsd", "bsd"))); static std::string Options; @@ -116,6 +117,7 @@ static cl::extrahelp MoreHelp( " [o] - preserve original dates\n" " [s] - create an archive index (cf. ranlib)\n" " [S] - do not build a symbol table\n" + " [T] - create a thin archive\n" " [u] - update only files newer than archive contents\n" "\nMODIFIERS (generic):\n" " [c] - do not warn if the library had to be created\n" @@ -317,8 +319,8 @@ static void doPrint(StringRef Name, const object::Archive::Child &C) { if (Verbose) outs() << "Printing " << Name << "\n"; - ErrorOr<StringRef> DataOrErr = C.getBuffer(); - failIfError(DataOrErr.getError()); + Expected<StringRef> DataOrErr = C.getBuffer(); + failIfError(DataOrErr.takeError()); StringRef Data = *DataOrErr; outs().write(Data.data(), Data.size()); } @@ -337,18 +339,31 @@ static void printMode(unsigned mode) { // modification time are also printed. static void doDisplayTable(StringRef Name, const object::Archive::Child &C) { if (Verbose) { - sys::fs::perms Mode = C.getAccessMode(); + Expected<sys::fs::perms> ModeOrErr = C.getAccessMode(); + failIfError(ModeOrErr.takeError()); + sys::fs::perms Mode = ModeOrErr.get(); printMode((Mode >> 6) & 007); printMode((Mode >> 3) & 007); printMode(Mode & 007); - outs() << ' ' << C.getUID(); - outs() << '/' << C.getGID(); - ErrorOr<uint64_t> Size = C.getSize(); - failIfError(Size.getError()); + Expected<unsigned> UIDOrErr = C.getUID(); + failIfError(UIDOrErr.takeError()); + outs() << ' ' << UIDOrErr.get(); + Expected<unsigned> GIDOrErr = C.getGID(); + failIfError(GIDOrErr.takeError()); + outs() << '/' << GIDOrErr.get(); + Expected<uint64_t> Size = C.getSize(); + failIfError(Size.takeError()); outs() << ' ' << format("%6llu", Size.get()); - outs() << ' ' << C.getLastModified().str(); + auto ModTimeOrErr = C.getLastModified(); + failIfError(ModTimeOrErr.takeError()); + outs() << ' ' << ModTimeOrErr.get(); outs() << ' '; } + + if (C.getParent()->isThin()) { + outs() << sys::path::parent_path(ArchiveName); + outs() << '/'; + } outs() << Name << "\n"; } @@ -356,7 +371,9 @@ static void doDisplayTable(StringRef Name, const object::Archive::Child &C) { // system. static void doExtract(StringRef Name, const object::Archive::Child &C) { // Retain the original mode. - sys::fs::perms Mode = C.getAccessMode(); + Expected<sys::fs::perms> ModeOrErr = C.getAccessMode(); + failIfError(ModeOrErr.takeError()); + sys::fs::perms Mode = ModeOrErr.get(); int FD; failIfError(sys::fs::openFileForWrite(Name, FD, sys::fs::F_None, Mode), Name); @@ -365,7 +382,9 @@ static void doExtract(StringRef Name, const object::Archive::Child &C) { raw_fd_ostream file(FD, false); // Get the data and its length - StringRef Data = *C.getBuffer(); + Expected<StringRef> BufOrErr = C.getBuffer(); + failIfError(BufOrErr.takeError()); + StringRef Data = BufOrErr.get(); // Write the data. file.write(Data.data(), Data.size()); @@ -373,9 +392,12 @@ static void doExtract(StringRef Name, const object::Archive::Child &C) { // If we're supposed to retain the original modification times, etc. do so // now. - if (OriginalDates) + if (OriginalDates) { + auto ModTimeOrErr = C.getLastModified(); + failIfError(ModTimeOrErr.takeError()); failIfError( - sys::fs::setLastModificationAndAccessTime(FD, C.getLastModified())); + sys::fs::setLastModificationAndAccessTime(FD, ModTimeOrErr.get())); + } if (close(FD)) fail("Could not close the file"); @@ -406,14 +428,14 @@ static void performReadOperation(ArchiveOperation Operation, bool Filter = !Members.empty(); { - Error Err; + Error Err = Error::success(); for (auto &C : OldArchive->children(Err)) { - ErrorOr<StringRef> NameOrErr = C.getName(); - failIfError(NameOrErr.getError()); + Expected<StringRef> NameOrErr = C.getName(); + failIfError(NameOrErr.takeError()); StringRef Name = NameOrErr.get(); if (Filter) { - auto I = std::find(Members.begin(), Members.end(), Name); + auto I = find(Members, Name); if (I == Members.end()) continue; Members.erase(I); @@ -482,10 +504,9 @@ static InsertAction computeInsertAction(ArchiveOperation Operation, if (Operation == QuickAppend || Members.empty()) return IA_AddOldMember; - auto MI = - std::find_if(Members.begin(), Members.end(), [Name](StringRef Path) { - return Name == sys::path::filename(Path); - }); + auto MI = find_if(Members, [Name](StringRef Path) { + return Name == sys::path::filename(Path); + }); if (MI == Members.end()) return IA_AddOldMember; @@ -510,7 +531,9 @@ static InsertAction computeInsertAction(ArchiveOperation Operation, // operation. sys::fs::file_status Status; failIfError(sys::fs::status(*MI, Status), *MI); - if (Status.getLastModificationTime() < Member.getLastModified()) { + auto ModTimeOrErr = Member.getLastModified(); + failIfError(ModTimeOrErr.takeError()); + if (Status.getLastModificationTime() < ModTimeOrErr.get()) { if (PosName.empty()) return IA_AddOldMember; return IA_MoveOldMember; @@ -533,11 +556,11 @@ computeNewArchiveMembers(ArchiveOperation Operation, int InsertPos = -1; StringRef PosName = sys::path::filename(RelPos); if (OldArchive) { - Error Err; + Error Err = Error::success(); for (auto &Child : OldArchive->children(Err)) { int Pos = Ret.size(); - ErrorOr<StringRef> NameOrErr = Child.getName(); - failIfError(NameOrErr.getError()); + Expected<StringRef> NameOrErr = Child.getName(); + failIfError(NameOrErr.takeError()); StringRef Name = NameOrErr.get(); if (Name == PosName) { assert(AddAfter || AddBefore); @@ -705,7 +728,7 @@ static int performOperation(ArchiveOperation Operation, fail("error opening '" + ArchiveName + "': " + EC.message() + "!"); if (!EC) { - Error Err; + Error Err = Error::success(); object::Archive Archive(Buf.get()->getMemBufferRef(), Err); EC = errorToErrorCode(std::move(Err)); failIfError(EC, @@ -767,7 +790,7 @@ static void runMRIScript() { Archives.push_back(std::move(*LibOrErr)); object::Archive &Lib = *Archives.back(); { - Error Err; + Error Err = Error::success(); for (auto &Member : Lib.children(Err)) addMember(NewMembers, Member); failIfError(std::move(Err)); |
