From babcdf61b1a2493eb45b5ed9b8faa89d8fe399e7 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 6 Apr 2005 02:51:22 +0000 Subject: [PATCH] 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. --- elf/order2.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ elf/order2mod1.c | 8 ++++++++ elf/order2mod2.c | 18 ++++++++++++++++++ elf/order2mod3.c | 14 ++++++++++++++ elf/order2mod4.c | 16 ++++++++++++++++ 5 files changed, 102 insertions(+) create mode 100644 elf/order2.c create mode 100644 elf/order2mod1.c create mode 100644 elf/order2mod2.c create mode 100644 elf/order2mod3.c create mode 100644 elf/order2mod4.c 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'); +} -- 2.47.2