Add a new knob WITH_DEBUG_FILES to control the building of standalone

debug files for userland programs and libraries.  The "-g" debug flag
is automatically applied when WITH_DEBUG_FILES is set.

The debug files are now named ${prog}.debug and ${shlib}.debug for
consistency with other systems and documentation.  In addition they are
installed under /usr/lib/debug, to simplify the process of installing
them if needed after a crash.  Users of bsd.{prog,lib}.mk outside of the
base system place the standalone debug files in a .debug subdirectory.
GDB automatically searches both of these directories for standalone
debug files.

Thanks to everyone who contributed changes, review, and testing during
development.
This commit is contained in:
Ed Maste 2013-06-07 21:40:02 +00:00
parent 0a79452954
commit 42f8c5b580
19 changed files with 180 additions and 41 deletions

View File

@ -470,6 +470,13 @@ _worldtmp:
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
-p ${WORLDTMP}/usr/include >/dev/null -p ${WORLDTMP}/usr/include >/dev/null
ln -sf ${.CURDIR}/sys ${WORLDTMP} ln -sf ${.CURDIR}/sys ${WORLDTMP}
.if ${MK_DEBUG_FILES} != "no"
# We could instead disable debug files for these build stages
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
-p ${WORLDTMP}/legacy/usr/lib >/dev/null
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
-p ${WORLDTMP}/usr/lib >/dev/null
.endif
.if ${MK_BIND_LIBS} != "no" .if ${MK_BIND_LIBS} != "no"
mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \ mtree -deU -f ${.CURDIR}/etc/mtree/BIND.include.dist \
-p ${WORLDTMP}/usr/include >/dev/null -p ${WORLDTMP}/usr/include >/dev/null
@ -555,6 +562,10 @@ build32:
-p ${LIB32TMP}/usr >/dev/null -p ${LIB32TMP}/usr >/dev/null
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
-p ${LIB32TMP}/usr/include >/dev/null -p ${LIB32TMP}/usr/include >/dev/null
.if ${MK_DEBUG_FILES} != "no"
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
-p ${LIB32TMP}/usr/lib >/dev/null
.endif
mkdir -p ${WORLDTMP} mkdir -p ${WORLDTMP}
ln -sf ${.CURDIR}/sys ${WORLDTMP} ln -sf ${.CURDIR}/sys ${WORLDTMP}
.for _t in obj includes .for _t in obj includes
@ -779,6 +790,10 @@ distributeworld installworld: installcheck installcheck_UGID
-p ${DESTDIR}/${DISTDIR}/${dist}/usr >/dev/null -p ${DESTDIR}/${DISTDIR}/${dist}/usr >/dev/null
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
-p ${DESTDIR}/${DISTDIR}/${dist}/usr/include >/dev/null -p ${DESTDIR}/${DISTDIR}/${dist}/usr/include >/dev/null
.if ${MK_DEBUG_FILES} != "no"
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
-p ${DESTDIR}/${DISTDIR}/${dist}/usr/lib >/dev/null
.endif
.if defined(NO_ROOT) .if defined(NO_ROOT)
${IMAKEENV} nmtree -C -f ${.CURDIR}/etc/mtree/BSD.root.dist | \ ${IMAKEENV} nmtree -C -f ${.CURDIR}/etc/mtree/BSD.root.dist | \
sed -e 's#^\./#./${dist}/#' >> ${METALOG} sed -e 's#^\./#./${dist}/#' >> ${METALOG}

View File

@ -143,6 +143,9 @@ MTREE+= BIND.chroot.dist
MTREE+= BIND.include.dist MTREE+= BIND.include.dist
.endif .endif
.endif .endif
.if ${MK_DEBUG_FILES} != "no"
MTREE+= BSD.debug.dist
.endif
PPPCNF= ppp.conf PPPCNF= ppp.conf
@ -312,6 +315,9 @@ MTREES= mtree/BSD.root.dist / \
mtree/BSD.var.dist /var \ mtree/BSD.var.dist /var \
mtree/BSD.usr.dist /usr \ mtree/BSD.usr.dist /usr \
mtree/BSD.include.dist /usr/include mtree/BSD.include.dist /usr/include
.if ${MK_DEBUG_FILES} != "no"
MTREES+= mtree/BSD.debug.dist /usr/lib
.endif
.if ${MK_BIND_LIBS} != "no" .if ${MK_BIND_LIBS} != "no"
MTREES+= mtree/BIND.include.dist /usr/include MTREES+= mtree/BIND.include.dist /usr/include
.endif .endif

48
etc/mtree/BSD.debug.dist Normal file
View File

@ -0,0 +1,48 @@
# $FreeBSD$
#
# Please see the file src/etc/mtree/README before making changes to this file.
#
/set type=dir uname=root gname=wheel mode=0755
.
debug
bin
..
boot
..
lib
geom
..
..
libexec
..
sbin
..
usr
bin
..
games
..
lib
engines
..
..
lib32
..
libexec
bsdinstall
..
lpr
ru
..
..
sendmail
..
sm.bin
..
..
sbin
..
..
..
..

View File

@ -4,6 +4,7 @@
FILES= ${_BIND.chroot.dist} \ FILES= ${_BIND.chroot.dist} \
${_BIND.include.dist} \ ${_BIND.include.dist} \
${_BSD.debug.dist} \
BSD.include.dist \ BSD.include.dist \
BSD.root.dist \ BSD.root.dist \
${_BSD.sendmail.dist} \ ${_BSD.sendmail.dist} \
@ -16,6 +17,9 @@ _BIND.chroot.dist= BIND.chroot.dist
_BIND.include.dist= BIND.include.dist _BIND.include.dist= BIND.include.dist
.endif .endif
.endif .endif
.if ${MK_DEBUG_FILES} != "no"
_BSD.debug.dist= BSD.debug.dist
.endif
.if ${MK_GROFF} != "no" .if ${MK_GROFF} != "no"
_BSD.groff.dist= BSD.groff.dist _BSD.groff.dist= BSD.groff.dist
.endif .endif

View File

@ -37,6 +37,7 @@ GDB_CROSS_DEBUGGER=
${CNTRB_GDB}/gdb/signals ${CNTRB_GDB}/gdb/tui ${TARGET_SUBDIR} ${CNTRB_GDB}/gdb/signals ${CNTRB_GDB}/gdb/tui ${TARGET_SUBDIR}
CFLAGS+= -DHAVE_CONFIG_H -DRL_NO_COMPAT -DMI_OUT=1 -DTUI=1 CFLAGS+= -DHAVE_CONFIG_H -DRL_NO_COMPAT -DMI_OUT=1 -DTUI=1
CFLAGS+= -DDEBUGDIR=\"${DEBUGDIR}\"
CFLAGS+= -I. CFLAGS+= -I.
CFLAGS+= -I${TARGET_SUBDIR} CFLAGS+= -I${TARGET_SUBDIR}
CFLAGS+= -I${BMAKE_BU}/libbfd -I${BMAKE_BU}/libbfd/${TARGET_CPUARCH} CFLAGS+= -I${BMAKE_BU}/libbfd -I${BMAKE_BU}/libbfd/${TARGET_CPUARCH}

View File

@ -439,9 +439,6 @@
/* Name of this package. */ /* Name of this package. */
#define PACKAGE "gdb" #define PACKAGE "gdb"
/* Global directory for separate debug files. */
#define DEBUGDIR "/usr/local/lib/debug"
/* Define to BFD's default architecture. */ /* Define to BFD's default architecture. */
#define DEFAULT_BFD_ARCH bfd_i386_arch #define DEFAULT_BFD_ARCH bfd_i386_arch

View File

@ -451,9 +451,6 @@
/* Name of this package. */ /* Name of this package. */
#define PACKAGE "gdb" #define PACKAGE "gdb"
/* Global directory for separate debug files. */
#define DEBUGDIR "/usr/local/lib/debug"
/* Define to BFD's default architecture. */ /* Define to BFD's default architecture. */
#define DEFAULT_BFD_ARCH bfd_arm_arch #define DEFAULT_BFD_ARCH bfd_arm_arch

View File

@ -439,9 +439,6 @@
/* Name of this package. */ /* Name of this package. */
#define PACKAGE "gdb" #define PACKAGE "gdb"
/* Global directory for separate debug files. */
#define DEBUGDIR "/usr/local/lib/debug"
/* Define to BFD's default architecture. */ /* Define to BFD's default architecture. */
#define DEFAULT_BFD_ARCH bfd_i386_arch #define DEFAULT_BFD_ARCH bfd_i386_arch

View File

@ -439,9 +439,6 @@
/* Name of this package. */ /* Name of this package. */
#define PACKAGE "gdb" #define PACKAGE "gdb"
/* Global directory for separate debug files. */
#define DEBUGDIR "/usr/local/lib/debug"
/* Define to BFD's default architecture. */ /* Define to BFD's default architecture. */
#define DEFAULT_BFD_ARCH bfd_ia64_arch #define DEFAULT_BFD_ARCH bfd_ia64_arch

View File

@ -439,9 +439,6 @@
/* Name of this package. */ /* Name of this package. */
#define PACKAGE "gdb" #define PACKAGE "gdb"
/* Global directory for separate debug files. */
#define DEBUGDIR "/usr/local/lib/debug"
/* Define to BFD's default architecture. */ /* Define to BFD's default architecture. */
#define DEFAULT_BFD_ARCH bfd_mips_arch #define DEFAULT_BFD_ARCH bfd_mips_arch

View File

@ -439,9 +439,6 @@
/* Name of this package. */ /* Name of this package. */
#define PACKAGE "gdb" #define PACKAGE "gdb"
/* Global directory for separate debug files. */
#define DEBUGDIR "/usr/local/lib/debug"
/* Define to BFD's default architecture. */ /* Define to BFD's default architecture. */
#define DEFAULT_BFD_ARCH bfd_rs6000_arch #define DEFAULT_BFD_ARCH bfd_rs6000_arch

View File

@ -439,9 +439,6 @@
/* Name of this package. */ /* Name of this package. */
#define PACKAGE "gdb" #define PACKAGE "gdb"
/* Global directory for separate debug files. */
#define DEBUGDIR "/usr/local/lib/debug"
/* Define to BFD's default architecture. */ /* Define to BFD's default architecture. */
#define DEFAULT_BFD_ARCH bfd_rs6000_arch #define DEFAULT_BFD_ARCH bfd_rs6000_arch

View File

@ -439,9 +439,6 @@
/* Name of this package. */ /* Name of this package. */
#define PACKAGE "gdb" #define PACKAGE "gdb"
/* Global directory for separate debug files. */
#define DEBUGDIR "/usr/local/lib/debug"
/* Define to BFD's default architecture. */ /* Define to BFD's default architecture. */
#define DEFAULT_BFD_ARCH bfd_sparc_arch #define DEFAULT_BFD_ARCH bfd_sparc_arch

View File

@ -15,3 +15,4 @@ DPADD= ${GDBLIBS} ${BULIBS} ${LIBM} ${LIBREADLINE} ${LIBTERMCAP} ${LIBGNUREGEX}
LDADD= ${GDBLIBS} ${BULIBS} -lm -lreadline -ltermcap -lgnuregex LDADD= ${GDBLIBS} ${BULIBS} -lm -lreadline -ltermcap -lgnuregex
.include <bsd.prog.mk> .include <bsd.prog.mk>
CFLAGS+= -DDEBUGDIR=\"${DEBUGDIR}\"

View File

@ -47,6 +47,9 @@ CRUNCH_GENERATE_LINKS?= yes
CLEANFILES+= $(CONF) *.o *.lo *.c *.mk *.cache *.a *.h CLEANFILES+= $(CONF) *.o *.lo *.c *.mk *.cache *.a *.h
# Don't try to extract debug info from ${PROG}.
NO_DEBUG_FILES=
# Program names and their aliases contribute hardlinks to 'rescue' executable, # Program names and their aliases contribute hardlinks to 'rescue' executable,
# except for those that get suppressed. # except for those that get suppressed.
.for D in $(CRUNCH_SRCDIRS) .for D in $(CRUNCH_SRCDIRS)

View File

@ -43,6 +43,12 @@ CTFFLAGS+= -g
STRIP?= -s STRIP?= -s
.endif .endif
.if ${MK_DEBUG_FILES} != "no" && empty(DEBUG_FLAGS:M-g) && \
empty(DEBUG_FLAGS:M-gdwarf*)
CFLAGS+= -g
CTFFLAGS+= -g
.endif
.include <bsd.libnames.mk> .include <bsd.libnames.mk>
# prefer .s to a .c, add .po, remove stuff not used in the BSD libraries # prefer .s to a .c, add .po, remove stuff not used in the BSD libraries
@ -114,8 +120,17 @@ PO_FLAG=-pg
all: objwarn all: objwarn
.if defined(SHLIB_NAME) .if defined(SHLIB_NAME)
.if defined(DEBUG_FLAGS) .if ${MK_DEBUG_FILES} != "no"
SHLIB_NAME_FULL=${SHLIB_NAME}.debug SHLIB_NAME_FULL=${SHLIB_NAME}.full
# Use ${DEBUGDIR} for base system debug files, else .debug subdirectory
.if ${SHLIBDIR} == "/boot" ||\
${SHLIBDIR:C%/lib(/.*)?$%/lib%} == "/lib" ||\
${SHLIBDIR:C%/usr/lib(32)?(/.*)?%/usr/lib%} == "/usr/lib"
DEBUGFILEDIR=${DEBUGDIR}${SHLIBDIR}
.else
DEBUGFILEDIR=${SHLIBDIR}/.debug
DEBUGMKDIR=
.endif
.else .else
SHLIB_NAME_FULL=${SHLIB_NAME} SHLIB_NAME_FULL=${SHLIB_NAME}
.endif .endif
@ -201,13 +216,13 @@ ${SHLIB_NAME_FULL}: ${SOBJS}
${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SOBJS} ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SOBJS}
.endif .endif
.if defined(DEBUG_FLAGS) .if ${MK_DEBUG_FILES} != "no"
CLEANFILES+= ${SHLIB_NAME_FULL} ${SHLIB_NAME}.symbols CLEANFILES+= ${SHLIB_NAME_FULL} ${SHLIB_NAME}.debug
${SHLIB_NAME}: ${SHLIB_NAME_FULL} ${SHLIB_NAME}.symbols ${SHLIB_NAME}: ${SHLIB_NAME_FULL} ${SHLIB_NAME}.debug
${OBJCOPY} --strip-debug --add-gnu-debuglink=${SHLIB_NAME}.symbols \ ${OBJCOPY} --strip-debug --add-gnu-debuglink=${SHLIB_NAME}.debug \
${SHLIB_NAME_FULL} ${.TARGET} ${SHLIB_NAME_FULL} ${.TARGET}
${SHLIB_NAME}.symbols: ${SHLIB_NAME_FULL} ${SHLIB_NAME}.debug: ${SHLIB_NAME_FULL}
${OBJCOPY} --only-keep-debug ${SHLIB_NAME_FULL} ${.TARGET} ${OBJCOPY} --only-keep-debug ${SHLIB_NAME_FULL} ${.TARGET}
.endif .endif
.endif #defined(SHLIB_NAME) .endif #defined(SHLIB_NAME)
@ -286,10 +301,13 @@ _libinstall:
${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ ${INSTALL} ${STRIP} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \ ${_INSTALLFLAGS} ${_SHLINSTALLFLAGS} \
${SHLIB_NAME} ${DESTDIR}${SHLIBDIR} ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
.if defined(DEBUG_FLAGS) .if ${MK_DEBUG_FILES} != "no"
${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ .if defined(DEBUGMKDIR)
${INSTALL} -T debug -d ${DESTDIR}${DEBUGFILEDIR}
.endif
${INSTALL} -T debug -o ${LIBOWN} -g ${LIBGRP} -m ${DEBUGMODE} \
${_INSTALLFLAGS} \ ${_INSTALLFLAGS} \
${SHLIB_NAME}.symbols ${DESTDIR}${SHLIBDIR} ${SHLIB_NAME}.debug ${DESTDIR}${DEBUGFILEDIR}
.endif .endif
.if defined(SHLIB_LINK) .if defined(SHLIB_LINK)
# ${_SHLIBDIRPREFIX} and ${_LDSCRIPTROOT} are both needed when cross-building # ${_SHLIBDIRPREFIX} and ${_LDSCRIPTROOT} are both needed when cross-building

View File

@ -43,6 +43,11 @@
# LIBMODE Library mode. [${NOBINMODE}] # LIBMODE Library mode. [${NOBINMODE}]
# #
# #
# DEBUGDIR Base path for standalone debug files. [/usr/lib/debug]
#
# DEBUGMODE Mode for debug files. [${NOBINMODE}]
#
#
# KMODDIR Base path for loadable kernel modules # KMODDIR Base path for loadable kernel modules
# (see kld(4)). [/boot/kernel] # (see kld(4)). [/boot/kernel]
# #
@ -147,6 +152,9 @@ LIBOWN?= ${BINOWN}
LIBGRP?= ${BINGRP} LIBGRP?= ${BINGRP}
LIBMODE?= ${NOBINMODE} LIBMODE?= ${NOBINMODE}
DEBUGDIR?= /usr/lib/debug
DEBUGMODE?= ${NOBINMODE}
# Share files # Share files
SHAREDIR?= /usr/share SHAREDIR?= /usr/share
@ -213,6 +221,7 @@ COMPRESS_EXT?= .gz
# #
.for var in \ .for var in \
CTF \ CTF \
DEBUG_FILES \
INSTALLLIB \ INSTALLLIB \
MAN \ MAN \
PROFILE PROFILE
@ -365,6 +374,7 @@ __DEFAULT_NO_OPTIONS = \
BSD_GREP \ BSD_GREP \
CLANG_EXTRAS \ CLANG_EXTRAS \
CTF \ CTF \
DEBUG_FILES \
GPL_DTC \ GPL_DTC \
HESIOD \ HESIOD \
ICONV \ ICONV \

View File

@ -24,8 +24,24 @@ CTFFLAGS+= -g
.endif .endif
.endif .endif
.if defined(PROG_CXX)
PROG= ${PROG_CXX}
.endif
.if defined(PROG) && target(${PROG})
MK_DEBUG_FILES= no
.elif !empty(LDFLAGS:M-Wl,*--oformat,*) || !empty(LDFLAGS:M-static)
MK_DEBUG_FILES= no
.endif
.if defined(CRUNCH_CFLAGS) .if defined(CRUNCH_CFLAGS)
CFLAGS+=${CRUNCH_CFLAGS} CFLAGS+=${CRUNCH_CFLAGS}
.else
.if ${MK_DEBUG_FILES} != "no" && empty(DEBUG_FLAGS:M-g) && \
empty(DEBUG_FLAGS:M-gdwarf-*)
CFLAGS+= -g
CTFFLAGS+= -g
.endif
.endif .endif
.if !defined(DEBUG_FLAGS) .if !defined(DEBUG_FLAGS)
@ -36,21 +52,36 @@ STRIP?= -s
LDFLAGS+= -static LDFLAGS+= -static
.endif .endif
.if defined(PROG_CXX) .if ${MK_DEBUG_FILES} != "no"
PROG= ${PROG_CXX} PROG_FULL=${PROG}.full
# Use ${DEBUGDIR} for base system debug files, else .debug subdirectory
.if defined(BINDIR) && (\
${BINDIR} == "/bin" ||\
${BINDIR} == "/libexec" ||\
${BINDIR} == "/sbin" ||\
${BINDIR:C%/usr/(bin|bsdinstall|games|libexec|lpr|sendmail|sm.bin|sbin)(/.*)?%/usr/bin%} == "/usr/bin"\
)
DEBUGFILEDIR= ${DEBUGDIR}${BINDIR}
.else
DEBUGFILEDIR?= ${BINDIR}/.debug
DEBUGMKDIR=
.endif
.else
PROG_FULL= ${PROG}
.endif .endif
.if defined(PROG) .if defined(PROG)
PROGNAME?= ${PROG} PROGNAME?= ${PROG}
.if defined(SRCS) .if defined(SRCS)
OBJS+= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
.if target(beforelinking) .if target(beforelinking)
beforelinking: ${OBJS} beforelinking: ${OBJS}
${PROG}: beforelinking ${PROG_FULL}: beforelinking
.endif .endif
${PROG}: ${OBJS} ${PROG_FULL}: ${OBJS}
.if defined(PROG_CXX) .if defined(PROG_CXX)
${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} ${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
.else .else
@ -78,9 +109,9 @@ OBJS+= ${PROG}.o
.if target(beforelinking) .if target(beforelinking)
beforelinking: ${OBJS} beforelinking: ${OBJS}
${PROG}: beforelinking ${PROG_FULL}: beforelinking
.endif .endif
${PROG}: ${OBJS} ${PROG_FULL}: ${OBJS}
.if defined(PROG_CXX) .if defined(PROG_CXX)
${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD} ${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}
.else .else
@ -89,10 +120,19 @@ ${PROG}: ${OBJS}
.if ${MK_CTF} != "no" .if ${MK_CTF} != "no"
${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS} ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${OBJS}
.endif .endif
.endif .endif # !target(${PROG})
.endif # !defined(SRCS) .endif # !defined(SRCS)
.if ${MK_DEBUG_FILES} != "no"
${PROG}: ${PROG_FULL} ${PROGNAME}.debug
${OBJCOPY} --strip-debug --add-gnu-debuglink=${PROGNAME}.debug \
${PROG_FULL} ${.TARGET}
${PROGNAME}.debug: ${PROG_FULL}
${OBJCOPY} --only-keep-debug ${PROG_FULL} ${.TARGET}
.endif
.if ${MK_MAN} != "no" && !defined(MAN) && \ .if ${MK_MAN} != "no" && !defined(MAN) && \
!defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \ !defined(MAN1) && !defined(MAN2) && !defined(MAN3) && \
!defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \ !defined(MAN4) && !defined(MAN5) && !defined(MAN6) && \
@ -109,6 +149,9 @@ all: _manpages
.if defined(PROG) .if defined(PROG)
CLEANFILES+= ${PROG} CLEANFILES+= ${PROG}
.if ${MK_DEBUG_FILES} != "no"
CLEANFILES+= ${PROG_FULL} ${PROGNAME}.debug
.endif
.endif .endif
.if defined(OBJS) .if defined(OBJS)
@ -156,6 +199,13 @@ _proginstall:
.if defined(PROG) .if defined(PROG)
${INSTALL} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ ${INSTALL} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}/${PROGNAME} ${_INSTALLFLAGS} ${PROG} ${DESTDIR}${BINDIR}/${PROGNAME}
.if ${MK_DEBUG_FILES} != "no"
.if defined(DEBUGMKDIR)
${INSTALL} -T debug -d ${DESTDIR}${DEBUGFILEDIR}
.endif
${INSTALL} -T debug -o ${BINOWN} -g ${BINGRP} -m ${DEBUGMODE} \
${PROGNAME}.debug ${DESTDIR}${DEBUGFILEDIR}/${PROGNAME}.debug
.endif
.endif .endif
.endif # !target(realinstall) .endif # !target(realinstall)

View File

@ -0,0 +1,7 @@
.\" $FreeBSD$
Set to strip debug info into a separate file for each executable binary
and shared library.
The debug files will be placed in a subdirectory of
.Pa /usr/lib/debug
and are located automatically by
.Xr gdb 1 .