aboutsummaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorMarcel Moolenaar <marcel@FreeBSD.org>2013-12-28 23:31:22 +0000
committerMarcel Moolenaar <marcel@FreeBSD.org>2013-12-28 23:31:22 +0000
commit03197d0ab067587450d78f5203006ec94398dff0 (patch)
tree146a08f682e9b153111393e066f9ab0b88d10f10 /gnu
parent29c425acaed5ca7556db51e20d5958fe10d1e4c5 (diff)
downloadsrc-03197d0ab067587450d78f5203006ec94398dff0.tar.gz
src-03197d0ab067587450d78f5203006ec94398dff0.zip
When building a cross kgdb, link against the appropriate cross libkvm.
Provide an implementation of ps_pglobal_lookup() for use by the cross libkvm.
Notes
Notes: svn path=/head/; revision=260027
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/gdb/kgdb/Makefile10
-rw-r--r--gnu/usr.bin/gdb/kgdb/main.c21
2 files changed, 29 insertions, 2 deletions
diff --git a/gnu/usr.bin/gdb/kgdb/Makefile b/gnu/usr.bin/gdb/kgdb/Makefile
index 1372f17bf8ed..30cbf3ca1f9f 100644
--- a/gnu/usr.bin/gdb/kgdb/Makefile
+++ b/gnu/usr.bin/gdb/kgdb/Makefile
@@ -8,7 +8,13 @@ BULIBS= ${OBJ_BU}/libbfd/libbfd.a ${OBJ_BU}/libopcodes/libopcodes.a \
${OBJ_BU}/libiberty/libiberty.a
GDBLIBS= ${OBJ_GDB}/libgdb/libgdb.a
-DPADD= ${GDBLIBS} ${BULIBS} ${LIBKVM} ${LIBM} ${LIBREADLINE} ${LIBTERMCAP} ${LIBGNUREGEX}
-LDADD= ${GDBLIBS} ${BULIBS} -lkvm -lm -lreadline -ltermcap -lgnuregex
+DPADD= ${GDBLIBS} ${BULIBS} ${LIBKVM} ${LIBM} ${LIBREADLINE} ${LIBTERMCAP} \
+ ${LIBGNUREGEX}
+LDADD= ${GDBLIBS} ${BULIBS} -lkvm${GDB_SUFFIX} -lm -lreadline -ltermcap \
+ -lgnuregex
+
+.if defined(GDB_CROSS_DEBUGGER)
+CFLAGS+= -Wl,-export-dynamic
+.endif
.include <bsd.prog.mk>
diff --git a/gnu/usr.bin/gdb/kgdb/main.c b/gnu/usr.bin/gdb/kgdb/main.c
index aa062a2dd8c0..19246c050466 100644
--- a/gnu/usr.bin/gdb/kgdb/main.c
+++ b/gnu/usr.bin/gdb/kgdb/main.c
@@ -41,6 +41,9 @@ __FBSDID("$FreeBSD$");
#include <kvm.h>
#include <limits.h>
#include <paths.h>
+#ifdef CROSS_DEBUGGER
+#include <proc_service.h>
+#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -78,6 +81,24 @@ static struct ui_file *parse_gdberr;
static void (*kgdb_new_objfile_chain)(struct objfile * objfile);
+#ifdef CROSS_DEBUGGER
+ps_err_e
+ps_pglobal_lookup(struct ps_prochandle *ph, const char *obj, const char *name,
+ psaddr_t *sym_addr)
+{
+ struct minimal_symbol *ms;
+ CORE_ADDR addr;
+
+ ms = lookup_minimal_symbol (name, NULL, NULL);
+ if (ms == NULL)
+ return PS_NOSYM;
+
+ addr = SYMBOL_VALUE_ADDRESS (ms);
+ store_typed_address(sym_addr, builtin_type_void_data_ptr, addr);
+ return PS_OK;
+}
+#endif
+
static void
usage(void)
{