Line 47... |
Line 47... |
#endif /* HAVE_LIBREADLINE */
|
#endif /* HAVE_LIBREADLINE */
|
|
|
#include "arch.h"
|
#include "arch.h"
|
#include "parse.h"
|
#include "parse.h"
|
#include "abstract.h"
|
#include "abstract.h"
|
|
#include "labels.h"
|
#include "trace.h"
|
#include "trace.h"
|
#include "execute.h"
|
#include "execute.h"
|
#include "sim-config.h"
|
#include "sim-config.h"
|
#include "spr_defs.h"
|
#include "spr_defs.h"
|
#include "dma.h"
|
#include "dma.h"
|
Line 76... |
Line 77... |
static int gdb_read(void*,int);
|
static int gdb_read(void*,int);
|
static int gdb_write(void*,int);
|
static int gdb_write(void*,int);
|
void BlockJTAG(void);
|
void BlockJTAG(void);
|
|
|
/* CVS revision number. */
|
/* CVS revision number. */
|
const char rcsrev[] = "$Revision: 1.30 $";
|
const char rcsrev[] = "$Revision: 1.31 $";
|
|
|
/* Continuos run versus single step tracing switch. */
|
/* Continuos run versus single step tracing switch. */
|
int cont_run;
|
int cont_run;
|
|
|
/* History of execution */
|
/* History of execution */
|
Line 223... |
Line 224... |
char *argv[];
|
char *argv[];
|
{
|
{
|
char *linestr;
|
char *linestr;
|
char item1[500], b2[500], prev_str[500] = "";
|
char item1[500], b2[500], prev_str[500] = "";
|
char *redirstr;
|
char *redirstr;
|
int hush;
|
int hush = 0;
|
unsigned long endaddr = 0xFFFFFFFF;
|
unsigned long endaddr = 0xFFFFFFFF;
|
int first_prompt = 1;
|
int first_prompt = 1;
|
int trace_fd = 0;
|
int trace_fd = 0;
|
|
|
srand(getpid());
|
srand(getpid());
|
Line 277... |
Line 278... |
fprintf(config.fprof, "+00000000 FFFFFFFF FFFFFFFF main\n");
|
fprintf(config.fprof, "+00000000 FFFFFFFF FFFFFFFF main\n");
|
}
|
}
|
|
|
/* Read configuration file. */
|
/* Read configuration file. */
|
read_script_file("sim.cfg");
|
read_script_file("sim.cfg");
|
|
init_labels();
|
|
init_breakpoints();
|
print_config();
|
print_config();
|
signal(SIGINT, ctrl_c);
|
signal(SIGINT, ctrl_c);
|
initstats();
|
initstats();
|
build_automata();
|
build_automata();
|
|
|
Line 315... |
Line 318... |
for (cur_area = dev_list; cur_area; cur_area = cur_area->next)
|
for (cur_area = dev_list; cur_area; cur_area = cur_area->next)
|
for(i = 0; i < cur_area->size; i++) {
|
for(i = 0; i < cur_area->size; i++) {
|
val = random();
|
val = random();
|
if(random() > RAND_MAX/2)
|
if(random() > RAND_MAX/2)
|
val |= 0x80000000;
|
val |= 0x80000000;
|
set_mem8(i + cur_area->start, val, &breakpoint);
|
set_mem8(i + cur_area->addr_compare, val, &breakpoint);
|
}
|
}
|
} else if(config.pattern_mem) {
|
} else if(config.pattern_mem) {
|
int breakpoint = 0;
|
int breakpoint = 0;
|
for (cur_area = dev_list; cur_area; cur_area = cur_area->next)
|
for (cur_area = dev_list; cur_area; cur_area = cur_area->next)
|
for(i = 0; i < cur_area->size; i++)
|
for(i = 0; i < cur_area->size; i++)
|
set_mem8(i + cur_area->start, config.pattern_mem, &breakpoint);
|
set_mem8(i + cur_area->addr_compare, config.pattern_mem, &breakpoint);
|
} else {
|
} else {
|
int breakpoint = 0;
|
int breakpoint = 0;
|
for (cur_area = dev_list; cur_area; cur_area = cur_area->next)
|
for (cur_area = dev_list; cur_area; cur_area = cur_area->next)
|
for(i = 0; i < cur_area->size; i++)
|
for(i = 0; i < cur_area->size; i++)
|
set_mem8(i + cur_area->start, 0, &breakpoint);
|
set_mem8(i + cur_area->addr_compare, 0, &breakpoint);
|
}
|
}
|
}
|
}
|
|
|
uart_reset();
|
uart_reset();
|
dma_reset();
|
dma_reset();
|
eth_reset();
|
eth_reset();
|
tick_reset();
|
tick_reset();
|
pm_reset();
|
pm_reset();
|
pic_reset();
|
pic_reset();
|
|
mc_reset();
|
reset();
|
reset();
|
|
|
while(1) {
|
while(1) {
|
if (config.iprompt) {
|
if (config.iprompt) {
|
if(server_fd)
|
if(server_fd)
|
Line 623... |
Line 627... |
printf("%s: Unknown command.\n", linestr);
|
printf("%s: Unknown command.\n", linestr);
|
}
|
}
|
|
|
/* MM: 'run -1' means endless execution. */
|
/* MM: 'run -1' means endless execution. */
|
while(cont_run != 0) {
|
while(cont_run != 0) {
|
|
int debug_slowdown = DEBUG_SLOWDOWN;
|
extern int cycle_delay; /* Added by CZ 27/05/01. Set during exception. */
|
extern int cycle_delay; /* Added by CZ 27/05/01. Set during exception. */
|
extern int cpu_stalled; /* CZ from debug_interface */
|
extern int cpu_stalled; /* CZ from debug_interface */
|
|
|
if(cpu_stalled)
|
if(cpu_stalled)
|
{
|
{
|
Line 694... |
Line 699... |
tick_clock();
|
tick_clock();
|
pm_clock();
|
pm_clock();
|
uart_clock();
|
uart_clock();
|
dma_clock();
|
dma_clock();
|
eth_clock();
|
eth_clock();
|
|
|
#ifndef DEBUGMOD_OFF
|
#ifndef DEBUGMOD_OFF
|
|
if (debug_slowdown-- == 0) {
|
|
debug_slowdown = DEBUG_SLOWDOWN;
|
HandleServerSocket(false); /* block & check_stdin = false */
|
HandleServerSocket(false); /* block & check_stdin = false */
|
|
}
|
#endif
|
#endif
|
}
|
}
|
hush = 0;
|
hush = 0;
|
fflush(stdout);
|
fflush(stdout);
|
freopen("/dev/fd/0", "w+", stdout);
|
freopen("/dev/fd/0", "w+", stdout);
|
Line 824... |
Line 833... |
void debugmem( unsigned long from, unsigned long to )
|
void debugmem( unsigned long from, unsigned long to )
|
{
|
{
|
int i;
|
int i;
|
printf("starting to dump mem...\n");
|
printf("starting to dump mem...\n");
|
for(i=from; i<to; ) {
|
for(i=from; i<to; ) {
|
struct mem_entry *entry;
|
struct label_entry *entry;
|
unsigned int _insn;
|
unsigned int _insn;
|
printf("(%x) ", i);
|
printf("i=%x :: ", i);
|
if (verify_memoryarea(i) && cur_area->getentry && (entry = cur_area->getentry(i)) && entry->label)
|
|
printf("label: %s |", entry->label->name);
|
if (verify_memoryarea(i) && (entry = get_label(i)))
|
|
printf("label: %s |", entry->name);
|
|
|
iqueue[0].insn = _insn = evalsim_mem32(i);
|
iqueue[0].insn = _insn = evalsim_mem32(i);
|
iqueue[0].insn_index = insn_decode(_insn);
|
iqueue[0].insn_index = insn_decode(_insn);
|
disassemble_insn (_insn);
|
disassemble_insn (_insn);
|
printf("%08x %s\n", _insn, disassembled);
|
printf("%08x %s\n", _insn, disassembled);
|