Files
xv6-custom-os/usertests.asm

6631 lines
279 KiB
NASM

_usertests: file format elf32-i386
Disassembly of section .text:
00000000 <main>:
unsigned int rand() {
randstate = randstate * 1664525 + 1013904223;
return randstate;
}
int main(int argc, char *argv[]) {
0: 8d 4c 24 04 lea 0x4(%esp),%ecx
4: 83 e4 f0 and $0xfffffff0,%esp
7: ff 71 fc push -0x4(%ecx)
a: 55 push %ebp
b: 89 e5 mov %esp,%ebp
d: 51 push %ecx
e: 83 ec 0c sub $0xc,%esp
printf(1, "usertests starting\n");
11: 68 66 4d 00 00 push $0x4d66
16: 6a 01 push $0x1
18: e8 33 3a 00 00 call 3a50 <printf>
if (open("usertests.ran", 0) >= 0) {
1d: 59 pop %ecx
1e: 58 pop %eax
1f: 6a 00 push $0x0
21: 68 7a 4d 00 00 push $0x4d7a
26: e8 10 39 00 00 call 393b <open>
2b: 83 c4 10 add $0x10,%esp
2e: 85 c0 test %eax,%eax
30: 78 13 js 45 <main+0x45>
printf(1, "already ran user tests -- rebuild fs.img\n");
32: 52 push %edx
33: 52 push %edx
34: 68 e4 54 00 00 push $0x54e4
39: 6a 01 push $0x1
3b: e8 10 3a 00 00 call 3a50 <printf>
exit();
40: e8 8e 38 00 00 call 38d3 <exit>
}
close(open("usertests.ran", O_CREATE));
45: 50 push %eax
46: 50 push %eax
47: 68 00 02 00 00 push $0x200
4c: 68 7a 4d 00 00 push $0x4d7a
51: e8 e5 38 00 00 call 393b <open>
56: 89 04 24 mov %eax,(%esp)
59: e8 0d 39 00 00 call 396b <close>
argptest();
5e: e8 8d 35 00 00 call 35f0 <argptest>
createdelete();
63: e8 b8 11 00 00 call 1220 <createdelete>
linkunlink();
68: e8 73 1a 00 00 call 1ae0 <linkunlink>
concreate();
6d: e8 6e 17 00 00 call 17e0 <concreate>
fourfiles();
72: e8 a9 0f 00 00 call 1020 <fourfiles>
sharedfd();
77: e8 e4 0d 00 00 call e60 <sharedfd>
bigargtest();
7c: e8 2f 32 00 00 call 32b0 <bigargtest>
bigwrite();
81: e8 7a 23 00 00 call 2400 <bigwrite>
bigargtest();
86: e8 25 32 00 00 call 32b0 <bigargtest>
bsstest();
8b: e8 b0 31 00 00 call 3240 <bsstest>
sbrktest();
90: e8 ab 2c 00 00 call 2d40 <sbrktest>
validatetest();
95: e8 f6 30 00 00 call 3190 <validatetest>
opentest();
9a: e8 61 03 00 00 call 400 <opentest>
writetest();
9f: e8 ec 03 00 00 call 490 <writetest>
writetest1();
a4: e8 c7 05 00 00 call 670 <writetest1>
createtest();
a9: e8 92 07 00 00 call 840 <createtest>
openiputtest();
ae: e8 4d 02 00 00 call 300 <openiputtest>
exitiputtest();
b3: e8 48 01 00 00 call 200 <exitiputtest>
iputtest();
b8: e8 63 00 00 00 call 120 <iputtest>
mem();
bd: e8 ce 0c 00 00 call d90 <mem>
pipe1();
c2: e8 59 09 00 00 call a20 <pipe1>
preempt();
c7: e8 e4 0a 00 00 call bb0 <preempt>
exitwait();
cc: e8 3f 0c 00 00 call d10 <exitwait>
rmdot();
d1: e8 1a 27 00 00 call 27f0 <rmdot>
fourteen();
d6: e8 d5 25 00 00 call 26b0 <fourteen>
bigfile();
db: e8 00 24 00 00 call 24e0 <bigfile>
subdir();
e0: e8 3b 1c 00 00 call 1d20 <subdir>
linktest();
e5: e8 e6 14 00 00 call 15d0 <linktest>
unlinkread();
ea: e8 51 13 00 00 call 1440 <unlinkread>
dirfile();
ef: e8 7c 28 00 00 call 2970 <dirfile>
iref();
f4: e8 77 2a 00 00 call 2b70 <iref>
forktest();
f9: e8 92 2b 00 00 call 2c90 <forktest>
bigdir(); // slow
fe: e8 ed 1a 00 00 call 1bf0 <bigdir>
uio();
103: e8 78 34 00 00 call 3580 <uio>
exectest();
108: e8 c3 08 00 00 call 9d0 <exectest>
exit();
10d: e8 c1 37 00 00 call 38d3 <exit>
112: 66 90 xchg %ax,%ax
114: 66 90 xchg %ax,%ax
116: 66 90 xchg %ax,%ax
118: 66 90 xchg %ax,%ax
11a: 66 90 xchg %ax,%ax
11c: 66 90 xchg %ax,%ax
11e: 66 90 xchg %ax,%ax
00000120 <iputtest>:
void iputtest(void) {
120: 55 push %ebp
121: 89 e5 mov %esp,%ebp
123: 83 ec 10 sub $0x10,%esp
printf(stdout, "iput test\n");
126: 68 0c 3e 00 00 push $0x3e0c
12b: ff 35 68 5e 00 00 push 0x5e68
131: e8 1a 39 00 00 call 3a50 <printf>
if (mkdir("iputdir") < 0) {
136: c7 04 24 9f 3d 00 00 movl $0x3d9f,(%esp)
13d: e8 21 38 00 00 call 3963 <mkdir>
142: 83 c4 10 add $0x10,%esp
145: 85 c0 test %eax,%eax
147: 78 58 js 1a1 <iputtest+0x81>
if (chdir("iputdir") < 0) {
149: 83 ec 0c sub $0xc,%esp
14c: 68 9f 3d 00 00 push $0x3d9f
151: e8 b5 37 00 00 call 390b <chdir>
156: 83 c4 10 add $0x10,%esp
159: 85 c0 test %eax,%eax
15b: 0f 88 85 00 00 00 js 1e6 <iputtest+0xc6>
if (unlink("../iputdir") < 0) {
161: 83 ec 0c sub $0xc,%esp
164: 68 9c 3d 00 00 push $0x3d9c
169: e8 e5 37 00 00 call 3953 <unlink>
16e: 83 c4 10 add $0x10,%esp
171: 85 c0 test %eax,%eax
173: 78 5a js 1cf <iputtest+0xaf>
if (chdir("/") < 0) {
175: 83 ec 0c sub $0xc,%esp
178: 68 c1 3d 00 00 push $0x3dc1
17d: e8 89 37 00 00 call 390b <chdir>
182: 83 c4 10 add $0x10,%esp
185: 85 c0 test %eax,%eax
187: 78 2f js 1b8 <iputtest+0x98>
printf(stdout, "iput test ok\n");
189: 83 ec 08 sub $0x8,%esp
18c: 68 44 3e 00 00 push $0x3e44
191: ff 35 68 5e 00 00 push 0x5e68
197: e8 b4 38 00 00 call 3a50 <printf>
}
19c: 83 c4 10 add $0x10,%esp
19f: c9 leave
1a0: c3 ret
printf(stdout, "mkdir failed\n");
1a1: 50 push %eax
1a2: 50 push %eax
1a3: 68 78 3d 00 00 push $0x3d78
1a8: ff 35 68 5e 00 00 push 0x5e68
1ae: e8 9d 38 00 00 call 3a50 <printf>
exit();
1b3: e8 1b 37 00 00 call 38d3 <exit>
printf(stdout, "chdir / failed\n");
1b8: 50 push %eax
1b9: 50 push %eax
1ba: 68 c3 3d 00 00 push $0x3dc3
1bf: ff 35 68 5e 00 00 push 0x5e68
1c5: e8 86 38 00 00 call 3a50 <printf>
exit();
1ca: e8 04 37 00 00 call 38d3 <exit>
printf(stdout, "unlink ../iputdir failed\n");
1cf: 52 push %edx
1d0: 52 push %edx
1d1: 68 a7 3d 00 00 push $0x3da7
1d6: ff 35 68 5e 00 00 push 0x5e68
1dc: e8 6f 38 00 00 call 3a50 <printf>
exit();
1e1: e8 ed 36 00 00 call 38d3 <exit>
printf(stdout, "chdir iputdir failed\n");
1e6: 51 push %ecx
1e7: 51 push %ecx
1e8: 68 86 3d 00 00 push $0x3d86
1ed: ff 35 68 5e 00 00 push 0x5e68
1f3: e8 58 38 00 00 call 3a50 <printf>
exit();
1f8: e8 d6 36 00 00 call 38d3 <exit>
1fd: 8d 76 00 lea 0x0(%esi),%esi
00000200 <exitiputtest>:
void exitiputtest(void) {
200: 55 push %ebp
201: 89 e5 mov %esp,%ebp
203: 83 ec 10 sub $0x10,%esp
printf(stdout, "exitiput test\n");
206: 68 d3 3d 00 00 push $0x3dd3
20b: ff 35 68 5e 00 00 push 0x5e68
211: e8 3a 38 00 00 call 3a50 <printf>
pid = fork();
216: e8 b0 36 00 00 call 38cb <fork>
if (pid < 0) {
21b: 83 c4 10 add $0x10,%esp
21e: 85 c0 test %eax,%eax
220: 0f 88 8a 00 00 00 js 2b0 <exitiputtest+0xb0>
if (pid == 0) {
226: 75 50 jne 278 <exitiputtest+0x78>
if (mkdir("iputdir") < 0) {
228: 83 ec 0c sub $0xc,%esp
22b: 68 9f 3d 00 00 push $0x3d9f
230: e8 2e 37 00 00 call 3963 <mkdir>
235: 83 c4 10 add $0x10,%esp
238: 85 c0 test %eax,%eax
23a: 0f 88 87 00 00 00 js 2c7 <exitiputtest+0xc7>
if (chdir("iputdir") < 0) {
240: 83 ec 0c sub $0xc,%esp
243: 68 9f 3d 00 00 push $0x3d9f
248: e8 be 36 00 00 call 390b <chdir>
24d: 83 c4 10 add $0x10,%esp
250: 85 c0 test %eax,%eax
252: 0f 88 86 00 00 00 js 2de <exitiputtest+0xde>
if (unlink("../iputdir") < 0) {
258: 83 ec 0c sub $0xc,%esp
25b: 68 9c 3d 00 00 push $0x3d9c
260: e8 ee 36 00 00 call 3953 <unlink>
265: 83 c4 10 add $0x10,%esp
268: 85 c0 test %eax,%eax
26a: 78 2c js 298 <exitiputtest+0x98>
exit();
26c: e8 62 36 00 00 call 38d3 <exit>
271: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
wait();
278: e8 5e 36 00 00 call 38db <wait>
printf(stdout, "exitiput test ok\n");
27d: 83 ec 08 sub $0x8,%esp
280: 68 f6 3d 00 00 push $0x3df6
285: ff 35 68 5e 00 00 push 0x5e68
28b: e8 c0 37 00 00 call 3a50 <printf>
}
290: 83 c4 10 add $0x10,%esp
293: c9 leave
294: c3 ret
295: 8d 76 00 lea 0x0(%esi),%esi
printf(stdout, "unlink ../iputdir failed\n");
298: 83 ec 08 sub $0x8,%esp
29b: 68 a7 3d 00 00 push $0x3da7
2a0: ff 35 68 5e 00 00 push 0x5e68
2a6: e8 a5 37 00 00 call 3a50 <printf>
exit();
2ab: e8 23 36 00 00 call 38d3 <exit>
printf(stdout, "fork failed\n");
2b0: 51 push %ecx
2b1: 51 push %ecx
2b2: 68 b9 4c 00 00 push $0x4cb9
2b7: ff 35 68 5e 00 00 push 0x5e68
2bd: e8 8e 37 00 00 call 3a50 <printf>
exit();
2c2: e8 0c 36 00 00 call 38d3 <exit>
printf(stdout, "mkdir failed\n");
2c7: 52 push %edx
2c8: 52 push %edx
2c9: 68 78 3d 00 00 push $0x3d78
2ce: ff 35 68 5e 00 00 push 0x5e68
2d4: e8 77 37 00 00 call 3a50 <printf>
exit();
2d9: e8 f5 35 00 00 call 38d3 <exit>
printf(stdout, "child chdir failed\n");
2de: 50 push %eax
2df: 50 push %eax
2e0: 68 e2 3d 00 00 push $0x3de2
2e5: ff 35 68 5e 00 00 push 0x5e68
2eb: e8 60 37 00 00 call 3a50 <printf>
exit();
2f0: e8 de 35 00 00 call 38d3 <exit>
2f5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
2fc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
00000300 <openiputtest>:
void openiputtest(void) {
300: 55 push %ebp
301: 89 e5 mov %esp,%ebp
303: 83 ec 10 sub $0x10,%esp
printf(stdout, "openiput test\n");
306: 68 08 3e 00 00 push $0x3e08
30b: ff 35 68 5e 00 00 push 0x5e68
311: e8 3a 37 00 00 call 3a50 <printf>
if (mkdir("oidir") < 0) {
316: c7 04 24 17 3e 00 00 movl $0x3e17,(%esp)
31d: e8 41 36 00 00 call 3963 <mkdir>
322: 83 c4 10 add $0x10,%esp
325: 85 c0 test %eax,%eax
327: 0f 88 9f 00 00 00 js 3cc <openiputtest+0xcc>
pid = fork();
32d: e8 99 35 00 00 call 38cb <fork>
if (pid < 0) {
332: 85 c0 test %eax,%eax
334: 78 7f js 3b5 <openiputtest+0xb5>
if (pid == 0) {
336: 75 38 jne 370 <openiputtest+0x70>
int fd = open("oidir", O_RDWR);
338: 83 ec 08 sub $0x8,%esp
33b: 6a 02 push $0x2
33d: 68 17 3e 00 00 push $0x3e17
342: e8 f4 35 00 00 call 393b <open>
if (fd >= 0) {
347: 83 c4 10 add $0x10,%esp
34a: 85 c0 test %eax,%eax
34c: 78 62 js 3b0 <openiputtest+0xb0>
printf(stdout, "open directory for write succeeded\n");
34e: 83 ec 08 sub $0x8,%esp
351: 68 9c 4d 00 00 push $0x4d9c
356: ff 35 68 5e 00 00 push 0x5e68
35c: e8 ef 36 00 00 call 3a50 <printf>
exit();
361: e8 6d 35 00 00 call 38d3 <exit>
366: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
36d: 8d 76 00 lea 0x0(%esi),%esi
sleep(1);
370: 83 ec 0c sub $0xc,%esp
373: 6a 01 push $0x1
375: e8 b1 35 00 00 call 392b <sleep>
if (unlink("oidir") != 0) {
37a: c7 04 24 17 3e 00 00 movl $0x3e17,(%esp)
381: e8 cd 35 00 00 call 3953 <unlink>
386: 83 c4 10 add $0x10,%esp
389: 85 c0 test %eax,%eax
38b: 75 56 jne 3e3 <openiputtest+0xe3>
wait();
38d: e8 49 35 00 00 call 38db <wait>
printf(stdout, "openiput test ok\n");
392: 83 ec 08 sub $0x8,%esp
395: 68 40 3e 00 00 push $0x3e40
39a: ff 35 68 5e 00 00 push 0x5e68
3a0: e8 ab 36 00 00 call 3a50 <printf>
}
3a5: 83 c4 10 add $0x10,%esp
3a8: c9 leave
3a9: c3 ret
3aa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
exit();
3b0: e8 1e 35 00 00 call 38d3 <exit>
printf(stdout, "fork failed\n");
3b5: 52 push %edx
3b6: 52 push %edx
3b7: 68 b9 4c 00 00 push $0x4cb9
3bc: ff 35 68 5e 00 00 push 0x5e68
3c2: e8 89 36 00 00 call 3a50 <printf>
exit();
3c7: e8 07 35 00 00 call 38d3 <exit>
printf(stdout, "mkdir oidir failed\n");
3cc: 51 push %ecx
3cd: 51 push %ecx
3ce: 68 1d 3e 00 00 push $0x3e1d
3d3: ff 35 68 5e 00 00 push 0x5e68
3d9: e8 72 36 00 00 call 3a50 <printf>
exit();
3de: e8 f0 34 00 00 call 38d3 <exit>
printf(stdout, "unlink failed\n");
3e3: 50 push %eax
3e4: 50 push %eax
3e5: 68 31 3e 00 00 push $0x3e31
3ea: ff 35 68 5e 00 00 push 0x5e68
3f0: e8 5b 36 00 00 call 3a50 <printf>
exit();
3f5: e8 d9 34 00 00 call 38d3 <exit>
3fa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
00000400 <opentest>:
void opentest(void) {
400: 55 push %ebp
401: 89 e5 mov %esp,%ebp
403: 83 ec 10 sub $0x10,%esp
printf(stdout, "open test\n");
406: 68 52 3e 00 00 push $0x3e52
40b: ff 35 68 5e 00 00 push 0x5e68
411: e8 3a 36 00 00 call 3a50 <printf>
fd = open("echo", 0);
416: 58 pop %eax
417: 5a pop %edx
418: 6a 00 push $0x0
41a: 68 5d 3e 00 00 push $0x3e5d
41f: e8 17 35 00 00 call 393b <open>
if (fd < 0) {
424: 83 c4 10 add $0x10,%esp
427: 85 c0 test %eax,%eax
429: 78 36 js 461 <opentest+0x61>
close(fd);
42b: 83 ec 0c sub $0xc,%esp
42e: 50 push %eax
42f: e8 37 35 00 00 call 396b <close>
fd = open("doesnotexist", 0);
434: 5a pop %edx
435: 59 pop %ecx
436: 6a 00 push $0x0
438: 68 75 3e 00 00 push $0x3e75
43d: e8 f9 34 00 00 call 393b <open>
if (fd >= 0) {
442: 83 c4 10 add $0x10,%esp
445: 85 c0 test %eax,%eax
447: 79 2f jns 478 <opentest+0x78>
printf(stdout, "open test ok\n");
449: 83 ec 08 sub $0x8,%esp
44c: 68 a0 3e 00 00 push $0x3ea0
451: ff 35 68 5e 00 00 push 0x5e68
457: e8 f4 35 00 00 call 3a50 <printf>
}
45c: 83 c4 10 add $0x10,%esp
45f: c9 leave
460: c3 ret
printf(stdout, "open echo failed!\n");
461: 50 push %eax
462: 50 push %eax
463: 68 62 3e 00 00 push $0x3e62
468: ff 35 68 5e 00 00 push 0x5e68
46e: e8 dd 35 00 00 call 3a50 <printf>
exit();
473: e8 5b 34 00 00 call 38d3 <exit>
printf(stdout, "open doesnotexist succeeded!\n");
478: 50 push %eax
479: 50 push %eax
47a: 68 82 3e 00 00 push $0x3e82
47f: ff 35 68 5e 00 00 push 0x5e68
485: e8 c6 35 00 00 call 3a50 <printf>
exit();
48a: e8 44 34 00 00 call 38d3 <exit>
48f: 90 nop
00000490 <writetest>:
void writetest(void) {
490: 55 push %ebp
491: 89 e5 mov %esp,%ebp
493: 56 push %esi
494: 53 push %ebx
printf(stdout, "small file test\n");
495: 83 ec 08 sub $0x8,%esp
498: 68 ae 3e 00 00 push $0x3eae
49d: ff 35 68 5e 00 00 push 0x5e68
4a3: e8 a8 35 00 00 call 3a50 <printf>
fd = open("small", O_CREATE | O_RDWR);
4a8: 58 pop %eax
4a9: 5a pop %edx
4aa: 68 02 02 00 00 push $0x202
4af: 68 bf 3e 00 00 push $0x3ebf
4b4: e8 82 34 00 00 call 393b <open>
if (fd >= 0) {
4b9: 83 c4 10 add $0x10,%esp
4bc: 85 c0 test %eax,%eax
4be: 0f 88 88 01 00 00 js 64c <writetest+0x1bc>
printf(stdout, "creat small succeeded; ok\n");
4c4: 83 ec 08 sub $0x8,%esp
4c7: 89 c6 mov %eax,%esi
for (i = 0; i < 100; i++) {
4c9: 31 db xor %ebx,%ebx
printf(stdout, "creat small succeeded; ok\n");
4cb: 68 c5 3e 00 00 push $0x3ec5
4d0: ff 35 68 5e 00 00 push 0x5e68
4d6: e8 75 35 00 00 call 3a50 <printf>
4db: 83 c4 10 add $0x10,%esp
4de: 66 90 xchg %ax,%ax
if (write(fd, "aaaaaaaaaa", 10) != 10) {
4e0: 83 ec 04 sub $0x4,%esp
4e3: 6a 0a push $0xa
4e5: 68 fc 3e 00 00 push $0x3efc
4ea: 56 push %esi
4eb: e8 53 34 00 00 call 3943 <write>
4f0: 83 c4 10 add $0x10,%esp
4f3: 83 f8 0a cmp $0xa,%eax
4f6: 0f 85 d9 00 00 00 jne 5d5 <writetest+0x145>
if (write(fd, "bbbbbbbbbb", 10) != 10) {
4fc: 83 ec 04 sub $0x4,%esp
4ff: 6a 0a push $0xa
501: 68 07 3f 00 00 push $0x3f07
506: 56 push %esi
507: e8 37 34 00 00 call 3943 <write>
50c: 83 c4 10 add $0x10,%esp
50f: 83 f8 0a cmp $0xa,%eax
512: 0f 85 d6 00 00 00 jne 5ee <writetest+0x15e>
for (i = 0; i < 100; i++) {
518: 83 c3 01 add $0x1,%ebx
51b: 83 fb 64 cmp $0x64,%ebx
51e: 75 c0 jne 4e0 <writetest+0x50>
printf(stdout, "writes ok\n");
520: 83 ec 08 sub $0x8,%esp
523: 68 12 3f 00 00 push $0x3f12
528: ff 35 68 5e 00 00 push 0x5e68
52e: e8 1d 35 00 00 call 3a50 <printf>
close(fd);
533: 89 34 24 mov %esi,(%esp)
536: e8 30 34 00 00 call 396b <close>
fd = open("small", O_RDONLY);
53b: 5b pop %ebx
53c: 5e pop %esi
53d: 6a 00 push $0x0
53f: 68 bf 3e 00 00 push $0x3ebf
544: e8 f2 33 00 00 call 393b <open>
if (fd >= 0) {
549: 83 c4 10 add $0x10,%esp
fd = open("small", O_RDONLY);
54c: 89 c3 mov %eax,%ebx
if (fd >= 0) {
54e: 85 c0 test %eax,%eax
550: 0f 88 b1 00 00 00 js 607 <writetest+0x177>
printf(stdout, "open small succeeded ok\n");
556: 83 ec 08 sub $0x8,%esp
559: 68 1d 3f 00 00 push $0x3f1d
55e: ff 35 68 5e 00 00 push 0x5e68
564: e8 e7 34 00 00 call 3a50 <printf>
i = read(fd, buf, 2000);
569: 83 c4 0c add $0xc,%esp
56c: 68 d0 07 00 00 push $0x7d0
571: 68 a0 85 00 00 push $0x85a0
576: 53 push %ebx
577: e8 6f 33 00 00 call 38eb <read>
if (i == 2000) {
57c: 83 c4 10 add $0x10,%esp
57f: 3d d0 07 00 00 cmp $0x7d0,%eax
584: 0f 85 94 00 00 00 jne 61e <writetest+0x18e>
printf(stdout, "read succeeded ok\n");
58a: 83 ec 08 sub $0x8,%esp
58d: 68 51 3f 00 00 push $0x3f51
592: ff 35 68 5e 00 00 push 0x5e68
598: e8 b3 34 00 00 call 3a50 <printf>
close(fd);
59d: 89 1c 24 mov %ebx,(%esp)
5a0: e8 c6 33 00 00 call 396b <close>
if (unlink("small") < 0) {
5a5: c7 04 24 bf 3e 00 00 movl $0x3ebf,(%esp)
5ac: e8 a2 33 00 00 call 3953 <unlink>
5b1: 83 c4 10 add $0x10,%esp
5b4: 85 c0 test %eax,%eax
5b6: 78 7d js 635 <writetest+0x1a5>
printf(stdout, "small file test ok\n");
5b8: 83 ec 08 sub $0x8,%esp
5bb: 68 79 3f 00 00 push $0x3f79
5c0: ff 35 68 5e 00 00 push 0x5e68
5c6: e8 85 34 00 00 call 3a50 <printf>
}
5cb: 83 c4 10 add $0x10,%esp
5ce: 8d 65 f8 lea -0x8(%ebp),%esp
5d1: 5b pop %ebx
5d2: 5e pop %esi
5d3: 5d pop %ebp
5d4: c3 ret
printf(stdout, "error: write aa %d new file failed\n", i);
5d5: 83 ec 04 sub $0x4,%esp
5d8: 53 push %ebx
5d9: 68 c0 4d 00 00 push $0x4dc0
5de: ff 35 68 5e 00 00 push 0x5e68
5e4: e8 67 34 00 00 call 3a50 <printf>
exit();
5e9: e8 e5 32 00 00 call 38d3 <exit>
printf(stdout, "error: write bb %d new file failed\n", i);
5ee: 83 ec 04 sub $0x4,%esp
5f1: 53 push %ebx
5f2: 68 e4 4d 00 00 push $0x4de4
5f7: ff 35 68 5e 00 00 push 0x5e68
5fd: e8 4e 34 00 00 call 3a50 <printf>
exit();
602: e8 cc 32 00 00 call 38d3 <exit>
printf(stdout, "error: open small failed!\n");
607: 51 push %ecx
608: 51 push %ecx
609: 68 36 3f 00 00 push $0x3f36
60e: ff 35 68 5e 00 00 push 0x5e68
614: e8 37 34 00 00 call 3a50 <printf>
exit();
619: e8 b5 32 00 00 call 38d3 <exit>
printf(stdout, "read failed\n");
61e: 52 push %edx
61f: 52 push %edx
620: 68 7d 42 00 00 push $0x427d
625: ff 35 68 5e 00 00 push 0x5e68
62b: e8 20 34 00 00 call 3a50 <printf>
exit();
630: e8 9e 32 00 00 call 38d3 <exit>
printf(stdout, "unlink small failed\n");
635: 50 push %eax
636: 50 push %eax
637: 68 64 3f 00 00 push $0x3f64
63c: ff 35 68 5e 00 00 push 0x5e68
642: e8 09 34 00 00 call 3a50 <printf>
exit();
647: e8 87 32 00 00 call 38d3 <exit>
printf(stdout, "error: creat small failed!\n");
64c: 50 push %eax
64d: 50 push %eax
64e: 68 e0 3e 00 00 push $0x3ee0
653: ff 35 68 5e 00 00 push 0x5e68
659: e8 f2 33 00 00 call 3a50 <printf>
exit();
65e: e8 70 32 00 00 call 38d3 <exit>
663: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
66a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
00000670 <writetest1>:
void writetest1(void) {
670: 55 push %ebp
671: 89 e5 mov %esp,%ebp
673: 56 push %esi
674: 53 push %ebx
printf(stdout, "big files test\n");
675: 83 ec 08 sub $0x8,%esp
678: 68 8d 3f 00 00 push $0x3f8d
67d: ff 35 68 5e 00 00 push 0x5e68
683: e8 c8 33 00 00 call 3a50 <printf>
fd = open("big", O_CREATE | O_RDWR);
688: 58 pop %eax
689: 5a pop %edx
68a: 68 02 02 00 00 push $0x202
68f: 68 07 40 00 00 push $0x4007
694: e8 a2 32 00 00 call 393b <open>
if (fd < 0) {
699: 83 c4 10 add $0x10,%esp
69c: 85 c0 test %eax,%eax
69e: 0f 88 61 01 00 00 js 805 <writetest1+0x195>
6a4: 89 c6 mov %eax,%esi
for (i = 0; i < MAXFILE; i++) {
6a6: 31 db xor %ebx,%ebx
6a8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
6af: 90 nop
if (write(fd, buf, 512) != 512) {
6b0: 83 ec 04 sub $0x4,%esp
((int*)buf)[0] = i;
6b3: 89 1d a0 85 00 00 mov %ebx,0x85a0
if (write(fd, buf, 512) != 512) {
6b9: 68 00 02 00 00 push $0x200
6be: 68 a0 85 00 00 push $0x85a0
6c3: 56 push %esi
6c4: e8 7a 32 00 00 call 3943 <write>
6c9: 83 c4 10 add $0x10,%esp
6cc: 3d 00 02 00 00 cmp $0x200,%eax
6d1: 0f 85 b3 00 00 00 jne 78a <writetest1+0x11a>
for (i = 0; i < MAXFILE; i++) {
6d7: 83 c3 01 add $0x1,%ebx
6da: 81 fb 8c 00 00 00 cmp $0x8c,%ebx
6e0: 75 ce jne 6b0 <writetest1+0x40>
close(fd);
6e2: 83 ec 0c sub $0xc,%esp
6e5: 56 push %esi
6e6: e8 80 32 00 00 call 396b <close>
fd = open("big", O_RDONLY);
6eb: 5b pop %ebx
6ec: 5e pop %esi
6ed: 6a 00 push $0x0
6ef: 68 07 40 00 00 push $0x4007
6f4: e8 42 32 00 00 call 393b <open>
if (fd < 0) {
6f9: 83 c4 10 add $0x10,%esp
fd = open("big", O_RDONLY);
6fc: 89 c3 mov %eax,%ebx
if (fd < 0) {
6fe: 85 c0 test %eax,%eax
700: 0f 88 e8 00 00 00 js 7ee <writetest1+0x17e>
n = 0;
706: 31 f6 xor %esi,%esi
708: eb 1d jmp 727 <writetest1+0xb7>
70a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
else if (i != 512) {
710: 3d 00 02 00 00 cmp $0x200,%eax
715: 0f 85 9f 00 00 00 jne 7ba <writetest1+0x14a>
if (((int*)buf)[0] != n) {
71b: a1 a0 85 00 00 mov 0x85a0,%eax
720: 39 f0 cmp %esi,%eax
722: 75 7f jne 7a3 <writetest1+0x133>
n++;
724: 83 c6 01 add $0x1,%esi
i = read(fd, buf, 512);
727: 83 ec 04 sub $0x4,%esp
72a: 68 00 02 00 00 push $0x200
72f: 68 a0 85 00 00 push $0x85a0
734: 53 push %ebx
735: e8 b1 31 00 00 call 38eb <read>
if (i == 0) {
73a: 83 c4 10 add $0x10,%esp
73d: 85 c0 test %eax,%eax
73f: 75 cf jne 710 <writetest1+0xa0>
if (n == MAXFILE - 1) {
741: 81 fe 8b 00 00 00 cmp $0x8b,%esi
747: 0f 84 86 00 00 00 je 7d3 <writetest1+0x163>
close(fd);
74d: 83 ec 0c sub $0xc,%esp
750: 53 push %ebx
751: e8 15 32 00 00 call 396b <close>
if (unlink("big") < 0) {
756: c7 04 24 07 40 00 00 movl $0x4007,(%esp)
75d: e8 f1 31 00 00 call 3953 <unlink>
762: 83 c4 10 add $0x10,%esp
765: 85 c0 test %eax,%eax
767: 0f 88 af 00 00 00 js 81c <writetest1+0x1ac>
printf(stdout, "big files ok\n");
76d: 83 ec 08 sub $0x8,%esp
770: 68 2e 40 00 00 push $0x402e
775: ff 35 68 5e 00 00 push 0x5e68
77b: e8 d0 32 00 00 call 3a50 <printf>
}
780: 83 c4 10 add $0x10,%esp
783: 8d 65 f8 lea -0x8(%ebp),%esp
786: 5b pop %ebx
787: 5e pop %esi
788: 5d pop %ebp
789: c3 ret
printf(stdout, "error: write big file failed\n", i);
78a: 83 ec 04 sub $0x4,%esp
78d: 53 push %ebx
78e: 68 b7 3f 00 00 push $0x3fb7
793: ff 35 68 5e 00 00 push 0x5e68
799: e8 b2 32 00 00 call 3a50 <printf>
exit();
79e: e8 30 31 00 00 call 38d3 <exit>
printf(stdout, "read content of block %d is %d\n",
7a3: 50 push %eax
7a4: 56 push %esi
7a5: 68 08 4e 00 00 push $0x4e08
7aa: ff 35 68 5e 00 00 push 0x5e68
7b0: e8 9b 32 00 00 call 3a50 <printf>
exit();
7b5: e8 19 31 00 00 call 38d3 <exit>
printf(stdout, "read failed %d\n", i);
7ba: 83 ec 04 sub $0x4,%esp
7bd: 50 push %eax
7be: 68 0b 40 00 00 push $0x400b
7c3: ff 35 68 5e 00 00 push 0x5e68
7c9: e8 82 32 00 00 call 3a50 <printf>
exit();
7ce: e8 00 31 00 00 call 38d3 <exit>
printf(stdout, "read only %d blocks from big", n);
7d3: 52 push %edx
7d4: 68 8b 00 00 00 push $0x8b
7d9: 68 ee 3f 00 00 push $0x3fee
7de: ff 35 68 5e 00 00 push 0x5e68
7e4: e8 67 32 00 00 call 3a50 <printf>
exit();
7e9: e8 e5 30 00 00 call 38d3 <exit>
printf(stdout, "error: open big failed!\n");
7ee: 51 push %ecx
7ef: 51 push %ecx
7f0: 68 d5 3f 00 00 push $0x3fd5
7f5: ff 35 68 5e 00 00 push 0x5e68
7fb: e8 50 32 00 00 call 3a50 <printf>
exit();
800: e8 ce 30 00 00 call 38d3 <exit>
printf(stdout, "error: creat big failed!\n");
805: 50 push %eax
806: 50 push %eax
807: 68 9d 3f 00 00 push $0x3f9d
80c: ff 35 68 5e 00 00 push 0x5e68
812: e8 39 32 00 00 call 3a50 <printf>
exit();
817: e8 b7 30 00 00 call 38d3 <exit>
printf(stdout, "unlink big failed\n");
81c: 50 push %eax
81d: 50 push %eax
81e: 68 1b 40 00 00 push $0x401b
823: ff 35 68 5e 00 00 push 0x5e68
829: e8 22 32 00 00 call 3a50 <printf>
exit();
82e: e8 a0 30 00 00 call 38d3 <exit>
833: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
83a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
00000840 <createtest>:
void createtest(void) {
840: 55 push %ebp
841: 89 e5 mov %esp,%ebp
843: 53 push %ebx
name[2] = '\0';
844: bb 30 00 00 00 mov $0x30,%ebx
void createtest(void) {
849: 83 ec 0c sub $0xc,%esp
printf(stdout, "many creates, followed by unlink test\n");
84c: 68 28 4e 00 00 push $0x4e28
851: ff 35 68 5e 00 00 push 0x5e68
857: e8 f4 31 00 00 call 3a50 <printf>
name[0] = 'a';
85c: c6 05 90 85 00 00 61 movb $0x61,0x8590
name[2] = '\0';
863: 83 c4 10 add $0x10,%esp
866: c6 05 92 85 00 00 00 movb $0x0,0x8592
for (i = 0; i < 52; i++) {
86d: 8d 76 00 lea 0x0(%esi),%esi
fd = open(name, O_CREATE | O_RDWR);
870: 83 ec 08 sub $0x8,%esp
name[1] = '0' + i;
873: 88 1d 91 85 00 00 mov %bl,0x8591
for (i = 0; i < 52; i++) {
879: 83 c3 01 add $0x1,%ebx
fd = open(name, O_CREATE | O_RDWR);
87c: 68 02 02 00 00 push $0x202
881: 68 90 85 00 00 push $0x8590
886: e8 b0 30 00 00 call 393b <open>
close(fd);
88b: 89 04 24 mov %eax,(%esp)
88e: e8 d8 30 00 00 call 396b <close>
for (i = 0; i < 52; i++) {
893: 83 c4 10 add $0x10,%esp
896: 80 fb 64 cmp $0x64,%bl
899: 75 d5 jne 870 <createtest+0x30>
name[0] = 'a';
89b: c6 05 90 85 00 00 61 movb $0x61,0x8590
name[2] = '\0';
8a2: bb 30 00 00 00 mov $0x30,%ebx
8a7: c6 05 92 85 00 00 00 movb $0x0,0x8592
for (i = 0; i < 52; i++) {
8ae: 66 90 xchg %ax,%ax
unlink(name);
8b0: 83 ec 0c sub $0xc,%esp
name[1] = '0' + i;
8b3: 88 1d 91 85 00 00 mov %bl,0x8591
for (i = 0; i < 52; i++) {
8b9: 83 c3 01 add $0x1,%ebx
unlink(name);
8bc: 68 90 85 00 00 push $0x8590
8c1: e8 8d 30 00 00 call 3953 <unlink>
for (i = 0; i < 52; i++) {
8c6: 83 c4 10 add $0x10,%esp
8c9: 80 fb 64 cmp $0x64,%bl
8cc: 75 e2 jne 8b0 <createtest+0x70>
printf(stdout, "many creates, followed by unlink; ok\n");
8ce: 83 ec 08 sub $0x8,%esp
8d1: 68 50 4e 00 00 push $0x4e50
8d6: ff 35 68 5e 00 00 push 0x5e68
8dc: e8 6f 31 00 00 call 3a50 <printf>
}
8e1: 8b 5d fc mov -0x4(%ebp),%ebx
8e4: 83 c4 10 add $0x10,%esp
8e7: c9 leave
8e8: c3 ret
8e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
000008f0 <dirtest>:
void dirtest(void){
8f0: 55 push %ebp
8f1: 89 e5 mov %esp,%ebp
8f3: 83 ec 10 sub $0x10,%esp
printf(stdout, "mkdir test\n");
8f6: 68 3c 40 00 00 push $0x403c
8fb: ff 35 68 5e 00 00 push 0x5e68
901: e8 4a 31 00 00 call 3a50 <printf>
if (mkdir("dir0") < 0) {
906: c7 04 24 48 40 00 00 movl $0x4048,(%esp)
90d: e8 51 30 00 00 call 3963 <mkdir>
912: 83 c4 10 add $0x10,%esp
915: 85 c0 test %eax,%eax
917: 78 58 js 971 <dirtest+0x81>
if (chdir("dir0") < 0) {
919: 83 ec 0c sub $0xc,%esp
91c: 68 48 40 00 00 push $0x4048
921: e8 e5 2f 00 00 call 390b <chdir>
926: 83 c4 10 add $0x10,%esp
929: 85 c0 test %eax,%eax
92b: 0f 88 85 00 00 00 js 9b6 <dirtest+0xc6>
if (chdir("..") < 0) {
931: 83 ec 0c sub $0xc,%esp
934: 68 ed 45 00 00 push $0x45ed
939: e8 cd 2f 00 00 call 390b <chdir>
93e: 83 c4 10 add $0x10,%esp
941: 85 c0 test %eax,%eax
943: 78 5a js 99f <dirtest+0xaf>
if (unlink("dir0") < 0) {
945: 83 ec 0c sub $0xc,%esp
948: 68 48 40 00 00 push $0x4048
94d: e8 01 30 00 00 call 3953 <unlink>
952: 83 c4 10 add $0x10,%esp
955: 85 c0 test %eax,%eax
957: 78 2f js 988 <dirtest+0x98>
printf(stdout, "mkdir test ok\n");
959: 83 ec 08 sub $0x8,%esp
95c: 68 85 40 00 00 push $0x4085
961: ff 35 68 5e 00 00 push 0x5e68
967: e8 e4 30 00 00 call 3a50 <printf>
}
96c: 83 c4 10 add $0x10,%esp
96f: c9 leave
970: c3 ret
printf(stdout, "mkdir failed\n");
971: 50 push %eax
972: 50 push %eax
973: 68 78 3d 00 00 push $0x3d78
978: ff 35 68 5e 00 00 push 0x5e68
97e: e8 cd 30 00 00 call 3a50 <printf>
exit();
983: e8 4b 2f 00 00 call 38d3 <exit>
printf(stdout, "unlink dir0 failed\n");
988: 50 push %eax
989: 50 push %eax
98a: 68 71 40 00 00 push $0x4071
98f: ff 35 68 5e 00 00 push 0x5e68
995: e8 b6 30 00 00 call 3a50 <printf>
exit();
99a: e8 34 2f 00 00 call 38d3 <exit>
printf(stdout, "chdir .. failed\n");
99f: 52 push %edx
9a0: 52 push %edx
9a1: 68 60 40 00 00 push $0x4060
9a6: ff 35 68 5e 00 00 push 0x5e68
9ac: e8 9f 30 00 00 call 3a50 <printf>
exit();
9b1: e8 1d 2f 00 00 call 38d3 <exit>
printf(stdout, "chdir dir0 failed\n");
9b6: 51 push %ecx
9b7: 51 push %ecx
9b8: 68 4d 40 00 00 push $0x404d
9bd: ff 35 68 5e 00 00 push 0x5e68
9c3: e8 88 30 00 00 call 3a50 <printf>
exit();
9c8: e8 06 2f 00 00 call 38d3 <exit>
9cd: 8d 76 00 lea 0x0(%esi),%esi
000009d0 <exectest>:
void exectest(void) {
9d0: 55 push %ebp
9d1: 89 e5 mov %esp,%ebp
9d3: 83 ec 10 sub $0x10,%esp
printf(stdout, "exec test\n");
9d6: 68 94 40 00 00 push $0x4094
9db: ff 35 68 5e 00 00 push 0x5e68
9e1: e8 6a 30 00 00 call 3a50 <printf>
if (exec("echo", echoargv) < 0) {
9e6: 5a pop %edx
9e7: 59 pop %ecx
9e8: 68 6c 5e 00 00 push $0x5e6c
9ed: 68 5d 3e 00 00 push $0x3e5d
9f2: e8 04 2f 00 00 call 38fb <exec>
9f7: 83 c4 10 add $0x10,%esp
9fa: 85 c0 test %eax,%eax
9fc: 78 02 js a00 <exectest+0x30>
}
9fe: c9 leave
9ff: c3 ret
printf(stdout, "exec echo failed\n");
a00: 50 push %eax
a01: 50 push %eax
a02: 68 9f 40 00 00 push $0x409f
a07: ff 35 68 5e 00 00 push 0x5e68
a0d: e8 3e 30 00 00 call 3a50 <printf>
exit();
a12: e8 bc 2e 00 00 call 38d3 <exit>
a17: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
a1e: 66 90 xchg %ax,%ax
00000a20 <pipe1>:
void pipe1(void) {
a20: 55 push %ebp
a21: 89 e5 mov %esp,%ebp
a23: 57 push %edi
a24: 56 push %esi
if (pipe(fds) != 0) {
a25: 8d 45 e0 lea -0x20(%ebp),%eax
void pipe1(void) {
a28: 53 push %ebx
a29: 83 ec 38 sub $0x38,%esp
if (pipe(fds) != 0) {
a2c: 50 push %eax
a2d: e8 b1 2e 00 00 call 38e3 <pipe>
a32: 83 c4 10 add $0x10,%esp
a35: 85 c0 test %eax,%eax
a37: 0f 85 34 01 00 00 jne b71 <pipe1+0x151>
pid = fork();
a3d: e8 89 2e 00 00 call 38cb <fork>
if (pid == 0) {
a42: 85 c0 test %eax,%eax
a44: 0f 84 85 00 00 00 je acf <pipe1+0xaf>
else if (pid > 0) {
a4a: 0f 8e 34 01 00 00 jle b84 <pipe1+0x164>
close(fds[1]);
a50: 83 ec 0c sub $0xc,%esp
a53: ff 75 e4 push -0x1c(%ebp)
seq = 0;
a56: 31 db xor %ebx,%ebx
cc = 1;
a58: be 01 00 00 00 mov $0x1,%esi
close(fds[1]);
a5d: e8 09 2f 00 00 call 396b <close>
total = 0;
a62: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%ebp)
while ((n = read(fds[0], buf, cc)) > 0) {
a69: 83 c4 10 add $0x10,%esp
a6c: 83 ec 04 sub $0x4,%esp
a6f: 56 push %esi
a70: 68 a0 85 00 00 push $0x85a0
a75: ff 75 e0 push -0x20(%ebp)
a78: e8 6e 2e 00 00 call 38eb <read>
a7d: 83 c4 10 add $0x10,%esp
a80: 89 c7 mov %eax,%edi
a82: 85 c0 test %eax,%eax
a84: 0f 8e a3 00 00 00 jle b2d <pipe1+0x10d>
a8a: 8d 0c 1f lea (%edi,%ebx,1),%ecx
for (i = 0; i < n; i++) {
a8d: 31 c0 xor %eax,%eax
a8f: 90 nop
if ((buf[i] & 0xff) != (seq++ & 0xff)) {
a90: 89 da mov %ebx,%edx
a92: 83 c3 01 add $0x1,%ebx
a95: 38 90 a0 85 00 00 cmp %dl,0x85a0(%eax)
a9b: 75 18 jne ab5 <pipe1+0x95>
for (i = 0; i < n; i++) {
a9d: 83 c0 01 add $0x1,%eax
aa0: 39 d9 cmp %ebx,%ecx
aa2: 75 ec jne a90 <pipe1+0x70>
cc = cc * 2;
aa4: 01 f6 add %esi,%esi
aa6: b8 00 20 00 00 mov $0x2000,%eax
total += n;
aab: 01 7d d4 add %edi,-0x2c(%ebp)
aae: 39 c6 cmp %eax,%esi
ab0: 0f 4f f0 cmovg %eax,%esi
ab3: eb b7 jmp a6c <pipe1+0x4c>
printf(1, "pipe1 oops 2\n");
ab5: 83 ec 08 sub $0x8,%esp
ab8: 68 ce 40 00 00 push $0x40ce
abd: 6a 01 push $0x1
abf: e8 8c 2f 00 00 call 3a50 <printf>
ac4: 83 c4 10 add $0x10,%esp
}
ac7: 8d 65 f4 lea -0xc(%ebp),%esp
aca: 5b pop %ebx
acb: 5e pop %esi
acc: 5f pop %edi
acd: 5d pop %ebp
ace: c3 ret
close(fds[0]);
acf: 83 ec 0c sub $0xc,%esp
ad2: ff 75 e0 push -0x20(%ebp)
seq = 0;
ad5: 31 db xor %ebx,%ebx
close(fds[0]);
ad7: e8 8f 2e 00 00 call 396b <close>
adc: 83 c4 10 add $0x10,%esp
for (i = 0; i < 1033; i++) {
adf: 31 c0 xor %eax,%eax
ae1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
buf[i] = seq++;
ae8: 8d 14 18 lea (%eax,%ebx,1),%edx
for (i = 0; i < 1033; i++) {
aeb: 83 c0 01 add $0x1,%eax
buf[i] = seq++;
aee: 88 90 9f 85 00 00 mov %dl,0x859f(%eax)
for (i = 0; i < 1033; i++) {
af4: 3d 09 04 00 00 cmp $0x409,%eax
af9: 75 ed jne ae8 <pipe1+0xc8>
if (write(fds[1], buf, 1033) != 1033) {
afb: 83 ec 04 sub $0x4,%esp
buf[i] = seq++;
afe: 81 c3 09 04 00 00 add $0x409,%ebx
if (write(fds[1], buf, 1033) != 1033) {
b04: 68 09 04 00 00 push $0x409
b09: 68 a0 85 00 00 push $0x85a0
b0e: ff 75 e4 push -0x1c(%ebp)
b11: e8 2d 2e 00 00 call 3943 <write>
b16: 83 c4 10 add $0x10,%esp
b19: 3d 09 04 00 00 cmp $0x409,%eax
b1e: 75 77 jne b97 <pipe1+0x177>
for (n = 0; n < 5; n++) {
b20: 81 fb 2d 14 00 00 cmp $0x142d,%ebx
b26: 75 b7 jne adf <pipe1+0xbf>
exit();
b28: e8 a6 2d 00 00 call 38d3 <exit>
if (total != 5 * 1033) {
b2d: 81 7d d4 2d 14 00 00 cmpl $0x142d,-0x2c(%ebp)
b34: 75 26 jne b5c <pipe1+0x13c>
close(fds[0]);
b36: 83 ec 0c sub $0xc,%esp
b39: ff 75 e0 push -0x20(%ebp)
b3c: e8 2a 2e 00 00 call 396b <close>
wait();
b41: e8 95 2d 00 00 call 38db <wait>
printf(1, "pipe1 ok\n");
b46: 5a pop %edx
b47: 59 pop %ecx
b48: 68 f3 40 00 00 push $0x40f3
b4d: 6a 01 push $0x1
b4f: e8 fc 2e 00 00 call 3a50 <printf>
b54: 83 c4 10 add $0x10,%esp
b57: e9 6b ff ff ff jmp ac7 <pipe1+0xa7>
printf(1, "pipe1 oops 3 total %d\n", total);
b5c: 53 push %ebx
b5d: ff 75 d4 push -0x2c(%ebp)
b60: 68 dc 40 00 00 push $0x40dc
b65: 6a 01 push $0x1
b67: e8 e4 2e 00 00 call 3a50 <printf>
exit();
b6c: e8 62 2d 00 00 call 38d3 <exit>
printf(1, "pipe() failed\n");
b71: 57 push %edi
b72: 57 push %edi
b73: 68 b1 40 00 00 push $0x40b1
b78: 6a 01 push $0x1
b7a: e8 d1 2e 00 00 call 3a50 <printf>
exit();
b7f: e8 4f 2d 00 00 call 38d3 <exit>
printf(1, "fork() failed\n");
b84: 50 push %eax
b85: 50 push %eax
b86: 68 fd 40 00 00 push $0x40fd
b8b: 6a 01 push $0x1
b8d: e8 be 2e 00 00 call 3a50 <printf>
exit();
b92: e8 3c 2d 00 00 call 38d3 <exit>
printf(1, "pipe1 oops 1\n");
b97: 56 push %esi
b98: 56 push %esi
b99: 68 c0 40 00 00 push $0x40c0
b9e: 6a 01 push $0x1
ba0: e8 ab 2e 00 00 call 3a50 <printf>
exit();
ba5: e8 29 2d 00 00 call 38d3 <exit>
baa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
00000bb0 <preempt>:
void preempt(void) {
bb0: 55 push %ebp
bb1: 89 e5 mov %esp,%ebp
bb3: 57 push %edi
bb4: 56 push %esi
bb5: 53 push %ebx
bb6: 83 ec 24 sub $0x24,%esp
printf(1, "preempt: ");
bb9: 68 0c 41 00 00 push $0x410c
bbe: 6a 01 push $0x1
bc0: e8 8b 2e 00 00 call 3a50 <printf>
pid1 = fork();
bc5: e8 01 2d 00 00 call 38cb <fork>
if (pid1 == 0) {
bca: 83 c4 10 add $0x10,%esp
bcd: 85 c0 test %eax,%eax
bcf: 75 07 jne bd8 <preempt+0x28>
for (;;) {
bd1: eb fe jmp bd1 <preempt+0x21>
bd3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
bd7: 90 nop
bd8: 89 c3 mov %eax,%ebx
pid2 = fork();
bda: e8 ec 2c 00 00 call 38cb <fork>
bdf: 89 c6 mov %eax,%esi
if (pid2 == 0) {
be1: 85 c0 test %eax,%eax
be3: 75 0b jne bf0 <preempt+0x40>
for (;;) {
be5: eb fe jmp be5 <preempt+0x35>
be7: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
bee: 66 90 xchg %ax,%ax
pipe(pfds);
bf0: 83 ec 0c sub $0xc,%esp
bf3: 8d 45 e0 lea -0x20(%ebp),%eax
bf6: 50 push %eax
bf7: e8 e7 2c 00 00 call 38e3 <pipe>
pid3 = fork();
bfc: e8 ca 2c 00 00 call 38cb <fork>
if (pid3 == 0) {
c01: 83 c4 10 add $0x10,%esp
pid3 = fork();
c04: 89 c7 mov %eax,%edi
if (pid3 == 0) {
c06: 85 c0 test %eax,%eax
c08: 75 3e jne c48 <preempt+0x98>
close(pfds[0]);
c0a: 83 ec 0c sub $0xc,%esp
c0d: ff 75 e0 push -0x20(%ebp)
c10: e8 56 2d 00 00 call 396b <close>
if (write(pfds[1], "x", 1) != 1) {
c15: 83 c4 0c add $0xc,%esp
c18: 6a 01 push $0x1
c1a: 68 d1 46 00 00 push $0x46d1
c1f: ff 75 e4 push -0x1c(%ebp)
c22: e8 1c 2d 00 00 call 3943 <write>
c27: 83 c4 10 add $0x10,%esp
c2a: 83 f8 01 cmp $0x1,%eax
c2d: 0f 85 b8 00 00 00 jne ceb <preempt+0x13b>
close(pfds[1]);
c33: 83 ec 0c sub $0xc,%esp
c36: ff 75 e4 push -0x1c(%ebp)
c39: e8 2d 2d 00 00 call 396b <close>
c3e: 83 c4 10 add $0x10,%esp
for (;;) {
c41: eb fe jmp c41 <preempt+0x91>
c43: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
c47: 90 nop
close(pfds[1]);
c48: 83 ec 0c sub $0xc,%esp
c4b: ff 75 e4 push -0x1c(%ebp)
c4e: e8 18 2d 00 00 call 396b <close>
if (read(pfds[0], buf, sizeof(buf)) != 1) {
c53: 83 c4 0c add $0xc,%esp
c56: 68 00 20 00 00 push $0x2000
c5b: 68 a0 85 00 00 push $0x85a0
c60: ff 75 e0 push -0x20(%ebp)
c63: e8 83 2c 00 00 call 38eb <read>
c68: 83 c4 10 add $0x10,%esp
c6b: 83 f8 01 cmp $0x1,%eax
c6e: 75 67 jne cd7 <preempt+0x127>
close(pfds[0]);
c70: 83 ec 0c sub $0xc,%esp
c73: ff 75 e0 push -0x20(%ebp)
c76: e8 f0 2c 00 00 call 396b <close>
printf(1, "kill... ");
c7b: 58 pop %eax
c7c: 5a pop %edx
c7d: 68 3d 41 00 00 push $0x413d
c82: 6a 01 push $0x1
c84: e8 c7 2d 00 00 call 3a50 <printf>
kill(pid1);
c89: 89 1c 24 mov %ebx,(%esp)
c8c: e8 62 2c 00 00 call 38f3 <kill>
kill(pid2);
c91: 89 34 24 mov %esi,(%esp)
c94: e8 5a 2c 00 00 call 38f3 <kill>
kill(pid3);
c99: 89 3c 24 mov %edi,(%esp)
c9c: e8 52 2c 00 00 call 38f3 <kill>
printf(1, "wait... ");
ca1: 59 pop %ecx
ca2: 5b pop %ebx
ca3: 68 46 41 00 00 push $0x4146
ca8: 6a 01 push $0x1
caa: e8 a1 2d 00 00 call 3a50 <printf>
wait();
caf: e8 27 2c 00 00 call 38db <wait>
wait();
cb4: e8 22 2c 00 00 call 38db <wait>
wait();
cb9: e8 1d 2c 00 00 call 38db <wait>
printf(1, "preempt ok\n");
cbe: 5e pop %esi
cbf: 5f pop %edi
cc0: 68 4f 41 00 00 push $0x414f
cc5: 6a 01 push $0x1
cc7: e8 84 2d 00 00 call 3a50 <printf>
ccc: 83 c4 10 add $0x10,%esp
}
ccf: 8d 65 f4 lea -0xc(%ebp),%esp
cd2: 5b pop %ebx
cd3: 5e pop %esi
cd4: 5f pop %edi
cd5: 5d pop %ebp
cd6: c3 ret
printf(1, "preempt read error");
cd7: 83 ec 08 sub $0x8,%esp
cda: 68 2a 41 00 00 push $0x412a
cdf: 6a 01 push $0x1
ce1: e8 6a 2d 00 00 call 3a50 <printf>
ce6: 83 c4 10 add $0x10,%esp
ce9: eb e4 jmp ccf <preempt+0x11f>
printf(1, "preempt write error");
ceb: 83 ec 08 sub $0x8,%esp
cee: 68 16 41 00 00 push $0x4116
cf3: 6a 01 push $0x1
cf5: e8 56 2d 00 00 call 3a50 <printf>
cfa: 83 c4 10 add $0x10,%esp
cfd: e9 31 ff ff ff jmp c33 <preempt+0x83>
d02: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
d09: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
00000d10 <exitwait>:
void exitwait(void) {
d10: 55 push %ebp
d11: 89 e5 mov %esp,%ebp
d13: 56 push %esi
d14: be 64 00 00 00 mov $0x64,%esi
d19: 53 push %ebx
d1a: eb 14 jmp d30 <exitwait+0x20>
d1c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
if (pid) {
d20: 74 68 je d8a <exitwait+0x7a>
if (wait() != pid) {
d22: e8 b4 2b 00 00 call 38db <wait>
d27: 39 d8 cmp %ebx,%eax
d29: 75 2d jne d58 <exitwait+0x48>
for (i = 0; i < 100; i++) {
d2b: 83 ee 01 sub $0x1,%esi
d2e: 74 41 je d71 <exitwait+0x61>
pid = fork();
d30: e8 96 2b 00 00 call 38cb <fork>
d35: 89 c3 mov %eax,%ebx
if (pid < 0) {
d37: 85 c0 test %eax,%eax
d39: 79 e5 jns d20 <exitwait+0x10>
printf(1, "fork failed\n");
d3b: 83 ec 08 sub $0x8,%esp
d3e: 68 b9 4c 00 00 push $0x4cb9
d43: 6a 01 push $0x1
d45: e8 06 2d 00 00 call 3a50 <printf>
return;
d4a: 83 c4 10 add $0x10,%esp
}
d4d: 8d 65 f8 lea -0x8(%ebp),%esp
d50: 5b pop %ebx
d51: 5e pop %esi
d52: 5d pop %ebp
d53: c3 ret
d54: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
printf(1, "wait wrong pid\n");
d58: 83 ec 08 sub $0x8,%esp
d5b: 68 5b 41 00 00 push $0x415b
d60: 6a 01 push $0x1
d62: e8 e9 2c 00 00 call 3a50 <printf>
return;
d67: 83 c4 10 add $0x10,%esp
}
d6a: 8d 65 f8 lea -0x8(%ebp),%esp
d6d: 5b pop %ebx
d6e: 5e pop %esi
d6f: 5d pop %ebp
d70: c3 ret
printf(1, "exitwait ok\n");
d71: 83 ec 08 sub $0x8,%esp
d74: 68 6b 41 00 00 push $0x416b
d79: 6a 01 push $0x1
d7b: e8 d0 2c 00 00 call 3a50 <printf>
d80: 83 c4 10 add $0x10,%esp
}
d83: 8d 65 f8 lea -0x8(%ebp),%esp
d86: 5b pop %ebx
d87: 5e pop %esi
d88: 5d pop %ebp
d89: c3 ret
exit();
d8a: e8 44 2b 00 00 call 38d3 <exit>
d8f: 90 nop
00000d90 <mem>:
void mem(void) {
d90: 55 push %ebp
d91: 89 e5 mov %esp,%ebp
d93: 56 push %esi
d94: 31 f6 xor %esi,%esi
d96: 53 push %ebx
printf(1, "mem test\n");
d97: 83 ec 08 sub $0x8,%esp
d9a: 68 78 41 00 00 push $0x4178
d9f: 6a 01 push $0x1
da1: e8 aa 2c 00 00 call 3a50 <printf>
ppid = getpid();
da6: e8 70 2b 00 00 call 391b <getpid>
dab: 89 c3 mov %eax,%ebx
if ((pid = fork()) == 0) {
dad: e8 19 2b 00 00 call 38cb <fork>
db2: 83 c4 10 add $0x10,%esp
db5: 85 c0 test %eax,%eax
db7: 74 0b je dc4 <mem+0x34>
db9: e9 8a 00 00 00 jmp e48 <mem+0xb8>
dbe: 66 90 xchg %ax,%ax
*(char**)m2 = m1;
dc0: 89 30 mov %esi,(%eax)
dc2: 89 c6 mov %eax,%esi
while ((m2 = malloc(10001)) != 0) {
dc4: 83 ec 0c sub $0xc,%esp
dc7: 68 11 27 00 00 push $0x2711
dcc: e8 af 2e 00 00 call 3c80 <malloc>
dd1: 83 c4 10 add $0x10,%esp
dd4: 85 c0 test %eax,%eax
dd6: 75 e8 jne dc0 <mem+0x30>
while (m1) {
dd8: 85 f6 test %esi,%esi
dda: 74 18 je df4 <mem+0x64>
ddc: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
m2 = *(char**)m1;
de0: 89 f0 mov %esi,%eax
free(m1);
de2: 83 ec 0c sub $0xc,%esp
m2 = *(char**)m1;
de5: 8b 36 mov (%esi),%esi
free(m1);
de7: 50 push %eax
de8: e8 03 2e 00 00 call 3bf0 <free>
while (m1) {
ded: 83 c4 10 add $0x10,%esp
df0: 85 f6 test %esi,%esi
df2: 75 ec jne de0 <mem+0x50>
m1 = malloc(1024 * 20);
df4: 83 ec 0c sub $0xc,%esp
df7: 68 00 50 00 00 push $0x5000
dfc: e8 7f 2e 00 00 call 3c80 <malloc>
if (m1 == 0) {
e01: 83 c4 10 add $0x10,%esp
e04: 85 c0 test %eax,%eax
e06: 74 20 je e28 <mem+0x98>
free(m1);
e08: 83 ec 0c sub $0xc,%esp
e0b: 50 push %eax
e0c: e8 df 2d 00 00 call 3bf0 <free>
printf(1, "mem ok\n");
e11: 58 pop %eax
e12: 5a pop %edx
e13: 68 9c 41 00 00 push $0x419c
e18: 6a 01 push $0x1
e1a: e8 31 2c 00 00 call 3a50 <printf>
exit();
e1f: e8 af 2a 00 00 call 38d3 <exit>
e24: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
printf(1, "couldn't allocate mem?!!\n");
e28: 83 ec 08 sub $0x8,%esp
e2b: 68 82 41 00 00 push $0x4182
e30: 6a 01 push $0x1
e32: e8 19 2c 00 00 call 3a50 <printf>
kill(ppid);
e37: 89 1c 24 mov %ebx,(%esp)
e3a: e8 b4 2a 00 00 call 38f3 <kill>
exit();
e3f: e8 8f 2a 00 00 call 38d3 <exit>
e44: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
}
e48: 8d 65 f8 lea -0x8(%ebp),%esp
e4b: 5b pop %ebx
e4c: 5e pop %esi
e4d: 5d pop %ebp
wait();
e4e: e9 88 2a 00 00 jmp 38db <wait>
e53: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
e5a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
00000e60 <sharedfd>:
void sharedfd(void) {
e60: 55 push %ebp
e61: 89 e5 mov %esp,%ebp
e63: 57 push %edi
e64: 56 push %esi
e65: 53 push %ebx
e66: 83 ec 34 sub $0x34,%esp
printf(1, "sharedfd test\n");
e69: 68 a4 41 00 00 push $0x41a4
e6e: 6a 01 push $0x1
e70: e8 db 2b 00 00 call 3a50 <printf>
unlink("sharedfd");
e75: c7 04 24 b3 41 00 00 movl $0x41b3,(%esp)
e7c: e8 d2 2a 00 00 call 3953 <unlink>
fd = open("sharedfd", O_CREATE | O_RDWR);
e81: 5b pop %ebx
e82: 5e pop %esi
e83: 68 02 02 00 00 push $0x202
e88: 68 b3 41 00 00 push $0x41b3
e8d: e8 a9 2a 00 00 call 393b <open>
if (fd < 0) {
e92: 83 c4 10 add $0x10,%esp
e95: 85 c0 test %eax,%eax
e97: 0f 88 2a 01 00 00 js fc7 <sharedfd+0x167>
e9d: 89 c7 mov %eax,%edi
memset(buf, pid == 0 ? 'c' : 'p', sizeof(buf));
e9f: 8d 75 de lea -0x22(%ebp),%esi
ea2: bb e8 03 00 00 mov $0x3e8,%ebx
pid = fork();
ea7: e8 1f 2a 00 00 call 38cb <fork>
memset(buf, pid == 0 ? 'c' : 'p', sizeof(buf));
eac: 83 f8 01 cmp $0x1,%eax
pid = fork();
eaf: 89 45 d4 mov %eax,-0x2c(%ebp)
memset(buf, pid == 0 ? 'c' : 'p', sizeof(buf));
eb2: 19 c0 sbb %eax,%eax
eb4: 83 ec 04 sub $0x4,%esp
eb7: 83 e0 f3 and $0xfffffff3,%eax
eba: 6a 0a push $0xa
ebc: 83 c0 70 add $0x70,%eax
ebf: 50 push %eax
ec0: 56 push %esi
ec1: e8 7a 28 00 00 call 3740 <memset>
ec6: 83 c4 10 add $0x10,%esp
ec9: eb 0a jmp ed5 <sharedfd+0x75>
ecb: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
ecf: 90 nop
for (i = 0; i < 1000; i++) {
ed0: 83 eb 01 sub $0x1,%ebx
ed3: 74 26 je efb <sharedfd+0x9b>
if (write(fd, buf, sizeof(buf)) != sizeof(buf)) {
ed5: 83 ec 04 sub $0x4,%esp
ed8: 6a 0a push $0xa
eda: 56 push %esi
edb: 57 push %edi
edc: e8 62 2a 00 00 call 3943 <write>
ee1: 83 c4 10 add $0x10,%esp
ee4: 83 f8 0a cmp $0xa,%eax
ee7: 74 e7 je ed0 <sharedfd+0x70>
printf(1, "fstests: write sharedfd failed\n");
ee9: 83 ec 08 sub $0x8,%esp
eec: 68 a4 4e 00 00 push $0x4ea4
ef1: 6a 01 push $0x1
ef3: e8 58 2b 00 00 call 3a50 <printf>
break;
ef8: 83 c4 10 add $0x10,%esp
if (pid == 0) {
efb: 8b 4d d4 mov -0x2c(%ebp),%ecx
efe: 85 c9 test %ecx,%ecx
f00: 0f 84 f5 00 00 00 je ffb <sharedfd+0x19b>
wait();
f06: e8 d0 29 00 00 call 38db <wait>
close(fd);
f0b: 83 ec 0c sub $0xc,%esp
nc = np = 0;
f0e: 31 db xor %ebx,%ebx
close(fd);
f10: 57 push %edi
f11: 8d 7d e8 lea -0x18(%ebp),%edi
f14: e8 52 2a 00 00 call 396b <close>
fd = open("sharedfd", 0);
f19: 58 pop %eax
f1a: 5a pop %edx
f1b: 6a 00 push $0x0
f1d: 68 b3 41 00 00 push $0x41b3
f22: e8 14 2a 00 00 call 393b <open>
if (fd < 0) {
f27: 83 c4 10 add $0x10,%esp
nc = np = 0;
f2a: 31 d2 xor %edx,%edx
fd = open("sharedfd", 0);
f2c: 89 45 d0 mov %eax,-0x30(%ebp)
if (fd < 0) {
f2f: 85 c0 test %eax,%eax
f31: 0f 88 aa 00 00 00 js fe1 <sharedfd+0x181>
f37: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
f3e: 66 90 xchg %ax,%ax
while ((n = read(fd, buf, sizeof(buf))) > 0) {
f40: 83 ec 04 sub $0x4,%esp
f43: 89 55 d4 mov %edx,-0x2c(%ebp)
f46: 6a 0a push $0xa
f48: 56 push %esi
f49: ff 75 d0 push -0x30(%ebp)
f4c: e8 9a 29 00 00 call 38eb <read>
f51: 83 c4 10 add $0x10,%esp
f54: 85 c0 test %eax,%eax
f56: 7e 28 jle f80 <sharedfd+0x120>
f58: 8b 55 d4 mov -0x2c(%ebp),%edx
f5b: 89 f0 mov %esi,%eax
f5d: eb 13 jmp f72 <sharedfd+0x112>
f5f: 90 nop
np++;
f60: 80 f9 70 cmp $0x70,%cl
f63: 0f 94 c1 sete %cl
f66: 0f b6 c9 movzbl %cl,%ecx
f69: 01 cb add %ecx,%ebx
for (i = 0; i < sizeof(buf); i++) {
f6b: 83 c0 01 add $0x1,%eax
f6e: 39 f8 cmp %edi,%eax
f70: 74 ce je f40 <sharedfd+0xe0>
if (buf[i] == 'c') {
f72: 0f b6 08 movzbl (%eax),%ecx
f75: 80 f9 63 cmp $0x63,%cl
f78: 75 e6 jne f60 <sharedfd+0x100>
nc++;
f7a: 83 c2 01 add $0x1,%edx
if (buf[i] == 'p') {
f7d: eb ec jmp f6b <sharedfd+0x10b>
f7f: 90 nop
close(fd);
f80: 83 ec 0c sub $0xc,%esp
f83: ff 75 d0 push -0x30(%ebp)
f86: e8 e0 29 00 00 call 396b <close>
unlink("sharedfd");
f8b: c7 04 24 b3 41 00 00 movl $0x41b3,(%esp)
f92: e8 bc 29 00 00 call 3953 <unlink>
if (nc == 10000 && np == 10000) {
f97: 8b 55 d4 mov -0x2c(%ebp),%edx
f9a: 83 c4 10 add $0x10,%esp
f9d: 81 fa 10 27 00 00 cmp $0x2710,%edx
fa3: 75 5b jne 1000 <sharedfd+0x1a0>
fa5: 81 fb 10 27 00 00 cmp $0x2710,%ebx
fab: 75 53 jne 1000 <sharedfd+0x1a0>
printf(1, "sharedfd ok\n");
fad: 83 ec 08 sub $0x8,%esp
fb0: 68 bc 41 00 00 push $0x41bc
fb5: 6a 01 push $0x1
fb7: e8 94 2a 00 00 call 3a50 <printf>
fbc: 83 c4 10 add $0x10,%esp
}
fbf: 8d 65 f4 lea -0xc(%ebp),%esp
fc2: 5b pop %ebx
fc3: 5e pop %esi
fc4: 5f pop %edi
fc5: 5d pop %ebp
fc6: c3 ret
printf(1, "fstests: cannot open sharedfd for writing");
fc7: 83 ec 08 sub $0x8,%esp
fca: 68 78 4e 00 00 push $0x4e78
fcf: 6a 01 push $0x1
fd1: e8 7a 2a 00 00 call 3a50 <printf>
return;
fd6: 83 c4 10 add $0x10,%esp
}
fd9: 8d 65 f4 lea -0xc(%ebp),%esp
fdc: 5b pop %ebx
fdd: 5e pop %esi
fde: 5f pop %edi
fdf: 5d pop %ebp
fe0: c3 ret
printf(1, "fstests: cannot open sharedfd for reading\n");
fe1: 83 ec 08 sub $0x8,%esp
fe4: 68 c4 4e 00 00 push $0x4ec4
fe9: 6a 01 push $0x1
feb: e8 60 2a 00 00 call 3a50 <printf>
return;
ff0: 83 c4 10 add $0x10,%esp
}
ff3: 8d 65 f4 lea -0xc(%ebp),%esp
ff6: 5b pop %ebx
ff7: 5e pop %esi
ff8: 5f pop %edi
ff9: 5d pop %ebp
ffa: c3 ret
exit();
ffb: e8 d3 28 00 00 call 38d3 <exit>
printf(1, "sharedfd oops %d %d\n", nc, np);
1000: 53 push %ebx
1001: 52 push %edx
1002: 68 c9 41 00 00 push $0x41c9
1007: 6a 01 push $0x1
1009: e8 42 2a 00 00 call 3a50 <printf>
exit();
100e: e8 c0 28 00 00 call 38d3 <exit>
1013: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
101a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
00001020 <fourfiles>:
void fourfiles(void) {
1020: 55 push %ebp
1021: 89 e5 mov %esp,%ebp
1023: 57 push %edi
1024: 56 push %esi
printf(1, "fourfiles test\n");
1025: be de 41 00 00 mov $0x41de,%esi
void fourfiles(void) {
102a: 53 push %ebx
for (pi = 0; pi < 4; pi++) {
102b: 31 db xor %ebx,%ebx
void fourfiles(void) {
102d: 83 ec 34 sub $0x34,%esp
char *names[] = { "f0", "f1", "f2", "f3" };
1030: c7 45 d8 de 41 00 00 movl $0x41de,-0x28(%ebp)
printf(1, "fourfiles test\n");
1037: 68 e4 41 00 00 push $0x41e4
103c: 6a 01 push $0x1
char *names[] = { "f0", "f1", "f2", "f3" };
103e: c7 45 dc 27 43 00 00 movl $0x4327,-0x24(%ebp)
1045: c7 45 e0 2b 43 00 00 movl $0x432b,-0x20(%ebp)
104c: c7 45 e4 e1 41 00 00 movl $0x41e1,-0x1c(%ebp)
printf(1, "fourfiles test\n");
1053: e8 f8 29 00 00 call 3a50 <printf>
1058: 83 c4 10 add $0x10,%esp
unlink(fname);
105b: 83 ec 0c sub $0xc,%esp
105e: 56 push %esi
105f: e8 ef 28 00 00 call 3953 <unlink>
pid = fork();
1064: e8 62 28 00 00 call 38cb <fork>
if (pid < 0) {
1069: 83 c4 10 add $0x10,%esp
106c: 85 c0 test %eax,%eax
106e: 0f 88 64 01 00 00 js 11d8 <fourfiles+0x1b8>
if (pid == 0) {
1074: 0f 84 e9 00 00 00 je 1163 <fourfiles+0x143>
for (pi = 0; pi < 4; pi++) {
107a: 83 c3 01 add $0x1,%ebx
107d: 83 fb 04 cmp $0x4,%ebx
1080: 74 06 je 1088 <fourfiles+0x68>
fname = names[pi];
1082: 8b 74 9d d8 mov -0x28(%ebp,%ebx,4),%esi
1086: eb d3 jmp 105b <fourfiles+0x3b>
wait();
1088: e8 4e 28 00 00 call 38db <wait>
for (i = 0; i < 2; i++) {
108d: 31 f6 xor %esi,%esi
wait();
108f: e8 47 28 00 00 call 38db <wait>
1094: e8 42 28 00 00 call 38db <wait>
1099: e8 3d 28 00 00 call 38db <wait>
fname = names[i];
109e: 8b 44 b5 d8 mov -0x28(%ebp,%esi,4),%eax
fd = open(fname, 0);
10a2: 83 ec 08 sub $0x8,%esp
total = 0;
10a5: 31 db xor %ebx,%ebx
fd = open(fname, 0);
10a7: 6a 00 push $0x0
10a9: 50 push %eax
fname = names[i];
10aa: 89 45 d0 mov %eax,-0x30(%ebp)
fd = open(fname, 0);
10ad: e8 89 28 00 00 call 393b <open>
while ((n = read(fd, buf, sizeof(buf))) > 0) {
10b2: 83 c4 10 add $0x10,%esp
fd = open(fname, 0);
10b5: 89 45 d4 mov %eax,-0x2c(%ebp)
while ((n = read(fd, buf, sizeof(buf))) > 0) {
10b8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
10bf: 90 nop
10c0: 83 ec 04 sub $0x4,%esp
10c3: 68 00 20 00 00 push $0x2000
10c8: 68 a0 85 00 00 push $0x85a0
10cd: ff 75 d4 push -0x2c(%ebp)
10d0: e8 16 28 00 00 call 38eb <read>
10d5: 83 c4 10 add $0x10,%esp
10d8: 89 c7 mov %eax,%edi
10da: 85 c0 test %eax,%eax
10dc: 7e 20 jle 10fe <fourfiles+0xde>
for (j = 0; j < n; j++) {
10de: 31 c0 xor %eax,%eax
if (buf[j] != '0' + i) {
10e0: 83 fe 01 cmp $0x1,%esi
10e3: 0f be 88 a0 85 00 00 movsbl 0x85a0(%eax),%ecx
10ea: 19 d2 sbb %edx,%edx
10ec: 83 c2 31 add $0x31,%edx
10ef: 39 d1 cmp %edx,%ecx
10f1: 75 5c jne 114f <fourfiles+0x12f>
for (j = 0; j < n; j++) {
10f3: 83 c0 01 add $0x1,%eax
10f6: 39 c7 cmp %eax,%edi
10f8: 75 e6 jne 10e0 <fourfiles+0xc0>
total += n;
10fa: 01 fb add %edi,%ebx
10fc: eb c2 jmp 10c0 <fourfiles+0xa0>
close(fd);
10fe: 83 ec 0c sub $0xc,%esp
1101: ff 75 d4 push -0x2c(%ebp)
1104: e8 62 28 00 00 call 396b <close>
if (total != 12 * 500) {
1109: 83 c4 10 add $0x10,%esp
110c: 81 fb 70 17 00 00 cmp $0x1770,%ebx
1112: 0f 85 d4 00 00 00 jne 11ec <fourfiles+0x1cc>
unlink(fname);
1118: 83 ec 0c sub $0xc,%esp
111b: ff 75 d0 push -0x30(%ebp)
111e: e8 30 28 00 00 call 3953 <unlink>
for (i = 0; i < 2; i++) {
1123: 83 c4 10 add $0x10,%esp
1126: 83 fe 01 cmp $0x1,%esi
1129: 75 1a jne 1145 <fourfiles+0x125>
printf(1, "fourfiles ok\n");
112b: 83 ec 08 sub $0x8,%esp
112e: 68 22 42 00 00 push $0x4222
1133: 6a 01 push $0x1
1135: e8 16 29 00 00 call 3a50 <printf>
}
113a: 83 c4 10 add $0x10,%esp
113d: 8d 65 f4 lea -0xc(%ebp),%esp
1140: 5b pop %ebx
1141: 5e pop %esi
1142: 5f pop %edi
1143: 5d pop %ebp
1144: c3 ret
1145: be 01 00 00 00 mov $0x1,%esi
114a: e9 4f ff ff ff jmp 109e <fourfiles+0x7e>
printf(1, "wrong char\n");
114f: 83 ec 08 sub $0x8,%esp
1152: 68 05 42 00 00 push $0x4205
1157: 6a 01 push $0x1
1159: e8 f2 28 00 00 call 3a50 <printf>
exit();
115e: e8 70 27 00 00 call 38d3 <exit>
fd = open(fname, O_CREATE | O_RDWR);
1163: 83 ec 08 sub $0x8,%esp
1166: 68 02 02 00 00 push $0x202
116b: 56 push %esi
116c: e8 ca 27 00 00 call 393b <open>
if (fd < 0) {
1171: 83 c4 10 add $0x10,%esp
fd = open(fname, O_CREATE | O_RDWR);
1174: 89 c6 mov %eax,%esi
if (fd < 0) {
1176: 85 c0 test %eax,%eax
1178: 78 45 js 11bf <fourfiles+0x19f>
memset(buf, '0' + pi, 512);
117a: 83 ec 04 sub $0x4,%esp
117d: 83 c3 30 add $0x30,%ebx
1180: 68 00 02 00 00 push $0x200
1185: 53 push %ebx
1186: bb 0c 00 00 00 mov $0xc,%ebx
118b: 68 a0 85 00 00 push $0x85a0
1190: e8 ab 25 00 00 call 3740 <memset>
1195: 83 c4 10 add $0x10,%esp
if ((n = write(fd, buf, 500)) != 500) {
1198: 83 ec 04 sub $0x4,%esp
119b: 68 f4 01 00 00 push $0x1f4
11a0: 68 a0 85 00 00 push $0x85a0
11a5: 56 push %esi
11a6: e8 98 27 00 00 call 3943 <write>
11ab: 83 c4 10 add $0x10,%esp
11ae: 3d f4 01 00 00 cmp $0x1f4,%eax
11b3: 75 4a jne 11ff <fourfiles+0x1df>
for (i = 0; i < 12; i++) {
11b5: 83 eb 01 sub $0x1,%ebx
11b8: 75 de jne 1198 <fourfiles+0x178>
exit();
11ba: e8 14 27 00 00 call 38d3 <exit>
printf(1, "create failed\n");
11bf: 51 push %ecx
11c0: 51 push %ecx
11c1: 68 7f 44 00 00 push $0x447f
11c6: 6a 01 push $0x1
11c8: e8 83 28 00 00 call 3a50 <printf>
exit();
11cd: e8 01 27 00 00 call 38d3 <exit>
11d2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
printf(1, "fork failed\n");
11d8: 83 ec 08 sub $0x8,%esp
11db: 68 b9 4c 00 00 push $0x4cb9
11e0: 6a 01 push $0x1
11e2: e8 69 28 00 00 call 3a50 <printf>
exit();
11e7: e8 e7 26 00 00 call 38d3 <exit>
printf(1, "wrong length %d\n", total);
11ec: 50 push %eax
11ed: 53 push %ebx
11ee: 68 11 42 00 00 push $0x4211
11f3: 6a 01 push $0x1
11f5: e8 56 28 00 00 call 3a50 <printf>
exit();
11fa: e8 d4 26 00 00 call 38d3 <exit>
printf(1, "write failed %d\n", n);
11ff: 52 push %edx
1200: 50 push %eax
1201: 68 f4 41 00 00 push $0x41f4
1206: 6a 01 push $0x1
1208: e8 43 28 00 00 call 3a50 <printf>
exit();
120d: e8 c1 26 00 00 call 38d3 <exit>
1212: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
1219: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
00001220 <createdelete>:
void createdelete(void) {
1220: 55 push %ebp
1221: 89 e5 mov %esp,%ebp
1223: 57 push %edi
1224: 56 push %esi
1225: 53 push %ebx
for (pi = 0; pi < 4; pi++) {
1226: 31 db xor %ebx,%ebx
void createdelete(void) {
1228: 83 ec 44 sub $0x44,%esp
printf(1, "createdelete test\n");
122b: 68 30 42 00 00 push $0x4230
1230: 6a 01 push $0x1
1232: e8 19 28 00 00 call 3a50 <printf>
1237: 83 c4 10 add $0x10,%esp
pid = fork();
123a: e8 8c 26 00 00 call 38cb <fork>
if (pid < 0) {
123f: 85 c0 test %eax,%eax
1241: 0f 88 c3 01 00 00 js 140a <createdelete+0x1ea>
if (pid == 0) {
1247: 0f 84 13 01 00 00 je 1360 <createdelete+0x140>
for (pi = 0; pi < 4; pi++) {
124d: 83 c3 01 add $0x1,%ebx
1250: 83 fb 04 cmp $0x4,%ebx
1253: 75 e5 jne 123a <createdelete+0x1a>
wait();
1255: e8 81 26 00 00 call 38db <wait>
for (i = 0; i < N; i++) {
125a: 31 f6 xor %esi,%esi
125c: 8d 7d c8 lea -0x38(%ebp),%edi
wait();
125f: e8 77 26 00 00 call 38db <wait>
1264: e8 72 26 00 00 call 38db <wait>
1269: e8 6d 26 00 00 call 38db <wait>
name[0] = name[1] = name[2] = 0;
126e: c6 45 ca 00 movb $0x0,-0x36(%ebp)
for (i = 0; i < N; i++) {
1272: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
if ((i == 0 || i >= N / 2) && fd < 0) {
1278: 85 f6 test %esi,%esi
127a: 8d 46 30 lea 0x30(%esi),%eax
127d: 0f 94 c3 sete %bl
1280: 83 fe 09 cmp $0x9,%esi
1283: 88 45 c7 mov %al,-0x39(%ebp)
1286: 0f 9f c0 setg %al
1289: 09 c3 or %eax,%ebx
else if ((i >= 1 && i < N / 2) && fd >= 0) {
128b: 8d 46 ff lea -0x1(%esi),%eax
128e: 89 45 c0 mov %eax,-0x40(%ebp)
if ((i == 0 || i >= N / 2) && fd < 0) {
1291: 88 5d c6 mov %bl,-0x3a(%ebp)
1294: bb 70 00 00 00 mov $0x70,%ebx
fd = open(name, 0);
1299: 83 ec 08 sub $0x8,%esp
name[1] = '0' + i;
129c: 0f b6 45 c7 movzbl -0x39(%ebp),%eax
name[0] = 'p' + pi;
12a0: 88 5d c8 mov %bl,-0x38(%ebp)
fd = open(name, 0);
12a3: 6a 00 push $0x0
12a5: 57 push %edi
name[1] = '0' + i;
12a6: 88 45 c9 mov %al,-0x37(%ebp)
fd = open(name, 0);
12a9: e8 8d 26 00 00 call 393b <open>
if ((i == 0 || i >= N / 2) && fd < 0) {
12ae: 83 c4 10 add $0x10,%esp
12b1: 80 7d c6 00 cmpb $0x0,-0x3a(%ebp)
12b5: 0f 84 85 00 00 00 je 1340 <createdelete+0x120>
12bb: 85 c0 test %eax,%eax
12bd: 0f 88 32 01 00 00 js 13f5 <createdelete+0x1d5>
else if ((i >= 1 && i < N / 2) && fd >= 0) {
12c3: 83 7d c0 08 cmpl $0x8,-0x40(%ebp)
12c7: 76 7b jbe 1344 <createdelete+0x124>
close(fd);
12c9: 83 ec 0c sub $0xc,%esp
12cc: 50 push %eax
12cd: e8 99 26 00 00 call 396b <close>
12d2: 83 c4 10 add $0x10,%esp
for (pi = 0; pi < 4; pi++) {
12d5: 83 c3 01 add $0x1,%ebx
12d8: 80 fb 74 cmp $0x74,%bl
12db: 75 bc jne 1299 <createdelete+0x79>
for (i = 0; i < N; i++) {
12dd: 83 c6 01 add $0x1,%esi
12e0: 83 fe 14 cmp $0x14,%esi
12e3: 75 93 jne 1278 <createdelete+0x58>
12e5: be 70 00 00 00 mov $0x70,%esi
12ea: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
for (pi = 0; pi < 4; pi++) {
12f0: 8d 46 c0 lea -0x40(%esi),%eax
name[0] = 'p' + i;
12f3: bb 04 00 00 00 mov $0x4,%ebx
12f8: 88 45 c7 mov %al,-0x39(%ebp)
unlink(name);
12fb: 83 ec 0c sub $0xc,%esp
name[0] = 'p' + i;
12fe: 89 f0 mov %esi,%eax
unlink(name);
1300: 57 push %edi
name[0] = 'p' + i;
1301: 88 45 c8 mov %al,-0x38(%ebp)
name[1] = '0' + i;
1304: 0f b6 45 c7 movzbl -0x39(%ebp),%eax
1308: 88 45 c9 mov %al,-0x37(%ebp)
unlink(name);
130b: e8 43 26 00 00 call 3953 <unlink>
for (pi = 0; pi < 4; pi++) {
1310: 83 c4 10 add $0x10,%esp
1313: 83 eb 01 sub $0x1,%ebx
1316: 75 e3 jne 12fb <createdelete+0xdb>
for (i = 0; i < N; i++) {
1318: 83 c6 01 add $0x1,%esi
131b: 89 f0 mov %esi,%eax
131d: 3c 84 cmp $0x84,%al
131f: 75 cf jne 12f0 <createdelete+0xd0>
printf(1, "createdelete ok\n");
1321: 83 ec 08 sub $0x8,%esp
1324: 68 43 42 00 00 push $0x4243
1329: 6a 01 push $0x1
132b: e8 20 27 00 00 call 3a50 <printf>
}
1330: 8d 65 f4 lea -0xc(%ebp),%esp
1333: 5b pop %ebx
1334: 5e pop %esi
1335: 5f pop %edi
1336: 5d pop %ebp
1337: c3 ret
1338: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
133f: 90 nop
else if ((i >= 1 && i < N / 2) && fd >= 0) {
1340: 85 c0 test %eax,%eax
1342: 78 91 js 12d5 <createdelete+0xb5>
printf(1, "oops createdelete %s did exist\n", name);
1344: 50 push %eax
1345: 57 push %edi
1346: 68 14 4f 00 00 push $0x4f14
134b: 6a 01 push $0x1
134d: e8 fe 26 00 00 call 3a50 <printf>
exit();
1352: e8 7c 25 00 00 call 38d3 <exit>
1357: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
135e: 66 90 xchg %ax,%ax
name[0] = 'p' + pi;
1360: 83 c3 70 add $0x70,%ebx
name[2] = '\0';
1363: c6 45 ca 00 movb $0x0,-0x36(%ebp)
1367: be 01 00 00 00 mov $0x1,%esi
136c: 8d 7d c8 lea -0x38(%ebp),%edi
name[0] = 'p' + pi;
136f: 88 5d c8 mov %bl,-0x38(%ebp)
name[2] = '\0';
1372: 31 db xor %ebx,%ebx
1374: eb 15 jmp 138b <createdelete+0x16b>
1376: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
137d: 8d 76 00 lea 0x0(%esi),%esi
for (i = 0; i < N; i++) {
1380: 83 fe 14 cmp $0x14,%esi
1383: 74 6b je 13f0 <createdelete+0x1d0>
1385: 83 c3 01 add $0x1,%ebx
1388: 83 c6 01 add $0x1,%esi
fd = open(name, O_CREATE | O_RDWR);
138b: 83 ec 08 sub $0x8,%esp
name[1] = '0' + i;
138e: 8d 43 30 lea 0x30(%ebx),%eax
fd = open(name, O_CREATE | O_RDWR);
1391: 68 02 02 00 00 push $0x202
1396: 57 push %edi
name[1] = '0' + i;
1397: 88 45 c9 mov %al,-0x37(%ebp)
fd = open(name, O_CREATE | O_RDWR);
139a: e8 9c 25 00 00 call 393b <open>
if (fd < 0) {
139f: 83 c4 10 add $0x10,%esp
13a2: 85 c0 test %eax,%eax
13a4: 78 78 js 141e <createdelete+0x1fe>
close(fd);
13a6: 83 ec 0c sub $0xc,%esp
13a9: 50 push %eax
13aa: e8 bc 25 00 00 call 396b <close>
if (i > 0 && (i % 2) == 0) {
13af: 83 c4 10 add $0x10,%esp
13b2: 85 db test %ebx,%ebx
13b4: 74 cf je 1385 <createdelete+0x165>
13b6: f6 c3 01 test $0x1,%bl
13b9: 75 c5 jne 1380 <createdelete+0x160>
if (unlink(name) < 0) {
13bb: 83 ec 0c sub $0xc,%esp
name[1] = '0' + (i / 2);
13be: 89 d8 mov %ebx,%eax
if (unlink(name) < 0) {
13c0: 57 push %edi
name[1] = '0' + (i / 2);
13c1: d1 f8 sar %eax
13c3: 83 c0 30 add $0x30,%eax
13c6: 88 45 c9 mov %al,-0x37(%ebp)
if (unlink(name) < 0) {
13c9: e8 85 25 00 00 call 3953 <unlink>
13ce: 83 c4 10 add $0x10,%esp
13d1: 85 c0 test %eax,%eax
13d3: 79 ab jns 1380 <createdelete+0x160>
printf(1, "unlink failed\n");
13d5: 52 push %edx
13d6: 52 push %edx
13d7: 68 31 3e 00 00 push $0x3e31
13dc: 6a 01 push $0x1
13de: e8 6d 26 00 00 call 3a50 <printf>
exit();
13e3: e8 eb 24 00 00 call 38d3 <exit>
13e8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
13ef: 90 nop
exit();
13f0: e8 de 24 00 00 call 38d3 <exit>
printf(1, "oops createdelete %s didn't exist\n", name);
13f5: 83 ec 04 sub $0x4,%esp
13f8: 57 push %edi
13f9: 68 f0 4e 00 00 push $0x4ef0
13fe: 6a 01 push $0x1
1400: e8 4b 26 00 00 call 3a50 <printf>
exit();
1405: e8 c9 24 00 00 call 38d3 <exit>
printf(1, "fork failed\n");
140a: 83 ec 08 sub $0x8,%esp
140d: 68 b9 4c 00 00 push $0x4cb9
1412: 6a 01 push $0x1
1414: e8 37 26 00 00 call 3a50 <printf>
exit();
1419: e8 b5 24 00 00 call 38d3 <exit>
printf(1, "create failed\n");
141e: 83 ec 08 sub $0x8,%esp
1421: 68 7f 44 00 00 push $0x447f
1426: 6a 01 push $0x1
1428: e8 23 26 00 00 call 3a50 <printf>
exit();
142d: e8 a1 24 00 00 call 38d3 <exit>
1432: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
1439: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
00001440 <unlinkread>:
void unlinkread(void) {
1440: 55 push %ebp
1441: 89 e5 mov %esp,%ebp
1443: 56 push %esi
1444: 53 push %ebx
printf(1, "unlinkread test\n");
1445: 83 ec 08 sub $0x8,%esp
1448: 68 54 42 00 00 push $0x4254
144d: 6a 01 push $0x1
144f: e8 fc 25 00 00 call 3a50 <printf>
fd = open("unlinkread", O_CREATE | O_RDWR);
1454: 5b pop %ebx
1455: 5e pop %esi
1456: 68 02 02 00 00 push $0x202
145b: 68 65 42 00 00 push $0x4265
1460: e8 d6 24 00 00 call 393b <open>
if (fd < 0) {
1465: 83 c4 10 add $0x10,%esp
1468: 85 c0 test %eax,%eax
146a: 0f 88 e6 00 00 00 js 1556 <unlinkread+0x116>
write(fd, "hello", 5);
1470: 83 ec 04 sub $0x4,%esp
1473: 89 c3 mov %eax,%ebx
1475: 6a 05 push $0x5
1477: 68 8a 42 00 00 push $0x428a
147c: 50 push %eax
147d: e8 c1 24 00 00 call 3943 <write>
close(fd);
1482: 89 1c 24 mov %ebx,(%esp)
1485: e8 e1 24 00 00 call 396b <close>
fd = open("unlinkread", O_RDWR);
148a: 58 pop %eax
148b: 5a pop %edx
148c: 6a 02 push $0x2
148e: 68 65 42 00 00 push $0x4265
1493: e8 a3 24 00 00 call 393b <open>
if (fd < 0) {
1498: 83 c4 10 add $0x10,%esp
fd = open("unlinkread", O_RDWR);
149b: 89 c3 mov %eax,%ebx
if (fd < 0) {
149d: 85 c0 test %eax,%eax
149f: 0f 88 10 01 00 00 js 15b5 <unlinkread+0x175>
if (unlink("unlinkread") != 0) {
14a5: 83 ec 0c sub $0xc,%esp
14a8: 68 65 42 00 00 push $0x4265
14ad: e8 a1 24 00 00 call 3953 <unlink>
14b2: 83 c4 10 add $0x10,%esp
14b5: 85 c0 test %eax,%eax
14b7: 0f 85 e5 00 00 00 jne 15a2 <unlinkread+0x162>
fd1 = open("unlinkread", O_CREATE | O_RDWR);
14bd: 83 ec 08 sub $0x8,%esp
14c0: 68 02 02 00 00 push $0x202
14c5: 68 65 42 00 00 push $0x4265
14ca: e8 6c 24 00 00 call 393b <open>
write(fd1, "yyy", 3);
14cf: 83 c4 0c add $0xc,%esp
14d2: 6a 03 push $0x3
fd1 = open("unlinkread", O_CREATE | O_RDWR);
14d4: 89 c6 mov %eax,%esi
write(fd1, "yyy", 3);
14d6: 68 c2 42 00 00 push $0x42c2
14db: 50 push %eax
14dc: e8 62 24 00 00 call 3943 <write>
close(fd1);
14e1: 89 34 24 mov %esi,(%esp)
14e4: e8 82 24 00 00 call 396b <close>
if (read(fd, buf, sizeof(buf)) != 5) {
14e9: 83 c4 0c add $0xc,%esp
14ec: 68 00 20 00 00 push $0x2000
14f1: 68 a0 85 00 00 push $0x85a0
14f6: 53 push %ebx
14f7: e8 ef 23 00 00 call 38eb <read>
14fc: 83 c4 10 add $0x10,%esp
14ff: 83 f8 05 cmp $0x5,%eax
1502: 0f 85 87 00 00 00 jne 158f <unlinkread+0x14f>
if (buf[0] != 'h') {
1508: 80 3d a0 85 00 00 68 cmpb $0x68,0x85a0
150f: 75 6b jne 157c <unlinkread+0x13c>
if (write(fd, buf, 10) != 10) {
1511: 83 ec 04 sub $0x4,%esp
1514: 6a 0a push $0xa
1516: 68 a0 85 00 00 push $0x85a0
151b: 53 push %ebx
151c: e8 22 24 00 00 call 3943 <write>
1521: 83 c4 10 add $0x10,%esp
1524: 83 f8 0a cmp $0xa,%eax
1527: 75 40 jne 1569 <unlinkread+0x129>
close(fd);
1529: 83 ec 0c sub $0xc,%esp
152c: 53 push %ebx
152d: e8 39 24 00 00 call 396b <close>
unlink("unlinkread");
1532: c7 04 24 65 42 00 00 movl $0x4265,(%esp)
1539: e8 15 24 00 00 call 3953 <unlink>
printf(1, "unlinkread ok\n");
153e: 58 pop %eax
153f: 5a pop %edx
1540: 68 0d 43 00 00 push $0x430d
1545: 6a 01 push $0x1
1547: e8 04 25 00 00 call 3a50 <printf>
}
154c: 83 c4 10 add $0x10,%esp
154f: 8d 65 f8 lea -0x8(%ebp),%esp
1552: 5b pop %ebx
1553: 5e pop %esi
1554: 5d pop %ebp
1555: c3 ret
printf(1, "create unlinkread failed\n");
1556: 51 push %ecx
1557: 51 push %ecx
1558: 68 70 42 00 00 push $0x4270
155d: 6a 01 push $0x1
155f: e8 ec 24 00 00 call 3a50 <printf>
exit();
1564: e8 6a 23 00 00 call 38d3 <exit>
printf(1, "unlinkread write failed\n");
1569: 51 push %ecx
156a: 51 push %ecx
156b: 68 f4 42 00 00 push $0x42f4
1570: 6a 01 push $0x1
1572: e8 d9 24 00 00 call 3a50 <printf>
exit();
1577: e8 57 23 00 00 call 38d3 <exit>
printf(1, "unlinkread wrong data\n");
157c: 53 push %ebx
157d: 53 push %ebx
157e: 68 dd 42 00 00 push $0x42dd
1583: 6a 01 push $0x1
1585: e8 c6 24 00 00 call 3a50 <printf>
exit();
158a: e8 44 23 00 00 call 38d3 <exit>
printf(1, "unlinkread read failed");
158f: 56 push %esi
1590: 56 push %esi
1591: 68 c6 42 00 00 push $0x42c6
1596: 6a 01 push $0x1
1598: e8 b3 24 00 00 call 3a50 <printf>
exit();
159d: e8 31 23 00 00 call 38d3 <exit>
printf(1, "unlink unlinkread failed\n");
15a2: 50 push %eax
15a3: 50 push %eax
15a4: 68 a8 42 00 00 push $0x42a8
15a9: 6a 01 push $0x1
15ab: e8 a0 24 00 00 call 3a50 <printf>
exit();
15b0: e8 1e 23 00 00 call 38d3 <exit>
printf(1, "open unlinkread failed\n");
15b5: 50 push %eax
15b6: 50 push %eax
15b7: 68 90 42 00 00 push $0x4290
15bc: 6a 01 push $0x1
15be: e8 8d 24 00 00 call 3a50 <printf>
exit();
15c3: e8 0b 23 00 00 call 38d3 <exit>
15c8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
15cf: 90 nop
000015d0 <linktest>:
void linktest(void) {
15d0: 55 push %ebp
15d1: 89 e5 mov %esp,%ebp
15d3: 53 push %ebx
15d4: 83 ec 0c sub $0xc,%esp
printf(1, "linktest\n");
15d7: 68 1c 43 00 00 push $0x431c
15dc: 6a 01 push $0x1
15de: e8 6d 24 00 00 call 3a50 <printf>
unlink("lf1");
15e3: c7 04 24 26 43 00 00 movl $0x4326,(%esp)
15ea: e8 64 23 00 00 call 3953 <unlink>
unlink("lf2");
15ef: c7 04 24 2a 43 00 00 movl $0x432a,(%esp)
15f6: e8 58 23 00 00 call 3953 <unlink>
fd = open("lf1", O_CREATE | O_RDWR);
15fb: 58 pop %eax
15fc: 5a pop %edx
15fd: 68 02 02 00 00 push $0x202
1602: 68 26 43 00 00 push $0x4326
1607: e8 2f 23 00 00 call 393b <open>
if (fd < 0) {
160c: 83 c4 10 add $0x10,%esp
160f: 85 c0 test %eax,%eax
1611: 0f 88 1e 01 00 00 js 1735 <linktest+0x165>
if (write(fd, "hello", 5) != 5) {
1617: 83 ec 04 sub $0x4,%esp
161a: 89 c3 mov %eax,%ebx
161c: 6a 05 push $0x5
161e: 68 8a 42 00 00 push $0x428a
1623: 50 push %eax
1624: e8 1a 23 00 00 call 3943 <write>
1629: 83 c4 10 add $0x10,%esp
162c: 83 f8 05 cmp $0x5,%eax
162f: 0f 85 98 01 00 00 jne 17cd <linktest+0x1fd>
close(fd);
1635: 83 ec 0c sub $0xc,%esp
1638: 53 push %ebx
1639: e8 2d 23 00 00 call 396b <close>
if (link("lf1", "lf2") < 0) {
163e: 5b pop %ebx
163f: 58 pop %eax
1640: 68 2a 43 00 00 push $0x432a
1645: 68 26 43 00 00 push $0x4326
164a: e8 0c 23 00 00 call 395b <link>
164f: 83 c4 10 add $0x10,%esp
1652: 85 c0 test %eax,%eax
1654: 0f 88 60 01 00 00 js 17ba <linktest+0x1ea>
unlink("lf1");
165a: 83 ec 0c sub $0xc,%esp
165d: 68 26 43 00 00 push $0x4326
1662: e8 ec 22 00 00 call 3953 <unlink>
if (open("lf1", 0) >= 0) {
1667: 58 pop %eax
1668: 5a pop %edx
1669: 6a 00 push $0x0
166b: 68 26 43 00 00 push $0x4326
1670: e8 c6 22 00 00 call 393b <open>
1675: 83 c4 10 add $0x10,%esp
1678: 85 c0 test %eax,%eax
167a: 0f 89 27 01 00 00 jns 17a7 <linktest+0x1d7>
fd = open("lf2", 0);
1680: 83 ec 08 sub $0x8,%esp
1683: 6a 00 push $0x0
1685: 68 2a 43 00 00 push $0x432a
168a: e8 ac 22 00 00 call 393b <open>
if (fd < 0) {
168f: 83 c4 10 add $0x10,%esp
fd = open("lf2", 0);
1692: 89 c3 mov %eax,%ebx
if (fd < 0) {
1694: 85 c0 test %eax,%eax
1696: 0f 88 f8 00 00 00 js 1794 <linktest+0x1c4>
if (read(fd, buf, sizeof(buf)) != 5) {
169c: 83 ec 04 sub $0x4,%esp
169f: 68 00 20 00 00 push $0x2000
16a4: 68 a0 85 00 00 push $0x85a0
16a9: 50 push %eax
16aa: e8 3c 22 00 00 call 38eb <read>
16af: 83 c4 10 add $0x10,%esp
16b2: 83 f8 05 cmp $0x5,%eax
16b5: 0f 85 c6 00 00 00 jne 1781 <linktest+0x1b1>
close(fd);
16bb: 83 ec 0c sub $0xc,%esp
16be: 53 push %ebx
16bf: e8 a7 22 00 00 call 396b <close>
if (link("lf2", "lf2") >= 0) {
16c4: 58 pop %eax
16c5: 5a pop %edx
16c6: 68 2a 43 00 00 push $0x432a
16cb: 68 2a 43 00 00 push $0x432a
16d0: e8 86 22 00 00 call 395b <link>
16d5: 83 c4 10 add $0x10,%esp
16d8: 85 c0 test %eax,%eax
16da: 0f 89 8e 00 00 00 jns 176e <linktest+0x19e>
unlink("lf2");
16e0: 83 ec 0c sub $0xc,%esp
16e3: 68 2a 43 00 00 push $0x432a
16e8: e8 66 22 00 00 call 3953 <unlink>
if (link("lf2", "lf1") >= 0) {
16ed: 59 pop %ecx
16ee: 5b pop %ebx
16ef: 68 26 43 00 00 push $0x4326
16f4: 68 2a 43 00 00 push $0x432a
16f9: e8 5d 22 00 00 call 395b <link>
16fe: 83 c4 10 add $0x10,%esp
1701: 85 c0 test %eax,%eax
1703: 79 56 jns 175b <linktest+0x18b>
if (link(".", "lf1") >= 0) {
1705: 83 ec 08 sub $0x8,%esp
1708: 68 26 43 00 00 push $0x4326
170d: 68 ee 45 00 00 push $0x45ee
1712: e8 44 22 00 00 call 395b <link>
1717: 83 c4 10 add $0x10,%esp
171a: 85 c0 test %eax,%eax
171c: 79 2a jns 1748 <linktest+0x178>
printf(1, "linktest ok\n");
171e: 83 ec 08 sub $0x8,%esp
1721: 68 c4 43 00 00 push $0x43c4
1726: 6a 01 push $0x1
1728: e8 23 23 00 00 call 3a50 <printf>
}
172d: 8b 5d fc mov -0x4(%ebp),%ebx
1730: 83 c4 10 add $0x10,%esp
1733: c9 leave
1734: c3 ret
printf(1, "create lf1 failed\n");
1735: 50 push %eax
1736: 50 push %eax
1737: 68 2e 43 00 00 push $0x432e
173c: 6a 01 push $0x1
173e: e8 0d 23 00 00 call 3a50 <printf>
exit();
1743: e8 8b 21 00 00 call 38d3 <exit>
printf(1, "link . lf1 succeeded! oops\n");
1748: 50 push %eax
1749: 50 push %eax
174a: 68 a8 43 00 00 push $0x43a8
174f: 6a 01 push $0x1
1751: e8 fa 22 00 00 call 3a50 <printf>
exit();
1756: e8 78 21 00 00 call 38d3 <exit>
printf(1, "link non-existant succeeded! oops\n");
175b: 52 push %edx
175c: 52 push %edx
175d: 68 5c 4f 00 00 push $0x4f5c
1762: 6a 01 push $0x1
1764: e8 e7 22 00 00 call 3a50 <printf>
exit();
1769: e8 65 21 00 00 call 38d3 <exit>
printf(1, "link lf2 lf2 succeeded! oops\n");
176e: 50 push %eax
176f: 50 push %eax
1770: 68 8a 43 00 00 push $0x438a
1775: 6a 01 push $0x1
1777: e8 d4 22 00 00 call 3a50 <printf>
exit();
177c: e8 52 21 00 00 call 38d3 <exit>
printf(1, "read lf2 failed\n");
1781: 51 push %ecx
1782: 51 push %ecx
1783: 68 79 43 00 00 push $0x4379
1788: 6a 01 push $0x1
178a: e8 c1 22 00 00 call 3a50 <printf>
exit();
178f: e8 3f 21 00 00 call 38d3 <exit>
printf(1, "open lf2 failed\n");
1794: 53 push %ebx
1795: 53 push %ebx
1796: 68 68 43 00 00 push $0x4368
179b: 6a 01 push $0x1
179d: e8 ae 22 00 00 call 3a50 <printf>
exit();
17a2: e8 2c 21 00 00 call 38d3 <exit>
printf(1, "unlinked lf1 but it is still there!\n");
17a7: 50 push %eax
17a8: 50 push %eax
17a9: 68 34 4f 00 00 push $0x4f34
17ae: 6a 01 push $0x1
17b0: e8 9b 22 00 00 call 3a50 <printf>
exit();
17b5: e8 19 21 00 00 call 38d3 <exit>
printf(1, "link lf1 lf2 failed\n");
17ba: 51 push %ecx
17bb: 51 push %ecx
17bc: 68 53 43 00 00 push $0x4353
17c1: 6a 01 push $0x1
17c3: e8 88 22 00 00 call 3a50 <printf>
exit();
17c8: e8 06 21 00 00 call 38d3 <exit>
printf(1, "write lf1 failed\n");
17cd: 50 push %eax
17ce: 50 push %eax
17cf: 68 41 43 00 00 push $0x4341
17d4: 6a 01 push $0x1
17d6: e8 75 22 00 00 call 3a50 <printf>
exit();
17db: e8 f3 20 00 00 call 38d3 <exit>
000017e0 <concreate>:
void concreate(void) {
17e0: 55 push %ebp
17e1: 89 e5 mov %esp,%ebp
17e3: 57 push %edi
17e4: 56 push %esi
for (i = 0; i < 40; i++) {
17e5: 31 f6 xor %esi,%esi
void concreate(void) {
17e7: 53 push %ebx
17e8: 8d 5d ad lea -0x53(%ebp),%ebx
17eb: 83 ec 64 sub $0x64,%esp
printf(1, "concreate test\n");
17ee: 68 d1 43 00 00 push $0x43d1
17f3: 6a 01 push $0x1
17f5: e8 56 22 00 00 call 3a50 <printf>
file[0] = 'C';
17fa: c6 45 ad 43 movb $0x43,-0x53(%ebp)
file[2] = '\0';
17fe: 83 c4 10 add $0x10,%esp
1801: c6 45 af 00 movb $0x0,-0x51(%ebp)
for (i = 0; i < 40; i++) {
1805: eb 4c jmp 1853 <concreate+0x73>
1807: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
180e: 66 90 xchg %ax,%ax
1810: 69 c6 ab aa aa aa imul $0xaaaaaaab,%esi,%eax
if (pid && (i % 3) == 1) {
1816: 3d ab aa aa aa cmp $0xaaaaaaab,%eax
181b: 0f 83 af 00 00 00 jae 18d0 <concreate+0xf0>
fd = open(file, O_CREATE | O_RDWR);
1821: 83 ec 08 sub $0x8,%esp
1824: 68 02 02 00 00 push $0x202
1829: 53 push %ebx
182a: e8 0c 21 00 00 call 393b <open>
if (fd < 0) {
182f: 83 c4 10 add $0x10,%esp
1832: 85 c0 test %eax,%eax
1834: 78 5f js 1895 <concreate+0xb5>
close(fd);
1836: 83 ec 0c sub $0xc,%esp
for (i = 0; i < 40; i++) {
1839: 83 c6 01 add $0x1,%esi
close(fd);
183c: 50 push %eax
183d: e8 29 21 00 00 call 396b <close>
1842: 83 c4 10 add $0x10,%esp
wait();
1845: e8 91 20 00 00 call 38db <wait>
for (i = 0; i < 40; i++) {
184a: 83 fe 28 cmp $0x28,%esi
184d: 0f 84 9f 00 00 00 je 18f2 <concreate+0x112>
unlink(file);
1853: 83 ec 0c sub $0xc,%esp
file[1] = '0' + i;
1856: 8d 46 30 lea 0x30(%esi),%eax
unlink(file);
1859: 53 push %ebx
file[1] = '0' + i;
185a: 88 45 ae mov %al,-0x52(%ebp)
unlink(file);
185d: e8 f1 20 00 00 call 3953 <unlink>
pid = fork();
1862: e8 64 20 00 00 call 38cb <fork>
if (pid && (i % 3) == 1) {
1867: 83 c4 10 add $0x10,%esp
186a: 85 c0 test %eax,%eax
186c: 75 a2 jne 1810 <concreate+0x30>
link("C0", file);
186e: 69 f6 cd cc cc cc imul $0xcccccccd,%esi,%esi
else if (pid == 0 && (i % 5) == 1) {
1874: 81 fe cd cc cc cc cmp $0xcccccccd,%esi
187a: 73 34 jae 18b0 <concreate+0xd0>
fd = open(file, O_CREATE | O_RDWR);
187c: 83 ec 08 sub $0x8,%esp
187f: 68 02 02 00 00 push $0x202
1884: 53 push %ebx
1885: e8 b1 20 00 00 call 393b <open>
if (fd < 0) {
188a: 83 c4 10 add $0x10,%esp
188d: 85 c0 test %eax,%eax
188f: 0f 89 39 02 00 00 jns 1ace <concreate+0x2ee>
printf(1, "concreate create %s failed\n", file);
1895: 83 ec 04 sub $0x4,%esp
1898: 53 push %ebx
1899: 68 e4 43 00 00 push $0x43e4
189e: 6a 01 push $0x1
18a0: e8 ab 21 00 00 call 3a50 <printf>
exit();
18a5: e8 29 20 00 00 call 38d3 <exit>
18aa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
link("C0", file);
18b0: 83 ec 08 sub $0x8,%esp
18b3: 53 push %ebx
18b4: 68 e1 43 00 00 push $0x43e1
18b9: e8 9d 20 00 00 call 395b <link>
18be: 83 c4 10 add $0x10,%esp
exit();
18c1: e8 0d 20 00 00 call 38d3 <exit>
18c6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
18cd: 8d 76 00 lea 0x0(%esi),%esi
link("C0", file);
18d0: 83 ec 08 sub $0x8,%esp
for (i = 0; i < 40; i++) {
18d3: 83 c6 01 add $0x1,%esi
link("C0", file);
18d6: 53 push %ebx
18d7: 68 e1 43 00 00 push $0x43e1
18dc: e8 7a 20 00 00 call 395b <link>
18e1: 83 c4 10 add $0x10,%esp
wait();
18e4: e8 f2 1f 00 00 call 38db <wait>
for (i = 0; i < 40; i++) {
18e9: 83 fe 28 cmp $0x28,%esi
18ec: 0f 85 61 ff ff ff jne 1853 <concreate+0x73>
memset(fa, 0, sizeof(fa));
18f2: 83 ec 04 sub $0x4,%esp
18f5: 8d 45 c0 lea -0x40(%ebp),%eax
18f8: 6a 28 push $0x28
18fa: 6a 00 push $0x0
18fc: 50 push %eax
18fd: e8 3e 1e 00 00 call 3740 <memset>
fd = open(".", 0);
1902: 5e pop %esi
1903: 5f pop %edi
1904: 6a 00 push $0x0
1906: 68 ee 45 00 00 push $0x45ee
190b: 8d 7d b0 lea -0x50(%ebp),%edi
190e: e8 28 20 00 00 call 393b <open>
n = 0;
1913: c7 45 a4 00 00 00 00 movl $0x0,-0x5c(%ebp)
while (read(fd, &de, sizeof(de)) > 0) {
191a: 83 c4 10 add $0x10,%esp
fd = open(".", 0);
191d: 89 c6 mov %eax,%esi
while (read(fd, &de, sizeof(de)) > 0) {
191f: 90 nop
1920: 83 ec 04 sub $0x4,%esp
1923: 6a 10 push $0x10
1925: 57 push %edi
1926: 56 push %esi
1927: e8 bf 1f 00 00 call 38eb <read>
192c: 83 c4 10 add $0x10,%esp
192f: 85 c0 test %eax,%eax
1931: 7e 3d jle 1970 <concreate+0x190>
if (de.inum == 0) {
1933: 66 83 7d b0 00 cmpw $0x0,-0x50(%ebp)
1938: 74 e6 je 1920 <concreate+0x140>
if (de.name[0] == 'C' && de.name[2] == '\0') {
193a: 80 7d b2 43 cmpb $0x43,-0x4e(%ebp)
193e: 75 e0 jne 1920 <concreate+0x140>
1940: 80 7d b4 00 cmpb $0x0,-0x4c(%ebp)
1944: 75 da jne 1920 <concreate+0x140>
i = de.name[1] - '0';
1946: 0f be 45 b3 movsbl -0x4d(%ebp),%eax
194a: 83 e8 30 sub $0x30,%eax
if (i < 0 || i >= sizeof(fa)) {
194d: 83 f8 27 cmp $0x27,%eax
1950: 0f 87 60 01 00 00 ja 1ab6 <concreate+0x2d6>
if (fa[i]) {
1956: 80 7c 05 c0 00 cmpb $0x0,-0x40(%ebp,%eax,1)
195b: 0f 85 3d 01 00 00 jne 1a9e <concreate+0x2be>
n++;
1961: 83 45 a4 01 addl $0x1,-0x5c(%ebp)
fa[i] = 1;
1965: c6 44 05 c0 01 movb $0x1,-0x40(%ebp,%eax,1)
n++;
196a: eb b4 jmp 1920 <concreate+0x140>
196c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
close(fd);
1970: 83 ec 0c sub $0xc,%esp
1973: 56 push %esi
1974: e8 f2 1f 00 00 call 396b <close>
if (n != 40) {
1979: 83 c4 10 add $0x10,%esp
197c: 83 7d a4 28 cmpl $0x28,-0x5c(%ebp)
1980: 0f 85 05 01 00 00 jne 1a8b <concreate+0x2ab>
for (i = 0; i < 40; i++) {
1986: 31 f6 xor %esi,%esi
1988: eb 4c jmp 19d6 <concreate+0x1f6>
198a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
((i % 3) == 1 && pid != 0)) {
1990: 85 ff test %edi,%edi
1992: 74 05 je 1999 <concreate+0x1b9>
1994: 83 f8 01 cmp $0x1,%eax
1997: 74 6c je 1a05 <concreate+0x225>
unlink(file);
1999: 83 ec 0c sub $0xc,%esp
199c: 53 push %ebx
199d: e8 b1 1f 00 00 call 3953 <unlink>
unlink(file);
19a2: 89 1c 24 mov %ebx,(%esp)
19a5: e8 a9 1f 00 00 call 3953 <unlink>
unlink(file);
19aa: 89 1c 24 mov %ebx,(%esp)
19ad: e8 a1 1f 00 00 call 3953 <unlink>
unlink(file);
19b2: 89 1c 24 mov %ebx,(%esp)
19b5: e8 99 1f 00 00 call 3953 <unlink>
19ba: 83 c4 10 add $0x10,%esp
if (pid == 0) {
19bd: 85 ff test %edi,%edi
19bf: 0f 84 fc fe ff ff je 18c1 <concreate+0xe1>
wait();
19c5: e8 11 1f 00 00 call 38db <wait>
for (i = 0; i < 40; i++) {
19ca: 83 c6 01 add $0x1,%esi
19cd: 83 fe 28 cmp $0x28,%esi
19d0: 0f 84 8a 00 00 00 je 1a60 <concreate+0x280>
file[1] = '0' + i;
19d6: 8d 46 30 lea 0x30(%esi),%eax
19d9: 88 45 ae mov %al,-0x52(%ebp)
pid = fork();
19dc: e8 ea 1e 00 00 call 38cb <fork>
19e1: 89 c7 mov %eax,%edi
if (pid < 0) {
19e3: 85 c0 test %eax,%eax
19e5: 0f 88 8c 00 00 00 js 1a77 <concreate+0x297>
if (((i % 3) == 0 && pid == 0) ||
19eb: b8 ab aa aa aa mov $0xaaaaaaab,%eax
19f0: f7 e6 mul %esi
19f2: 89 d0 mov %edx,%eax
19f4: 83 e2 fe and $0xfffffffe,%edx
19f7: d1 e8 shr %eax
19f9: 01 c2 add %eax,%edx
19fb: 89 f0 mov %esi,%eax
19fd: 29 d0 sub %edx,%eax
19ff: 89 c1 mov %eax,%ecx
1a01: 09 f9 or %edi,%ecx
1a03: 75 8b jne 1990 <concreate+0x1b0>
close(open(file, 0));
1a05: 83 ec 08 sub $0x8,%esp
1a08: 6a 00 push $0x0
1a0a: 53 push %ebx
1a0b: e8 2b 1f 00 00 call 393b <open>
1a10: 89 04 24 mov %eax,(%esp)
1a13: e8 53 1f 00 00 call 396b <close>
close(open(file, 0));
1a18: 58 pop %eax
1a19: 5a pop %edx
1a1a: 6a 00 push $0x0
1a1c: 53 push %ebx
1a1d: e8 19 1f 00 00 call 393b <open>
1a22: 89 04 24 mov %eax,(%esp)
1a25: e8 41 1f 00 00 call 396b <close>
close(open(file, 0));
1a2a: 59 pop %ecx
1a2b: 58 pop %eax
1a2c: 6a 00 push $0x0
1a2e: 53 push %ebx
1a2f: e8 07 1f 00 00 call 393b <open>
1a34: 89 04 24 mov %eax,(%esp)
1a37: e8 2f 1f 00 00 call 396b <close>
close(open(file, 0));
1a3c: 58 pop %eax
1a3d: 5a pop %edx
1a3e: 6a 00 push $0x0
1a40: 53 push %ebx
1a41: e8 f5 1e 00 00 call 393b <open>
1a46: 89 04 24 mov %eax,(%esp)
1a49: e8 1d 1f 00 00 call 396b <close>
1a4e: 83 c4 10 add $0x10,%esp
1a51: e9 67 ff ff ff jmp 19bd <concreate+0x1dd>
1a56: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
1a5d: 8d 76 00 lea 0x0(%esi),%esi
printf(1, "concreate ok\n");
1a60: 83 ec 08 sub $0x8,%esp
1a63: 68 36 44 00 00 push $0x4436
1a68: 6a 01 push $0x1
1a6a: e8 e1 1f 00 00 call 3a50 <printf>
}
1a6f: 8d 65 f4 lea -0xc(%ebp),%esp
1a72: 5b pop %ebx
1a73: 5e pop %esi
1a74: 5f pop %edi
1a75: 5d pop %ebp
1a76: c3 ret
printf(1, "fork failed\n");
1a77: 83 ec 08 sub $0x8,%esp
1a7a: 68 b9 4c 00 00 push $0x4cb9
1a7f: 6a 01 push $0x1
1a81: e8 ca 1f 00 00 call 3a50 <printf>
exit();
1a86: e8 48 1e 00 00 call 38d3 <exit>
printf(1, "concreate not enough files in directory listing\n");
1a8b: 51 push %ecx
1a8c: 51 push %ecx
1a8d: 68 80 4f 00 00 push $0x4f80
1a92: 6a 01 push $0x1
1a94: e8 b7 1f 00 00 call 3a50 <printf>
exit();
1a99: e8 35 1e 00 00 call 38d3 <exit>
printf(1, "concreate duplicate file %s\n", de.name);
1a9e: 83 ec 04 sub $0x4,%esp
1aa1: 8d 45 b2 lea -0x4e(%ebp),%eax
1aa4: 50 push %eax
1aa5: 68 19 44 00 00 push $0x4419
1aaa: 6a 01 push $0x1
1aac: e8 9f 1f 00 00 call 3a50 <printf>
exit();
1ab1: e8 1d 1e 00 00 call 38d3 <exit>
printf(1, "concreate weird file %s\n", de.name);
1ab6: 83 ec 04 sub $0x4,%esp
1ab9: 8d 45 b2 lea -0x4e(%ebp),%eax
1abc: 50 push %eax
1abd: 68 00 44 00 00 push $0x4400
1ac2: 6a 01 push $0x1
1ac4: e8 87 1f 00 00 call 3a50 <printf>
exit();
1ac9: e8 05 1e 00 00 call 38d3 <exit>
close(fd);
1ace: 83 ec 0c sub $0xc,%esp
1ad1: 50 push %eax
1ad2: e8 94 1e 00 00 call 396b <close>
1ad7: 83 c4 10 add $0x10,%esp
1ada: e9 e2 fd ff ff jmp 18c1 <concreate+0xe1>
1adf: 90 nop
00001ae0 <linkunlink>:
void linkunlink() {
1ae0: 55 push %ebp
1ae1: 89 e5 mov %esp,%ebp
1ae3: 57 push %edi
1ae4: 56 push %esi
1ae5: 53 push %ebx
1ae6: 83 ec 24 sub $0x24,%esp
printf(1, "linkunlink test\n");
1ae9: 68 44 44 00 00 push $0x4444
1aee: 6a 01 push $0x1
1af0: e8 5b 1f 00 00 call 3a50 <printf>
unlink("x");
1af5: c7 04 24 d1 46 00 00 movl $0x46d1,(%esp)
1afc: e8 52 1e 00 00 call 3953 <unlink>
pid = fork();
1b01: e8 c5 1d 00 00 call 38cb <fork>
if (pid < 0) {
1b06: 83 c4 10 add $0x10,%esp
pid = fork();
1b09: 89 45 e4 mov %eax,-0x1c(%ebp)
if (pid < 0) {
1b0c: 85 c0 test %eax,%eax
1b0e: 0f 88 b6 00 00 00 js 1bca <linkunlink+0xea>
unsigned int x = (pid ? 1 : 97);
1b14: 83 7d e4 01 cmpl $0x1,-0x1c(%ebp)
1b18: bb 64 00 00 00 mov $0x64,%ebx
if ((x % 3) == 0) {
1b1d: be ab aa aa aa mov $0xaaaaaaab,%esi
unsigned int x = (pid ? 1 : 97);
1b22: 19 ff sbb %edi,%edi
1b24: 83 e7 60 and $0x60,%edi
1b27: 83 c7 01 add $0x1,%edi
1b2a: eb 1e jmp 1b4a <linkunlink+0x6a>
1b2c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
else if ((x % 3) == 1) {
1b30: 83 f8 01 cmp $0x1,%eax
1b33: 74 7b je 1bb0 <linkunlink+0xd0>
unlink("x");
1b35: 83 ec 0c sub $0xc,%esp
1b38: 68 d1 46 00 00 push $0x46d1
1b3d: e8 11 1e 00 00 call 3953 <unlink>
1b42: 83 c4 10 add $0x10,%esp
for (i = 0; i < 100; i++) {
1b45: 83 eb 01 sub $0x1,%ebx
1b48: 74 41 je 1b8b <linkunlink+0xab>
x = x * 1103515245 + 12345;
1b4a: 69 cf 6d 4e c6 41 imul $0x41c64e6d,%edi,%ecx
1b50: 8d b9 39 30 00 00 lea 0x3039(%ecx),%edi
if ((x % 3) == 0) {
1b56: 89 f8 mov %edi,%eax
1b58: f7 e6 mul %esi
1b5a: 89 d0 mov %edx,%eax
1b5c: 83 e2 fe and $0xfffffffe,%edx
1b5f: d1 e8 shr %eax
1b61: 01 c2 add %eax,%edx
1b63: 89 f8 mov %edi,%eax
1b65: 29 d0 sub %edx,%eax
1b67: 75 c7 jne 1b30 <linkunlink+0x50>
close(open("x", O_RDWR | O_CREATE));
1b69: 83 ec 08 sub $0x8,%esp
1b6c: 68 02 02 00 00 push $0x202
1b71: 68 d1 46 00 00 push $0x46d1
1b76: e8 c0 1d 00 00 call 393b <open>
1b7b: 89 04 24 mov %eax,(%esp)
1b7e: e8 e8 1d 00 00 call 396b <close>
1b83: 83 c4 10 add $0x10,%esp
for (i = 0; i < 100; i++) {
1b86: 83 eb 01 sub $0x1,%ebx
1b89: 75 bf jne 1b4a <linkunlink+0x6a>
if (pid) {
1b8b: 8b 45 e4 mov -0x1c(%ebp),%eax
1b8e: 85 c0 test %eax,%eax
1b90: 74 4b je 1bdd <linkunlink+0xfd>
wait();
1b92: e8 44 1d 00 00 call 38db <wait>
printf(1, "linkunlink ok\n");
1b97: 83 ec 08 sub $0x8,%esp
1b9a: 68 59 44 00 00 push $0x4459
1b9f: 6a 01 push $0x1
1ba1: e8 aa 1e 00 00 call 3a50 <printf>
}
1ba6: 8d 65 f4 lea -0xc(%ebp),%esp
1ba9: 5b pop %ebx
1baa: 5e pop %esi
1bab: 5f pop %edi
1bac: 5d pop %ebp
1bad: c3 ret
1bae: 66 90 xchg %ax,%ax
link("cat", "x");
1bb0: 83 ec 08 sub $0x8,%esp
1bb3: 68 d1 46 00 00 push $0x46d1
1bb8: 68 55 44 00 00 push $0x4455
1bbd: e8 99 1d 00 00 call 395b <link>
1bc2: 83 c4 10 add $0x10,%esp
1bc5: e9 7b ff ff ff jmp 1b45 <linkunlink+0x65>
printf(1, "fork failed\n");
1bca: 52 push %edx
1bcb: 52 push %edx
1bcc: 68 b9 4c 00 00 push $0x4cb9
1bd1: 6a 01 push $0x1
1bd3: e8 78 1e 00 00 call 3a50 <printf>
exit();
1bd8: e8 f6 1c 00 00 call 38d3 <exit>
exit();
1bdd: e8 f1 1c 00 00 call 38d3 <exit>
1be2: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
1be9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
00001bf0 <bigdir>:
void bigdir(void) {
1bf0: 55 push %ebp
1bf1: 89 e5 mov %esp,%ebp
1bf3: 57 push %edi
1bf4: 56 push %esi
1bf5: 53 push %ebx
1bf6: 83 ec 24 sub $0x24,%esp
printf(1, "bigdir test\n");
1bf9: 68 68 44 00 00 push $0x4468
1bfe: 6a 01 push $0x1
1c00: e8 4b 1e 00 00 call 3a50 <printf>
unlink("bd");
1c05: c7 04 24 75 44 00 00 movl $0x4475,(%esp)
1c0c: e8 42 1d 00 00 call 3953 <unlink>
fd = open("bd", O_CREATE);
1c11: 5a pop %edx
1c12: 59 pop %ecx
1c13: 68 00 02 00 00 push $0x200
1c18: 68 75 44 00 00 push $0x4475
1c1d: e8 19 1d 00 00 call 393b <open>
if (fd < 0) {
1c22: 83 c4 10 add $0x10,%esp
1c25: 85 c0 test %eax,%eax
1c27: 0f 88 de 00 00 00 js 1d0b <bigdir+0x11b>
close(fd);
1c2d: 83 ec 0c sub $0xc,%esp
for (i = 0; i < 500; i++) {
1c30: 31 f6 xor %esi,%esi
1c32: 8d 7d de lea -0x22(%ebp),%edi
close(fd);
1c35: 50 push %eax
1c36: e8 30 1d 00 00 call 396b <close>
1c3b: 83 c4 10 add $0x10,%esp
1c3e: 66 90 xchg %ax,%ax
name[1] = '0' + (i / 64);
1c40: 89 f0 mov %esi,%eax
if (link("bd", name) != 0) {
1c42: 83 ec 08 sub $0x8,%esp
name[0] = 'x';
1c45: c6 45 de 78 movb $0x78,-0x22(%ebp)
name[1] = '0' + (i / 64);
1c49: c1 f8 06 sar $0x6,%eax
if (link("bd", name) != 0) {
1c4c: 57 push %edi
name[1] = '0' + (i / 64);
1c4d: 83 c0 30 add $0x30,%eax
if (link("bd", name) != 0) {
1c50: 68 75 44 00 00 push $0x4475
name[1] = '0' + (i / 64);
1c55: 88 45 df mov %al,-0x21(%ebp)
name[2] = '0' + (i % 64);
1c58: 89 f0 mov %esi,%eax
1c5a: 83 e0 3f and $0x3f,%eax
name[3] = '\0';
1c5d: c6 45 e1 00 movb $0x0,-0x1f(%ebp)
name[2] = '0' + (i % 64);
1c61: 83 c0 30 add $0x30,%eax
1c64: 88 45 e0 mov %al,-0x20(%ebp)
if (link("bd", name) != 0) {
1c67: e8 ef 1c 00 00 call 395b <link>
1c6c: 83 c4 10 add $0x10,%esp
1c6f: 89 c3 mov %eax,%ebx
1c71: 85 c0 test %eax,%eax
1c73: 75 6e jne 1ce3 <bigdir+0xf3>
for (i = 0; i < 500; i++) {
1c75: 83 c6 01 add $0x1,%esi
1c78: 81 fe f4 01 00 00 cmp $0x1f4,%esi
1c7e: 75 c0 jne 1c40 <bigdir+0x50>
unlink("bd");
1c80: 83 ec 0c sub $0xc,%esp
1c83: 68 75 44 00 00 push $0x4475
1c88: e8 c6 1c 00 00 call 3953 <unlink>
1c8d: 83 c4 10 add $0x10,%esp
name[1] = '0' + (i / 64);
1c90: 89 d8 mov %ebx,%eax
if (unlink(name) != 0) {
1c92: 83 ec 0c sub $0xc,%esp
name[0] = 'x';
1c95: c6 45 de 78 movb $0x78,-0x22(%ebp)
name[1] = '0' + (i / 64);
1c99: c1 f8 06 sar $0x6,%eax
if (unlink(name) != 0) {
1c9c: 57 push %edi
name[1] = '0' + (i / 64);
1c9d: 83 c0 30 add $0x30,%eax
name[3] = '\0';
1ca0: c6 45 e1 00 movb $0x0,-0x1f(%ebp)
name[1] = '0' + (i / 64);
1ca4: 88 45 df mov %al,-0x21(%ebp)
name[2] = '0' + (i % 64);
1ca7: 89 d8 mov %ebx,%eax
1ca9: 83 e0 3f and $0x3f,%eax
1cac: 83 c0 30 add $0x30,%eax
1caf: 88 45 e0 mov %al,-0x20(%ebp)
if (unlink(name) != 0) {
1cb2: e8 9c 1c 00 00 call 3953 <unlink>
1cb7: 83 c4 10 add $0x10,%esp
1cba: 85 c0 test %eax,%eax
1cbc: 75 39 jne 1cf7 <bigdir+0x107>
for (i = 0; i < 500; i++) {
1cbe: 83 c3 01 add $0x1,%ebx
1cc1: 81 fb f4 01 00 00 cmp $0x1f4,%ebx
1cc7: 75 c7 jne 1c90 <bigdir+0xa0>
printf(1, "bigdir ok\n");
1cc9: 83 ec 08 sub $0x8,%esp
1ccc: 68 b7 44 00 00 push $0x44b7
1cd1: 6a 01 push $0x1
1cd3: e8 78 1d 00 00 call 3a50 <printf>
1cd8: 83 c4 10 add $0x10,%esp
}
1cdb: 8d 65 f4 lea -0xc(%ebp),%esp
1cde: 5b pop %ebx
1cdf: 5e pop %esi
1ce0: 5f pop %edi
1ce1: 5d pop %ebp
1ce2: c3 ret
printf(1, "bigdir link failed\n");
1ce3: 83 ec 08 sub $0x8,%esp
1ce6: 68 8e 44 00 00 push $0x448e
1ceb: 6a 01 push $0x1
1ced: e8 5e 1d 00 00 call 3a50 <printf>
exit();
1cf2: e8 dc 1b 00 00 call 38d3 <exit>
printf(1, "bigdir unlink failed");
1cf7: 83 ec 08 sub $0x8,%esp
1cfa: 68 a2 44 00 00 push $0x44a2
1cff: 6a 01 push $0x1
1d01: e8 4a 1d 00 00 call 3a50 <printf>
exit();
1d06: e8 c8 1b 00 00 call 38d3 <exit>
printf(1, "bigdir create failed\n");
1d0b: 50 push %eax
1d0c: 50 push %eax
1d0d: 68 78 44 00 00 push $0x4478
1d12: 6a 01 push $0x1
1d14: e8 37 1d 00 00 call 3a50 <printf>
exit();
1d19: e8 b5 1b 00 00 call 38d3 <exit>
1d1e: 66 90 xchg %ax,%ax
00001d20 <subdir>:
void subdir(void) {
1d20: 55 push %ebp
1d21: 89 e5 mov %esp,%ebp
1d23: 53 push %ebx
1d24: 83 ec 0c sub $0xc,%esp
printf(1, "subdir test\n");
1d27: 68 c2 44 00 00 push $0x44c2
1d2c: 6a 01 push $0x1
1d2e: e8 1d 1d 00 00 call 3a50 <printf>
unlink("ff");
1d33: c7 04 24 4b 45 00 00 movl $0x454b,(%esp)
1d3a: e8 14 1c 00 00 call 3953 <unlink>
if (mkdir("dd") != 0) {
1d3f: c7 04 24 e8 45 00 00 movl $0x45e8,(%esp)
1d46: e8 18 1c 00 00 call 3963 <mkdir>
1d4b: 83 c4 10 add $0x10,%esp
1d4e: 85 c0 test %eax,%eax
1d50: 0f 85 b3 05 00 00 jne 2309 <subdir+0x5e9>
fd = open("dd/ff", O_CREATE | O_RDWR);
1d56: 83 ec 08 sub $0x8,%esp
1d59: 68 02 02 00 00 push $0x202
1d5e: 68 21 45 00 00 push $0x4521
1d63: e8 d3 1b 00 00 call 393b <open>
if (fd < 0) {
1d68: 83 c4 10 add $0x10,%esp
fd = open("dd/ff", O_CREATE | O_RDWR);
1d6b: 89 c3 mov %eax,%ebx
if (fd < 0) {
1d6d: 85 c0 test %eax,%eax
1d6f: 0f 88 81 05 00 00 js 22f6 <subdir+0x5d6>
write(fd, "ff", 2);
1d75: 83 ec 04 sub $0x4,%esp
1d78: 6a 02 push $0x2
1d7a: 68 4b 45 00 00 push $0x454b
1d7f: 50 push %eax
1d80: e8 be 1b 00 00 call 3943 <write>
close(fd);
1d85: 89 1c 24 mov %ebx,(%esp)
1d88: e8 de 1b 00 00 call 396b <close>
if (unlink("dd") >= 0) {
1d8d: c7 04 24 e8 45 00 00 movl $0x45e8,(%esp)
1d94: e8 ba 1b 00 00 call 3953 <unlink>
1d99: 83 c4 10 add $0x10,%esp
1d9c: 85 c0 test %eax,%eax
1d9e: 0f 89 3f 05 00 00 jns 22e3 <subdir+0x5c3>
if (mkdir("/dd/dd") != 0) {
1da4: 83 ec 0c sub $0xc,%esp
1da7: 68 fc 44 00 00 push $0x44fc
1dac: e8 b2 1b 00 00 call 3963 <mkdir>
1db1: 83 c4 10 add $0x10,%esp
1db4: 85 c0 test %eax,%eax
1db6: 0f 85 14 05 00 00 jne 22d0 <subdir+0x5b0>
fd = open("dd/dd/ff", O_CREATE | O_RDWR);
1dbc: 83 ec 08 sub $0x8,%esp
1dbf: 68 02 02 00 00 push $0x202
1dc4: 68 1e 45 00 00 push $0x451e
1dc9: e8 6d 1b 00 00 call 393b <open>
if (fd < 0) {
1dce: 83 c4 10 add $0x10,%esp
fd = open("dd/dd/ff", O_CREATE | O_RDWR);
1dd1: 89 c3 mov %eax,%ebx
if (fd < 0) {
1dd3: 85 c0 test %eax,%eax
1dd5: 0f 88 24 04 00 00 js 21ff <subdir+0x4df>
write(fd, "FF", 2);
1ddb: 83 ec 04 sub $0x4,%esp
1dde: 6a 02 push $0x2
1de0: 68 3f 45 00 00 push $0x453f
1de5: 50 push %eax
1de6: e8 58 1b 00 00 call 3943 <write>
close(fd);
1deb: 89 1c 24 mov %ebx,(%esp)
1dee: e8 78 1b 00 00 call 396b <close>
fd = open("dd/dd/../ff", 0);
1df3: 58 pop %eax
1df4: 5a pop %edx
1df5: 6a 00 push $0x0
1df7: 68 42 45 00 00 push $0x4542
1dfc: e8 3a 1b 00 00 call 393b <open>
if (fd < 0) {
1e01: 83 c4 10 add $0x10,%esp
fd = open("dd/dd/../ff", 0);
1e04: 89 c3 mov %eax,%ebx
if (fd < 0) {
1e06: 85 c0 test %eax,%eax
1e08: 0f 88 de 03 00 00 js 21ec <subdir+0x4cc>
cc = read(fd, buf, sizeof(buf));
1e0e: 83 ec 04 sub $0x4,%esp
1e11: 68 00 20 00 00 push $0x2000
1e16: 68 a0 85 00 00 push $0x85a0
1e1b: 50 push %eax
1e1c: e8 ca 1a 00 00 call 38eb <read>
if (cc != 2 || buf[0] != 'f') {
1e21: 83 c4 10 add $0x10,%esp
1e24: 83 f8 02 cmp $0x2,%eax
1e27: 0f 85 3a 03 00 00 jne 2167 <subdir+0x447>
1e2d: 80 3d a0 85 00 00 66 cmpb $0x66,0x85a0
1e34: 0f 85 2d 03 00 00 jne 2167 <subdir+0x447>
close(fd);
1e3a: 83 ec 0c sub $0xc,%esp
1e3d: 53 push %ebx
1e3e: e8 28 1b 00 00 call 396b <close>
if (link("dd/dd/ff", "dd/dd/ffff") != 0) {
1e43: 59 pop %ecx
1e44: 5b pop %ebx
1e45: 68 82 45 00 00 push $0x4582
1e4a: 68 1e 45 00 00 push $0x451e
1e4f: e8 07 1b 00 00 call 395b <link>
1e54: 83 c4 10 add $0x10,%esp
1e57: 85 c0 test %eax,%eax
1e59: 0f 85 c6 03 00 00 jne 2225 <subdir+0x505>
if (unlink("dd/dd/ff") != 0) {
1e5f: 83 ec 0c sub $0xc,%esp
1e62: 68 1e 45 00 00 push $0x451e
1e67: e8 e7 1a 00 00 call 3953 <unlink>
1e6c: 83 c4 10 add $0x10,%esp
1e6f: 85 c0 test %eax,%eax
1e71: 0f 85 16 03 00 00 jne 218d <subdir+0x46d>
if (open("dd/dd/ff", O_RDONLY) >= 0) {
1e77: 83 ec 08 sub $0x8,%esp
1e7a: 6a 00 push $0x0
1e7c: 68 1e 45 00 00 push $0x451e
1e81: e8 b5 1a 00 00 call 393b <open>
1e86: 83 c4 10 add $0x10,%esp
1e89: 85 c0 test %eax,%eax
1e8b: 0f 89 2c 04 00 00 jns 22bd <subdir+0x59d>
if (chdir("dd") != 0) {
1e91: 83 ec 0c sub $0xc,%esp
1e94: 68 e8 45 00 00 push $0x45e8
1e99: e8 6d 1a 00 00 call 390b <chdir>
1e9e: 83 c4 10 add $0x10,%esp
1ea1: 85 c0 test %eax,%eax
1ea3: 0f 85 01 04 00 00 jne 22aa <subdir+0x58a>
if (chdir("dd/../../dd") != 0) {
1ea9: 83 ec 0c sub $0xc,%esp
1eac: 68 b6 45 00 00 push $0x45b6
1eb1: e8 55 1a 00 00 call 390b <chdir>
1eb6: 83 c4 10 add $0x10,%esp
1eb9: 85 c0 test %eax,%eax
1ebb: 0f 85 b9 02 00 00 jne 217a <subdir+0x45a>
if (chdir("dd/../../../dd") != 0) {
1ec1: 83 ec 0c sub $0xc,%esp
1ec4: 68 dc 45 00 00 push $0x45dc
1ec9: e8 3d 1a 00 00 call 390b <chdir>
1ece: 83 c4 10 add $0x10,%esp
1ed1: 85 c0 test %eax,%eax
1ed3: 0f 85 a1 02 00 00 jne 217a <subdir+0x45a>
if (chdir("./..") != 0) {
1ed9: 83 ec 0c sub $0xc,%esp
1edc: 68 eb 45 00 00 push $0x45eb
1ee1: e8 25 1a 00 00 call 390b <chdir>
1ee6: 83 c4 10 add $0x10,%esp
1ee9: 85 c0 test %eax,%eax
1eeb: 0f 85 21 03 00 00 jne 2212 <subdir+0x4f2>
fd = open("dd/dd/ffff", 0);
1ef1: 83 ec 08 sub $0x8,%esp
1ef4: 6a 00 push $0x0
1ef6: 68 82 45 00 00 push $0x4582
1efb: e8 3b 1a 00 00 call 393b <open>
if (fd < 0) {
1f00: 83 c4 10 add $0x10,%esp
fd = open("dd/dd/ffff", 0);
1f03: 89 c3 mov %eax,%ebx
if (fd < 0) {
1f05: 85 c0 test %eax,%eax
1f07: 0f 88 e0 04 00 00 js 23ed <subdir+0x6cd>
if (read(fd, buf, sizeof(buf)) != 2) {
1f0d: 83 ec 04 sub $0x4,%esp
1f10: 68 00 20 00 00 push $0x2000
1f15: 68 a0 85 00 00 push $0x85a0
1f1a: 50 push %eax
1f1b: e8 cb 19 00 00 call 38eb <read>
1f20: 83 c4 10 add $0x10,%esp
1f23: 83 f8 02 cmp $0x2,%eax
1f26: 0f 85 ae 04 00 00 jne 23da <subdir+0x6ba>
close(fd);
1f2c: 83 ec 0c sub $0xc,%esp
1f2f: 53 push %ebx
1f30: e8 36 1a 00 00 call 396b <close>
if (open("dd/dd/ff", O_RDONLY) >= 0) {
1f35: 58 pop %eax
1f36: 5a pop %edx
1f37: 6a 00 push $0x0
1f39: 68 1e 45 00 00 push $0x451e
1f3e: e8 f8 19 00 00 call 393b <open>
1f43: 83 c4 10 add $0x10,%esp
1f46: 85 c0 test %eax,%eax
1f48: 0f 89 65 02 00 00 jns 21b3 <subdir+0x493>
if (open("dd/ff/ff", O_CREATE | O_RDWR) >= 0) {
1f4e: 83 ec 08 sub $0x8,%esp
1f51: 68 02 02 00 00 push $0x202
1f56: 68 36 46 00 00 push $0x4636
1f5b: e8 db 19 00 00 call 393b <open>
1f60: 83 c4 10 add $0x10,%esp
1f63: 85 c0 test %eax,%eax
1f65: 0f 89 35 02 00 00 jns 21a0 <subdir+0x480>
if (open("dd/xx/ff", O_CREATE | O_RDWR) >= 0) {
1f6b: 83 ec 08 sub $0x8,%esp
1f6e: 68 02 02 00 00 push $0x202
1f73: 68 5b 46 00 00 push $0x465b
1f78: e8 be 19 00 00 call 393b <open>
1f7d: 83 c4 10 add $0x10,%esp
1f80: 85 c0 test %eax,%eax
1f82: 0f 89 0f 03 00 00 jns 2297 <subdir+0x577>
if (open("dd", O_CREATE) >= 0) {
1f88: 83 ec 08 sub $0x8,%esp
1f8b: 68 00 02 00 00 push $0x200
1f90: 68 e8 45 00 00 push $0x45e8
1f95: e8 a1 19 00 00 call 393b <open>
1f9a: 83 c4 10 add $0x10,%esp
1f9d: 85 c0 test %eax,%eax
1f9f: 0f 89 df 02 00 00 jns 2284 <subdir+0x564>
if (open("dd", O_RDWR) >= 0) {
1fa5: 83 ec 08 sub $0x8,%esp
1fa8: 6a 02 push $0x2
1faa: 68 e8 45 00 00 push $0x45e8
1faf: e8 87 19 00 00 call 393b <open>
1fb4: 83 c4 10 add $0x10,%esp
1fb7: 85 c0 test %eax,%eax
1fb9: 0f 89 b2 02 00 00 jns 2271 <subdir+0x551>
if (open("dd", O_WRONLY) >= 0) {
1fbf: 83 ec 08 sub $0x8,%esp
1fc2: 6a 01 push $0x1
1fc4: 68 e8 45 00 00 push $0x45e8
1fc9: e8 6d 19 00 00 call 393b <open>
1fce: 83 c4 10 add $0x10,%esp
1fd1: 85 c0 test %eax,%eax
1fd3: 0f 89 85 02 00 00 jns 225e <subdir+0x53e>
if (link("dd/ff/ff", "dd/dd/xx") == 0) {
1fd9: 83 ec 08 sub $0x8,%esp
1fdc: 68 ca 46 00 00 push $0x46ca
1fe1: 68 36 46 00 00 push $0x4636
1fe6: e8 70 19 00 00 call 395b <link>
1feb: 83 c4 10 add $0x10,%esp
1fee: 85 c0 test %eax,%eax
1ff0: 0f 84 55 02 00 00 je 224b <subdir+0x52b>
if (link("dd/xx/ff", "dd/dd/xx") == 0) {
1ff6: 83 ec 08 sub $0x8,%esp
1ff9: 68 ca 46 00 00 push $0x46ca
1ffe: 68 5b 46 00 00 push $0x465b
2003: e8 53 19 00 00 call 395b <link>
2008: 83 c4 10 add $0x10,%esp
200b: 85 c0 test %eax,%eax
200d: 0f 84 25 02 00 00 je 2238 <subdir+0x518>
if (link("dd/ff", "dd/dd/ffff") == 0) {
2013: 83 ec 08 sub $0x8,%esp
2016: 68 82 45 00 00 push $0x4582
201b: 68 21 45 00 00 push $0x4521
2020: e8 36 19 00 00 call 395b <link>
2025: 83 c4 10 add $0x10,%esp
2028: 85 c0 test %eax,%eax
202a: 0f 84 a9 01 00 00 je 21d9 <subdir+0x4b9>
if (mkdir("dd/ff/ff") == 0) {
2030: 83 ec 0c sub $0xc,%esp
2033: 68 36 46 00 00 push $0x4636
2038: e8 26 19 00 00 call 3963 <mkdir>
203d: 83 c4 10 add $0x10,%esp
2040: 85 c0 test %eax,%eax
2042: 0f 84 7e 01 00 00 je 21c6 <subdir+0x4a6>
if (mkdir("dd/xx/ff") == 0) {
2048: 83 ec 0c sub $0xc,%esp
204b: 68 5b 46 00 00 push $0x465b
2050: e8 0e 19 00 00 call 3963 <mkdir>
2055: 83 c4 10 add $0x10,%esp
2058: 85 c0 test %eax,%eax
205a: 0f 84 67 03 00 00 je 23c7 <subdir+0x6a7>
if (mkdir("dd/dd/ffff") == 0) {
2060: 83 ec 0c sub $0xc,%esp
2063: 68 82 45 00 00 push $0x4582
2068: e8 f6 18 00 00 call 3963 <mkdir>
206d: 83 c4 10 add $0x10,%esp
2070: 85 c0 test %eax,%eax
2072: 0f 84 3c 03 00 00 je 23b4 <subdir+0x694>
if (unlink("dd/xx/ff") == 0) {
2078: 83 ec 0c sub $0xc,%esp
207b: 68 5b 46 00 00 push $0x465b
2080: e8 ce 18 00 00 call 3953 <unlink>
2085: 83 c4 10 add $0x10,%esp
2088: 85 c0 test %eax,%eax
208a: 0f 84 11 03 00 00 je 23a1 <subdir+0x681>
if (unlink("dd/ff/ff") == 0) {
2090: 83 ec 0c sub $0xc,%esp
2093: 68 36 46 00 00 push $0x4636
2098: e8 b6 18 00 00 call 3953 <unlink>
209d: 83 c4 10 add $0x10,%esp
20a0: 85 c0 test %eax,%eax
20a2: 0f 84 e6 02 00 00 je 238e <subdir+0x66e>
if (chdir("dd/ff") == 0) {
20a8: 83 ec 0c sub $0xc,%esp
20ab: 68 21 45 00 00 push $0x4521
20b0: e8 56 18 00 00 call 390b <chdir>
20b5: 83 c4 10 add $0x10,%esp
20b8: 85 c0 test %eax,%eax
20ba: 0f 84 bb 02 00 00 je 237b <subdir+0x65b>
if (chdir("dd/xx") == 0) {
20c0: 83 ec 0c sub $0xc,%esp
20c3: 68 cd 46 00 00 push $0x46cd
20c8: e8 3e 18 00 00 call 390b <chdir>
20cd: 83 c4 10 add $0x10,%esp
20d0: 85 c0 test %eax,%eax
20d2: 0f 84 90 02 00 00 je 2368 <subdir+0x648>
if (unlink("dd/dd/ffff") != 0) {
20d8: 83 ec 0c sub $0xc,%esp
20db: 68 82 45 00 00 push $0x4582
20e0: e8 6e 18 00 00 call 3953 <unlink>
20e5: 83 c4 10 add $0x10,%esp
20e8: 85 c0 test %eax,%eax
20ea: 0f 85 9d 00 00 00 jne 218d <subdir+0x46d>
if (unlink("dd/ff") != 0) {
20f0: 83 ec 0c sub $0xc,%esp
20f3: 68 21 45 00 00 push $0x4521
20f8: e8 56 18 00 00 call 3953 <unlink>
20fd: 83 c4 10 add $0x10,%esp
2100: 85 c0 test %eax,%eax
2102: 0f 85 4d 02 00 00 jne 2355 <subdir+0x635>
if (unlink("dd") == 0) {
2108: 83 ec 0c sub $0xc,%esp
210b: 68 e8 45 00 00 push $0x45e8
2110: e8 3e 18 00 00 call 3953 <unlink>
2115: 83 c4 10 add $0x10,%esp
2118: 85 c0 test %eax,%eax
211a: 0f 84 22 02 00 00 je 2342 <subdir+0x622>
if (unlink("dd/dd") < 0) {
2120: 83 ec 0c sub $0xc,%esp
2123: 68 fd 44 00 00 push $0x44fd
2128: e8 26 18 00 00 call 3953 <unlink>
212d: 83 c4 10 add $0x10,%esp
2130: 85 c0 test %eax,%eax
2132: 0f 88 f7 01 00 00 js 232f <subdir+0x60f>
if (unlink("dd") < 0) {
2138: 83 ec 0c sub $0xc,%esp
213b: 68 e8 45 00 00 push $0x45e8
2140: e8 0e 18 00 00 call 3953 <unlink>
2145: 83 c4 10 add $0x10,%esp
2148: 85 c0 test %eax,%eax
214a: 0f 88 cc 01 00 00 js 231c <subdir+0x5fc>
printf(1, "subdir ok\n");
2150: 83 ec 08 sub $0x8,%esp
2153: 68 ca 47 00 00 push $0x47ca
2158: 6a 01 push $0x1
215a: e8 f1 18 00 00 call 3a50 <printf>
}
215f: 8b 5d fc mov -0x4(%ebp),%ebx
2162: 83 c4 10 add $0x10,%esp
2165: c9 leave
2166: c3 ret
printf(1, "dd/dd/../ff wrong content\n");
2167: 50 push %eax
2168: 50 push %eax
2169: 68 67 45 00 00 push $0x4567
216e: 6a 01 push $0x1
2170: e8 db 18 00 00 call 3a50 <printf>
exit();
2175: e8 59 17 00 00 call 38d3 <exit>
printf(1, "chdir dd/../../dd failed\n");
217a: 50 push %eax
217b: 50 push %eax
217c: 68 c2 45 00 00 push $0x45c2
2181: 6a 01 push $0x1
2183: e8 c8 18 00 00 call 3a50 <printf>
exit();
2188: e8 46 17 00 00 call 38d3 <exit>
printf(1, "unlink dd/dd/ff failed\n");
218d: 50 push %eax
218e: 50 push %eax
218f: 68 8d 45 00 00 push $0x458d
2194: 6a 01 push $0x1
2196: e8 b5 18 00 00 call 3a50 <printf>
exit();
219b: e8 33 17 00 00 call 38d3 <exit>
printf(1, "create dd/ff/ff succeeded!\n");
21a0: 51 push %ecx
21a1: 51 push %ecx
21a2: 68 3f 46 00 00 push $0x463f
21a7: 6a 01 push $0x1
21a9: e8 a2 18 00 00 call 3a50 <printf>
exit();
21ae: e8 20 17 00 00 call 38d3 <exit>
printf(1, "open (unlinked) dd/dd/ff succeeded!\n");
21b3: 53 push %ebx
21b4: 53 push %ebx
21b5: 68 24 50 00 00 push $0x5024
21ba: 6a 01 push $0x1
21bc: e8 8f 18 00 00 call 3a50 <printf>
exit();
21c1: e8 0d 17 00 00 call 38d3 <exit>
printf(1, "mkdir dd/ff/ff succeeded!\n");
21c6: 51 push %ecx
21c7: 51 push %ecx
21c8: 68 d3 46 00 00 push $0x46d3
21cd: 6a 01 push $0x1
21cf: e8 7c 18 00 00 call 3a50 <printf>
exit();
21d4: e8 fa 16 00 00 call 38d3 <exit>
printf(1, "link dd/ff dd/dd/ffff succeeded!\n");
21d9: 53 push %ebx
21da: 53 push %ebx
21db: 68 94 50 00 00 push $0x5094
21e0: 6a 01 push $0x1
21e2: e8 69 18 00 00 call 3a50 <printf>
exit();
21e7: e8 e7 16 00 00 call 38d3 <exit>
printf(1, "open dd/dd/../ff failed\n");
21ec: 50 push %eax
21ed: 50 push %eax
21ee: 68 4e 45 00 00 push $0x454e
21f3: 6a 01 push $0x1
21f5: e8 56 18 00 00 call 3a50 <printf>
exit();
21fa: e8 d4 16 00 00 call 38d3 <exit>
printf(1, "create dd/dd/ff failed\n");
21ff: 51 push %ecx
2200: 51 push %ecx
2201: 68 27 45 00 00 push $0x4527
2206: 6a 01 push $0x1
2208: e8 43 18 00 00 call 3a50 <printf>
exit();
220d: e8 c1 16 00 00 call 38d3 <exit>
printf(1, "chdir ./.. failed\n");
2212: 50 push %eax
2213: 50 push %eax
2214: 68 f0 45 00 00 push $0x45f0
2219: 6a 01 push $0x1
221b: e8 30 18 00 00 call 3a50 <printf>
exit();
2220: e8 ae 16 00 00 call 38d3 <exit>
printf(1, "link dd/dd/ff dd/dd/ffff failed\n");
2225: 52 push %edx
2226: 52 push %edx
2227: 68 dc 4f 00 00 push $0x4fdc
222c: 6a 01 push $0x1
222e: e8 1d 18 00 00 call 3a50 <printf>
exit();
2233: e8 9b 16 00 00 call 38d3 <exit>
printf(1, "link dd/xx/ff dd/dd/xx succeeded!\n");
2238: 50 push %eax
2239: 50 push %eax
223a: 68 70 50 00 00 push $0x5070
223f: 6a 01 push $0x1
2241: e8 0a 18 00 00 call 3a50 <printf>
exit();
2246: e8 88 16 00 00 call 38d3 <exit>
printf(1, "link dd/ff/ff dd/dd/xx succeeded!\n");
224b: 50 push %eax
224c: 50 push %eax
224d: 68 4c 50 00 00 push $0x504c
2252: 6a 01 push $0x1
2254: e8 f7 17 00 00 call 3a50 <printf>
exit();
2259: e8 75 16 00 00 call 38d3 <exit>
printf(1, "open dd wronly succeeded!\n");
225e: 50 push %eax
225f: 50 push %eax
2260: 68 af 46 00 00 push $0x46af
2265: 6a 01 push $0x1
2267: e8 e4 17 00 00 call 3a50 <printf>
exit();
226c: e8 62 16 00 00 call 38d3 <exit>
printf(1, "open dd rdwr succeeded!\n");
2271: 50 push %eax
2272: 50 push %eax
2273: 68 96 46 00 00 push $0x4696
2278: 6a 01 push $0x1
227a: e8 d1 17 00 00 call 3a50 <printf>
exit();
227f: e8 4f 16 00 00 call 38d3 <exit>
printf(1, "create dd succeeded!\n");
2284: 50 push %eax
2285: 50 push %eax
2286: 68 80 46 00 00 push $0x4680
228b: 6a 01 push $0x1
228d: e8 be 17 00 00 call 3a50 <printf>
exit();
2292: e8 3c 16 00 00 call 38d3 <exit>
printf(1, "create dd/xx/ff succeeded!\n");
2297: 52 push %edx
2298: 52 push %edx
2299: 68 64 46 00 00 push $0x4664
229e: 6a 01 push $0x1
22a0: e8 ab 17 00 00 call 3a50 <printf>
exit();
22a5: e8 29 16 00 00 call 38d3 <exit>
printf(1, "chdir dd failed\n");
22aa: 50 push %eax
22ab: 50 push %eax
22ac: 68 a5 45 00 00 push $0x45a5
22b1: 6a 01 push $0x1
22b3: e8 98 17 00 00 call 3a50 <printf>
exit();
22b8: e8 16 16 00 00 call 38d3 <exit>
printf(1, "open (unlinked) dd/dd/ff succeeded\n");
22bd: 50 push %eax
22be: 50 push %eax
22bf: 68 00 50 00 00 push $0x5000
22c4: 6a 01 push $0x1
22c6: e8 85 17 00 00 call 3a50 <printf>
exit();
22cb: e8 03 16 00 00 call 38d3 <exit>
printf(1, "subdir mkdir dd/dd failed\n");
22d0: 53 push %ebx
22d1: 53 push %ebx
22d2: 68 03 45 00 00 push $0x4503
22d7: 6a 01 push $0x1
22d9: e8 72 17 00 00 call 3a50 <printf>
exit();
22de: e8 f0 15 00 00 call 38d3 <exit>
printf(1, "unlink dd (non-empty dir) succeeded!\n");
22e3: 50 push %eax
22e4: 50 push %eax
22e5: 68 b4 4f 00 00 push $0x4fb4
22ea: 6a 01 push $0x1
22ec: e8 5f 17 00 00 call 3a50 <printf>
exit();
22f1: e8 dd 15 00 00 call 38d3 <exit>
printf(1, "create dd/ff failed\n");
22f6: 50 push %eax
22f7: 50 push %eax
22f8: 68 e7 44 00 00 push $0x44e7
22fd: 6a 01 push $0x1
22ff: e8 4c 17 00 00 call 3a50 <printf>
exit();
2304: e8 ca 15 00 00 call 38d3 <exit>
printf(1, "subdir mkdir dd failed\n");
2309: 50 push %eax
230a: 50 push %eax
230b: 68 cf 44 00 00 push $0x44cf
2310: 6a 01 push $0x1
2312: e8 39 17 00 00 call 3a50 <printf>
exit();
2317: e8 b7 15 00 00 call 38d3 <exit>
printf(1, "unlink dd failed\n");
231c: 50 push %eax
231d: 50 push %eax
231e: 68 b8 47 00 00 push $0x47b8
2323: 6a 01 push $0x1
2325: e8 26 17 00 00 call 3a50 <printf>
exit();
232a: e8 a4 15 00 00 call 38d3 <exit>
printf(1, "unlink dd/dd failed\n");
232f: 52 push %edx
2330: 52 push %edx
2331: 68 a3 47 00 00 push $0x47a3
2336: 6a 01 push $0x1
2338: e8 13 17 00 00 call 3a50 <printf>
exit();
233d: e8 91 15 00 00 call 38d3 <exit>
printf(1, "unlink non-empty dd succeeded!\n");
2342: 51 push %ecx
2343: 51 push %ecx
2344: 68 b8 50 00 00 push $0x50b8
2349: 6a 01 push $0x1
234b: e8 00 17 00 00 call 3a50 <printf>
exit();
2350: e8 7e 15 00 00 call 38d3 <exit>
printf(1, "unlink dd/ff failed\n");
2355: 53 push %ebx
2356: 53 push %ebx
2357: 68 8e 47 00 00 push $0x478e
235c: 6a 01 push $0x1
235e: e8 ed 16 00 00 call 3a50 <printf>
exit();
2363: e8 6b 15 00 00 call 38d3 <exit>
printf(1, "chdir dd/xx succeeded!\n");
2368: 50 push %eax
2369: 50 push %eax
236a: 68 76 47 00 00 push $0x4776
236f: 6a 01 push $0x1
2371: e8 da 16 00 00 call 3a50 <printf>
exit();
2376: e8 58 15 00 00 call 38d3 <exit>
printf(1, "chdir dd/ff succeeded!\n");
237b: 50 push %eax
237c: 50 push %eax
237d: 68 5e 47 00 00 push $0x475e
2382: 6a 01 push $0x1
2384: e8 c7 16 00 00 call 3a50 <printf>
exit();
2389: e8 45 15 00 00 call 38d3 <exit>
printf(1, "unlink dd/ff/ff succeeded!\n");
238e: 50 push %eax
238f: 50 push %eax
2390: 68 42 47 00 00 push $0x4742
2395: 6a 01 push $0x1
2397: e8 b4 16 00 00 call 3a50 <printf>
exit();
239c: e8 32 15 00 00 call 38d3 <exit>
printf(1, "unlink dd/xx/ff succeeded!\n");
23a1: 50 push %eax
23a2: 50 push %eax
23a3: 68 26 47 00 00 push $0x4726
23a8: 6a 01 push $0x1
23aa: e8 a1 16 00 00 call 3a50 <printf>
exit();
23af: e8 1f 15 00 00 call 38d3 <exit>
printf(1, "mkdir dd/dd/ffff succeeded!\n");
23b4: 50 push %eax
23b5: 50 push %eax
23b6: 68 09 47 00 00 push $0x4709
23bb: 6a 01 push $0x1
23bd: e8 8e 16 00 00 call 3a50 <printf>
exit();
23c2: e8 0c 15 00 00 call 38d3 <exit>
printf(1, "mkdir dd/xx/ff succeeded!\n");
23c7: 52 push %edx
23c8: 52 push %edx
23c9: 68 ee 46 00 00 push $0x46ee
23ce: 6a 01 push $0x1
23d0: e8 7b 16 00 00 call 3a50 <printf>
exit();
23d5: e8 f9 14 00 00 call 38d3 <exit>
printf(1, "read dd/dd/ffff wrong len\n");
23da: 51 push %ecx
23db: 51 push %ecx
23dc: 68 1b 46 00 00 push $0x461b
23e1: 6a 01 push $0x1
23e3: e8 68 16 00 00 call 3a50 <printf>
exit();
23e8: e8 e6 14 00 00 call 38d3 <exit>
printf(1, "open dd/dd/ffff failed\n");
23ed: 53 push %ebx
23ee: 53 push %ebx
23ef: 68 03 46 00 00 push $0x4603
23f4: 6a 01 push $0x1
23f6: e8 55 16 00 00 call 3a50 <printf>
exit();
23fb: e8 d3 14 00 00 call 38d3 <exit>
00002400 <bigwrite>:
void bigwrite(void) {
2400: 55 push %ebp
2401: 89 e5 mov %esp,%ebp
2403: 56 push %esi
2404: 53 push %ebx
for (sz = 499; sz < 12 * 512; sz += 471) {
2405: bb f3 01 00 00 mov $0x1f3,%ebx
printf(1, "bigwrite test\n");
240a: 83 ec 08 sub $0x8,%esp
240d: 68 d5 47 00 00 push $0x47d5
2412: 6a 01 push $0x1
2414: e8 37 16 00 00 call 3a50 <printf>
unlink("bigwrite");
2419: c7 04 24 e4 47 00 00 movl $0x47e4,(%esp)
2420: e8 2e 15 00 00 call 3953 <unlink>
2425: 83 c4 10 add $0x10,%esp
2428: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
242f: 90 nop
fd = open("bigwrite", O_CREATE | O_RDWR);
2430: 83 ec 08 sub $0x8,%esp
2433: 68 02 02 00 00 push $0x202
2438: 68 e4 47 00 00 push $0x47e4
243d: e8 f9 14 00 00 call 393b <open>
if (fd < 0) {
2442: 83 c4 10 add $0x10,%esp
fd = open("bigwrite", O_CREATE | O_RDWR);
2445: 89 c6 mov %eax,%esi
if (fd < 0) {
2447: 85 c0 test %eax,%eax
2449: 78 7e js 24c9 <bigwrite+0xc9>
int cc = write(fd, buf, sz);
244b: 83 ec 04 sub $0x4,%esp
244e: 53 push %ebx
244f: 68 a0 85 00 00 push $0x85a0
2454: 50 push %eax
2455: e8 e9 14 00 00 call 3943 <write>
if (cc != sz) {
245a: 83 c4 10 add $0x10,%esp
245d: 39 d8 cmp %ebx,%eax
245f: 75 55 jne 24b6 <bigwrite+0xb6>
int cc = write(fd, buf, sz);
2461: 83 ec 04 sub $0x4,%esp
2464: 53 push %ebx
2465: 68 a0 85 00 00 push $0x85a0
246a: 56 push %esi
246b: e8 d3 14 00 00 call 3943 <write>
if (cc != sz) {
2470: 83 c4 10 add $0x10,%esp
2473: 39 d8 cmp %ebx,%eax
2475: 75 3f jne 24b6 <bigwrite+0xb6>
close(fd);
2477: 83 ec 0c sub $0xc,%esp
for (sz = 499; sz < 12 * 512; sz += 471) {
247a: 81 c3 d7 01 00 00 add $0x1d7,%ebx
close(fd);
2480: 56 push %esi
2481: e8 e5 14 00 00 call 396b <close>
unlink("bigwrite");
2486: c7 04 24 e4 47 00 00 movl $0x47e4,(%esp)
248d: e8 c1 14 00 00 call 3953 <unlink>
for (sz = 499; sz < 12 * 512; sz += 471) {
2492: 83 c4 10 add $0x10,%esp
2495: 81 fb 07 18 00 00 cmp $0x1807,%ebx
249b: 75 93 jne 2430 <bigwrite+0x30>
printf(1, "bigwrite ok\n");
249d: 83 ec 08 sub $0x8,%esp
24a0: 68 17 48 00 00 push $0x4817
24a5: 6a 01 push $0x1
24a7: e8 a4 15 00 00 call 3a50 <printf>
}
24ac: 83 c4 10 add $0x10,%esp
24af: 8d 65 f8 lea -0x8(%ebp),%esp
24b2: 5b pop %ebx
24b3: 5e pop %esi
24b4: 5d pop %ebp
24b5: c3 ret
printf(1, "write(%d) ret %d\n", sz, cc);
24b6: 50 push %eax
24b7: 53 push %ebx
24b8: 68 05 48 00 00 push $0x4805
24bd: 6a 01 push $0x1
24bf: e8 8c 15 00 00 call 3a50 <printf>
exit();
24c4: e8 0a 14 00 00 call 38d3 <exit>
printf(1, "cannot create bigwrite\n");
24c9: 83 ec 08 sub $0x8,%esp
24cc: 68 ed 47 00 00 push $0x47ed
24d1: 6a 01 push $0x1
24d3: e8 78 15 00 00 call 3a50 <printf>
exit();
24d8: e8 f6 13 00 00 call 38d3 <exit>
24dd: 8d 76 00 lea 0x0(%esi),%esi
000024e0 <bigfile>:
void bigfile(void) {
24e0: 55 push %ebp
24e1: 89 e5 mov %esp,%ebp
24e3: 57 push %edi
24e4: 56 push %esi
24e5: 53 push %ebx
24e6: 83 ec 14 sub $0x14,%esp
printf(1, "bigfile test\n");
24e9: 68 24 48 00 00 push $0x4824
24ee: 6a 01 push $0x1
24f0: e8 5b 15 00 00 call 3a50 <printf>
unlink("bigfile");
24f5: c7 04 24 40 48 00 00 movl $0x4840,(%esp)
24fc: e8 52 14 00 00 call 3953 <unlink>
fd = open("bigfile", O_CREATE | O_RDWR);
2501: 58 pop %eax
2502: 5a pop %edx
2503: 68 02 02 00 00 push $0x202
2508: 68 40 48 00 00 push $0x4840
250d: e8 29 14 00 00 call 393b <open>
if (fd < 0) {
2512: 83 c4 10 add $0x10,%esp
2515: 85 c0 test %eax,%eax
2517: 0f 88 5e 01 00 00 js 267b <bigfile+0x19b>
251d: 89 c6 mov %eax,%esi
for (i = 0; i < 20; i++) {
251f: 31 db xor %ebx,%ebx
2521: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
memset(buf, i, 600);
2528: 83 ec 04 sub $0x4,%esp
252b: 68 58 02 00 00 push $0x258
2530: 53 push %ebx
2531: 68 a0 85 00 00 push $0x85a0
2536: e8 05 12 00 00 call 3740 <memset>
if (write(fd, buf, 600) != 600) {
253b: 83 c4 0c add $0xc,%esp
253e: 68 58 02 00 00 push $0x258
2543: 68 a0 85 00 00 push $0x85a0
2548: 56 push %esi
2549: e8 f5 13 00 00 call 3943 <write>
254e: 83 c4 10 add $0x10,%esp
2551: 3d 58 02 00 00 cmp $0x258,%eax
2556: 0f 85 f8 00 00 00 jne 2654 <bigfile+0x174>
for (i = 0; i < 20; i++) {
255c: 83 c3 01 add $0x1,%ebx
255f: 83 fb 14 cmp $0x14,%ebx
2562: 75 c4 jne 2528 <bigfile+0x48>
close(fd);
2564: 83 ec 0c sub $0xc,%esp
2567: 56 push %esi
2568: e8 fe 13 00 00 call 396b <close>
fd = open("bigfile", 0);
256d: 5e pop %esi
256e: 5f pop %edi
256f: 6a 00 push $0x0
2571: 68 40 48 00 00 push $0x4840
2576: e8 c0 13 00 00 call 393b <open>
if (fd < 0) {
257b: 83 c4 10 add $0x10,%esp
fd = open("bigfile", 0);
257e: 89 c6 mov %eax,%esi
if (fd < 0) {
2580: 85 c0 test %eax,%eax
2582: 0f 88 e0 00 00 00 js 2668 <bigfile+0x188>
total = 0;
2588: 31 db xor %ebx,%ebx
for (i = 0;; i++) {
258a: 31 ff xor %edi,%edi
258c: eb 30 jmp 25be <bigfile+0xde>
258e: 66 90 xchg %ax,%ax
if (cc != 300) {
2590: 3d 2c 01 00 00 cmp $0x12c,%eax
2595: 0f 85 91 00 00 00 jne 262c <bigfile+0x14c>
if (buf[0] != i / 2 || buf[299] != i / 2) {
259b: 89 fa mov %edi,%edx
259d: 0f be 05 a0 85 00 00 movsbl 0x85a0,%eax
25a4: d1 fa sar %edx
25a6: 39 d0 cmp %edx,%eax
25a8: 75 6e jne 2618 <bigfile+0x138>
25aa: 0f be 15 cb 86 00 00 movsbl 0x86cb,%edx
25b1: 39 d0 cmp %edx,%eax
25b3: 75 63 jne 2618 <bigfile+0x138>
total += cc;
25b5: 81 c3 2c 01 00 00 add $0x12c,%ebx
for (i = 0;; i++) {
25bb: 83 c7 01 add $0x1,%edi
cc = read(fd, buf, 300);
25be: 83 ec 04 sub $0x4,%esp
25c1: 68 2c 01 00 00 push $0x12c
25c6: 68 a0 85 00 00 push $0x85a0
25cb: 56 push %esi
25cc: e8 1a 13 00 00 call 38eb <read>
if (cc < 0) {
25d1: 83 c4 10 add $0x10,%esp
25d4: 85 c0 test %eax,%eax
25d6: 78 68 js 2640 <bigfile+0x160>
if (cc == 0) {
25d8: 75 b6 jne 2590 <bigfile+0xb0>
close(fd);
25da: 83 ec 0c sub $0xc,%esp
25dd: 56 push %esi
25de: e8 88 13 00 00 call 396b <close>
if (total != 20 * 600) {
25e3: 83 c4 10 add $0x10,%esp
25e6: 81 fb e0 2e 00 00 cmp $0x2ee0,%ebx
25ec: 0f 85 9c 00 00 00 jne 268e <bigfile+0x1ae>
unlink("bigfile");
25f2: 83 ec 0c sub $0xc,%esp
25f5: 68 40 48 00 00 push $0x4840
25fa: e8 54 13 00 00 call 3953 <unlink>
printf(1, "bigfile test ok\n");
25ff: 58 pop %eax
2600: 5a pop %edx
2601: 68 cf 48 00 00 push $0x48cf
2606: 6a 01 push $0x1
2608: e8 43 14 00 00 call 3a50 <printf>
}
260d: 83 c4 10 add $0x10,%esp
2610: 8d 65 f4 lea -0xc(%ebp),%esp
2613: 5b pop %ebx
2614: 5e pop %esi
2615: 5f pop %edi
2616: 5d pop %ebp
2617: c3 ret
printf(1, "read bigfile wrong data\n");
2618: 83 ec 08 sub $0x8,%esp
261b: 68 9c 48 00 00 push $0x489c
2620: 6a 01 push $0x1
2622: e8 29 14 00 00 call 3a50 <printf>
exit();
2627: e8 a7 12 00 00 call 38d3 <exit>
printf(1, "short read bigfile\n");
262c: 83 ec 08 sub $0x8,%esp
262f: 68 88 48 00 00 push $0x4888
2634: 6a 01 push $0x1
2636: e8 15 14 00 00 call 3a50 <printf>
exit();
263b: e8 93 12 00 00 call 38d3 <exit>
printf(1, "read bigfile failed\n");
2640: 83 ec 08 sub $0x8,%esp
2643: 68 73 48 00 00 push $0x4873
2648: 6a 01 push $0x1
264a: e8 01 14 00 00 call 3a50 <printf>
exit();
264f: e8 7f 12 00 00 call 38d3 <exit>
printf(1, "write bigfile failed\n");
2654: 83 ec 08 sub $0x8,%esp
2657: 68 48 48 00 00 push $0x4848
265c: 6a 01 push $0x1
265e: e8 ed 13 00 00 call 3a50 <printf>
exit();
2663: e8 6b 12 00 00 call 38d3 <exit>
printf(1, "cannot open bigfile\n");
2668: 53 push %ebx
2669: 53 push %ebx
266a: 68 5e 48 00 00 push $0x485e
266f: 6a 01 push $0x1
2671: e8 da 13 00 00 call 3a50 <printf>
exit();
2676: e8 58 12 00 00 call 38d3 <exit>
printf(1, "cannot create bigfile");
267b: 50 push %eax
267c: 50 push %eax
267d: 68 32 48 00 00 push $0x4832
2682: 6a 01 push $0x1
2684: e8 c7 13 00 00 call 3a50 <printf>
exit();
2689: e8 45 12 00 00 call 38d3 <exit>
printf(1, "read bigfile wrong total\n");
268e: 51 push %ecx
268f: 51 push %ecx
2690: 68 b5 48 00 00 push $0x48b5
2695: 6a 01 push $0x1
2697: e8 b4 13 00 00 call 3a50 <printf>
exit();
269c: e8 32 12 00 00 call 38d3 <exit>
26a1: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
26a8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
26af: 90 nop
000026b0 <fourteen>:
void fourteen(void) {
26b0: 55 push %ebp
26b1: 89 e5 mov %esp,%ebp
26b3: 83 ec 10 sub $0x10,%esp
printf(1, "fourteen test\n");
26b6: 68 e0 48 00 00 push $0x48e0
26bb: 6a 01 push $0x1
26bd: e8 8e 13 00 00 call 3a50 <printf>
if (mkdir("12345678901234") != 0) {
26c2: c7 04 24 1b 49 00 00 movl $0x491b,(%esp)
26c9: e8 95 12 00 00 call 3963 <mkdir>
26ce: 83 c4 10 add $0x10,%esp
26d1: 85 c0 test %eax,%eax
26d3: 0f 85 97 00 00 00 jne 2770 <fourteen+0xc0>
if (mkdir("12345678901234/123456789012345") != 0) {
26d9: 83 ec 0c sub $0xc,%esp
26dc: 68 d8 50 00 00 push $0x50d8
26e1: e8 7d 12 00 00 call 3963 <mkdir>
26e6: 83 c4 10 add $0x10,%esp
26e9: 85 c0 test %eax,%eax
26eb: 0f 85 de 00 00 00 jne 27cf <fourteen+0x11f>
fd = open("123456789012345/123456789012345/123456789012345", O_CREATE);
26f1: 83 ec 08 sub $0x8,%esp
26f4: 68 00 02 00 00 push $0x200
26f9: 68 28 51 00 00 push $0x5128
26fe: e8 38 12 00 00 call 393b <open>
if (fd < 0) {
2703: 83 c4 10 add $0x10,%esp
2706: 85 c0 test %eax,%eax
2708: 0f 88 ae 00 00 00 js 27bc <fourteen+0x10c>
close(fd);
270e: 83 ec 0c sub $0xc,%esp
2711: 50 push %eax
2712: e8 54 12 00 00 call 396b <close>
fd = open("12345678901234/12345678901234/12345678901234", 0);
2717: 58 pop %eax
2718: 5a pop %edx
2719: 6a 00 push $0x0
271b: 68 98 51 00 00 push $0x5198
2720: e8 16 12 00 00 call 393b <open>
if (fd < 0) {
2725: 83 c4 10 add $0x10,%esp
2728: 85 c0 test %eax,%eax
272a: 78 7d js 27a9 <fourteen+0xf9>
close(fd);
272c: 83 ec 0c sub $0xc,%esp
272f: 50 push %eax
2730: e8 36 12 00 00 call 396b <close>
if (mkdir("12345678901234/12345678901234") == 0) {
2735: c7 04 24 0c 49 00 00 movl $0x490c,(%esp)
273c: e8 22 12 00 00 call 3963 <mkdir>
2741: 83 c4 10 add $0x10,%esp
2744: 85 c0 test %eax,%eax
2746: 74 4e je 2796 <fourteen+0xe6>
if (mkdir("123456789012345/12345678901234") == 0) {
2748: 83 ec 0c sub $0xc,%esp
274b: 68 34 52 00 00 push $0x5234
2750: e8 0e 12 00 00 call 3963 <mkdir>
2755: 83 c4 10 add $0x10,%esp
2758: 85 c0 test %eax,%eax
275a: 74 27 je 2783 <fourteen+0xd3>
printf(1, "fourteen ok\n");
275c: 83 ec 08 sub $0x8,%esp
275f: 68 2a 49 00 00 push $0x492a
2764: 6a 01 push $0x1
2766: e8 e5 12 00 00 call 3a50 <printf>
}
276b: 83 c4 10 add $0x10,%esp
276e: c9 leave
276f: c3 ret
printf(1, "mkdir 12345678901234 failed\n");
2770: 50 push %eax
2771: 50 push %eax
2772: 68 ef 48 00 00 push $0x48ef
2777: 6a 01 push $0x1
2779: e8 d2 12 00 00 call 3a50 <printf>
exit();
277e: e8 50 11 00 00 call 38d3 <exit>
printf(1, "mkdir 12345678901234/123456789012345 succeeded!\n");
2783: 50 push %eax
2784: 50 push %eax
2785: 68 54 52 00 00 push $0x5254
278a: 6a 01 push $0x1
278c: e8 bf 12 00 00 call 3a50 <printf>
exit();
2791: e8 3d 11 00 00 call 38d3 <exit>
printf(1, "mkdir 12345678901234/12345678901234 succeeded!\n");
2796: 52 push %edx
2797: 52 push %edx
2798: 68 04 52 00 00 push $0x5204
279d: 6a 01 push $0x1
279f: e8 ac 12 00 00 call 3a50 <printf>
exit();
27a4: e8 2a 11 00 00 call 38d3 <exit>
printf(1, "open 12345678901234/12345678901234/12345678901234 failed\n");
27a9: 51 push %ecx
27aa: 51 push %ecx
27ab: 68 c8 51 00 00 push $0x51c8
27b0: 6a 01 push $0x1
27b2: e8 99 12 00 00 call 3a50 <printf>
exit();
27b7: e8 17 11 00 00 call 38d3 <exit>
printf(1, "create 123456789012345/123456789012345/123456789012345 failed\n");
27bc: 51 push %ecx
27bd: 51 push %ecx
27be: 68 58 51 00 00 push $0x5158
27c3: 6a 01 push $0x1
27c5: e8 86 12 00 00 call 3a50 <printf>
exit();
27ca: e8 04 11 00 00 call 38d3 <exit>
printf(1, "mkdir 12345678901234/123456789012345 failed\n");
27cf: 50 push %eax
27d0: 50 push %eax
27d1: 68 f8 50 00 00 push $0x50f8
27d6: 6a 01 push $0x1
27d8: e8 73 12 00 00 call 3a50 <printf>
exit();
27dd: e8 f1 10 00 00 call 38d3 <exit>
27e2: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
27e9: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
000027f0 <rmdot>:
void rmdot(void) {
27f0: 55 push %ebp
27f1: 89 e5 mov %esp,%ebp
27f3: 83 ec 10 sub $0x10,%esp
printf(1, "rmdot test\n");
27f6: 68 37 49 00 00 push $0x4937
27fb: 6a 01 push $0x1
27fd: e8 4e 12 00 00 call 3a50 <printf>
if (mkdir("dots") != 0) {
2802: c7 04 24 43 49 00 00 movl $0x4943,(%esp)
2809: e8 55 11 00 00 call 3963 <mkdir>
280e: 83 c4 10 add $0x10,%esp
2811: 85 c0 test %eax,%eax
2813: 0f 85 b0 00 00 00 jne 28c9 <rmdot+0xd9>
if (chdir("dots") != 0) {
2819: 83 ec 0c sub $0xc,%esp
281c: 68 43 49 00 00 push $0x4943
2821: e8 e5 10 00 00 call 390b <chdir>
2826: 83 c4 10 add $0x10,%esp
2829: 85 c0 test %eax,%eax
282b: 0f 85 1d 01 00 00 jne 294e <rmdot+0x15e>
if (unlink(".") == 0) {
2831: 83 ec 0c sub $0xc,%esp
2834: 68 ee 45 00 00 push $0x45ee
2839: e8 15 11 00 00 call 3953 <unlink>
283e: 83 c4 10 add $0x10,%esp
2841: 85 c0 test %eax,%eax
2843: 0f 84 f2 00 00 00 je 293b <rmdot+0x14b>
if (unlink("..") == 0) {
2849: 83 ec 0c sub $0xc,%esp
284c: 68 ed 45 00 00 push $0x45ed
2851: e8 fd 10 00 00 call 3953 <unlink>
2856: 83 c4 10 add $0x10,%esp
2859: 85 c0 test %eax,%eax
285b: 0f 84 c7 00 00 00 je 2928 <rmdot+0x138>
if (chdir("/") != 0) {
2861: 83 ec 0c sub $0xc,%esp
2864: 68 c1 3d 00 00 push $0x3dc1
2869: e8 9d 10 00 00 call 390b <chdir>
286e: 83 c4 10 add $0x10,%esp
2871: 85 c0 test %eax,%eax
2873: 0f 85 9c 00 00 00 jne 2915 <rmdot+0x125>
if (unlink("dots/.") == 0) {
2879: 83 ec 0c sub $0xc,%esp
287c: 68 8b 49 00 00 push $0x498b
2881: e8 cd 10 00 00 call 3953 <unlink>
2886: 83 c4 10 add $0x10,%esp
2889: 85 c0 test %eax,%eax
288b: 74 75 je 2902 <rmdot+0x112>
if (unlink("dots/..") == 0) {
288d: 83 ec 0c sub $0xc,%esp
2890: 68 a9 49 00 00 push $0x49a9
2895: e8 b9 10 00 00 call 3953 <unlink>
289a: 83 c4 10 add $0x10,%esp
289d: 85 c0 test %eax,%eax
289f: 74 4e je 28ef <rmdot+0xff>
if (unlink("dots") != 0) {
28a1: 83 ec 0c sub $0xc,%esp
28a4: 68 43 49 00 00 push $0x4943
28a9: e8 a5 10 00 00 call 3953 <unlink>
28ae: 83 c4 10 add $0x10,%esp
28b1: 85 c0 test %eax,%eax
28b3: 75 27 jne 28dc <rmdot+0xec>
printf(1, "rmdot ok\n");
28b5: 83 ec 08 sub $0x8,%esp
28b8: 68 de 49 00 00 push $0x49de
28bd: 6a 01 push $0x1
28bf: e8 8c 11 00 00 call 3a50 <printf>
}
28c4: 83 c4 10 add $0x10,%esp
28c7: c9 leave
28c8: c3 ret
printf(1, "mkdir dots failed\n");
28c9: 50 push %eax
28ca: 50 push %eax
28cb: 68 48 49 00 00 push $0x4948
28d0: 6a 01 push $0x1
28d2: e8 79 11 00 00 call 3a50 <printf>
exit();
28d7: e8 f7 0f 00 00 call 38d3 <exit>
printf(1, "unlink dots failed!\n");
28dc: 50 push %eax
28dd: 50 push %eax
28de: 68 c9 49 00 00 push $0x49c9
28e3: 6a 01 push $0x1
28e5: e8 66 11 00 00 call 3a50 <printf>
exit();
28ea: e8 e4 0f 00 00 call 38d3 <exit>
printf(1, "unlink dots/.. worked!\n");
28ef: 52 push %edx
28f0: 52 push %edx
28f1: 68 b1 49 00 00 push $0x49b1
28f6: 6a 01 push $0x1
28f8: e8 53 11 00 00 call 3a50 <printf>
exit();
28fd: e8 d1 0f 00 00 call 38d3 <exit>
printf(1, "unlink dots/. worked!\n");
2902: 51 push %ecx
2903: 51 push %ecx
2904: 68 92 49 00 00 push $0x4992
2909: 6a 01 push $0x1
290b: e8 40 11 00 00 call 3a50 <printf>
exit();
2910: e8 be 0f 00 00 call 38d3 <exit>
printf(1, "chdir / failed\n");
2915: 50 push %eax
2916: 50 push %eax
2917: 68 c3 3d 00 00 push $0x3dc3
291c: 6a 01 push $0x1
291e: e8 2d 11 00 00 call 3a50 <printf>
exit();
2923: e8 ab 0f 00 00 call 38d3 <exit>
printf(1, "rm .. worked!\n");
2928: 50 push %eax
2929: 50 push %eax
292a: 68 7c 49 00 00 push $0x497c
292f: 6a 01 push $0x1
2931: e8 1a 11 00 00 call 3a50 <printf>
exit();
2936: e8 98 0f 00 00 call 38d3 <exit>
printf(1, "rm . worked!\n");
293b: 50 push %eax
293c: 50 push %eax
293d: 68 6e 49 00 00 push $0x496e
2942: 6a 01 push $0x1
2944: e8 07 11 00 00 call 3a50 <printf>
exit();
2949: e8 85 0f 00 00 call 38d3 <exit>
printf(1, "chdir dots failed\n");
294e: 50 push %eax
294f: 50 push %eax
2950: 68 5b 49 00 00 push $0x495b
2955: 6a 01 push $0x1
2957: e8 f4 10 00 00 call 3a50 <printf>
exit();
295c: e8 72 0f 00 00 call 38d3 <exit>
2961: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
2968: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
296f: 90 nop
00002970 <dirfile>:
void dirfile(void) {
2970: 55 push %ebp
2971: 89 e5 mov %esp,%ebp
2973: 53 push %ebx
2974: 83 ec 0c sub $0xc,%esp
printf(1, "dir vs file\n");
2977: 68 e8 49 00 00 push $0x49e8
297c: 6a 01 push $0x1
297e: e8 cd 10 00 00 call 3a50 <printf>
fd = open("dirfile", O_CREATE);
2983: 5b pop %ebx
2984: 58 pop %eax
2985: 68 00 02 00 00 push $0x200
298a: 68 f5 49 00 00 push $0x49f5
298f: e8 a7 0f 00 00 call 393b <open>
if (fd < 0) {
2994: 83 c4 10 add $0x10,%esp
2997: 85 c0 test %eax,%eax
2999: 0f 88 43 01 00 00 js 2ae2 <dirfile+0x172>
close(fd);
299f: 83 ec 0c sub $0xc,%esp
29a2: 50 push %eax
29a3: e8 c3 0f 00 00 call 396b <close>
if (chdir("dirfile") == 0) {
29a8: c7 04 24 f5 49 00 00 movl $0x49f5,(%esp)
29af: e8 57 0f 00 00 call 390b <chdir>
29b4: 83 c4 10 add $0x10,%esp
29b7: 85 c0 test %eax,%eax
29b9: 0f 84 10 01 00 00 je 2acf <dirfile+0x15f>
fd = open("dirfile/xx", 0);
29bf: 83 ec 08 sub $0x8,%esp
29c2: 6a 00 push $0x0
29c4: 68 2e 4a 00 00 push $0x4a2e
29c9: e8 6d 0f 00 00 call 393b <open>
if (fd >= 0) {
29ce: 83 c4 10 add $0x10,%esp
29d1: 85 c0 test %eax,%eax
29d3: 0f 89 e3 00 00 00 jns 2abc <dirfile+0x14c>
fd = open("dirfile/xx", O_CREATE);
29d9: 83 ec 08 sub $0x8,%esp
29dc: 68 00 02 00 00 push $0x200
29e1: 68 2e 4a 00 00 push $0x4a2e
29e6: e8 50 0f 00 00 call 393b <open>
if (fd >= 0) {
29eb: 83 c4 10 add $0x10,%esp
29ee: 85 c0 test %eax,%eax
29f0: 0f 89 c6 00 00 00 jns 2abc <dirfile+0x14c>
if (mkdir("dirfile/xx") == 0) {
29f6: 83 ec 0c sub $0xc,%esp
29f9: 68 2e 4a 00 00 push $0x4a2e
29fe: e8 60 0f 00 00 call 3963 <mkdir>
2a03: 83 c4 10 add $0x10,%esp
2a06: 85 c0 test %eax,%eax
2a08: 0f 84 46 01 00 00 je 2b54 <dirfile+0x1e4>
if (unlink("dirfile/xx") == 0) {
2a0e: 83 ec 0c sub $0xc,%esp
2a11: 68 2e 4a 00 00 push $0x4a2e
2a16: e8 38 0f 00 00 call 3953 <unlink>
2a1b: 83 c4 10 add $0x10,%esp
2a1e: 85 c0 test %eax,%eax
2a20: 0f 84 1b 01 00 00 je 2b41 <dirfile+0x1d1>
if (link("README", "dirfile/xx") == 0) {
2a26: 83 ec 08 sub $0x8,%esp
2a29: 68 2e 4a 00 00 push $0x4a2e
2a2e: 68 92 4a 00 00 push $0x4a92
2a33: e8 23 0f 00 00 call 395b <link>
2a38: 83 c4 10 add $0x10,%esp
2a3b: 85 c0 test %eax,%eax
2a3d: 0f 84 eb 00 00 00 je 2b2e <dirfile+0x1be>
if (unlink("dirfile") != 0) {
2a43: 83 ec 0c sub $0xc,%esp
2a46: 68 f5 49 00 00 push $0x49f5
2a4b: e8 03 0f 00 00 call 3953 <unlink>
2a50: 83 c4 10 add $0x10,%esp
2a53: 85 c0 test %eax,%eax
2a55: 0f 85 c0 00 00 00 jne 2b1b <dirfile+0x1ab>
fd = open(".", O_RDWR);
2a5b: 83 ec 08 sub $0x8,%esp
2a5e: 6a 02 push $0x2
2a60: 68 ee 45 00 00 push $0x45ee
2a65: e8 d1 0e 00 00 call 393b <open>
if (fd >= 0) {
2a6a: 83 c4 10 add $0x10,%esp
2a6d: 85 c0 test %eax,%eax
2a6f: 0f 89 93 00 00 00 jns 2b08 <dirfile+0x198>
fd = open(".", 0);
2a75: 83 ec 08 sub $0x8,%esp
2a78: 6a 00 push $0x0
2a7a: 68 ee 45 00 00 push $0x45ee
2a7f: e8 b7 0e 00 00 call 393b <open>
if (write(fd, "x", 1) > 0) {
2a84: 83 c4 0c add $0xc,%esp
2a87: 6a 01 push $0x1
fd = open(".", 0);
2a89: 89 c3 mov %eax,%ebx
if (write(fd, "x", 1) > 0) {
2a8b: 68 d1 46 00 00 push $0x46d1
2a90: 50 push %eax
2a91: e8 ad 0e 00 00 call 3943 <write>
2a96: 83 c4 10 add $0x10,%esp
2a99: 85 c0 test %eax,%eax
2a9b: 7f 58 jg 2af5 <dirfile+0x185>
close(fd);
2a9d: 83 ec 0c sub $0xc,%esp
2aa0: 53 push %ebx
2aa1: e8 c5 0e 00 00 call 396b <close>
printf(1, "dir vs file OK\n");
2aa6: 58 pop %eax
2aa7: 5a pop %edx
2aa8: 68 c5 4a 00 00 push $0x4ac5
2aad: 6a 01 push $0x1
2aaf: e8 9c 0f 00 00 call 3a50 <printf>
}
2ab4: 8b 5d fc mov -0x4(%ebp),%ebx
2ab7: 83 c4 10 add $0x10,%esp
2aba: c9 leave
2abb: c3 ret
printf(1, "create dirfile/xx succeeded!\n");
2abc: 50 push %eax
2abd: 50 push %eax
2abe: 68 39 4a 00 00 push $0x4a39
2ac3: 6a 01 push $0x1
2ac5: e8 86 0f 00 00 call 3a50 <printf>
exit();
2aca: e8 04 0e 00 00 call 38d3 <exit>
printf(1, "chdir dirfile succeeded!\n");
2acf: 52 push %edx
2ad0: 52 push %edx
2ad1: 68 14 4a 00 00 push $0x4a14
2ad6: 6a 01 push $0x1
2ad8: e8 73 0f 00 00 call 3a50 <printf>
exit();
2add: e8 f1 0d 00 00 call 38d3 <exit>
printf(1, "create dirfile failed\n");
2ae2: 51 push %ecx
2ae3: 51 push %ecx
2ae4: 68 fd 49 00 00 push $0x49fd
2ae9: 6a 01 push $0x1
2aeb: e8 60 0f 00 00 call 3a50 <printf>
exit();
2af0: e8 de 0d 00 00 call 38d3 <exit>
printf(1, "write . succeeded!\n");
2af5: 51 push %ecx
2af6: 51 push %ecx
2af7: 68 b1 4a 00 00 push $0x4ab1
2afc: 6a 01 push $0x1
2afe: e8 4d 0f 00 00 call 3a50 <printf>
exit();
2b03: e8 cb 0d 00 00 call 38d3 <exit>
printf(1, "open . for writing succeeded!\n");
2b08: 53 push %ebx
2b09: 53 push %ebx
2b0a: 68 a8 52 00 00 push $0x52a8
2b0f: 6a 01 push $0x1
2b11: e8 3a 0f 00 00 call 3a50 <printf>
exit();
2b16: e8 b8 0d 00 00 call 38d3 <exit>
printf(1, "unlink dirfile failed!\n");
2b1b: 50 push %eax
2b1c: 50 push %eax
2b1d: 68 99 4a 00 00 push $0x4a99
2b22: 6a 01 push $0x1
2b24: e8 27 0f 00 00 call 3a50 <printf>
exit();
2b29: e8 a5 0d 00 00 call 38d3 <exit>
printf(1, "link to dirfile/xx succeeded!\n");
2b2e: 50 push %eax
2b2f: 50 push %eax
2b30: 68 88 52 00 00 push $0x5288
2b35: 6a 01 push $0x1
2b37: e8 14 0f 00 00 call 3a50 <printf>
exit();
2b3c: e8 92 0d 00 00 call 38d3 <exit>
printf(1, "unlink dirfile/xx succeeded!\n");
2b41: 50 push %eax
2b42: 50 push %eax
2b43: 68 74 4a 00 00 push $0x4a74
2b48: 6a 01 push $0x1
2b4a: e8 01 0f 00 00 call 3a50 <printf>
exit();
2b4f: e8 7f 0d 00 00 call 38d3 <exit>
printf(1, "mkdir dirfile/xx succeeded!\n");
2b54: 50 push %eax
2b55: 50 push %eax
2b56: 68 57 4a 00 00 push $0x4a57
2b5b: 6a 01 push $0x1
2b5d: e8 ee 0e 00 00 call 3a50 <printf>
exit();
2b62: e8 6c 0d 00 00 call 38d3 <exit>
2b67: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
2b6e: 66 90 xchg %ax,%ax
00002b70 <iref>:
void iref(void) {
2b70: 55 push %ebp
2b71: 89 e5 mov %esp,%ebp
2b73: 53 push %ebx
printf(1, "empty file name\n");
2b74: bb 33 00 00 00 mov $0x33,%ebx
void iref(void) {
2b79: 83 ec 0c sub $0xc,%esp
printf(1, "empty file name\n");
2b7c: 68 d5 4a 00 00 push $0x4ad5
2b81: 6a 01 push $0x1
2b83: e8 c8 0e 00 00 call 3a50 <printf>
2b88: 83 c4 10 add $0x10,%esp
2b8b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
2b8f: 90 nop
if (mkdir("irefd") != 0) {
2b90: 83 ec 0c sub $0xc,%esp
2b93: 68 e6 4a 00 00 push $0x4ae6
2b98: e8 c6 0d 00 00 call 3963 <mkdir>
2b9d: 83 c4 10 add $0x10,%esp
2ba0: 85 c0 test %eax,%eax
2ba2: 0f 85 bb 00 00 00 jne 2c63 <iref+0xf3>
if (chdir("irefd") != 0) {
2ba8: 83 ec 0c sub $0xc,%esp
2bab: 68 e6 4a 00 00 push $0x4ae6
2bb0: e8 56 0d 00 00 call 390b <chdir>
2bb5: 83 c4 10 add $0x10,%esp
2bb8: 85 c0 test %eax,%eax
2bba: 0f 85 b7 00 00 00 jne 2c77 <iref+0x107>
mkdir("");
2bc0: 83 ec 0c sub $0xc,%esp
2bc3: 68 9b 41 00 00 push $0x419b
2bc8: e8 96 0d 00 00 call 3963 <mkdir>
link("README", "");
2bcd: 59 pop %ecx
2bce: 58 pop %eax
2bcf: 68 9b 41 00 00 push $0x419b
2bd4: 68 92 4a 00 00 push $0x4a92
2bd9: e8 7d 0d 00 00 call 395b <link>
fd = open("", O_CREATE);
2bde: 58 pop %eax
2bdf: 5a pop %edx
2be0: 68 00 02 00 00 push $0x200
2be5: 68 9b 41 00 00 push $0x419b
2bea: e8 4c 0d 00 00 call 393b <open>
if (fd >= 0) {
2bef: 83 c4 10 add $0x10,%esp
2bf2: 85 c0 test %eax,%eax
2bf4: 78 0c js 2c02 <iref+0x92>
close(fd);
2bf6: 83 ec 0c sub $0xc,%esp
2bf9: 50 push %eax
2bfa: e8 6c 0d 00 00 call 396b <close>
2bff: 83 c4 10 add $0x10,%esp
fd = open("xx", O_CREATE);
2c02: 83 ec 08 sub $0x8,%esp
2c05: 68 00 02 00 00 push $0x200
2c0a: 68 d0 46 00 00 push $0x46d0
2c0f: e8 27 0d 00 00 call 393b <open>
if (fd >= 0) {
2c14: 83 c4 10 add $0x10,%esp
2c17: 85 c0 test %eax,%eax
2c19: 78 0c js 2c27 <iref+0xb7>
close(fd);
2c1b: 83 ec 0c sub $0xc,%esp
2c1e: 50 push %eax
2c1f: e8 47 0d 00 00 call 396b <close>
2c24: 83 c4 10 add $0x10,%esp
unlink("xx");
2c27: 83 ec 0c sub $0xc,%esp
2c2a: 68 d0 46 00 00 push $0x46d0
2c2f: e8 1f 0d 00 00 call 3953 <unlink>
for (i = 0; i < 50 + 1; i++) {
2c34: 83 c4 10 add $0x10,%esp
2c37: 83 eb 01 sub $0x1,%ebx
2c3a: 0f 85 50 ff ff ff jne 2b90 <iref+0x20>
chdir("/");
2c40: 83 ec 0c sub $0xc,%esp
2c43: 68 c1 3d 00 00 push $0x3dc1
2c48: e8 be 0c 00 00 call 390b <chdir>
printf(1, "empty file name OK\n");
2c4d: 58 pop %eax
2c4e: 5a pop %edx
2c4f: 68 14 4b 00 00 push $0x4b14
2c54: 6a 01 push $0x1
2c56: e8 f5 0d 00 00 call 3a50 <printf>
}
2c5b: 8b 5d fc mov -0x4(%ebp),%ebx
2c5e: 83 c4 10 add $0x10,%esp
2c61: c9 leave
2c62: c3 ret
printf(1, "mkdir irefd failed\n");
2c63: 83 ec 08 sub $0x8,%esp
2c66: 68 ec 4a 00 00 push $0x4aec
2c6b: 6a 01 push $0x1
2c6d: e8 de 0d 00 00 call 3a50 <printf>
exit();
2c72: e8 5c 0c 00 00 call 38d3 <exit>
printf(1, "chdir irefd failed\n");
2c77: 83 ec 08 sub $0x8,%esp
2c7a: 68 00 4b 00 00 push $0x4b00
2c7f: 6a 01 push $0x1
2c81: e8 ca 0d 00 00 call 3a50 <printf>
exit();
2c86: e8 48 0c 00 00 call 38d3 <exit>
2c8b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
2c8f: 90 nop
00002c90 <forktest>:
void forktest(void) {
2c90: 55 push %ebp
2c91: 89 e5 mov %esp,%ebp
2c93: 53 push %ebx
for (n = 0; n < 1000; n++) {
2c94: 31 db xor %ebx,%ebx
void forktest(void) {
2c96: 83 ec 0c sub $0xc,%esp
printf(1, "fork test\n");
2c99: 68 28 4b 00 00 push $0x4b28
2c9e: 6a 01 push $0x1
2ca0: e8 ab 0d 00 00 call 3a50 <printf>
2ca5: 83 c4 10 add $0x10,%esp
2ca8: eb 13 jmp 2cbd <forktest+0x2d>
2caa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
if (pid == 0) {
2cb0: 74 4a je 2cfc <forktest+0x6c>
for (n = 0; n < 1000; n++) {
2cb2: 83 c3 01 add $0x1,%ebx
2cb5: 81 fb e8 03 00 00 cmp $0x3e8,%ebx
2cbb: 74 6b je 2d28 <forktest+0x98>
pid = fork();
2cbd: e8 09 0c 00 00 call 38cb <fork>
if (pid < 0) {
2cc2: 85 c0 test %eax,%eax
2cc4: 79 ea jns 2cb0 <forktest+0x20>
for (; n > 0; n--) {
2cc6: 85 db test %ebx,%ebx
2cc8: 74 14 je 2cde <forktest+0x4e>
2cca: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
if (wait() < 0) {
2cd0: e8 06 0c 00 00 call 38db <wait>
2cd5: 85 c0 test %eax,%eax
2cd7: 78 28 js 2d01 <forktest+0x71>
for (; n > 0; n--) {
2cd9: 83 eb 01 sub $0x1,%ebx
2cdc: 75 f2 jne 2cd0 <forktest+0x40>
if (wait() != -1) {
2cde: e8 f8 0b 00 00 call 38db <wait>
2ce3: 83 f8 ff cmp $0xffffffff,%eax
2ce6: 75 2d jne 2d15 <forktest+0x85>
printf(1, "fork test OK\n");
2ce8: 83 ec 08 sub $0x8,%esp
2ceb: 68 5a 4b 00 00 push $0x4b5a
2cf0: 6a 01 push $0x1
2cf2: e8 59 0d 00 00 call 3a50 <printf>
}
2cf7: 8b 5d fc mov -0x4(%ebp),%ebx
2cfa: c9 leave
2cfb: c3 ret
exit();
2cfc: e8 d2 0b 00 00 call 38d3 <exit>
printf(1, "wait stopped early\n");
2d01: 83 ec 08 sub $0x8,%esp
2d04: 68 33 4b 00 00 push $0x4b33
2d09: 6a 01 push $0x1
2d0b: e8 40 0d 00 00 call 3a50 <printf>
exit();
2d10: e8 be 0b 00 00 call 38d3 <exit>
printf(1, "wait got too many\n");
2d15: 52 push %edx
2d16: 52 push %edx
2d17: 68 47 4b 00 00 push $0x4b47
2d1c: 6a 01 push $0x1
2d1e: e8 2d 0d 00 00 call 3a50 <printf>
exit();
2d23: e8 ab 0b 00 00 call 38d3 <exit>
printf(1, "fork claimed to work 1000 times!\n");
2d28: 50 push %eax
2d29: 50 push %eax
2d2a: 68 c8 52 00 00 push $0x52c8
2d2f: 6a 01 push $0x1
2d31: e8 1a 0d 00 00 call 3a50 <printf>
exit();
2d36: e8 98 0b 00 00 call 38d3 <exit>
2d3b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
2d3f: 90 nop
00002d40 <sbrktest>:
void sbrktest(void) {
2d40: 55 push %ebp
2d41: 89 e5 mov %esp,%ebp
2d43: 57 push %edi
2d44: 56 push %esi
for (i = 0; i < 5000; i++) {
2d45: 31 f6 xor %esi,%esi
void sbrktest(void) {
2d47: 53 push %ebx
2d48: 83 ec 64 sub $0x64,%esp
printf(stdout, "sbrk test\n");
2d4b: 68 68 4b 00 00 push $0x4b68
2d50: ff 35 68 5e 00 00 push 0x5e68
2d56: e8 f5 0c 00 00 call 3a50 <printf>
oldbrk = sbrk(0);
2d5b: c7 04 24 00 00 00 00 movl $0x0,(%esp)
2d62: e8 bc 0b 00 00 call 3923 <sbrk>
a = sbrk(0);
2d67: c7 04 24 00 00 00 00 movl $0x0,(%esp)
oldbrk = sbrk(0);
2d6e: 89 45 a4 mov %eax,-0x5c(%ebp)
a = sbrk(0);
2d71: e8 ad 0b 00 00 call 3923 <sbrk>
2d76: 83 c4 10 add $0x10,%esp
2d79: 89 c3 mov %eax,%ebx
for (i = 0; i < 5000; i++) {
2d7b: eb 05 jmp 2d82 <sbrktest+0x42>
2d7d: 8d 76 00 lea 0x0(%esi),%esi
a = b + 1;
2d80: 89 c3 mov %eax,%ebx
b = sbrk(1);
2d82: 83 ec 0c sub $0xc,%esp
2d85: 6a 01 push $0x1
2d87: e8 97 0b 00 00 call 3923 <sbrk>
if (b != a) {
2d8c: 83 c4 10 add $0x10,%esp
2d8f: 39 d8 cmp %ebx,%eax
2d91: 0f 85 9c 02 00 00 jne 3033 <sbrktest+0x2f3>
for (i = 0; i < 5000; i++) {
2d97: 83 c6 01 add $0x1,%esi
*b = 1;
2d9a: c6 03 01 movb $0x1,(%ebx)
a = b + 1;
2d9d: 8d 43 01 lea 0x1(%ebx),%eax
for (i = 0; i < 5000; i++) {
2da0: 81 fe 88 13 00 00 cmp $0x1388,%esi
2da6: 75 d8 jne 2d80 <sbrktest+0x40>
pid = fork();
2da8: e8 1e 0b 00 00 call 38cb <fork>
2dad: 89 c6 mov %eax,%esi
if (pid < 0) {
2daf: 85 c0 test %eax,%eax
2db1: 0f 88 02 03 00 00 js 30b9 <sbrktest+0x379>
c = sbrk(1);
2db7: 83 ec 0c sub $0xc,%esp
if (c != a + 1) {
2dba: 83 c3 02 add $0x2,%ebx
c = sbrk(1);
2dbd: 6a 01 push $0x1
2dbf: e8 5f 0b 00 00 call 3923 <sbrk>
c = sbrk(1);
2dc4: c7 04 24 01 00 00 00 movl $0x1,(%esp)
2dcb: e8 53 0b 00 00 call 3923 <sbrk>
if (c != a + 1) {
2dd0: 83 c4 10 add $0x10,%esp
2dd3: 39 c3 cmp %eax,%ebx
2dd5: 0f 85 3b 03 00 00 jne 3116 <sbrktest+0x3d6>
if (pid == 0) {
2ddb: 85 f6 test %esi,%esi
2ddd: 0f 84 2e 03 00 00 je 3111 <sbrktest+0x3d1>
wait();
2de3: e8 f3 0a 00 00 call 38db <wait>
a = sbrk(0);
2de8: 83 ec 0c sub $0xc,%esp
2deb: 6a 00 push $0x0
2ded: e8 31 0b 00 00 call 3923 <sbrk>
2df2: 89 c3 mov %eax,%ebx
amt = (BIG) -(uint)a;
2df4: b8 00 00 40 06 mov $0x6400000,%eax
2df9: 29 d8 sub %ebx,%eax
p = sbrk(amt);
2dfb: 89 04 24 mov %eax,(%esp)
2dfe: e8 20 0b 00 00 call 3923 <sbrk>
if (p != a) {
2e03: 83 c4 10 add $0x10,%esp
2e06: 39 c3 cmp %eax,%ebx
2e08: 0f 85 94 02 00 00 jne 30a2 <sbrktest+0x362>
a = sbrk(0);
2e0e: 83 ec 0c sub $0xc,%esp
*lastaddr = 99;
2e11: c6 05 ff ff 3f 06 63 movb $0x63,0x63fffff
a = sbrk(0);
2e18: 6a 00 push $0x0
2e1a: e8 04 0b 00 00 call 3923 <sbrk>
c = sbrk(-4096);
2e1f: c7 04 24 00 f0 ff ff movl $0xfffff000,(%esp)
a = sbrk(0);
2e26: 89 c3 mov %eax,%ebx
c = sbrk(-4096);
2e28: e8 f6 0a 00 00 call 3923 <sbrk>
if (c == (char*)0xffffffff) {
2e2d: 83 c4 10 add $0x10,%esp
2e30: 83 f8 ff cmp $0xffffffff,%eax
2e33: 0f 84 22 03 00 00 je 315b <sbrktest+0x41b>
c = sbrk(0);
2e39: 83 ec 0c sub $0xc,%esp
2e3c: 6a 00 push $0x0
2e3e: e8 e0 0a 00 00 call 3923 <sbrk>
if (c != a - 4096) {
2e43: 8d 93 00 f0 ff ff lea -0x1000(%ebx),%edx
2e49: 83 c4 10 add $0x10,%esp
2e4c: 39 d0 cmp %edx,%eax
2e4e: 0f 85 f0 02 00 00 jne 3144 <sbrktest+0x404>
a = sbrk(0);
2e54: 83 ec 0c sub $0xc,%esp
2e57: 6a 00 push $0x0
2e59: e8 c5 0a 00 00 call 3923 <sbrk>
c = sbrk(4096);
2e5e: c7 04 24 00 10 00 00 movl $0x1000,(%esp)
a = sbrk(0);
2e65: 89 c3 mov %eax,%ebx
c = sbrk(4096);
2e67: e8 b7 0a 00 00 call 3923 <sbrk>
if (c != a || sbrk(0) != a + 4096) {
2e6c: 83 c4 10 add $0x10,%esp
c = sbrk(4096);
2e6f: 89 c6 mov %eax,%esi
if (c != a || sbrk(0) != a + 4096) {
2e71: 39 c3 cmp %eax,%ebx
2e73: 0f 85 b4 02 00 00 jne 312d <sbrktest+0x3ed>
2e79: 83 ec 0c sub $0xc,%esp
2e7c: 6a 00 push $0x0
2e7e: e8 a0 0a 00 00 call 3923 <sbrk>
2e83: 8d 93 00 10 00 00 lea 0x1000(%ebx),%edx
2e89: 83 c4 10 add $0x10,%esp
2e8c: 39 c2 cmp %eax,%edx
2e8e: 0f 85 99 02 00 00 jne 312d <sbrktest+0x3ed>
if (*lastaddr == 99) {
2e94: 80 3d ff ff 3f 06 63 cmpb $0x63,0x63fffff
2e9b: 0f 84 2f 02 00 00 je 30d0 <sbrktest+0x390>
a = sbrk(0);
2ea1: 83 ec 0c sub $0xc,%esp
2ea4: 6a 00 push $0x0
2ea6: e8 78 0a 00 00 call 3923 <sbrk>
c = sbrk(-(sbrk(0) - oldbrk));
2eab: c7 04 24 00 00 00 00 movl $0x0,(%esp)
a = sbrk(0);
2eb2: 89 c3 mov %eax,%ebx
c = sbrk(-(sbrk(0) - oldbrk));
2eb4: e8 6a 0a 00 00 call 3923 <sbrk>
2eb9: 89 c2 mov %eax,%edx
2ebb: 8b 45 a4 mov -0x5c(%ebp),%eax
2ebe: 29 d0 sub %edx,%eax
2ec0: 89 04 24 mov %eax,(%esp)
2ec3: e8 5b 0a 00 00 call 3923 <sbrk>
if (c != a) {
2ec8: 83 c4 10 add $0x10,%esp
2ecb: 39 c3 cmp %eax,%ebx
2ecd: 0f 85 b8 01 00 00 jne 308b <sbrktest+0x34b>
for (a = (char*)(KERNBASE); a < (char*) (KERNBASE + 2000000); a += 50000) {
2ed3: bb 00 00 00 80 mov $0x80000000,%ebx
2ed8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
2edf: 90 nop
ppid = getpid();
2ee0: e8 36 0a 00 00 call 391b <getpid>
2ee5: 89 c6 mov %eax,%esi
pid = fork();
2ee7: e8 df 09 00 00 call 38cb <fork>
if (pid < 0) {
2eec: 85 c0 test %eax,%eax
2eee: 0f 88 5d 01 00 00 js 3051 <sbrktest+0x311>
if (pid == 0) {
2ef4: 0f 84 6f 01 00 00 je 3069 <sbrktest+0x329>
wait();
2efa: e8 dc 09 00 00 call 38db <wait>
for (a = (char*)(KERNBASE); a < (char*) (KERNBASE + 2000000); a += 50000) {
2eff: 81 c3 50 c3 00 00 add $0xc350,%ebx
2f05: 81 fb 80 84 1e 80 cmp $0x801e8480,%ebx
2f0b: 75 d3 jne 2ee0 <sbrktest+0x1a0>
if (pipe(fds) != 0) {
2f0d: 83 ec 0c sub $0xc,%esp
2f10: 8d 45 b8 lea -0x48(%ebp),%eax
2f13: 50 push %eax
2f14: e8 ca 09 00 00 call 38e3 <pipe>
2f19: 83 c4 10 add $0x10,%esp
2f1c: 85 c0 test %eax,%eax
2f1e: 0f 85 da 01 00 00 jne 30fe <sbrktest+0x3be>
2f24: 8d 5d c0 lea -0x40(%ebp),%ebx
2f27: 8d 75 e8 lea -0x18(%ebp),%esi
2f2a: 89 df mov %ebx,%edi
2f2c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
if ((pids[i] = fork()) == 0) {
2f30: e8 96 09 00 00 call 38cb <fork>
2f35: 89 07 mov %eax,(%edi)
2f37: 85 c0 test %eax,%eax
2f39: 0f 84 91 00 00 00 je 2fd0 <sbrktest+0x290>
if (pids[i] != -1) {
2f3f: 83 f8 ff cmp $0xffffffff,%eax
2f42: 74 14 je 2f58 <sbrktest+0x218>
read(fds[0], &scratch, 1);
2f44: 83 ec 04 sub $0x4,%esp
2f47: 8d 45 b7 lea -0x49(%ebp),%eax
2f4a: 6a 01 push $0x1
2f4c: 50 push %eax
2f4d: ff 75 b8 push -0x48(%ebp)
2f50: e8 96 09 00 00 call 38eb <read>
2f55: 83 c4 10 add $0x10,%esp
for (i = 0; i < sizeof(pids) / sizeof(pids[0]); i++) {
2f58: 83 c7 04 add $0x4,%edi
2f5b: 39 f7 cmp %esi,%edi
2f5d: 75 d1 jne 2f30 <sbrktest+0x1f0>
c = sbrk(4096);
2f5f: 83 ec 0c sub $0xc,%esp
2f62: 68 00 10 00 00 push $0x1000
2f67: e8 b7 09 00 00 call 3923 <sbrk>
2f6c: 83 c4 10 add $0x10,%esp
2f6f: 89 c7 mov %eax,%edi
for (i = 0; i < sizeof(pids) / sizeof(pids[0]); i++) {
2f71: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
if (pids[i] == -1) {
2f78: 8b 03 mov (%ebx),%eax
2f7a: 83 f8 ff cmp $0xffffffff,%eax
2f7d: 74 11 je 2f90 <sbrktest+0x250>
kill(pids[i]);
2f7f: 83 ec 0c sub $0xc,%esp
2f82: 50 push %eax
2f83: e8 6b 09 00 00 call 38f3 <kill>
wait();
2f88: e8 4e 09 00 00 call 38db <wait>
2f8d: 83 c4 10 add $0x10,%esp
for (i = 0; i < sizeof(pids) / sizeof(pids[0]); i++) {
2f90: 83 c3 04 add $0x4,%ebx
2f93: 39 de cmp %ebx,%esi
2f95: 75 e1 jne 2f78 <sbrktest+0x238>
if (c == (char*)0xffffffff) {
2f97: 83 ff ff cmp $0xffffffff,%edi
2f9a: 0f 84 47 01 00 00 je 30e7 <sbrktest+0x3a7>
if (sbrk(0) > oldbrk) {
2fa0: 83 ec 0c sub $0xc,%esp
2fa3: 6a 00 push $0x0
2fa5: e8 79 09 00 00 call 3923 <sbrk>
2faa: 83 c4 10 add $0x10,%esp
2fad: 39 45 a4 cmp %eax,-0x5c(%ebp)
2fb0: 72 60 jb 3012 <sbrktest+0x2d2>
printf(stdout, "sbrk test OK\n");
2fb2: 83 ec 08 sub $0x8,%esp
2fb5: 68 10 4c 00 00 push $0x4c10
2fba: ff 35 68 5e 00 00 push 0x5e68
2fc0: e8 8b 0a 00 00 call 3a50 <printf>
}
2fc5: 83 c4 10 add $0x10,%esp
2fc8: 8d 65 f4 lea -0xc(%ebp),%esp
2fcb: 5b pop %ebx
2fcc: 5e pop %esi
2fcd: 5f pop %edi
2fce: 5d pop %ebp
2fcf: c3 ret
sbrk(BIG - (uint)sbrk(0));
2fd0: 83 ec 0c sub $0xc,%esp
2fd3: 6a 00 push $0x0
2fd5: e8 49 09 00 00 call 3923 <sbrk>
2fda: 89 c2 mov %eax,%edx
2fdc: b8 00 00 40 06 mov $0x6400000,%eax
2fe1: 29 d0 sub %edx,%eax
2fe3: 89 04 24 mov %eax,(%esp)
2fe6: e8 38 09 00 00 call 3923 <sbrk>
write(fds[1], "x", 1);
2feb: 83 c4 0c add $0xc,%esp
2fee: 6a 01 push $0x1
2ff0: 68 d1 46 00 00 push $0x46d1
2ff5: ff 75 bc push -0x44(%ebp)
2ff8: e8 46 09 00 00 call 3943 <write>
2ffd: 83 c4 10 add $0x10,%esp
for (;;) { sleep(1000);
3000: 83 ec 0c sub $0xc,%esp
3003: 68 e8 03 00 00 push $0x3e8
3008: e8 1e 09 00 00 call 392b <sleep>
300d: 83 c4 10 add $0x10,%esp
3010: eb ee jmp 3000 <sbrktest+0x2c0>
sbrk(-(sbrk(0) - oldbrk));
3012: 83 ec 0c sub $0xc,%esp
3015: 6a 00 push $0x0
3017: e8 07 09 00 00 call 3923 <sbrk>
301c: 89 c2 mov %eax,%edx
301e: 8b 45 a4 mov -0x5c(%ebp),%eax
3021: 29 d0 sub %edx,%eax
3023: 89 04 24 mov %eax,(%esp)
3026: e8 f8 08 00 00 call 3923 <sbrk>
302b: 83 c4 10 add $0x10,%esp
302e: e9 7f ff ff ff jmp 2fb2 <sbrktest+0x272>
printf(stdout, "sbrk test failed %d %x %x\n", i, a, b);
3033: 83 ec 0c sub $0xc,%esp
3036: 50 push %eax
3037: 53 push %ebx
3038: 56 push %esi
3039: 68 73 4b 00 00 push $0x4b73
303e: ff 35 68 5e 00 00 push 0x5e68
3044: e8 07 0a 00 00 call 3a50 <printf>
exit();
3049: 83 c4 20 add $0x20,%esp
304c: e8 82 08 00 00 call 38d3 <exit>
printf(stdout, "fork failed\n");
3051: 83 ec 08 sub $0x8,%esp
3054: 68 b9 4c 00 00 push $0x4cb9
3059: ff 35 68 5e 00 00 push 0x5e68
305f: e8 ec 09 00 00 call 3a50 <printf>
exit();
3064: e8 6a 08 00 00 call 38d3 <exit>
printf(stdout, "oops could read %x = %x\n", a, *a);
3069: 0f be 03 movsbl (%ebx),%eax
306c: 50 push %eax
306d: 53 push %ebx
306e: 68 dc 4b 00 00 push $0x4bdc
3073: ff 35 68 5e 00 00 push 0x5e68
3079: e8 d2 09 00 00 call 3a50 <printf>
kill(ppid);
307e: 89 34 24 mov %esi,(%esp)
3081: e8 6d 08 00 00 call 38f3 <kill>
exit();
3086: e8 48 08 00 00 call 38d3 <exit>
printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c);
308b: 50 push %eax
308c: 53 push %ebx
308d: 68 bc 53 00 00 push $0x53bc
3092: ff 35 68 5e 00 00 push 0x5e68
3098: e8 b3 09 00 00 call 3a50 <printf>
exit();
309d: e8 31 08 00 00 call 38d3 <exit>
printf(stdout, "sbrk test failed to grow big address space; enough phys mem?\n");
30a2: 56 push %esi
30a3: 56 push %esi
30a4: 68 ec 52 00 00 push $0x52ec
30a9: ff 35 68 5e 00 00 push 0x5e68
30af: e8 9c 09 00 00 call 3a50 <printf>
exit();
30b4: e8 1a 08 00 00 call 38d3 <exit>
printf(stdout, "sbrk test fork failed\n");
30b9: 50 push %eax
30ba: 50 push %eax
30bb: 68 8e 4b 00 00 push $0x4b8e
30c0: ff 35 68 5e 00 00 push 0x5e68
30c6: e8 85 09 00 00 call 3a50 <printf>
exit();
30cb: e8 03 08 00 00 call 38d3 <exit>
printf(stdout, "sbrk de-allocation didn't really deallocate\n");
30d0: 51 push %ecx
30d1: 51 push %ecx
30d2: 68 8c 53 00 00 push $0x538c
30d7: ff 35 68 5e 00 00 push 0x5e68
30dd: e8 6e 09 00 00 call 3a50 <printf>
exit();
30e2: e8 ec 07 00 00 call 38d3 <exit>
printf(stdout, "failed sbrk leaked memory\n");
30e7: 50 push %eax
30e8: 50 push %eax
30e9: 68 f5 4b 00 00 push $0x4bf5
30ee: ff 35 68 5e 00 00 push 0x5e68
30f4: e8 57 09 00 00 call 3a50 <printf>
exit();
30f9: e8 d5 07 00 00 call 38d3 <exit>
printf(1, "pipe() failed\n");
30fe: 52 push %edx
30ff: 52 push %edx
3100: 68 b1 40 00 00 push $0x40b1
3105: 6a 01 push $0x1
3107: e8 44 09 00 00 call 3a50 <printf>
exit();
310c: e8 c2 07 00 00 call 38d3 <exit>
exit();
3111: e8 bd 07 00 00 call 38d3 <exit>
printf(stdout, "sbrk test failed post-fork\n");
3116: 57 push %edi
3117: 57 push %edi
3118: 68 a5 4b 00 00 push $0x4ba5
311d: ff 35 68 5e 00 00 push 0x5e68
3123: e8 28 09 00 00 call 3a50 <printf>
exit();
3128: e8 a6 07 00 00 call 38d3 <exit>
printf(stdout, "sbrk re-allocation failed, a %x c %x\n", a, c);
312d: 56 push %esi
312e: 53 push %ebx
312f: 68 64 53 00 00 push $0x5364
3134: ff 35 68 5e 00 00 push 0x5e68
313a: e8 11 09 00 00 call 3a50 <printf>
exit();
313f: e8 8f 07 00 00 call 38d3 <exit>
printf(stdout, "sbrk deallocation produced wrong address, a %x c %x\n", a, c);
3144: 50 push %eax
3145: 53 push %ebx
3146: 68 2c 53 00 00 push $0x532c
314b: ff 35 68 5e 00 00 push 0x5e68
3151: e8 fa 08 00 00 call 3a50 <printf>
exit();
3156: e8 78 07 00 00 call 38d3 <exit>
printf(stdout, "sbrk could not deallocate\n");
315b: 53 push %ebx
315c: 53 push %ebx
315d: 68 c1 4b 00 00 push $0x4bc1
3162: ff 35 68 5e 00 00 push 0x5e68
3168: e8 e3 08 00 00 call 3a50 <printf>
exit();
316d: e8 61 07 00 00 call 38d3 <exit>
3172: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
3179: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
00003180 <validateint>:
}
3180: c3 ret
3181: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
3188: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
318f: 90 nop
00003190 <validatetest>:
void validatetest(void) {
3190: 55 push %ebp
3191: 89 e5 mov %esp,%ebp
3193: 56 push %esi
for (p = 0; p <= (uint)hi; p += 4096) {
3194: 31 f6 xor %esi,%esi
void validatetest(void) {
3196: 53 push %ebx
printf(stdout, "validate test\n");
3197: 83 ec 08 sub $0x8,%esp
319a: 68 1e 4c 00 00 push $0x4c1e
319f: ff 35 68 5e 00 00 push 0x5e68
31a5: e8 a6 08 00 00 call 3a50 <printf>
31aa: 83 c4 10 add $0x10,%esp
31ad: 8d 76 00 lea 0x0(%esi),%esi
if ((pid = fork()) == 0) {
31b0: e8 16 07 00 00 call 38cb <fork>
31b5: 89 c3 mov %eax,%ebx
31b7: 85 c0 test %eax,%eax
31b9: 74 63 je 321e <validatetest+0x8e>
sleep(0);
31bb: 83 ec 0c sub $0xc,%esp
31be: 6a 00 push $0x0
31c0: e8 66 07 00 00 call 392b <sleep>
sleep(0);
31c5: c7 04 24 00 00 00 00 movl $0x0,(%esp)
31cc: e8 5a 07 00 00 call 392b <sleep>
kill(pid);
31d1: 89 1c 24 mov %ebx,(%esp)
31d4: e8 1a 07 00 00 call 38f3 <kill>
wait();
31d9: e8 fd 06 00 00 call 38db <wait>
if (link("nosuchfile", (char*)p) != -1) {
31de: 58 pop %eax
31df: 5a pop %edx
31e0: 56 push %esi
31e1: 68 2d 4c 00 00 push $0x4c2d
31e6: e8 70 07 00 00 call 395b <link>
31eb: 83 c4 10 add $0x10,%esp
31ee: 83 f8 ff cmp $0xffffffff,%eax
31f1: 75 30 jne 3223 <validatetest+0x93>
for (p = 0; p <= (uint)hi; p += 4096) {
31f3: 81 c6 00 10 00 00 add $0x1000,%esi
31f9: 81 fe 00 40 11 00 cmp $0x114000,%esi
31ff: 75 af jne 31b0 <validatetest+0x20>
printf(stdout, "validate ok\n");
3201: 83 ec 08 sub $0x8,%esp
3204: 68 51 4c 00 00 push $0x4c51
3209: ff 35 68 5e 00 00 push 0x5e68
320f: e8 3c 08 00 00 call 3a50 <printf>
}
3214: 83 c4 10 add $0x10,%esp
3217: 8d 65 f8 lea -0x8(%ebp),%esp
321a: 5b pop %ebx
321b: 5e pop %esi
321c: 5d pop %ebp
321d: c3 ret
exit();
321e: e8 b0 06 00 00 call 38d3 <exit>
printf(stdout, "link should not succeed\n");
3223: 83 ec 08 sub $0x8,%esp
3226: 68 38 4c 00 00 push $0x4c38
322b: ff 35 68 5e 00 00 push 0x5e68
3231: e8 1a 08 00 00 call 3a50 <printf>
exit();
3236: e8 98 06 00 00 call 38d3 <exit>
323b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
323f: 90 nop
00003240 <bsstest>:
void bsstest(void) {
3240: 55 push %ebp
3241: 89 e5 mov %esp,%ebp
3243: 83 ec 10 sub $0x10,%esp
printf(stdout, "bss test\n");
3246: 68 5e 4c 00 00 push $0x4c5e
324b: ff 35 68 5e 00 00 push 0x5e68
3251: e8 fa 07 00 00 call 3a50 <printf>
3256: 83 c4 10 add $0x10,%esp
for (i = 0; i < sizeof(uninit); i++) {
3259: 31 c0 xor %eax,%eax
325b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
325f: 90 nop
if (uninit[i] != '\0') {
3260: 80 b8 80 5e 00 00 00 cmpb $0x0,0x5e80(%eax)
3267: 75 22 jne 328b <bsstest+0x4b>
for (i = 0; i < sizeof(uninit); i++) {
3269: 83 c0 01 add $0x1,%eax
326c: 3d 10 27 00 00 cmp $0x2710,%eax
3271: 75 ed jne 3260 <bsstest+0x20>
printf(stdout, "bss test ok\n");
3273: 83 ec 08 sub $0x8,%esp
3276: 68 79 4c 00 00 push $0x4c79
327b: ff 35 68 5e 00 00 push 0x5e68
3281: e8 ca 07 00 00 call 3a50 <printf>
}
3286: 83 c4 10 add $0x10,%esp
3289: c9 leave
328a: c3 ret
printf(stdout, "bss test failed\n");
328b: 83 ec 08 sub $0x8,%esp
328e: 68 68 4c 00 00 push $0x4c68
3293: ff 35 68 5e 00 00 push 0x5e68
3299: e8 b2 07 00 00 call 3a50 <printf>
exit();
329e: e8 30 06 00 00 call 38d3 <exit>
32a3: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
32aa: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
000032b0 <bigargtest>:
void bigargtest(void) {
32b0: 55 push %ebp
32b1: 89 e5 mov %esp,%ebp
32b3: 83 ec 14 sub $0x14,%esp
unlink("bigarg-ok");
32b6: 68 86 4c 00 00 push $0x4c86
32bb: e8 93 06 00 00 call 3953 <unlink>
pid = fork();
32c0: e8 06 06 00 00 call 38cb <fork>
if (pid == 0) {
32c5: 83 c4 10 add $0x10,%esp
32c8: 85 c0 test %eax,%eax
32ca: 74 44 je 3310 <bigargtest+0x60>
else if (pid < 0) {
32cc: 0f 88 c5 00 00 00 js 3397 <bigargtest+0xe7>
wait();
32d2: e8 04 06 00 00 call 38db <wait>
fd = open("bigarg-ok", 0);
32d7: 83 ec 08 sub $0x8,%esp
32da: 6a 00 push $0x0
32dc: 68 86 4c 00 00 push $0x4c86
32e1: e8 55 06 00 00 call 393b <open>
if (fd < 0) {
32e6: 83 c4 10 add $0x10,%esp
32e9: 85 c0 test %eax,%eax
32eb: 0f 88 8f 00 00 00 js 3380 <bigargtest+0xd0>
close(fd);
32f1: 83 ec 0c sub $0xc,%esp
32f4: 50 push %eax
32f5: e8 71 06 00 00 call 396b <close>
unlink("bigarg-ok");
32fa: c7 04 24 86 4c 00 00 movl $0x4c86,(%esp)
3301: e8 4d 06 00 00 call 3953 <unlink>
}
3306: 83 c4 10 add $0x10,%esp
3309: c9 leave
330a: c3 ret
330b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
330f: 90 nop
args[i] = "bigargs test: failed\n ";
3310: c7 04 85 a0 a5 00 00 movl $0x53e0,0xa5a0(,%eax,4)
3317: e0 53 00 00
for (i = 0; i < MAXARG - 1; i++) {
331b: 83 c0 01 add $0x1,%eax
331e: 83 f8 1f cmp $0x1f,%eax
3321: 75 ed jne 3310 <bigargtest+0x60>
printf(stdout, "bigarg test\n");
3323: 51 push %ecx
3324: 51 push %ecx
3325: 68 90 4c 00 00 push $0x4c90
332a: ff 35 68 5e 00 00 push 0x5e68
args[MAXARG - 1] = 0;
3330: c7 05 1c a6 00 00 00 movl $0x0,0xa61c
3337: 00 00 00
printf(stdout, "bigarg test\n");
333a: e8 11 07 00 00 call 3a50 <printf>
exec("echo", args);
333f: 58 pop %eax
3340: 5a pop %edx
3341: 68 a0 a5 00 00 push $0xa5a0
3346: 68 5d 3e 00 00 push $0x3e5d
334b: e8 ab 05 00 00 call 38fb <exec>
printf(stdout, "bigarg test ok\n");
3350: 59 pop %ecx
3351: 58 pop %eax
3352: 68 9d 4c 00 00 push $0x4c9d
3357: ff 35 68 5e 00 00 push 0x5e68
335d: e8 ee 06 00 00 call 3a50 <printf>
fd = open("bigarg-ok", O_CREATE);
3362: 58 pop %eax
3363: 5a pop %edx
3364: 68 00 02 00 00 push $0x200
3369: 68 86 4c 00 00 push $0x4c86
336e: e8 c8 05 00 00 call 393b <open>
close(fd);
3373: 89 04 24 mov %eax,(%esp)
3376: e8 f0 05 00 00 call 396b <close>
exit();
337b: e8 53 05 00 00 call 38d3 <exit>
printf(stdout, "bigarg test failed!\n");
3380: 50 push %eax
3381: 50 push %eax
3382: 68 c6 4c 00 00 push $0x4cc6
3387: ff 35 68 5e 00 00 push 0x5e68
338d: e8 be 06 00 00 call 3a50 <printf>
exit();
3392: e8 3c 05 00 00 call 38d3 <exit>
printf(stdout, "bigargtest: fork failed\n");
3397: 52 push %edx
3398: 52 push %edx
3399: 68 ad 4c 00 00 push $0x4cad
339e: ff 35 68 5e 00 00 push 0x5e68
33a4: e8 a7 06 00 00 call 3a50 <printf>
exit();
33a9: e8 25 05 00 00 call 38d3 <exit>
33ae: 66 90 xchg %ax,%ax
000033b0 <fsfull>:
void fsfull() {
33b0: 55 push %ebp
33b1: 89 e5 mov %esp,%ebp
33b3: 57 push %edi
33b4: 56 push %esi
for (nfiles = 0;; nfiles++) {
33b5: 31 f6 xor %esi,%esi
void fsfull() {
33b7: 53 push %ebx
33b8: 83 ec 54 sub $0x54,%esp
printf(1, "fsfull test\n");
33bb: 68 db 4c 00 00 push $0x4cdb
33c0: 6a 01 push $0x1
33c2: e8 89 06 00 00 call 3a50 <printf>
33c7: 83 c4 10 add $0x10,%esp
33ca: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
name[1] = '0' + nfiles / 1000;
33d0: b8 d3 4d 62 10 mov $0x10624dd3,%eax
name[3] = '0' + (nfiles % 100) / 10;
33d5: b9 cd cc cc cc mov $0xcccccccd,%ecx
printf(1, "writing %s\n", name);
33da: 83 ec 04 sub $0x4,%esp
name[0] = 'f';
33dd: c6 45 a8 66 movb $0x66,-0x58(%ebp)
name[1] = '0' + nfiles / 1000;
33e1: f7 e6 mul %esi
name[5] = '\0';
33e3: c6 45 ad 00 movb $0x0,-0x53(%ebp)
name[1] = '0' + nfiles / 1000;
33e7: c1 ea 06 shr $0x6,%edx
33ea: 8d 42 30 lea 0x30(%edx),%eax
33ed: 88 45 a9 mov %al,-0x57(%ebp)
name[2] = '0' + (nfiles % 1000) / 100;
33f0: 69 c2 e8 03 00 00 imul $0x3e8,%edx,%eax
33f6: 89 f2 mov %esi,%edx
33f8: 29 c2 sub %eax,%edx
33fa: b8 1f 85 eb 51 mov $0x51eb851f,%eax
33ff: f7 e2 mul %edx
name[3] = '0' + (nfiles % 100) / 10;
3401: b8 1f 85 eb 51 mov $0x51eb851f,%eax
name[2] = '0' + (nfiles % 1000) / 100;
3406: c1 ea 05 shr $0x5,%edx
3409: 83 c2 30 add $0x30,%edx
340c: 88 55 aa mov %dl,-0x56(%ebp)
name[3] = '0' + (nfiles % 100) / 10;
340f: f7 e6 mul %esi
3411: c1 ea 05 shr $0x5,%edx
3414: 6b c2 64 imul $0x64,%edx,%eax
3417: 89 f2 mov %esi,%edx
3419: 29 c2 sub %eax,%edx
341b: 89 d0 mov %edx,%eax
341d: f7 e1 mul %ecx
name[4] = '0' + (nfiles % 10);
341f: 89 f0 mov %esi,%eax
name[3] = '0' + (nfiles % 100) / 10;
3421: c1 ea 03 shr $0x3,%edx
3424: 83 c2 30 add $0x30,%edx
3427: 88 55 ab mov %dl,-0x55(%ebp)
name[4] = '0' + (nfiles % 10);
342a: f7 e1 mul %ecx
342c: 89 f0 mov %esi,%eax
342e: c1 ea 03 shr $0x3,%edx
3431: 8d 14 92 lea (%edx,%edx,4),%edx
3434: 01 d2 add %edx,%edx
3436: 29 d0 sub %edx,%eax
3438: 83 c0 30 add $0x30,%eax
343b: 88 45 ac mov %al,-0x54(%ebp)
printf(1, "writing %s\n", name);
343e: 8d 45 a8 lea -0x58(%ebp),%eax
3441: 50 push %eax
3442: 68 e8 4c 00 00 push $0x4ce8
3447: 6a 01 push $0x1
3449: e8 02 06 00 00 call 3a50 <printf>
int fd = open(name, O_CREATE | O_RDWR);
344e: 58 pop %eax
344f: 8d 45 a8 lea -0x58(%ebp),%eax
3452: 5a pop %edx
3453: 68 02 02 00 00 push $0x202
3458: 50 push %eax
3459: e8 dd 04 00 00 call 393b <open>
if (fd < 0) {
345e: 83 c4 10 add $0x10,%esp
int fd = open(name, O_CREATE | O_RDWR);
3461: 89 c7 mov %eax,%edi
if (fd < 0) {
3463: 85 c0 test %eax,%eax
3465: 78 4f js 34b6 <fsfull+0x106>
int total = 0;
3467: 31 db xor %ebx,%ebx
3469: eb 07 jmp 3472 <fsfull+0xc2>
346b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
346f: 90 nop
total += cc;
3470: 01 c3 add %eax,%ebx
int cc = write(fd, buf, 512);
3472: 83 ec 04 sub $0x4,%esp
3475: 68 00 02 00 00 push $0x200
347a: 68 a0 85 00 00 push $0x85a0
347f: 57 push %edi
3480: e8 be 04 00 00 call 3943 <write>
if (cc < 512) {
3485: 83 c4 10 add $0x10,%esp
3488: 3d ff 01 00 00 cmp $0x1ff,%eax
348d: 7f e1 jg 3470 <fsfull+0xc0>
printf(1, "wrote %d bytes\n", total);
348f: 83 ec 04 sub $0x4,%esp
3492: 53 push %ebx
3493: 68 04 4d 00 00 push $0x4d04
3498: 6a 01 push $0x1
349a: e8 b1 05 00 00 call 3a50 <printf>
close(fd);
349f: 89 3c 24 mov %edi,(%esp)
34a2: e8 c4 04 00 00 call 396b <close>
if (total == 0) {
34a7: 83 c4 10 add $0x10,%esp
34aa: 85 db test %ebx,%ebx
34ac: 74 1e je 34cc <fsfull+0x11c>
for (nfiles = 0;; nfiles++) {
34ae: 83 c6 01 add $0x1,%esi
34b1: e9 1a ff ff ff jmp 33d0 <fsfull+0x20>
printf(1, "open %s failed\n", name);
34b6: 83 ec 04 sub $0x4,%esp
34b9: 8d 45 a8 lea -0x58(%ebp),%eax
34bc: 50 push %eax
34bd: 68 f4 4c 00 00 push $0x4cf4
34c2: 6a 01 push $0x1
34c4: e8 87 05 00 00 call 3a50 <printf>
break;
34c9: 83 c4 10 add $0x10,%esp
name[1] = '0' + nfiles / 1000;
34cc: bf d3 4d 62 10 mov $0x10624dd3,%edi
name[2] = '0' + (nfiles % 1000) / 100;
34d1: bb 1f 85 eb 51 mov $0x51eb851f,%ebx
34d6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
34dd: 8d 76 00 lea 0x0(%esi),%esi
name[1] = '0' + nfiles / 1000;
34e0: 89 f0 mov %esi,%eax
unlink(name);
34e2: 83 ec 0c sub $0xc,%esp
name[0] = 'f';
34e5: c6 45 a8 66 movb $0x66,-0x58(%ebp)
name[1] = '0' + nfiles / 1000;
34e9: f7 e7 mul %edi
name[5] = '\0';
34eb: c6 45 ad 00 movb $0x0,-0x53(%ebp)
name[1] = '0' + nfiles / 1000;
34ef: c1 ea 06 shr $0x6,%edx
34f2: 8d 42 30 lea 0x30(%edx),%eax
34f5: 88 45 a9 mov %al,-0x57(%ebp)
name[2] = '0' + (nfiles % 1000) / 100;
34f8: 69 c2 e8 03 00 00 imul $0x3e8,%edx,%eax
34fe: 89 f2 mov %esi,%edx
3500: 29 c2 sub %eax,%edx
3502: 89 d0 mov %edx,%eax
3504: f7 e3 mul %ebx
name[3] = '0' + (nfiles % 100) / 10;
3506: 89 f0 mov %esi,%eax
name[2] = '0' + (nfiles % 1000) / 100;
3508: c1 ea 05 shr $0x5,%edx
350b: 83 c2 30 add $0x30,%edx
350e: 88 55 aa mov %dl,-0x56(%ebp)
name[3] = '0' + (nfiles % 100) / 10;
3511: f7 e3 mul %ebx
3513: c1 ea 05 shr $0x5,%edx
3516: 6b ca 64 imul $0x64,%edx,%ecx
3519: 89 f2 mov %esi,%edx
351b: 29 ca sub %ecx,%edx
351d: b9 cd cc cc cc mov $0xcccccccd,%ecx
3522: 89 d0 mov %edx,%eax
3524: f7 e1 mul %ecx
name[4] = '0' + (nfiles % 10);
3526: 89 f0 mov %esi,%eax
name[3] = '0' + (nfiles % 100) / 10;
3528: c1 ea 03 shr $0x3,%edx
352b: 83 c2 30 add $0x30,%edx
352e: 88 55 ab mov %dl,-0x55(%ebp)
name[4] = '0' + (nfiles % 10);
3531: f7 e1 mul %ecx
3533: 89 f0 mov %esi,%eax
nfiles--;
3535: 83 ee 01 sub $0x1,%esi
name[4] = '0' + (nfiles % 10);
3538: c1 ea 03 shr $0x3,%edx
353b: 8d 14 92 lea (%edx,%edx,4),%edx
353e: 01 d2 add %edx,%edx
3540: 29 d0 sub %edx,%eax
3542: 83 c0 30 add $0x30,%eax
3545: 88 45 ac mov %al,-0x54(%ebp)
unlink(name);
3548: 8d 45 a8 lea -0x58(%ebp),%eax
354b: 50 push %eax
354c: e8 02 04 00 00 call 3953 <unlink>
while (nfiles >= 0) {
3551: 83 c4 10 add $0x10,%esp
3554: 83 fe ff cmp $0xffffffff,%esi
3557: 75 87 jne 34e0 <fsfull+0x130>
printf(1, "fsfull test finished\n");
3559: 83 ec 08 sub $0x8,%esp
355c: 68 14 4d 00 00 push $0x4d14
3561: 6a 01 push $0x1
3563: e8 e8 04 00 00 call 3a50 <printf>
}
3568: 83 c4 10 add $0x10,%esp
356b: 8d 65 f4 lea -0xc(%ebp),%esp
356e: 5b pop %ebx
356f: 5e pop %esi
3570: 5f pop %edi
3571: 5d pop %ebp
3572: c3 ret
3573: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
357a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
00003580 <uio>:
void uio() {
3580: 55 push %ebp
3581: 89 e5 mov %esp,%ebp
3583: 83 ec 10 sub $0x10,%esp
printf(1, "uio test\n");
3586: 68 2a 4d 00 00 push $0x4d2a
358b: 6a 01 push $0x1
358d: e8 be 04 00 00 call 3a50 <printf>
pid = fork();
3592: e8 34 03 00 00 call 38cb <fork>
if (pid == 0) {
3597: 83 c4 10 add $0x10,%esp
359a: 85 c0 test %eax,%eax
359c: 74 1b je 35b9 <uio+0x39>
else if (pid < 0) {
359e: 78 3d js 35dd <uio+0x5d>
wait();
35a0: e8 36 03 00 00 call 38db <wait>
printf(1, "uio test done\n");
35a5: 83 ec 08 sub $0x8,%esp
35a8: 68 34 4d 00 00 push $0x4d34
35ad: 6a 01 push $0x1
35af: e8 9c 04 00 00 call 3a50 <printf>
}
35b4: 83 c4 10 add $0x10,%esp
35b7: c9 leave
35b8: c3 ret
asm volatile ("outb %0,%1" : : "a" (val), "d" (port));
35b9: b8 09 00 00 00 mov $0x9,%eax
35be: ba 70 00 00 00 mov $0x70,%edx
35c3: ee out %al,(%dx)
asm volatile ("inb %1,%0" : "=a" (val) : "d" (port));
35c4: ba 71 00 00 00 mov $0x71,%edx
35c9: ec in (%dx),%al
printf(1, "uio: uio succeeded; test FAILED\n");
35ca: 52 push %edx
35cb: 52 push %edx
35cc: 68 c0 54 00 00 push $0x54c0
35d1: 6a 01 push $0x1
35d3: e8 78 04 00 00 call 3a50 <printf>
exit();
35d8: e8 f6 02 00 00 call 38d3 <exit>
printf(1, "fork failed\n");
35dd: 50 push %eax
35de: 50 push %eax
35df: 68 b9 4c 00 00 push $0x4cb9
35e4: 6a 01 push $0x1
35e6: e8 65 04 00 00 call 3a50 <printf>
exit();
35eb: e8 e3 02 00 00 call 38d3 <exit>
000035f0 <argptest>:
void argptest(){
35f0: 55 push %ebp
35f1: 89 e5 mov %esp,%ebp
35f3: 53 push %ebx
35f4: 83 ec 0c sub $0xc,%esp
fd = open("init", O_RDONLY);
35f7: 6a 00 push $0x0
35f9: 68 43 4d 00 00 push $0x4d43
35fe: e8 38 03 00 00 call 393b <open>
if (fd < 0) {
3603: 83 c4 10 add $0x10,%esp
3606: 85 c0 test %eax,%eax
3608: 78 39 js 3643 <argptest+0x53>
read(fd, sbrk(0) - 1, -1);
360a: 83 ec 0c sub $0xc,%esp
360d: 89 c3 mov %eax,%ebx
360f: 6a 00 push $0x0
3611: e8 0d 03 00 00 call 3923 <sbrk>
3616: 83 c4 0c add $0xc,%esp
3619: 83 e8 01 sub $0x1,%eax
361c: 6a ff push $0xffffffff
361e: 50 push %eax
361f: 53 push %ebx
3620: e8 c6 02 00 00 call 38eb <read>
close(fd);
3625: 89 1c 24 mov %ebx,(%esp)
3628: e8 3e 03 00 00 call 396b <close>
printf(1, "arg test passed\n");
362d: 58 pop %eax
362e: 5a pop %edx
362f: 68 55 4d 00 00 push $0x4d55
3634: 6a 01 push $0x1
3636: e8 15 04 00 00 call 3a50 <printf>
}
363b: 8b 5d fc mov -0x4(%ebp),%ebx
363e: 83 c4 10 add $0x10,%esp
3641: c9 leave
3642: c3 ret
printf(2, "open failed\n");
3643: 51 push %ecx
3644: 51 push %ecx
3645: 68 48 4d 00 00 push $0x4d48
364a: 6a 02 push $0x2
364c: e8 ff 03 00 00 call 3a50 <printf>
exit();
3651: e8 7d 02 00 00 call 38d3 <exit>
3656: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
365d: 8d 76 00 lea 0x0(%esi),%esi
00003660 <rand>:
randstate = randstate * 1664525 + 1013904223;
3660: 69 05 64 5e 00 00 0d imul $0x19660d,0x5e64,%eax
3667: 66 19 00
366a: 05 5f f3 6e 3c add $0x3c6ef35f,%eax
366f: a3 64 5e 00 00 mov %eax,0x5e64
}
3674: c3 ret
3675: 66 90 xchg %ax,%ax
3677: 66 90 xchg %ax,%ax
3679: 66 90 xchg %ax,%ax
367b: 66 90 xchg %ax,%ax
367d: 66 90 xchg %ax,%ax
367f: 90 nop
00003680 <strcpy>:
#include "stat.h"
#include "fcntl.h"
#include "user.h"
#include "x86.h"
char*strcpy(char *s, const char *t) {
3680: 55 push %ebp
char *os;
os = s;
while ((*s++ = *t++) != 0) {
3681: 31 c0 xor %eax,%eax
char*strcpy(char *s, const char *t) {
3683: 89 e5 mov %esp,%ebp
3685: 53 push %ebx
3686: 8b 4d 08 mov 0x8(%ebp),%ecx
3689: 8b 5d 0c mov 0xc(%ebp),%ebx
368c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
while ((*s++ = *t++) != 0) {
3690: 0f b6 14 03 movzbl (%ebx,%eax,1),%edx
3694: 88 14 01 mov %dl,(%ecx,%eax,1)
3697: 83 c0 01 add $0x1,%eax
369a: 84 d2 test %dl,%dl
369c: 75 f2 jne 3690 <strcpy+0x10>
;
}
return os;
}
369e: 8b 5d fc mov -0x4(%ebp),%ebx
36a1: 89 c8 mov %ecx,%eax
36a3: c9 leave
36a4: c3 ret
36a5: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
36ac: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
000036b0 <strcmp>:
int strcmp(const char *p, const char *q) {
36b0: 55 push %ebp
36b1: 89 e5 mov %esp,%ebp
36b3: 53 push %ebx
36b4: 8b 55 08 mov 0x8(%ebp),%edx
36b7: 8b 4d 0c mov 0xc(%ebp),%ecx
while (*p && *p == *q) {
36ba: 0f b6 02 movzbl (%edx),%eax
36bd: 84 c0 test %al,%al
36bf: 75 17 jne 36d8 <strcmp+0x28>
36c1: eb 3a jmp 36fd <strcmp+0x4d>
36c3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
36c7: 90 nop
36c8: 0f b6 42 01 movzbl 0x1(%edx),%eax
p++, q++;
36cc: 83 c2 01 add $0x1,%edx
36cf: 8d 59 01 lea 0x1(%ecx),%ebx
while (*p && *p == *q) {
36d2: 84 c0 test %al,%al
36d4: 74 1a je 36f0 <strcmp+0x40>
p++, q++;
36d6: 89 d9 mov %ebx,%ecx
while (*p && *p == *q) {
36d8: 0f b6 19 movzbl (%ecx),%ebx
36db: 38 c3 cmp %al,%bl
36dd: 74 e9 je 36c8 <strcmp+0x18>
}
return (uchar) * p - (uchar) * q;
36df: 29 d8 sub %ebx,%eax
}
36e1: 8b 5d fc mov -0x4(%ebp),%ebx
36e4: c9 leave
36e5: c3 ret
36e6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
36ed: 8d 76 00 lea 0x0(%esi),%esi
return (uchar) * p - (uchar) * q;
36f0: 0f b6 59 01 movzbl 0x1(%ecx),%ebx
36f4: 31 c0 xor %eax,%eax
36f6: 29 d8 sub %ebx,%eax
}
36f8: 8b 5d fc mov -0x4(%ebp),%ebx
36fb: c9 leave
36fc: c3 ret
return (uchar) * p - (uchar) * q;
36fd: 0f b6 19 movzbl (%ecx),%ebx
3700: 31 c0 xor %eax,%eax
3702: eb db jmp 36df <strcmp+0x2f>
3704: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
370b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
370f: 90 nop
00003710 <strlen>:
uint strlen(const char *s) {
3710: 55 push %ebp
3711: 89 e5 mov %esp,%ebp
3713: 8b 55 08 mov 0x8(%ebp),%edx
int n;
for (n = 0; s[n]; n++) {
3716: 80 3a 00 cmpb $0x0,(%edx)
3719: 74 15 je 3730 <strlen+0x20>
371b: 31 c0 xor %eax,%eax
371d: 8d 76 00 lea 0x0(%esi),%esi
3720: 83 c0 01 add $0x1,%eax
3723: 80 3c 02 00 cmpb $0x0,(%edx,%eax,1)
3727: 89 c1 mov %eax,%ecx
3729: 75 f5 jne 3720 <strlen+0x10>
;
}
return n;
}
372b: 89 c8 mov %ecx,%eax
372d: 5d pop %ebp
372e: c3 ret
372f: 90 nop
for (n = 0; s[n]; n++) {
3730: 31 c9 xor %ecx,%ecx
}
3732: 5d pop %ebp
3733: 89 c8 mov %ecx,%eax
3735: c3 ret
3736: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
373d: 8d 76 00 lea 0x0(%esi),%esi
00003740 <memset>:
void* memset(void *dst, int c, uint n) {
3740: 55 push %ebp
3741: 89 e5 mov %esp,%ebp
3743: 57 push %edi
3744: 8b 55 08 mov 0x8(%ebp),%edx
"d" (port), "0" (addr), "1" (cnt) :
"cc");
}
static inline void stosb(void *addr, int data, int cnt) {
asm volatile ("cld; rep stosb" :
3747: 8b 4d 10 mov 0x10(%ebp),%ecx
374a: 8b 45 0c mov 0xc(%ebp),%eax
374d: 89 d7 mov %edx,%edi
374f: fc cld
3750: f3 aa rep stos %al,%es:(%edi)
stosb(dst, c, n);
return dst;
}
3752: 8b 7d fc mov -0x4(%ebp),%edi
3755: 89 d0 mov %edx,%eax
3757: c9 leave
3758: c3 ret
3759: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
00003760 <strchr>:
char* strchr(const char *s, char c) {
3760: 55 push %ebp
3761: 89 e5 mov %esp,%ebp
3763: 8b 45 08 mov 0x8(%ebp),%eax
3766: 0f b6 4d 0c movzbl 0xc(%ebp),%ecx
for (; *s; s++) {
376a: 0f b6 10 movzbl (%eax),%edx
376d: 84 d2 test %dl,%dl
376f: 75 12 jne 3783 <strchr+0x23>
3771: eb 1d jmp 3790 <strchr+0x30>
3773: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
3777: 90 nop
3778: 0f b6 50 01 movzbl 0x1(%eax),%edx
377c: 83 c0 01 add $0x1,%eax
377f: 84 d2 test %dl,%dl
3781: 74 0d je 3790 <strchr+0x30>
if (*s == c) {
3783: 38 d1 cmp %dl,%cl
3785: 75 f1 jne 3778 <strchr+0x18>
return (char*)s;
}
}
return 0;
}
3787: 5d pop %ebp
3788: c3 ret
3789: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
return 0;
3790: 31 c0 xor %eax,%eax
}
3792: 5d pop %ebp
3793: c3 ret
3794: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
379b: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
379f: 90 nop
000037a0 <gets>:
char* gets(char *buf, int max) {
37a0: 55 push %ebp
37a1: 89 e5 mov %esp,%ebp
37a3: 57 push %edi
37a4: 56 push %esi
int i, cc;
char c;
for (i = 0; i + 1 < max;) {
cc = read(0, &c, 1);
37a5: 8d 7d e7 lea -0x19(%ebp),%edi
char* gets(char *buf, int max) {
37a8: 53 push %ebx
for (i = 0; i + 1 < max;) {
37a9: 31 db xor %ebx,%ebx
char* gets(char *buf, int max) {
37ab: 83 ec 1c sub $0x1c,%esp
for (i = 0; i + 1 < max;) {
37ae: eb 27 jmp 37d7 <gets+0x37>
cc = read(0, &c, 1);
37b0: 83 ec 04 sub $0x4,%esp
37b3: 6a 01 push $0x1
37b5: 57 push %edi
37b6: 6a 00 push $0x0
37b8: e8 2e 01 00 00 call 38eb <read>
if (cc < 1) {
37bd: 83 c4 10 add $0x10,%esp
37c0: 85 c0 test %eax,%eax
37c2: 7e 1d jle 37e1 <gets+0x41>
break;
}
buf[i++] = c;
37c4: 0f b6 45 e7 movzbl -0x19(%ebp),%eax
37c8: 8b 55 08 mov 0x8(%ebp),%edx
37cb: 88 44 1a ff mov %al,-0x1(%edx,%ebx,1)
if (c == '\n' || c == '\r') {
37cf: 3c 0a cmp $0xa,%al
37d1: 74 1d je 37f0 <gets+0x50>
37d3: 3c 0d cmp $0xd,%al
37d5: 74 19 je 37f0 <gets+0x50>
for (i = 0; i + 1 < max;) {
37d7: 89 de mov %ebx,%esi
37d9: 83 c3 01 add $0x1,%ebx
37dc: 3b 5d 0c cmp 0xc(%ebp),%ebx
37df: 7c cf jl 37b0 <gets+0x10>
break;
}
}
buf[i] = '\0';
37e1: 8b 45 08 mov 0x8(%ebp),%eax
37e4: c6 04 30 00 movb $0x0,(%eax,%esi,1)
return buf;
}
37e8: 8d 65 f4 lea -0xc(%ebp),%esp
37eb: 5b pop %ebx
37ec: 5e pop %esi
37ed: 5f pop %edi
37ee: 5d pop %ebp
37ef: c3 ret
buf[i] = '\0';
37f0: 8b 45 08 mov 0x8(%ebp),%eax
37f3: 89 de mov %ebx,%esi
37f5: c6 04 30 00 movb $0x0,(%eax,%esi,1)
}
37f9: 8d 65 f4 lea -0xc(%ebp),%esp
37fc: 5b pop %ebx
37fd: 5e pop %esi
37fe: 5f pop %edi
37ff: 5d pop %ebp
3800: c3 ret
3801: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
3808: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
380f: 90 nop
00003810 <stat>:
int stat(const char *n, struct stat *st) {
3810: 55 push %ebp
3811: 89 e5 mov %esp,%ebp
3813: 56 push %esi
3814: 53 push %ebx
int fd;
int r;
fd = open(n, O_RDONLY);
3815: 83 ec 08 sub $0x8,%esp
3818: 6a 00 push $0x0
381a: ff 75 08 push 0x8(%ebp)
381d: e8 19 01 00 00 call 393b <open>
if (fd < 0) {
3822: 83 c4 10 add $0x10,%esp
3825: 85 c0 test %eax,%eax
3827: 78 27 js 3850 <stat+0x40>
return -1;
}
r = fstat(fd, st);
3829: 83 ec 08 sub $0x8,%esp
382c: ff 75 0c push 0xc(%ebp)
382f: 89 c3 mov %eax,%ebx
3831: 50 push %eax
3832: e8 cc 00 00 00 call 3903 <fstat>
close(fd);
3837: 89 1c 24 mov %ebx,(%esp)
r = fstat(fd, st);
383a: 89 c6 mov %eax,%esi
close(fd);
383c: e8 2a 01 00 00 call 396b <close>
return r;
3841: 83 c4 10 add $0x10,%esp
}
3844: 8d 65 f8 lea -0x8(%ebp),%esp
3847: 89 f0 mov %esi,%eax
3849: 5b pop %ebx
384a: 5e pop %esi
384b: 5d pop %ebp
384c: c3 ret
384d: 8d 76 00 lea 0x0(%esi),%esi
return -1;
3850: be ff ff ff ff mov $0xffffffff,%esi
3855: eb ed jmp 3844 <stat+0x34>
3857: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
385e: 66 90 xchg %ax,%ax
00003860 <atoi>:
int atoi(const char *s) {
3860: 55 push %ebp
3861: 89 e5 mov %esp,%ebp
3863: 53 push %ebx
3864: 8b 55 08 mov 0x8(%ebp),%edx
int n;
n = 0;
while ('0' <= *s && *s <= '9') {
3867: 0f be 02 movsbl (%edx),%eax
386a: 8d 48 d0 lea -0x30(%eax),%ecx
386d: 80 f9 09 cmp $0x9,%cl
n = 0;
3870: b9 00 00 00 00 mov $0x0,%ecx
while ('0' <= *s && *s <= '9') {
3875: 77 1e ja 3895 <atoi+0x35>
3877: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
387e: 66 90 xchg %ax,%ax
n = n * 10 + *s++ - '0';
3880: 83 c2 01 add $0x1,%edx
3883: 8d 0c 89 lea (%ecx,%ecx,4),%ecx
3886: 8d 4c 48 d0 lea -0x30(%eax,%ecx,2),%ecx
while ('0' <= *s && *s <= '9') {
388a: 0f be 02 movsbl (%edx),%eax
388d: 8d 58 d0 lea -0x30(%eax),%ebx
3890: 80 fb 09 cmp $0x9,%bl
3893: 76 eb jbe 3880 <atoi+0x20>
}
return n;
}
3895: 8b 5d fc mov -0x4(%ebp),%ebx
3898: 89 c8 mov %ecx,%eax
389a: c9 leave
389b: c3 ret
389c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
000038a0 <memmove>:
void* memmove(void *vdst, const void *vsrc, int n) {
38a0: 55 push %ebp
38a1: 89 e5 mov %esp,%ebp
38a3: 57 push %edi
38a4: 8b 45 10 mov 0x10(%ebp),%eax
38a7: 8b 55 08 mov 0x8(%ebp),%edx
38aa: 56 push %esi
38ab: 8b 75 0c mov 0xc(%ebp),%esi
char *dst;
const char *src;
dst = vdst;
src = vsrc;
while (n-- > 0) {
38ae: 85 c0 test %eax,%eax
38b0: 7e 13 jle 38c5 <memmove+0x25>
38b2: 01 d0 add %edx,%eax
dst = vdst;
38b4: 89 d7 mov %edx,%edi
38b6: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
38bd: 8d 76 00 lea 0x0(%esi),%esi
*dst++ = *src++;
38c0: a4 movsb %ds:(%esi),%es:(%edi)
while (n-- > 0) {
38c1: 39 f8 cmp %edi,%eax
38c3: 75 fb jne 38c0 <memmove+0x20>
}
return vdst;
}
38c5: 5e pop %esi
38c6: 89 d0 mov %edx,%eax
38c8: 5f pop %edi
38c9: 5d pop %ebp
38ca: c3 ret
000038cb <fork>:
name: \
movl $SYS_ ## name, %eax; \
int $T_SYSCALL; \
ret
SYSCALL(fork)
38cb: b8 01 00 00 00 mov $0x1,%eax
38d0: cd 40 int $0x40
38d2: c3 ret
000038d3 <exit>:
SYSCALL(exit)
38d3: b8 02 00 00 00 mov $0x2,%eax
38d8: cd 40 int $0x40
38da: c3 ret
000038db <wait>:
SYSCALL(wait)
38db: b8 03 00 00 00 mov $0x3,%eax
38e0: cd 40 int $0x40
38e2: c3 ret
000038e3 <pipe>:
SYSCALL(pipe)
38e3: b8 04 00 00 00 mov $0x4,%eax
38e8: cd 40 int $0x40
38ea: c3 ret
000038eb <read>:
SYSCALL(read)
38eb: b8 05 00 00 00 mov $0x5,%eax
38f0: cd 40 int $0x40
38f2: c3 ret
000038f3 <kill>:
SYSCALL(kill)
38f3: b8 06 00 00 00 mov $0x6,%eax
38f8: cd 40 int $0x40
38fa: c3 ret
000038fb <exec>:
SYSCALL(exec)
38fb: b8 07 00 00 00 mov $0x7,%eax
3900: cd 40 int $0x40
3902: c3 ret
00003903 <fstat>:
SYSCALL(fstat)
3903: b8 08 00 00 00 mov $0x8,%eax
3908: cd 40 int $0x40
390a: c3 ret
0000390b <chdir>:
SYSCALL(chdir)
390b: b8 09 00 00 00 mov $0x9,%eax
3910: cd 40 int $0x40
3912: c3 ret
00003913 <dup>:
SYSCALL(dup)
3913: b8 0a 00 00 00 mov $0xa,%eax
3918: cd 40 int $0x40
391a: c3 ret
0000391b <getpid>:
SYSCALL(getpid)
391b: b8 0b 00 00 00 mov $0xb,%eax
3920: cd 40 int $0x40
3922: c3 ret
00003923 <sbrk>:
SYSCALL(sbrk)
3923: b8 0c 00 00 00 mov $0xc,%eax
3928: cd 40 int $0x40
392a: c3 ret
0000392b <sleep>:
SYSCALL(sleep)
392b: b8 0d 00 00 00 mov $0xd,%eax
3930: cd 40 int $0x40
3932: c3 ret
00003933 <uptime>:
SYSCALL(uptime)
3933: b8 0e 00 00 00 mov $0xe,%eax
3938: cd 40 int $0x40
393a: c3 ret
0000393b <open>:
SYSCALL(open)
393b: b8 0f 00 00 00 mov $0xf,%eax
3940: cd 40 int $0x40
3942: c3 ret
00003943 <write>:
SYSCALL(write)
3943: b8 10 00 00 00 mov $0x10,%eax
3948: cd 40 int $0x40
394a: c3 ret
0000394b <mknod>:
SYSCALL(mknod)
394b: b8 11 00 00 00 mov $0x11,%eax
3950: cd 40 int $0x40
3952: c3 ret
00003953 <unlink>:
SYSCALL(unlink)
3953: b8 12 00 00 00 mov $0x12,%eax
3958: cd 40 int $0x40
395a: c3 ret
0000395b <link>:
SYSCALL(link)
395b: b8 13 00 00 00 mov $0x13,%eax
3960: cd 40 int $0x40
3962: c3 ret
00003963 <mkdir>:
SYSCALL(mkdir)
3963: b8 14 00 00 00 mov $0x14,%eax
3968: cd 40 int $0x40
396a: c3 ret
0000396b <close>:
SYSCALL(close)
396b: b8 15 00 00 00 mov $0x15,%eax
3970: cd 40 int $0x40
3972: c3 ret
00003973 <getch>:
SYSCALL(getch)
3973: b8 16 00 00 00 mov $0x16,%eax
3978: cd 40 int $0x40
397a: c3 ret
0000397b <greeting>:
SYSCALL(greeting)
397b: b8 17 00 00 00 mov $0x17,%eax
3980: cd 40 int $0x40
3982: c3 ret
00003983 <shutdown>:
SYSCALL(shutdown)
3983: b8 18 00 00 00 mov $0x18,%eax
3988: cd 40 int $0x40
398a: c3 ret
0000398b <screen>:
SYSCALL(screen)
398b: b8 19 00 00 00 mov $0x19,%eax
3990: cd 40 int $0x40
3992: c3 ret
00003993 <cls>:
SYSCALL(cls)
3993: b8 1a 00 00 00 mov $0x1a,%eax
3998: cd 40 int $0x40
399a: c3 ret
399b: 66 90 xchg %ax,%ax
399d: 66 90 xchg %ax,%ax
399f: 90 nop
000039a0 <printint>:
static void putc(int fd, char c) {
write(fd, &c, 1);
}
static void printint(int fd, int xx, int base, int sgn) {
39a0: 55 push %ebp
39a1: 89 e5 mov %esp,%ebp
39a3: 57 push %edi
39a4: 56 push %esi
39a5: 53 push %ebx
39a6: 83 ec 3c sub $0x3c,%esp
39a9: 89 4d c4 mov %ecx,-0x3c(%ebp)
uint x;
neg = 0;
if (sgn && xx < 0) {
neg = 1;
x = -xx;
39ac: 89 d1 mov %edx,%ecx
static void printint(int fd, int xx, int base, int sgn) {
39ae: 89 45 b8 mov %eax,-0x48(%ebp)
if (sgn && xx < 0) {
39b1: 85 d2 test %edx,%edx
39b3: 0f 89 7f 00 00 00 jns 3a38 <printint+0x98>
39b9: f6 45 08 01 testb $0x1,0x8(%ebp)
39bd: 74 79 je 3a38 <printint+0x98>
neg = 1;
39bf: c7 45 bc 01 00 00 00 movl $0x1,-0x44(%ebp)
x = -xx;
39c6: f7 d9 neg %ecx
}
else {
x = xx;
}
i = 0;
39c8: 31 db xor %ebx,%ebx
39ca: 8d 75 d7 lea -0x29(%ebp),%esi
39cd: 8d 76 00 lea 0x0(%esi),%esi
do {
buf[i++] = digits[x % base];
39d0: 89 c8 mov %ecx,%eax
39d2: 31 d2 xor %edx,%edx
39d4: 89 cf mov %ecx,%edi
39d6: f7 75 c4 divl -0x3c(%ebp)
39d9: 0f b6 92 70 55 00 00 movzbl 0x5570(%edx),%edx
39e0: 89 45 c0 mov %eax,-0x40(%ebp)
39e3: 89 d8 mov %ebx,%eax
39e5: 8d 5b 01 lea 0x1(%ebx),%ebx
}
while ((x /= base) != 0);
39e8: 8b 4d c0 mov -0x40(%ebp),%ecx
buf[i++] = digits[x % base];
39eb: 88 14 1e mov %dl,(%esi,%ebx,1)
while ((x /= base) != 0);
39ee: 39 7d c4 cmp %edi,-0x3c(%ebp)
39f1: 76 dd jbe 39d0 <printint+0x30>
if (neg) {
39f3: 8b 4d bc mov -0x44(%ebp),%ecx
39f6: 85 c9 test %ecx,%ecx
39f8: 74 0c je 3a06 <printint+0x66>
buf[i++] = '-';
39fa: c6 44 1d d8 2d movb $0x2d,-0x28(%ebp,%ebx,1)
buf[i++] = digits[x % base];
39ff: 89 d8 mov %ebx,%eax
buf[i++] = '-';
3a01: ba 2d 00 00 00 mov $0x2d,%edx
}
while (--i >= 0) {
3a06: 8b 7d b8 mov -0x48(%ebp),%edi
3a09: 8d 5c 05 d7 lea -0x29(%ebp,%eax,1),%ebx
3a0d: eb 07 jmp 3a16 <printint+0x76>
3a0f: 90 nop
putc(fd, buf[i]);
3a10: 0f b6 13 movzbl (%ebx),%edx
3a13: 83 eb 01 sub $0x1,%ebx
write(fd, &c, 1);
3a16: 83 ec 04 sub $0x4,%esp
3a19: 88 55 d7 mov %dl,-0x29(%ebp)
3a1c: 6a 01 push $0x1
3a1e: 56 push %esi
3a1f: 57 push %edi
3a20: e8 1e ff ff ff call 3943 <write>
while (--i >= 0) {
3a25: 83 c4 10 add $0x10,%esp
3a28: 39 de cmp %ebx,%esi
3a2a: 75 e4 jne 3a10 <printint+0x70>
}
}
3a2c: 8d 65 f4 lea -0xc(%ebp),%esp
3a2f: 5b pop %ebx
3a30: 5e pop %esi
3a31: 5f pop %edi
3a32: 5d pop %ebp
3a33: c3 ret
3a34: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
neg = 0;
3a38: c7 45 bc 00 00 00 00 movl $0x0,-0x44(%ebp)
3a3f: eb 87 jmp 39c8 <printint+0x28>
3a41: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
3a48: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
3a4f: 90 nop
00003a50 <printf>:
// Print to the given fd. Only understands %d, %x, %p, %s.
void printf(int fd, const char *fmt, ...) {
3a50: 55 push %ebp
3a51: 89 e5 mov %esp,%ebp
3a53: 57 push %edi
3a54: 56 push %esi
3a55: 53 push %ebx
3a56: 83 ec 2c sub $0x2c,%esp
int c, i, state;
uint *ap;
state = 0;
ap = (uint*)(void*)&fmt + 1;
for (i = 0; fmt[i]; i++) {
3a59: 8b 5d 0c mov 0xc(%ebp),%ebx
void printf(int fd, const char *fmt, ...) {
3a5c: 8b 75 08 mov 0x8(%ebp),%esi
for (i = 0; fmt[i]; i++) {
3a5f: 0f b6 13 movzbl (%ebx),%edx
3a62: 84 d2 test %dl,%dl
3a64: 74 6a je 3ad0 <printf+0x80>
ap = (uint*)(void*)&fmt + 1;
3a66: 8d 45 10 lea 0x10(%ebp),%eax
3a69: 83 c3 01 add $0x1,%ebx
write(fd, &c, 1);
3a6c: 8d 7d e7 lea -0x19(%ebp),%edi
state = 0;
3a6f: 31 c9 xor %ecx,%ecx
ap = (uint*)(void*)&fmt + 1;
3a71: 89 45 d0 mov %eax,-0x30(%ebp)
3a74: eb 36 jmp 3aac <printf+0x5c>
3a76: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
3a7d: 8d 76 00 lea 0x0(%esi),%esi
3a80: 89 4d d4 mov %ecx,-0x2c(%ebp)
c = fmt[i] & 0xff;
if (state == 0) {
if (c == '%') {
state = '%';
3a83: b9 25 00 00 00 mov $0x25,%ecx
if (c == '%') {
3a88: 83 f8 25 cmp $0x25,%eax
3a8b: 74 15 je 3aa2 <printf+0x52>
write(fd, &c, 1);
3a8d: 83 ec 04 sub $0x4,%esp
3a90: 88 55 e7 mov %dl,-0x19(%ebp)
3a93: 6a 01 push $0x1
3a95: 57 push %edi
3a96: 56 push %esi
3a97: e8 a7 fe ff ff call 3943 <write>
3a9c: 8b 4d d4 mov -0x2c(%ebp),%ecx
}
else {
putc(fd, c);
3a9f: 83 c4 10 add $0x10,%esp
for (i = 0; fmt[i]; i++) {
3aa2: 0f b6 13 movzbl (%ebx),%edx
3aa5: 83 c3 01 add $0x1,%ebx
3aa8: 84 d2 test %dl,%dl
3aaa: 74 24 je 3ad0 <printf+0x80>
c = fmt[i] & 0xff;
3aac: 0f b6 c2 movzbl %dl,%eax
if (state == 0) {
3aaf: 85 c9 test %ecx,%ecx
3ab1: 74 cd je 3a80 <printf+0x30>
}
}
else if (state == '%') {
3ab3: 83 f9 25 cmp $0x25,%ecx
3ab6: 75 ea jne 3aa2 <printf+0x52>
if (c == 'd') {
3ab8: 83 f8 25 cmp $0x25,%eax
3abb: 0f 84 07 01 00 00 je 3bc8 <printf+0x178>
3ac1: 83 e8 63 sub $0x63,%eax
3ac4: 83 f8 15 cmp $0x15,%eax
3ac7: 77 17 ja 3ae0 <printf+0x90>
3ac9: ff 24 85 18 55 00 00 jmp *0x5518(,%eax,4)
putc(fd, c);
}
state = 0;
}
}
}
3ad0: 8d 65 f4 lea -0xc(%ebp),%esp
3ad3: 5b pop %ebx
3ad4: 5e pop %esi
3ad5: 5f pop %edi
3ad6: 5d pop %ebp
3ad7: c3 ret
3ad8: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
3adf: 90 nop
write(fd, &c, 1);
3ae0: 83 ec 04 sub $0x4,%esp
3ae3: 88 55 d4 mov %dl,-0x2c(%ebp)
3ae6: 6a 01 push $0x1
3ae8: 57 push %edi
3ae9: 56 push %esi
3aea: c6 45 e7 25 movb $0x25,-0x19(%ebp)
3aee: e8 50 fe ff ff call 3943 <write>
putc(fd, c);
3af3: 0f b6 55 d4 movzbl -0x2c(%ebp),%edx
write(fd, &c, 1);
3af7: 83 c4 0c add $0xc,%esp
3afa: 88 55 e7 mov %dl,-0x19(%ebp)
3afd: 6a 01 push $0x1
3aff: 57 push %edi
3b00: 56 push %esi
3b01: e8 3d fe ff ff call 3943 <write>
putc(fd, c);
3b06: 83 c4 10 add $0x10,%esp
state = 0;
3b09: 31 c9 xor %ecx,%ecx
3b0b: eb 95 jmp 3aa2 <printf+0x52>
3b0d: 8d 76 00 lea 0x0(%esi),%esi
printint(fd, *ap, 16, 0);
3b10: 83 ec 0c sub $0xc,%esp
3b13: b9 10 00 00 00 mov $0x10,%ecx
3b18: 6a 00 push $0x0
3b1a: 8b 45 d0 mov -0x30(%ebp),%eax
3b1d: 8b 10 mov (%eax),%edx
3b1f: 89 f0 mov %esi,%eax
3b21: e8 7a fe ff ff call 39a0 <printint>
ap++;
3b26: 83 45 d0 04 addl $0x4,-0x30(%ebp)
3b2a: 83 c4 10 add $0x10,%esp
state = 0;
3b2d: 31 c9 xor %ecx,%ecx
3b2f: e9 6e ff ff ff jmp 3aa2 <printf+0x52>
3b34: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
s = (char*)*ap;
3b38: 8b 45 d0 mov -0x30(%ebp),%eax
3b3b: 8b 10 mov (%eax),%edx
ap++;
3b3d: 83 c0 04 add $0x4,%eax
3b40: 89 45 d0 mov %eax,-0x30(%ebp)
if (s == 0) {
3b43: 85 d2 test %edx,%edx
3b45: 0f 84 8d 00 00 00 je 3bd8 <printf+0x188>
while (*s != 0) {
3b4b: 0f b6 02 movzbl (%edx),%eax
state = 0;
3b4e: 31 c9 xor %ecx,%ecx
while (*s != 0) {
3b50: 84 c0 test %al,%al
3b52: 0f 84 4a ff ff ff je 3aa2 <printf+0x52>
3b58: 89 5d d4 mov %ebx,-0x2c(%ebp)
3b5b: 89 d3 mov %edx,%ebx
3b5d: 8d 76 00 lea 0x0(%esi),%esi
write(fd, &c, 1);
3b60: 83 ec 04 sub $0x4,%esp
s++;
3b63: 83 c3 01 add $0x1,%ebx
3b66: 88 45 e7 mov %al,-0x19(%ebp)
write(fd, &c, 1);
3b69: 6a 01 push $0x1
3b6b: 57 push %edi
3b6c: 56 push %esi
3b6d: e8 d1 fd ff ff call 3943 <write>
while (*s != 0) {
3b72: 0f b6 03 movzbl (%ebx),%eax
3b75: 83 c4 10 add $0x10,%esp
3b78: 84 c0 test %al,%al
3b7a: 75 e4 jne 3b60 <printf+0x110>
state = 0;
3b7c: 8b 5d d4 mov -0x2c(%ebp),%ebx
3b7f: 31 c9 xor %ecx,%ecx
3b81: e9 1c ff ff ff jmp 3aa2 <printf+0x52>
3b86: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
3b8d: 8d 76 00 lea 0x0(%esi),%esi
printint(fd, *ap, 10, 1);
3b90: 83 ec 0c sub $0xc,%esp
3b93: b9 0a 00 00 00 mov $0xa,%ecx
3b98: 6a 01 push $0x1
3b9a: e9 7b ff ff ff jmp 3b1a <printf+0xca>
3b9f: 90 nop
putc(fd, *ap);
3ba0: 8b 45 d0 mov -0x30(%ebp),%eax
write(fd, &c, 1);
3ba3: 83 ec 04 sub $0x4,%esp
putc(fd, *ap);
3ba6: 8b 00 mov (%eax),%eax
write(fd, &c, 1);
3ba8: 6a 01 push $0x1
3baa: 57 push %edi
3bab: 56 push %esi
putc(fd, *ap);
3bac: 88 45 e7 mov %al,-0x19(%ebp)
write(fd, &c, 1);
3baf: e8 8f fd ff ff call 3943 <write>
ap++;
3bb4: 83 45 d0 04 addl $0x4,-0x30(%ebp)
3bb8: 83 c4 10 add $0x10,%esp
state = 0;
3bbb: 31 c9 xor %ecx,%ecx
3bbd: e9 e0 fe ff ff jmp 3aa2 <printf+0x52>
3bc2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
putc(fd, c);
3bc8: 88 55 e7 mov %dl,-0x19(%ebp)
write(fd, &c, 1);
3bcb: 83 ec 04 sub $0x4,%esp
3bce: e9 2a ff ff ff jmp 3afd <printf+0xad>
3bd3: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
3bd7: 90 nop
s = "(null)";
3bd8: ba 0e 55 00 00 mov $0x550e,%edx
while (*s != 0) {
3bdd: 89 5d d4 mov %ebx,-0x2c(%ebp)
3be0: b8 28 00 00 00 mov $0x28,%eax
3be5: 89 d3 mov %edx,%ebx
3be7: e9 74 ff ff ff jmp 3b60 <printf+0x110>
3bec: 66 90 xchg %ax,%ax
3bee: 66 90 xchg %ax,%ax
00003bf0 <free>:
typedef union header Header;
static Header base;
static Header *freep;
void free(void *ap) {
3bf0: 55 push %ebp
Header *bp, *p;
bp = (Header*)ap - 1;
for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) {
3bf1: a1 20 a6 00 00 mov 0xa620,%eax
void free(void *ap) {
3bf6: 89 e5 mov %esp,%ebp
3bf8: 57 push %edi
3bf9: 56 push %esi
3bfa: 53 push %ebx
3bfb: 8b 5d 08 mov 0x8(%ebp),%ebx
bp = (Header*)ap - 1;
3bfe: 8d 4b f8 lea -0x8(%ebx),%ecx
for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) {
3c01: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
3c08: 89 c2 mov %eax,%edx
3c0a: 8b 00 mov (%eax),%eax
3c0c: 39 ca cmp %ecx,%edx
3c0e: 73 30 jae 3c40 <free+0x50>
3c10: 39 c1 cmp %eax,%ecx
3c12: 72 04 jb 3c18 <free+0x28>
if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) {
3c14: 39 c2 cmp %eax,%edx
3c16: 72 f0 jb 3c08 <free+0x18>
break;
}
}
if (bp + bp->s.size == p->s.ptr) {
3c18: 8b 73 fc mov -0x4(%ebx),%esi
3c1b: 8d 3c f1 lea (%ecx,%esi,8),%edi
3c1e: 39 f8 cmp %edi,%eax
3c20: 74 30 je 3c52 <free+0x62>
bp->s.size += p->s.ptr->s.size;
bp->s.ptr = p->s.ptr->s.ptr;
3c22: 89 43 f8 mov %eax,-0x8(%ebx)
}
else {
bp->s.ptr = p->s.ptr;
}
if (p + p->s.size == bp) {
3c25: 8b 42 04 mov 0x4(%edx),%eax
3c28: 8d 34 c2 lea (%edx,%eax,8),%esi
3c2b: 39 f1 cmp %esi,%ecx
3c2d: 74 3a je 3c69 <free+0x79>
p->s.size += bp->s.size;
p->s.ptr = bp->s.ptr;
3c2f: 89 0a mov %ecx,(%edx)
}
else {
p->s.ptr = bp;
}
freep = p;
}
3c31: 5b pop %ebx
freep = p;
3c32: 89 15 20 a6 00 00 mov %edx,0xa620
}
3c38: 5e pop %esi
3c39: 5f pop %edi
3c3a: 5d pop %ebp
3c3b: c3 ret
3c3c: 8d 74 26 00 lea 0x0(%esi,%eiz,1),%esi
if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) {
3c40: 39 c2 cmp %eax,%edx
3c42: 72 c4 jb 3c08 <free+0x18>
3c44: 39 c1 cmp %eax,%ecx
3c46: 73 c0 jae 3c08 <free+0x18>
if (bp + bp->s.size == p->s.ptr) {
3c48: 8b 73 fc mov -0x4(%ebx),%esi
3c4b: 8d 3c f1 lea (%ecx,%esi,8),%edi
3c4e: 39 f8 cmp %edi,%eax
3c50: 75 d0 jne 3c22 <free+0x32>
bp->s.size += p->s.ptr->s.size;
3c52: 03 70 04 add 0x4(%eax),%esi
3c55: 89 73 fc mov %esi,-0x4(%ebx)
bp->s.ptr = p->s.ptr->s.ptr;
3c58: 8b 02 mov (%edx),%eax
3c5a: 8b 00 mov (%eax),%eax
3c5c: 89 43 f8 mov %eax,-0x8(%ebx)
if (p + p->s.size == bp) {
3c5f: 8b 42 04 mov 0x4(%edx),%eax
3c62: 8d 34 c2 lea (%edx,%eax,8),%esi
3c65: 39 f1 cmp %esi,%ecx
3c67: 75 c6 jne 3c2f <free+0x3f>
p->s.size += bp->s.size;
3c69: 03 43 fc add -0x4(%ebx),%eax
freep = p;
3c6c: 89 15 20 a6 00 00 mov %edx,0xa620
p->s.size += bp->s.size;
3c72: 89 42 04 mov %eax,0x4(%edx)
p->s.ptr = bp->s.ptr;
3c75: 8b 4b f8 mov -0x8(%ebx),%ecx
3c78: 89 0a mov %ecx,(%edx)
}
3c7a: 5b pop %ebx
3c7b: 5e pop %esi
3c7c: 5f pop %edi
3c7d: 5d pop %ebp
3c7e: c3 ret
3c7f: 90 nop
00003c80 <malloc>:
hp->s.size = nu;
free((void*)(hp + 1));
return freep;
}
void* malloc(uint nbytes) {
3c80: 55 push %ebp
3c81: 89 e5 mov %esp,%ebp
3c83: 57 push %edi
3c84: 56 push %esi
3c85: 53 push %ebx
3c86: 83 ec 1c sub $0x1c,%esp
Header *p, *prevp;
uint nunits;
nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1;
3c89: 8b 45 08 mov 0x8(%ebp),%eax
if ((prevp = freep) == 0) {
3c8c: 8b 3d 20 a6 00 00 mov 0xa620,%edi
nunits = (nbytes + sizeof(Header) - 1) / sizeof(Header) + 1;
3c92: 8d 70 07 lea 0x7(%eax),%esi
3c95: c1 ee 03 shr $0x3,%esi
3c98: 83 c6 01 add $0x1,%esi
if ((prevp = freep) == 0) {
3c9b: 85 ff test %edi,%edi
3c9d: 0f 84 9d 00 00 00 je 3d40 <malloc+0xc0>
base.s.ptr = freep = prevp = &base;
base.s.size = 0;
}
for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) {
3ca3: 8b 17 mov (%edi),%edx
if (p->s.size >= nunits) {
3ca5: 8b 4a 04 mov 0x4(%edx),%ecx
3ca8: 39 f1 cmp %esi,%ecx
3caa: 73 6a jae 3d16 <malloc+0x96>
3cac: bb 00 10 00 00 mov $0x1000,%ebx
3cb1: 39 de cmp %ebx,%esi
3cb3: 0f 43 de cmovae %esi,%ebx
p = sbrk(nu * sizeof(Header));
3cb6: 8d 04 dd 00 00 00 00 lea 0x0(,%ebx,8),%eax
3cbd: 89 45 e4 mov %eax,-0x1c(%ebp)
3cc0: eb 17 jmp 3cd9 <malloc+0x59>
3cc2: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) {
3cc8: 8b 02 mov (%edx),%eax
if (p->s.size >= nunits) {
3cca: 8b 48 04 mov 0x4(%eax),%ecx
3ccd: 39 f1 cmp %esi,%ecx
3ccf: 73 4f jae 3d20 <malloc+0xa0>
p->s.size = nunits;
}
freep = prevp;
return (void*)(p + 1);
}
if (p == freep) {
3cd1: 8b 3d 20 a6 00 00 mov 0xa620,%edi
3cd7: 89 c2 mov %eax,%edx
3cd9: 39 d7 cmp %edx,%edi
3cdb: 75 eb jne 3cc8 <malloc+0x48>
p = sbrk(nu * sizeof(Header));
3cdd: 83 ec 0c sub $0xc,%esp
3ce0: ff 75 e4 push -0x1c(%ebp)
3ce3: e8 3b fc ff ff call 3923 <sbrk>
if (p == (char*)-1) {
3ce8: 83 c4 10 add $0x10,%esp
3ceb: 83 f8 ff cmp $0xffffffff,%eax
3cee: 74 1c je 3d0c <malloc+0x8c>
hp->s.size = nu;
3cf0: 89 58 04 mov %ebx,0x4(%eax)
free((void*)(hp + 1));
3cf3: 83 ec 0c sub $0xc,%esp
3cf6: 83 c0 08 add $0x8,%eax
3cf9: 50 push %eax
3cfa: e8 f1 fe ff ff call 3bf0 <free>
return freep;
3cff: 8b 15 20 a6 00 00 mov 0xa620,%edx
if ((p = morecore(nunits)) == 0) {
3d05: 83 c4 10 add $0x10,%esp
3d08: 85 d2 test %edx,%edx
3d0a: 75 bc jne 3cc8 <malloc+0x48>
return 0;
}
}
}
}
3d0c: 8d 65 f4 lea -0xc(%ebp),%esp
return 0;
3d0f: 31 c0 xor %eax,%eax
}
3d11: 5b pop %ebx
3d12: 5e pop %esi
3d13: 5f pop %edi
3d14: 5d pop %ebp
3d15: c3 ret
if (p->s.size >= nunits) {
3d16: 89 d0 mov %edx,%eax
3d18: 89 fa mov %edi,%edx
3d1a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
if (p->s.size == nunits) {
3d20: 39 ce cmp %ecx,%esi
3d22: 74 4c je 3d70 <malloc+0xf0>
p->s.size -= nunits;
3d24: 29 f1 sub %esi,%ecx
3d26: 89 48 04 mov %ecx,0x4(%eax)
p += p->s.size;
3d29: 8d 04 c8 lea (%eax,%ecx,8),%eax
p->s.size = nunits;
3d2c: 89 70 04 mov %esi,0x4(%eax)
freep = prevp;
3d2f: 89 15 20 a6 00 00 mov %edx,0xa620
}
3d35: 8d 65 f4 lea -0xc(%ebp),%esp
return (void*)(p + 1);
3d38: 83 c0 08 add $0x8,%eax
}
3d3b: 5b pop %ebx
3d3c: 5e pop %esi
3d3d: 5f pop %edi
3d3e: 5d pop %ebp
3d3f: c3 ret
base.s.ptr = freep = prevp = &base;
3d40: c7 05 20 a6 00 00 24 movl $0xa624,0xa620
3d47: a6 00 00
base.s.size = 0;
3d4a: bf 24 a6 00 00 mov $0xa624,%edi
base.s.ptr = freep = prevp = &base;
3d4f: c7 05 24 a6 00 00 24 movl $0xa624,0xa624
3d56: a6 00 00
for (p = prevp->s.ptr;; prevp = p, p = p->s.ptr) {
3d59: 89 fa mov %edi,%edx
base.s.size = 0;
3d5b: c7 05 28 a6 00 00 00 movl $0x0,0xa628
3d62: 00 00 00
if (p->s.size >= nunits) {
3d65: e9 42 ff ff ff jmp 3cac <malloc+0x2c>
3d6a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
prevp->s.ptr = p->s.ptr;
3d70: 8b 08 mov (%eax),%ecx
3d72: 89 0a mov %ecx,(%edx)
3d74: eb b9 jmp 3d2f <malloc+0xaf>