Index: sys/conf/mkldscript.sh
===================================================================
RCS file: /cvsroot/src/sys/conf/mkldscript.sh,v
retrieving revision 1.1
diff -u -u -r1.1 mkldscript.sh
--- sys/conf/mkldscript.sh	4 Mar 2007 02:35:49 -0000	1.1
+++ sys/conf/mkldscript.sh	11 Nov 2014 23:30:55 -0000
@@ -1,15 +1,21 @@
 #!/bin/sh
 #	$NetBSD: mkldscript.sh,v 1.1 2007/03/04 02:35:49 tsutsui Exp $
 
-TEMPLATE=$1
+TEMPLATE="$1"
 shift
 
-SETS=`$OBJDUMP -x $* | fgrep "RELOCATION RECORDS FOR [link_set" | \
-        sort -u | sed 's/^.*\[\(.*\)\]:$/\1/'`
+mksets() {
+    "${OBJDUMP:-objdump}" -x "$@" | fgrep "RELOCATION RECORDS FOR [link_set" | \
+        sort -u | sed 's/^.*\[\(.*\)\]:$/\1/'
+}
+SETS=$(mksets "$@")
 
+
+grep -v '^}$' "$TEMPLATE"
 for s in $SETS; do
-        printf "    . = ALIGN(4);\n"
-        printf "    PROVIDE (__start_%s = .);\n" $s
-        printf "    *(%s)\n" $s
-        printf "    PROVIDE (__stop_%s = .);\n" $s
-done 
+        printf '   . = ALIGN(4);\n'
+        printf '   PROVIDE (__start_%s = .);\n' $s
+        printf '   %s : { *(%s) }\n' $s $s
+        printf '   PROVIDE (__stop_%s = .);\n' $s
+done
+printf '}\n'
Index: share/mk/bsd.kmodule.mk
===================================================================
RCS file: /cvsroot/src/share/mk/bsd.kmodule.mk,v
retrieving revision 1.46
diff -u -u -r1.46 bsd.kmodule.mk
--- share/mk/bsd.kmodule.mk	6 Nov 2014 12:05:44 -0000	1.46
+++ share/mk/bsd.kmodule.mk	11 Nov 2014 23:30:55 -0000
@@ -11,6 +11,7 @@
 realinstall:	kmodinstall
 
 KERN=		$S/kern
+MKLDSCRIPT?=	no
 
 CFLAGS+=	-ffreestanding ${COPTS}
 CPPFLAGS+=	-nostdinc -I. -I${.CURDIR} -isystem $S -isystem $S/arch
@@ -72,9 +73,14 @@
 CLEANFILES+=	${_YKMSRCS}
 
 .if exists($S/../sys/modules/xldscripts/kmodule)
-KMODSCRIPT=	$S/../sys/modules/xldscripts/kmodule
+KMODSCRIPTSRC=	$S/../sys/modules/xldscripts/kmodule
 .else
-KMODSCRIPT=	${DESTDIR}/usr/libdata/ldscripts/kmodule
+KMODSCRIPTSRC=	${DESTDIR}/usr/libdata/ldscripts/kmodule
+.endif
+.if ${MKLDSCRIPT} == "yes"
+KMODSCRIPT=	kldscript
+.else
+KMODSCRIPT=	${KMODSCRIPTSRC}
 .endif
 
 PROG?=		${KMOD}.kmod
@@ -102,6 +108,9 @@
 
 ${PROG}: ${XOBJS} ${XSRCS} ${DPSRCS} ${DPADD}
 	${_MKTARGET_LINK}
+.if ${MKLDSCRIPT} == "yes"
+	$S/conf/mkldscript.sh ${KMODSCRIPTSRC} ${XOBJS} > ${KMODSCRIPT}
+.endif
 	${CC} ${LDFLAGS} -nostdlib -MD -combine -r -Wl,-T,${KMODSCRIPT},-d \
 		-Wl,-Map=${.TARGET}.map \
 		-o ${.TARGET} ${CFLAGS} ${CPPFLAGS} ${XOBJS} \
@@ -151,6 +160,9 @@
 .else
 ${PROG}: ${OBJS} ${DPADD}
 	${_MKTARGET_LINK}
+.if ${MKLDSCRIPT} == "yes"
+	$S/conf/mkldscript.sh ${KMODSCRIPTSRC} ${OBJS} > ${KMODSCRIPT}
+.endif
 	${CC} ${LDFLAGS} -nostdlib -r -Wl,-T,${KMODSCRIPT},-d \
 		-Wl,-Map=${.TARGET}.map \
 		-o ${.TARGET} ${OBJS}
@@ -200,6 +212,9 @@
 ##### Clean rules
 CLEANFILES+= a.out [Ee]rrs mklog core *.core ${PROG} ${OBJS} ${LOBJS}
 CLEANFILES+= ${PROG}.map
+.if ${MKLDSCRIPT} == "yes"
+CLEANFILES+= kldscript
+.endif
 
 ##### Custom rules
 lint: ${LOBJS}