> compile NEMU

ysyx_22040000 李心杨
Linux calcite 6.6.19 #1-NixOS SMP PREEMPT_DYNAMIC Fri Mar  1 12:35:11 UTC 2024 x86_64 GNU/Linux
 15:34:03  up   5:10,  2 users,  load average: 0.44, 0.29, 0.40
This commit is contained in:
tracer-ysyx 2024-03-13 15:34:03 +08:00 committed by xinyangli
parent b5f076e957
commit 18d33c363b
19 changed files with 208 additions and 406 deletions

0
nemu/.result.tmp Normal file
View file

View file

@ -151,6 +151,10 @@ config ITRACE_COND
string "Only trace instructions when the condition is true"
default "true"
config ITRACE_BUFFER
depends on ITRACE
int "Buffer size for intruction trace (unit: number of instructions)"
default 10
config DIFFTEST
depends on TARGET_NATIVE_ELF

View file

@ -23,7 +23,8 @@ typedef struct Decode {
vaddr_t snpc; // static next pc
vaddr_t dnpc; // dynamic next pc
ISADecodeInfo isa;
IFDEF(CONFIG_ITRACE, char logbuf[128]);
IFDEF(CONFIG_ITRACE, char logbuf[CONFIG_ITRACE_BUFFER][128]);
IFDEF(CONFIG_ITRACE, int logbuf_rear);
} Decode;
// --- pattern matching mechanism ---

View file

@ -35,9 +35,9 @@ bool wp_eval_all();
static void trace_and_difftest(Decode *_this, vaddr_t dnpc) {
#ifdef CONFIG_ITRACE_COND
if (ITRACE_COND) { log_write("%s\n", _this->logbuf); }
if (ITRACE_COND) { log_write("%s\n", _this->logbuf[_this->logbuf_rear]); }
#endif
if (g_print_step) { IFDEF(CONFIG_ITRACE, puts(_this->logbuf)); }
if (g_print_step) { IFDEF(CONFIG_ITRACE, puts(_this->logbuf[_this->logbuf_rear])); }
IFDEF(CONFIG_DIFFTEST, difftest_step(_this->pc, dnpc));
}
@ -47,7 +47,8 @@ static void exec_once(Decode *s, vaddr_t pc) {
isa_exec_once(s);
cpu.pc = s->dnpc;
#ifdef CONFIG_ITRACE
char *p = s->logbuf;
s->logbuf_rear = (s->logbuf_rear + 1) % CONFIG_ITRACE_BUFFER;
char *p = s->logbuf[s->logbuf_rear];
p += snprintf(p, sizeof(s->logbuf), FMT_WORD ":", s->pc);
int ilen = s->snpc - s->pc;
int i;
@ -64,7 +65,7 @@ static void exec_once(Decode *s, vaddr_t pc) {
#ifndef CONFIG_ISA_loongarch32r
void disassemble(char *str, int size, uint64_t pc, uint8_t *code, int nbyte);
disassemble(p, s->logbuf + sizeof(s->logbuf) - p,
disassemble(p, s->logbuf[s->logbuf_rear] + sizeof(s->logbuf) - p,
MUXDEF(CONFIG_ISA_x86, s->snpc, s->pc), (uint8_t *)&s->isa.inst.val, ilen);
#else
p[0] = '\0'; // the upstream llvm does not support loongarch32r
@ -79,7 +80,7 @@ static void execute(uint64_t n) {
g_nr_guest_inst ++;
trace_and_difftest(&s, cpu.pc);
if (wp_eval_all()) {
puts(s.logbuf);
puts(s.logbuf[s.logbuf_rear]);
break;
}
if (nemu_state.state != NEMU_RUNNING) break;

View file

@ -54,7 +54,7 @@ static void decode_operand(Decode *s, int *rd, word_t *src1, word_t *src2,
static void do_branch(Decode *s, bool condition, word_t offset) {
if (condition) {
puts(s->logbuf);
// puts(s->logbuf[s->logbuf_rear]);
s->dnpc = s->pc + offset;
}
}