Index: lib/csu/i386/Makefile =================================================================== --- lib/csu/i386/Makefile +++ lib/csu/i386/Makefile @@ -31,7 +31,7 @@ ${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} gcrt1_c.s gcrt1.o: gcrt1_c.o crt1_s.o - ${LD} ${_LDFLAGS} -o gcrt1.o -r crt1_s.o gcrt1_c.o + ${LD} ${_LDFLAGS:N--gdb-index} -o gcrt1.o -r crt1_s.o gcrt1_c.o crt1_c.s: crt1_c.c ${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1_c.c @@ -41,7 +41,7 @@ ${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} crt1_c.s crt1.o: crt1_c.o crt1_s.o - ${LD} ${_LDFLAGS} -o crt1.o -r crt1_s.o crt1_c.o + ${LD} ${_LDFLAGS:N--gdb-index} -o crt1.o -r crt1_s.o crt1_c.o ${OBJCOPY} --localize-symbol _start1 crt1.o Scrt1_c.s: crt1_c.c @@ -52,7 +52,7 @@ ${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} Scrt1_c.s Scrt1.o: Scrt1_c.o crt1_s.o - ${LD} ${_LDFLAGS} -o Scrt1.o -r crt1_s.o Scrt1_c.o + ${LD} ${_LDFLAGS:N--gdb-index} -o Scrt1.o -r crt1_s.o Scrt1_c.o ${OBJCOPY} --localize-symbol _start1 Scrt1.o .include Index: lib/libpam/static_libpam/Makefile =================================================================== --- lib/libpam/static_libpam/Makefile +++ lib/libpam/static_libpam/Makefile @@ -64,7 +64,7 @@ openpam_static_modules.o openpam_static_modules.o: openpam_static.o ${STATIC_MODULES} - ${CC:N${CCACHE_BIN}} -nostdlib ${LDFLAGS} -o ${.TARGET} \ + ${CC:N${CCACHE_BIN}} -nostdlib ${LDFLAGS:N-Wl,--gdb-index} -o ${.TARGET} \ -r -Wl,--whole-archive ${.ALLSRC} .include "${.CURDIR:H}/libpam/Makefile" Index: share/mk/bsd.crunchgen.mk =================================================================== --- share/mk/bsd.crunchgen.mk +++ share/mk/bsd.crunchgen.mk @@ -130,8 +130,8 @@ # ${OUTMK} above. ${PROG}: ${OUTPUTS} objs .NOMETA .PHONY ${CRUNCHENV} \ - CC="${CC} ${CFLAGS} ${LDFLAGS}" \ - CXX="${CXX} ${CXXFLAGS} ${LDFLAGS}" \ + CC="${CC} ${CFLAGS} ${LDFLAGS:N-Wl,--gdb-index}" \ + CXX="${CXX} ${CXXFLAGS} ${LDFLAGS:N-Wl,--gdb-index}" \ ${MAKE} ${CRUNCHARGS} .MAKE.MODE="${.MAKE.MODE} curdirOk=yes" \ .MAKE.META.IGNORE_PATHS="${.MAKE.META.IGNORE_PATHS}" \ -f ${OUTMK} exe Index: share/mk/bsd.lib.mk =================================================================== --- share/mk/bsd.lib.mk +++ share/mk/bsd.lib.mk @@ -85,6 +85,14 @@ .endif .endif +.if ${MK_BUILD_ID} != "no" && empty(LDFLAGS:M*build-id*) +LDFLAGS+= -Wl,--build-id=sha1 +.endif + +.if ${MK_GDB_INDEX} != "no" +LDFLAGS+= -Wl,--gdb-index +.endif + .if ${MK_DEBUG_FILES} != "no" && empty(DEBUG_FLAGS:M-g) && \ empty(DEBUG_FLAGS:M-gdwarf*) CFLAGS+= ${DEBUG_FILES_CFLAGS} Index: share/mk/bsd.linker.mk =================================================================== --- share/mk/bsd.linker.mk +++ share/mk/bsd.linker.mk @@ -15,6 +15,7 @@ # - build-id: support for generating a Build-ID note # - retpoline: support for generating PLT with retpoline speculative # execution vulnerability mitigation +# - gdb-index: support for generating .gdb_index sections # # LINKER_FREEBSD_VERSION is the linker's internal source version. # @@ -93,6 +94,9 @@ .endif .if ${${X_}LINKER_TYPE} == "lld" && ${${X_}LINKER_VERSION} >= 60000 ${X_}LINKER_FEATURES+= retpoline +.endif +.if ${${X_}LINKER_TYPE} == "lld" && ${${X_}LINKER_VERSION} >= 80000 +${X_}LINKER_FEATURES+= gdb-index .endif .endif .else Index: share/mk/bsd.opts.mk =================================================================== --- share/mk/bsd.opts.mk +++ share/mk/bsd.opts.mk @@ -70,8 +70,10 @@ __DEFAULT_NO_OPTIONS = \ BIND_NOW \ + BUILD_ID \ CCACHE_BUILD \ CTF \ + GDB_INDEX \ INSTALL_AS_USER \ PIE \ RETPOLINE \ Index: share/mk/bsd.prog.mk =================================================================== --- share/mk/bsd.prog.mk +++ share/mk/bsd.prog.mk @@ -57,6 +57,14 @@ .endif .endif +.if ${MK_BUILD_ID} != "no" && empty(LDFLAGS:M*build-id*) +LDFLAGS+= -Wl,--build-id=sha1 +.endif + +.if ${MK_GDB_INDEX} != "no" +LDFLAGS+= -Wl,--gdb-index +.endif + .if ${MACHINE_CPUARCH} == "riscv" && ${LINKER_FEATURES:Mriscv-relaxations} == "" CFLAGS += -mno-relax .endif Index: stand/i386/btx/lib/Makefile =================================================================== --- stand/i386/btx/lib/Makefile +++ stand/i386/btx/lib/Makefile @@ -7,5 +7,6 @@ SRCS= btxcsu.S btxsys.S btxv86.S CFLAGS+=-I${BOOTSRC}/i386/common LDFLAGS+=-Wl,-r +MK_GDB_INDEX=no .include Index: sys/conf/kern.pre.mk =================================================================== --- sys/conf/kern.pre.mk +++ sys/conf/kern.pre.mk @@ -156,6 +156,10 @@ LDFLAGS+= --build-id=sha1 .endif +.if defined(LINKER_FEATURES) && ${LINKER_FEATURES:Mgdb-index} +LDFLAGS+= -Wl,--gdb-index +.endif + .if (${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \ ${MACHINE_CPUARCH} == "i386") && \ defined(LINKER_FEATURES) && ${LINKER_FEATURES:Mifunc} == "" Index: sys/conf/kmod.mk =================================================================== --- sys/conf/kmod.mk +++ sys/conf/kmod.mk @@ -140,6 +140,10 @@ LDFLAGS+= --build-id=sha1 .endif +.if defined(LINKER_FEATURES) && ${LINKER_FEATURES:Mgdb-index} +LDFLAGS+= --gdb-index +.endif + CFLAGS+= ${DEBUG_FLAGS} .if ${MACHINE_CPUARCH} == amd64 CFLAGS+= -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer @@ -190,12 +194,14 @@ ${_firmw:C/\:.*$/.fwo/:T}: ${_firmw:C/\:.*$//} @${ECHO} ${_firmw:C/\:.*$//} ${.ALLSRC:M*${_firmw:C/\:.*$//}} @if [ -e ${_firmw:C/\:.*$//} ]; then \ - ${LD} -b binary --no-warn-mismatch ${_LDFLAGS} \ + ${LD} -b binary --no-warn-mismatch \ + ${_LDFLAGS:N--gdb-index} \ -m ${LD_EMULATION} -r -d \ -o ${.TARGET} ${_firmw:C/\:.*$//}; \ else \ ln -s ${.ALLSRC:M*${_firmw:C/\:.*$//}} ${_firmw:C/\:.*$//}; \ - ${LD} -b binary --no-warn-mismatch ${_LDFLAGS} \ + ${LD} -b binary --no-warn-mismatch \ + ${_LDFLAGS:N--gdb-index} \ -m ${LD_EMULATION} -r -d \ -o ${.TARGET} ${_firmw:C/\:.*$//}; \ rm ${_firmw:C/\:.*$//}; \ @@ -250,8 +256,8 @@ .else ${FULLPROG}: ${OBJS} .endif - ${LD} -m ${LD_EMULATION} ${_LDFLAGS} ${LDSCRIPT_FLAGS} -r -d \ - -o ${.TARGET} ${OBJS} + ${LD} -m ${LD_EMULATION} ${_LDFLAGS:N--gdb-index} ${LDSCRIPT_FLAGS} \ + -r -d -o ${.TARGET} ${OBJS} .if ${MK_CTF} != "no" ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS} .endif