Fix build issues with headers, which I discovered by actually using them.
authorCharles Davis <cdavis@mines.edu>
Thu, 19 May 2011 02:47:23 +0000 (02:47 +0000)
committerCharles Davis <cdavis@mines.edu>
Thu, 19 May 2011 02:47:23 +0000 (02:47 +0000)
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

include/llvm/MC/MCWin64EH.h
include/llvm/Support/Win64EH.h

index 7495e4fd0e8427c1564c98f9ebf84e59579147e9..b7513c8867a10c0f0cd68df3e2d66fc0d47eab6a 100644 (file)
@@ -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;
index f989364e06fb796041b9e4f63777e07eb0a3bc52..17d416fe0e7d05aea510e0bdb7de68322a6f5617 100644 (file)
@@ -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