aboutsummaryrefslogtreecommitdiff
path: root/elf/reldep.c
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2017-06-08 15:39:03 -0400
committerZack Weinberg <zackw@panix.com>2017-06-08 15:39:03 -0400
commit5046dbb4a7eba5eccfd258f92f4735c9ffc8d069 (patch)
tree4470480d904b65cf14ca524f96f79eca818c3eaf /elf/reldep.c
parent199fc19d3aaaf57944ef036e15904febe877fc93 (diff)
downloadglibc-zack/build-layout-experiment.tar
glibc-zack/build-layout-experiment.tar.gz
glibc-zack/build-layout-experiment.tar.bz2
glibc-zack/build-layout-experiment.zip
Prepare for radical source tree reorganization.zack/build-layout-experiment
All top-level files and directories are moved into a temporary storage directory, REORG.TODO, except for files that will certainly still exist in their current form at top level when we're done (COPYING, COPYING.LIB, LICENSES, NEWS, README), all old ChangeLog files (which are moved to the new directory OldChangeLogs, instead), and the generated file INSTALL (which is just deleted; in the new order, there will be no generated files checked into version control).
Diffstat (limited to 'elf/reldep.c')
-rw-r--r--elf/reldep.c111
1 files changed, 0 insertions, 111 deletions
diff --git a/elf/reldep.c b/elf/reldep.c
deleted file mode 100644
index adabc0d5d5..0000000000
--- a/elf/reldep.c
+++ /dev/null
@@ -1,111 +0,0 @@
-#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;
-}