예제 #1
0
MCDataFragment *MCObjectStreamer::getOrCreateDataFragment() const {
  MCDataFragment *F = dyn_cast_or_null<MCDataFragment>(getCurrentFragment());
  // When bundling is enabled, we don't want to add data to a fragment that
  // already has instructions (see MCELFStreamer::EmitInstToData for details)
  if (!F || (Assembler->isBundlingEnabled() && F->hasInstructions())) {
    F = new MCDataFragment();
    insert(F);
  }
  return F;
}
예제 #2
0
static bool CanReuseDataFragment(const MCDataFragment &F,
                                 const MCAssembler &Assembler,
                                 const MCSubtargetInfo *STI) {
  if (!F.hasInstructions())
    return true;
  // When bundling is enabled, we don't want to add data to a fragment that
  // already has instructions (see MCELFStreamer::EmitInstToData for details)
  if (Assembler.isBundlingEnabled())
    return Assembler.getRelaxAll();
  // If the subtarget is changed mid fragment we start a new fragment to record
  // the new STI.
  return !STI || F.getSubtargetInfo() == STI;
}
예제 #3
0
MCDataFragment *MCObjectStreamer::getOrCreateDataFragment() const {
    MCDataFragment *F = dyn_cast_or_null<MCDataFragment>(getCurrentFragment());
    // When bundling is enabled, we don't want to add data to a fragment that
    // already has instructions (see MCELFStreamer::EmitInstToData for details)
    if (!F || (Assembler->isBundlingEnabled() && F->hasInstructions())) {
        const auto *Sec = dyn_cast<MCSectionELF>(&getCurrentSectionData()->getSection());
        if (Sec && Sec->getSectionName().startswith(".zdebug_"))
            F = new MCCompressedFragment();
        else
            F = new MCDataFragment();
        insert(F);
    }
    return F;
}