summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-ar/llvm-ar.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-07-08 20:47:32 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-07-08 20:47:32 +0000
commita2ed0b0babca5c82ac547feb1502e7392db98066 (patch)
tree2df61304a4453719fe4106b0aa69521185b639c5 /llvm/tools/llvm-ar/llvm-ar.cpp
parentdcb46d6a74ba8b04408afa6c088e529a4254a95c (diff)
downloadbcm5719-llvm-a2ed0b0babca5c82ac547feb1502e7392db98066.tar.gz
bcm5719-llvm-a2ed0b0babca5c82ac547feb1502e7392db98066.zip
Start adding support for writing archives in BSD format.
No support for the symbol table yet (but will hopefully add it today). We always use the long filename format so that we can align the member, which is an advantage of the BSD format. llvm-svn: 241721
Diffstat (limited to 'llvm/tools/llvm-ar/llvm-ar.cpp')
-rw-r--r--llvm/tools/llvm-ar/llvm-ar.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp
index 0fd2df4f5aa..872c548454e 100644
--- a/llvm/tools/llvm-ar/llvm-ar.cpp
+++ b/llvm/tools/llvm-ar/llvm-ar.cpp
@@ -70,6 +70,16 @@ static cl::list<std::string>
static cl::opt<bool> MRI("M", cl::desc(""));
+namespace {
+enum Format { Default, GNU, BSD };
+}
+
+static cl::opt<Format>
+ FormatOpt("format", cl::desc("Archive format to create"),
+ cl::values(clEnumValN(Default, "defalut", "default"),
+ clEnumValN(GNU, "gnu", "gnu"),
+ clEnumValN(BSD, "bsd", "bsd"), clEnumValEnd));
+
std::string Options;
// Provide additional help output explaining the operations and modifiers of
@@ -539,15 +549,27 @@ computeNewArchiveMembers(ArchiveOperation Operation,
static void
performWriteOperation(ArchiveOperation Operation, object::Archive *OldArchive,
std::vector<NewArchiveIterator> *NewMembersP) {
+ object::Archive::Kind Kind;
+ switch (FormatOpt) {
+ case Default:
+ // FIXME: change as the support for other formats improve.
+ Kind = object::Archive::K_GNU;
+ case GNU:
+ Kind = object::Archive::K_GNU;
+ break;
+ case BSD:
+ Kind = object::Archive::K_BSD;
+ break;
+ }
if (NewMembersP) {
std::pair<StringRef, std::error_code> Result =
- writeArchive(ArchiveName, *NewMembersP, Symtab);
+ writeArchive(ArchiveName, *NewMembersP, Symtab, Kind);
failIfError(Result.second, Result.first);
return;
}
std::vector<NewArchiveIterator> NewMembers =
computeNewArchiveMembers(Operation, OldArchive);
- auto Result = writeArchive(ArchiveName, NewMembers, Symtab);
+ auto Result = writeArchive(ArchiveName, NewMembers, Symtab, Kind);
failIfError(Result.second, Result.first);
}
OpenPOWER on IntegriCloud