xref: /aosp_15_r20/bionic/tests/libs/ld_config_test_helper_lib3.cpp (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1 #include <dlfcn.h>
2 #include <stdio.h>
3 
4 // Mark foo and bar weak so that Clang allows the run-time linker to decide which DSO's symbol to
5 // use.
6 
foo()7 __attribute__((weak)) extern "C" void foo() {
8   printf("foo lib3\n");
9   void (*next)(void) = reinterpret_cast<void (*)()>(dlsym(RTLD_NEXT, "foo"));
10   if (next != nullptr) next();
11 }
12 
bar()13 __attribute__((weak)) extern "C" void bar() {
14   printf("bar lib3\n");
15   void (*next)(void) = reinterpret_cast<void (*)()>(dlsym(RTLD_NEXT, "bar"));
16   if (next != nullptr) next();
17 }
18 
lib3_call_funcs()19 void lib3_call_funcs() {
20   printf("lib3_call_funcs\n");
21   foo();
22   bar();
23 }
24