summaryrefslogtreecommitdiff
path: root/src/coreclr
diff options
context:
space:
mode:
authorhqueue <hqueue@users.noreply.github.com>2016-08-12 01:21:41 +0900
committerJan Kotas <jkotas@microsoft.com>2016-08-11 09:21:41 -0700
commitc52e05abd98c299e7f65979f65e541e9d76cd4d2 (patch)
tree5ba97663509b619f00bb2be742ce2dd48717b3d9 /src/coreclr
parent7a84ab0f876d25464d1493c2d02de45da6f9da7e (diff)
downloadcoreclr-c52e05abd98c299e7f65979f65e541e9d76cd4d2.tar.gz
coreclr-c52e05abd98c299e7f65979f65e541e9d76cd4d2.tar.bz2
coreclr-c52e05abd98c299e7f65979f65e541e9d76cd4d2.zip
ARM: disable stack unwinding using DWARF (#6700)
libunwind for ARM does not interpret ARM vfpv3/NEON registers in DWARF format correctly. Signed-off-by: Hyung-Kyu Choi <hk0110.choi@samsung.com>
Diffstat (limited to 'src/coreclr')
-rw-r--r--src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp b/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp
index b4c54ca6e3..e3f7809124 100644
--- a/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp
+++ b/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp
@@ -285,6 +285,20 @@ int ExecuteManagedAssembly(
// Indicates failure
int exitCode = -1;
+#ifdef _TARGET_ARM_
+ // libunwind library is used to unwind stack frame, but libunwind for ARM
+ // does not support ARM vfpv3/NEON registers in DWARF format correctly.
+ // Therefore let's disable stack unwinding using DWARF information
+ // See https://github.com/dotnet/coreclr/issues/6698
+ //
+ // libunwind use following methods to unwind stack frame.
+ // UNW_ARM_METHOD_ALL 0xFF
+ // UNW_ARM_METHOD_DWARF 0x01
+ // UNW_ARM_METHOD_FRAME 0x02
+ // UNW_ARM_METHOD_EXIDX 0x04
+ putenv(const_cast<char *>("UNW_ARM_UNWIND_METHOD=6"));
+#endif // _TARGET_ARM_
+
std::string coreClrDllPath(clrFilesAbsolutePath);
coreClrDllPath.append("/");
coreClrDllPath.append(coreClrDll);