diff options
author | Zack Weinberg <zackw@panix.com> | 2017-06-08 15:39:03 -0400 |
---|---|---|
committer | Zack Weinberg <zackw@panix.com> | 2017-06-08 15:39:03 -0400 |
commit | 5046dbb4a7eba5eccfd258f92f4735c9ffc8d069 (patch) | |
tree | 4470480d904b65cf14ca524f96f79eca818c3eaf /elf/reldep.c | |
parent | 199fc19d3aaaf57944ef036e15904febe877fc93 (diff) | |
download | glibc-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.c | 111 |
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; -} |