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

Reply via email to