Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
7f18f151
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7f18f151
编写于
7月 29, 2007
作者:
R
Ralf Baechle
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[MIPS] Fix build warning in unaligned load/store emulator.
Signed-off-by:
N
Ralf Baechle
<
ralf@linux-mips.org
>
上级
c3dd8cdf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
31 deletion
+20
-31
arch/mips/kernel/unaligned.c
arch/mips/kernel/unaligned.c
+20
-31
未找到文件。
arch/mips/kernel/unaligned.c
浏览文件 @
7f18f151
...
...
@@ -101,16 +101,14 @@ static u32 unaligned_action;
#endif
extern
void
show_registers
(
struct
pt_regs
*
regs
);
static
inline
int
emulate_load_store_insn
(
struct
pt_regs
*
regs
,
void
__user
*
addr
,
unsigned
int
__user
*
pc
,
unsigned
long
**
regptr
,
unsigned
long
*
newvalue
)
static
void
emulate_load_store_insn
(
struct
pt_regs
*
regs
,
void
__user
*
addr
,
unsigned
int
__user
*
pc
)
{
union
mips_instruction
insn
;
unsigned
long
value
;
unsigned
int
res
;
regs
->
regs
[
0
]
=
0
;
*
regptr
=
NULL
;
/*
* This load never faults.
...
...
@@ -179,8 +177,8 @@ static inline int emulate_load_store_insn(struct pt_regs *regs,
:
"r"
(
addr
),
"i"
(
-
EFAULT
));
if
(
res
)
goto
fault
;
*
newvalue
=
value
;
*
regptr
=
&
regs
->
regs
[
insn
.
i_format
.
rt
]
;
compute_return_epc
(
regs
)
;
regs
->
regs
[
insn
.
i_format
.
rt
]
=
value
;
break
;
case
lw_op
:
...
...
@@ -209,8 +207,8 @@ static inline int emulate_load_store_insn(struct pt_regs *regs,
:
"r"
(
addr
),
"i"
(
-
EFAULT
));
if
(
res
)
goto
fault
;
*
newvalue
=
value
;
*
regptr
=
&
regs
->
regs
[
insn
.
i_format
.
rt
]
;
compute_return_epc
(
regs
)
;
regs
->
regs
[
insn
.
i_format
.
rt
]
=
value
;
break
;
case
lhu_op
:
...
...
@@ -243,8 +241,8 @@ static inline int emulate_load_store_insn(struct pt_regs *regs,
:
"r"
(
addr
),
"i"
(
-
EFAULT
));
if
(
res
)
goto
fault
;
*
newvalue
=
value
;
*
regptr
=
&
regs
->
regs
[
insn
.
i_format
.
rt
]
;
compute_return_epc
(
regs
)
;
regs
->
regs
[
insn
.
i_format
.
rt
]
=
value
;
break
;
case
lwu_op
:
...
...
@@ -283,8 +281,8 @@ static inline int emulate_load_store_insn(struct pt_regs *regs,
:
"r"
(
addr
),
"i"
(
-
EFAULT
));
if
(
res
)
goto
fault
;
*
newvalue
=
value
;
*
regptr
=
&
regs
->
regs
[
insn
.
i_format
.
rt
]
;
compute_return_epc
(
regs
)
;
regs
->
regs
[
insn
.
i_format
.
rt
]
=
value
;
break
;
#endif
/* CONFIG_64BIT */
...
...
@@ -325,8 +323,8 @@ static inline int emulate_load_store_insn(struct pt_regs *regs,
:
"r"
(
addr
),
"i"
(
-
EFAULT
));
if
(
res
)
goto
fault
;
*
newvalue
=
value
;
*
regptr
=
&
regs
->
regs
[
insn
.
i_format
.
rt
]
;
compute_return_epc
(
regs
)
;
regs
->
regs
[
insn
.
i_format
.
rt
]
=
value
;
break
;
#endif
/* CONFIG_64BIT */
...
...
@@ -367,6 +365,7 @@ static inline int emulate_load_store_insn(struct pt_regs *regs,
:
"r"
(
value
),
"r"
(
addr
),
"i"
(
-
EFAULT
));
if
(
res
)
goto
fault
;
compute_return_epc
(
regs
);
break
;
case
sw_op
:
...
...
@@ -397,6 +396,7 @@ static inline int emulate_load_store_insn(struct pt_regs *regs,
:
"r"
(
value
),
"r"
(
addr
),
"i"
(
-
EFAULT
));
if
(
res
)
goto
fault
;
compute_return_epc
(
regs
);
break
;
case
sd_op
:
...
...
@@ -435,6 +435,7 @@ static inline int emulate_load_store_insn(struct pt_regs *regs,
:
"r"
(
value
),
"r"
(
addr
),
"i"
(
-
EFAULT
));
if
(
res
)
goto
fault
;
compute_return_epc
(
regs
);
break
;
#endif
/* CONFIG_64BIT */
...
...
@@ -473,34 +474,31 @@ static inline int emulate_load_store_insn(struct pt_regs *regs,
unaligned_instructions
++
;
#endif
return
0
;
return
;
fault:
/* Did we have an exception handler installed? */
if
(
fixup_exception
(
regs
))
return
1
;
return
;
die_if_kernel
(
"Unhandled kernel unaligned access"
,
regs
);
send_sig
(
SIGSEGV
,
current
,
1
);
return
0
;
return
;
sigbus:
die_if_kernel
(
"Unhandled kernel unaligned access"
,
regs
);
send_sig
(
SIGBUS
,
current
,
1
);
return
0
;
return
;
sigill:
die_if_kernel
(
"Unhandled kernel unaligned access or invalid instruction"
,
regs
);
send_sig
(
SIGILL
,
current
,
1
);
return
0
;
}
asmlinkage
void
do_ade
(
struct
pt_regs
*
regs
)
{
unsigned
long
*
regptr
,
newval
;
extern
int
do_dsemulret
(
struct
pt_regs
*
);
unsigned
int
__user
*
pc
;
mm_segment_t
seg
;
...
...
@@ -538,16 +536,7 @@ asmlinkage void do_ade(struct pt_regs *regs)
seg
=
get_fs
();
if
(
!
user_mode
(
regs
))
set_fs
(
KERNEL_DS
);
if
(
!
emulate_load_store_insn
(
regs
,
(
void
__user
*
)
regs
->
cp0_badvaddr
,
pc
,
&
regptr
,
&
newval
))
{
compute_return_epc
(
regs
);
/*
* Now that branch is evaluated, update the dest
* register if necessary
*/
if
(
regptr
)
*
regptr
=
newval
;
}
emulate_load_store_insn
(
regs
,
(
void
__user
*
)
regs
->
cp0_badvaddr
,
pc
);
set_fs
(
seg
);
return
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录