Blame elf/noload.c

Packit Service 82fcde
#include <dlfcn.h>
Packit Service 82fcde
#include <stdio.h>
Packit Service 82fcde
#include <mcheck.h>
Packit Service 82fcde
Packit Service 82fcde
int
Packit Service 82fcde
main (void)
Packit Service 82fcde
{
Packit Service 82fcde
  int result = 0;
Packit Service 82fcde
  void *p;
Packit Service 82fcde
Packit Service 82fcde
  mtrace ();
Packit Service 82fcde
Packit Service 82fcde
  /* First try to load an object which is a dependency.  This should
Packit Service 82fcde
     succeed.  */
Packit Service 82fcde
  p = dlopen ("testobj1.so", RTLD_LAZY | RTLD_NOLOAD);
Packit Service 82fcde
  if (p == NULL)
Packit Service 82fcde
    {
Packit Service 82fcde
      printf ("cannot open \"testobj1.so\": %s\n", dlerror ());
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
  else
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("loading \"testobj1.so\" succeeded, OK");
Packit Service 82fcde
      dlclose (p);
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  /* Now try loading an object which is not already loaded.  */
Packit Service 82fcde
  if (dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD) != NULL)
Packit Service 82fcde
    {
Packit Service 82fcde
      puts ("succeeded in loading \"testobj5.so\"");
Packit Service 82fcde
      result = 1;
Packit Service 82fcde
    }
Packit Service 82fcde
  else
Packit Service 82fcde
    {
Packit Service 82fcde
      /* Load the object and run the same test again.  */
Packit Service 82fcde
      puts ("\"testobj5.so\" wasn't loaded and RTLD_NOLOAD prevented it, OK");
Packit Service 82fcde
Packit Service 82fcde
      p = dlopen ("testobj5.so", RTLD_LAZY);
Packit Service 82fcde
Packit Service 82fcde
      if (p == NULL)
Packit Service 82fcde
	{
Packit Service 82fcde
	  printf ("cannot open \"testobj5.so\" without RTLD_NOLOAD: %s\n",
Packit Service 82fcde
		  dlerror ());
Packit Service 82fcde
	  result = 1;
Packit Service 82fcde
	}
Packit Service 82fcde
      else
Packit Service 82fcde
	{
Packit Service 82fcde
	  puts ("loading \"testobj5.so\" succeeded, OK");
Packit Service 82fcde
Packit Service 82fcde
	  void *q = dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD);
Packit Service 82fcde
	  if (q == NULL)
Packit Service 82fcde
	    {
Packit Service 82fcde
	      printf ("cannot open \"testobj5.so\": %s\n", dlerror ());
Packit Service 82fcde
	      result = 1;
Packit Service 82fcde
	    }
Packit Service 82fcde
	  else
Packit Service 82fcde
	    {
Packit Service 82fcde
	      puts ("loading \"testobj5.so\" with RTLD_NOLOAD succeeded, OK");
Packit Service 82fcde
	      dlclose (q);
Packit Service 82fcde
	    }
Packit Service 82fcde
Packit Service 82fcde
	  if (dlclose (p) != 0)
Packit Service 82fcde
	    {
Packit Service 82fcde
	      printf ("cannot close \"testobj5.so\": %s\n", dlerror ());
Packit Service 82fcde
	      result = 1;
Packit Service 82fcde
	    }
Packit Service 82fcde
	  else
Packit Service 82fcde
	    puts ("closing \"testobj5.so\" succeeded, OK");
Packit Service 82fcde
	}
Packit Service 82fcde
    }
Packit Service 82fcde
Packit Service 82fcde
  return result;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
Packit Service 82fcde
extern int foo (int a);
Packit Service 82fcde
int
Packit Service 82fcde
foo (int a)
Packit Service 82fcde
{
Packit Service 82fcde
  return 42 + a;
Packit Service 82fcde
}