From ec7e97602695b7e4a49013b525d0bf7a0c8d13fc Mon Sep 17 00:00:00 2001 From: Tomasz Malesinski Date: Sat, 4 Feb 2006 00:04:02 +0000 Subject: Added GDB API - a way to call stub procedures from a DEBUG build. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8561 a1c6a512-1295-4272-9138-f99709370657 --- firmware/debug.c | 31 +++++++++++++++++++++++++++++++ firmware/export/config-ifp7xx.h | 2 ++ firmware/export/debug.h | 5 +++++ firmware/export/gdb_api.h | 35 +++++++++++++++++++++++++++++++++++ gdb/linker.cfg | 8 +++++++- 5 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 firmware/export/gdb_api.h diff --git a/firmware/debug.c b/firmware/debug.c index ba19a9616a..4031ba432d 100644 --- a/firmware/debug.c +++ b/firmware/debug.c @@ -22,6 +22,9 @@ #include #include "config.h" #include "cpu.h" +#ifdef HAVE_GDB_API +#include "gdb_api.h" +#endif #ifdef DEBUG static char debugmembuf[200]; @@ -196,6 +199,34 @@ static void debug(const char *msg) putpacket(debugbuf); } #endif /* SH7034 */ + +#ifdef HAVE_GDB_API +static void *get_api_function(int n) +{ + struct gdb_api *api = (struct gdb_api *)GDB_API_ADDRESS; + if (api->magic == GDB_API_MAGIC) + return api->func[n]; + else + return NULL; +} + +void breakpoint(void) +{ + void (*f)(void) = get_api_function(0); + if (f) (*f)(); +} + +static void debug(char *msg) +{ + void (*f)(char *) = get_api_function(1); + if (f) (*f)(msg); +} + +void debug_init() +{ +} + +#endif /* HAVE_GDB_API */ #endif /* end of DEBUG section */ #ifdef __GNUC__ diff --git a/firmware/export/config-ifp7xx.h b/firmware/export/config-ifp7xx.h index 086b455235..9e5a432260 100644 --- a/firmware/export/config-ifp7xx.h +++ b/firmware/export/config-ifp7xx.h @@ -84,6 +84,8 @@ #define USB_ISP1582 +#define HAVE_GDB_API + /* Virtual LED (icon) */ #define CONFIG_LED LED_VIRTUAL diff --git a/firmware/export/debug.h b/firmware/export/debug.h index 0506ff1e42..52b6687c6b 100644 --- a/firmware/export/debug.h +++ b/firmware/export/debug.h @@ -31,6 +31,11 @@ extern void ldebugf(const char* file, int line, const char *fmt, ...); #define LDEBUGF(...) ldebugf(__FILE__, __LINE__, __VA_ARGS__) #else #if defined(DEBUG) + +#ifdef HAVE_GDB_API +void breakpoint(void); +#endif + #define DEBUGF debugf #define LDEBUGF debugf #else diff --git a/firmware/export/gdb_api.h b/firmware/export/gdb_api.h new file mode 100644 index 0000000000..896c8d399d --- /dev/null +++ b/firmware/export/gdb_api.h @@ -0,0 +1,35 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2006 by Tomasz Malesinski + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#ifndef _GDB_API_H_ +#define _GDB_API_H_ + +#include "config.h" + +#define GDB_API_MAGIC 0x6db570b +#ifdef IRIVER_IFP7XX_SERIES +#define GDB_API_ADDRESS 0x24006000 +#endif + +struct gdb_api +{ + unsigned long magic; + void *func[]; +}; +#endif diff --git a/gdb/linker.cfg b/gdb/linker.cfg index 2cc6a0e9b4..46ec779817 100644 --- a/gdb/linker.cfg +++ b/gdb/linker.cfg @@ -13,7 +13,8 @@ OUTPUT_FORMAT(elf32-sh) MEMORY { IRAM : ORIGIN = 0, LENGTH = 0x10000 - DRAM : ORIGIN = 0x24000000, LENGTH = 0x8000 + DRAM : ORIGIN = 0x24000000, LENGTH = 0x6000 + DRAM_API : ORIGIN = 0x24006000, LENGTH = 0x100 } SECTIONS @@ -29,6 +30,11 @@ SECTIONS *(.glue_7t) } >DRAM + .gdbapi : + { + *(.gdbapi) + } >DRAM_API + .data : { *(.data) -- cgit v1.2.3