-
Notifications
You must be signed in to change notification settings - Fork 4.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Build of coreclr fails with musl 1.2.3 #67763
Comments
I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label. |
could you try replacing |
On it |
huh? wouldn't you need to change |
https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-jit-coding-conventions.md#15.1.4 already says "Do not use NULL." anyways. |
JIT coding conventions do not apply in PAL. |
No dice on either the follwing solutions
(I know very little c++, but a humble packager) *tried more things, but as I'm inexperienced I'm throwing spaguetti at a wall. I'll let ya'll find a solution :) ) |
the issue is this:
basically there is multiple overloads of the functions and the code abuses the fact that in older versions of C++, and now newer version of musl defines |
Which is why following the solution here: #23650 fixes the issue, that is to say « coreclr didn't build on freebsd (due to dotnet/coreclr@08d39dd) - when I reverted this commit, it builds. cc janvorli for the error below (simple change from NULL to 0 fixed those errors, but it was in many places, so I just reverted whole commit, also I'm not a c++ expert). ci build for freebsd would be nice to have :) » (sec, Oct 4 2017) |
the fix is to change the |
We're getting somewhere
Now its a matter of adapting |
change the |
Reckoned that would be the next step, thank you :) |
@am11 that'll fix it too probably, but it's not a good fix, it's just adapting usage to the bad API the API itself should be changed like i wrote above |
no, the API expects a pointer the integer type in there is a bad hack to overload the function for explicit NULLs, which now broke, so the API should be fixed |
Build passes with this patch From 392b4a9263eb39a5ffe6a288324cc59a8587e120 Mon Sep 17 00:00:00 2001
From: "build@apk-groulx" <build@apk-groulx.praxis>
Date: Fri, 8 Apr 2022 18:50:43 +0000
Subject: [PATCH 1/1] fix build on musl 1.2.3
---
.../src/pal/src/include/pal/palinternal.h | 12 +--
src/coreclr/src/pal/src/init/pal.cpp | 96 +++++++++----------
2 files changed, 54 insertions(+), 54 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..8603b1289ce 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 <typename T>
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<T*>(value));
+ return InterlockedExchangePointerT(target, value);
}
template <typename T>
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<T*>(exchange), comparand);
+ return InterlockedCompareExchangePointerT(destination, comparand);
}
template <typename T>
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<T*>(comparand));
+ return InterlockedCompareExchangePointerT(destination, exchange, 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..b89fe1674a6 100644
--- a/src/coreclr/src/pal/src/init/pal.cpp
+++ b/src/coreclr/src/pal/src/init/pal.cpp
@@ -127,7 +127,7 @@ BOOL g_useDefaultBaseAddr = FALSE;
/* critical section to protect access to init_count. This is allocated on the
very first PAL_Initialize call, and is freed afterward. */
-static PCRITICAL_SECTION init_critsec = NULL;
+static PCRITICAL_SECTION init_critsec = nullptr;
static DWORD g_initializeDLLFlags = PAL_INITIALIZE_DLL;
@@ -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<CSharedMemoryObjectManager>();
- 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);
}
@@ -1158,7 +1158,7 @@ Abstract:
Parameters :
int argc : number of arguments in argv
- char **argv : argument list in an array of NULL-terminated strings
+ char **argv : argument list in an array of nullptr-terminated strings
Return value :
pointer to Unicode command line. This is a buffer allocated with malloc;
@@ -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;
@@ -1240,32 +1240,32 @@ static LPWSTR INIT_FormatCommandLine (int argc, const char * const *argv)
}
*command_ptr++=' ';
}
- /* replace the last space with a NULL terminator */
+ /* replace the last space with a nullptr terminator */
command_ptr--;
*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<LPWSTR>(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<LPWSTR>(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 Seemed odd for |
Feel free to put up a PR. |
you are accidentally dropping an argument here |
The build of runtime is stalling here:
|
Description
Build of coreclr fails with musl 1.2.3 due to following error:
Caused by the following change in musl:
https://git.musl-libc.org/cgit/musl/commit?id=98e688a9da5e7b2925dda17a2d6820dddf1fb287
Reproduction Steps
Expected behavior
Build should pass, as with musl 1.2.2
Actual behavior
Failure, as described in description.
Regression?
No response
Known Workarounds
Removing the problematic commit from musl does the trick.
Configuration
Alpine Edge
Musl 1.2.3
installer version 6.0.102 with runtime 6.0.2 (as problematic files havn't changed between 6.0.2 and 6.0.3, this issue should exist with current version)
Other information
No response
The text was updated successfully, but these errors were encountered: