mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <config.h>
 | 
						|
#include <dlfcn.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <sys/mman.h>
 | 
						|
 | 
						|
static int
 | 
						|
do_test (void)
 | 
						|
{
 | 
						|
#ifdef HAVE_ASM_UNIQUE_OBJECT
 | 
						|
  void *h1 = dlopen ("tst-unique1mod1.so", RTLD_LAZY);
 | 
						|
  if (h1 == NULL)
 | 
						|
    {
 | 
						|
      puts ("cannot load tst-unique1mod1");
 | 
						|
      return 1;
 | 
						|
    }
 | 
						|
  int *(*f1) (void) = dlsym (h1, "f");
 | 
						|
  if (f1 == NULL)
 | 
						|
    {
 | 
						|
      puts ("cannot locate f in tst-unique1mod1");
 | 
						|
      return 1;
 | 
						|
    }
 | 
						|
  void *h2 = dlopen ("tst-unique1mod2.so", RTLD_LAZY);
 | 
						|
  if (h2 == NULL)
 | 
						|
    {
 | 
						|
      puts ("cannot load tst-unique1mod2");
 | 
						|
      return 1;
 | 
						|
    }
 | 
						|
  int (*f2) (int *) = dlsym (h2, "f");
 | 
						|
  if (f2 == NULL)
 | 
						|
    {
 | 
						|
      puts ("cannot locate f in tst-unique1mod2");
 | 
						|
      return 1;
 | 
						|
    }
 | 
						|
  if (f2 (f1 ()))
 | 
						|
    {
 | 
						|
      puts ("f from tst-unique1mod2 failed");
 | 
						|
      return 1;
 | 
						|
    }
 | 
						|
  dlclose (h2);
 | 
						|
  dlclose (h1);
 | 
						|
  mmap (NULL, 1024 * 1024 * 16, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
 | 
						|
  h2 = dlopen ("tst-unique1mod2.so", RTLD_LAZY);
 | 
						|
  if (h2 == NULL)
 | 
						|
    {
 | 
						|
      puts ("cannot load tst-unique1mod2");
 | 
						|
      return 1;
 | 
						|
    }
 | 
						|
  f2 = dlsym (h2, "f");
 | 
						|
  if (f2 == NULL)
 | 
						|
    {
 | 
						|
      puts ("cannot locate f in tst-unique1mod2");
 | 
						|
      return 1;
 | 
						|
    }
 | 
						|
  h1 = dlopen ("tst-unique1mod1.so", RTLD_LAZY);
 | 
						|
  if (h1 == NULL)
 | 
						|
    {
 | 
						|
      puts ("cannot load tst-unique1mod1");
 | 
						|
      return 1;
 | 
						|
    }
 | 
						|
  f1 = dlsym (h1, "f");
 | 
						|
  if (f1 == NULL)
 | 
						|
    {
 | 
						|
      puts ("cannot locate f in tst-unique1mod1");
 | 
						|
      return 1;
 | 
						|
    }
 | 
						|
  if (f2 (f1 ()))
 | 
						|
    {
 | 
						|
      puts ("f from tst-unique1mod2 failed");
 | 
						|
      return 1;
 | 
						|
    }
 | 
						|
#endif
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
#define TEST_FUNCTION do_test ()
 | 
						|
#include "../test-skeleton.c"
 |