From: Roland McGrath Date: Wed, 6 Apr 2005 02:51:22 +0000 (+0000) Subject: 2005-03-19 Ulrich Drepper X-Git-Tag: cvs/glibc-2_3_5~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=babcdf61b1a2493eb45b5ed9b8faa89d8fe399e7;p=thirdparty%2Fglibc.git 2005-03-19 Ulrich Drepper [BZ #821] * elf/Makefile: Add rules to build and run order2. * elf/order2.c: New file. * elf/order2mod1.c: New file. * elf/order2mod2.c: New file. * elf/order2mod3.c: New file. * elf/order2mod4.c: New file. --- diff --git a/elf/order2.c b/elf/order2.c new file mode 100644 index 00000000000..3dbfdd153e8 --- /dev/null +++ b/elf/order2.c @@ -0,0 +1,46 @@ +#include +#include + + +int call_puts; + +static int +do_test (void) +{ + call_puts = 1; + + void *h1 = dlopen ("$ORIGIN/order2mod1.so", RTLD_LAZY | RTLD_GLOBAL); + if (h1 == NULL) + { + puts ("cannot load order2mod1"); + return 1; + } + void *h2 = dlopen ("$ORIGIN/order2mod2.so", RTLD_LAZY); + if (h2 == NULL) + { + puts ("cannot load order2mod2"); + return 1; + } + if (dlclose (h1) != 0) + { + puts ("dlclose order2mod1 failed"); + return 1; + } + if (dlclose (h2) != 0) + { + puts ("dlclose order2mod2 failed"); + return 1; + } + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + +static void +__attribute__ ((destructor)) +fini (void) +{ + if (call_puts) + puts ("5"); +} diff --git a/elf/order2mod1.c b/elf/order2mod1.c new file mode 100644 index 00000000000..b695db29b70 --- /dev/null +++ b/elf/order2mod1.c @@ -0,0 +1,8 @@ +#include + +static void +__attribute__ ((destructor)) +fini (void) +{ + putchar ('1'); +} diff --git a/elf/order2mod2.c b/elf/order2mod2.c new file mode 100644 index 00000000000..b03fb60fa38 --- /dev/null +++ b/elf/order2mod2.c @@ -0,0 +1,18 @@ +#include + +extern int foo (void); +extern int bar (void); + +void +__attribute__ ((constructor)) +init (void) +{ + foo () - bar (); +} + +static void +__attribute__ ((destructor)) +fini (void) +{ + putchar ('2'); +} diff --git a/elf/order2mod3.c b/elf/order2mod3.c new file mode 100644 index 00000000000..7913a799251 --- /dev/null +++ b/elf/order2mod3.c @@ -0,0 +1,14 @@ +#include + +int +bar (void) +{ + return 1; +} + +static void +__attribute__ ((destructor)) +fini (void) +{ + putchar ('4'); +} diff --git a/elf/order2mod4.c b/elf/order2mod4.c new file mode 100644 index 00000000000..4f2026f0411 --- /dev/null +++ b/elf/order2mod4.c @@ -0,0 +1,16 @@ +#include + +extern int bar (void); + +int +foo (void) +{ + return 42 + bar (); +} + +static void +__attribute__ ((destructor)) +fini (void) +{ + putchar ('3'); +}