mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:02:44 +00:00 
			
		
		
		
	Tests: Add test for dlsym(RTLD_DEFAULT) for symbols from dlopen'd libs
This broke with recent changes to library loading and mapping order.
This commit is contained in:
		
							parent
							
								
									6732fec8b8
								
							
						
					
					
						commit
						a0eb0a275d
					
				
					 2 changed files with 29 additions and 1 deletions
				
			
		|  | @ -1,3 +1,4 @@ | |||
| set(CMAKE_SKIP_RPATH FALSE) | ||||
| macro(add_dlopen_lib NAME FUNCTION) | ||||
|     add_library(${NAME} SHARED Dynlib.cpp) | ||||
|     target_compile_definitions(${NAME} PRIVATE -DFUNCTION=${FUNCTION}) | ||||
|  | @ -6,11 +7,17 @@ macro(add_dlopen_lib NAME FUNCTION) | |||
| 	 # Avoid execution by the test runner | ||||
|     install(TARGETS ${NAME} | ||||
|             DESTINATION usr/Tests/LibELF | ||||
|             PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) | ||||
|             PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE GROUP_WRITE) | ||||
| endmacro() | ||||
| add_dlopen_lib(DynlibA dynliba_function) | ||||
| add_dlopen_lib(DynlibB dynlibb_function) | ||||
| 
 | ||||
| add_dlopen_lib(DynlibC dynlibc_function) | ||||
| set(CMAKE_INSTALL_RPATH $ORIGIN) | ||||
| add_dlopen_lib(DynlibD dynlibd_function) | ||||
| target_link_libraries(DynlibD DynlibC) | ||||
| unset(CMAKE_INSTALL_RPATH) | ||||
| 
 | ||||
| set(TEST_SOURCES | ||||
|     test-elf.cpp | ||||
|     TestDlOpen.cpp | ||||
|  |  | |||
|  | @ -23,3 +23,24 @@ TEST_CASE(test_dlopen) | |||
|     EXPECT_NE(func_b, nullptr); | ||||
|     EXPECT_EQ(0, func_b()); | ||||
| } | ||||
| 
 | ||||
| TEST_CASE(test_dlsym_rtld_default) | ||||
| { | ||||
|     auto libd = dlopen("/usr/Tests/LibELF/libDynlibD.so", 0); | ||||
|     EXPECT_NE(libd, nullptr); | ||||
|     if (libd == nullptr) { | ||||
|         warnln("can't open libDynlibD.so, {}", dlerror()); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     typedef int (*dynlib_func_t)(); | ||||
|     dynlib_func_t func_c = (dynlib_func_t)dlsym(RTLD_DEFAULT, "dynlibc_function"); | ||||
|     EXPECT_NE(func_c, nullptr); | ||||
|     EXPECT_EQ(0, func_c()); | ||||
| 
 | ||||
|     dynlib_func_t func_d = (dynlib_func_t)dlsym(RTLD_DEFAULT, "dynlibd_function"); | ||||
|     EXPECT_NE(func_d, nullptr); | ||||
|     EXPECT_EQ(0, func_d()); | ||||
| 
 | ||||
|     dlclose(libd); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andrew Kaster
						Andrew Kaster