[llvm-commits] [llvm] r173120 - in /llvm/trunk: lib/MC/MachObjectWriter.cpp test/MC/MachO/linker-options.ll
Daniel Dunbar
daniel at zuster.org
Mon Jan 21 19:42:50 PST 2013
Author: ddunbar
Date: Mon Jan 21 21:42:49 2013
New Revision: 173120
URL: http://llvm.org/viewvc/llvm-project?rev=173120&view=rev
Log:
[MC/Mach-O] Load commands are supposed to 8-byte aligned on 64-bit.
Modified:
llvm/trunk/lib/MC/MachObjectWriter.cpp
llvm/trunk/test/MC/MachO/linker-options.ll
Modified: llvm/trunk/lib/MC/MachObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MachObjectWriter.cpp?rev=173120&r1=173119&r2=173120&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MachObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/MachObjectWriter.cpp Mon Jan 21 21:42:49 2013
@@ -377,25 +377,25 @@
}
static unsigned ComputeLinkerOptionsLoadCommandSize(
- const std::vector<std::string> &Options)
+ const std::vector<std::string> &Options, bool is64Bit)
{
unsigned Size = sizeof(macho::LinkerOptionsLoadCommand);
for (unsigned i = 0, e = Options.size(); i != e; ++i)
Size += Options[i].size() + 1;
- return RoundUpToAlignment(Size, 4);
+ return RoundUpToAlignment(Size, is64Bit ? 8 : 4);
}
void MachObjectWriter::WriteLinkerOptionsLoadCommand(
const std::vector<std::string> &Options)
{
- unsigned Size = ComputeLinkerOptionsLoadCommandSize(Options);
+ unsigned Size = ComputeLinkerOptionsLoadCommandSize(Options, is64Bit());
uint64_t Start = OS.tell();
(void) Start;
Write32(macho::LCT_LinkerOptions);
Write32(Size);
Write32(Options.size());
- uint64_t BytesWritten = 0;
+ uint64_t BytesWritten = sizeof(macho::LinkerOptionsLoadCommand);
for (unsigned i = 0, e = Options.size(); i != e; ++i) {
// Write each string, including the null byte.
const std::string &Option = Options[i];
@@ -403,8 +403,8 @@
BytesWritten += Option.size() + 1;
}
- // Pad to a multiple of 4.
- WriteBytes("", OffsetToAlignment(BytesWritten, 4));
+ // Pad to a multiple of the pointer size.
+ WriteBytes("", OffsetToAlignment(BytesWritten, is64Bit() ? 8 : 4));
assert(OS.tell() - Start == Size);
}
@@ -747,7 +747,8 @@
Asm.getLinkerOptions();
for (unsigned i = 0, e = LinkerOptions.size(); i != e; ++i) {
++NumLoadCommands;
- LoadCommandsSize += ComputeLinkerOptionsLoadCommandSize(LinkerOptions[i]);
+ LoadCommandsSize += ComputeLinkerOptionsLoadCommandSize(LinkerOptions[i],
+ is64Bit());
}
// Compute the total size of the section data, as well as its file size and vm
Modified: llvm/trunk/test/MC/MachO/linker-options.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/linker-options.ll?rev=173120&r1=173119&r2=173120&view=diff
==============================================================================
--- llvm/trunk/test/MC/MachO/linker-options.ll (original)
+++ llvm/trunk/test/MC/MachO/linker-options.ll Mon Jan 21 21:42:49 2013
@@ -24,12 +24,20 @@
; CHECK-OBJ: "-framework",
; CHECK-OBJ: "Cocoa",
; CHECK-OBJ: ])
+; CHECK-OBJ: # Load Command 3
+; CHECK-OBJ: (('command', 45)
+; CHECK-OBJ: ('size', 24)
+; CHECK-OBJ: ('count', 1)
+; CHECK-OBJ: ('_strings', [
+; CHECK-OBJ: "-lmath",
+; CHECK-OBJ: ])
; CHECK-OBJ: ),
; CHECK-OBJ: ])
!0 = metadata !{ i32 6, metadata !"Linker Options",
metadata !{
metadata !{ metadata !"-lz" },
- metadata !{ metadata !"-framework", metadata !"Cocoa" } } }
+ metadata !{ metadata !"-framework", metadata !"Cocoa" },
+ metadata !{ metadata !"-lmath" } } }
!llvm.module.flags = !{ !0 }
More information about the llvm-commits
mailing list