MC/ELF: Allow null values in virtual sections, ELF doesn't use special

directives for putting contents in .bss, for example.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111376 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar
2010-08-18 18:22:37 +00:00
parent 6b63037306
commit c983b20661
3 changed files with 29 additions and 1 deletions

View File

@@ -628,8 +628,23 @@ void MCAssembler::WriteSectionData(const MCSectionData *SD,
switch (it->getKind()) {
default:
assert(0 && "Invalid fragment in virtual section!");
case MCFragment::FT_Data: {
// Check that we aren't trying to write a non-zero contents (or fixups)
// into a virtual section. This is to support clients which use standard
// directives to fill the contents of virtual sections.
MCDataFragment &DF = cast<MCDataFragment>(*it);
assert(DF.fixup_begin() == DF.fixup_end() &&
"Cannot have fixups in virtual section!");
for (unsigned i = 0, e = DF.getContents().size(); i != e; ++i)
assert(DF.getContents()[i] == 0 &&
"Invalid data value for virtual section!");
break;
}
case MCFragment::FT_Align:
assert(!cast<MCAlignFragment>(it)->getValueSize() &&
// Check that we aren't trying to write a non-zero value into a virtual
// section.
assert((!cast<MCAlignFragment>(it)->getValueSize() ||
!cast<MCAlignFragment>(it)->getValue()) &&
"Invalid align in virtual section!");
break;
case MCFragment::FT_Fill: