summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorragmani <ragmani0216@gmail.com>2017-04-05 19:00:04 +0900
committerJan Vorlicek <janvorli@microsoft.com>2017-04-05 12:00:04 +0200
commitc7241a9c7af7b2076d6876c0b747f6d7144ac347 (patch)
treea65a3933bdd9f9dd1358d2840eb1998398b67a6f
parenta5fef2172ad19d4c58e67c9e5bee10d247cd8929 (diff)
downloadcoreclr-c7241a9c7af7b2076d6876c0b747f6d7144ac347.tar.gz
coreclr-c7241a9c7af7b2076d6876c0b747f6d7144ac347.tar.bz2
coreclr-c7241a9c7af7b2076d6876c0b747f6d7144ac347.zip
[x86/Linux] add three functions for _X86_TARGET_ (#10378)
* [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).
-rw-r--r--src/inc/daccess.h4
-rw-r--r--src/vm/codeman.cpp7
-rw-r--r--src/zap/zapcode.cpp24
3 files changed, 35 insertions, 0 deletions
diff --git a/src/inc/daccess.h b/src/inc/daccess.h
index 8ca9587a4c..7d82e86cb9 100644
--- a/src/inc/daccess.h
+++ b/src/inc/daccess.h
@@ -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;
diff --git a/src/vm/codeman.cpp b/src/vm/codeman.cpp
index ad4c5196b1..c2632f7f8a 100644
--- a/src/vm/codeman.cpp
+++ b/src/vm/codeman.cpp
@@ -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
diff --git a/src/zap/zapcode.cpp b/src/zap/zapcode.cpp
index e54e884bc2..ead385d5e0 100644
--- a/src/zap/zapcode.cpp
+++ b/src/zap/zapcode.cpp
@@ -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()