From 5bae31990fef976eeb203cda69c94234aa437713 Mon Sep 17 00:00:00 2001 From: tracer-ysyx Date: Wed, 20 Mar 2024 19:20:11 +0800 Subject: [PATCH] =?UTF-8?q?>=20compile=20NEMU=20ysyx=5F22040000=20?= =?UTF-8?q?=E6=9D=8E=E5=BF=83=E6=9D=A8=20Linux=20calcite=206.6.19=20#1-Nix?= =?UTF-8?q?OS=20SMP=20PREEMPT=5FDYNAMIC=20Fri=20Mar=20=201=2012:35:11=20UT?= =?UTF-8?q?C=202024=20x86=5F64=20GNU/Linux=20=2019:20:11=20=20up=20=20=206?= =?UTF-8?q?:26,=20=202=20users,=20=20load=20average:=200.27,=200.25,=200.3?= =?UTF-8?q?7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nemu/src/utils/ftrace.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/nemu/src/utils/ftrace.c b/nemu/src/utils/ftrace.c index cec5783..a1069e6 100644 --- a/nemu/src/utils/ftrace.c +++ b/nemu/src/utils/ftrace.c @@ -8,7 +8,7 @@ // Put this into another file #ifdef CONFIG_FTRACE static vaddr_t ftrace_stack[CONFIG_FTRACE_STACK_SIZE] = {0}; -static vaddr_t ftrace_stack_pos = 0; +static vaddr_t ftrace_stack_len = 0; func_t *func_table = NULL; int func_table_len = 0, func_table_size = 8; #endif @@ -101,16 +101,20 @@ failed_nosym: } void ftrace_call(vaddr_t pc, vaddr_t addr) { - Assert(ftrace_stack_pos < CONFIG_FTRACE_STACK_SIZE, "Ftrace stack exceed limit, consider turn off ftrace or increse FTRACE_STACK_SIZE."); - ftrace_stack[ftrace_stack_pos++] = pc + 4; - Trace("%*s0x%x call [%s@0x%x]", ftrace_stack_pos, "", pc, get_func_name(addr), addr); + Assert(ftrace_stack_len < CONFIG_FTRACE_STACK_SIZE, + "Ftrace stack exceed size limit, consider turn off ftrace or increase " + "FTRACE_STACK_SIZE."); + ftrace_stack[ftrace_stack_len] = pc + 4; + Trace("%*s0x%x call [%s@0x%x]", ftrace_stack_len, "", pc, get_func_name(addr), + addr); + ftrace_stack_len++; } void ftrace_return(vaddr_t pc, vaddr_t addr) { - - for (; addr != ftrace_stack[ftrace_stack_pos] && ftrace_stack_pos >= 0; - ftrace_stack_pos--) { - Trace("%*s0x%x ret [%s@0x%x] ", ftrace_stack_pos, "", pc, get_func_name(addr), addr); + --ftrace_stack_len; + for (; addr != ftrace_stack[ftrace_stack_len] && ftrace_stack_len >= 0; + ftrace_stack_len--) { + Trace("%*s0x%x ret [%s@0x%x] ", ftrace_stack_len, "", pc, get_func_name(addr), addr); } // Trace("%*s0x%x ret [%s@0x%x]", ftrace_stack_pos, "", pc, get_func_name(addr), addr); }