Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
1c3d2bb6
提交
1c3d2bb6
2月 07, 2012
创建
作者:
Silas Boyd-Wickizer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Don't use __builtin_return_address for stack traces
上级
553de92d
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
16 行增加
和
25 行删除
+16
-25
amd64.h
amd64.h
+8
-0
console.c
console.c
+8
-25
没有找到文件。
amd64.h
浏览文件 @
1c3d2bb6
...
...
@@ -191,6 +191,14 @@ rrsp(void)
return
val
;
}
static
inline
u64
rrbp
(
void
)
{
u64
val
;
__asm
volatile
(
"movq %%rbp,%0"
:
"=r"
(
val
));
return
val
;
}
static
inline
void
lcr4
(
u64
val
)
{
...
...
console.c
浏览文件 @
1c3d2bb6
...
...
@@ -135,26 +135,13 @@ puts(const char *s)
}
static
inline
void
stacktrace
(
void
)
printtrace
(
u64
rbp
)
{
#define PRINT_RET(i) \
do { \
uptr addr = (uptr) __builtin_return_address(i); \
if ((addr & KBASE) == KBASE) \
__cprintf(" %lx\n", addr); \
else \
return; \
} while (0)
PRINT_RET
(
0
);
PRINT_RET
(
1
);
PRINT_RET
(
2
);
PRINT_RET
(
3
);
PRINT_RET
(
4
);
PRINT_RET
(
5
);
PRINT_RET
(
6
);
#undef PRINT_RET
uptr
pc
[
10
];
getcallerpcs
((
void
*
)
rbp
,
pc
,
NELEM
(
pc
));
for
(
int
i
=
0
;
i
<
NELEM
(
pc
)
&&
pc
[
i
]
!=
0
;
i
++
)
__cprintf
(
" %p
\n
"
,
pc
[
i
]);
}
void
__noret__
...
...
@@ -164,8 +151,6 @@ kerneltrap(struct trapframe *tf)
const
char
*
name
=
"(no name)"
;
void
*
kstack
=
NULL
;
int
pid
=
0
;
uptr
pc
[
10
];
int
i
;
cli
();
acquire
(
&
cons
.
lock
);
...
...
@@ -182,9 +167,7 @@ kerneltrap(struct trapframe *tf)
tf
->
trapno
,
mycpu
()
->
id
,
tf
->
rip
,
tf
->
rsp
,
rcr2
(),
name
,
pid
,
kstack
);
getcallerpcs
((
void
*
)
tf
->
rbp
,
pc
,
NELEM
(
pc
));
for
(
i
=
0
;
i
<
NELEM
(
pc
)
&&
pc
[
i
]
!=
0
;
i
++
)
__cprintf
(
" %p
\n
"
,
pc
[
i
]);
printtrace
(
tf
->
rbp
);
panicked
=
1
;
sys_halt
();
...
...
@@ -206,7 +189,7 @@ panic(const char *fmt, ...)
vprintfmt
(
writecons
,
0
,
fmt
,
ap
);
va_end
(
ap
);
__cprintf
(
"
\n
"
);
stacktrace
(
);
printtrace
(
rrbp
()
);
panicked
=
1
;
sys_halt
();
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论