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:
parent
0a79452954
commit
42f8c5b580
@ -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}
|
||||||
|
@ -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
48
etc/mtree/BSD.debug.dist
Normal 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
|
||||||
|
..
|
||||||
|
..
|
||||||
|
..
|
||||||
|
..
|
@ -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
|
||||||
|
@ -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}
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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}\"
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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 \
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
7
tools/build/options/WITH_DEBUG_FILES
Normal file
7
tools/build/options/WITH_DEBUG_FILES
Normal 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 .
|
Loading…
Reference in New Issue
Block a user