25 for (std::vector<MCWin64EHInstruction>::const_iterator
I = instArray.begin(),
26 E = instArray.end();
I != E; ++
I) {
27 switch (
I->getOperation()) {
43 if (
I->getSize() > 512*1024-8)
78 if (inst.
getSize() > 512*1024-8) {
91 b2 |= (((inst.
getSize()-8) >> 3) & 0x0F) << 4;
166 uint8_t flags = 0x01;
196 for (uint8_t c = 0; c < numInst; ++c) {
217 else if (numCodes == 0) {
229 if ((COFFSection = dyn_cast<MCSectionCOFF>(section))) {
231 size_t dollar = name.
find(
'$');
232 size_t dot = name.
find(
'.', 1);
236 return name.
substr(dollar);
239 return name.
substr(dollar);
250 COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
251 COFF::IMAGE_SCN_MEM_READ,
260 COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
261 COFF::IMAGE_SCN_MEM_READ,
const MCSymbol * ExceptionHandler
const MCSymbol * Function
const MCSection * getPDataSection() const
size_t find(char C, size_t From=0) const
static SectionKind getDataRel()
StringRef substr(size_t Start, size_t N=npos) const
const_iterator begin(StringRef path)
Get begin iterator over path.
static void EmitUnwindInfo(MCStreamer &streamer, MCWin64EHUnwindInfo *info)
MCSectionCOFF - This represents a section on Windows.
static void EmitRuntimeFunction(MCStreamer &streamer, const MCWin64EHUnwindInfo *info)
const MCSection * getXDataSection() const
MCSymbol * CreateTempSymbol()
const MCSection & getSection() const
static void EmitSymbolRefWithOfs(MCStreamer &streamer, const MCSymbol *Base, const MCSymbol *Other)
static const MCSection * getWin64EHTableSection(StringRef suffix, MCContext &context)
MCContext & getContext() const
static const MCBinaryExpr * CreateSub(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
void SwitchSection(const MCSection *Section, const MCExpr *Subsection=0)
unsigned getRegister() const
std::vector< MCWin64EHInstruction > Instructions
bool isPushCodeFrame() const
static void Emit(MCStreamer &streamer)
MCWin64EHUnwindInfo & getW64UnwindInfo(unsigned i)
virtual void EmitIntValue(uint64_t Value, unsigned Size)
void EmitValue(const MCExpr *Value, unsigned Size)
static const MCSymbolRefExpr * Create(const MCSymbol *Symbol, MCContext &Ctx)
static const MCSection * getWin64EHFuncTableSection(StringRef suffix, MCContext &context)
unsigned getNumW64UnwindInfos()
static uint8_t CountOfUnwindCodes(std::vector< MCWin64EHInstruction > &instArray)
OpType getOperation() const
static StringRef GetSectionSuffix(const MCSymbol *func)
virtual void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value=0, unsigned ValueSize=1, unsigned MaxBytesToEmit=0)=0
const MCSectionCOFF * getCOFFSection(StringRef Section, unsigned Characteristics, SectionKind Kind, int Selection=0, const MCSectionCOFF *Assoc=0)
static void EmitUnwindCode(MCStreamer &streamer, MCSymbol *begin, MCWin64EHInstruction &inst)
virtual void EmitLabel(MCSymbol *Symbol)
StringRef getSectionName() const
static void EmitAbsDifference(MCStreamer &streamer, MCSymbol *lhs, MCSymbol *rhs)
MCWin64EHUnwindInfo * ChainedParent
static const MCBinaryExpr * CreateAdd(const MCExpr *LHS, const MCExpr *RHS, MCContext &Ctx)
void EmitAbsValue(const MCExpr *Value, unsigned Size)
unsigned getOffset() const
const MCObjectFileInfo * getObjectFileInfo() const
static void EmitUnwindInfo(MCStreamer &streamer, MCWin64EHUnwindInfo *info)
MCSymbol * getLabel() const