aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Archive/ArchiveWriter.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-06-14 23:25:53 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-06-14 23:25:53 +0000
commit250bfb1745fd72615b618e3c8748321a104d80d0 (patch)
tree0aeaf51210822a37de79ba4b6ba6dbc766b8e5c6 /lib/Archive/ArchiveWriter.cpp
parentd6055262d23b1a8f2b5c74ab94fc6c143aca1c45 (diff)
downloadexternal_llvm-250bfb1745fd72615b618e3c8748321a104d80d0.tar.gz
external_llvm-250bfb1745fd72615b618e3c8748321a104d80d0.tar.bz2
external_llvm-250bfb1745fd72615b618e3c8748321a104d80d0.zip
Remove the LLVM specific archive index.
Archive files (.a) can have a symbol table indicating which object files in them define which symbols. The purpose of this symbol table is to speed up linking by allowing the linker the read only the .o files it is actually going to use instead of having to parse every object's symbol table. LLVM's archive library currently supports a LLVM specific format for such table. It is hard to see any value in that now that llvm-ld is gone: * System linkers don't use it: GNU ar uses the same plugin as the linker to create archive files with a regular index. The OS X ar creates no symbol table for IL files, I assume the linker just parses all IL files. * It doesn't interact well with archives having both IL and native objects. * We probably don't want to be responsible for yet another archive format variant. This patch then: * Removes support for creating and reading such index from lib/Archive. * Remove llvm-ranlib, since there is nothing left for it to do. We should in the future add support for regular indexes to llvm-ar for both native and IL objects. When we do that, llvm-ranlib should be reimplemented as a symlink to llvm-ar, as it is equivalent to "ar s". git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184019 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Archive/ArchiveWriter.cpp')
-rw-r--r--lib/Archive/ArchiveWriter.cpp60
1 files changed, 0 insertions, 60 deletions
diff --git a/lib/Archive/ArchiveWriter.cpp b/lib/Archive/ArchiveWriter.cpp
index 695ee76109..97b34e616e 100644
--- a/lib/Archive/ArchiveWriter.cpp
+++ b/lib/Archive/ArchiveWriter.cpp
@@ -113,8 +113,6 @@ Archive::fillHeader(const ArchiveMember &mbr, ArchiveMemberHeader& hdr,
memcpy(hdr.name,ARFILE_SVR4_SYMTAB_NAME,16);
} else if (mbr.isBSD4SymbolTable()) {
memcpy(hdr.name,ARFILE_BSD4_SYMTAB_NAME,16);
- } else if (mbr.isLLVMSymbolTable()) {
- memcpy(hdr.name,ARFILE_LLVM_SYMTAB_NAME,16);
} else if (TruncateNames) {
const char* nm = mbrPath.c_str();
unsigned len = mbrPath.length();
@@ -289,61 +287,6 @@ Archive::writeMember(
return false;
}
-// Write out the LLVM symbol table as an archive member to the file.
-void
-Archive::writeSymbolTable(std::ofstream& ARFile) {
-
- // Construct the symbol table's header
- ArchiveMemberHeader Hdr;
- Hdr.init();
- memcpy(Hdr.name,ARFILE_LLVM_SYMTAB_NAME,16);
- uint64_t secondsSinceEpoch = sys::TimeValue::now().toEpochTime();
- char buffer[32];
- sprintf(buffer, "%-8o", 0644);
- memcpy(Hdr.mode,buffer,8);
- sprintf(buffer, "%-6u", sys::Process::GetCurrentUserId());
- memcpy(Hdr.uid,buffer,6);
- sprintf(buffer, "%-6u", sys::Process::GetCurrentGroupId());
- memcpy(Hdr.gid,buffer,6);
- sprintf(buffer,"%-12u", unsigned(secondsSinceEpoch));
- memcpy(Hdr.date,buffer,12);
- sprintf(buffer,"%-10u",symTabSize);
- memcpy(Hdr.size,buffer,10);
-
- // Write the header
- ARFile.write((char*)&Hdr, sizeof(Hdr));
-
-#ifndef NDEBUG
- // Save the starting position of the symbol tables data content.
- unsigned startpos = ARFile.tellp();
-#endif
-
- // Write out the symbols sequentially
- for ( Archive::SymTabType::iterator I = symTab.begin(), E = symTab.end();
- I != E; ++I)
- {
- // Write out the file index
- writeInteger(I->second, ARFile);
- // Write out the length of the symbol
- writeInteger(I->first.length(), ARFile);
- // Write out the symbol
- ARFile.write(I->first.data(), I->first.length());
- }
-
-#ifndef NDEBUG
- // Now that we're done with the symbol table, get the ending file position
- unsigned endpos = ARFile.tellp();
-#endif
-
- // Make sure that the amount we wrote is what we pre-computed. This is
- // critical for file integrity purposes.
- assert(endpos - startpos == symTabSize && "Invalid symTabSize computation");
-
- // Make sure the symbol table is even sized
- if (symTabSize % 2 != 0 )
- ARFile << ARFILE_PAD;
-}
-
// Write the entire archive to the file specified when the archive was created.
// This writes to a temporary file first. Options are for creating a symbol
// table, flattening the file names (no directories, 15 chars max) and
@@ -453,9 +396,6 @@ Archive::writeToDisk(bool CreateSymbolTable, bool TruncateNames,
}
}
- // Put out the LLVM symbol table now.
- writeSymbolTable(FinalFile);
-
// Copy the temporary file contents being sure to skip the file's magic
// number.
FinalFile.write(base + sizeof(ARFILE_MAGIC)-1,