diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-07-09 14:54:12 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-07-09 14:54:12 +0000 |
commit | 8cde5c01d82b913a6c5c17d78fecf8ab88ed2394 (patch) | |
tree | 2dd7c6fde5bfaa3f7dd73f01946cb2fd096844c9 /llvm/lib/Object | |
parent | feaf7b8d35282ec622d4643463ddf8fce0b1dcdb (diff) | |
download | bcm5719-llvm-8cde5c01d82b913a6c5c17d78fecf8ab88ed2394.tar.gz bcm5719-llvm-8cde5c01d82b913a6c5c17d78fecf8ab88ed2394.zip |
Extract printBSDMemberHeader.
It will get another use in the following patch. Also rename the other helper to
printGNUSmallMemberHeader for consistency.
llvm-svn: 241805
Diffstat (limited to 'llvm/lib/Object')
-rw-r--r-- | llvm/lib/Object/ArchiveWriter.cpp | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp index b904a1ec877..84dc3d6309c 100644 --- a/llvm/lib/Object/ArchiveWriter.cpp +++ b/llvm/lib/Object/ArchiveWriter.cpp @@ -107,37 +107,40 @@ static void printRestOfMemberHeader(raw_fd_ostream &Out, Out << "`\n"; } -static void printMemberHeader(raw_fd_ostream &Out, StringRef Name, - const sys::TimeValue &ModTime, unsigned UID, - unsigned GID, unsigned Perms, unsigned Size) { +static void printGNUSmallMemberHeader(raw_fd_ostream &Out, StringRef Name, + const sys::TimeValue &ModTime, + unsigned UID, unsigned GID, + unsigned Perms, unsigned Size) { printWithSpacePadding(Out, Twine(Name) + "/", 16); printRestOfMemberHeader(Out, ModTime, UID, GID, Perms, Size); } +static void printBSDMemberHeader(raw_fd_ostream &Out, StringRef Name, + const sys::TimeValue &ModTime, unsigned UID, + unsigned GID, unsigned Perms, unsigned Size) { + uint64_t PosAfterHeader = Out.tell() + 60 + Name.size(); + // Pad so that even 64 bit object files are aligned. + unsigned Pad = OffsetToAlignment(PosAfterHeader, 8); + unsigned NameWithPadding = Name.size() + Pad; + printWithSpacePadding(Out, Twine("#1/") + Twine(NameWithPadding), 16); + printRestOfMemberHeader(Out, ModTime, UID, GID, Perms, + NameWithPadding + Size); + Out << Name; + assert(PosAfterHeader == Out.tell()); + while (Pad--) + Out.write(uint8_t(0)); +} + static void printMemberHeader(raw_fd_ostream &Out, object::Archive::Kind Kind, StringRef Name, std::vector<unsigned>::iterator &StringMapIndexIter, const sys::TimeValue &ModTime, unsigned UID, unsigned GID, unsigned Perms, unsigned Size) { - if (Kind == object::Archive::K_BSD) { - uint64_t PosAfterHeader = Out.tell() + 60 + Name.size(); - // Pad so that even 64 bit object files are aligned. - unsigned Pad = OffsetToAlignment(PosAfterHeader, 8); - unsigned NameWithPadding = Name.size() + Pad; - printWithSpacePadding(Out, Twine("#1/") + Twine(NameWithPadding), 16); - printRestOfMemberHeader(Out, ModTime, UID, GID, Perms, - NameWithPadding + Size); - Out << Name; - assert(PosAfterHeader == Out.tell()); - while (Pad--) - Out.write(uint8_t(0)); - return; - } - if (Name.size() < 16) { - printMemberHeader(Out, Name, ModTime, UID, GID, Perms, Size); - return; - } + if (Kind == object::Archive::K_BSD) + return printBSDMemberHeader(Out, Name, ModTime, UID, GID, Perms, Size); + if (Name.size() < 16) + return printGNUSmallMemberHeader(Out, Name, ModTime, UID, GID, Perms, Size); Out << '/'; printWithSpacePadding(Out, *StringMapIndexIter++, 15); printRestOfMemberHeader(Out, ModTime, UID, GID, Perms, Size); @@ -195,7 +198,7 @@ writeSymbolTable(raw_fd_ostream &Out, object::Archive::Kind Kind, object::SymbolicFile &Obj = *ObjOrErr.get(); if (!StartOffset) { - printMemberHeader(Out, "", sys::TimeValue::now(), 0, 0, 0, 0); + printGNUSmallMemberHeader(Out, "", sys::TimeValue::now(), 0, 0, 0, 0); StartOffset = Out.tell(); print32BE(Out, 0); } |