3 # Copyright (C) 2000-2008 Erik Andersen <andersen@uclibc.org>
5 # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
8 subdirs
+= ldso
/ldso
/$(TARGET_ARCH
)
10 CFLAGS-rtld
:= -DNOT_IN_libc
-DIS_IN_rtld
$(SSP_DISABLE_FLAGS
)
12 ifneq ($(TARGET_ARCH
),arc
)
13 # This stuff will not work with -fomit-frame-pointer
14 CFLAGS-rtld
+= -fno-omit-frame-pointer
18 ifeq ($(TARGET_ARCH
),arm
)
19 # This stuff will not work with -funwind-tables / -fasynchronous-unwind-tables
20 CFLAGS-rtld
+= -fno-unwind-tables
-fno-asynchronous-unwind-tables
24 CFLAGS-rtld
+= -I
$(top_srcdir
)ldso
/ldso
/$(TARGET_ARCH
) -I
$(top_srcdir
)ldso
/include -I
$(top_srcdir
)ldso
/ldso
25 CFLAGS-rtld
+= -DUCLIBC_RUNTIME_PREFIX
=\"$(RUNTIME_PREFIX
)\" -DUCLIBC_LDSO
=\"$(UCLIBC_LDSO
)\"
27 # Not really much point in including debugging info, since gdb
28 # can't really debug ldso, since gdb requires help from ldso to
30 # On arm, gcc-4.3.x onwards -Os emits calls to libgcc, which calls _div0,
31 # which tries to call raise(). And raise comes from libc so a catch 22.
32 # Using -O2 instead. We could have use -fno-early-inlining with -Os too.
33 CFLAGS-
$(DODEBUG
)-ldso
/ldso
:= -O2
-g
35 CFLAGS-ldso.c
:= -DLDSO_ELFINTERP
=\"$(TARGET_ARCH
)/elfinterp.c
\"
37 # Search non-default multilib directories
38 ifneq ($(MULTILIB_DIR
),lib
)
39 CFLAGS-ldso.c
+= -DLDSO_MULTILIB_DIR
=\"$(MULTILIB_DIR
)\"
42 ifeq ($(TARGET_ARCH
),arc
)
43 CFLAGS-ldso.c
+= -mno-long-calls
46 LDFLAGS-
$(UCLIBC_FORMAT_DSBT_ELF
)-$(UCLIBC_LDSO_NAME
).so
:= -Wl
,--dsbt-index
=1
47 ifneq ($(SUPPORT_LD_DEBUG
),y
)
48 LDFLAGS-
$(UCLIBC_LDSO_NAME
).so
:= $(LDFLAGS
)
50 LDFLAGS-
$(UCLIBC_LDSO_NAME
).so
:= $(LDFLAGS_NOSTRIP
) -Wl
,-z
,defs
52 LDFLAGS-
$(UCLIBC_LDSO_NAME
).so
+= -Wl
,-e
,$(SYMBOL_PREFIX
)_start \
53 -Wl
,-z
,now
-Wl
,-Bsymbolic \
54 -Wl
,--export-dynamic
$(CFLAG_-Wl--sort-common
) -Wl
,--no-undefined
57 LDFLAGS-
$(UCLIBC_LDSO_NAME
).so
+= -Wl
,--discard-locals
$(CFLAG_-Wl--discard-all
)
60 LDFLAGS-
$(LDSO_PRELINK_SUPPORT
)-$(UCLIBC_LDSO_NAME
).so
+= -Wl
,-defsym
=$(SYMBOL_PREFIX
)_begin
=0
62 ldso_FULL_NAME
:= $(UCLIBC_LDSO_NAME
)-$(VERSION
).so
64 $(UCLIBC_LDSO_NAME
)_DIR
:= $(top_srcdir
)ldso
/ldso
65 $(UCLIBC_LDSO_NAME
)_OUT
:= $(top_builddir
)ldso
/ldso
67 $(UCLIBC_LDSO_NAME
)_CSRC
:= $($(UCLIBC_LDSO_NAME
)_DIR
)/ldso.c
69 $($(UCLIBC_LDSO_NAME
)_OUT
)/ldso.o
$($(UCLIBC_LDSO_NAME
)_OUT
)/ldso.oS
: \
70 $($(UCLIBC_LDSO_NAME
)_DIR
)/dl-debug.c \
71 $($(UCLIBC_LDSO_NAME
)_DIR
)/dl-startup.c \
72 $($(UCLIBC_LDSO_NAME
)_DIR
)/dl-array.c \
73 $($(UCLIBC_LDSO_NAME
)_DIR
)/dl-hash.c \
74 $($(UCLIBC_LDSO_NAME
)_DIR
)/dl-elf.c
75 $(UCLIBC_LDSO_NAME
)_COBJ
:= $(patsubst $($(UCLIBC_LDSO_NAME
)_DIR
)/%.c
,$($(UCLIBC_LDSO_NAME
)_OUT
)/%.o
,$($(UCLIBC_LDSO_NAME
)_CSRC
))
77 $(UCLIBC_LDSO_NAME
)_SSRC
:= $(wildcard $($(UCLIBC_LDSO_NAME
)_DIR
)/$(TARGET_ARCH
)/*.S
)
78 $(UCLIBC_LDSO_NAME
)_SOBJ
:= $(patsubst $($(UCLIBC_LDSO_NAME
)_DIR
)/$(TARGET_ARCH
)/%.S
,$($(UCLIBC_LDSO_NAME
)_OUT
)/$(TARGET_ARCH
)/%.o
,$($(UCLIBC_LDSO_NAME
)_SSRC
))
80 $(UCLIBC_LDSO_NAME
)_OBJS
:= $($(UCLIBC_LDSO_NAME
)_COBJ
) $($(UCLIBC_LDSO_NAME
)_SOBJ
)
82 ldso-y
:= $($(UCLIBC_LDSO_NAME
)_OBJS
:.o
=.oS
)
85 objclean-y
+= CLEAN_ldso
/ldso
87 $(ldso
): $(ldso
:.
$(ABI_VERSION
)=)
88 $(ldso
:.
$(ABI_VERSION
)=): |
$(top_builddir
)lib
89 $(ldso
:.
$(ABI_VERSION
)=): $($(UCLIBC_LDSO_NAME
)_OUT
)/$(UCLIBC_LDSO_NAME
)_so.a
90 $(call link.so
,$(ldso_FULL_NAME
),$(ABI_VERSION
))
91 # link for backward compatibility
92 (cd
$(top_builddir
)lib
; ln
-sf
$(UCLIBC_LDSO_NAME
).so.
$(ABI_VERSION
) $(UCLIBC_LDSO_NAME
).so
.0 )
93 ifeq ($(CONFIG_MIPS_NAN_2008
),y
)
94 (cd
$(top_builddir
)lib
; ln
-sf
$(UCLIBC_LDSO_NAME
).so.
$(ABI_VERSION
) $(UCLIBC_LDSO_NAME
)-mipsn8.so
.0)
97 $($(UCLIBC_LDSO_NAME
)_OUT
)/$(UCLIBC_LDSO_NAME
)_so.a
: $(ldso-y
)
102 $(do_rm
) $(addprefix $($(UCLIBC_LDSO_NAME
)_OUT
)/,$(foreach e
, o os oS a
,$(foreach d
, *.
*/*.
,$(d
)$(e
))))