1# $FreeBSD$ 2 3# Use the following command to build local debug version of dynamic 4# linker: 5# make DEBUG_FLAGS=-g WITHOUT_TESTS=yes all 6 7RTLD_ELF_DIR:= ${.PARSEDIR} 8 9.include <src.opts.mk> 10PACKAGE= clibs 11MK_PIE= no # Always position independent using local rules 12MK_SSP= no 13 14CONFS= libmap.conf 15PROG?= ld-elf.so.1 16.if (${PROG:M*ld-elf32*} != "") 17TAGS+= lib32 18.endif 19SRCS= \ 20 rtld_start.S \ 21 reloc.c \ 22 rtld.c \ 23 rtld_lock.c \ 24 rtld_malloc.c \ 25 rtld_printf.c \ 26 map_object.c \ 27 xmalloc.c \ 28 debug.c \ 29 libmap.c 30MAN?= rtld.1 31CSTD?= gnu99 32CFLAGS+= -Wall -DFREEBSD_ELF -DIN_RTLD -ffreestanding 33CFLAGS+= -I${SRCTOP}/lib/csu/common 34.if exists(${RTLD_ELF_DIR}/${MACHINE_ARCH}) 35RTLD_ARCH= ${MACHINE_ARCH} 36.else 37RTLD_ARCH= ${MACHINE_CPUARCH} 38.endif 39CFLAGS+= -I${RTLD_ELF_DIR}/${RTLD_ARCH} -I${RTLD_ELF_DIR} 40 41NO_WCAST_ALIGN= yes 42WARNS?= 6 43INSTALLFLAGS= -C -b 44PRECIOUSPROG= 45BINDIR= /libexec 46SYMLINKS= ../..${BINDIR}/${PROG} ${LIBEXECDIR}/${PROG} 47MLINKS?= rtld.1 ld-elf.so.1.1 \ 48 rtld.1 ld.so.1 49 50CFLAGS+= -fpic -DPIC $(DEBUG) 51LDFLAGS+= -shared -Wl,-Bsymbolic -Wl,-z,defs -nostdlib -e ${RTLD_ENTRY} 52# Pull in the dependencies that we use from libc 53.include "rtld-libc/Makefile.inc" 54.if ${MK_TOOLCHAIN} == "no" 55LDFLAGS+= -L${LIBCDIR} 56.endif 57 58VERSION_DEF= ${LIBCSRCDIR}/Versions.def 59SYMBOL_MAPS= ${RTLD_ELF_DIR}/Symbol.map 60VERSION_MAP= Version.map 61LDFLAGS+= -Wl,--version-script=${VERSION_MAP} 62 63.if exists(${RTLD_ELF_DIR}/${RTLD_ARCH}/Symbol.map) 64SYMBOL_MAPS+= ${RTLD_ELF_DIR}/${RTLD_ARCH}/Symbol.map 65.endif 66 67.sinclude "${RTLD_ELF_DIR}/${RTLD_ARCH}/Makefile.inc" 68RTLD_ENTRY?= .rtld_start 69 70# Since moving rtld-elf to /libexec, we need to create a symlink. 71# Fixup the existing binary that's there so we can symlink over it. 72beforeinstall: 73.if exists(${DESTDIR}/usr/libexec/${PROG}) && ${MK_STAGING} == "no" 74 -chflags -h noschg ${DESTDIR}/usr/libexec/${PROG} 75.endif 76 77.PATH: ${RTLD_ELF_DIR}/${RTLD_ARCH} 78 79.if ${.CURDIR} == ${RTLD_ELF_DIR} 80HAS_TESTS= 81SUBDIR.${MK_TESTS}+= tests 82.endif 83 84.include <bsd.prog.mk> 85${PROG_FULL}: ${VERSION_MAP} 86.include <bsd.symver.mk> 87 88.if ${COMPILER_TYPE} == "gcc" 89# GCC warns about redeclarations even though they have __exported 90# and are therefore not identical to the ones from the system headers. 91CFLAGS+= -Wno-redundant-decls 92.if ${COMPILER_VERSION} < 40300 93# Silence -Wshadow false positives in ancient GCC 94CFLAGS+= -Wno-shadow 95.endif 96.endif 97