summaryrefslogtreecommitdiff
path: root/test/dlopen/Makefile.in
blob: 0bed0f7491e43678035599b3d1050f7ddeb95750 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# uClibc dlopen tests
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.

# rules need a little love to work with glibc ...
export UCLIBC_ONLY := 1

TESTS := dltest dltest2 dlstatic test1 test2 test3 dlundef dlafk dladdr \
	testscope nodelete tst-origin

ifneq ($(HAVE_SHARED),y)
TESTS_DISABLED := test3
LDFLAGS_libtest.so := -lpthread
endif

CFLAGS_dltest    := -DLIBNAME="\"./libtest.so\""
CFLAGS_dltest2   := -DLIBNAME="\"./libtest3.so\""

LDFLAGS_dlstatic := -ldl
LDFLAGS_dltest   := -ldl
LDFLAGS_dltest2  := -ldl
LDFLAGS_dlundef  := -ldl
LDFLAGS_dlafk    := -ldl ./libafk.so -Wl,-rpath,.
LDFLAGS_test1    := -ldl
LDFLAGS_test2    := -ldl
LDFLAGS_test3    := -ldl ./libtest1.so ./libtest2.so -Wl,-rpath,.
LDFLAGS_dladdr   := -ldl
LDFLAGS_testscope:= -ldl
LDFLAGS_tst-origin:= -ldl -Wl,-rpath,\$$ORIGIN/testlib

DEBUG_LIBS := X
WRAPPER := env $(DEBUG_LIBS)=all LD_LIBRARY_PATH="$$PWD:.:$(LD_LIBRARY_PATH)"

testlib:
	@mkdir $@

testlib/libtest31.so: libtest3.so | testlib
	@cp $^ $@

EXTRA_DIRS := testlib

# Build libC.so without -mprefergot compilation flag to force a
# R_SH_JMP_SLOT relocation instead of R_SH_GLOB_DAT for _libC_fini. This is
# needed to resolve the _libC_fini symbol when used (by libC.so destructor),
# whereas with GLOB_DAT relocation the resolution happens in the GOT entry
# when the libC is loaded, for the same reason remove also the "-z now"
# linker flag.
# These are needed to spot the issue test case want raise.

ifeq ($(TARGET_ARCH),sh)
CFLAGS-OMIT-libC.c = -mprefergot
endif
LDFLAGS-OMIT-libC.c = -Wl,-z,now

dltest: libtest.so
dltest2: libtest3.so
dlstatic: libstatic.so
dlundef: libundef.so
dlafk: libafk.so
testscope:libA.so
libafk.so: libafk-temp.so
LDFLAGS_libafk.so := ./libafk-temp.so -Wl,-rpath,.
test1: libtest1.so
test2: libtest1.so libtest2.so
test3: libtest1.so libtest2.so
tst-origin: testlib/libtest31.so
libtest1.so: libtest2.so
libB.so: libC.so
libA.so: libB.so
LDFLAGS_libtest.so := -lpthread
LDFLAGS_libtest1.so := ./libtest2.so -Wl,-rpath,.
LDFLAGS_libtest2.so := -Wl,-rpath,.
LDFLAGS_libtest3.so := -lpthread -Wl,-rpath,.
LDFLAGS_libC.so := -ldl
LDFLAGS_libB.so := ./libC.so -Wl,-rpath,.
LDFLAGS_libA.so := ./libB.so -Wl,-rpath,.

nodelete: nodelmod1.so nodelmod2.so nodelmod3.so
nodelmod3.so: nodelmod4.so
LDFLAGS_nodelete := -rdynamic -ldl
LDFLAGS_nodelmod1.so := -Wl,-z,nodelete
LDFLAGS_nodelmod3.so := ./nodelmod4.so
LDFLAGS_nodelmod4.so := -Wl,-z,nodelete