1#include <stdio.h>
2
3
4extern int successful_rtld_next_test (void);
5extern void *failing_rtld_next_use (void);
6
7
8static int
9do_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 (s: "RTLD_NEXT seems to work for existing functions");
20 result = 0;
21 }
22 else
23 {
24 printf (format: "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 (s: "dlsym returned NULL for non-existing function. Good");
34 else
35 {
36 puts (s: "dlsym found something !?");
37 result = 1;
38 }
39
40 return result;
41}
42
43#include <support/test-driver.c>
44

source code of glibc/elf/next.c