summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1
diff options
context:
space:
mode:
Diffstat (limited to 'src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1')
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/CMakeLists.txt20
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c111
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/testinfo.dat19
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/testlib.c33
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