#include <dlfcn.h>
#include <mcheck.h>
#include <stdio.h>
#include <stdlib.h>

int
main (void)
{
  void *h1;
  void *h2;
  int (*fp) (void);
  int *vp;

  mtrace ();

  /* Open the two objects.  */
  h1 = dlopen ("reldepmod1.so", RTLD_LAZY | RTLD_GLOBAL);
  if (h1 == NULL)
    {
      printf ("cannot open reldepmod1.so: %s\n", dlerror ());
      exit (1);
    }
  h2 = dlopen ("reldepmod2.so", RTLD_LAZY);
  if (h2 == NULL)
    {
      printf ("cannot open reldepmod2.so: %s\n", dlerror ());
      exit (1);
    }

  /* Get the address of the variable in reldepmod1.so.  */
  vp = dlsym (h1, "some_var");
  if (vp == NULL)
    {
      printf ("cannot get address of \"some_var\": %s\n", dlerror ());
      exit (1);
    }

  *vp = 42;

  /* Get the function `call_me' in the second object.  This has a
     dependency which is resolved by a definition in reldepmod1.so.  */
  fp = dlsym (h2, "call_me");
  if (fp == NULL)
    {
      printf ("cannot get address of \"call_me\": %s\n", dlerror ());
      exit (1);
    }

  /* Call the function.  */
  if (fp () != 0)
    {
      puts ("function \"call_me\" returned wrong result");
      exit (1);
    }

  /* Now close the first object.  If must still be around since we have
     an implicit dependency.  */
  if (dlclose (h1) != 0)
    {
      printf ("closing h1 failed: %s\n", dlerror ());
      exit (1);
    }

  /* Try calling the function again.  This will fail if the first object
     got unloaded.  */
  if (fp () != 0)
    {
      puts ("second call of function \"call_me\" returned wrong result");
      exit (1);
    }

  /* Now close the second file as well.  */
  if (dlclose (h2) != 0)
    {
      printf ("closing h2 failed: %s\n", dlerror ());
      exit (1);
    }

  /* Finally, open the first object again.   */
  h1 = dlopen ("reldepmod1.so", RTLD_LAZY | RTLD_GLOBAL);
  if (h1 == NULL)
    {
      printf ("cannot open reldepmod1.so the second time: %s\n", dlerror ());
      exit (1);
    }

  /* And get the variable address again.  */
  vp = dlsym (h1, "some_var");
  if (vp == NULL)
    {
      printf ("cannot get address of \"some_var\" the second time: %s\n",
	      dlerror ());
      exit (1);
    }

  /* The variable now must have its originial value.  */
  if (*vp != 0)
    {
      puts ("variable \"some_var\" not reset");
      exit (1);
    }

  /* Close the first object again, we are done.  */
  if (dlclose (h1) != 0)
    {
      printf ("closing h1 failed: %s\n", dlerror ());
      exit (1);
    }

  return 0;
}
