summaryrefslogtreecommitdiff
path: root/src/vm
diff options
context:
space:
mode:
authorJan Vorlicek <janvorli@microsoft.com>2018-04-06 18:44:02 +0200
committerGitHub <noreply@github.com>2018-04-06 18:44:02 +0200
commit75757bf50bdbbdd2d3101921bbf36400a52543c7 (patch)
treea4329d0bb08ca8904d47466bf47a147824d9b776 /src/vm
parent721343dc84247d54ee5f3365b97b06090dfa8ade (diff)
downloadcoreclr-75757bf50bdbbdd2d3101921bbf36400a52543c7.tar.gz
coreclr-75757bf50bdbbdd2d3101921bbf36400a52543c7.tar.bz2
coreclr-75757bf50bdbbdd2d3101921bbf36400a52543c7.zip
Fix GC stress modes 4 and 8 on Linux ARM (#17456)
There were two problems: * The illegal instruction 0xde01 used for INTERRUPT_INSTR_CALL doesn't generate SIGILL, but SIGTRAP, since this is the code used for breakpoints. * The USE_REDIRECT_FOR_GCSTRESS was defined even for FEATURE_PAL for ARM, which is incorrect and resulted in explicit redirect frame not being created in DoGcStress and thus the GC stack walk was skipping managed frames that it should walk.
Diffstat (limited to 'src/vm')
-rw-r--r--src/vm/arm/cgencpu.h2
-rw-r--r--src/vm/gccover.h2
2 files changed, 3 insertions, 1 deletions
diff --git a/src/vm/arm/cgencpu.h b/src/vm/arm/cgencpu.h
index 53a964f288..7f02b7b090 100644
--- a/src/vm/arm/cgencpu.h
+++ b/src/vm/arm/cgencpu.h
@@ -30,7 +30,9 @@ struct ArgLocDesc;
extern PCODE GetPreStubEntryPoint();
+#ifndef FEATURE_PAL
#define USE_REDIRECT_FOR_GCSTRESS
+#endif // FEATURE_PAL
// CPU-dependent functions
Stub * GenerateInitPInvokeFrameHelper();
diff --git a/src/vm/gccover.h b/src/vm/gccover.h
index b2dedefa31..7835e8c990 100644
--- a/src/vm/gccover.h
+++ b/src/vm/gccover.h
@@ -77,7 +77,7 @@ public:
// 16-bit illegal instructions which will cause exception and cause
// control to go to GcStress codepath
#define INTERRUPT_INSTR 0xde00
-#define INTERRUPT_INSTR_CALL 0xde01
+#define INTERRUPT_INSTR_CALL 0xde03 // 0xde01 generates SIGTRAP (breakpoint) instead of SIGILL on Unix
#define INTERRUPT_INSTR_PROTECT_RET 0xde02
// 32-bit illegal instructions. It is necessary to replace a 16-bit instruction