Blame elf/nextmod1.c

Packit 6c4009
#include <dlfcn.h>
Packit 6c4009
Packit 6c4009
extern int successful_rtld_next_test (void);
Packit 6c4009
extern void *failing_rtld_next_use (void);
Packit 6c4009
Packit 6c4009
int nextmod1_dummy_var;
Packit 6c4009
Packit 6c4009
int
Packit 6c4009
successful_rtld_next_test (void)
Packit 6c4009
{
Packit 6c4009
  int (*fp) (void);
Packit 6c4009
Packit 6c4009
  /* Get the next function... */
Packit 6c4009
  fp = (int (*) (void)) dlsym (RTLD_NEXT, __FUNCTION__);
Packit 6c4009
Packit 6c4009
  /* ...and simply call it.  */
Packit 6c4009
  return fp ();
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
Packit 6c4009
void *
Packit 6c4009
failing_rtld_next_use (void)
Packit 6c4009
{
Packit 6c4009
  void *ret = dlsym (RTLD_NEXT, __FUNCTION__);
Packit 6c4009
Packit 6c4009
  /* Ensure we are not tail call optimized, because then RTLD_NEXT
Packit 6c4009
     might return this function.  */
Packit 6c4009
  ++nextmod1_dummy_var;
Packit 6c4009
  return ret;
Packit 6c4009
}