diff --git a/src/coreclr/minipal/Unix/doublemapping.cpp b/src/coreclr/minipal/Unix/doublemapping.cpp index 3de865c372f92d..67d516fb322a56 100644 --- a/src/coreclr/minipal/Unix/doublemapping.cpp +++ b/src/coreclr/minipal/Unix/doublemapping.cpp @@ -22,7 +22,11 @@ #include "minipal.h" #include "minipal/cpufeatures.h" -#ifndef TARGET_OSX +#ifdef TARGET_OSX + +#include + +#else // TARGET_OSX #ifdef TARGET_64BIT static const off_t MaxDoubleMappedSize = 2048ULL*1024*1024*1024; @@ -34,9 +38,9 @@ static const off_t MaxDoubleMappedSize = UINT_MAX; bool VMToOSInterface::CreateDoubleMemoryMapper(void** pHandle, size_t *pMaxExecutableCodeSize) { - if (minipal_detect_emulation()) + if (minipal_detect_rosetta()) { - // Rosetta or QEMU doesn't support double mapping correctly + // Rosetta doesn't support double mapping correctly return false; } diff --git a/src/coreclr/minipal/Windows/doublemapping.cpp b/src/coreclr/minipal/Windows/doublemapping.cpp index 57d36b434d858d..9bde3dc86d8b52 100644 --- a/src/coreclr/minipal/Windows/doublemapping.cpp +++ b/src/coreclr/minipal/Windows/doublemapping.cpp @@ -61,9 +61,9 @@ inline void *GetBotMemoryAddress(void) bool VMToOSInterface::CreateDoubleMemoryMapper(void **pHandle, size_t *pMaxExecutableCodeSize) { - if (minipal_detect_emulation()) + if (minipal_detect_rosetta()) { - // Rosetta or QEMU doesn't support double mapping correctly + // Rosetta doesn't support double mapping correctly return false; } diff --git a/src/coreclr/vm/amd64/asmhelpers.S b/src/coreclr/vm/amd64/asmhelpers.S index 77d0f5bcb4fb7c..8d83938246a2c9 100644 --- a/src/coreclr/vm/amd64/asmhelpers.S +++ b/src/coreclr/vm/amd64/asmhelpers.S @@ -311,14 +311,3 @@ LEAF_ENTRY GetTlsIndexObjectDescOffset, _TEXT int 3 LEAF_END GetTlsIndexObjectDescOffset, _TEXT #endif - -# These functions are used to verify that double mapping used to implement W^X works. -LEAF_ENTRY VerifyDoubleMapping1, _TEXT - mov rax, 1 - ret -LEAF_END_MARKED VerifyDoubleMapping1, _TEXT - -LEAF_ENTRY VerifyDoubleMapping2, _TEXT - mov rax, 2 - ret -LEAF_END_MARKED VerifyDoubleMapping2, _TEXT diff --git a/src/native/minipal/cpufeatures.c b/src/native/minipal/cpufeatures.c index e03a65b5e09474..be6a8b2929a05a 100644 --- a/src/native/minipal/cpufeatures.c +++ b/src/native/minipal/cpufeatures.c @@ -476,7 +476,8 @@ int minipal_getcpufeatures(void) return result; } -bool minipal_detect_emulation(void) +// Detect if the current process is running under the Apple Rosetta x64 emulator +bool minipal_detect_rosetta(void) { #ifdef HOST_AMD64 // Check for CPU brand indicating emulation @@ -499,25 +500,11 @@ bool minipal_detect_emulation(void) brand[sizeof(brand) - 1] = '\0'; // Check if CPU brand indicates emulation - if (strstr(brand, "VirtualApple") != NULL || strstr(brand, "QEMU") != NULL) + if (strstr(brand, "VirtualApple") != NULL) { return true; } #endif - // Check for process name of PID 1 indicating emulation - char cmdline[256]; - FILE *cmdline_file = fopen("/proc/1/cmdline", "r"); - if (cmdline_file != NULL) - { - fgets(cmdline, sizeof(cmdline), cmdline_file); - fclose(cmdline_file); - - if (strstr(cmdline, "qemu") != NULL || strstr(cmdline, "rosetta") != NULL) - { - return true; - } - } - return false; } diff --git a/src/native/minipal/cpufeatures.h b/src/native/minipal/cpufeatures.h index 57e30b5d15439d..472ce178339613 100644 --- a/src/native/minipal/cpufeatures.h +++ b/src/native/minipal/cpufeatures.h @@ -77,7 +77,7 @@ extern "C" #endif // __cplusplus int minipal_getcpufeatures(void); -bool minipal_detect_emulation(void); +bool minipal_detect_rosetta(void); #ifdef __cplusplus }