Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
* 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.
  • Loading branch information
Ulrich Drepper committed Mar 19, 2005
1 parent a2f7570 commit 3d786f1
Show file tree
Hide file tree
Showing 7 changed files with 128 additions and 3 deletions.
9 changes: 9 additions & 0 deletions ChangeLog
@@ -1,3 +1,12 @@
2005-03-19 Ulrich Drepper <drepper@redhat.com>

* 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.

2005-03-19 Jakub Jelinek <jakub@redhat.com>

* elf/dl-open.c (dl_open_worker): Print exact l_direct_opencount value,
Expand Down
20 changes: 17 additions & 3 deletions elf/Makefile
Expand Up @@ -86,7 +86,8 @@ distribute := rtld-Rules \
tst-deep1mod1.c tst-deep1mod2.c tst-deep1mod3.c \
unload3mod1.c unload3mod2.c unload3mod3.c unload3mod4.c \
unload4mod1.c unload4mod2.c unload4mod3.c unload4mod4.c \
tst-auditmod1.c
tst-auditmod1.c \
order2mod1.c order2mod2.c order2mod3.c order2mod4.c

CFLAGS-dl-runtime.c = -fexceptions -fasynchronous-unwind-tables
CFLAGS-dl-lookup.c = -fexceptions -fasynchronous-unwind-tables
Expand Down Expand Up @@ -161,7 +162,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
tst-tls10 tst-tls11 tst-tls12 tst-tls13 tst-tls14 tst-align \
tst-align2 $(tests-execstack-$(have-z-execstack)) tst-dlmodcount \
tst-dlopenrpath tst-deep1 tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \
unload3 unload4 unload5 tst-audit1 tst-global1
unload3 unload4 unload5 tst-audit1 tst-global1 order2
# reldep9
test-srcs = tst-pathopt
tests-vis-yes = vismain
Expand Down Expand Up @@ -198,7 +199,8 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
tst-dlopenrpathmod tst-deep1mod1 tst-deep1mod2 tst-deep1mod3 \
tst-dlmopen1mod tst-auditmod1 \
unload3mod1 unload3mod2 unload3mod3 unload3mod4 \
unload4mod1 unload4mod2 unload4mod3 unload4mod4
unload4mod1 unload4mod2 unload4mod3 unload4mod4 \
order2mod1 order2mod2 order2mod3 order2mod4
ifeq (yes,$(have-initfini-array))
modules-names += tst-array2dep
endif
Expand Down Expand Up @@ -816,3 +818,15 @@ tst-audit1-ENV = LD_AUDIT=$(objpfx)tst-auditmod1.so

$(objpfx)tst-global1: $(libdl)
$(objpfx)tst-global1.out: $(objpfx)testobj6.so $(objpfx)testobj2.so

$(objpfx)order2: $(libdl)
$(objpfx)order2.out: $(objpfx)order2 $(objpfx)order2mod1.so \
$(objpfx)order2mod2.so
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$(objpfx)order2 > $@
(echo "12345" | cmp $@ -) > /dev/null
$(objpfx)order2mod1.so: $(objpfx)order2mod4.so
$(objpfx)order2mod4.so: $(objpfx)order2mod3.so
$(objpfx)order2mod2.so: $(objpfx)order2mod3.so
order2mod2.so-no-z-defs = yes
46 changes: 46 additions & 0 deletions 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");
}
8 changes: 8 additions & 0 deletions elf/order2mod1.c
@@ -0,0 +1,8 @@
#include <stdio.h>

static void
__attribute__ ((destructor))
fini (void)
{
putchar ('1');
}
18 changes: 18 additions & 0 deletions 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');
}
14 changes: 14 additions & 0 deletions elf/order2mod3.c
@@ -0,0 +1,14 @@
#include <stdio.h>

int
bar (void)
{
return 1;
}

static void
__attribute__ ((destructor))
fini (void)
{
putchar ('4');
}
16 changes: 16 additions & 0 deletions 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');
}

0 comments on commit 3d786f1

Please sign in to comment.