xref: /freebsd/libexec/rtld-elf/Makefile (revision fd4cdc438b7740007b06ea97431cc724e9aae185)
1d3b06cf2SKonstantin Belousov# Use the following command to build local debug version of dynamic
2d3b06cf2SKonstantin Belousov# linker:
3e3e21edbSKonstantin Belousov# make DEBUG_FLAGS=-g WITHOUT_TESTS=yes all
4d3b06cf2SKonstantin Belousov
5a4330302SBrooks DavisRTLD_ELF_DIR:=	${.PARSEDIR}
6a4330302SBrooks Davis
7c6063d0dSWarner Losh.include <src.opts.mk>
8c389411cSGlen BarberPACKAGE=	clibs
9bcf99d2dSEd MasteMK_PIE=		no # Always position independent using local rules
107bc797e3SAlex Richardson# Not compatible with sanitizer instrumentation or SSP.
117bc797e3SAlex RichardsonMK_ASAN=	no
12d9ca85fcSRuslan ErmilovMK_SSP=		no
137bc797e3SAlex RichardsonMK_UBSAN=	no
1400fb440cSDaniel Eischen
15195e5054SJessica Clarke.include <bsd.compat.pre.mk>
16195e5054SJessica Clarke
179bfd3b40SKyle Evans# SSP forced off already implies FORTIFY_SOURCE=0, but we must make sure that
189bfd3b40SKyle Evans# one cannot turn it back on.
199bfd3b40SKyle EvansFORTIFY_SOURCE=	0
209bfd3b40SKyle Evans
21d0f0e0bdSEmmanuel Vadot.if !defined(NEED_COMPAT)
229a537769SBrad DavisCONFS=		libmap.conf
23d0f0e0bdSEmmanuel Vadot.endif
24c905e45dSPeter WemmPROG?=		ld-elf.so.1
25195e5054SJessica Clarke.for _libcompat in ${_ALL_libcompats}
26195e5054SJessica Clarke.if ${PROG:M*ld-elf${_libcompat}[-.]*} != ""
27195e5054SJessica ClarkeTAGS+=		lib${_libcompat}
28c389411cSGlen Barber.endif
29195e5054SJessica Clarke.endfor
30d49ca25dSKonstantin BelousovSRCS= \
31e9751a84SJohn Baldwin	crtbrand.S \
32d49ca25dSKonstantin Belousov	rtld_start.S \
33d49ca25dSKonstantin Belousov	reloc.c \
34d49ca25dSKonstantin Belousov	rtld.c \
35d49ca25dSKonstantin Belousov	rtld_lock.c \
36d49ca25dSKonstantin Belousov	rtld_malloc.c \
37d49ca25dSKonstantin Belousov	rtld_printf.c \
38d49ca25dSKonstantin Belousov	map_object.c \
39d49ca25dSKonstantin Belousov	xmalloc.c \
40d49ca25dSKonstantin Belousov	debug.c \
41d49ca25dSKonstantin Belousov	libmap.c
42a4330302SBrooks DavisMAN?=		rtld.1
43e9751a84SJohn BaldwinACFLAGS+=	-DLOCORE
444a3cf5f3SJohn BaldwinCFLAGS+=	-Wall -DIN_RTLD -ffreestanding
453c89d6b0SBryan DreweryCFLAGS+=	-I${SRCTOP}/lib/csu/common
4624faccc2SBrandon Bergren.if exists(${RTLD_ELF_DIR}/${MACHINE_ARCH:S/powerpc64le/powerpc64/})
4724faccc2SBrandon BergrenRTLD_ARCH=	${MACHINE_ARCH:S/powerpc64le/powerpc64/}
48789e8545SNathan Whitehorn.else
49789e8545SNathan WhitehornRTLD_ARCH=	${MACHINE_CPUARCH}
50789e8545SNathan Whitehorn.endif
51a4330302SBrooks DavisCFLAGS+=	-I${RTLD_ELF_DIR}/${RTLD_ARCH} -I${RTLD_ELF_DIR}
52903e0ffdSAlex Richardson
53903e0ffdSAlex RichardsonNO_WCAST_ALIGN=	yes
54dee651ebSRuslan ErmilovINSTALLFLAGS=	-C -b
55dee651ebSRuslan ErmilovPRECIOUSPROG=
56f31c1e3fSPawel Jakub DawidekBINDIR=		/libexec
57ce9f2d31SRodney W. GrimesSYMLINKS=	../..${BINDIR}/${PROG} ${LIBEXECDIR}/${PROG}
58051ed84fSBrooks DavisMLINKS?=	rtld.1 ld-elf.so.1.1 \
59d9943f16SAlexey Zelkin		rtld.1 ld.so.1
6013575fc4SDoug Rabson
617e3300e5SKonstantin BelousovCFLAGS+=	-fpic -DPIC $(DEBUG)
627838a782SMichal Meloun
637e3300e5SKonstantin BelousovLDFLAGS+=	-shared -Wl,-Bsymbolic -Wl,-z,defs -nostdlib -e ${RTLD_ENTRY}
64b54a59f3SAlex Richardson# Pull in the dependencies that we use from libc
65b54a59f3SAlex Richardson.include "rtld-libc/Makefile.inc"
667ca8e6a6SAlexander Kabaev
673c89d6b0SBryan DreweryVERSION_DEF=	${LIBCSRCDIR}/Versions.def
68a4330302SBrooks DavisSYMBOL_MAPS=	${RTLD_ELF_DIR}/Symbol.map
697ca8e6a6SAlexander KabaevVERSION_MAP=	Version.map
707ca8e6a6SAlexander KabaevLDFLAGS+=	-Wl,--version-script=${VERSION_MAP}
717ca8e6a6SAlexander Kabaev
72a4330302SBrooks Davis.if exists(${RTLD_ELF_DIR}/${RTLD_ARCH}/Symbol.map)
73a4330302SBrooks DavisSYMBOL_MAPS+=	${RTLD_ELF_DIR}/${RTLD_ARCH}/Symbol.map
747ca8e6a6SAlexander Kabaev.endif
75d5b537d0SJohn Polstra
76a4330302SBrooks Davis.sinclude "${RTLD_ELF_DIR}/${RTLD_ARCH}/Makefile.inc"
777e3300e5SKonstantin BelousovRTLD_ENTRY?=	.rtld_start
783124c3e0SJohn Polstra
7979994015SKonstantin Belousov# Always produce the map file so that may be inspected to confirm
8079994015SKonstantin Belousov# undesired code is not linked from libsys/libc.
8179994015SKonstantin BelousovMAPFILE=	ld-elf.so.1.map
8279994015SKonstantin BelousovLDFLAGS+=	-Wl,-Map=${MAPFILE} -Wl,--cref
8379994015SKonstantin BelousovCLEANFILES+=	${MAPFILE}
8479994015SKonstantin Belousov
855db5c6c8SKonstantin Belousovafterbuild:
865db5c6c8SKonstantin Belousov	@if grep __libsys_interposing ${MAPFILE} >/dev/null ; then \
875db5c6c8SKonstantin Belousov		echo "libsys_interposing leaked" 1>&2 ; \
885db5c6c8SKonstantin Belousov		exit 1 ; \
895db5c6c8SKonstantin Belousov	fi
905db5c6c8SKonstantin Belousov	@if grep __libc_interposing ${MAPFILE} >/dev/null ; then \
915db5c6c8SKonstantin Belousov		echo "libc_interposing leaked" 1>&2 ; \
925db5c6c8SKonstantin Belousov		exit 1 ; \
935db5c6c8SKonstantin Belousov	fi
945db5c6c8SKonstantin Belousov	@if grep xlocale ${MAPFILE} >/dev/null ; then \
955db5c6c8SKonstantin Belousov		echo "xlocale leaked" 1>&2 ; \
965db5c6c8SKonstantin Belousov		exit 1 ; \
975db5c6c8SKonstantin Belousov	fi
985db5c6c8SKonstantin Belousov	@if grep fprintf ${MAPFILE} >/dev/null ; then \
995db5c6c8SKonstantin Belousov		echo "stdio leaked" 1>&2 ; \
1005db5c6c8SKonstantin Belousov		exit 1 ; \
1015db5c6c8SKonstantin Belousov	fi
1025db5c6c8SKonstantin Belousov
1035db5c6c8SKonstantin Belousov
104a857d930SGordon Tetlow# Since moving rtld-elf to /libexec, we need to create a symlink.
105a857d930SGordon Tetlow# Fixup the existing binary that's there so we can symlink over it.
106a857d930SGordon Tetlowbeforeinstall:
1071508ab98SBryan Drewery.if exists(${DESTDIR}/usr/libexec/${PROG}) && ${MK_STAGING} == "no"
108456b64c4SPawel Jakub Dawidek	-chflags -h noschg ${DESTDIR}/usr/libexec/${PROG}
1091b1aa7e4SRuslan Ermilov.endif
110a857d930SGordon Tetlow
111e9751a84SJohn Baldwin.PATH: ${RTLD_ELF_DIR}/${RTLD_ARCH} ${SRCTOP}/lib/csu/common
1123124c3e0SJohn Polstra
113a4330302SBrooks Davis.if ${.CURDIR} == ${RTLD_ELF_DIR}
114d511b20aSEnji CooperHAS_TESTS=
1154b330699SEnji CooperSUBDIR.${MK_TESTS}+= tests
116a4330302SBrooks Davis.endif
1176b22f423SJonathan Anderson
11863f93c7eSRyan Libby# Some of the required math functions (div & mod) are implemented in
11963f93c7eSRyan Libby# libcompiler_rt on some architectures.
12063f93c7eSRyan LibbyLIBADD+=	compiler_rt
12163f93c7eSRyan Libby
1223124c3e0SJohn Polstra.include <bsd.prog.mk>
123e7debdcbSBryan Drewery${PROG_FULL}:	${VERSION_MAP}
124056b7d85SBryan Drewery.include <bsd.symver.mk>
125903e0ffdSAlex Richardson
1263ab5b6bdSAlex Richardson.if ${COMPILER_TYPE} == "gcc"
1273ab5b6bdSAlex Richardson# GCC warns about redeclarations even though they have __exported
1283ab5b6bdSAlex Richardson# and are therefore not identical to the ones from the system headers.
1293ab5b6bdSAlex RichardsonCFLAGS+=	-Wno-redundant-decls
1303ab5b6bdSAlex Richardson.endif
131*fd4cdc43SBrooks Davis
132*fd4cdc43SBrooks Davis# Add dependencies on libc and libsys archives after bsd.prog.mk
133*fd4cdc43SBrooks Davis# includes bsd.libnames.mk so they are defined.
134*fd4cdc43SBrooks Davisrtld_libc.a: ${LIBC_NOSSP_PIC} ${LIBSYS_PIC}
135