MC/Macho-O: Align the zerofill section itself to the maximum alignment.

llvm-svn: 97991
This commit is contained in:
Daniel Dunbar 2010-03-08 22:03:42 +00:00
parent 8119fe87d8
commit 3a3f472cb4
3 changed files with 26 additions and 1 deletions

View File

@ -1279,9 +1279,19 @@ void MCAssembler::Finish() {
if (!isVirtualSection(SD.getSection()))
continue;
// Align this section if necessary by adding padding bytes to the previous
// section.
if (uint64_t Pad = OffsetToAlignment(Address, it->getAlignment())) {
assert(Prev && "Missing prev section!");
Prev->setFileSize(Prev->getFileSize() + Pad);
Address += Pad;
}
SD.setAddress(Address);
LayoutSection(SD);
Address += SD.getSize();
Prev = &SD;
}
DEBUG_WITH_TYPE("mc-dump", {

View File

@ -1,4 +1,4 @@
// RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | macho-dump --dump-section-data | FileCheck %s
// RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | macho-dump | FileCheck %s
.zerofill __DATA,__bss,_fill0,1,0
.zerofill __DATA,__bss,_a,4,2

View File

@ -0,0 +1,15 @@
// RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | macho-dump | FileCheck %s
//
// Check that the section itself is aligned.
.byte 0
.zerofill __DATA,__bss,_a,1,0
.zerofill __DATA,__bss,_b,4,4
// CHECK: # Symbol 0
// CHECK: ('n_value', 16)
// CHECK: ('_string', '_a')
// CHECK: # Symbol 1
// CHECK: ('n_value', 32)
// CHECK: ('_string', '_b')