[x86/Linux] add three functions for _X86_TARGET_ (#10378)
authorragmani <ragmani0216@gmail.com>
Wed, 5 Apr 2017 10:00:04 +0000 (19:00 +0900)
committerJan Vorlicek <janvorli@microsoft.com>
Wed, 5 Apr 2017 10:00:04 +0000 (12:00 +0200)
* [x86/Linux] add three functions for _X86_TARGET_

There is no functions for _X86_TARGET_.
  - ZapUnwindData::GetAlignment()
  - DWORD ZapUnwindData::GetSize()
  - void ZapUnwindData::Save(ZapWriter * pZapWriter)

* [x86/Linux] remove personality routine on x86/linux.

remove creating personaly routine when assemblies is generated to ni.
add a function for getting size of UnwindDataBlob on x86/linux.

Signed-off-by: ragmani <ragmani0216@gmail.com>
* [x86/Linux] correct the unclearly fixed parts.

change Unwindinfo's size from sizeof(ULONG) to sizeof(UNWIND_INFO).
change Unwindinfo's alignment from sizeof(DWORD) to sizeof(BYTE).
remove unnecessary code.

* [x86/Linux] change alignment from sizeof(BYTE) to sizeof(DWORD).

src/inc/daccess.h
src/vm/codeman.cpp
src/zap/zapcode.cpp

index 8ca9587..7d82e86 100644 (file)
@@ -2393,6 +2393,10 @@ typedef DPTR(IMAGE_TLS_DIRECTORY)   PTR_IMAGE_TLS_DIRECTORY;
 #include <xclrdata.h>
 #endif
 
+#if defined(_TARGET_X86_) && defined(FEATURE_PAL)
+typedef DPTR(struct _UNWIND_INFO)      PTR_UNWIND_INFO;
+#endif
+
 #ifdef _WIN64
 typedef DPTR(T_RUNTIME_FUNCTION) PTR_RUNTIME_FUNCTION;
 typedef DPTR(struct _UNWIND_INFO)      PTR_UNWIND_INFO;
index ad4c519..c2632f7 100644 (file)
@@ -985,6 +985,13 @@ PTR_VOID GetUnwindDataBlob(TADDR moduleBase, PTR_RUNTIME_FUNCTION pRuntimeFuncti
 
     return pUnwindInfo;
 
+#elif defined(_TARGET_X86_) && defined(FEATURE_PAL)
+    PTR_UNWIND_INFO pUnwindInfo(dac_cast<PTR_UNWIND_INFO>(moduleBase + RUNTIME_FUNCTION__GetUnwindInfoAddress(pRuntimeFunction)));
+
+    *pSize = ALIGN_UP(sizeof(UNWIND_INFO), sizeof(DWORD));
+
+    return pUnwindInfo;
+
 #elif defined(_TARGET_ARM_)
 
     // if this function uses packed unwind data then at least one of the two least significant bits
index e54e884..ead385d 100644 (file)
@@ -1202,6 +1202,30 @@ void ZapUnwindData::Save(ZapWriter * pZapWriter)
 #endif //REDHAWK
 }
 
+#elif defined(_TARGET_X86_) && defined(FEATURE_PAL)
+
+UINT ZapUnwindData::GetAlignment()
+{
+    return sizeof(BYTE);
+}
+
+DWORD ZapUnwindData::GetSize()
+{
+    DWORD dwSize = ZapBlob::GetSize();
+
+    return dwSize;
+}
+
+void ZapUnwindData::Save(ZapWriter * pZapWriter)
+{
+    ZapImage * pImage = ZapImage::GetImage(pZapWriter);
+
+    PVOID pData = GetData();
+    DWORD dwSize = GetBlobSize();
+
+    pZapWriter->Write(pData, dwSize);
+}
+
 #elif defined(_TARGET_ARM_) || defined(_TARGET_ARM64_)
 
 UINT ZapUnwindData::GetAlignment()