| lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame] | 1 | #include <stdio.h> | 
|  | 2 |  | 
|  | 3 |  | 
|  | 4 | extern int successful_rtld_next_test (void); | 
|  | 5 | extern void *failing_rtld_next_use (void); | 
|  | 6 |  | 
|  | 7 |  | 
|  | 8 | static int | 
|  | 9 | do_test (void) | 
|  | 10 | { | 
|  | 11 | int result; | 
|  | 12 | void *addr; | 
|  | 13 |  | 
|  | 14 | /* First try call a function which uses RTLD_NEXT and calls that | 
|  | 15 | function.  */ | 
|  | 16 | result = successful_rtld_next_test (); | 
|  | 17 | if (result == 42) | 
|  | 18 | { | 
|  | 19 | puts ("RTLD_NEXT seems to work for existing functions"); | 
|  | 20 | result = 0; | 
|  | 21 | } | 
|  | 22 | else | 
|  | 23 | { | 
|  | 24 | printf ("Heh?  `successful_rtld_next_test' returned %d\n", result); | 
|  | 25 | result = 1; | 
|  | 26 | } | 
|  | 27 |  | 
|  | 28 | /* Next try a function which tries to get a function with RTLD_NEXT | 
|  | 29 | but that fails.  This dlsym() call should return a NULL pointer | 
|  | 30 | and do nothing else.  */ | 
|  | 31 | addr = failing_rtld_next_use (); | 
|  | 32 | if (addr == NULL) | 
|  | 33 | puts ("dlsym returned NULL for non-existing function.  Good"); | 
|  | 34 | else | 
|  | 35 | { | 
|  | 36 | puts ("dlsym found something !?"); | 
|  | 37 | result = 1; | 
|  | 38 | } | 
|  | 39 |  | 
|  | 40 | return result; | 
|  | 41 | } | 
|  | 42 |  | 
|  | 43 | #define TEST_FUNCTION do_test () | 
|  | 44 | #include "../test-skeleton.c" |