diff --git a/src/coreclr/nativeaot/System.Private.CoreLib/src/Internal/DeveloperExperience/DeveloperExperience.cs b/src/coreclr/nativeaot/System.Private.CoreLib/src/Internal/DeveloperExperience/DeveloperExperience.cs index 1afcfd799e631b..c7253c85b1e1b9 100644 --- a/src/coreclr/nativeaot/System.Private.CoreLib/src/Internal/DeveloperExperience/DeveloperExperience.cs +++ b/src/coreclr/nativeaot/System.Private.CoreLib/src/Internal/DeveloperExperience/DeveloperExperience.cs @@ -25,7 +25,7 @@ public virtual string CreateStackTraceString(IntPtr ip, bool includeFileInfo, ou } // If we don't have precise information, try to map it at least back to the right module. - string? moduleFullFileName = RuntimeAugments.TryGetFullPathToApplicationModule(ip, out IntPtr moduleBase); + string moduleFullFileName = RuntimeAugments.TryGetFullPathToApplicationModule(ip, out IntPtr moduleBase); // Without any callbacks or the ability to map ip correctly we better admit that we don't know if (string.IsNullOrEmpty(moduleFullFileName)) diff --git a/src/coreclr/nativeaot/System.Private.CoreLib/src/Internal/Runtime/Augments/RuntimeAugments.cs b/src/coreclr/nativeaot/System.Private.CoreLib/src/Internal/Runtime/Augments/RuntimeAugments.cs index ccc91fb1c86d10..d592f7506f7aec 100644 --- a/src/coreclr/nativeaot/System.Private.CoreLib/src/Internal/Runtime/Augments/RuntimeAugments.cs +++ b/src/coreclr/nativeaot/System.Private.CoreLib/src/Internal/Runtime/Augments/RuntimeAugments.cs @@ -641,7 +641,7 @@ public static RuntimeTypeHandle GetNullableType(RuntimeTypeHandle nullableType) /// /// Address inside the module /// Module base address - public static unsafe string? TryGetFullPathToApplicationModule(IntPtr ip, out IntPtr moduleBase) + public static unsafe string TryGetFullPathToApplicationModule(IntPtr ip, out IntPtr moduleBase) { moduleBase = RuntimeImports.RhGetOSModuleFromPointer(ip); if (moduleBase == IntPtr.Zero) diff --git a/src/coreclr/nativeaot/System.Private.CoreLib/src/System/AppContext.NativeAot.cs b/src/coreclr/nativeaot/System.Private.CoreLib/src/System/AppContext.NativeAot.cs index e4b354899dd8aa..535eb123ddf0f3 100644 --- a/src/coreclr/nativeaot/System.Private.CoreLib/src/System/AppContext.NativeAot.cs +++ b/src/coreclr/nativeaot/System.Private.CoreLib/src/System/AppContext.NativeAot.cs @@ -1,7 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Internal.Runtime.Augments; using System.Collections.Generic; using System.Runtime; using System.Runtime.ExceptionServices; @@ -37,21 +36,5 @@ internal static void OnUnhandledException(object e) { UnhandledException?.Invoke(/* AppDomain */ null, new UnhandledExceptionEventArgs(e, true)); } - - private static unsafe string GetRuntimeModulePath() - { - // We aren't going to call this method, we just need an address that we know is in this module. - // As this code is NativeAOT only, we know that this method will be AOT compiled into the executable, - // so the entry point address will be in the module. - void* ip = (void*)(delegate*)&GetRuntimeModulePath; - if (RuntimeAugments.TryGetFullPathToApplicationModule((nint)ip, out _) is string modulePath) - { - return modulePath; - } - - // If this method isn't in a dynamically loaded module, - // then it's in the executable. In that case, we can use the process path. - return Environment.ProcessPath; - } } } diff --git a/src/libraries/System.Private.CoreLib/src/System/AppContext.AnyOS.cs b/src/libraries/System.Private.CoreLib/src/System/AppContext.AnyOS.cs index ed002f35600ccb..b2c83e67dd4538 100644 --- a/src/libraries/System.Private.CoreLib/src/System/AppContext.AnyOS.cs +++ b/src/libraries/System.Private.CoreLib/src/System/AppContext.AnyOS.cs @@ -19,7 +19,7 @@ private static string GetBaseDirectoryCore() { // Fallback path for hosts that do not set APP_CONTEXT_BASE_DIRECTORY explicitly #if NATIVEAOT - string? path = GetRuntimeModulePath(); + string? path = Environment.ProcessPath; #else string? path = Assembly.GetEntryAssembly()?.Location; #endif diff --git a/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/CMakeLists.txt b/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/CMakeLists.txt deleted file mode 100644 index 311de58864d465..00000000000000 --- a/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -project (SharedLibrary) -include_directories(${INC_PLATFORM_DIR}) - -add_executable(SharedLibraryHost SharedLibraryHost.cpp) -add_library(SharedLibraryDependency SHARED SharedLibraryDependency.cpp) - -if (CLR_CMAKE_TARGET_UNIX) - target_link_libraries (SharedLibraryHost PRIVATE ${CMAKE_DL_LIBS}) -endif() - -# If there's a dynamic ASAN runtime, then copy it to project output. -if (NOT "${ASAN_RUNTIME}" STREQUAL "") - file(COPY "${ASAN_RUNTIME}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") -endif() diff --git a/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryDependency.cpp b/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryDependency.cpp deleted file mode 100644 index d9f36cbd88fa9b..00000000000000 --- a/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryDependency.cpp +++ /dev/null @@ -1,9 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#include - -extern "C" DLL_EXPORT int32_t STDMETHODCALLTYPE MultiplyIntegers(int32_t a, int32_t b) -{ - return a * b; -} diff --git a/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryDependencyLoading.cs b/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryDependencyLoading.cs deleted file mode 100644 index ea84bcb3b3c04f..00000000000000 --- a/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryDependencyLoading.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using System; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -namespace SharedLibrary -{ - public class ClassLibrary - { - [UnmanagedCallersOnly(EntryPoint = "MultiplyIntegers", CallConvs = [typeof(CallConvStdcall)])] - public static int MultiplyIntegersExport(int x, int y) - { - return MultiplyIntegers(x, y); - } - - [UnmanagedCallersOnly(EntryPoint = "GetBaseDirectory", CallConvs = [typeof(CallConvStdcall)])] - public static IntPtr GetBaseDirectory() - { - return Marshal.StringToCoTaskMemAnsi(AppContext.BaseDirectory); - } - - [DllImport("SharedLibraryDependency")] - [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)] - [UnmanagedCallConv(CallConvs = [typeof(CallConvStdcall)])] - public static extern int MultiplyIntegers(int x, int y); - } -} diff --git a/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryDependencyLoading.csproj b/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryDependencyLoading.csproj deleted file mode 100644 index 6d4d2b52a8c28a..00000000000000 --- a/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryDependencyLoading.csproj +++ /dev/null @@ -1,43 +0,0 @@ - - - Library - BuildAndRun - 0 - true - Shared - false - - true - true - true - - - - nul -mkdir subdir 2>nul -copy /y clang_rt.* native\ -copy /y SharedLibraryDependency.dll subdir\ -copy /y native\SharedLibraryDependencyLoading* subdir\ -copy /y SharedLibraryHost.exe native\SharedLibraryDependencyLoading.exe -]]> - - - - - - - - - - - diff --git a/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryHost.cpp b/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryHost.cpp deleted file mode 100644 index f7fa40c5947331..00000000000000 --- a/src/tests/nativeaot/SmokeTests/SharedLibraryDependencyLoading/SharedLibraryHost.cpp +++ /dev/null @@ -1,103 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#ifdef TARGET_WINDOWS -#include "windows.h" -#else -#include "dlfcn.h" -#endif -#include -#include -#include -#include - -#ifndef TARGET_WINDOWS -#define __stdcall -#endif - -// typedef for shared lib exported methods -using f_MultiplyIntegers = int32_t(__stdcall *)(int32_t, int32_t); -using f_getBaseDirectory = const char*(__stdcall *)(); - -#ifdef TARGET_WINDOWS -template -struct CoTaskMemDeleter -{ - void operator()(T* p) const - { - CoTaskMemFree((void*)p); - } -}; -template -using CoTaskMemPtr = std::unique_ptr>; -#else -template -using CoTaskMemPtr = std::unique_ptr; -#endif - -#ifdef TARGET_WINDOWS -int __cdecl main(int argc, char* argv[]) -#else -int main(int argc, char* argv[]) -#endif -{ - std::string pathToSubdir = argv[0]; - // Step out of the current directory and the parent directory. - pathToSubdir = pathToSubdir.substr(0, pathToSubdir.find_last_of("/\\")); - pathToSubdir = pathToSubdir.substr(0, pathToSubdir.find_last_of("/\\")); -#ifdef TARGET_WINDOWS - pathToSubdir += "subdir\\"; - // We need to include System32 to find system dependencies of SharedLibraryDependencyLoading.dll - HINSTANCE handle = LoadLibraryEx("..\\subdir\\SharedLibraryDependencyLoading.dll", nullptr, LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32); -#else -#if TARGET_APPLE - constexpr char const* ext = ".dylib"; -#else - constexpr char const* ext = ".so"; -#endif - - pathToSubdir += "subdir/"; - std::string path = pathToSubdir + "SharedLibraryDependencyLoading"; - path += ext; - void* handle = dlopen(path.c_str(), RTLD_LAZY); -#endif - - if (!handle) - return 1; - -#ifdef TARGET_WINDOWS - f_MultiplyIntegers multiplyIntegers = (f_MultiplyIntegers)GetProcAddress(handle, "MultiplyIntegers"); -#else - f_MultiplyIntegers multiplyIntegers = (f_MultiplyIntegers)dlsym(handle, "MultiplyIntegers"); -#endif - - if (multiplyIntegers(10, 7) != 70) - return 2; - - CoTaskMemPtr baseDirectory; -#ifdef TARGET_WINDOWS - f_getBaseDirectory getBaseDirectory = (f_getBaseDirectory)GetProcAddress(handle, "GetBaseDirectory"); -#else - f_getBaseDirectory getBaseDirectory = (f_getBaseDirectory)dlsym(handle, "GetBaseDirectory"); -#endif - - baseDirectory.reset(getBaseDirectory()); - if (baseDirectory == nullptr) - return 3; - - if (pathToSubdir != baseDirectory.get()) - { - std::cout << "Expected base directory: " << pathToSubdir << std::endl; - std::cout << "Actual base directory: " << baseDirectory.get() << std::endl; - return 4; - } - - return 100; -} - -extern "C" const char* __stdcall __asan_default_options() -{ - // NativeAOT is not designed to be unloadable, so we'll leak a few allocations from the shared library. - // Disable leak detection as we don't care about these leaks as of now. - return "detect_leaks=0 use_sigaltstack=0"; -}