ea0d04f36e
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
151 lines
4.9 KiB
Makefile
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>
|