diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-08-25 19:33:19 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-08-25 19:33:19 +0000 |
commit | ad7534c8f08c31f3e140a31e4099e7e0b5e193d2 (patch) | |
tree | 311f04ac9b09f2b4f5fea5aad8ab6de18e05dc38 /elf/nodelete.c | |
parent | Update. (diff) | |
download | glibc-ad7534c8f08c31f3e140a31e4099e7e0b5e193d2.tar.gz glibc-ad7534c8f08c31f3e140a31e4099e7e0b5e193d2.tar.bz2 glibc-ad7534c8f08c31f3e140a31e4099e7e0b5e193d2.zip |
Update.
2000-08-25 Ulrich Drepper <drepper@redhat.com>
* elf/Makefile (LDFLAGS-nodelete): Add -rdynamic.
* elf/nodelete.c (fini_ran): New global variable.
(do_test): Before every dlclose call clear fini_ran and test
afterwards that it is not set by the destructors.
* elf/nodelmod1.c: Add destructor which sets fini_ran.
* elf/nodelmod2.c: Likewise.
* elf/nodelmod4.c: Likewise.
Diffstat (limited to 'elf/nodelete.c')
-rw-r--r-- | elf/nodelete.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/elf/nodelete.c b/elf/nodelete.c index f8abe1ff9f..bf1f0d9291 100644 --- a/elf/nodelete.c +++ b/elf/nodelete.c @@ -7,6 +7,9 @@ static sigjmp_buf jmpbuf; +int fini_ran; + + static void handler (int sig) { @@ -60,6 +63,7 @@ do_test (void) *varp = 20000720; /* Now close the object. */ + fini_ran = 0; if (dlclose (p) != 0) { puts ("failed to close \"nodelmod1.so\""); @@ -73,6 +77,11 @@ do_test (void) puts ("\"var1\" value not correct"); result = 1; } + else if (fini_ran != 0) + { + puts ("destructor of \"nodelmod1.so\" ran"); + result = 1; + } else puts ("-z nodelete test succeeded"); } @@ -108,6 +117,7 @@ do_test (void) *varp = 42; /* Now close the object. */ + fini_ran = 0; if (dlclose (p) != 0) { puts ("failed to close \"nodelmod2.so\""); @@ -121,6 +131,11 @@ do_test (void) puts ("\"var2\" value not correct"); result = 1; } + else if (fini_ran != 0) + { + puts ("destructor of \"nodelmod2.so\" ran"); + result = 1; + } else puts ("RTLD_NODELETE test succeeded"); } @@ -158,6 +173,7 @@ do_test (void) *varp = -1; /* Now close the object. */ + fini_ran = 0; if (dlclose (p) != 0) { puts ("failed to close \"nodelmod3.so\""); @@ -171,6 +187,11 @@ do_test (void) puts ("\"var_in_mod4\" value not correct"); result = 1; } + else if (fini_ran != 0) + { + puts ("destructor of \"nodelmod4.so\" ran"); + result = 1; + } else puts ("-z nodelete in dependency succeeded"); } |