diff options
Diffstat (limited to 'src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1')
4 files changed, 183 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/CMakeLists.txt b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/CMakeLists.txt new file mode 100644 index 0000000000..541ef8b98e --- /dev/null +++ b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 2.8.12.2) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(SOURCES + test1.c + testlib.c +) + +add_executable(paltest_getprocaddress_test1 + ${SOURCES} +) + +add_dependencies(paltest_getprocaddress_test1 coreclrpal) + +target_link_libraries(paltest_getprocaddress_test1 + pthread + m + coreclrpal +) diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c new file mode 100644 index 0000000000..f0b76c615f --- /dev/null +++ b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c @@ -0,0 +1,111 @@ +// 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. + +/*============================================================================= +** +** Source: test1.c (filemapping_memmgt\getprocaddress\test1) +** +** Purpose: Positive test the GetProcAddress API. +** The first test calls GetProcAddress to retrieve the +** address of SimpleFunction inside testlib by its name, +** then calls the function and checks that it worked. +** +** +**===========================================================================*/ +#include <palsuite.h> + +typedef int (__stdcall *SIMPLEFUNCTION)(int); + +/* SHLEXT is defined only for Unix variants */ +#if defined(SHLEXT) +#define lpModuleName "testlib"SHLEXT +#else +#define lpModuleName "testlib.dll" +#endif + +int __cdecl main(int argc, char *argv[]) +{ + int err; + HMODULE hModule; + SIMPLEFUNCTION procAddressByName; + +#if WIN32 + const char *FunctionName = "_SimpleFunction@4"; +#else + const char *FunctionName = "SimpleFunction"; +#endif + + /* Initialize the PAL environment. */ + if(0 != PAL_Initialize(argc, argv)) + { + return FAIL; + } + + + /* load a module */ + hModule = LoadLibrary(lpModuleName); + if(!hModule) + { + Fail("Unexpected error: " + "LoadLibrary(%s) failed.\n", + lpModuleName); + } + + /* + * Test 1 + * + * Get the address of a function + */ + procAddressByName = (SIMPLEFUNCTION) GetProcAddress(hModule,FunctionName); + if(!procAddressByName) + { + Trace("ERROR: Unable to get address of SimpleFunction by its name. " + "GetProcAddress returned NULL with error %d\n", + GetLastError()); + + /* Cleanup */ + err = FreeLibrary(hModule); + if(0 == err) + { + Fail("Unexpected error: Failed to FreeLibrary %s\n", + lpModuleName); + } + Fail(""); + } + + /* Call the function to see that it really worked */ + /* Simple function adds 1 to the argument passed */ + if( 2 != ((procAddressByName)(1))) + { + Trace("ERROR: Problem calling the function by its address.\n"); + + /* Cleanup */ + err = FreeLibrary(hModule); + if(0 == err) + { + Fail("Unexpected error: Failed to FreeLibrary %s\n", + lpModuleName); + } + Fail(""); + } + + /* Cleanup */ + err = FreeLibrary(hModule); + if(0 == err) + { + Fail("Unexpected error: Failed to FreeLibrary %s\n", + lpModuleName); + } + + PAL_Terminate(); + return PASS; +} + + + + + + + + diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/testinfo.dat b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/testinfo.dat new file mode 100644 index 0000000000..31b262e31e --- /dev/null +++ b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/testinfo.dat @@ -0,0 +1,19 @@ +# 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. + +Version = 1.0 +Section = filemapping_memmgt +Function = getprocaddress +Name = Positive test for GetProcAddress API +TYPE = DEFAULT +EXE1 = test1 +LIB1 = testlib +Description +=Positive test the GetProcAddress API. +=The first test calls GetProcAddress to retrieve the +=address of strcpy by its name, then calls the function and +=checks that it worked. The second part of the test +=calls GetProcAddress to retrieve the address of +=strcpy by its ordinal, then calls the function and +=checks that it worked. diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/testlib.c b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/testlib.c new file mode 100644 index 0000000000..e8fe48e05d --- /dev/null +++ b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/testlib.c @@ -0,0 +1,33 @@ +// 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. + +/*============================================================================= +** +** Source: testlib.c (filemapping_memmgt\getprocaddress\test1) +** +** Purpose: Create a simple library containing one function +** to test GetProcAddress +** +** +**===========================================================================*/ +#include "pal.h" + +#if WIN32 +__declspec(dllexport) +#endif + +/** + * Simple function that returns i+1 + */ +int __stdcall SimpleFunction(int i) +{ + return i+1; +} + +#if WIN32 +int __stdcall _DllMainCRTStartup(void *hinstDLL, int reason, void *lpvReserved) +{ + return 1; +} +#endif |