Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
5a236924
提交
5a236924
9月 01, 2011
创建
作者:
Robert Morris
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix usertests to correctly test what happens when you call
exec() with arguments that don't fit on a single page.
上级
15997d58
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
26 行增加
和
13 行删除
+26
-13
entry.S
entry.S
+2
-2
proc.c
proc.c
+1
-1
usertests.c
usertests.c
+20
-8
vm.c
vm.c
+3
-2
没有找到文件。
entry.S
浏览文件 @
5a236924
...
...
@@ -54,10 +54,10 @@ entry:
# Set up the stack pointer.
movl $(stack + STACK), %esp
#
Call main(), which switches
to executing at
#
Jump to main(), and switch
to executing at
# high addresses. The indirect call is needed because
# the assembler produces a PC-relative instruction
# for a direct
call.
# for a direct
jump.
mov $main, %eax
jmp *%eax
...
...
proc.c
浏览文件 @
5a236924
...
...
@@ -49,7 +49,7 @@ found:
p
->
pid
=
nextpid
++
;
release
(
&
ptable
.
lock
);
// Allocate kernel stack
if possible
.
// Allocate kernel stack.
if
((
p
->
kstack
=
kalloc
())
==
0
){
p
->
state
=
UNUSED
;
return
0
;
...
...
usertests.c
浏览文件 @
5a236924
...
...
@@ -1508,30 +1508,41 @@ bsstest(void)
printf
(
stdout
,
"bss test ok
\n
"
);
}
// does exec do something sensible if the arguments
// are larger than a page?
// does exec return an error if the arguments
// are larger than a page? or does it write
// below the stack and wreck the instructions/data?
void
bigargtest
(
void
)
{
int
pid
,
ppid
;
int
pid
,
ppid
,
fd
;
unlink
(
"bigarg-ok"
);
ppid
=
getpid
();
pid
=
fork
();
if
(
pid
==
0
){
char
*
args
[
32
+
1
];
static
char
*
args
[
MAXARG
];
int
i
;
for
(
i
=
0
;
i
<
32
;
i
++
)
args
[
i
]
=
"bigargs test: failed
\n
"
;
args
[
32
]
=
0
;
printf
(
stdout
,
"bigarg test
\n
"
);
for
(
i
=
0
;
i
<
MAXARG
-
1
;
i
++
)
args
[
i
]
=
"bigargs test: failed
\n
"
;
args
[
MAXARG
-
1
]
=
0
;
printf
(
stdout
,
"bigarg test
%d
\n
"
,
(
MAXARG
-
1
)
*
strlen
(
args
[
0
])
);
exec
(
"echo"
,
args
);
printf
(
stdout
,
"bigarg test ok
\n
"
);
fd
=
open
(
"bigarg-ok"
,
O_CREATE
);
close
(
fd
);
exit
();
}
else
if
(
pid
<
0
){
printf
(
stdout
,
"bigargtest: fork failed
\n
"
);
exit
();
}
wait
();
fd
=
open
(
"bigarg-ok"
,
0
);
if
(
fd
<
0
){
printf
(
stdout
,
"bigarg test failed!
\n
"
);
exit
();
}
close
(
fd
);
unlink
(
"bigarg-ok"
);
}
// what happens when the file system runs out of blocks?
...
...
@@ -1606,6 +1617,7 @@ main(int argc, char *argv[])
}
close
(
open
(
"usertests.ran"
,
O_CREATE
));
bigargtest
();
bigwrite
();
bigargtest
();
bsstest
();
...
...
vm.c
浏览文件 @
5a236924
...
...
@@ -68,7 +68,8 @@ walkpgdir(pde_t *pgdir, const void *va, char* (*alloc)(void))
// physical addresses starting at pa. va and size might not
// be page-aligned.
static
int
mappages
(
pde_t
*
pgdir
,
void
*
va
,
uint
size
,
uint
pa
,
int
perm
,
char
*
(
*
alloc
)(
void
))
mappages
(
pde_t
*
pgdir
,
void
*
va
,
uint
size
,
uint
pa
,
int
perm
,
char
*
(
*
alloc
)(
void
))
{
char
*
a
,
*
last
;
pte_t
*
pte
;
...
...
@@ -343,7 +344,7 @@ copyout(pde_t *pgdir, uint va, void *p, uint len)
{
char
*
buf
,
*
pa0
;
uint
n
,
va0
;
buf
=
(
char
*
)
p
;
while
(
len
>
0
){
va0
=
(
uint
)
PGROUNDDOWN
(
va
);
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论