From 2582f958770ca42ec7b40c55690abf5e93e7d99a Mon Sep 17 00:00:00 2001 Patch-Source: https://github.com/dotnet/runtime/pull/68121 From: Antoine Martin Date: Sun, 17 Apr 2022 00:42:11 +0000 Subject: [PATCH 1/1] musl-321 Musl 1.2.3 introduced NULL checks that breaks this code. Patch fixes code for better compliancy. --- .../src/pal/src/include/pal/palinternal.h | 12 +-- src/coreclr/src/pal/src/init/pal.cpp | 90 +++++++++---------- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/coreclr/src/pal/src/include/pal/palinternal.h b/src/coreclr/src/pal/src/include/pal/palinternal.h index c39c65f2455..78630f6ce26 100644 --- a/src/coreclr/src/pal/src/include/pal/palinternal.h +++ b/src/coreclr/src/pal/src/include/pal/palinternal.h @@ -694,30 +694,30 @@ T* InterlockedCompareExchangePointerT( template inline T* InterlockedExchangePointerT( T* volatile * target, - int value) // When NULL is provided as argument. + std::nullptr_t value) // When NULL is provided as argument. { //STATIC_ASSERT(value == 0); - return InterlockedExchangePointerT(target, reinterpret_cast(value)); + return InterlockedExchangePointerT(target, (T*)(void*)(value)); } template inline T* InterlockedCompareExchangePointerT( T* volatile * destination, - int exchange, // When NULL is provided as argument. + std::nullptr_t exchange, // When NULL is provided as argument. T* comparand) { //STATIC_ASSERT(exchange == 0); - return InterlockedCompareExchangePointerT(destination, reinterpret_cast(exchange), comparand); + return InterlockedCompareExchangePointerT(destination, (T*)(void*)(exchange), comparand); } template inline T* InterlockedCompareExchangePointerT( T* volatile * destination, T* exchange, - int comparand) // When NULL is provided as argument. + std::nullptr_t comparand) // When NULL is provided as argument. { //STATIC_ASSERT(comparand == 0); - return InterlockedCompareExchangePointerT(destination, exchange, reinterpret_cast(comparand)); + return InterlockedCompareExchangePointerT(destination, exchange, (T*)(void*)(comparand)); } #undef InterlockedExchangePointer diff --git a/src/coreclr/src/pal/src/init/pal.cpp b/src/coreclr/src/pal/src/init/pal.cpp index b71c537a323..a6033d80e26 100644 --- a/src/coreclr/src/pal/src/init/pal.cpp +++ b/src/coreclr/src/pal/src/init/pal.cpp @@ -146,7 +146,7 @@ static bool RunningNatively() { int ret = 0; size_t sz = sizeof(ret); - if (sysctlbyname("sysctl.proc_native", &ret, &sz, NULL, 0) != 0) + if (sysctlbyname("sysctl.proc_native", &ret, &sz, nullptr, 0) != 0) { // if the sysctl failed, we'll assume this OS does not support // binary translation - so we must be running natively. @@ -219,7 +219,7 @@ int PALAPI PAL_InitializeDLL() { - return Initialize(0, NULL, g_initializeDLLFlags); + return Initialize(0, nullptr, g_initializeDLLFlags); } /*++ @@ -281,12 +281,12 @@ void InitializeDefaultStackSize() { char* defaultStackSizeStr = getenv("COMPlus_DefaultStackSize"); - if (defaultStackSizeStr != NULL) + if (defaultStackSizeStr != nullptr) { errno = 0; // Like all numeric values specific by the COMPlus_xxx variables, it is a // hexadecimal string without any prefix. - long int size = strtol(defaultStackSizeStr, NULL, 16); + long int size = strtol(defaultStackSizeStr, nullptr, 16); if (errno == 0) { @@ -323,10 +323,10 @@ Initialize( DWORD flags) { PAL_ERROR palError = ERROR_GEN_FAILURE; - CPalThread *pThread = NULL; - CSharedMemoryObjectManager *pshmom = NULL; - LPWSTR command_line = NULL; - LPWSTR exe_path = NULL; + CPalThread *pThread = nullptr; + CSharedMemoryObjectManager *pshmom = nullptr; + LPWSTR command_line = nullptr; + LPWSTR exe_path = nullptr; int retval = -1; bool fFirstTimeInit = false; @@ -348,18 +348,18 @@ Initialize( CriticalSectionSubSysInitialize(); - if(NULL == init_critsec) + if(nullptr == init_critsec) { pthread_mutex_lock(&init_critsec_mutex); // prevents race condition of two threads // initializing the critical section. - if(NULL == init_critsec) + if(nullptr == init_critsec) { static CRITICAL_SECTION temp_critsec; // Want this critical section to NOT be internal to avoid the use of unsafe region markers. InternalInitializeCriticalSectionAndSpinCount(&temp_critsec, 0, false); - if(NULL != InterlockedCompareExchangePointer(&init_critsec, &temp_critsec, NULL)) + if(nullptr != InterlockedCompareExchangePointer(&init_critsec, &temp_critsec, nullptr)) { // Another thread got in before us! shouldn't happen, if the PAL // isn't initialized there shouldn't be any other threads @@ -370,7 +370,7 @@ Initialize( pthread_mutex_unlock(&init_critsec_mutex); } - InternalEnterCriticalSection(pThread, init_critsec); // here pThread is always NULL + InternalEnterCriticalSection(pThread, init_critsec); // here pThread is always nullptr if (init_count == 0) { @@ -419,12 +419,12 @@ Initialize( #ifdef FEATURE_ENABLE_NO_ADDRESS_SPACE_RANDOMIZATION char* useDefaultBaseAddr = getenv("COMPlus_UseDefaultBaseAddr"); - if (useDefaultBaseAddr != NULL) + if (useDefaultBaseAddr != nullptr) { errno = 0; // Like all numeric values specific by the COMPlus_xxx variables, it is a // hexadecimal string without any prefix. - long int flag = strtol(useDefaultBaseAddr, NULL, 16); + long int flag = strtol(useDefaultBaseAddr, nullptr, 16); if (errno == 0) { @@ -520,7 +520,7 @@ Initialize( // pshmom = InternalNew(); - if (NULL == pshmom) + if (nullptr == pshmom) { ERROR("Unable to allocate new object manager\n"); palError = ERROR_OUTOFMEMORY; @@ -543,7 +543,7 @@ Initialize( g_pSynchronizationManager = CPalSynchMgrController::CreatePalSynchronizationManager(); - if (NULL == g_pSynchronizationManager) + if (nullptr == g_pSynchronizationManager) { palError = ERROR_NOT_ENOUGH_MEMORY; ERROR("Failure creating synchronization manager\n"); @@ -557,11 +557,11 @@ Initialize( palError = ERROR_GEN_FAILURE; - if (argc > 0 && argv != NULL) + if (argc > 0 && argv != nullptr) { /* build the command line */ command_line = INIT_FormatCommandLine(argc, argv); - if (NULL == command_line) + if (nullptr == command_line) { ERROR("Error building command line\n"); palError = ERROR_PALINIT_COMMAND_LINE; @@ -570,7 +570,7 @@ Initialize( /* find out the application's full path */ exe_path = INIT_GetCurrentEXEPath(); - if (NULL == exe_path) + if (nullptr == exe_path) { ERROR("Unable to find exe path\n"); palError = ERROR_PALINIT_CONVERT_EXE_PATH; @@ -588,7 +588,7 @@ Initialize( } // InitializeProcessCommandLine took ownership of this memory. - command_line = NULL; + command_line = nullptr; #ifdef PAL_PERF // Initialize the Profiling structure @@ -609,7 +609,7 @@ Initialize( } // LOADSetExeName took ownership of this memory. - exe_path = NULL; + exe_path = nullptr; } if (init_count == 0) @@ -761,7 +761,7 @@ done: if (fFirstTimeInit && 0 == retval) { - _ASSERTE(NULL != pThread); + _ASSERTE(nullptr != pThread); } if (retval != 0 && GetLastError() == ERROR_SUCCESS) @@ -878,7 +878,7 @@ PAL_IsDebuggerPresent() struct kinfo_proc info = {}; size_t size = sizeof(info); int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid() }; - int ret = sysctl(mib, sizeof(mib)/sizeof(*mib), &info, &size, NULL, 0); + int ret = sysctl(mib, sizeof(mib)/sizeof(*mib), &info, &size, nullptr, 0); if (ret == 0) return ((info.kp_proc.p_flag & P_TRACED) != 0); @@ -891,12 +891,12 @@ PAL_IsDebuggerPresent() struct kinfo_proc *info; - kd = kvm_open(NULL, NULL, NULL, KVM_NO_FILES, "kvm_open"); - if (kd == NULL) + kd = kvm_open(nullptr, nullptr, nullptr, KVM_NO_FILES, "kvm_open"); + if (kd == nullptr) return FALSE; info = kvm_getprocs(kd, KERN_PROC_PID, getpid(), &cnt); - if (info == NULL || cnt < 1) + if (info == nullptr || cnt < 1) { kvm_close(kd); return FALSE; @@ -980,7 +980,7 @@ PAL_TerminateEx( { ENTRY_EXTERNAL("PAL_TerminateEx()\n"); - if (NULL == init_critsec) + if (nullptr == init_critsec) { /* note that these macros probably won't output anything, since the debug channels haven't been initialized yet */ @@ -1077,7 +1077,7 @@ BOOL PALInitLock(void) } CPalThread * pThread = - (PALIsThreadDataInitialized() ? InternalGetCurrentThread() : NULL); + (PALIsThreadDataInitialized() ? InternalGetCurrentThread() : nullptr); InternalEnterCriticalSection(pThread, init_critsec); return TRUE; @@ -1099,7 +1099,7 @@ void PALInitUnlock(void) } CPalThread * pThread = - (PALIsThreadDataInitialized() ? InternalGetCurrentThread() : NULL); + (PALIsThreadDataInitialized() ? InternalGetCurrentThread() : nullptr); InternalLeaveCriticalSection(pThread, init_critsec); } @@ -1181,7 +1181,7 @@ Note : not all peculiarities of Windows command-line processing are supported; static LPWSTR INIT_FormatCommandLine (int argc, const char * const *argv) { LPWSTR retval; - LPSTR command_line=NULL, command_ptr; + LPSTR command_line=nullptr, command_ptr; LPCSTR arg_ptr; INT length, i,j; BOOL bQuoted = FALSE; @@ -1206,7 +1206,7 @@ static LPWSTR INIT_FormatCommandLine (int argc, const char * const *argv) if(!command_line) { ERROR("couldn't allocate memory for command line!\n"); - return NULL; + return nullptr; } command_ptr=command_line; @@ -1245,27 +1245,27 @@ static LPWSTR INIT_FormatCommandLine (int argc, const char * const *argv) *command_ptr='\0'; /* convert to Unicode */ - i = MultiByteToWideChar(CP_ACP, 0,command_line, -1, NULL, 0); + i = MultiByteToWideChar(CP_ACP, 0,command_line, -1, nullptr, 0); if (i == 0) { ASSERT("MultiByteToWideChar failure\n"); free(command_line); - return NULL; + return nullptr; } retval = reinterpret_cast(InternalMalloc((sizeof(WCHAR)*i))); - if(retval == NULL) + if(retval == nullptr) { ERROR("can't allocate memory for Unicode command line!\n"); free(command_line); - return NULL; + return nullptr; } if(!MultiByteToWideChar(CP_ACP, 0,command_line, i, retval, i)) { ASSERT("MultiByteToWideChar failure\n"); free(retval); - retval = NULL; + retval = nullptr; } else TRACE("Command line is %s\n", command_line); @@ -1350,7 +1350,7 @@ bool GetEntrypointExecutableAbsolutePath(PathCharString& entrypointExecutable) size_t len; len = sizeof(path); - if (sysctl(name, __arraycount(name), path, &len, NULL, 0) != -1) + if (sysctl(name, __arraycount(name), path, &len, nullptr, 0) != -1) { entrypointExecutable.Set(path, len); result = true; @@ -1361,14 +1361,14 @@ bool GetEntrypointExecutableAbsolutePath(PathCharString& entrypointExecutable) } #elif defined(__sun) const char *path; - if ((path = getexecname()) == NULL) + if ((path = getexecname()) == nullptr) { result = false; } else if (*path != '/') { char *cwd; - if ((cwd = getcwd(NULL, PATH_MAX)) == NULL) + if ((cwd = getcwd(nullptr, PATH_MAX)) == nullptr) { result = false; } @@ -1428,21 +1428,21 @@ static LPWSTR INIT_GetCurrentEXEPath() if (!GetEntrypointExecutableAbsolutePath(real_path)) { ERROR( "Cannot get current exe path\n" ); - return NULL; + return nullptr; } - return_size = MultiByteToWideChar(CP_ACP, 0, real_path, -1, NULL, 0); + return_size = MultiByteToWideChar(CP_ACP, 0, real_path, -1, nullptr, 0); if (0 == return_size) { ASSERT("MultiByteToWideChar failure\n"); - return NULL; + return nullptr; } return_value = reinterpret_cast(InternalMalloc((return_size*sizeof(WCHAR)))); - if (NULL == return_value) + if (nullptr == return_value) { ERROR("Not enough memory to create full path\n"); - return NULL; + return nullptr; } else { @@ -1451,7 +1451,7 @@ static LPWSTR INIT_GetCurrentEXEPath() { ASSERT("MultiByteToWideChar failure\n"); free(return_value); - return_value = NULL; + return_value = nullptr; } else { -- 2.35.1