diff options
-rw-r--r-- | src/ToolBox/SOS/Strike/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/coreclr/hosts/osxbundlerun/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/coreclr/hosts/unixcoreruncommon/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/coreclr/hosts/unixcoreruncommon/config.h.in | 10 | ||||
-rw-r--r-- | src/coreclr/hosts/unixcoreruncommon/configure.cmake | 5 | ||||
-rw-r--r-- | src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp | 16 |
6 files changed, 37 insertions, 2 deletions
diff --git a/src/ToolBox/SOS/Strike/CMakeLists.txt b/src/ToolBox/SOS/Strike/CMakeLists.txt index a4fe91cba3..8e0218a341 100644 --- a/src/ToolBox/SOS/Strike/CMakeLists.txt +++ b/src/ToolBox/SOS/Strike/CMakeLists.txt @@ -132,7 +132,6 @@ else(WIN32) strike.cpp sos.cpp util.cpp - ../../../coreclr/hosts/unixcoreruncommon/coreruncommon.cpp ) set(SOS_LIBRARY @@ -142,6 +141,7 @@ else(WIN32) # share the PAL in the dac module mscordaccore palrt + unixcoreruncommon ) set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/sos_unixexports.src) diff --git a/src/coreclr/hosts/osxbundlerun/CMakeLists.txt b/src/coreclr/hosts/osxbundlerun/CMakeLists.txt index 49e2248ee7..8af173f970 100644 --- a/src/coreclr/hosts/osxbundlerun/CMakeLists.txt +++ b/src/coreclr/hosts/osxbundlerun/CMakeLists.txt @@ -5,7 +5,6 @@ include_directories(../unixcoreruncommon) add_compile_options(-fPIE) set(CORERUN_SOURCES - ../unixcoreruncommon/coreruncommon.cpp osxbundlerun.cpp ) @@ -15,6 +14,7 @@ _add_executable(osxbundlerun target_link_libraries(osxbundlerun dl + unixcoreruncommon ) add_dependencies(osxbundlerun diff --git a/src/coreclr/hosts/unixcoreruncommon/CMakeLists.txt b/src/coreclr/hosts/unixcoreruncommon/CMakeLists.txt index a17e0a0fd6..93a5bbf9ff 100644 --- a/src/coreclr/hosts/unixcoreruncommon/CMakeLists.txt +++ b/src/coreclr/hosts/unixcoreruncommon/CMakeLists.txt @@ -2,6 +2,10 @@ project(unixcoreruncommon) add_compile_options(-fPIC) +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +include(configure.cmake) + _add_library(unixcoreruncommon STATIC coreruncommon.cpp diff --git a/src/coreclr/hosts/unixcoreruncommon/config.h.in b/src/coreclr/hosts/unixcoreruncommon/config.h.in new file mode 100644 index 0000000000..0e457b411c --- /dev/null +++ b/src/coreclr/hosts/unixcoreruncommon/config.h.in @@ -0,0 +1,10 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#cmakedefine01 HAVE_GETAUXVAL + +#endif // __CONFIG_H__ diff --git a/src/coreclr/hosts/unixcoreruncommon/configure.cmake b/src/coreclr/hosts/unixcoreruncommon/configure.cmake new file mode 100644 index 0000000000..ea90cc8a35 --- /dev/null +++ b/src/coreclr/hosts/unixcoreruncommon/configure.cmake @@ -0,0 +1,5 @@ +check_symbol_exists(getauxval sys/auxv.h HAVE_GETAUXVAL) + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/config.h) diff --git a/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp b/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp index fb155f69bb..0dacddbef0 100644 --- a/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp +++ b/src/coreclr/hosts/unixcoreruncommon/coreruncommon.cpp @@ -6,6 +6,8 @@ // Code that is used by both the Unix corerun and coreconsole. // +#include "config.h" + #include <cstdlib> #include <cstring> #include <assert.h> @@ -20,6 +22,9 @@ #include <sys/types.h> #include <sys/param.h> #endif +#if HAVE_GETAUXVAL +#include <sys/auxv.h> +#endif #if defined(HAVE_SYS_SYSCTL_H) || defined(__FreeBSD__) #include <sys/sysctl.h> #endif @@ -105,6 +110,17 @@ bool GetEntrypointExecutableAbsolutePath(std::string& entrypointExecutable) result = false; } #else + +#if HAVE_GETAUXVAL && defined(AT_EXECFN) + const char *execfn = (const char *)getauxval(AT_EXECFN); + + if (execfn) + { + entrypointExecutable.assign(execfn); + result = true; + } + else +#endif // On other OSs, return the symlink that will be resolved by GetAbsolutePath // to fetch the entrypoint EXE absolute path, inclusive of filename. result = GetAbsolutePath(symlinkEntrypointExecutable, entrypointExecutable); |