summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/StringTableBuilder.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-10-06 17:05:19 +0000
committerHans Wennborg <hans@hanshq.net>2014-10-06 17:05:19 +0000
commit1b1a399489f7b1d376f0e3073afbd67733d3c759 (patch)
treee9ee5b2e60fed4c7a2d24327e186656092185b4b /llvm/lib/MC/StringTableBuilder.cpp
parent116033303b5c48611df5dd2d0a9762804ee6e16f (diff)
downloadbcm5719-llvm-1b1a399489f7b1d376f0e3073afbd67733d3c759.tar.gz
bcm5719-llvm-1b1a399489f7b1d376f0e3073afbd67733d3c759.zip
MachObjectWriter: optimize the string table for common suffices
This is a follow-up to r207670 (ELF) and r218636 (COFF). Differential Revision: http://reviews.llvm.org/D5622 llvm-svn: 219126
Diffstat (limited to 'llvm/lib/MC/StringTableBuilder.cpp')
-rw-r--r--llvm/lib/MC/StringTableBuilder.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/llvm/lib/MC/StringTableBuilder.cpp b/llvm/lib/MC/StringTableBuilder.cpp
index 34e7e6fdfbb..9de9363611e 100644
--- a/llvm/lib/MC/StringTableBuilder.cpp
+++ b/llvm/lib/MC/StringTableBuilder.cpp
@@ -36,12 +36,16 @@ void StringTableBuilder::finalize(Kind kind) {
std::sort(Strings.begin(), Strings.end(), compareBySuffix);
- if (kind == ELF) {
+ switch (kind) {
+ case ELF:
+ case MachO:
// Start the table with a NUL byte.
StringTable += '\x00';
- } else if (kind == WinCOFF) {
+ break;
+ case WinCOFF:
// Make room to write the table size later.
StringTable.append(4, '\x00');
+ break;
}
StringRef Previous;
@@ -60,11 +64,21 @@ void StringTableBuilder::finalize(Kind kind) {
Previous = s;
}
- if (kind == WinCOFF) {
+ switch (kind) {
+ case ELF:
+ break;
+ case MachO:
+ // Pad to multiple of 4.
+ while (StringTable.size() % 4)
+ StringTable += '\x00';
+ break;
+ case WinCOFF:
+ // Write the table size in the first word.
assert(StringTable.size() <= std::numeric_limits<uint32_t>::max());
uint32_t size = static_cast<uint32_t>(StringTable.size());
support::endian::write<uint32_t, support::little, support::unaligned>(
StringTable.data(), size);
+ break;
}
}
OpenPOWER on IntegriCloud