mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 14:50:05 +00:00
* 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.
This commit is contained in:
parent
a2f7570bdd
commit
3d786f1969
@ -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,
|
||||
|
20
elf/Makefile
20
elf/Makefile
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
elf/order2.c
Normal file
46
elf/order2.c
Normal file
@ -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
elf/order2mod1.c
Normal file
8
elf/order2mod1.c
Normal file
@ -0,0 +1,8 @@
|
||||
#include <stdio.h>
|
||||
|
||||
static void
|
||||
__attribute__ ((destructor))
|
||||
fini (void)
|
||||
{
|
||||
putchar ('1');
|
||||
}
|
18
elf/order2mod2.c
Normal file
18
elf/order2mod2.c
Normal file
@ -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
elf/order2mod3.c
Normal file
14
elf/order2mod3.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
bar (void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
__attribute__ ((destructor))
|
||||
fini (void)
|
||||
{
|
||||
putchar ('4');
|
||||
}
|
16
elf/order2mod4.c
Normal file
16
elf/order2mod4.c
Normal file
@ -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');
|
||||
}
|
Loading…
Reference in New Issue
Block a user