Module Name: src Committed By: christos Date: Fri May 1 22:23:00 UTC 2020
Modified Files: src/share/mk: bsd.kmodule.mk Log Message: Install <module>.kmod.debug files for kernel crash debugging. To generate a diff of this commit: cvs rdiff -u -r1.65 -r1.66 src/share/mk/bsd.kmodule.mk Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/share/mk/bsd.kmodule.mk diff -u src/share/mk/bsd.kmodule.mk:1.65 src/share/mk/bsd.kmodule.mk:1.66 --- src/share/mk/bsd.kmodule.mk:1.65 Sat Apr 4 19:19:08 2020 +++ src/share/mk/bsd.kmodule.mk Fri May 1 18:23:00 2020 @@ -1,4 +1,4 @@ -# $NetBSD: bsd.kmodule.mk,v 1.65 2020/04/04 23:19:08 christos Exp $ +# $NetBSD: bsd.kmodule.mk,v 1.66 2020/05/01 22:23:00 christos Exp $ # We are not building this with PIE MKPIE=no @@ -12,9 +12,9 @@ CFLAGS+= -g CTFFLAGS= -L VERSION CTFMFLAGS= -t -L VERSION # Keep symbols if built with "-g" -.if !empty(COPTS:M*-g*) -CTFFLAGS+= -g -CTFMFLAGS+= -g +.if !empty(COPTS:M*-g*) || ${MKDEBUG:Uno} == "yes" +CTFFLAGS+= -g +CTFMFLAGS+= -g .endif .endif @@ -108,6 +108,10 @@ KMODSCRIPT= ${KMODSCRIPTSRC} .endif PROG?= ${KMOD}.kmod +.if ${MKDEBUG:Uno} != "no" && !defined(NODEBUG) && !commands(${PROG}) && \ + empty(SRCS:M*.sh) +PROGDEBUG:= ${PROG}.debug +.endif ##### Build rules realall: ${PROG} @@ -169,55 +173,76 @@ ${PROG}: ${OBJS} ${DPADD} ${KMODSCRIPT} ${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS} .endif +.if defined(PROGDEBUG) +${PROGDEBUG}: ${PROG} + ${_MKTARGET_CREATE} + ( ${OBJCOPY} --only-keep-debug ${PROG} ${PROGDEBUG} \ + && ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \ + --add-gnu-debuglink=${PROGDEBUG} ${PROG} \ + ) || (rm -f ${PROGDEBUG}; false) +.endif + ##### Install rules .if !target(kmodinstall) .if !defined(KMODULEDIR) .if ${KERNEL_DIR:Uno} == "yes" -KMODULEDIR= ${DESTDIR}/netbsd/modules/${KMOD} -_INST_DIRS= ${DESTDIR}/netbsd -_INST_DIRS+= ${DESTDIR}/netbsd/modules -_INST_DIRS+= ${DESTDIR}/netbsd/modules/${KMOD} +_INST_DIRS= /netbsd +_INST_DIRS+= /netbsd/modules +KMODULEDIR= /netbsd/modules/${KMOD} .else # Ensure these are recorded properly in METALOG on unprived installes: _OSRELEASE!= ${HOST_SH} $S/conf/osrelease.sh -k KMODULEARCHDIR?= ${MACHINE} -_INST_DIRS= ${DESTDIR}/stand/${KMODULEARCHDIR} -_INST_DIRS+= ${DESTDIR}/stand/${KMODULEARCHDIR}/${_OSRELEASE} -_INST_DIRS+= ${DESTDIR}/stand/${KMODULEARCHDIR}/${_OSRELEASE}/modules -KMODULEDIR= ${DESTDIR}/stand/${KMODULEARCHDIR}/${_OSRELEASE}/modules/${KMOD} +_INST_DIRS= /stand/${KMODULEARCHDIR} +_INST_DIRS+= /stand/${KMODULEARCHDIR}/${_OSRELEASE} +_INST_DIRS+= /stand/${KMODULEARCHDIR}/${_OSRELEASE}/modules +KMODULEDIR= /stand/${KMODULEARCHDIR}/${_OSRELEASE}/modules/${KMOD} .endif .endif -_PROG:= ${KMODULEDIR}/${PROG} # installed path +_INST_DIRS+= ${KMODULEDIR} +_PROG:= ${DESTDIR}${KMODULEDIR}/${PROG} # installed path + +.if defined(PROGDEBUG) +.for i in ${_INST_DIRS} +_DEBUG_INST_DIRS += ${DEBUGDIR}${i} +.endfor +_INST_DIRS += ${_DEBUG_INST_DIRS} +_PROGDEBUG:= ${DESTDIR}${DEBUGDIR}${KMODULEDIR}/${PROG}.debug +.endif + +.for _P P in ${_PROG} ${PROG} ${_PROGDEBUG} ${PROGDEBUG} .if ${MKUPDATE} == "no" -${_PROG}! ${PROG} # install rule -.if !defined(BUILD) && !make(all) && !make(${PROG}) -${_PROG}! .MADE # no build at install +${_P}! ${P} # install rule +.if !defined(BUILD) && !make(all) && !make(${P}) +${_P}! .MADE # no build at install .endif .else -${_PROG}: ${PROG} # install rule -.if !defined(BUILD) && !make(all) && !make(${PROG}) -${_PROG}: .MADE # no build at install +${_P}: ${P} # install rule +.if !defined(BUILD) && !make(all) && !make(${P}) +${_P}: .MADE # no build at install .endif .endif ${_MKTARGET_INSTALL} dirs=${_INST_DIRS:Q}; \ for d in $$dirs; do \ - ${INSTALL_DIR} $$d; \ + ${INSTALL_DIR} ${DESTDIR}$$d; \ done - ${INSTALL_DIR} ${KMODULEDIR} ${INSTALL_FILE} -o ${KMODULEOWN} -g ${KMODULEGRP} -m ${KMODULEMODE} \ ${.ALLSRC} ${.TARGET} -kmodinstall:: ${_PROG} +kmodinstall:: ${_P} .PHONY: kmodinstall -.PRECIOUS: ${_PROG} # keep if install fails +.PRECIOUS: ${_P} # keep if install fails +.endfor -.undef _PROG +.undef _PPROG +.undef _PPROGDEBUG .endif # !target(kmodinstall) ##### Clean rules CLEANFILES+= a.out [Ee]rrs mklog core *.core ${PROG} ${OBJS} ${LOBJS} +CLEANFILES+= ${PROGDEBUG} CLEANFILES+= ${PROG}.map .if ${MKLDSCRIPT} == "yes" CLEANFILES+= kldscript