mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Fix build issues with headers, which I discovered by actually using them.
Also, convert all the inline functions on UnwindInfo into methods. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131622 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cf227d5ad9
commit
fa89218a43
@ -33,12 +33,12 @@ namespace llvm {
|
||||
MachineLocation Source;
|
||||
public:
|
||||
MCWin64EHInstruction(OpType Op, unsigned Register)
|
||||
: Operation(Op), Offset(0), Destination(0), Source(S) {
|
||||
: Operation(Op), Offset(0), Destination(0), Source(Register) {
|
||||
assert(Op == Win64EH::UOP_PushNonVol);
|
||||
}
|
||||
MCWin64EHInstruction(unsigned Size)
|
||||
: Operation(Size>128 ? Win64EH::UOP_AllocLarge : Win64EH::UOP_AllocSmall),
|
||||
Offset(size) { }
|
||||
Offset(Size) { }
|
||||
MCWin64EHInstruction(unsigned Register, unsigned Off)
|
||||
: Operation(Win64EH::UOP_SetFPReg), Offset(Off), Destination(Register) { }
|
||||
MCWin64EHInstruction(OpType Op, const MachineLocation &D,
|
||||
@ -64,7 +64,7 @@ namespace llvm {
|
||||
struct MCWin64EHUnwindInfo {
|
||||
MCWin64EHUnwindInfo() : Begin(0), End(0), ExceptionHandler(0), Lsda(0),
|
||||
Function(0), UnwindOnly(false), LsdaSize(0),
|
||||
PrologSize(0), LastFrameInst(-1), Chained(false)
|
||||
PrologSize(0), LastFrameInst(-1), Chained(false),
|
||||
Instructions() {}
|
||||
MCSymbol *Begin;
|
||||
MCSymbol *End;
|
||||
|
@ -40,7 +40,7 @@ union UnwindCode {
|
||||
uint8_t codeOffset;
|
||||
uint8_t unwindOp:4,
|
||||
opInfo:4;
|
||||
};
|
||||
} u;
|
||||
uint16_t frameOffset;
|
||||
};
|
||||
|
||||
@ -56,6 +56,13 @@ enum {
|
||||
UNW_ChainInfo = 0x04
|
||||
};
|
||||
|
||||
/// RuntimeFunction - An entry in the table of functions with unwind info.
|
||||
struct RuntimeFunction {
|
||||
uint64_t startAddress;
|
||||
uint64_t endAddress;
|
||||
uint64_t unwindInfoOffset;
|
||||
};
|
||||
|
||||
/// UnwindInfo - An entry in the exception table.
|
||||
struct UnwindInfo {
|
||||
uint8_t version:3,
|
||||
@ -65,30 +72,25 @@ struct UnwindInfo {
|
||||
uint8_t frameRegister:4,
|
||||
frameOffset:4;
|
||||
UnwindCode unwindCodes[1];
|
||||
|
||||
void *getLanguageSpecificData() {
|
||||
return reinterpret_cast<void *>(&unwindCodes[(numCodes+1) & ~1]);
|
||||
}
|
||||
uint64_t getLanguageSpecificHandlerOffset() {
|
||||
return *reinterpret_cast<uint64_t *>(getLanguageSpecificData());
|
||||
}
|
||||
void setLanguageSpecificHandlerOffset(uint64_t offset) {
|
||||
*reinterpret_cast<uint64_t *>(getLanguageSpecificData()) = offset;
|
||||
}
|
||||
RuntimeFunction *getChainedFunctionEntry() {
|
||||
return reinterpret_cast<RuntimeFunction *>(getLanguageSpecificData());
|
||||
}
|
||||
void *getExceptionData() {
|
||||
return reinterpret_cast<void *>(reinterpret_cast<uint64_t *>(
|
||||
getLanguageSpecificData())+1);
|
||||
}
|
||||
};
|
||||
|
||||
inline UnwindCode &getUnwindCodeEntry(UnwindInfo &info, uint32_t index) {
|
||||
return info.unwindCodes[index];
|
||||
}
|
||||
inline void *getLanguageSpecificData(UnwindInfo &info) {
|
||||
return reinterpret_cast<void *>(&getUnwindCodeEntry(info,info.numCodes+1)&~1);
|
||||
}
|
||||
inline uint64_t getLanguageSpecificHandlerOffset(UnwindInfo &info) {
|
||||
return *reinterpret_cast<uint64_t *>(getLangaugeSpecificData(info));
|
||||
}
|
||||
inline void setLanguageSpecificHandlerOffset(UnwindInfo &info, uint64_t offset){
|
||||
*reinterpret_cast<uint64_t *>(getLanguageSpecificData(info)) = offset;
|
||||
}
|
||||
inline uint64_t getChainedFunctionEntryOffset(UnwindInfo &info) {
|
||||
return *reinterpret_cast<uint64_t *>(getLanguageSpecificData(info));
|
||||
}
|
||||
inline void setChainedFunctionEntryOffset(UnwindInfo &info, uint64_t offset) {
|
||||
*reinterpret_cast<uint64_t *>(getLanguageSpecificData(info)) = offset;
|
||||
}
|
||||
inline void *getExceptionData(UnwindInfo &info) {
|
||||
return reinterpret_cast<void *>(reinterpret_cast<uint64_t *>(
|
||||
getLanguageSpecificData(info))+1);
|
||||
}
|
||||
|
||||
} // End of namespace Win64EH
|
||||
} // End of namespace llvm
|
||||
|
Loading…
Reference in New Issue
Block a user