freebsd-dev/gnu/usr.bin/binutils/gdb/Makefile
Ian Dowse ea0d04f36e Attempt to automatically read in kernel module symbols when a live
or dead kernel core is loaded into gdb. This extends gdb's existing
shared library support, so the "info sharedlibrary", "sharedlibrary"
and "nosharedlibrary" commands can be used to view and change the
list of loaded symbol files.

The current implementation is more than a kludge however, and it
will not always manage to find the .ko.debug file corresponding to
the loaded module. In particular, for modules whose build directory
cannot be easily guessed from the module name such as all the
netgraph modules, the debug version of the .ko will not be found
automatically.

The logic for finding the module file first attempts to guess at
the module build directory by parsing the version[] string. Then
using that directory ($DIR), it tries the following paths in turn:

	./<module>.ko.debug		./<module>.ko
	$DIR/<module>.ko.debug		$DIR/<module>.ko
	/boot/kernel/<module>.ko.debug	/boot/kernel/<module>.ko

Approved by:	obrien, mp
2003-03-21 00:30:53 +00:00

151 lines
4.9 KiB
Makefile

# $FreeBSD$
.include "../Makefile.inc0"
.PATH: ${SRCDIR}/binutils
.if ${TARGET_ARCH} == "sparc64"
GDB_CPU= sparc
.elif ${TARGET_ARCH} == "x86-64"
GDB_CPU= i386
.else
GDB_CPU= ${TARGET_ARCH}
.endif
NOSHARED?=yes
PROG= gdb
XSRCS= annotate.c arch-utils.c ax-general.c ax-gdb.c bcache.c \
blockframe.c breakpoint.c buildsym.c complaints.c completer.c \
copying.c corefile.c corelow.c dcache.c doublest.c event-loop.c \
event-top.c environ.c eval.c exec.c expprint.c fork-child.c \
frame.c gdb-events.c gdbarch.c gdbtypes.c infcmd.c inflow.c \
infptrace.c inf-loop.c infrun.c inftarg.c language.c linespec.c \
main.c maint.c mdebugread.c mem-break.c memattr.c minsyms.c \
objfiles.c parse.c printcmd.c regcache.c remote.c \
remote-utils.c signals.c source.c stabsread.c stack.c symfile.c \
symmisc.c symtab.c target.c thread.c top.c tracepoint.c \
typeprint.c ui-file.c ui-out.c utils.c valarith.c valops.c \
valprint.c values.c wrapper.c \
cli-cmds.c cli-cmds.h cli-decode.c cli-decode.h cli-out.c \
cli-script.c cli-script.h cli-setshow.c cli-setshow.h \
cli-utils.c cli-utils.h \
serial.c ser-unix.c ser-tcp.c \
c-exp.y c-lang.c c-typeprint.c c-valprint.c \
ch-exp.c ch-lang.c ch-typeprint.c ch-valprint.c \
cp-abi.c gnu-v2-abi.c gnu-v3-abi.c cp-valprint.c demangle.c \
f-exp.y f-lang.c f-typeprint.c f-valprint.c findvar.c \
jv-exp.y jv-lang.c jv-valprint.c jv-typeprint.c nlmread.c \
m2-lang.c m2-exp.y m2-typeprint.c m2-valprint.c \
scm-exp.c scm-lang.c scm-valprint.c \
coffread.c dbxread.c dwarfread.c dwarf2read.c elfread.c \
solib.c solib-svr4.c solib-legacy.c
XSRCS+= freebsd-uthread.c kvm-fbsd.c solib-fbsd-kld.c
SRCS= init.c ${XSRCS} nm.h tm.h xm.h gdbversion.c xregex.h
.if exists(${.CURDIR}/Makefile.${TARGET_ARCH})
.include "${.CURDIR}/Makefile.${TARGET_ARCH}"
.endif
WARNS= 0
.if ${TARGET_ARCH} != ${MACHINE_ARCH}
CFLAGS+= -DCROSS_COMPILE=1
.endif
CFLAGS+= -DDEFAULT_BFD_ARCH=bfd_${GDB_CPU}_arch
CFLAGS+= -I${.CURDIR}/${TARGET_ARCH}
CFLAGS+= -I${SRCDIR}/binutils
CFLAGS+= -I${SRCDIR}/bfd
CFLAGS+= -I${GDBDIR}/gdb
CFLAGS+= -I${GDBDIR}/gdb/config
DPADD= ${LIBKVM}
DPADD+= ${LIBM}
DPADD+= ${RELTOP}/libbfd/libbfd.a
DPADD+= ${RELTOP}/libopcodes/libopcodes.a
DPADD+= ${LIBGNUREGEX}
DPADD+= ${RELTOP}/libiberty/libiberty.a
DPADD+= ${LIBREADLINE}
DPADD+= ${LIBTERMCAP}
LDADD= -lkvm
LDADD+= -lm
LDADD+= ${RELTOP}/libbfd/libbfd.a
LDADD+= ${RELTOP}/libopcodes/libopcodes.a
LDADD+= -lgnuregex
LDADD+= ${RELTOP}/libiberty/libiberty.a
LDADD+= -lreadline
LDADD+= -ltermcap
GDBDIR= ${.CURDIR}/../../../../contrib/gdb
.PATH: ${GDBDIR}/gdb ${GDBDIR}/gdb/cli
.PATH: ${SRCDIR}/opcodes
CFLAGS+= -I$(.CURDIR) -I${DESTDIR}/usr/include/readline
YFLAGS=
CLEANFILES= init.c init.c-tmp nm.h tm.h xm.h gdbversion.c xregex.h
# We do this by grepping through sources. If that turns out to be too slow,
# maybe we could just require every .o file to have an initialization routine
# of a given name (remote-udi.o -> _initialize_remote_udi, etc.).
#
# Formatting conventions: The name of the _initialize_* routines must start
# in column zero, and must not be inside #if.
#
# Note that the set of files with init functions might change, or the names
# of the functions might change, so this files needs to depend on all the
# object files that will be linked into gdb.
init.c: ${XSRCS}
@${ECHO} Making ${.TARGET}
@rm -f init.c-tmp
@echo '/* Do not modify this file. */' >init.c-tmp
@echo '/* It is created automatically by the Makefile. */'>>init.c-tmp
@echo '#include "defs.h"' >>init.c-tmp
@echo '#include "call-cmds.h"' >>init.c-tmp
@echo 'void initialize_all_files () {' >>init.c-tmp
@for i in ${.ALLSRC} ; do \
filename=`echo $$i | sed \
-e '/^Onindy.c/d' \
-e '/^nindy.c/d' \
-e '/ttyflush.c/d' \
-e '/xdr_ld.c/d' \
-e '/xdr_ptrace.c/d' \
-e '/xdr_rdb.c/d' \
-e '/udr.c/d' \
-e '/udip2soc.c/d' \
-e '/udi2go32.c/d' \
-e '/version.c/d' \
-e '/^[a-z0-9A-Z_]*_[SU].c/d' \
-e '/[a-z0-9A-Z_]*-exp.tab.c/d'` ; \
case $$filename in \
"") ;; \
*) sed <$$filename >>init.c-tmp -n \
-e '/^_initialize_[a-z_0-9A-Z]* *(/s/^\([a-z_0-9A-Z]*\).*/ {extern void \1 (); \1 ();}/p' ; ;; \
esac ; \
done
@echo '}' >>init.c-tmp
@mv init.c-tmp ${.TARGET}
.PRECIOUS: init.c
nm.h:
echo '#include "${GDB_CPU}/nm-fbsd.h"' >${.TARGET}
echo '#include "fbsd-kgdb.h"' >>${.TARGET}
.for H in tm-fbsd xm-${GDB_CPU}
${H:C/-.*$//}.h:
ln -sf \
${.CURDIR}/../../../../contrib/gdb/gdb/config/${GDB_CPU}/${H}.h \
${.TARGET}
.endfor
GDB_VERSION= "5.2.1 (FreeBSD)"
gdbversion.c:
@echo '#include "version.h"' > ${.TARGET}
@echo 'const char version[] = ${GDB_VERSION};' >>${.TARGET}
@echo 'const char host_name[] = "${MACHINE_ARCH}-undermydesk-freebsd";' >>${.TARGET}
@echo 'const char target_name[] = "${TARGET_ARCH}-undermydesk-freebsd";' >>${.TARGET}
xregex.h:
@echo '#include <gnuregex.h>' >${.TARGET}
.include <bsd.prog.mk>