Add FEATURE_REMOTE_PROC_MEM (#2244)
authorSteve MacLean <Steve.MacLean@microsoft.com>
Tue, 28 Jan 2020 01:10:36 +0000 (20:10 -0500)
committerGitHub <noreply@github.com>
Tue, 28 Jan 2020 01:10:36 +0000 (20:10 -0500)
The /proc/mem filesystem is only available on Linux hosts. Revise #ifdef
to use FEATURE_PROC_MEM to enable disable the use of /proc/mem on the
debug target shim.  Enable only when HOST and target are Unix, but not
Darwin.

src/coreclr/clrdefinitions.cmake
src/coreclr/src/debug/di/shimremotedatatarget.cpp

index a266d29..7047cf9 100644 (file)
@@ -207,6 +207,10 @@ set(FEATURE_READYTORUN 1)
 
 add_compile_definitions($<$<NOT:$<BOOL:$<TARGET_PROPERTY:CROSSGEN_COMPONENT>>>:FEATURE_REJIT>)
 
+if (CLR_CMAKE_HOST_UNIX AND CLR_CMAKE_TARGET_UNIX AND NOT CLR_CMAKE_TARGET_DARWIN)
+  add_definitions(-DFEATURE_REMOTE_PROC_MEM)
+endif (CLR_CMAKE_HOST_UNIX AND CLR_CMAKE_TARGET_UNIX AND NOT CLR_CMAKE_TARGET_DARWIN)
+
 if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_ARCH_ARM64)
     add_definitions(-DFEATURE_STUBS_AS_IL)
 endif ()
index 222ea3d..8e986ae 100644 (file)
@@ -68,7 +68,7 @@ public:
 private:
     DbgTransportTarget  * m_pProxy;
     DbgTransportSession * m_pTransport;
-#ifndef __APPLE__
+#ifdef FEATURE_REMOTE_PROC_MEM
     int m_fd;                           // /proc/<pid>/mem handle
 #endif
 };
@@ -106,7 +106,7 @@ ShimRemoteDataTarget::ShimRemoteDataTarget(DWORD processId,
     m_fpContinueStatusChanged = NULL;
     m_pContinueStatusChangedUserData = NULL;
 
-#ifndef __APPLE__
+#ifdef FEATURE_REMOTE_PROC_MEM
     char memPath[128];
     _snprintf_s(memPath, sizeof(memPath), sizeof(memPath), "/proc/%lu/mem", m_processId);
     m_fd = _open(memPath, 0); // O_RDONLY
@@ -135,7 +135,7 @@ ShimRemoteDataTarget::~ShimRemoteDataTarget()
 
 void ShimRemoteDataTarget::Dispose()
 {
-#ifndef __APPLE__
+#ifdef FEATURE_REMOTE_PROC_MEM
     if (m_fd != -1)
     {
         _close(m_fd);
@@ -269,7 +269,7 @@ ShimRemoteDataTarget::ReadVirtual(
     size_t read = cbRequestSize;
     HRESULT hr = S_OK;
 
-#ifndef __APPLE__
+#ifdef FEATURE_REMOTE_PROC_MEM
     if (m_fd != -1)
     {
         read = _pread(m_fd, pBuffer, cbRequestSize, (ULONG64)address);