diff options
author | Roland McGrath <roland@gnu.org> | 2005-04-06 02:51:22 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2005-04-06 02:51:22 +0000 |
commit | babcdf61b1a2493eb45b5ed9b8faa89d8fe399e7 (patch) | |
tree | 10ccf99e330f9f9d0d3e9e8bd11e51aece42d512 /elf | |
parent | 75a67c6432cb2387863012a701edc16690a69287 (diff) |
2005-03-19 Ulrich Drepper <drepper@redhat.com>
[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.
Diffstat (limited to 'elf')
-rw-r--r-- | elf/order2.c | 46 | ||||
-rw-r--r-- | elf/order2mod1.c | 8 | ||||
-rw-r--r-- | elf/order2mod2.c | 18 | ||||
-rw-r--r-- | elf/order2mod3.c | 14 | ||||
-rw-r--r-- | elf/order2mod4.c | 16 |
5 files changed, 102 insertions, 0 deletions
diff --git a/elf/order2.c b/elf/order2.c new file mode 100644 index 0000000000..3dbfdd153e --- /dev/null +++ b/elf/order2.c @@ -0,0 +1,46 @@ +#include <dlfcn.h> +#include <stdio.h> + + +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 0000000000..b695db29b7 --- /dev/null +++ b/elf/order2mod1.c @@ -0,0 +1,8 @@ +#include <stdio.h> + +static void +__attribute__ ((destructor)) +fini (void) +{ + putchar ('1'); +} diff --git a/elf/order2mod2.c b/elf/order2mod2.c new file mode 100644 index 0000000000..b03fb60fa3 --- /dev/null +++ b/elf/order2mod2.c @@ -0,0 +1,18 @@ +#include <stdio.h> + +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 0000000000..7913a79925 --- /dev/null +++ b/elf/order2mod3.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +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 0000000000..4f2026f041 --- /dev/null +++ b/elf/order2mod4.c @@ -0,0 +1,16 @@ +#include <stdio.h> + +extern int bar (void); + +int +foo (void) +{ + return 42 + bar (); +} + +static void +__attribute__ ((destructor)) +fini (void) +{ + putchar ('3'); +} |