]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - elf/nodelete.c
install.texi: Build was tested with binutils 2.41 (just released)
[thirdparty/glibc.git] / elf / nodelete.c
index f8abe1ff9f90945fc78c84f7658d010038212612..c8d71152f2ff2f28cb967ffdb4af4d2c4abc5569 100644 (file)
@@ -7,14 +7,17 @@
 static sigjmp_buf jmpbuf;
 
 
+int fini_ran;
+
+
 static void
+__attribute__ ((noreturn))
 handler (int sig)
 {
   siglongjmp (jmpbuf, 1);
 }
 
 
-#define TEST_FUNCTION do_test ()
 static int
 do_test (void)
 {
@@ -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");
            }
@@ -186,4 +207,4 @@ do_test (void)
   return result;
 }
 
-#include "../test-skeleton.c"
+#include <support/test-driver.c>