Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
a1516e92
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看板
提交
a1516e92
编写于
7月 09, 2003
作者:
B
bellard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ARM init fix
git-svn-id:
svn://svn.savannah.nongnu.org/qemu/trunk@316
c046a42c-6fe2-441c-8c8c-71466251a162
上级
6fb883e8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
16 addition
and
16 deletion
+16
-16
linux-user/elfload.c
linux-user/elfload.c
+16
-16
未找到文件。
linux-user/elfload.c
浏览文件 @
a1516e92
...
...
@@ -74,7 +74,8 @@ static inline void init_thread(struct target_pt_regs *regs, struct image_info *i
regs
->
ARM_sp
=
infop
->
start_stack
;
regs
->
ARM_r2
=
tswapl
(
stack
[
2
]);
/* envp */
regs
->
ARM_r1
=
tswapl
(
stack
[
1
]);
/* argv */
regs
->
ARM_r0
=
tswapl
(
stack
[
0
]);
/* argc */
/* XXX: it seems that r0 is zeroed after ! */
// regs->ARM_r0 = tswapl(stack[0]); /* argc */
}
#define USE_ELF_CORE_DUMP
...
...
@@ -490,7 +491,7 @@ static unsigned int * create_elf_tables(char *p, int argc, int envc,
* Force 16 byte alignment here for generality.
*/
sp
=
(
unsigned
int
*
)
(
~
15UL
&
(
unsigned
long
)
p
);
sp
-=
exec
?
DLINFO_ITEMS
*
2
:
2
;
sp
-=
DLINFO_ITEMS
*
2
;
dlinfo
=
sp
;
sp
-=
envc
+
1
;
envp
=
sp
;
...
...
@@ -505,21 +506,20 @@ static unsigned int * create_elf_tables(char *p, int argc, int envc,
put_user (tswapl(id), dlinfo++); \
put_user (tswapl(val), dlinfo++)
if
(
exec
)
{
/* Put this here for an ELF program interpreter */
NEW_AUX_ENT
(
AT_PHDR
,
(
target_ulong
)(
load_addr
+
exec
->
e_phoff
));
NEW_AUX_ENT
(
AT_PHENT
,
(
target_ulong
)(
sizeof
(
struct
elf_phdr
)));
NEW_AUX_ENT
(
AT_PHNUM
,
(
target_ulong
)(
exec
->
e_phnum
));
NEW_AUX_ENT
(
AT_PAGESZ
,
(
target_ulong
)(
TARGET_PAGE_SIZE
));
NEW_AUX_ENT
(
AT_BASE
,
(
target_ulong
)(
interp_load_addr
));
NEW_AUX_ENT
(
AT_FLAGS
,
(
target_ulong
)
0
);
NEW_AUX_ENT
(
AT_ENTRY
,
load_bias
+
exec
->
e_entry
);
NEW_AUX_ENT
(
AT_UID
,
(
target_ulong
)
getuid
());
NEW_AUX_ENT
(
AT_EUID
,
(
target_ulong
)
geteuid
());
NEW_AUX_ENT
(
AT_GID
,
(
target_ulong
)
getgid
());
NEW_AUX_ENT
(
AT_EGID
,
(
target_ulong
)
getegid
());
}
NEW_AUX_ENT
(
AT_PHDR
,
(
target_ulong
)(
load_addr
+
exec
->
e_phoff
));
NEW_AUX_ENT
(
AT_PHENT
,
(
target_ulong
)(
sizeof
(
struct
elf_phdr
)));
NEW_AUX_ENT
(
AT_PHNUM
,
(
target_ulong
)(
exec
->
e_phnum
));
NEW_AUX_ENT
(
AT_PAGESZ
,
(
target_ulong
)(
TARGET_PAGE_SIZE
));
NEW_AUX_ENT
(
AT_BASE
,
(
target_ulong
)(
interp_load_addr
));
NEW_AUX_ENT
(
AT_FLAGS
,
(
target_ulong
)
0
);
NEW_AUX_ENT
(
AT_ENTRY
,
load_bias
+
exec
->
e_entry
);
NEW_AUX_ENT
(
AT_UID
,
(
target_ulong
)
getuid
());
NEW_AUX_ENT
(
AT_EUID
,
(
target_ulong
)
geteuid
());
NEW_AUX_ENT
(
AT_GID
,
(
target_ulong
)
getgid
());
NEW_AUX_ENT
(
AT_EGID
,
(
target_ulong
)
getegid
());
NEW_AUX_ENT
(
AT_NULL
,
0
);
#undef NEW_AUX_ENT
put_user
(
tswapl
(
argc
),
--
sp
);
info
->
arg_start
=
(
unsigned
int
)((
unsigned
long
)
p
&
0xffffffff
);
while
(
argc
-->
0
)
{
...
...
@@ -1087,7 +1087,7 @@ static int load_elf_binary(struct linux_binprm * bprm, struct target_pt_regs * r
create_elf_tables
((
char
*
)
bprm
->
p
,
bprm
->
argc
,
bprm
->
envc
,
(
interpreter_type
==
INTERPRETER_ELF
?
&
elf_ex
:
NULL
)
,
&
elf_ex
,
load_addr
,
load_bias
,
interp_load_addr
,
(
interpreter_type
==
INTERPRETER_AOUT
?
0
:
1
),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录