glibc/elf/restest1.c
Ulrich Drepper 752a2a50d4 Update.
2000-08-19  Ulrich Drepper  <drepper@redhat.com>

	* elf/Versions [ld] (GLIBC_2.2): Export _dl_check_map_versions.
	* elf/dl-deps.c (_dl_map_object_deps): If object was dependency of
	a dynamically loaded object remove old l_initfini list.
	* elf/dl-libc.c (free_mem): Used as __libc_subfreeres callback to
	remove some dynamically allocated memory blocks in the dynamic
	loading data structures.
	* elf/dl-load.c (add_name_to_object): Initialize dont_free to 0.
	* elf/dl-open.c (dl_open_workder): Don't call _dl_check_all_versions.
	Instead call _dl_check_map_versions only for the dependencies.
	* elf/rtld.c: Avoid unneccessary initializations.  Mark l_libname
	information of initial objects as not free-able.
	* sysdeps/generic/ldsodefs.h (struct libname_list): Add dont_free
	element.

	* elf/filter.c: Call mtrace.
	* elf/restest1.c: Likewise.  Close the objects.
	* elf/loadtest.c: Call mtrace.  Check result of dlclose.  Print more
	debug information.

	* elf/constload1.c: Add comment explaining not freed memory.
2000-08-19 07:17:09 +00:00

57 lines
1.2 KiB
C

#include <dlfcn.h>
#include <error.h>
#include <mcheck.h>
#include <stdio.h>
#include <stdlib.h>
int
main (void)
{
void *h1;
int (*fp1) (int);
void *h2;
int (*fp2) (int);
int res1;
int res2;
mtrace ();
h1 = dlopen ("testobj1.so", RTLD_LAZY);
if (h1 == NULL)
error (EXIT_FAILURE, 0, "while loading `%s': %s", "testobj1.so",
dlerror ());
h2 = dlopen ("testobj1_1.so", RTLD_LAZY);
if (h1 == NULL)
error (EXIT_FAILURE, 0, "while loading `%s': %s", "testobj1_1.so",
dlerror ());
fp1 = dlsym (h1, "obj1func1");
if (fp1 == NULL)
error (EXIT_FAILURE, 0, "getting `obj1func1' in `%s': %s",
"testobj1.so", dlerror ());
fp2 = dlsym (h2, "obj1func1");
if (fp2 == NULL)
error (EXIT_FAILURE, 0, "getting `obj1func1' in `%s': %s",
"testobj1_1.so", dlerror ());
res1 = fp1 (10);
res2 = fp2 (10);
printf ("fp1(10) = %d\nfp2(10) = %d\n", res1, res2);
if (dlclose (h1) != 0)
error (EXIT_FAILURE, 0, "cannot close testobj1.so: %s\n", dlerror ());
if (dlclose (h2) != 0)
error (EXIT_FAILURE, 0, "cannot close testobj1_1.so: %s\n", dlerror ());
return res1 != 42 || res2 != 72;
}
int
foo (int a)
{
return a + 10;
}