mirror of
git://sourceware.org/git/glibc.git
synced 2024-12-15 04:20:28 +08:00
7237d70417
* stdlib/cxa_atexit.c (__new_exitfn): Rewrite to preserve order in which the functions were registered. * dlfcn/Makefile: Add rules to build and run bug-atexit1 and bug-atexit2. * dlfcn/bug-atext1.c: New file. * dlfcn/bug-atext1-lib.c: New file. * dlfcn/bug-atext2.c: New file. * dlfcn/bug-atext2-lib.c: New file.
54 lines
725 B
C
54 lines
725 B
C
/* Derived from a test case in
|
|
http://sourceware.org/bugzilla/show_bug.cgi?id=1158. */
|
|
#include <dlfcn.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
|
|
static int next = 3;
|
|
|
|
static void
|
|
f1 (void)
|
|
{
|
|
puts ("f1");
|
|
if (next-- != 1)
|
|
_exit (1);
|
|
}
|
|
|
|
static void
|
|
f2 (void)
|
|
{
|
|
puts ("f2");
|
|
if (next-- != 2)
|
|
_exit (1);
|
|
}
|
|
|
|
static void
|
|
f3 (void)
|
|
{
|
|
puts ("f3");
|
|
if (next-- != 3)
|
|
_exit (1);
|
|
}
|
|
|
|
static int
|
|
do_test (void)
|
|
{
|
|
atexit (f1);
|
|
|
|
void *dso = dlopen ("$ORIGIN/bug-atexit2-lib.so", RTLD_NOW);
|
|
void (*fn) (void) = (void (*) (void)) dlsym (dso, "foo");
|
|
fn ();
|
|
|
|
atexit (f2);
|
|
|
|
dlclose (dso);
|
|
|
|
atexit (f3);
|
|
|
|
return 0;
|
|
}
|
|
|
|
#define TEST_FUNCTION do_test ()
|
|
#include "../test-skeleton.c"
|