Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
a32cf397
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a32cf397
编写于
9月 26, 2006
作者:
A
Andi Kleen
提交者:
Andi Kleen
9月 26, 2006
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[PATCH] i386: Get ebp from unwinder state when continuing fallback backtrace
Cc: jbeulich@novell.com Signed-off-by:
N
Andi Kleen
<
ak@suse.de
>
上级
950fee84
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
17 addition
and
8 deletion
+17
-8
arch/i386/kernel/traps.c
arch/i386/kernel/traps.c
+14
-8
include/asm-i386/unwind.h
include/asm-i386/unwind.h
+3
-0
未找到文件。
arch/i386/kernel/traps.c
浏览文件 @
a32cf397
...
@@ -171,7 +171,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
...
@@ -171,7 +171,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
unsigned
long
*
stack
,
unsigned
long
*
stack
,
struct
stacktrace_ops
*
ops
,
void
*
data
)
struct
stacktrace_ops
*
ops
,
void
*
data
)
{
{
unsigned
long
ebp
;
unsigned
long
ebp
=
0
;
if
(
!
task
)
if
(
!
task
)
task
=
current
;
task
=
current
;
...
@@ -199,6 +199,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
...
@@ -199,6 +199,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
stack
=
(
void
*
)
UNW_SP
(
&
info
);
stack
=
(
void
*
)
UNW_SP
(
&
info
);
if
(
!
stack
)
if
(
!
stack
)
return
;
return
;
ebp
=
UNW_FP
(
&
info
);
}
else
}
else
ops
->
warning
(
data
,
"Full inexact backtrace again:
\n
"
);
ops
->
warning
(
data
,
"Full inexact backtrace again:
\n
"
);
}
else
if
(
call_trace
>=
1
)
}
else
if
(
call_trace
>=
1
)
...
@@ -207,20 +208,25 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
...
@@ -207,20 +208,25 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
ops
->
warning
(
data
,
"Full inexact backtrace again:
\n
"
);
ops
->
warning
(
data
,
"Full inexact backtrace again:
\n
"
);
}
else
}
else
ops
->
warning
(
data
,
"Inexact backtrace:
\n
"
);
ops
->
warning
(
data
,
"Inexact backtrace:
\n
"
);
}
else
if
(
!
stack
)
{
}
if
(
!
stack
)
{
unsigned
long
dummy
;
unsigned
long
dummy
;
stack
=
&
dummy
;
stack
=
&
dummy
;
if
(
task
&&
task
!=
current
)
if
(
task
&&
task
!=
current
)
stack
=
(
unsigned
long
*
)
task
->
thread
.
esp
;
stack
=
(
unsigned
long
*
)
task
->
thread
.
esp
;
}
}
if
(
task
==
current
)
{
#ifdef CONFIG_FRAME_POINTER
/* Grab ebp right from our regs */
if
(
!
ebp
)
{
asm
(
"movl %%ebp, %0"
:
"=r"
(
ebp
)
:
);
if
(
task
==
current
)
{
}
else
{
/* Grab ebp right from our regs */
/* ebp is the last reg pushed by switch_to */
asm
(
"movl %%ebp, %0"
:
"=r"
(
ebp
)
:
);
ebp
=
*
(
unsigned
long
*
)
task
->
thread
.
esp
;
}
else
{
/* ebp is the last reg pushed by switch_to */
ebp
=
*
(
unsigned
long
*
)
task
->
thread
.
esp
;
}
}
}
#endif
while
(
1
)
{
while
(
1
)
{
struct
thread_info
*
context
;
struct
thread_info
*
context
;
...
...
include/asm-i386/unwind.h
浏览文件 @
a32cf397
...
@@ -28,6 +28,8 @@ struct unwind_frame_info
...
@@ -28,6 +28,8 @@ struct unwind_frame_info
#define FRAME_LINK_OFFSET 0
#define FRAME_LINK_OFFSET 0
#define STACK_BOTTOM(tsk) STACK_LIMIT((tsk)->thread.esp0)
#define STACK_BOTTOM(tsk) STACK_LIMIT((tsk)->thread.esp0)
#define STACK_TOP(tsk) ((tsk)->thread.esp0)
#define STACK_TOP(tsk) ((tsk)->thread.esp0)
#else
#define UNW_FP(frame) ((void)(frame), 0)
#endif
#endif
#define STACK_LIMIT(ptr) (((ptr) - 1) & ~(THREAD_SIZE - 1))
#define STACK_LIMIT(ptr) (((ptr) - 1) & ~(THREAD_SIZE - 1))
...
@@ -88,6 +90,7 @@ static inline int arch_unw_user_mode(const struct unwind_frame_info *info)
...
@@ -88,6 +90,7 @@ static inline int arch_unw_user_mode(const struct unwind_frame_info *info)
#define UNW_PC(frame) ((void)(frame), 0)
#define UNW_PC(frame) ((void)(frame), 0)
#define UNW_SP(frame) ((void)(frame), 0)
#define UNW_SP(frame) ((void)(frame), 0)
#define UNW_FP(frame) ((void)(frame), 0)
static
inline
int
arch_unw_user_mode
(
const
void
*
info
)
static
inline
int
arch_unw_user_mode
(
const
void
*
info
)
{
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录