diff options
author | ragmani <ragmani0216@gmail.com> | 2017-04-05 19:00:04 +0900 |
---|---|---|
committer | Jan Vorlicek <janvorli@microsoft.com> | 2017-04-05 12:00:04 +0200 |
commit | c7241a9c7af7b2076d6876c0b747f6d7144ac347 (patch) | |
tree | a65a3933bdd9f9dd1358d2840eb1998398b67a6f | |
parent | a5fef2172ad19d4c58e67c9e5bee10d247cd8929 (diff) | |
download | coreclr-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.h | 4 | ||||
-rw-r--r-- | src/vm/codeman.cpp | 7 | ||||
-rw-r--r-- | src/zap/zapcode.cpp | 24 |
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() |