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