Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
31af2f36
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
31af2f36
编写于
3月 21, 2017
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sparc: switch to RAW_COPY_USER
... and drop zeroing in sparc32. Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
1333eb78
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
37 addition
and
94 deletion
+37
-94
arch/sparc/Kconfig
arch/sparc/Kconfig
+1
-0
arch/sparc/include/asm/uaccess_32.h
arch/sparc/include/asm/uaccess_32.h
+4
-25
arch/sparc/include/asm/uaccess_64.h
arch/sparc/include/asm/uaccess_64.h
+5
-28
arch/sparc/lib/GENcopy_from_user.S
arch/sparc/lib/GENcopy_from_user.S
+1
-1
arch/sparc/lib/GENcopy_to_user.S
arch/sparc/lib/GENcopy_to_user.S
+1
-1
arch/sparc/lib/GENpatch.S
arch/sparc/lib/GENpatch.S
+2
-2
arch/sparc/lib/NG2copy_from_user.S
arch/sparc/lib/NG2copy_from_user.S
+1
-1
arch/sparc/lib/NG2copy_to_user.S
arch/sparc/lib/NG2copy_to_user.S
+1
-1
arch/sparc/lib/NG2patch.S
arch/sparc/lib/NG2patch.S
+2
-2
arch/sparc/lib/NG4copy_from_user.S
arch/sparc/lib/NG4copy_from_user.S
+1
-1
arch/sparc/lib/NG4copy_to_user.S
arch/sparc/lib/NG4copy_to_user.S
+1
-1
arch/sparc/lib/NG4patch.S
arch/sparc/lib/NG4patch.S
+2
-2
arch/sparc/lib/NGcopy_from_user.S
arch/sparc/lib/NGcopy_from_user.S
+1
-1
arch/sparc/lib/NGcopy_to_user.S
arch/sparc/lib/NGcopy_to_user.S
+1
-1
arch/sparc/lib/NGpatch.S
arch/sparc/lib/NGpatch.S
+2
-2
arch/sparc/lib/U1copy_from_user.S
arch/sparc/lib/U1copy_from_user.S
+2
-2
arch/sparc/lib/U1copy_to_user.S
arch/sparc/lib/U1copy_to_user.S
+2
-2
arch/sparc/lib/U3copy_to_user.S
arch/sparc/lib/U3copy_to_user.S
+1
-1
arch/sparc/lib/U3patch.S
arch/sparc/lib/U3patch.S
+2
-2
arch/sparc/lib/copy_in_user.S
arch/sparc/lib/copy_in_user.S
+3
-3
arch/sparc/lib/copy_user.S
arch/sparc/lib/copy_user.S
+1
-15
未找到文件。
arch/sparc/Kconfig
浏览文件 @
31af2f36
...
@@ -45,6 +45,7 @@ config SPARC
...
@@ -45,6 +45,7 @@ config SPARC
select HAVE_ARCH_HARDENED_USERCOPY
select HAVE_ARCH_HARDENED_USERCOPY
select PROVE_LOCKING_SMALL if PROVE_LOCKING
select PROVE_LOCKING_SMALL if PROVE_LOCKING
select ARCH_WANT_RELAX_ORDER
select ARCH_WANT_RELAX_ORDER
select ARCH_HAS_RAW_COPY_USER
config SPARC32
config SPARC32
def_bool !64BIT
def_bool !64BIT
...
...
arch/sparc/include/asm/uaccess_32.h
浏览文件 @
31af2f36
...
@@ -235,39 +235,18 @@ int __get_user_bad(void);
...
@@ -235,39 +235,18 @@ int __get_user_bad(void);
unsigned
long
__copy_user
(
void
__user
*
to
,
const
void
__user
*
from
,
unsigned
long
size
);
unsigned
long
__copy_user
(
void
__user
*
to
,
const
void
__user
*
from
,
unsigned
long
size
);
static
inline
unsigned
long
copy_to_user
(
void
__user
*
to
,
const
void
*
from
,
unsigned
long
n
)
static
inline
unsigned
long
raw_
copy_to_user
(
void
__user
*
to
,
const
void
*
from
,
unsigned
long
n
)
{
{
if
(
n
&&
__access_ok
((
unsigned
long
)
to
,
n
))
{
check_object_size
(
from
,
n
,
true
);
return
__copy_user
(
to
,
(
__force
void
__user
*
)
from
,
n
);
}
else
return
n
;
}
static
inline
unsigned
long
__copy_to_user
(
void
__user
*
to
,
const
void
*
from
,
unsigned
long
n
)
{
check_object_size
(
from
,
n
,
true
);
return
__copy_user
(
to
,
(
__force
void
__user
*
)
from
,
n
);
return
__copy_user
(
to
,
(
__force
void
__user
*
)
from
,
n
);
}
}
static
inline
unsigned
long
copy_from_user
(
void
*
to
,
const
void
__user
*
from
,
unsigned
long
n
)
static
inline
unsigned
long
raw_copy_from_user
(
void
*
to
,
const
void
__user
*
from
,
unsigned
long
n
)
{
if
(
n
&&
__access_ok
((
unsigned
long
)
from
,
n
))
{
check_object_size
(
to
,
n
,
false
);
return
__copy_user
((
__force
void
__user
*
)
to
,
from
,
n
);
}
else
{
memset
(
to
,
0
,
n
);
return
n
;
}
}
static
inline
unsigned
long
__copy_from_user
(
void
*
to
,
const
void
__user
*
from
,
unsigned
long
n
)
{
{
return
__copy_user
((
__force
void
__user
*
)
to
,
from
,
n
);
return
__copy_user
((
__force
void
__user
*
)
to
,
from
,
n
);
}
}
#define
__copy_to_user_inatomic __copy_to_user
#define
INLINE_COPY_FROM_USER
#define
__copy_from_user_inatomic __copy_from_user
#define
INLINE_COPY_TO_USER
static
inline
unsigned
long
__clear_user
(
void
__user
*
addr
,
unsigned
long
size
)
static
inline
unsigned
long
__clear_user
(
void
__user
*
addr
,
unsigned
long
size
)
{
{
...
...
arch/sparc/include/asm/uaccess_64.h
浏览文件 @
31af2f36
...
@@ -176,39 +176,19 @@ __asm__ __volatile__( \
...
@@ -176,39 +176,19 @@ __asm__ __volatile__( \
int
__get_user_bad
(
void
);
int
__get_user_bad
(
void
);
unsigned
long
__must_check
__
_copy_from_user
(
void
*
to
,
unsigned
long
__must_check
raw
_copy_from_user
(
void
*
to
,
const
void
__user
*
from
,
const
void
__user
*
from
,
unsigned
long
size
);
unsigned
long
size
);
static
inline
unsigned
long
__must_check
copy_from_user
(
void
*
to
,
const
void
__user
*
from
,
unsigned
long
size
)
{
check_object_size
(
to
,
size
,
false
);
return
___copy_from_user
(
to
,
from
,
size
);
}
#define __copy_from_user copy_from_user
unsigned
long
__must_check
__
_copy_to_user
(
void
__user
*
to
,
unsigned
long
__must_check
raw
_copy_to_user
(
void
__user
*
to
,
const
void
*
from
,
const
void
*
from
,
unsigned
long
size
);
unsigned
long
size
);
static
inline
unsigned
long
__must_check
#define INLINE_COPY_FROM_USER
copy_to_user
(
void
__user
*
to
,
const
void
*
from
,
unsigned
long
size
)
#define INLINE_COPY_TO_USER
{
check_object_size
(
from
,
size
,
true
);
return
___copy_to_user
(
to
,
from
,
size
);
unsigned
long
__must_check
raw_copy_in_user
(
void
__user
*
to
,
}
#define __copy_to_user copy_to_user
unsigned
long
__must_check
___copy_in_user
(
void
__user
*
to
,
const
void
__user
*
from
,
const
void
__user
*
from
,
unsigned
long
size
);
unsigned
long
size
);
static
inline
unsigned
long
__must_check
copy_in_user
(
void
__user
*
to
,
void
__user
*
from
,
unsigned
long
size
)
{
return
___copy_in_user
(
to
,
from
,
size
);
}
#define __copy_in_user copy_in_user
unsigned
long
__must_check
__clear_user
(
void
__user
*
,
unsigned
long
);
unsigned
long
__must_check
__clear_user
(
void
__user
*
,
unsigned
long
);
...
@@ -217,9 +197,6 @@ unsigned long __must_check __clear_user(void __user *, unsigned long);
...
@@ -217,9 +197,6 @@ unsigned long __must_check __clear_user(void __user *, unsigned long);
__must_check
long
strlen_user
(
const
char
__user
*
str
);
__must_check
long
strlen_user
(
const
char
__user
*
str
);
__must_check
long
strnlen_user
(
const
char
__user
*
str
,
long
n
);
__must_check
long
strnlen_user
(
const
char
__user
*
str
,
long
n
);
#define __copy_to_user_inatomic __copy_to_user
#define __copy_from_user_inatomic __copy_from_user
struct
pt_regs
;
struct
pt_regs
;
unsigned
long
compute_effective_address
(
struct
pt_regs
*
,
unsigned
long
compute_effective_address
(
struct
pt_regs
*
,
unsigned
int
insn
,
unsigned
int
insn
,
...
...
arch/sparc/lib/GENcopy_from_user.S
浏览文件 @
31af2f36
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
nop
#endif
#endif
...
...
arch/sparc/lib/GENcopy_to_user.S
浏览文件 @
31af2f36
...
@@ -27,7 +27,7 @@
...
@@ -27,7 +27,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
nop
#endif
#endif
...
...
arch/sparc/lib/GENpatch.S
浏览文件 @
31af2f36
...
@@ -26,8 +26,8 @@
...
@@ -26,8 +26,8 @@
.
type
generic_patch_copyops
,#
function
.
type
generic_patch_copyops
,#
function
generic_patch_copyops
:
generic_patch_copyops
:
GEN_DO_PATCH
(
memcpy
,
GENmemcpy
)
GEN_DO_PATCH
(
memcpy
,
GENmemcpy
)
GEN_DO_PATCH
(
__
_copy_from_user
,
GENcopy_from_user
)
GEN_DO_PATCH
(
raw
_copy_from_user
,
GENcopy_from_user
)
GEN_DO_PATCH
(
__
_copy_to_user
,
GENcopy_to_user
)
GEN_DO_PATCH
(
raw
_copy_to_user
,
GENcopy_to_user
)
retl
retl
nop
nop
.
size
generic_patch_copyops
,
.
-
generic_patch_copyops
.
size
generic_patch_copyops
,
.
-
generic_patch_copyops
arch/sparc/lib/NG2copy_from_user.S
浏览文件 @
31af2f36
...
@@ -36,7 +36,7 @@
...
@@ -36,7 +36,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
nop
#endif
#endif
...
...
arch/sparc/lib/NG2copy_to_user.S
浏览文件 @
31af2f36
...
@@ -45,7 +45,7 @@
...
@@ -45,7 +45,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
nop
#endif
#endif
...
...
arch/sparc/lib/NG2patch.S
浏览文件 @
31af2f36
...
@@ -26,8 +26,8 @@
...
@@ -26,8 +26,8 @@
.
type
niagara2_patch_copyops
,#
function
.
type
niagara2_patch_copyops
,#
function
niagara2_patch_copyops
:
niagara2_patch_copyops
:
NG_DO_PATCH
(
memcpy
,
NG2memcpy
)
NG_DO_PATCH
(
memcpy
,
NG2memcpy
)
NG_DO_PATCH
(
__
_copy_from_user
,
NG2copy_from_user
)
NG_DO_PATCH
(
raw
_copy_from_user
,
NG2copy_from_user
)
NG_DO_PATCH
(
__
_copy_to_user
,
NG2copy_to_user
)
NG_DO_PATCH
(
raw
_copy_to_user
,
NG2copy_to_user
)
retl
retl
nop
nop
.
size
niagara2_patch_copyops
,
.
-
niagara2_patch_copyops
.
size
niagara2_patch_copyops
,
.
-
niagara2_patch_copyops
arch/sparc/lib/NG4copy_from_user.S
浏览文件 @
31af2f36
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
nop
#endif
#endif
...
...
arch/sparc/lib/NG4copy_to_user.S
浏览文件 @
31af2f36
...
@@ -40,7 +40,7 @@
...
@@ -40,7 +40,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
nop
#endif
#endif
...
...
arch/sparc/lib/NG4patch.S
浏览文件 @
31af2f36
...
@@ -26,8 +26,8 @@
...
@@ -26,8 +26,8 @@
.
type
niagara4_patch_copyops
,#
function
.
type
niagara4_patch_copyops
,#
function
niagara4_patch_copyops
:
niagara4_patch_copyops
:
NG_DO_PATCH
(
memcpy
,
NG4memcpy
)
NG_DO_PATCH
(
memcpy
,
NG4memcpy
)
NG_DO_PATCH
(
__
_copy_from_user
,
NG4copy_from_user
)
NG_DO_PATCH
(
raw
_copy_from_user
,
NG4copy_from_user
)
NG_DO_PATCH
(
__
_copy_to_user
,
NG4copy_to_user
)
NG_DO_PATCH
(
raw
_copy_to_user
,
NG4copy_to_user
)
retl
retl
nop
nop
.
size
niagara4_patch_copyops
,
.
-
niagara4_patch_copyops
.
size
niagara4_patch_copyops
,
.
-
niagara4_patch_copyops
...
...
arch/sparc/lib/NGcopy_from_user.S
浏览文件 @
31af2f36
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
nop
#endif
#endif
...
...
arch/sparc/lib/NGcopy_to_user.S
浏览文件 @
31af2f36
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
nop
#endif
#endif
...
...
arch/sparc/lib/NGpatch.S
浏览文件 @
31af2f36
...
@@ -26,8 +26,8 @@
...
@@ -26,8 +26,8 @@
.
type
niagara_patch_copyops
,#
function
.
type
niagara_patch_copyops
,#
function
niagara_patch_copyops
:
niagara_patch_copyops
:
NG_DO_PATCH
(
memcpy
,
NGmemcpy
)
NG_DO_PATCH
(
memcpy
,
NGmemcpy
)
NG_DO_PATCH
(
__
_copy_from_user
,
NGcopy_from_user
)
NG_DO_PATCH
(
raw
_copy_from_user
,
NGcopy_from_user
)
NG_DO_PATCH
(
__
_copy_to_user
,
NGcopy_to_user
)
NG_DO_PATCH
(
raw
_copy_to_user
,
NGcopy_to_user
)
retl
retl
nop
nop
.
size
niagara_patch_copyops
,
.
-
niagara_patch_copyops
.
size
niagara_patch_copyops
,
.
-
niagara_patch_copyops
arch/sparc/lib/U1copy_from_user.S
浏览文件 @
31af2f36
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
.
text
; \
.
text
; \
.
align
4
;
.
align
4
;
#define FUNC_NAME
__
_copy_from_user
#define FUNC_NAME
raw
_copy_from_user
#define LOAD(type,addr,dest) type##a [addr] %asi, dest
#define LOAD(type,addr,dest) type##a [addr] %asi, dest
#define LOAD_BLK(addr,dest) ldda [addr] ASI_BLK_AIUS, dest
#define LOAD_BLK(addr,dest) ldda [addr] ASI_BLK_AIUS, dest
#define EX_RETVAL(x) 0
#define EX_RETVAL(x) 0
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
; \
nop
; \
#include "U1memcpy.S"
#include "U1memcpy.S"
arch/sparc/lib/U1copy_to_user.S
浏览文件 @
31af2f36
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
.
text
; \
.
text
; \
.
align
4
;
.
align
4
;
#define FUNC_NAME
__
_copy_to_user
#define FUNC_NAME
raw
_copy_to_user
#define STORE(type,src,addr) type##a src, [addr] ASI_AIUS
#define STORE(type,src,addr) type##a src, [addr] ASI_AIUS
#define STORE_BLK(src,addr) stda src, [addr] ASI_BLK_AIUS
#define STORE_BLK(src,addr) stda src, [addr] ASI_BLK_AIUS
#define EX_RETVAL(x) 0
#define EX_RETVAL(x) 0
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
; \
nop
; \
#include "U1memcpy.S"
#include "U1memcpy.S"
arch/sparc/lib/U3copy_to_user.S
浏览文件 @
31af2f36
...
@@ -31,7 +31,7 @@
...
@@ -31,7 +31,7 @@
#define PREAMBLE \
#define PREAMBLE \
rd
%
asi
,
%
g1
; \
rd
%
asi
,
%
g1
; \
cmp
%
g1
,
ASI_AIUS
; \
cmp
%
g1
,
ASI_AIUS
; \
bne
,
pn
%
icc
,
__
_copy_in_user
; \
bne
,
pn
%
icc
,
raw
_copy_in_user
; \
nop
; \
nop
; \
#include "U3memcpy.S"
#include "U3memcpy.S"
arch/sparc/lib/U3patch.S
浏览文件 @
31af2f36
...
@@ -26,8 +26,8 @@
...
@@ -26,8 +26,8 @@
.
type
cheetah_patch_copyops
,#
function
.
type
cheetah_patch_copyops
,#
function
cheetah_patch_copyops
:
cheetah_patch_copyops
:
ULTRA3_DO_PATCH
(
memcpy
,
U3memcpy
)
ULTRA3_DO_PATCH
(
memcpy
,
U3memcpy
)
ULTRA3_DO_PATCH
(
__
_copy_from_user
,
U3copy_from_user
)
ULTRA3_DO_PATCH
(
raw
_copy_from_user
,
U3copy_from_user
)
ULTRA3_DO_PATCH
(
__
_copy_to_user
,
U3copy_to_user
)
ULTRA3_DO_PATCH
(
raw
_copy_to_user
,
U3copy_to_user
)
retl
retl
nop
nop
.
size
cheetah_patch_copyops
,
.
-
cheetah_patch_copyops
.
size
cheetah_patch_copyops
,
.
-
cheetah_patch_copyops
arch/sparc/lib/copy_in_user.S
浏览文件 @
31af2f36
...
@@ -44,7 +44,7 @@ __retl_o2_plus_1:
...
@@ -44,7 +44,7 @@ __retl_o2_plus_1:
*
to
copy
register
windows
around
during
thread
cloning
.
*
to
copy
register
windows
around
during
thread
cloning
.
*/
*/
ENTRY
(
__
_copy_in_user
)
/
*
%
o0
=
dst
,
%
o1
=
src
,
%
o2
=
len
*/
ENTRY
(
raw
_copy_in_user
)
/
*
%
o0
=
dst
,
%
o1
=
src
,
%
o2
=
len
*/
cmp
%
o2
,
0
cmp
%
o2
,
0
be
,
pn
%
XCC
,
85
f
be
,
pn
%
XCC
,
85
f
or
%
o0
,
%
o1
,
%
o3
or
%
o0
,
%
o1
,
%
o3
...
@@ -105,5 +105,5 @@ ENTRY(___copy_in_user) /* %o0=dst, %o1=src, %o2=len */
...
@@ -105,5 +105,5 @@ ENTRY(___copy_in_user) /* %o0=dst, %o1=src, %o2=len */
add
%
o0
,
1
,
%
o0
add
%
o0
,
1
,
%
o0
retl
retl
clr
%
o0
clr
%
o0
ENDPROC
(
__
_copy_in_user
)
ENDPROC
(
raw
_copy_in_user
)
EXPORT_SYMBOL
(
__
_copy_in_user
)
EXPORT_SYMBOL
(
raw
_copy_in_user
)
arch/sparc/lib/copy_user.S
浏览文件 @
31af2f36
...
@@ -364,21 +364,7 @@ short_aligned_end:
...
@@ -364,21 +364,7 @@ short_aligned_end:
97
:
97
:
mov
%
o2
,
%
g3
mov
%
o2
,
%
g3
fixupretl
:
fixupretl
:
sethi
%
hi
(
PAGE_OFFSET
),
%
g1
retl
cmp
%
o0
,
%
g1
blu
1
f
cmp
%
o1
,
%
g1
bgeu
1
f
ld
[%
g6
+
TI_PREEMPT
],
%
g1
cmp
%
g1
,
0
bne
1
f
nop
save
%
sp
,
-
64
,
%
sp
mov
%
i0
,
%
o0
call
__bzero
mov
%
g3
,
%
o1
restore
1
:
retl
mov
%
g3
,
%
o0
mov
%
g3
,
%
o0
/*
exception
routine
sets
%
g2
to
(
broken_insn
-
first_insn
)>>
2
*/
/*
exception
routine
sets
%
g2
to
(
broken_insn
-
first_insn
)>>
2
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录