summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-05-12 22:51:27 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-05-12 22:51:27 +0000
commit51402b79e4126de9249a02dcb9bb00286cc4bea1 (patch)
tree34312684cfc10e7de2c2d8f9239b9805a03a562c
parente132b0a92cdcd6648eab6b1116e00438f8d15e2b (diff)
downloadbcm5719-llvm-51402b79e4126de9249a02dcb9bb00286cc4bea1.tar.gz
bcm5719-llvm-51402b79e4126de9249a02dcb9bb00286cc4bea1.zip
MC: Drop support for alignment in ZeroFill fragment, we can just use
MCAlignFragments for this. llvm-svn: 103661
-rw-r--r--llvm/include/llvm/MC/MCAssembler.h10
-rw-r--r--llvm/lib/MC/MCAssembler.cpp15
-rw-r--r--llvm/lib/MC/MCMachOStreamer.cpp7
3 files changed, 12 insertions, 20 deletions
diff --git a/llvm/include/llvm/MC/MCAssembler.h b/llvm/include/llvm/MC/MCAssembler.h
index 8bd67342009..ddf4ec95899 100644
--- a/llvm/include/llvm/MC/MCAssembler.h
+++ b/llvm/include/llvm/MC/MCAssembler.h
@@ -359,21 +359,15 @@ class MCZeroFillFragment : public MCFragment {
/// Size - The size of this fragment.
uint64_t Size;
- /// Alignment - The alignment for this fragment.
- unsigned Alignment;
-
public:
- MCZeroFillFragment(uint64_t _Size, unsigned _Alignment, MCSectionData *SD = 0)
- : MCFragment(FT_ZeroFill, SD),
- Size(_Size), Alignment(_Alignment) {}
+ MCZeroFillFragment(uint64_t _Size, MCSectionData *SD = 0)
+ : MCFragment(FT_ZeroFill, SD), Size(_Size) {}
/// @name Accessors
/// @{
uint64_t getSize() const { return Size; }
- unsigned getAlignment() const { return Alignment; }
-
/// @}
static bool classof(const MCFragment *F) {
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 7bcce2e7e34..fbda26b4ce8 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -421,16 +421,7 @@ void MCAssembler::LayoutFragment(MCAsmLayout &Layout, MCFragment &F) {
}
case MCFragment::FT_ZeroFill: {
- MCZeroFillFragment &ZFF = cast<MCZeroFillFragment>(F);
-
- // Align the fragment offset; it is safe to adjust the offset freely since
- // this is only in virtual sections.
- //
- // FIXME: We shouldn't be doing this here.
- Address = RoundUpToAlignment(Address, ZFF.getAlignment());
- Layout.setFragmentOffset(&F, Address - StartAddress);
-
- EffectiveSize = ZFF.getSize();
+ EffectiveSize = cast<MCZeroFillFragment>(F).getSize();
break;
}
}
@@ -498,6 +489,8 @@ static void WriteFragmentData(const MCAssembler &Asm, const MCAsmLayout &Layout,
MCAlignFragment &AF = cast<MCAlignFragment>(F);
uint64_t Count = FragmentSize / AF.getValueSize();
+ assert(AF.getValueSize() && "Invalid virtual align in concrete fragment!");
+
// FIXME: This error shouldn't actually occur (the front end should emit
// multiple .align directives to enforce the semantics it wants), but is
// severe enough that we want to report it. How to handle this?
@@ -912,7 +905,7 @@ void MCZeroFillFragment::dump() {
OS << "<MCZeroFillFragment ";
this->MCFragment::dump();
OS << "\n ";
- OS << " Size:" << getSize() << " Alignment:" << getAlignment() << ">";
+ OS << " Size:" << getSize() << ">";
}
void MCSectionData::dump() {
diff --git a/llvm/lib/MC/MCMachOStreamer.cpp b/llvm/lib/MC/MCMachOStreamer.cpp
index ad6ce79ff33..eb49a40707d 100644
--- a/llvm/lib/MC/MCMachOStreamer.cpp
+++ b/llvm/lib/MC/MCMachOStreamer.cpp
@@ -321,7 +321,12 @@ void MCMachOStreamer::EmitZerofill(const MCSection *Section, MCSymbol *Symbol,
MCSymbolData &SD = Assembler.getOrCreateSymbolData(*Symbol);
- MCFragment *F = new MCZeroFillFragment(Size, ByteAlignment, &SectData);
+ // Emit an align fragment if necessary.
+ if (ByteAlignment != 1)
+ new MCAlignFragment(ByteAlignment, 0, 0, ByteAlignment, /*EmitNops=*/false,
+ &SectData);
+
+ MCFragment *F = new MCZeroFillFragment(Size, &SectData);
SD.setFragment(F);
if (Assembler.isSymbolLinkerVisible(&SD))
F->setAtom(&SD);
OpenPOWER on IntegriCloud