Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
2b413144
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2b413144
编写于
5月 14, 2003
作者:
B
bellard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cosmetics
git-svn-id:
svn://svn.savannah.nongnu.org/qemu/trunk@173
c046a42c-6fe2-441c-8c8c-71466251a162
上级
3ebcc707
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
16 addition
and
13 deletion
+16
-13
exec-i386.c
exec-i386.c
+16
-13
未找到文件。
exec-i386.c
浏览文件 @
2b413144
...
...
@@ -324,10 +324,8 @@ void cpu_x86_load_seg(CPUX86State *s, int seg_reg, int selector)
the effective address of the memory exception. 'is_write' is 1 if a
write caused the exception and otherwise 0'. 'old_set' is the
signal set which should be restored */
static
inline
int
handle_cpu_signal
(
unsigned
long
pc
,
unsigned
long
address
,
int
is_write
,
sigset_t
*
old_set
)
static
inline
int
handle_cpu_signal
(
unsigned
long
pc
,
unsigned
long
address
,
int
is_write
,
sigset_t
*
old_set
)
{
#if defined(DEBUG_SIGNAL)
printf
(
"qemu: SIGSEGV pc=0x%08lx address=%08lx wr=%d oldset=0x%08lx
\n
"
,
...
...
@@ -355,13 +353,13 @@ static inline int handle_cpu_signal(unsigned long pc,
}
}
#if defined(__i386__)
int
cpu_x86_signal_handler
(
int
host_signum
,
struct
siginfo
*
info
,
void
*
puc
)
{
#if defined(__i386__)
struct
ucontext
*
uc
=
puc
;
unsigned
long
pc
;
sigset_t
*
pold_set
;
#ifndef REG_EIP
/* for glibc 2.1 */
...
...
@@ -370,20 +368,23 @@ int cpu_x86_signal_handler(int host_signum, struct siginfo *info,
#define REG_TRAPNO TRAPNO
#endif
pc
=
uc
->
uc_mcontext
.
gregs
[
REG_EIP
];
pold_set
=
&
uc
->
uc_sigmask
;
return
handle_cpu_signal
(
pc
,
(
unsigned
long
)
info
->
si_addr
,
uc
->
uc_mcontext
.
gregs
[
REG_TRAPNO
]
==
0xe
?
(
uc
->
uc_mcontext
.
gregs
[
REG_ERR
]
>>
1
)
&
1
:
0
,
pold_set
);
&
uc
->
uc_sigmask
);
}
#elif defined(__powerpc)
int
cpu_x86_signal_handler
(
int
host_signum
,
struct
siginfo
*
info
,
void
*
puc
)
{
struct
ucontext
*
uc
=
puc
;
struct
pt_regs
*
regs
=
uc
->
uc_mcontext
.
regs
;
unsigned
long
pc
;
sigset_t
*
pold_set
;
int
is_write
;
pc
=
regs
->
nip
;
pold_set
=
&
uc
->
uc_sigmask
;
is_write
=
0
;
#if 0
/* ppc 4xx case */
...
...
@@ -394,9 +395,11 @@ int cpu_x86_signal_handler(int host_signum, struct siginfo *info,
is_write
=
1
;
#endif
return
handle_cpu_signal
(
pc
,
(
unsigned
long
)
info
->
si_addr
,
is_write
,
pold_set
);
is_write
,
&
uc
->
uc_sigmask
);
}
#else
#error CPU specific signal handler needed
return
0
;
#endif
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录