summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-07-09 14:54:12 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-07-09 14:54:12 +0000
commit8cde5c01d82b913a6c5c17d78fecf8ab88ed2394 (patch)
tree2dd7c6fde5bfaa3f7dd73f01946cb2fd096844c9
parentfeaf7b8d35282ec622d4643463ddf8fce0b1dcdb (diff)
downloadbcm5719-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
-rw-r--r--llvm/lib/Object/ArchiveWriter.cpp47
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);
}
OpenPOWER on IntegriCloud