diff options
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"); } |