Commit 32c6d70f authored by drath's avatar drath
Browse files

- fixed endianness helper macros (thanks to obilix and wiml for finding and fixing this bug)

- added declarations for 32bit fileio access functions (network byte order)
- fixed bug in etm trace dump file handling
- added XScale trace buffer decoding
- fixed arm_simulator ERROR numbers (-7xx used twice)
- fixed minor bug in debug output in stellaris.c


git-svn-id: svn://svn.berlios.de/openocd/trunk@178 b42882b7-edfa-0310-969c-e2dbd0fdcd60
parent 8c290412
......@@ -148,7 +148,7 @@ int stellaris_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, c
stellaris_info->target = get_target_by_num(strtoul(args[5], NULL, 0));
if (!stellaris_info->target)
{
ERROR("no target '%i' configured", args[5]);
ERROR("no target '%s' configured", args[5]);
exit(-1);
}
......
......@@ -82,6 +82,8 @@ extern int fileio_read(fileio_t *fileio, u32 size, u8 *buffer, u32 *size_read);
extern int fileio_seek(fileio_t *fileio, u32 position);
extern int fileio_close(fileio_t *fileio);
extern int fileio_open(fileio_t *fileio, char *url, enum fileio_access access, enum fileio_type type);
extern int fileio_read_u32(fileio_t *fileio, u32 *data);
extern int fileio_write_u32(fileio_t *fileio, u32 data);
#define ERROR_FILEIO_LOCATION_UNKNOWN (-1200)
#define ERROR_FILEIO_NOT_FOUND (-1201)
......
......@@ -40,23 +40,23 @@ typedef unsigned long long u64;
#ifdef WORDS_BIGENDIAN /* big endian host */
#define le_to_h_u32(x) (u32)(x[0] | x[1] << 8 | x[2] << 16 | x[3] << 24)
#define le_to_h_u16(x) (u16)(x[0] | x[1] << 8)
#define le_to_h_u32(x) (u32)((x)[0] | (x)[1] << 8 | (x)[2] << 16 | (x)[3] << 24)
#define le_to_h_u16(x) (u16)((x)[0] | (x)[1] << 8)
#define be_to_h_u32(x) (*(u32*)(x))
#define be_to_h_u16(x) (*(u16*)(x))
#define h_u32_to_le(buf, val) \
do { \
buf[3] = (val & 0xff000000) >> 24; \
buf[2] = (val & 0x00ff0000) >> 16; \
buf[1] = (val & 0x0000ff00) >> 8; \
buf[0] = (val & 0x000000ff); \
(buf)[3] = ((val) & 0xff000000) >> 24; \
(buf)[2] = ((val) & 0x00ff0000) >> 16; \
(buf)[1] = ((val) & 0x0000ff00) >> 8; \
(buf)[0] = ((val) & 0x000000ff); \
} while (0)
#define h_u16_to_le(buf, val) \
do { \
buf[0] = (val & 0xff000) >> 8; \
buf[1] = (val & 0x00ff); \
(buf)[0] = ((val) & 0xff000) >> 8; \
(buf)[1] = ((val) & 0x00ff); \
} while (0)
#define h_u32_to_be(buf, val) do { *(u32*)(buf) = (val); } while (0)
......@@ -73,16 +73,16 @@ typedef unsigned long long u64;
#define h_u32_to_be(buf, val) \
do { \
buf[0] = (val & 0xff000000) >> 24; \
buf[1] = (val & 0x00ff0000) >> 16; \
buf[2] = (val & 0x0000ff00) >> 8; \
buf[3] = (val & 0x000000ff); \
(buf)[0] = ((val) & 0xff000000) >> 24; \
(buf)[1] = ((val) & 0x00ff0000) >> 16; \
(buf)[2] = ((val) & 0x0000ff00) >> 8; \
(buf)[3] = ((val) & 0x000000ff); \
} while (0)
#define h_u16_to_be(buf, val) \
do { \
buf[0] = (val & 0xff000) >> 8; \
buf[1] = (val & 0x00ff); \
(buf)[0] = ((val) & 0xff000) >> 8; \
(buf)[1] = ((val) & 0x00ff); \
} while (0)
#endif
......
......@@ -18,7 +18,7 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#define OPENOCD_VERSION "Open On-Chip Debugger (2007-06-15 16:00 CEST)"
#define OPENOCD_VERSION "Open On-Chip Debugger (2007-06-28 12:30 CEST)"
#ifdef HAVE_CONFIG_H
#include "config.h"
......
......@@ -26,6 +26,6 @@
extern int arm_simulate_step(target_t *target, u32 *dry_run_pc);
#define ERROR_ARM_SIMULATOR_NOT_IMPLEMENTED (-1000)
#define ERROR_ARM_SIMULATOR_NOT_IMPLEMENTED (-700)
#endif /* ARM_SIMULATOR_H */
......@@ -1502,9 +1502,13 @@ int handle_etm_load_command(struct command_context_s *cmd_ctx, char *cmd, char *
for (i = 0; i < etm_ctx->trace_depth; i++)
{
fileio_read_u32(&file, &etm_ctx->trace_data[i].pipestat);
fileio_read_u32(&file, &etm_ctx->trace_data[i].packet);
fileio_read_u32(&file, &etm_ctx->trace_data[i].flags);
u32 pipestat, packet, flags;
fileio_read_u32(&file, &pipestat);
fileio_read_u32(&file, &packet);
fileio_read_u32(&file, &flags);
etm_ctx->trace_data[i].pipestat = pipestat & 0xff;
etm_ctx->trace_data[i].packet = packet & 0xffff;
etm_ctx->trace_data[i].flags = flags;
}
fileio_close(&file);
......
This diff is collapsed.
......@@ -24,6 +24,8 @@
#include "register.h"
#include "armv4_5.h"
#include "armv4_5_mmu.h"
#include "trace.h"
#include "image.h"
#define XSCALE_COMMON_MAGIC 0x58534341
......@@ -47,6 +49,40 @@ enum xscale_debug_reason
XSCALE_DBG_REASON_TB_FULL,
};
enum xscale_trace_entry_type
{
XSCALE_TRACE_MESSAGE,
XSCALE_TRACE_ADDRESS,
};
typedef struct xscale_trace_entry_s
{
u8 data;
enum xscale_trace_entry_type type;
} xscale_trace_entry_t;
typedef struct xscale_trace_data_s
{
xscale_trace_entry_t *entries;
int depth;
u32 chkpt0;
u32 chkpt1;
u32 last_instruction;
struct xscale_trace_data_s *next;
} xscale_trace_data_t;
typedef struct xscale_trace_s
{
trace_status_t capture_status; /* current state of capture run */
image_t *image; /* source for target opcodes */
xscale_trace_data_t *data; /* linked list of collected trace data */
int buffer_enabled; /* whether trace buffer is enabled */
int buffer_fill; /* maximum number of trace runs to read (-1 for wrap-around) */
int pc_ok;
u32 current_pc;
armv4_5_state_t core_state; /* current core state (ARM, Thumb, Jazelle) */
} xscale_trace_t;
typedef struct xscale_common_s
{
int common_magic;
......@@ -93,9 +129,8 @@ typedef struct xscale_common_s
u16 thumb_bkpt;
u8 vector_catch;
int trace_buffer_enabled;
int trace_buffer_fill;
xscale_trace_t trace;
int arch_debug_reason;
......@@ -142,4 +177,6 @@ enum
XSCALE_TXRXCTRL,
};
#define ERROR_XSCALE_NO_TRACE_DATA (-1500)
#endif /* XSCALE_H */
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment