summaryrefslogtreecommitdiff
path: root/tests/libs/ld_config_test_helper_lib3.cpp
blob: 94e15704d5a5071bc048065495c6badeb6de9993 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <dlfcn.h>
#include <stdio.h>

// Mark foo and bar weak so that Clang allows the run-time linker to decide which DSO's symbol to
// use.

__attribute__((weak)) extern "C" void foo() {
  printf("foo lib3\n");
  void (*next)(void) = reinterpret_cast<void (*)()>(dlsym(RTLD_NEXT, "foo"));
  if (next != nullptr) next();
}

__attribute__((weak)) extern "C" void bar() {
  printf("bar lib3\n");
  void (*next)(void) = reinterpret_cast<void (*)()>(dlsym(RTLD_NEXT, "bar"));
  if (next != nullptr) next();
}

void lib3_call_funcs() {
  printf("lib3_call_funcs\n");
  foo();
  bar();
}