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
This commit is contained in:
Tomasz Malesinski 2006-02-04 00:04:02 +00:00
parent 760fea9ac7
commit ec7e976026
5 changed files with 80 additions and 1 deletions

View File

@ -22,6 +22,9 @@
#include <stdarg.h>
#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__

View File

@ -84,6 +84,8 @@
#define USB_ISP1582
#define HAVE_GDB_API
/* Virtual LED (icon) */
#define CONFIG_LED LED_VIRTUAL

View File

@ -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

35
firmware/export/gdb_api.h Normal file
View File

@ -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

View File

@ -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)