- MCAssembler Assembler;
- MCSectionData *CurSectionData;
-
- /// Track the current atom for each section.
- DenseMap<const MCSectionData*, MCSymbolData*> CurrentAtomMap;
-
-private:
- MCFragment *getCurrentFragment() const {
- assert(CurSectionData && "No current section!");
-
- if (!CurSectionData->empty())
- return &CurSectionData->getFragmentList().back();
-
- return 0;
- }
-
- /// Get a data fragment to write into, creating a new one if the current
- /// fragment is not a data fragment.
- MCDataFragment *getOrCreateDataFragment() const {
- MCDataFragment *F = dyn_cast_or_null<MCDataFragment>(getCurrentFragment());
- if (!F)
- F = createDataFragment();
- return F;
- }
-
- /// Create a new data fragment in the current section.
- MCDataFragment *createDataFragment() const {
- MCDataFragment *DF = new MCDataFragment(CurSectionData);
- DF->setAtom(CurrentAtomMap.lookup(CurSectionData));
- return DF;
- }
-
- void EmitInstToFragment(const MCInst &Inst);
- void EmitInstToData(const MCInst &Inst);