From 31c61573abaa08735e481b8949fcd7e72b97cd69 Mon Sep 17 00:00:00 2001 From: Yufan Du <nbsdyf@stu.pku.edu.cn> Date: Tue, 11 Mar 2025 02:24:43 +0000 Subject: [PATCH] par1 with times --- Makefile | 3 +- kernel/include/initcode.h | 252 +- kernel/include/sysnum.h | 1 + kernel/proc.o | Bin 155184 -> 155224 bytes kernel/syscall.c | 5 +- kernel/syscall.o | Bin 53344 -> 53552 bytes kernel/times.c | 52 + sdcard.img | Bin 134217728 -> 134217728 bytes target/kernel | Bin 279576 -> 282904 bytes target/kernel.asm | 12797 ++++++++++++++++++------------------ target/kernel.sym | 236 +- xv6-user/_cat | Bin 24704 -> 24768 bytes xv6-user/_echo | Bin 23544 -> 23608 bytes xv6-user/_find | Bin 25744 -> 25816 bytes xv6-user/_grep | Bin 27856 -> 27920 bytes xv6-user/_init | Bin 24944 -> 25024 bytes xv6-user/_kill | Bin 23488 -> 23536 bytes xv6-user/_ls | Bin 25888 -> 25960 bytes xv6-user/_mkdir | Bin 23600 -> 23672 bytes xv6-user/_mv | Bin 25328 -> 25392 bytes xv6-user/_rm | Bin 23536 -> 23600 bytes xv6-user/_sh | Bin 48952 -> 49016 bytes xv6-user/_sleep | Bin 23552 -> 23600 bytes xv6-user/_strace | Bin 23912 -> 23968 bytes xv6-user/_test | Bin 23272 -> 23336 bytes xv6-user/_usertests | Bin 129696 -> 129760 bytes xv6-user/_wc | Bin 25824 -> 25864 bytes xv6-user/_xargs | Bin 25376 -> 25440 bytes xv6-user/cat.asm | 858 +-- xv6-user/cat.sym | 41 +- xv6-user/echo.asm | 848 +-- xv6-user/echo.sym | 39 +- xv6-user/find.asm | 884 +-- xv6-user/find.sym | 41 +- xv6-user/grep.asm | 854 +-- xv6-user/grep.sym | 41 +- xv6-user/init.asm | 868 +-- xv6-user/init.c | 1 + xv6-user/init.o | Bin 15304 -> 15376 bytes xv6-user/init.sym | 47 +- xv6-user/kill.asm | 848 +-- xv6-user/kill.sym | 39 +- xv6-user/ls.asm | 868 +-- xv6-user/ls.sym | 41 +- xv6-user/mkdir.asm | 852 +-- xv6-user/mkdir.sym | 39 +- xv6-user/mv.asm | 864 +-- xv6-user/mv.sym | 39 +- xv6-user/rm.asm | 852 +-- xv6-user/rm.sym | 39 +- xv6-user/sh.asm | 1002 +-- xv6-user/sh.sym | 53 +- xv6-user/sleep.asm | 852 +-- xv6-user/sleep.sym | 39 +- xv6-user/strace.asm | 856 +-- xv6-user/strace.sym | 39 +- xv6-user/test.asm | 856 +-- xv6-user/test.sym | 39 +- xv6-user/usertests.asm | 2230 +++---- xv6-user/usertests.sym | 53 +- xv6-user/usys.S | 5 + xv6-user/usys.o | Bin 10152 -> 10432 bytes xv6-user/usys.pl | 1 + xv6-user/wc.asm | 870 +-- xv6-user/wc.sym | 41 +- xv6-user/xargs.asm | 856 +-- xv6-user/xargs.sym | 39 +- 67 files changed, 15260 insertions(+), 14920 deletions(-) create mode 100644 kernel/times.c diff --git a/Makefile b/Makefile index 2522dab..15648e7 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,8 @@ OBJS += \ $K/fat32.o \ $K/plic.o \ $K/console.o \ - $K/shutdown.o + $K/shutdown.o \ + $K/times.o ifeq ($(platform), k210) OBJS += \ diff --git a/kernel/include/initcode.h b/kernel/include/initcode.h index 57782fc..bc1baf5 100644 --- a/kernel/include/initcode.h +++ b/kernel/include/initcode.h @@ -1,19 +1,19 @@ 0x79,0x71,0x06,0xf4,0x22,0xf0,0x26,0xec,0x4a,0xe8,0x4e,0xe4,0x52,0xe0,0x00,0x18, -0x01,0x46,0x85,0x45,0x09,0x45,0x97,0x00,0x00,0x00,0xe7,0x80,0x40,0x44,0x01,0x45, -0x97,0x00,0x00,0x00,0xe7,0x80,0xa0,0x40,0x01,0x45,0x97,0x00,0x00,0x00,0xe7,0x80, -0x00,0x40,0x97,0x17,0x00,0x00,0x83,0xa7,0xe7,0xa6,0x63,0x5d,0xf0,0x0a,0x01,0x49, -0x17,0x1a,0x00,0x00,0x13,0x0a,0x8a,0x8d,0x97,0x19,0x00,0x00,0x93,0x89,0x89,0xa5, -0xb9,0xa8,0x17,0x15,0x00,0x00,0x13,0x05,0xe5,0x8d,0x97,0x00,0x00,0x00,0xe7,0x80, -0xa0,0x71,0x05,0x45,0x97,0x00,0x00,0x00,0xe7,0x80,0x20,0x36,0x0e,0x09,0x97,0x17, -0x00,0x00,0x93,0x87,0xa7,0xa3,0xca,0x97,0x97,0x15,0x00,0x00,0x93,0x85,0x05,0xad, -0x88,0x63,0x97,0x00,0x00,0x00,0xe7,0x80,0x00,0x38,0x17,0x15,0x00,0x00,0x13,0x05, -0xe5,0x8b,0x97,0x00,0x00,0x00,0xe7,0x80,0x20,0x6e,0x05,0x45,0x97,0x00,0x00,0x00, +0x01,0x46,0x85,0x45,0x09,0x45,0x97,0x00,0x00,0x00,0xe7,0x80,0x40,0x45,0x01,0x45, +0x97,0x00,0x00,0x00,0xe7,0x80,0x80,0x41,0x01,0x45,0x97,0x00,0x00,0x00,0xe7,0x80, +0xe0,0x40,0x97,0x17,0x00,0x00,0x83,0xa7,0xe7,0xa8,0x63,0x5d,0xf0,0x0a,0x01,0x49, +0x17,0x1a,0x00,0x00,0x13,0x0a,0x0a,0x8f,0x97,0x19,0x00,0x00,0x93,0x89,0x89,0xa7, +0xb9,0xa8,0x17,0x15,0x00,0x00,0x13,0x05,0x65,0x8f,0x97,0x00,0x00,0x00,0xe7,0x80, +0x40,0x73,0x05,0x45,0x97,0x00,0x00,0x00,0xe7,0x80,0x20,0x36,0x0e,0x09,0x97,0x17, +0x00,0x00,0x93,0x87,0xa7,0xa5,0xca,0x97,0x97,0x15,0x00,0x00,0x93,0x85,0x85,0xaf, +0x88,0x63,0x97,0x00,0x00,0x00,0xe7,0x80,0x60,0x38,0x17,0x15,0x00,0x00,0x13,0x05, +0x65,0x8d,0x97,0x00,0x00,0x00,0xe7,0x80,0xc0,0x6f,0x05,0x45,0x97,0x00,0x00,0x00, 0xe7,0x80,0xa0,0x32,0x05,0x29,0x83,0xa7,0x09,0x00,0x63,0x55,0xf9,0x04,0x52,0x85, -0x97,0x00,0x00,0x00,0xe7,0x80,0x40,0x6c,0x97,0x00,0x00,0x00,0xe7,0x80,0x60,0x30, +0x97,0x00,0x00,0x00,0xe7,0x80,0xe0,0x6d,0x97,0x00,0x00,0x00,0xe7,0x80,0x60,0x30, 0xaa,0x84,0xe3,0x48,0x05,0xf8,0x5d,0xd1,0x01,0x45,0x97,0x00,0x00,0x00,0xe7,0x80, 0x60,0x30,0xe3,0x89,0xa4,0xfc,0xe3,0x59,0x05,0xfe,0x17,0x15,0x00,0x00,0x13,0x05, -0x65,0x88,0x97,0x00,0x00,0x00,0xe7,0x80,0x20,0x69,0x05,0x45,0x97,0x00,0x00,0x00, -0xe7,0x80,0xa0,0x2d,0x97,0x00,0x00,0x00,0xe7,0x80,0xe0,0x39,0x01,0x45,0xa2,0x70, +0xe5,0x89,0x97,0x00,0x00,0x00,0xe7,0x80,0xc0,0x6a,0x05,0x45,0x97,0x00,0x00,0x00, +0xe7,0x80,0xa0,0x2d,0x97,0x00,0x00,0x00,0xe7,0x80,0xe0,0x3a,0x01,0x45,0xa2,0x70, 0x02,0x74,0xe2,0x64,0x42,0x69,0xa2,0x69,0x02,0x6a,0x45,0x61,0x82,0x80,0x41,0x11, 0x22,0xe4,0x00,0x08,0xaa,0x87,0x85,0x05,0x85,0x07,0x03,0xc7,0xf5,0xff,0xa3,0x8f, 0xe7,0xfe,0x75,0xfb,0x22,0x64,0x41,0x01,0x82,0x80,0x41,0x11,0x22,0xe4,0x00,0x08, @@ -33,14 +33,14 @@ 0x52,0xf8,0x56,0xf4,0x5a,0xf0,0x5e,0xec,0x62,0xe8,0x80,0x10,0xaa,0x8b,0x2e,0x8a, 0x2a,0x89,0x81,0x44,0x93,0x0a,0xf4,0xfa,0x29,0x4b,0x35,0x4c,0xa6,0x89,0x85,0x24, 0x63,0xd7,0x44,0x03,0x05,0x46,0xd6,0x85,0x01,0x45,0x97,0x00,0x00,0x00,0xe7,0x80, -0x60,0x1b,0x63,0x5e,0xa0,0x00,0x83,0x47,0xf4,0xfa,0x23,0x00,0xf9,0x00,0x63,0x87, +0x80,0x1b,0x63,0x5e,0xa0,0x00,0x83,0x47,0xf4,0xfa,0x23,0x00,0xf9,0x00,0x63,0x87, 0x67,0x01,0x05,0x09,0xe3,0x9c,0x87,0xfd,0xa6,0x89,0x11,0xa0,0xa6,0x89,0xde,0x99, 0x23,0x80,0x09,0x00,0x5e,0x85,0xe6,0x60,0x46,0x64,0xa6,0x64,0x06,0x69,0xe2,0x79, 0x42,0x7a,0xa2,0x7a,0x02,0x7b,0xe2,0x6b,0x42,0x6c,0x25,0x61,0x82,0x80,0x01,0x11, 0x06,0xec,0x22,0xe8,0x26,0xe4,0x4a,0xe0,0x00,0x10,0x2e,0x89,0x81,0x45,0x97,0x00, -0x00,0x00,0xe7,0x80,0xc0,0x18,0x63,0x45,0x05,0x02,0xaa,0x84,0xca,0x85,0x97,0x00, -0x00,0x00,0xe7,0x80,0x40,0x18,0x2a,0x89,0x26,0x85,0x97,0x00,0x00,0x00,0xe7,0x80, -0x80,0x15,0x4a,0x85,0xe2,0x60,0x42,0x64,0xa2,0x64,0x02,0x69,0x05,0x61,0x82,0x80, +0x00,0x00,0xe7,0x80,0x20,0x19,0x63,0x45,0x05,0x02,0xaa,0x84,0xca,0x85,0x97,0x00, +0x00,0x00,0xe7,0x80,0xc0,0x18,0x2a,0x89,0x26,0x85,0x97,0x00,0x00,0x00,0xe7,0x80, +0xc0,0x15,0x4a,0x85,0xe2,0x60,0x42,0x64,0xa2,0x64,0x02,0x69,0x05,0x61,0x82,0x80, 0x7d,0x59,0xc5,0xbf,0x41,0x11,0x22,0xe4,0x00,0x08,0x03,0x47,0x05,0x00,0x93,0x07, 0xd0,0x02,0x85,0x45,0x63,0x03,0xf7,0x04,0x03,0x47,0x05,0x00,0x9b,0x07,0x07,0xfd, 0x93,0xf7,0xf7,0x0f,0xa5,0x46,0x63,0xed,0xf6,0x02,0x81,0x46,0x25,0x46,0x05,0x05, @@ -59,123 +59,125 @@ 0x82,0x80,0x01,0x45,0xe5,0xbf,0x41,0x11,0x06,0xe4,0x22,0xe0,0x00,0x08,0x97,0x00, 0x00,0x00,0xe7,0x80,0x60,0xf6,0xa2,0x60,0x02,0x64,0x41,0x01,0x82,0x80,0x85,0x48, 0x73,0x00,0x00,0x00,0x82,0x80,0x93,0x08,0xd0,0x05,0x73,0x00,0x00,0x00,0x82,0x80, -0x8d,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0x91,0x48,0x73,0x00,0x00,0x00,0x82,0x80, -0x95,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0x93,0x08,0x00,0x04,0x73,0x00,0x00,0x00, -0x82,0x80,0xd5,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0x99,0x48,0x73,0x00,0x00,0x00, -0x82,0x80,0x9d,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xbd,0x48,0x73,0x00,0x00,0x00, -0x82,0x80,0xa1,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xd1,0x48,0x73,0x00,0x00,0x00, -0x82,0x80,0xa5,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xa9,0x48,0x73,0x00,0x00,0x00, -0x82,0x80,0xad,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xb1,0x48,0x73,0x00,0x00,0x00, +0x8d,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0x93,0x08,0xb0,0x03,0x73,0x00,0x00,0x00, +0x82,0x80,0x93,0x08,0xf0,0x03,0x73,0x00,0x00,0x00,0x82,0x80,0x93,0x08,0x00,0x04, +0x73,0x00,0x00,0x00,0x82,0x80,0x93,0x08,0x90,0x03,0x73,0x00,0x00,0x00,0x82,0x80, +0x99,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0x9d,0x48,0x73,0x00,0x00,0x00,0x82,0x80, +0x93,0x08,0x80,0x03,0x73,0x00,0x00,0x00,0x82,0x80,0x93,0x08,0x00,0x05,0x73,0x00, +0x00,0x00,0x82,0x80,0x93,0x08,0x20,0x02,0x73,0x00,0x00,0x00,0x82,0x80,0x93,0x08, +0x10,0x03,0x73,0x00,0x00,0x00,0x82,0x80,0xa9,0x48,0x73,0x00,0x00,0x00,0x82,0x80, +0x93,0x08,0xc0,0x0a,0x73,0x00,0x00,0x00,0x82,0x80,0xb1,0x48,0x73,0x00,0x00,0x00, 0x82,0x80,0xb5,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xb9,0x48,0x73,0x00,0x00,0x00, 0x82,0x80,0xd9,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xdd,0x48,0x73,0x00,0x00,0x00, -0x82,0x80,0xe1,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xe5,0x48,0x73,0x00,0x00,0x00, -0x82,0x80,0xc5,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xc9,0x48,0x73,0x00,0x00,0x00, +0x82,0x80,0xe1,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xc5,0x48,0x73,0x00,0x00,0x00, +0x82,0x80,0xc1,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xc9,0x48,0x73,0x00,0x00,0x00, 0x82,0x80,0xcd,0x48,0x73,0x00,0x00,0x00,0x82,0x80,0xe9,0x48,0x73,0x00,0x00,0x00, -0x82,0x80,0x93,0x08,0x20,0x0d,0x73,0x00,0x00,0x00,0x82,0x80,0x01,0x11,0x06,0xec, -0x22,0xe8,0x00,0x10,0xa3,0x07,0xb4,0xfe,0x05,0x46,0x93,0x05,0xf4,0xfe,0x97,0x00, -0x00,0x00,0xe7,0x80,0xa0,0xf3,0xe2,0x60,0x42,0x64,0x05,0x61,0x82,0x80,0x39,0x71, -0x06,0xfc,0x22,0xf8,0x26,0xf4,0x4a,0xf0,0x4e,0xec,0x80,0x00,0xaa,0x84,0x99,0xc2, -0x63,0xc8,0x05,0x08,0x81,0x25,0x81,0x48,0x93,0x09,0x04,0xfc,0xce,0x86,0x01,0x47, -0x01,0x26,0x17,0x05,0x00,0x00,0x13,0x05,0x65,0x5a,0x3a,0x88,0x05,0x27,0xbb,0xf7, -0xc5,0x02,0x82,0x17,0x81,0x93,0xaa,0x97,0x83,0xc7,0x07,0x00,0x23,0x80,0xf6,0x00, -0x9b,0x87,0x05,0x00,0xbb,0xd5,0xc5,0x02,0x85,0x06,0xe3,0xf0,0xc7,0xfe,0x63,0x8c, -0x08,0x00,0x93,0x07,0x07,0xfd,0x33,0x87,0x87,0x00,0x93,0x07,0xd0,0x02,0x23,0x08, -0xf7,0xfe,0x1b,0x07,0x28,0x00,0x63,0x56,0xe0,0x02,0x13,0x09,0x04,0xfc,0x3a,0x99, -0xfd,0x19,0xba,0x99,0x7d,0x37,0x02,0x17,0x01,0x93,0xb3,0x89,0xe9,0x40,0x83,0x45, -0xf9,0xff,0x26,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x80,0xf5,0x7d,0x19,0xe3,0x18, -0x39,0xff,0xe2,0x70,0x42,0x74,0xa2,0x74,0x02,0x79,0xe2,0x69,0x21,0x61,0x82,0x80, -0xbb,0x05,0xb0,0x40,0x85,0x48,0x8d,0xbf,0x19,0x71,0x86,0xfc,0xa2,0xf8,0xa6,0xf4, -0xca,0xf0,0xce,0xec,0xd2,0xe8,0xd6,0xe4,0xda,0xe0,0x5e,0xfc,0x62,0xf8,0x66,0xf4, -0x6a,0xf0,0x6e,0xec,0x00,0x01,0x03,0xc9,0x05,0x00,0x63,0x0f,0x09,0x18,0xaa,0x8a, -0x32,0x8b,0x93,0x84,0x15,0x00,0x81,0x49,0x13,0x0a,0x50,0x02,0x55,0x4c,0x97,0x0c, -0x00,0x00,0x93,0x8c,0x2c,0x49,0x93,0x0d,0x80,0x02,0x41,0x4d,0x97,0x0b,0x00,0x00, -0x93,0x8b,0xcb,0x4d,0x39,0xa8,0xca,0x85,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80, -0x20,0xee,0x19,0xa0,0x63,0x8d,0x49,0x01,0x85,0x04,0x03,0xc9,0xf4,0xff,0x63,0x0d, -0x09,0x14,0xe3,0x99,0x09,0xfe,0xe3,0x10,0x49,0xff,0xd2,0x89,0xf5,0xb7,0x63,0x0c, -0x49,0x11,0x9b,0x07,0xd9,0xf9,0x93,0xf7,0xf7,0x0f,0x63,0x6e,0xfc,0x10,0x9b,0x07, -0xd9,0xf9,0x13,0xf7,0xf7,0x0f,0x63,0x68,0xec,0x10,0x93,0x17,0x27,0x00,0xe6,0x97, -0x9c,0x43,0xe6,0x97,0x82,0x87,0x13,0x09,0x8b,0x00,0x85,0x46,0x29,0x46,0x83,0x25, -0x0b,0x00,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0xa0,0xea,0x4a,0x8b,0x81,0x49, -0x65,0xb7,0x13,0x09,0x8b,0x00,0x81,0x46,0x29,0x46,0x83,0x25,0x0b,0x00,0x56,0x85, -0x97,0x00,0x00,0x00,0xe7,0x80,0xe0,0xe8,0x4a,0x8b,0x81,0x49,0x71,0xb7,0x13,0x09, -0x8b,0x00,0x81,0x46,0x6a,0x86,0x83,0x25,0x0b,0x00,0x56,0x85,0x97,0x00,0x00,0x00, -0xe7,0x80,0x20,0xe7,0x4a,0x8b,0x81,0x49,0x85,0xbf,0x93,0x07,0x8b,0x00,0x23,0x34, -0xf4,0xf8,0x83,0x39,0x0b,0x00,0x93,0x05,0x00,0x03,0x56,0x85,0x97,0x00,0x00,0x00, -0xe7,0x80,0x00,0xe3,0x93,0x05,0x80,0x07,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80, -0x20,0xe2,0x6a,0x89,0x93,0xd7,0xc9,0x03,0xde,0x97,0x83,0xc5,0x07,0x00,0x56,0x85, -0x97,0x00,0x00,0x00,0xe7,0x80,0xc0,0xe0,0x92,0x09,0x7d,0x39,0xe3,0x14,0x09,0xfe, -0x03,0x3b,0x84,0xf8,0x81,0x49,0x0d,0xb7,0x13,0x09,0x8b,0x00,0x83,0x39,0x0b,0x00, -0x63,0x81,0x09,0x02,0x83,0xc5,0x09,0x00,0xad,0xc5,0x56,0x85,0x97,0x00,0x00,0x00, -0xe7,0x80,0x00,0xde,0x85,0x09,0x83,0xc5,0x09,0x00,0xe5,0xf9,0x4a,0x8b,0x81,0x49, -0xe5,0xbd,0x97,0x09,0x00,0x00,0x93,0x89,0x69,0x35,0xee,0x85,0xf9,0xbf,0x13,0x09, -0x8b,0x00,0x83,0x45,0x0b,0x00,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x40,0xdb, -0x4a,0x8b,0x81,0x49,0xd1,0xbd,0xd2,0x85,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80, -0x20,0xda,0x81,0x49,0xd1,0xb5,0xd2,0x85,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80, -0x20,0xd9,0xca,0x85,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x60,0xd8,0x81,0x49, -0x65,0xb5,0x4a,0x8b,0x81,0x49,0x4d,0xb5,0xe6,0x70,0x46,0x74,0xa6,0x74,0x06,0x79, -0xe6,0x69,0x46,0x6a,0xa6,0x6a,0x06,0x6b,0xe2,0x7b,0x42,0x7c,0xa2,0x7c,0x02,0x7d, -0xe2,0x6d,0x09,0x61,0x82,0x80,0x5d,0x71,0x06,0xec,0x22,0xe8,0x00,0x10,0x10,0xe0, -0x14,0xe4,0x18,0xe8,0x1c,0xec,0x23,0x30,0x04,0x03,0x23,0x34,0x14,0x03,0x22,0x86, -0x23,0x34,0x84,0xfe,0x97,0x00,0x00,0x00,0xe7,0x80,0x40,0xe0,0xe2,0x60,0x42,0x64, -0x61,0x61,0x82,0x80,0x1d,0x71,0x06,0xec,0x22,0xe8,0x00,0x10,0x0c,0xe4,0x10,0xe8, -0x14,0xec,0x18,0xf0,0x1c,0xf4,0x23,0x38,0x04,0x03,0x23,0x3c,0x14,0x03,0x13,0x06, -0x84,0x00,0x23,0x34,0xc4,0xfe,0xaa,0x85,0x05,0x45,0x97,0x00,0x00,0x00,0xe7,0x80, -0xe0,0xdc,0xe2,0x60,0x42,0x64,0x25,0x61,0x82,0x80,0x41,0x11,0x22,0xe4,0x00,0x08, -0x93,0x06,0x05,0xff,0x97,0x07,0x00,0x00,0x83,0xb7,0xc7,0x39,0x2d,0xa0,0x18,0x46, -0x2d,0x9f,0x23,0x2c,0xe5,0xfe,0x98,0x63,0x10,0x63,0x3d,0xa8,0x03,0x27,0x85,0xff, -0x31,0x9f,0x98,0xc7,0x83,0x36,0x05,0xff,0x91,0xa0,0x98,0x63,0x63,0xe4,0xe7,0x00, -0x63,0xea,0xe6,0x00,0xba,0x87,0xe3,0xfa,0xd7,0xfe,0x98,0x63,0x63,0xe4,0xe6,0x00, -0xe3,0xea,0xe7,0xfe,0x83,0x25,0x85,0xff,0x90,0x63,0x13,0x98,0x05,0x02,0x13,0x57, -0xc8,0x01,0x36,0x97,0xe3,0x0d,0xe6,0xfa,0x23,0x38,0xc5,0xfe,0x90,0x47,0x93,0x15, -0x06,0x02,0x13,0xd7,0xc5,0x01,0x3e,0x97,0xe3,0x8a,0xe6,0xfa,0x94,0xe3,0x17,0x07, -0x00,0x00,0x23,0x39,0xf7,0x32,0x22,0x64,0x41,0x01,0x82,0x80,0x39,0x71,0x06,0xfc, -0x22,0xf8,0x26,0xf4,0x4a,0xf0,0x4e,0xec,0x52,0xe8,0x56,0xe4,0x5a,0xe0,0x80,0x00, -0x93,0x14,0x05,0x02,0x81,0x90,0xbd,0x04,0x91,0x80,0x1b,0x8a,0x14,0x00,0x85,0x04, -0x17,0x05,0x00,0x00,0x03,0x35,0x05,0x30,0x15,0xc5,0x1c,0x61,0x98,0x47,0x63,0x71, -0x97,0x04,0xd2,0x89,0x1b,0x07,0x0a,0x00,0x85,0x66,0x63,0x73,0xd7,0x00,0x85,0x69, -0x1b,0x8b,0x09,0x00,0x9b,0x99,0x49,0x00,0x17,0x09,0x00,0x00,0x13,0x09,0x89,0x2d, -0xfd,0x5a,0xa5,0xa8,0x97,0x07,0x00,0x00,0x93,0x87,0xc7,0x2c,0x17,0x07,0x00,0x00, -0x13,0x07,0xc7,0x2c,0x98,0xe3,0x98,0xe7,0x23,0xa8,0x07,0x00,0xba,0x87,0xd1,0xb7, -0x63,0x8c,0xe4,0x02,0x3b,0x07,0x47,0x41,0x98,0xc7,0x93,0x16,0x07,0x02,0x13,0xd7, -0xc6,0x01,0xba,0x97,0x23,0xa4,0x47,0x01,0x17,0x07,0x00,0x00,0x23,0x3c,0xa7,0x28, -0x13,0x85,0x07,0x01,0xe2,0x70,0x42,0x74,0xa2,0x74,0x02,0x79,0xe2,0x69,0x42,0x6a, -0xa2,0x6a,0x02,0x6b,0x21,0x61,0x82,0x80,0x98,0x63,0x18,0xe1,0xf1,0xbf,0x23,0x24, -0x65,0x01,0x41,0x05,0x97,0x00,0x00,0x00,0xe7,0x80,0x60,0xec,0x03,0x35,0x09,0x00, -0x71,0xd9,0x1c,0x61,0x98,0x47,0xe3,0x75,0x97,0xfa,0x03,0x37,0x09,0x00,0x3e,0x85, -0xe3,0x19,0xf7,0xfe,0x4e,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x40,0xb3,0xe3,0x18, -0x55,0xfd,0x01,0x45,0x45,0xbf,0x00,0x00,0x69,0x6e,0x69,0x74,0x3a,0x20,0x73,0x74, -0x61,0x72,0x74,0x69,0x6e,0x67,0x20,0x73,0x68,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, -0x69,0x6e,0x69,0x74,0x3a,0x20,0x66,0x6f,0x72,0x6b,0x20,0x66,0x61,0x69,0x6c,0x65, -0x64,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x6e,0x69,0x74,0x3a,0x20,0x65,0x78, -0x65,0x63,0x20,0x73,0x68,0x20,0x66,0x61,0x69,0x6c,0x65,0x64,0x0a,0x00,0x00,0x00, -0x69,0x6e,0x69,0x74,0x3a,0x20,0x77,0x61,0x69,0x74,0x20,0x72,0x65,0x74,0x75,0x72, -0x6e,0x65,0x64,0x20,0x61,0x6e,0x20,0x65,0x72,0x72,0x6f,0x72,0x0a,0x00,0x00,0x00, -0x62,0x72,0x6b,0x00,0x00,0x00,0x00,0x00,0x63,0x68,0x64,0x69,0x72,0x00,0x00,0x00, -0x63,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,0x64,0x75,0x70,0x00,0x00,0x00,0x00,0x00, -0x65,0x78,0x69,0x74,0x00,0x00,0x00,0x00,0x66,0x6f,0x72,0x6b,0x00,0x00,0x00,0x00, -0x66,0x73,0x74,0x61,0x74,0x00,0x00,0x00,0x67,0x65,0x74,0x63,0x77,0x64,0x00,0x00, -0x67,0x65,0x74,0x70,0x69,0x64,0x00,0x00,0x67,0x65,0x74,0x74,0x69,0x6d,0x65,0x6f, +0x82,0x80,0x93,0x08,0x20,0x0d,0x73,0x00,0x00,0x00,0x82,0x80,0x93,0x08,0x00,0x0a, +0x73,0x00,0x00,0x00,0x82,0x80,0x01,0x11,0x06,0xec,0x22,0xe8,0x00,0x10,0xa3,0x07, +0xb4,0xfe,0x05,0x46,0x93,0x05,0xf4,0xfe,0x97,0x00,0x00,0x00,0xe7,0x80,0x40,0xf2, +0xe2,0x60,0x42,0x64,0x05,0x61,0x82,0x80,0x39,0x71,0x06,0xfc,0x22,0xf8,0x26,0xf4, +0x4a,0xf0,0x4e,0xec,0x80,0x00,0xaa,0x84,0x99,0xc2,0x63,0xc8,0x05,0x08,0x81,0x25, +0x81,0x48,0x93,0x09,0x04,0xfc,0xce,0x86,0x01,0x47,0x01,0x26,0x17,0x05,0x00,0x00, +0x13,0x05,0xc5,0x5a,0x3a,0x88,0x05,0x27,0xbb,0xf7,0xc5,0x02,0x82,0x17,0x81,0x93, +0xaa,0x97,0x83,0xc7,0x07,0x00,0x23,0x80,0xf6,0x00,0x9b,0x87,0x05,0x00,0xbb,0xd5, +0xc5,0x02,0x85,0x06,0xe3,0xf0,0xc7,0xfe,0x63,0x8c,0x08,0x00,0x93,0x07,0x07,0xfd, +0x33,0x87,0x87,0x00,0x93,0x07,0xd0,0x02,0x23,0x08,0xf7,0xfe,0x1b,0x07,0x28,0x00, +0x63,0x56,0xe0,0x02,0x13,0x09,0x04,0xfc,0x3a,0x99,0xfd,0x19,0xba,0x99,0x7d,0x37, +0x02,0x17,0x01,0x93,0xb3,0x89,0xe9,0x40,0x83,0x45,0xf9,0xff,0x26,0x85,0x97,0x00, +0x00,0x00,0xe7,0x80,0x80,0xf5,0x7d,0x19,0xe3,0x18,0x39,0xff,0xe2,0x70,0x42,0x74, +0xa2,0x74,0x02,0x79,0xe2,0x69,0x21,0x61,0x82,0x80,0xbb,0x05,0xb0,0x40,0x85,0x48, +0x8d,0xbf,0x19,0x71,0x86,0xfc,0xa2,0xf8,0xa6,0xf4,0xca,0xf0,0xce,0xec,0xd2,0xe8, +0xd6,0xe4,0xda,0xe0,0x5e,0xfc,0x62,0xf8,0x66,0xf4,0x6a,0xf0,0x6e,0xec,0x00,0x01, +0x03,0xc9,0x05,0x00,0x63,0x0f,0x09,0x18,0xaa,0x8a,0x32,0x8b,0x93,0x84,0x15,0x00, +0x81,0x49,0x13,0x0a,0x50,0x02,0x55,0x4c,0x97,0x0c,0x00,0x00,0x93,0x8c,0x8c,0x49, +0x93,0x0d,0x80,0x02,0x41,0x4d,0x97,0x0b,0x00,0x00,0x93,0x8b,0x2b,0x4e,0x39,0xa8, +0xca,0x85,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x20,0xee,0x19,0xa0,0x63,0x8d, +0x49,0x01,0x85,0x04,0x03,0xc9,0xf4,0xff,0x63,0x0d,0x09,0x14,0xe3,0x99,0x09,0xfe, +0xe3,0x10,0x49,0xff,0xd2,0x89,0xf5,0xb7,0x63,0x0c,0x49,0x11,0x9b,0x07,0xd9,0xf9, +0x93,0xf7,0xf7,0x0f,0x63,0x6e,0xfc,0x10,0x9b,0x07,0xd9,0xf9,0x13,0xf7,0xf7,0x0f, +0x63,0x68,0xec,0x10,0x93,0x17,0x27,0x00,0xe6,0x97,0x9c,0x43,0xe6,0x97,0x82,0x87, +0x13,0x09,0x8b,0x00,0x85,0x46,0x29,0x46,0x83,0x25,0x0b,0x00,0x56,0x85,0x97,0x00, +0x00,0x00,0xe7,0x80,0xa0,0xea,0x4a,0x8b,0x81,0x49,0x65,0xb7,0x13,0x09,0x8b,0x00, +0x81,0x46,0x29,0x46,0x83,0x25,0x0b,0x00,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80, +0xe0,0xe8,0x4a,0x8b,0x81,0x49,0x71,0xb7,0x13,0x09,0x8b,0x00,0x81,0x46,0x6a,0x86, +0x83,0x25,0x0b,0x00,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x20,0xe7,0x4a,0x8b, +0x81,0x49,0x85,0xbf,0x93,0x07,0x8b,0x00,0x23,0x34,0xf4,0xf8,0x83,0x39,0x0b,0x00, +0x93,0x05,0x00,0x03,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x00,0xe3,0x93,0x05, +0x80,0x07,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x20,0xe2,0x6a,0x89,0x93,0xd7, +0xc9,0x03,0xde,0x97,0x83,0xc5,0x07,0x00,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80, +0xc0,0xe0,0x92,0x09,0x7d,0x39,0xe3,0x14,0x09,0xfe,0x03,0x3b,0x84,0xf8,0x81,0x49, +0x0d,0xb7,0x13,0x09,0x8b,0x00,0x83,0x39,0x0b,0x00,0x63,0x81,0x09,0x02,0x83,0xc5, +0x09,0x00,0xad,0xc5,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x00,0xde,0x85,0x09, +0x83,0xc5,0x09,0x00,0xe5,0xf9,0x4a,0x8b,0x81,0x49,0xe5,0xbd,0x97,0x09,0x00,0x00, +0x93,0x89,0xc9,0x35,0xee,0x85,0xf9,0xbf,0x13,0x09,0x8b,0x00,0x83,0x45,0x0b,0x00, +0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x40,0xdb,0x4a,0x8b,0x81,0x49,0xd1,0xbd, +0xd2,0x85,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x20,0xda,0x81,0x49,0xd1,0xb5, +0xd2,0x85,0x56,0x85,0x97,0x00,0x00,0x00,0xe7,0x80,0x20,0xd9,0xca,0x85,0x56,0x85, +0x97,0x00,0x00,0x00,0xe7,0x80,0x60,0xd8,0x81,0x49,0x65,0xb5,0x4a,0x8b,0x81,0x49, +0x4d,0xb5,0xe6,0x70,0x46,0x74,0xa6,0x74,0x06,0x79,0xe6,0x69,0x46,0x6a,0xa6,0x6a, +0x06,0x6b,0xe2,0x7b,0x42,0x7c,0xa2,0x7c,0x02,0x7d,0xe2,0x6d,0x09,0x61,0x82,0x80, +0x5d,0x71,0x06,0xec,0x22,0xe8,0x00,0x10,0x10,0xe0,0x14,0xe4,0x18,0xe8,0x1c,0xec, +0x23,0x30,0x04,0x03,0x23,0x34,0x14,0x03,0x22,0x86,0x23,0x34,0x84,0xfe,0x97,0x00, +0x00,0x00,0xe7,0x80,0x40,0xe0,0xe2,0x60,0x42,0x64,0x61,0x61,0x82,0x80,0x1d,0x71, +0x06,0xec,0x22,0xe8,0x00,0x10,0x0c,0xe4,0x10,0xe8,0x14,0xec,0x18,0xf0,0x1c,0xf4, +0x23,0x38,0x04,0x03,0x23,0x3c,0x14,0x03,0x13,0x06,0x84,0x00,0x23,0x34,0xc4,0xfe, +0xaa,0x85,0x05,0x45,0x97,0x00,0x00,0x00,0xe7,0x80,0xe0,0xdc,0xe2,0x60,0x42,0x64, +0x25,0x61,0x82,0x80,0x41,0x11,0x22,0xe4,0x00,0x08,0x93,0x06,0x05,0xff,0x97,0x07, +0x00,0x00,0x83,0xb7,0xa7,0x3a,0x2d,0xa0,0x18,0x46,0x2d,0x9f,0x23,0x2c,0xe5,0xfe, +0x98,0x63,0x10,0x63,0x3d,0xa8,0x03,0x27,0x85,0xff,0x31,0x9f,0x98,0xc7,0x83,0x36, +0x05,0xff,0x91,0xa0,0x98,0x63,0x63,0xe4,0xe7,0x00,0x63,0xea,0xe6,0x00,0xba,0x87, +0xe3,0xfa,0xd7,0xfe,0x98,0x63,0x63,0xe4,0xe6,0x00,0xe3,0xea,0xe7,0xfe,0x83,0x25, +0x85,0xff,0x90,0x63,0x13,0x98,0x05,0x02,0x13,0x57,0xc8,0x01,0x36,0x97,0xe3,0x0d, +0xe6,0xfa,0x23,0x38,0xc5,0xfe,0x90,0x47,0x93,0x15,0x06,0x02,0x13,0xd7,0xc5,0x01, +0x3e,0x97,0xe3,0x8a,0xe6,0xfa,0x94,0xe3,0x17,0x07,0x00,0x00,0x23,0x30,0xf7,0x34, +0x22,0x64,0x41,0x01,0x82,0x80,0x39,0x71,0x06,0xfc,0x22,0xf8,0x26,0xf4,0x4a,0xf0, +0x4e,0xec,0x52,0xe8,0x56,0xe4,0x5a,0xe0,0x80,0x00,0x93,0x14,0x05,0x02,0x81,0x90, +0xbd,0x04,0x91,0x80,0x1b,0x8a,0x14,0x00,0x85,0x04,0x17,0x05,0x00,0x00,0x03,0x35, +0xe5,0x30,0x15,0xc5,0x1c,0x61,0x98,0x47,0x63,0x71,0x97,0x04,0xd2,0x89,0x1b,0x07, +0x0a,0x00,0x85,0x66,0x63,0x73,0xd7,0x00,0x85,0x69,0x1b,0x8b,0x09,0x00,0x9b,0x99, +0x49,0x00,0x17,0x09,0x00,0x00,0x13,0x09,0x69,0x2e,0xfd,0x5a,0xa5,0xa8,0x97,0x07, +0x00,0x00,0x93,0x87,0xa7,0x2d,0x17,0x07,0x00,0x00,0x13,0x07,0xa7,0x2d,0x98,0xe3, +0x98,0xe7,0x23,0xa8,0x07,0x00,0xba,0x87,0xd1,0xb7,0x63,0x8c,0xe4,0x02,0x3b,0x07, +0x47,0x41,0x98,0xc7,0x93,0x16,0x07,0x02,0x13,0xd7,0xc6,0x01,0xba,0x97,0x23,0xa4, +0x47,0x01,0x17,0x07,0x00,0x00,0x23,0x33,0xa7,0x2a,0x13,0x85,0x07,0x01,0xe2,0x70, +0x42,0x74,0xa2,0x74,0x02,0x79,0xe2,0x69,0x42,0x6a,0xa2,0x6a,0x02,0x6b,0x21,0x61, +0x82,0x80,0x98,0x63,0x18,0xe1,0xf1,0xbf,0x23,0x24,0x65,0x01,0x41,0x05,0x97,0x00, +0x00,0x00,0xe7,0x80,0x60,0xec,0x03,0x35,0x09,0x00,0x71,0xd9,0x1c,0x61,0x98,0x47, +0xe3,0x75,0x97,0xfa,0x03,0x37,0x09,0x00,0x3e,0x85,0xe3,0x19,0xf7,0xfe,0x4e,0x85, +0x97,0x00,0x00,0x00,0xe7,0x80,0xa0,0xb2,0xe3,0x18,0x55,0xfd,0x01,0x45,0x45,0xbf, +0x69,0x6e,0x69,0x74,0x3a,0x20,0x73,0x74,0x61,0x72,0x74,0x69,0x6e,0x67,0x20,0x73, +0x68,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x6e,0x69,0x74,0x3a,0x20,0x66,0x6f, +0x72,0x6b,0x20,0x66,0x61,0x69,0x6c,0x65,0x64,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, +0x69,0x6e,0x69,0x74,0x3a,0x20,0x65,0x78,0x65,0x63,0x20,0x73,0x68,0x20,0x66,0x61, +0x69,0x6c,0x65,0x64,0x0a,0x00,0x00,0x00,0x69,0x6e,0x69,0x74,0x3a,0x20,0x77,0x61, +0x69,0x74,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x65,0x64,0x20,0x61,0x6e,0x20,0x65, +0x72,0x72,0x6f,0x72,0x0a,0x00,0x00,0x00,0x62,0x72,0x6b,0x00,0x00,0x00,0x00,0x00, +0x63,0x68,0x64,0x69,0x72,0x00,0x00,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00, +0x64,0x75,0x70,0x00,0x00,0x00,0x00,0x00,0x65,0x78,0x69,0x74,0x00,0x00,0x00,0x00, +0x66,0x6f,0x72,0x6b,0x00,0x00,0x00,0x00,0x66,0x73,0x74,0x61,0x74,0x00,0x00,0x00, +0x67,0x65,0x74,0x63,0x77,0x64,0x00,0x00,0x67,0x65,0x74,0x70,0x69,0x64,0x00,0x00, +0x74,0x69,0x6d,0x65,0x73,0x00,0x00,0x00,0x67,0x65,0x74,0x74,0x69,0x6d,0x65,0x6f, 0x66,0x64,0x61,0x79,0x00,0x00,0x00,0x00,0x6d,0x6b,0x64,0x69,0x72,0x5f,0x00,0x00, 0x6f,0x70,0x65,0x6e,0x61,0x74,0x00,0x00,0x6f,0x70,0x65,0x6e,0x00,0x00,0x00,0x00, 0x70,0x69,0x70,0x65,0x00,0x00,0x00,0x00,0x72,0x65,0x61,0x64,0x00,0x00,0x00,0x00, 0x75,0x6e,0x61,0x6d,0x65,0x00,0x00,0x00,0x77,0x61,0x69,0x74,0x00,0x00,0x00,0x00, 0x77,0x72,0x69,0x74,0x65,0x00,0x00,0x00,0x73,0x6c,0x65,0x65,0x70,0x00,0x00,0x00, 0x63,0x6c,0x6f,0x6e,0x65,0x00,0x00,0x00,0x28,0x6e,0x75,0x6c,0x6c,0x29,0x00,0x00, -0xae,0xfc,0xff,0xff,0xd6,0xfb,0xff,0xff,0xd6,0xfc,0xff,0xff,0xd6,0xfc,0xff,0xff, -0xd6,0xfc,0xff,0xff,0xd6,0xfc,0xff,0xff,0xd6,0xfc,0xff,0xff,0xd6,0xfc,0xff,0xff, -0xd6,0xfc,0xff,0xff,0xf2,0xfb,0xff,0xff,0xd6,0xfc,0xff,0xff,0xd6,0xfc,0xff,0xff, -0xd6,0xfc,0xff,0xff,0x2a,0xfc,0xff,0xff,0xd6,0xfc,0xff,0xff,0xd6,0xfc,0xff,0xff, -0x78,0xfc,0xff,0xff,0xd6,0xfc,0xff,0xff,0xd6,0xfc,0xff,0xff,0xd6,0xfc,0xff,0xff, -0xd6,0xfc,0xff,0xff,0x0e,0xfc,0xff,0xff,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, +0xa8,0xfc,0xff,0xff,0xd0,0xfb,0xff,0xff,0xd0,0xfc,0xff,0xff,0xd0,0xfc,0xff,0xff, +0xd0,0xfc,0xff,0xff,0xd0,0xfc,0xff,0xff,0xd0,0xfc,0xff,0xff,0xd0,0xfc,0xff,0xff, +0xd0,0xfc,0xff,0xff,0xec,0xfb,0xff,0xff,0xd0,0xfc,0xff,0xff,0xd0,0xfc,0xff,0xff, +0xd0,0xfc,0xff,0xff,0x24,0xfc,0xff,0xff,0xd0,0xfc,0xff,0xff,0xd0,0xfc,0xff,0xff, +0x72,0xfc,0xff,0xff,0xd0,0xfc,0xff,0xff,0xd0,0xfc,0xff,0xff,0xd0,0xfc,0xff,0xff, +0xd0,0xfc,0xff,0xff,0x08,0xfc,0xff,0xff,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x09,0x00,0x00,0x00,0x00,0x00,0x00, -0x88,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x09,0x00,0x00,0x00,0x00,0x00,0x00, -0x98,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x09,0x00,0x00,0x00,0x00,0x00,0x00, -0xa8,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x09,0x00,0x00,0x00,0x00,0x00,0x00, -0xb8,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x09,0x00,0x00,0x00,0x00,0x00,0x00, -0xc8,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xd8,0x09,0x00,0x00,0x00,0x00,0x00,0x00, +0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x98,0x09,0x00,0x00,0x00,0x00,0x00,0x00, +0xa0,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xa8,0x09,0x00,0x00,0x00,0x00,0x00,0x00, +0xb0,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xb8,0x09,0x00,0x00,0x00,0x00,0x00,0x00, +0xc0,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x09,0x00,0x00,0x00,0x00,0x00,0x00, +0xd0,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xd8,0x09,0x00,0x00,0x00,0x00,0x00,0x00, 0xe0,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xe8,0x09,0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x09,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, -0x10,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, -0x20,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, +0xf8,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, +0x08,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, +0x18,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, +0x28,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, +0x38,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x0a,0x00,0x00,0x00,0x00,0x00,0x00, diff --git a/kernel/include/sysnum.h b/kernel/include/sysnum.h index 8d01f5b..0c34ee4 100644 --- a/kernel/include/sysnum.h +++ b/kernel/include/sysnum.h @@ -30,5 +30,6 @@ #define SYS_rename 26 #define SYS_shutdown 210 #define SYS_uname 160 +#define SYS_times 153 #endif \ No newline at end of file diff --git a/kernel/proc.o b/kernel/proc.o index 7ded943ed82dda5e4c4397e30aa3857fbef43e18..95ad9bef0fe9ca02b55ade7b864ba582e040802b 100644 GIT binary patch delta 897 zcmZ{gK}Zx)9LC>!I=M5IF1zl|PMS(dt{c{7mf}Iz!%`C!WQnb*1e=J0xVQ$La>zu7 z3Waz0>mk~U%+^J12#JL3AhdSTOVlAS!X%K8E+r-QUNd77H1PO+|L=X@yqPyWC%&5# z$ATo#JQJ!Eh&XGu3$i#6#Zf>At!Y|=qgEmyBQ$8NrQ>ZI5?18{2ze!G6cmK0t{czO zvX41J$EekeBnA5&C8u*m-lfCF<RSn|(V?NKk+_w+USszjSo3_Z5G}N1s!}K)G(;3{ z+RSbovb>cZ>dp%muIhHW+c_mwVFzl>D|uBIYgBh%K3Jl}qXKzychRoT2SWN0N1L1O zYCJ$)(^*OOvv)M=+SpMj+wsP1Z{n=wJhVw&+TXO`q)UjS-1hF{o&3CH?akQEGfw)* zb68xkomcdYr#zdwkVL<Fib&)e&GlB|1=`?!;l8iZ{TgYw0DD>K-qDNZzWh>*GxUV- zBQa`ezP~do{Jo0a_J{E*o${CYyN+$OOr{~{&&^lJjNTlhg0B0^vrZZz8j#ORsi&U; zO<On`eMuAY^q&5%o{l7<MS<?7^snvhrJrnZ{%5WKvtPO^*SAYMeHZ-@C?GyWJxU#3 zqN-9%6G~VKO6>O86Si4nGh$9CZ(X?8OdPuD#T(}5Q+;1>VmMZeXJf_Wcny9HdNVnL zZ^3disb-USmDDq+90|}lMj*p64q}Yd6VwjpVx$fagU&|$9x@y&Ahs}cg31vAodY1l zkpl4=LnEjh8t5E1Aj1&?v6W#NR0gt@q?Zc(kZL7Cg8E^xm7T*rsf{JZLFHHiog)Pq KjvpYlld|7|ghuZG delta 848 zcmZ|LUr19?7y$5dj^5n0n#1Yt-7=I2okOdQ&<#WvG@O(Wl{x=57*ax1R|)pk%*5S9 zFb?q<6fDA~f#Kx_6&dvsnmtqxhR{n9BE30#2r031*cnLBg~RVV-}%0C&OIyh^4z>U z;U??n43AGD`ct!4QsnE$aR?AXYl&1a7oi|12o0y#9>sdr3vr9$LdaftYaE;iQC**U zF|CxcjI=r~IyFh`QBh}=c`qGJKU@M}Rdhs}O~$fy$S?ZFvh#||Qm9O9;ghO|(=v*+ zZRVdI$>xHWsIACd)|V93{kc<8wb{(qfO)p)D8^B$+s^ENqsBrKd3<vz*RFc>N)ac_ zO<O(gz8xN9zj`BaM@TIwKbu(=nY+UK!dJov!cW2};f!!LOz#!f$*W@emVPO&rdGR3 zQa`EN?!$ew%l^_<(?a(q$gx(~%^qg#eXChnauDNwdZP3jSqRWWjthB#Up_kNID#em z&QayiYqvV5rlEkp=t7Ocv==PY&|OM(UPIbVeagu_LG!!XwuM8X*Q_Y1%+a8FvF*v9 z?d{LM+2H<XZ2YtC*-;nY5$F1?bW7dmDq#=Ezl5AMDV&h0%h^byP8F|H%~@|QIzL!& zvpIR-njJ5i*1CZoI6OL3j-L&clf!<T0;8QY<5RHNPU_jr8zD^$jS~ig6NL-|<|4!b z{tn_ND?KpKK^pOSFgn<}0U6G7@OCnqK;x)jaIQdx69;b>!vh*80tTl6G8_WlZpI8~ joMkW=WMvRGy4exzLOm>d6*SH?7@Rm{I3K~=ORD|?`!zlM diff --git a/kernel/syscall.c b/kernel/syscall.c index 96993b8..333e09a 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -118,6 +118,7 @@ extern uint64 sys_sysinfo(void); extern uint64 sys_rename(void); extern uint64 sys_shutdown(void); extern uint64 sys_uname(void); +extern uint64 sys_times(void); static uint64 (*syscalls[])(void) = { [SYS_fork] sys_fork, @@ -148,6 +149,7 @@ static uint64 (*syscalls[])(void) = { [SYS_rename] sys_rename, [SYS_shutdown] sys_shutdown, [SYS_uname] sys_uname, + [SYS_times] sys_times, }; static char *sysnames[] = { @@ -179,6 +181,7 @@ static char *sysnames[] = { [SYS_rename] "rename", [SYS_shutdown] "shutdown", [SYS_uname] "uname", + [SYS_times] "times", }; void @@ -249,7 +252,7 @@ sys_uname(void) strncpy(un.machine, "riscv64", sizeof(un.machine)); // if (copyout(p->pagetable, addr, (char *)&name, sizeof(name)) < 0) { - if (copyout2(addr, (char *)&un, sizeof((char *)&un)) < 0) { + if (copyout2(addr, (char *)&un, sizeof(un)) < 0) { return -1; } diff --git a/kernel/syscall.o b/kernel/syscall.o index 44682b345750750cbde5677cd262a41ad9f6e8b3..6cd416f4473addc0ced95540eac19c8723ae9a36 100644 GIT binary patch literal 53552 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 T#&ov&i}u2#`#Y6T4(tCnR9`Sv literal 53344 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 C=^S(b diff --git a/kernel/times.c b/kernel/times.c new file mode 100644 index 0000000..21fe1e3 --- /dev/null +++ b/kernel/times.c @@ -0,0 +1,52 @@ +#include "include/types.h" +#include "include/param.h" +#include "include/spinlock.h" +#include "include/proc.h" +#include "include/syscall.h" +#include "include/defs.h" + +extern uint ticks; +extern uint64 sys_uptime(void); + +// å‡è®¾ tms 结构体定义(需与用户空间一致) +struct tms { + uint64 utime; // 用户时间(ticks) + uint64 stime; // 系统时间(ticks) + uint64 cutime; // å进程用户时间(ticks) + uint64 cstime; // å进程系统时间(ticks) +}; + +// 系统调用 sys_times 实现 +uint64 +sys_times(void) +{ + uint64 tms_addr; // 用户空间 tms ç»“æž„ä½“çš„åœ°å€ + struct tms kernel_tms; + + // 1. ä»Žç³»ç»Ÿè°ƒç”¨å‚æ•°ä¸èŽ·å–用户空间 tms ç»“æž„ä½“åœ°å€ + if (argaddr(0, &tms_addr) < 0) { + return -1; // 傿•°é”™è¯¯ + } + + // 2. 获å–当å‰è¿›ç¨‹çš„æ—¶é—´ä¿¡æ¯ + struct proc *p = myproc(); + if (p == 0) { + return -1; // 当å‰è¿›ç¨‹æ— 效 + } + + // å¡«å……å†…æ ¸ä¸çš„ tms 结构体 + kernel_tms.utime = 0; // 用户时间 + kernel_tms.stime = sys_uptime(); // 系统时间 + kernel_tms.cutime = 0; // å进程用户时间 + kernel_tms.cstime = sys_uptime(); // å进程系统时间 + + // 3. 如果用户æä¾›äº† tms 结构体地å€ï¼Œå°†æ•°æ®å¤åˆ¶åˆ°ç”¨æˆ·ç©ºé—´ + if (tms_addr != 0) { + if (copyout(p->pagetable, tms_addr, (char *)&kernel_tms, sizeof(kernel_tms)) < 0) { + return -1; // å¤åˆ¶å¤±è´¥ + } + } + + // 4. 返回系统å¯åЍ以æ¥çš„æ€»æ»´ç”数(å‡è®¾ ticks 是全局å˜é‡ï¼‰ + return ticks; +} \ No newline at end of file diff --git a/sdcard.img b/sdcard.img index 6cb881c6885445f5f8f998abfa4e316add937aa4..f5535ace0297c2b0529325b0b374cb40b77a2067 100644 GIT binary patch delta 191365 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�Y=yjWlLz0UIv1srH-+7;CW)43Kv+;2W z=kzAFcd)QU?1Nr$D{E%s?Mq(0c0uo?%NGp3V9}i&UBa&5Wm1Z#<^gkh9_m9jzaC%H zZXWEIVouLrrs=sK_Sy{L{%>+Lx3-S$?BYnYO=~5a^fH{CIa+^+W^EiClW5Dr*QUzZ zjCine<2xVA*iOM7#hLtD=1ktU*e%PL%ntmmZK8f|EIZkKTtC~yaZ+5x4-ClGl0xva z(D%(5y)9yz)V{|DEU(bNc`WWwJp3iVUsw3+27ld);|}#G|8#Zboz<1Uuc_45Rci33 z!(Scvs|$ZY@D~h!R`?5nKO6jo!e2f3s}Fw-;IAS4HG)4o{Dr|^WB3b)zb5e46#klN z`zj-}cS{^=ztt++s6@FyodxPbP-B4_4izFOG*oD)&`_bFLPLdy3Jnz+Dl}ARsL)WM zp+ZB2h6)W88Y(nYXsFOop`k)Ug@y_Z6&fluRA{KsP@$nhLxqM44HX(HG*oD)&`_bF zLPLdy3Jnz+Dl}ARsL)WMp+ZB2h6)W88Y(nYXsFOop`k)Ug@y_Z6&fluRA{KsP@$nh zLxqM44HX(HG*oD)&`_bFLPLdy3Jnz+Dl}ARsL)WMp+ZB2h6)W88Y(nYXsFOop`k)U zg@y_Z6&fluRA{KsP@$nhLxqM44HX(HG*oD)&`_bFLPLdy3Jnz+Dl}ARsL)WMp+ZB2 zh6)W88Y(nYXsFOop`k)Ug@y_Z6&fluRA{KsP@$nhLxqM44HX(HG*oD)&`_bFLPLdy z3Jnz+Dl}ARsL)WMp+ZB2h6)W88Y(nYXsFOop`k)Ug@y_Z6&fluRA{KsP@$nhLxqM4 z4HX(HG*oD)&`_bFLPLdy3Jnz+Dl}ARsL)WMp+ZB2h6)W88Y(nYXsFOop`k)Ug@y_Z z6&fluRA{KsP@$nhLxqM44HX(HG*oD)&`_bFLPLdy3Jnz+Dl}ARsL)WMp+ZB2h6)W8 z8Y(nYXsFOop`k)Ug@y_Z6&fluRA{KsP@$nhLxqM44HX(HG*oD)&`_bFLPLdy3Jnz+ VDl}ARsL)WMp+dv|AJEWY{~y))vH}1A delta 197034 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 zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A zFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*AFw`*A iFw`*AFw`*AFw`*AFw`*AFw`*AFx2q>a}9Ui@P7e)Lc)mv diff --git a/target/kernel b/target/kernel index ad834c0b7322c2c2e839f9c55b1e9de0ac54450e..02fce6899acfdf4331fa7bdf3cbe4e34089020e4 100755 GIT binary patch delta 58131 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 U(aiY#E?YhN%=}z^V5*<~zc(v`-2eap delta 55698 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 F{{vw>8{+@~ diff --git a/target/kernel.asm b/target/kernel.asm index 8ab8706..e52fdcd 100644 --- a/target/kernel.asm +++ b/target/kernel.asm @@ -8,7 +8,7 @@ Disassembly of section .text: 80200000: 00150293 addi t0,a0,1 80200004: 02ba slli t0,t0,0xe 80200006: 0000c117 auipc sp,0xc - 8020000a: 90a13103 ld sp,-1782(sp) # 8020b910 <_GLOBAL_OFFSET_TABLE_+0x50> + 8020000a: 93213103 ld sp,-1742(sp) # 8020b938 <_GLOBAL_OFFSET_TABLE_+0x50> 8020000e: 9116 add sp,sp,t0 80200010: 1d5000ef jal ra,802009e4 <main> @@ -88,7 +88,7 @@ printint(int xx, int base, int sign) consputc(buf[i]); 80200092: fff4c503 lbu a0,-1(s1) 80200096: 00007097 auipc ra,0x7 - 8020009a: bb4080e7 jalr -1100(ra) # 80206c4a <consputc> + 8020009a: bc4080e7 jalr -1084(ra) # 80206c5a <consputc> while(--i >= 0) 8020009e: 14fd addi s1,s1,-1 802000a0: ff2499e3 bne s1,s2,80200092 <printint+0x7c> @@ -120,7 +120,7 @@ void printstring(const char* s) { consputc(*s++); 802000ca: 0485 addi s1,s1,1 802000cc: 00007097 auipc ra,0x7 - 802000d0: b7e080e7 jalr -1154(ra) # 80206c4a <consputc> + 802000d0: b8e080e7 jalr -1138(ra) # 80206c5a <consputc> while (*s) 802000d4: 0004c503 lbu a0,0(s1) 802000d8: f96d bnez a0,802000ca <printstring+0x12> @@ -287,7 +287,7 @@ r_fp() 8020021c: f2c080e7 jalr -212(ra) # 80200144 <panic> consputc(c); 80200220: 00007097 auipc ra,0x7 - 80200224: a2a080e7 jalr -1494(ra) # 80206c4a <consputc> + 80200224: a3a080e7 jalr -1478(ra) # 80206c5a <consputc> for(i = 0; (c = fmt[i] & 0xff) != 0; i++){ 80200228: 2985 addiw s3,s3,1 8020022a: 013a07b3 add a5,s4,s3 @@ -341,18 +341,18 @@ r_fp() consputc('0'); 802002ae: 03000513 li a0,48 802002b2: 00007097 auipc ra,0x7 - 802002b6: 998080e7 jalr -1640(ra) # 80206c4a <consputc> + 802002b6: 9a8080e7 jalr -1624(ra) # 80206c5a <consputc> consputc('x'); 802002ba: 07800513 li a0,120 802002be: 00007097 auipc ra,0x7 - 802002c2: 98c080e7 jalr -1652(ra) # 80206c4a <consputc> + 802002c2: 99c080e7 jalr -1636(ra) # 80206c5a <consputc> 802002c6: 84ea mv s1,s10 consputc(digits[x >> (sizeof(uint64) * 8 - 4)]); 802002c8: 03c95793 srli a5,s2,0x3c 802002cc: 97da add a5,a5,s6 802002ce: 0007c503 lbu a0,0(a5) 802002d2: 00007097 auipc ra,0x7 - 802002d6: 978080e7 jalr -1672(ra) # 80206c4a <consputc> + 802002d6: 988080e7 jalr -1656(ra) # 80206c5a <consputc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) 802002da: 0912 slli s2,s2,0x4 802002dc: 34fd addiw s1,s1,-1 @@ -369,7 +369,7 @@ r_fp() 802002f6: d90d beqz a0,80200228 <printf+0x9a> consputc(*s); 802002f8: 00007097 auipc ra,0x7 - 802002fc: 952080e7 jalr -1710(ra) # 80206c4a <consputc> + 802002fc: 962080e7 jalr -1694(ra) # 80206c5a <consputc> for(; *s; s++) 80200300: 0485 addi s1,s1,1 80200302: 0004c503 lbu a0,0(s1) @@ -384,17 +384,17 @@ r_fp() consputc('%'); 80200318: 8556 mv a0,s5 8020031a: 00007097 auipc ra,0x7 - 8020031e: 930080e7 jalr -1744(ra) # 80206c4a <consputc> + 8020031e: 940080e7 jalr -1728(ra) # 80206c5a <consputc> break; 80200322: b719 j 80200228 <printf+0x9a> consputc('%'); 80200324: 8556 mv a0,s5 80200326: 00007097 auipc ra,0x7 - 8020032a: 924080e7 jalr -1756(ra) # 80206c4a <consputc> + 8020032a: 934080e7 jalr -1740(ra) # 80206c5a <consputc> consputc(c); 8020032e: 8526 mv a0,s1 80200330: 00007097 auipc ra,0x7 - 80200334: 91a080e7 jalr -1766(ra) # 80206c4a <consputc> + 80200334: 92a080e7 jalr -1750(ra) # 80206c5a <consputc> break; 80200338: bdc5 j 80200228 <printf+0x9a> if(locking) @@ -528,7 +528,7 @@ kfree(void *pa) 80200450: e3ad bnez a5,802004b2 <kfree+0x72> 80200452: 84aa mv s1,a0 80200454: 0000b797 auipc a5,0xb - 80200458: 4947b783 ld a5,1172(a5) # 8020b8e8 <_GLOBAL_OFFSET_TABLE_+0x28> + 80200458: 4bc7b783 ld a5,1212(a5) # 8020b910 <_GLOBAL_OFFSET_TABLE_+0x28> 8020045c: 04f56b63 bltu a0,a5,802004b2 <kfree+0x72> 80200460: 40300793 li a5,1027 80200464: 07d6 slli a5,a5,0x15 @@ -640,7 +640,7 @@ kfree(void *pa) 8020053a: 40300593 li a1,1027 8020053e: 05d6 slli a1,a1,0x15 80200540: 0000b517 auipc a0,0xb - 80200544: 3a853503 ld a0,936(a0) # 8020b8e8 <_GLOBAL_OFFSET_TABLE_+0x28> + 80200544: 3d053503 ld a0,976(a0) # 8020b910 <_GLOBAL_OFFSET_TABLE_+0x28> 80200548: 00000097 auipc ra,0x0 8020054c: f7a080e7 jalr -134(ra) # 802004c2 <freerange> } @@ -1446,7 +1446,7 @@ main(unsigned long hartid, unsigned long dtb_pa) 80200a12: cbc080e7 jalr -836(ra) # 802026ca <trapinithart> plicinithart(); // ask PLIC for device interrupts 80200a16: 00006097 auipc ra,0x6 - 80200a1a: ff2080e7 jalr -14(ra) # 80206a08 <plicinithart> + 80200a1a: 002080e7 jalr 2(ra) # 80206a18 <plicinithart> printf("hart 1 init done\n"); 80200a1e: 00009517 auipc a0,0x9 80200a22: 9d250513 addi a0,a0,-1582 # 802093f0 <digits+0x70> @@ -1458,7 +1458,7 @@ main(unsigned long hartid, unsigned long dtb_pa) 80200a32: 592080e7 jalr 1426(ra) # 80201fc0 <scheduler> consoleinit(); 80200a36: 00006097 auipc ra,0x6 - 80200a3a: 3e4080e7 jalr 996(ra) # 80206e1a <consoleinit> + 80200a3a: 3f4080e7 jalr 1012(ra) # 80206e2a <consoleinit> printfinit(); // init a lock for printf 80200a3e: 00000097 auipc ra,0x0 80200a42: 930080e7 jalr -1744(ra) # 8020036e <printfinit> @@ -1476,7 +1476,7 @@ main(unsigned long hartid, unsigned long dtb_pa) 80200a62: 086080e7 jalr 134(ra) # 80200ae4 <kvminithart> timerinit(); // init a lock for timer 80200a66: 00004097 auipc ra,0x4 - 80200a6a: 558080e7 jalr 1368(ra) # 80204fbe <timerinit> + 80200a6a: 568080e7 jalr 1384(ra) # 80204fce <timerinit> trapinithart(); // install kernel trap vector, including interrupt handler 80200a6e: 00002097 auipc ra,0x2 80200a72: c5c080e7 jalr -932(ra) # 802026ca <trapinithart> @@ -1485,19 +1485,19 @@ main(unsigned long hartid, unsigned long dtb_pa) 80200a7a: f24080e7 jalr -220(ra) # 8020199a <procinit> plicinit(); 80200a7e: 00006097 auipc ra,0x6 - 80200a82: f72080e7 jalr -142(ra) # 802069f0 <plicinit> + 80200a82: f82080e7 jalr -126(ra) # 80206a00 <plicinit> plicinithart(); 80200a86: 00006097 auipc ra,0x6 - 80200a8a: f82080e7 jalr -126(ra) # 80206a08 <plicinithart> + 80200a8a: f92080e7 jalr -110(ra) # 80206a18 <plicinithart> disk_init(); 80200a8e: 00004097 auipc ra,0x4 - 80200a92: 5cc080e7 jalr 1484(ra) # 8020505a <disk_init> + 80200a92: 5dc080e7 jalr 1500(ra) # 8020506a <disk_init> binit(); // buffer cache 80200a96: 00003097 auipc ra,0x3 - 80200a9a: 8b0080e7 jalr -1872(ra) # 80203346 <binit> + 80200a9a: 8b2080e7 jalr -1870(ra) # 80203348 <binit> fileinit(); // file table 80200a9e: 00003097 auipc ra,0x3 - 80200aa2: cb4080e7 jalr -844(ra) # 80203752 <fileinit> + 80200aa2: cb6080e7 jalr -842(ra) # 80203754 <fileinit> userinit(); // first user process 80200aa6: 00001097 auipc ra,0x1 80200aaa: 2a4080e7 jalr 676(ra) # 80201d4a <userinit> @@ -1959,7 +1959,7 @@ mappages(pagetable_t pagetable, uint64 va, uint64 size, uint64 pa, int perm) 80200dc0: f3a080e7 jalr -198(ra) # 80200cf6 <kvmmap> kvmmap(KERNBASE, KERNBASE, (uint64)etext - KERNBASE, PTE_R | PTE_X); 80200dc4: 0000b497 auipc s1,0xb - 80200dc8: b1c4b483 ld s1,-1252(s1) # 8020b8e0 <_GLOBAL_OFFSET_TABLE_+0x20> + 80200dc8: b444b483 ld s1,-1212(s1) # 8020b908 <_GLOBAL_OFFSET_TABLE_+0x20> 80200dcc: 46a9 li a3,10 80200dce: bff00613 li a2,-1025 80200dd2: 0656 slli a2,a2,0x15 @@ -1982,7 +1982,7 @@ mappages(pagetable_t pagetable, uint64 va, uint64 size, uint64 pa, int perm) 80200dfc: 46a9 li a3,10 80200dfe: 6605 lui a2,0x1 80200e00: 0000b597 auipc a1,0xb - 80200e04: ac85b583 ld a1,-1336(a1) # 8020b8c8 <_GLOBAL_OFFSET_TABLE_+0x8> + 80200e04: af05b583 ld a1,-1296(a1) # 8020b8f0 <_GLOBAL_OFFSET_TABLE_+0x8> 80200e08: 04000537 lui a0,0x4000 80200e0c: 157d addi a0,a0,-1 # 3ffffff <_entry-0x7c200001> 80200e0e: 0532 slli a0,a0,0xc @@ -3789,7 +3789,7 @@ myproc(void) { 80201aae: 5407ab23 sw zero,1366(a5) # 8020a000 <first.1> fat32_init(); 80201ab2: 00004097 auipc ra,0x4 - 80201ab6: c92080e7 jalr -878(ra) # 80205744 <fat32_init> + 80201ab6: ca2080e7 jalr -862(ra) # 80205754 <fat32_init> myproc()->cwd = ename("/"); 80201aba: 00000097 auipc ra,0x0 80201abe: f82080e7 jalr -126(ra) # 80201a3c <myproc> @@ -3797,7 +3797,7 @@ myproc(void) { 80201ac4: 00008517 auipc a0,0x8 80201ac8: b6c50513 addi a0,a0,-1172 # 80209630 <digits+0x2b0> 80201acc: 00005097 auipc ra,0x5 - 80201ad0: eea080e7 jalr -278(ra) # 802069b6 <ename> + 80201ad0: efa080e7 jalr -262(ra) # 802069c6 <ename> 80201ad4: 14a4bc23 sd a0,344(s1) 80201ad8: b7c1 j 80201a98 <forkret+0x24> @@ -3853,7 +3853,7 @@ allocpid() { if(mappages(pagetable, TRAMPOLINE, PGSIZE, 80201b3a: 4729 li a4,10 80201b3c: 0000a697 auipc a3,0xa - 80201b40: d8c6b683 ld a3,-628(a3) # 8020b8c8 <_GLOBAL_OFFSET_TABLE_+0x8> + 80201b40: db46b683 ld a3,-588(a3) # 8020b8f0 <_GLOBAL_OFFSET_TABLE_+0x8> 80201b44: 6605 lui a2,0x1 80201b46: 040005b7 lui a1,0x4000 80201b4a: 15fd addi a1,a1,-1 # 3ffffff <_entry-0x7c200001> @@ -4118,7 +4118,7 @@ allocpid() { 80201d64: 40a7bc23 sd a0,1048(a5) # 80214178 <initproc> uvminit(p->pagetable , p->kpagetable, initcode, sizeof(initcode)); 80201d68: 6905 lui s2,0x1 - 80201d6a: b4890693 addi a3,s2,-1208 # b48 <_entry-0x801ff4b8> + 80201d6a: b7090693 addi a3,s2,-1168 # b70 <_entry-0x801ff490> 80201d6e: 00008617 auipc a2,0x8 80201d72: 29a60613 addi a2,a2,666 # 8020a008 <initcode> 80201d76: 6d2c ld a1,88(a0) @@ -4298,13 +4298,13 @@ allocpid() { 80201efc: d97d beqz a0,80201ef2 <fork+0xb0> np->ofile[i] = filedup(p->ofile[i]); 80201efe: 00002097 auipc ra,0x2 - 80201f02: 916080e7 jalr -1770(ra) # 80203814 <filedup> + 80201f02: 918080e7 jalr -1768(ra) # 80203816 <filedup> 80201f06: 00a93023 sd a0,0(s2) 80201f0a: b7e5 j 80201ef2 <fork+0xb0> np->cwd = edup(p->cwd); 80201f0c: 158ab503 ld a0,344(s5) 80201f10: 00004097 auipc ra,0x4 - 80201f14: 0a0080e7 jalr 160(ra) # 80205fb0 <edup> + 80201f14: 0b0080e7 jalr 176(ra) # 80205fc0 <edup> 80201f18: 14aa3c23 sd a0,344(s4) safestrcpy(np->name, p->name, sizeof(p->name)); 80201f1c: 4641 li a2,16 @@ -4421,7 +4421,7 @@ allocpid() { 80202006: 1a7e slli s4,s4,0x3f w_satp(MAKE_SATP(kernel_pagetable)); 80202008: 0000ab97 auipc s7,0xa - 8020200c: 900bbb83 ld s7,-1792(s7) # 8020b908 <_GLOBAL_OFFSET_TABLE_+0x48> + 8020200c: 928bbb83 ld s7,-1752(s7) # 8020b930 <_GLOBAL_OFFSET_TABLE_+0x48> 80202010: a8a5 j 80202088 <scheduler+0xc8> release(&p->lock); 80202012: 8526 mv a0,s1 @@ -4616,7 +4616,7 @@ allocpid() { 802021bc: f8c080e7 jalr -116(ra) # 80200144 <panic> fileclose(f); 802021c0: 00001097 auipc ra,0x1 - 802021c4: 6a6080e7 jalr 1702(ra) # 80203866 <fileclose> + 802021c4: 6a8080e7 jalr 1704(ra) # 80203868 <fileclose> p->ofile[fd] = 0; 802021c8: 0004b023 sd zero,0(s1) for(int fd = 0; fd < NOFILE; fd++){ @@ -4629,7 +4629,7 @@ allocpid() { eput(p->cwd); 802021d8: 1589b503 ld a0,344(s3) 802021dc: 00004097 auipc ra,0x4 - 802021e0: 0b6080e7 jalr 182(ra) # 80206292 <eput> + 802021e0: 0c6080e7 jalr 198(ra) # 802062a2 <eput> p->cwd = 0; 802021e4: 1409bc23 sd zero,344(s3) acquire(&initproc->lock); @@ -5160,7 +5160,7 @@ procdump(void) 802025c8: b14a0a13 addi s4,s4,-1260 # 802090d8 <etext+0xd8> if(p->state >= 0 && p->state < NELEM(states) && states[p->state]) 802025cc: 00008b97 auipc s7,0x8 - 802025d0: 584b8b93 addi s7,s7,1412 # 8020ab50 <states.0> + 802025d0: 5acb8b93 addi s7,s7,1452 # 8020ab78 <states.0> 802025d4: a01d j 802025fa <procdump+0x7e> printf("%d\t%s\t%s\t%d", p->pid, state, p->name, p->sz); 802025d6: ee86b703 ld a4,-280(a3) @@ -5286,7 +5286,7 @@ trapinithart(void) 802026d0: 0800 addi s0,sp,16 asm volatile("csrw stvec, %0" : : "r" (x)); 802026d2: 00009797 auipc a5,0x9 - 802026d6: 2067b783 ld a5,518(a5) # 8020b8d8 <_GLOBAL_OFFSET_TABLE_+0x18> + 802026d6: 22e7b783 ld a5,558(a5) # 8020b900 <_GLOBAL_OFFSET_TABLE_+0x18> 802026da: 10579073 csrw stvec,a5 asm volatile("csrr %0, sstatus" : "=r" (x) ); 802026de: 100027f3 csrr a5,sstatus @@ -5304,7 +5304,7 @@ trapinithart(void) 802026f2: 10479073 csrw sie,a5 set_next_timeout(); 802026f6: 00003097 auipc ra,0x3 - 802026fa: 8f0080e7 jalr -1808(ra) # 80204fe6 <set_next_timeout> + 802026fa: 900080e7 jalr -1792(ra) # 80204ff6 <set_next_timeout> #ifdef DEBUG printf("trapinithart\n"); #endif @@ -5341,9 +5341,9 @@ usertrapret(void) // send syscalls, interrupts, and exceptions to trampoline.S w_stvec(TRAMPOLINE + (uservec - trampoline)); 80202720: 00009697 auipc a3,0x9 - 80202724: 1a86b683 ld a3,424(a3) # 8020b8c8 <_GLOBAL_OFFSET_TABLE_+0x8> + 80202724: 1d06b683 ld a3,464(a3) # 8020b8f0 <_GLOBAL_OFFSET_TABLE_+0x8> 80202728: 00009717 auipc a4,0x9 - 8020272c: 1d073703 ld a4,464(a4) # 8020b8f8 <_GLOBAL_OFFSET_TABLE_+0x38> + 8020272c: 1f873703 ld a4,504(a4) # 8020b920 <_GLOBAL_OFFSET_TABLE_+0x38> 80202730: 8f15 sub a4,a4,a3 80202732: 040007b7 lui a5,0x4000 80202736: 17fd addi a5,a5,-1 # 3ffffff <_entry-0x7c200001> @@ -5408,7 +5408,7 @@ usertrapret(void) // and switches to user mode with sret. uint64 fn = TRAMPOLINE + (userret - trampoline); 80202780: 00009717 auipc a4,0x9 - 80202784: 15073703 ld a4,336(a4) # 8020b8d0 <_GLOBAL_OFFSET_TABLE_+0x10> + 80202784: 17873703 ld a4,376(a4) # 8020b8f8 <_GLOBAL_OFFSET_TABLE_+0x10> 80202788: 8f15 sub a4,a4,a3 8020278a: 97ba add a5,a5,a4 ((void (*)(uint64,uint64))fn)(TRAPFRAME, satp); @@ -5473,7 +5473,7 @@ int devintr(void) { 802027d2: fed792e3 bne a5,a3,802027b6 <devintr+0x12> int irq = plic_claim(); 802027d6: 00004097 auipc ra,0x4 - 802027da: 274080e7 jalr 628(ra) # 80206a4a <plic_claim> + 802027da: 284080e7 jalr 644(ra) # 80206a5a <plic_claim> 802027de: 84aa mv s1,a0 if (UART_IRQ == irq) { 802027e0: 47a9 li a5,10 @@ -5506,21 +5506,21 @@ int devintr(void) { if (irq) { plic_complete(irq);} 8020281a: 8526 mv a0,s1 8020281c: 00004097 auipc ra,0x4 - 80202820: 258080e7 jalr 600(ra) # 80206a74 <plic_complete> + 80202820: 268080e7 jalr 616(ra) # 80206a84 <plic_complete> return 1; 80202824: 4505 li a0,1 80202826: bf71 j 802027c2 <devintr+0x1e> consoleintr(c); 80202828: 00004097 auipc ra,0x4 - 8020282c: 460080e7 jalr 1120(ra) # 80206c88 <consoleintr> + 8020282c: 470080e7 jalr 1136(ra) # 80206c98 <consoleintr> 80202830: b7ed j 8020281a <devintr+0x76> disk_intr(); 80202832: 00003097 auipc ra,0x3 - 80202836: 874080e7 jalr -1932(ra) # 802050a6 <disk_intr> + 80202836: 884080e7 jalr -1916(ra) # 802050b6 <disk_intr> 8020283a: b7c5 j 8020281a <devintr+0x76> timer_tick(); 8020283c: 00002097 auipc ra,0x2 - 80202840: 7d0080e7 jalr 2000(ra) # 8020500c <timer_tick> + 80202840: 7e0080e7 jalr 2016(ra) # 8020501c <timer_tick> return 2; 80202844: 4509 li a0,2 80202846: bfb5 j 802027c2 <devintr+0x1e> @@ -5540,7 +5540,7 @@ int devintr(void) { 8020285c: e3ad bnez a5,802028be <usertrap+0x76> asm volatile("csrw stvec, %0" : : "r" (x)); 8020285e: 00009797 auipc a5,0x9 - 80202862: 07a7b783 ld a5,122(a5) # 8020b8d8 <_GLOBAL_OFFSET_TABLE_+0x18> + 80202862: 0a27b783 ld a5,162(a5) # 8020b900 <_GLOBAL_OFFSET_TABLE_+0x18> 80202866: 10579073 csrw stvec,a5 struct proc *p = myproc(); 8020286a: fffff097 auipc ra,0xfffff @@ -5572,7 +5572,7 @@ int devintr(void) { 8020289a: 10079073 csrw sstatus,a5 syscall(); 8020289e: 00000097 auipc ra,0x0 - 802028a2: 682080e7 jalr 1666(ra) # 80202f20 <syscall> + 802028a2: 684080e7 jalr 1668(ra) # 80202f22 <syscall> if(p->killed) 802028a6: 589c lw a5,48(s1) 802028a8: ebd1 bnez a5,8020293c <usertrap+0xf4> @@ -5972,7 +5972,7 @@ argraw(int n) 80202ca2: 0497e163 bltu a5,s1,80202ce4 <argraw+0x58> 80202ca6: 048a slli s1,s1,0x2 80202ca8: 00007717 auipc a4,0x7 - 80202cac: e1c70713 addi a4,a4,-484 # 80209ac4 <digits+0x744> + 80202cac: e2470713 addi a4,a4,-476 # 80209acc <digits+0x74c> 80202cb0: 94ba add s1,s1,a4 80202cb2: 409c lw a5,0(s1) 80202cb4: 97ba add a5,a5,a4 @@ -6079,8872 +6079,8957 @@ sys_uname(void) 80202d82: af8080e7 jalr -1288(ra) # 80200876 <strncpy> // if (copyout(p->pagetable, addr, (char *)&name, sizeof(name)) < 0) { - if (copyout2(addr, (char *)&un, sizeof((char *)&un)) < 0) { - 80202d86: 4621 li a2,8 - 80202d88: 85a6 mv a1,s1 - 80202d8a: 854a mv a0,s2 - 80202d8c: ffffe097 auipc ra,0xffffe - 80202d90: 5e6080e7 jalr 1510(ra) # 80201372 <copyout2> + if (copyout2(addr, (char *)&un, sizeof(un)) < 0) { + 80202d86: 18600613 li a2,390 + 80202d8a: 85a6 mv a1,s1 + 80202d8c: 854a mv a0,s2 + 80202d8e: ffffe097 auipc ra,0xffffe + 80202d92: 5e4080e7 jalr 1508(ra) # 80201372 <copyout2> return -1; } return 0; - 80202d94: 957d srai a0,a0,0x3f - 80202d96: 70ba ld ra,424(sp) - 80202d98: 741a ld s0,416(sp) - 80202d9a: 64fa ld s1,408(sp) - 80202d9c: 695a ld s2,400(sp) - 80202d9e: 615d addi sp,sp,432 - 80202da0: 8082 ret - -0000000080202da2 <sys_sysinfo>: -{ - 80202da2: 7179 addi sp,sp,-48 - 80202da4: f406 sd ra,40(sp) - 80202da6: f022 sd s0,32(sp) - 80202da8: ec26 sd s1,24(sp) - 80202daa: 1800 addi s0,sp,48 + 80202d96: 957d srai a0,a0,0x3f + 80202d98: 70ba ld ra,424(sp) + 80202d9a: 741a ld s0,416(sp) + 80202d9c: 64fa ld s1,408(sp) + 80202d9e: 695a ld s2,400(sp) + 80202da0: 615d addi sp,sp,432 + 80202da2: 8082 ret + +0000000080202da4 <sys_sysinfo>: +{ + 80202da4: 7179 addi sp,sp,-48 + 80202da6: f406 sd ra,40(sp) + 80202da8: f022 sd s0,32(sp) + 80202daa: ec26 sd s1,24(sp) + 80202dac: 1800 addi s0,sp,48 *ip = argraw(n); - 80202dac: 4501 li a0,0 - 80202dae: 00000097 auipc ra,0x0 - 80202db2: ede080e7 jalr -290(ra) # 80202c8c <argraw> - 80202db6: 84aa mv s1,a0 + 80202dae: 4501 li a0,0 + 80202db0: 00000097 auipc ra,0x0 + 80202db4: edc080e7 jalr -292(ra) # 80202c8c <argraw> + 80202db8: 84aa mv s1,a0 info.freemem = freemem_amount(); - 80202db8: ffffe097 auipc ra,0xffffe - 80202dbc: 808080e7 jalr -2040(ra) # 802005c0 <freemem_amount> - 80202dc0: fca43823 sd a0,-48(s0) + 80202dba: ffffe097 auipc ra,0xffffe + 80202dbe: 806080e7 jalr -2042(ra) # 802005c0 <freemem_amount> + 80202dc2: fca43823 sd a0,-48(s0) info.nproc = procnum(); - 80202dc4: 00000097 auipc ra,0x0 - 80202dc8: 86c080e7 jalr -1940(ra) # 80202630 <procnum> - 80202dcc: fca43c23 sd a0,-40(s0) + 80202dc6: 00000097 auipc ra,0x0 + 80202dca: 86a080e7 jalr -1942(ra) # 80202630 <procnum> + 80202dce: fca43c23 sd a0,-40(s0) if (copyout2(addr, (char *)&info, sizeof(info)) < 0) { - 80202dd0: 4641 li a2,16 - 80202dd2: fd040593 addi a1,s0,-48 - 80202dd6: 8526 mv a0,s1 - 80202dd8: ffffe097 auipc ra,0xffffe - 80202ddc: 59a080e7 jalr 1434(ra) # 80201372 <copyout2> -} - 80202de0: 957d srai a0,a0,0x3f - 80202de2: 70a2 ld ra,40(sp) - 80202de4: 7402 ld s0,32(sp) - 80202de6: 64e2 ld s1,24(sp) - 80202de8: 6145 addi sp,sp,48 - 80202dea: 8082 ret - -0000000080202dec <fetchaddr>: -{ - 80202dec: 1101 addi sp,sp,-32 - 80202dee: ec06 sd ra,24(sp) - 80202df0: e822 sd s0,16(sp) - 80202df2: e426 sd s1,8(sp) - 80202df4: e04a sd s2,0(sp) - 80202df6: 1000 addi s0,sp,32 - 80202df8: 84aa mv s1,a0 - 80202dfa: 892e mv s2,a1 + 80202dd2: 4641 li a2,16 + 80202dd4: fd040593 addi a1,s0,-48 + 80202dd8: 8526 mv a0,s1 + 80202dda: ffffe097 auipc ra,0xffffe + 80202dde: 598080e7 jalr 1432(ra) # 80201372 <copyout2> +} + 80202de2: 957d srai a0,a0,0x3f + 80202de4: 70a2 ld ra,40(sp) + 80202de6: 7402 ld s0,32(sp) + 80202de8: 64e2 ld s1,24(sp) + 80202dea: 6145 addi sp,sp,48 + 80202dec: 8082 ret + +0000000080202dee <fetchaddr>: +{ + 80202dee: 1101 addi sp,sp,-32 + 80202df0: ec06 sd ra,24(sp) + 80202df2: e822 sd s0,16(sp) + 80202df4: e426 sd s1,8(sp) + 80202df6: e04a sd s2,0(sp) + 80202df8: 1000 addi s0,sp,32 + 80202dfa: 84aa mv s1,a0 + 80202dfc: 892e mv s2,a1 struct proc *p = myproc(); - 80202dfc: fffff097 auipc ra,0xfffff - 80202e00: c40080e7 jalr -960(ra) # 80201a3c <myproc> + 80202dfe: fffff097 auipc ra,0xfffff + 80202e02: c3e080e7 jalr -962(ra) # 80201a3c <myproc> if(addr >= p->sz || addr+sizeof(uint64) > p->sz) - 80202e04: 653c ld a5,72(a0) - 80202e06: 02f4f763 bgeu s1,a5,80202e34 <fetchaddr+0x48> - 80202e0a: 00848713 addi a4,s1,8 - 80202e0e: 02e7e563 bltu a5,a4,80202e38 <fetchaddr+0x4c> + 80202e06: 653c ld a5,72(a0) + 80202e08: 02f4f763 bgeu s1,a5,80202e36 <fetchaddr+0x48> + 80202e0c: 00848713 addi a4,s1,8 + 80202e10: 02e7e563 bltu a5,a4,80202e3a <fetchaddr+0x4c> if(copyin2((char *)ip, addr, sizeof(*ip)) != 0) - 80202e12: 4621 li a2,8 - 80202e14: 85a6 mv a1,s1 - 80202e16: 854a mv a0,s2 - 80202e18: ffffe097 auipc ra,0xffffe - 80202e1c: 63a080e7 jalr 1594(ra) # 80201452 <copyin2> - 80202e20: 00a03533 snez a0,a0 - 80202e24: 40a00533 neg a0,a0 -} - 80202e28: 60e2 ld ra,24(sp) - 80202e2a: 6442 ld s0,16(sp) - 80202e2c: 64a2 ld s1,8(sp) - 80202e2e: 6902 ld s2,0(sp) - 80202e30: 6105 addi sp,sp,32 - 80202e32: 8082 ret + 80202e14: 4621 li a2,8 + 80202e16: 85a6 mv a1,s1 + 80202e18: 854a mv a0,s2 + 80202e1a: ffffe097 auipc ra,0xffffe + 80202e1e: 638080e7 jalr 1592(ra) # 80201452 <copyin2> + 80202e22: 00a03533 snez a0,a0 + 80202e26: 40a00533 neg a0,a0 +} + 80202e2a: 60e2 ld ra,24(sp) + 80202e2c: 6442 ld s0,16(sp) + 80202e2e: 64a2 ld s1,8(sp) + 80202e30: 6902 ld s2,0(sp) + 80202e32: 6105 addi sp,sp,32 + 80202e34: 8082 ret return -1; - 80202e34: 557d li a0,-1 - 80202e36: bfcd j 80202e28 <fetchaddr+0x3c> - 80202e38: 557d li a0,-1 - 80202e3a: b7fd j 80202e28 <fetchaddr+0x3c> - -0000000080202e3c <fetchstr>: -{ - 80202e3c: 1101 addi sp,sp,-32 - 80202e3e: ec06 sd ra,24(sp) - 80202e40: e822 sd s0,16(sp) - 80202e42: e426 sd s1,8(sp) - 80202e44: 1000 addi s0,sp,32 - 80202e46: 84ae mv s1,a1 + 80202e36: 557d li a0,-1 + 80202e38: bfcd j 80202e2a <fetchaddr+0x3c> + 80202e3a: 557d li a0,-1 + 80202e3c: b7fd j 80202e2a <fetchaddr+0x3c> + +0000000080202e3e <fetchstr>: +{ + 80202e3e: 1101 addi sp,sp,-32 + 80202e40: ec06 sd ra,24(sp) + 80202e42: e822 sd s0,16(sp) + 80202e44: e426 sd s1,8(sp) + 80202e46: 1000 addi s0,sp,32 + 80202e48: 84ae mv s1,a1 int err = copyinstr2(buf, addr, max); - 80202e48: 85aa mv a1,a0 - 80202e4a: 8526 mv a0,s1 - 80202e4c: ffffe097 auipc ra,0xffffe - 80202e50: 708080e7 jalr 1800(ra) # 80201554 <copyinstr2> + 80202e4a: 85aa mv a1,a0 + 80202e4c: 8526 mv a0,s1 + 80202e4e: ffffe097 auipc ra,0xffffe + 80202e52: 706080e7 jalr 1798(ra) # 80201554 <copyinstr2> if(err < 0) - 80202e54: 00054763 bltz a0,80202e62 <fetchstr+0x26> + 80202e56: 00054763 bltz a0,80202e64 <fetchstr+0x26> return strlen(buf); - 80202e58: 8526 mv a0,s1 - 80202e5a: ffffe097 auipc ra,0xffffe - 80202e5e: a8c080e7 jalr -1396(ra) # 802008e6 <strlen> -} - 80202e62: 60e2 ld ra,24(sp) - 80202e64: 6442 ld s0,16(sp) - 80202e66: 64a2 ld s1,8(sp) - 80202e68: 6105 addi sp,sp,32 - 80202e6a: 8082 ret - -0000000080202e6c <argint>: -{ - 80202e6c: 1101 addi sp,sp,-32 - 80202e6e: ec06 sd ra,24(sp) - 80202e70: e822 sd s0,16(sp) - 80202e72: e426 sd s1,8(sp) - 80202e74: 1000 addi s0,sp,32 - 80202e76: 84ae mv s1,a1 + 80202e5a: 8526 mv a0,s1 + 80202e5c: ffffe097 auipc ra,0xffffe + 80202e60: a8a080e7 jalr -1398(ra) # 802008e6 <strlen> +} + 80202e64: 60e2 ld ra,24(sp) + 80202e66: 6442 ld s0,16(sp) + 80202e68: 64a2 ld s1,8(sp) + 80202e6a: 6105 addi sp,sp,32 + 80202e6c: 8082 ret + +0000000080202e6e <argint>: +{ + 80202e6e: 1101 addi sp,sp,-32 + 80202e70: ec06 sd ra,24(sp) + 80202e72: e822 sd s0,16(sp) + 80202e74: e426 sd s1,8(sp) + 80202e76: 1000 addi s0,sp,32 + 80202e78: 84ae mv s1,a1 *ip = argraw(n); - 80202e78: 00000097 auipc ra,0x0 - 80202e7c: e14080e7 jalr -492(ra) # 80202c8c <argraw> - 80202e80: c088 sw a0,0(s1) -} - 80202e82: 4501 li a0,0 - 80202e84: 60e2 ld ra,24(sp) - 80202e86: 6442 ld s0,16(sp) - 80202e88: 64a2 ld s1,8(sp) - 80202e8a: 6105 addi sp,sp,32 - 80202e8c: 8082 ret - -0000000080202e8e <sys_test_proc>: + 80202e7a: 00000097 auipc ra,0x0 + 80202e7e: e12080e7 jalr -494(ra) # 80202c8c <argraw> + 80202e82: c088 sw a0,0(s1) +} + 80202e84: 4501 li a0,0 + 80202e86: 60e2 ld ra,24(sp) + 80202e88: 6442 ld s0,16(sp) + 80202e8a: 64a2 ld s1,8(sp) + 80202e8c: 6105 addi sp,sp,32 + 80202e8e: 8082 ret + +0000000080202e90 <sys_test_proc>: sys_test_proc(void) { - 80202e8e: 1101 addi sp,sp,-32 - 80202e90: ec06 sd ra,24(sp) - 80202e92: e822 sd s0,16(sp) - 80202e94: 1000 addi s0,sp,32 + 80202e90: 1101 addi sp,sp,-32 + 80202e92: ec06 sd ra,24(sp) + 80202e94: e822 sd s0,16(sp) + 80202e96: 1000 addi s0,sp,32 argint(0, &n); - 80202e96: fec40593 addi a1,s0,-20 - 80202e9a: 4501 li a0,0 - 80202e9c: 00000097 auipc ra,0x0 - 80202ea0: fd0080e7 jalr -48(ra) # 80202e6c <argint> + 80202e98: fec40593 addi a1,s0,-20 + 80202e9c: 4501 li a0,0 + 80202e9e: 00000097 auipc ra,0x0 + 80202ea2: fd0080e7 jalr -48(ra) # 80202e6e <argint> printf("hello world from proc %d, hart %d, arg %d\n", myproc()->pid, r_tp(), n); - 80202ea4: fffff097 auipc ra,0xfffff - 80202ea8: b98080e7 jalr -1128(ra) # 80201a3c <myproc> - 80202eac: 8612 mv a2,tp - 80202eae: fec42683 lw a3,-20(s0) - 80202eb2: 5d0c lw a1,56(a0) - 80202eb4: 00007517 auipc a0,0x7 - 80202eb8: abc50513 addi a0,a0,-1348 # 80209970 <digits+0x5f0> - 80202ebc: ffffd097 auipc ra,0xffffd - 80202ec0: 2d2080e7 jalr 722(ra) # 8020018e <printf> -} - 80202ec4: 4501 li a0,0 - 80202ec6: 60e2 ld ra,24(sp) - 80202ec8: 6442 ld s0,16(sp) - 80202eca: 6105 addi sp,sp,32 - 80202ecc: 8082 ret - -0000000080202ece <argaddr>: -{ - 80202ece: 1101 addi sp,sp,-32 - 80202ed0: ec06 sd ra,24(sp) - 80202ed2: e822 sd s0,16(sp) - 80202ed4: e426 sd s1,8(sp) - 80202ed6: 1000 addi s0,sp,32 - 80202ed8: 84ae mv s1,a1 + 80202ea6: fffff097 auipc ra,0xfffff + 80202eaa: b96080e7 jalr -1130(ra) # 80201a3c <myproc> + 80202eae: 8612 mv a2,tp + 80202eb0: fec42683 lw a3,-20(s0) + 80202eb4: 5d0c lw a1,56(a0) + 80202eb6: 00007517 auipc a0,0x7 + 80202eba: aba50513 addi a0,a0,-1350 # 80209970 <digits+0x5f0> + 80202ebe: ffffd097 auipc ra,0xffffd + 80202ec2: 2d0080e7 jalr 720(ra) # 8020018e <printf> +} + 80202ec6: 4501 li a0,0 + 80202ec8: 60e2 ld ra,24(sp) + 80202eca: 6442 ld s0,16(sp) + 80202ecc: 6105 addi sp,sp,32 + 80202ece: 8082 ret + +0000000080202ed0 <argaddr>: +{ + 80202ed0: 1101 addi sp,sp,-32 + 80202ed2: ec06 sd ra,24(sp) + 80202ed4: e822 sd s0,16(sp) + 80202ed6: e426 sd s1,8(sp) + 80202ed8: 1000 addi s0,sp,32 + 80202eda: 84ae mv s1,a1 *ip = argraw(n); - 80202eda: 00000097 auipc ra,0x0 - 80202ede: db2080e7 jalr -590(ra) # 80202c8c <argraw> - 80202ee2: e088 sd a0,0(s1) -} - 80202ee4: 4501 li a0,0 - 80202ee6: 60e2 ld ra,24(sp) - 80202ee8: 6442 ld s0,16(sp) - 80202eea: 64a2 ld s1,8(sp) - 80202eec: 6105 addi sp,sp,32 - 80202eee: 8082 ret - -0000000080202ef0 <argstr>: -{ - 80202ef0: 1101 addi sp,sp,-32 - 80202ef2: ec06 sd ra,24(sp) - 80202ef4: e822 sd s0,16(sp) - 80202ef6: e426 sd s1,8(sp) - 80202ef8: e04a sd s2,0(sp) - 80202efa: 1000 addi s0,sp,32 - 80202efc: 84ae mv s1,a1 - 80202efe: 8932 mv s2,a2 + 80202edc: 00000097 auipc ra,0x0 + 80202ee0: db0080e7 jalr -592(ra) # 80202c8c <argraw> + 80202ee4: e088 sd a0,0(s1) +} + 80202ee6: 4501 li a0,0 + 80202ee8: 60e2 ld ra,24(sp) + 80202eea: 6442 ld s0,16(sp) + 80202eec: 64a2 ld s1,8(sp) + 80202eee: 6105 addi sp,sp,32 + 80202ef0: 8082 ret + +0000000080202ef2 <argstr>: +{ + 80202ef2: 1101 addi sp,sp,-32 + 80202ef4: ec06 sd ra,24(sp) + 80202ef6: e822 sd s0,16(sp) + 80202ef8: e426 sd s1,8(sp) + 80202efa: e04a sd s2,0(sp) + 80202efc: 1000 addi s0,sp,32 + 80202efe: 84ae mv s1,a1 + 80202f00: 8932 mv s2,a2 *ip = argraw(n); - 80202f00: 00000097 auipc ra,0x0 - 80202f04: d8c080e7 jalr -628(ra) # 80202c8c <argraw> + 80202f02: 00000097 auipc ra,0x0 + 80202f06: d8a080e7 jalr -630(ra) # 80202c8c <argraw> return fetchstr(addr, buf, max); - 80202f08: 864a mv a2,s2 - 80202f0a: 85a6 mv a1,s1 - 80202f0c: 00000097 auipc ra,0x0 - 80202f10: f30080e7 jalr -208(ra) # 80202e3c <fetchstr> -} - 80202f14: 60e2 ld ra,24(sp) - 80202f16: 6442 ld s0,16(sp) - 80202f18: 64a2 ld s1,8(sp) - 80202f1a: 6902 ld s2,0(sp) - 80202f1c: 6105 addi sp,sp,32 - 80202f1e: 8082 ret - -0000000080202f20 <syscall>: -{ - 80202f20: 7179 addi sp,sp,-48 - 80202f22: f406 sd ra,40(sp) - 80202f24: f022 sd s0,32(sp) - 80202f26: ec26 sd s1,24(sp) - 80202f28: e84a sd s2,16(sp) - 80202f2a: e44e sd s3,8(sp) - 80202f2c: 1800 addi s0,sp,48 + 80202f0a: 864a mv a2,s2 + 80202f0c: 85a6 mv a1,s1 + 80202f0e: 00000097 auipc ra,0x0 + 80202f12: f30080e7 jalr -208(ra) # 80202e3e <fetchstr> +} + 80202f16: 60e2 ld ra,24(sp) + 80202f18: 6442 ld s0,16(sp) + 80202f1a: 64a2 ld s1,8(sp) + 80202f1c: 6902 ld s2,0(sp) + 80202f1e: 6105 addi sp,sp,32 + 80202f20: 8082 ret + +0000000080202f22 <syscall>: +{ + 80202f22: 7179 addi sp,sp,-48 + 80202f24: f406 sd ra,40(sp) + 80202f26: f022 sd s0,32(sp) + 80202f28: ec26 sd s1,24(sp) + 80202f2a: e84a sd s2,16(sp) + 80202f2c: e44e sd s3,8(sp) + 80202f2e: 1800 addi s0,sp,48 struct proc *p = myproc(); - 80202f2e: fffff097 auipc ra,0xfffff - 80202f32: b0e080e7 jalr -1266(ra) # 80201a3c <myproc> - 80202f36: 84aa mv s1,a0 + 80202f30: fffff097 auipc ra,0xfffff + 80202f34: b0c080e7 jalr -1268(ra) # 80201a3c <myproc> + 80202f38: 84aa mv s1,a0 num = p->trapframe->a7; - 80202f38: 06053903 ld s2,96(a0) - 80202f3c: 0a893783 ld a5,168(s2) - 80202f40: 0007899b sext.w s3,a5 + 80202f3a: 06053903 ld s2,96(a0) + 80202f3e: 0a893783 ld a5,168(s2) + 80202f42: 0007899b sext.w s3,a5 if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { - 80202f44: 37fd addiw a5,a5,-1 - 80202f46: 0d100713 li a4,209 - 80202f4a: 04f76763 bltu a4,a5,80202f98 <syscall+0x78> - 80202f4e: 00399713 slli a4,s3,0x3 - 80202f52: 00008797 auipc a5,0x8 - 80202f56: c2678793 addi a5,a5,-986 # 8020ab78 <syscalls> - 80202f5a: 97ba add a5,a5,a4 - 80202f5c: 639c ld a5,0(a5) - 80202f5e: cf8d beqz a5,80202f98 <syscall+0x78> + 80202f46: 37fd addiw a5,a5,-1 + 80202f48: 0d100713 li a4,209 + 80202f4c: 04f76763 bltu a4,a5,80202f9a <syscall+0x78> + 80202f50: 00399713 slli a4,s3,0x3 + 80202f54: 00008797 auipc a5,0x8 + 80202f58: c4c78793 addi a5,a5,-948 # 8020aba0 <syscalls> + 80202f5c: 97ba add a5,a5,a4 + 80202f5e: 639c ld a5,0(a5) + 80202f60: cf8d beqz a5,80202f9a <syscall+0x78> p->trapframe->a0 = syscalls[num](); - 80202f60: 9782 jalr a5 - 80202f62: 06a93823 sd a0,112(s2) + 80202f62: 9782 jalr a5 + 80202f64: 06a93823 sd a0,112(s2) if ((p->tmask & (1 << num)) != 0) { - 80202f66: 1704a783 lw a5,368(s1) - 80202f6a: 4137d7bb sraw a5,a5,s3 - 80202f6e: 8b85 andi a5,a5,1 - 80202f70: c3b9 beqz a5,80202fb6 <syscall+0x96> + 80202f68: 1704a783 lw a5,368(s1) + 80202f6c: 4137d7bb sraw a5,a5,s3 + 80202f70: 8b85 andi a5,a5,1 + 80202f72: c3b9 beqz a5,80202fb8 <syscall+0x96> printf("pid %d: %s -> %d\n", p->pid, sysnames[num], p->trapframe->a0); - 80202f72: 70b8 ld a4,96(s1) - 80202f74: 098e slli s3,s3,0x3 - 80202f76: 00008797 auipc a5,0x8 - 80202f7a: 29a78793 addi a5,a5,666 # 8020b210 <sysnames> - 80202f7e: 97ce add a5,a5,s3 - 80202f80: 7b34 ld a3,112(a4) - 80202f82: 6390 ld a2,0(a5) - 80202f84: 5c8c lw a1,56(s1) - 80202f86: 00007517 auipc a0,0x7 - 80202f8a: a1a50513 addi a0,a0,-1510 # 802099a0 <digits+0x620> - 80202f8e: ffffd097 auipc ra,0xffffd - 80202f92: 200080e7 jalr 512(ra) # 8020018e <printf> - 80202f96: a005 j 80202fb6 <syscall+0x96> + 80202f74: 70b8 ld a4,96(s1) + 80202f76: 098e slli s3,s3,0x3 + 80202f78: 00008797 auipc a5,0x8 + 80202f7c: 2c078793 addi a5,a5,704 # 8020b238 <sysnames> + 80202f80: 97ce add a5,a5,s3 + 80202f82: 7b34 ld a3,112(a4) + 80202f84: 6390 ld a2,0(a5) + 80202f86: 5c8c lw a1,56(s1) + 80202f88: 00007517 auipc a0,0x7 + 80202f8c: a1850513 addi a0,a0,-1512 # 802099a0 <digits+0x620> + 80202f90: ffffd097 auipc ra,0xffffd + 80202f94: 1fe080e7 jalr 510(ra) # 8020018e <printf> + 80202f98: a005 j 80202fb8 <syscall+0x96> printf("pid %d %s: unknown sys call %d\n", - 80202f98: 86ce mv a3,s3 - 80202f9a: 16048613 addi a2,s1,352 - 80202f9e: 5c8c lw a1,56(s1) - 80202fa0: 00007517 auipc a0,0x7 - 80202fa4: a1850513 addi a0,a0,-1512 # 802099b8 <digits+0x638> - 80202fa8: ffffd097 auipc ra,0xffffd - 80202fac: 1e6080e7 jalr 486(ra) # 8020018e <printf> + 80202f9a: 86ce mv a3,s3 + 80202f9c: 16048613 addi a2,s1,352 + 80202fa0: 5c8c lw a1,56(s1) + 80202fa2: 00007517 auipc a0,0x7 + 80202fa6: a1650513 addi a0,a0,-1514 # 802099b8 <digits+0x638> + 80202faa: ffffd097 auipc ra,0xffffd + 80202fae: 1e4080e7 jalr 484(ra) # 8020018e <printf> p->trapframe->a0 = -1; - 80202fb0: 70bc ld a5,96(s1) - 80202fb2: 577d li a4,-1 - 80202fb4: fbb8 sd a4,112(a5) + 80202fb2: 70bc ld a5,96(s1) + 80202fb4: 577d li a4,-1 + 80202fb6: fbb8 sd a4,112(a5) } - 80202fb6: 70a2 ld ra,40(sp) - 80202fb8: 7402 ld s0,32(sp) - 80202fba: 64e2 ld s1,24(sp) - 80202fbc: 6942 ld s2,16(sp) - 80202fbe: 69a2 ld s3,8(sp) - 80202fc0: 6145 addi sp,sp,48 - 80202fc2: 8082 ret + 80202fb8: 70a2 ld ra,40(sp) + 80202fba: 7402 ld s0,32(sp) + 80202fbc: 64e2 ld s1,24(sp) + 80202fbe: 6942 ld s2,16(sp) + 80202fc0: 69a2 ld s3,8(sp) + 80202fc2: 6145 addi sp,sp,48 + 80202fc4: 8082 ret -0000000080202fc4 <sys_exec>: +0000000080202fc6 <sys_exec>: extern int exec(char *path, char **argv); uint64 sys_exec(void) { - 80202fc4: d9010113 addi sp,sp,-624 - 80202fc8: 26113423 sd ra,616(sp) - 80202fcc: 26813023 sd s0,608(sp) - 80202fd0: 24913c23 sd s1,600(sp) - 80202fd4: 25213823 sd s2,592(sp) - 80202fd8: 25313423 sd s3,584(sp) - 80202fdc: 25413023 sd s4,576(sp) - 80202fe0: 23513c23 sd s5,568(sp) - 80202fe4: 23613823 sd s6,560(sp) - 80202fe8: 23713423 sd s7,552(sp) - 80202fec: 1c80 addi s0,sp,624 + 80202fc6: d9010113 addi sp,sp,-624 + 80202fca: 26113423 sd ra,616(sp) + 80202fce: 26813023 sd s0,608(sp) + 80202fd2: 24913c23 sd s1,600(sp) + 80202fd6: 25213823 sd s2,592(sp) + 80202fda: 25313423 sd s3,584(sp) + 80202fde: 25413023 sd s4,576(sp) + 80202fe2: 23513c23 sd s5,568(sp) + 80202fe6: 23613823 sd s6,560(sp) + 80202fea: 23713423 sd s7,552(sp) + 80202fee: 1c80 addi s0,sp,624 char path[FAT32_MAX_PATH], *argv[MAXARG]; int i; uint64 uargv, uarg; if(argstr(0, path, FAT32_MAX_PATH) < 0 || argaddr(1, &uargv) < 0){ - 80202fee: 10400613 li a2,260 - 80202ff2: ea840593 addi a1,s0,-344 - 80202ff6: 4501 li a0,0 - 80202ff8: 00000097 auipc ra,0x0 - 80202ffc: ef8080e7 jalr -264(ra) # 80202ef0 <argstr> + 80202ff0: 10400613 li a2,260 + 80202ff4: ea840593 addi a1,s0,-344 + 80202ff8: 4501 li a0,0 + 80202ffa: 00000097 auipc ra,0x0 + 80202ffe: ef8080e7 jalr -264(ra) # 80202ef2 <argstr> return -1; - 80203000: 597d li s2,-1 + 80203002: 597d li s2,-1 if(argstr(0, path, FAT32_MAX_PATH) < 0 || argaddr(1, &uargv) < 0){ - 80203002: 0c054c63 bltz a0,802030da <sys_exec+0x116> - 80203006: da040593 addi a1,s0,-608 - 8020300a: 4505 li a0,1 - 8020300c: 00000097 auipc ra,0x0 - 80203010: ec2080e7 jalr -318(ra) # 80202ece <argaddr> - 80203014: 0c054363 bltz a0,802030da <sys_exec+0x116> + 80203004: 0c054c63 bltz a0,802030dc <sys_exec+0x116> + 80203008: da040593 addi a1,s0,-608 + 8020300c: 4505 li a0,1 + 8020300e: 00000097 auipc ra,0x0 + 80203012: ec2080e7 jalr -318(ra) # 80202ed0 <argaddr> + 80203016: 0c054363 bltz a0,802030dc <sys_exec+0x116> } memset(argv, 0, sizeof(argv)); - 80203018: da840a13 addi s4,s0,-600 - 8020301c: 10000613 li a2,256 - 80203020: 4581 li a1,0 - 80203022: 8552 mv a0,s4 - 80203024: ffffd097 auipc ra,0xffffd - 80203028: 73e080e7 jalr 1854(ra) # 80200762 <memset> + 8020301a: da840a13 addi s4,s0,-600 + 8020301e: 10000613 li a2,256 + 80203022: 4581 li a1,0 + 80203024: 8552 mv a0,s4 + 80203026: ffffd097 auipc ra,0xffffd + 8020302a: 73c080e7 jalr 1852(ra) # 80200762 <memset> for(i=0;; i++){ if(i >= NELEM(argv)){ - 8020302c: 84d2 mv s1,s4 + 8020302e: 84d2 mv s1,s4 memset(argv, 0, sizeof(argv)); - 8020302e: 89d2 mv s3,s4 - 80203030: 4901 li s2,0 + 80203030: 89d2 mv s3,s4 + 80203032: 4901 li s2,0 goto bad; } if(fetchaddr(uargv+sizeof(uint64)*i, (uint64*)&uarg) < 0){ - 80203032: d9840a93 addi s5,s0,-616 + 80203034: d9840a93 addi s5,s0,-616 if(i >= NELEM(argv)){ - 80203036: 02000b13 li s6,32 - 8020303a: 00090b9b sext.w s7,s2 + 80203038: 02000b13 li s6,32 + 8020303c: 00090b9b sext.w s7,s2 if(fetchaddr(uargv+sizeof(uint64)*i, (uint64*)&uarg) < 0){ - 8020303e: 00391513 slli a0,s2,0x3 - 80203042: 85d6 mv a1,s5 - 80203044: da043783 ld a5,-608(s0) - 80203048: 953e add a0,a0,a5 - 8020304a: 00000097 auipc ra,0x0 - 8020304e: da2080e7 jalr -606(ra) # 80202dec <fetchaddr> - 80203052: 02054a63 bltz a0,80203086 <sys_exec+0xc2> + 80203040: 00391513 slli a0,s2,0x3 + 80203044: 85d6 mv a1,s5 + 80203046: da043783 ld a5,-608(s0) + 8020304a: 953e add a0,a0,a5 + 8020304c: 00000097 auipc ra,0x0 + 80203050: da2080e7 jalr -606(ra) # 80202dee <fetchaddr> + 80203054: 02054a63 bltz a0,80203088 <sys_exec+0xc2> goto bad; } if(uarg == 0){ - 80203056: d9843783 ld a5,-616(s0) - 8020305a: c3b9 beqz a5,802030a0 <sys_exec+0xdc> + 80203058: d9843783 ld a5,-616(s0) + 8020305c: c3b9 beqz a5,802030a2 <sys_exec+0xdc> argv[i] = 0; break; } argv[i] = kalloc(); - 8020305c: ffffd097 auipc ra,0xffffd - 80203060: 4fe080e7 jalr 1278(ra) # 8020055a <kalloc> - 80203064: 85aa mv a1,a0 - 80203066: 00a9b023 sd a0,0(s3) + 8020305e: ffffd097 auipc ra,0xffffd + 80203062: 4fc080e7 jalr 1276(ra) # 8020055a <kalloc> + 80203066: 85aa mv a1,a0 + 80203068: 00a9b023 sd a0,0(s3) if(argv[i] == 0) - 8020306a: cd11 beqz a0,80203086 <sys_exec+0xc2> + 8020306c: cd11 beqz a0,80203088 <sys_exec+0xc2> goto bad; if(fetchstr(uarg, argv[i], PGSIZE) < 0) - 8020306c: 6605 lui a2,0x1 - 8020306e: d9843503 ld a0,-616(s0) - 80203072: 00000097 auipc ra,0x0 - 80203076: dca080e7 jalr -566(ra) # 80202e3c <fetchstr> - 8020307a: 00054663 bltz a0,80203086 <sys_exec+0xc2> + 8020306e: 6605 lui a2,0x1 + 80203070: d9843503 ld a0,-616(s0) + 80203074: 00000097 auipc ra,0x0 + 80203078: dca080e7 jalr -566(ra) # 80202e3e <fetchstr> + 8020307c: 00054663 bltz a0,80203088 <sys_exec+0xc2> if(i >= NELEM(argv)){ - 8020307e: 0905 addi s2,s2,1 - 80203080: 09a1 addi s3,s3,8 - 80203082: fb691ce3 bne s2,s6,8020303a <sys_exec+0x76> + 80203080: 0905 addi s2,s2,1 + 80203082: 09a1 addi s3,s3,8 + 80203084: fb691ce3 bne s2,s6,8020303c <sys_exec+0x76> kfree(argv[i]); return ret; bad: for(i = 0; i < NELEM(argv) && argv[i] != 0; i++) - 80203086: 100a0a13 addi s4,s4,256 - 8020308a: 6088 ld a0,0(s1) - 8020308c: c531 beqz a0,802030d8 <sys_exec+0x114> + 80203088: 100a0a13 addi s4,s4,256 + 8020308c: 6088 ld a0,0(s1) + 8020308e: c531 beqz a0,802030da <sys_exec+0x114> kfree(argv[i]); - 8020308e: ffffd097 auipc ra,0xffffd - 80203092: 3b2080e7 jalr 946(ra) # 80200440 <kfree> + 80203090: ffffd097 auipc ra,0xffffd + 80203094: 3b0080e7 jalr 944(ra) # 80200440 <kfree> for(i = 0; i < NELEM(argv) && argv[i] != 0; i++) - 80203096: 04a1 addi s1,s1,8 - 80203098: ff4499e3 bne s1,s4,8020308a <sys_exec+0xc6> + 80203098: 04a1 addi s1,s1,8 + 8020309a: ff4499e3 bne s1,s4,8020308c <sys_exec+0xc6> return -1; - 8020309c: 597d li s2,-1 - 8020309e: a835 j 802030da <sys_exec+0x116> + 8020309e: 597d li s2,-1 + 802030a0: a835 j 802030dc <sys_exec+0x116> argv[i] = 0; - 802030a0: 0b8e slli s7,s7,0x3 - 802030a2: fb0b8793 addi a5,s7,-80 - 802030a6: 00878bb3 add s7,a5,s0 - 802030aa: de0bbc23 sd zero,-520(s7) + 802030a2: 0b8e slli s7,s7,0x3 + 802030a4: fb0b8793 addi a5,s7,-80 + 802030a8: 00878bb3 add s7,a5,s0 + 802030ac: de0bbc23 sd zero,-520(s7) int ret = exec(path, argv); - 802030ae: da840593 addi a1,s0,-600 - 802030b2: ea840513 addi a0,s0,-344 - 802030b6: 00001097 auipc ra,0x1 - 802030ba: e56080e7 jalr -426(ra) # 80203f0c <exec> - 802030be: 892a mv s2,a0 + 802030b0: da840593 addi a1,s0,-600 + 802030b4: ea840513 addi a0,s0,-344 + 802030b8: 00001097 auipc ra,0x1 + 802030bc: e56080e7 jalr -426(ra) # 80203f0e <exec> + 802030c0: 892a mv s2,a0 for(i = 0; i < NELEM(argv) && argv[i] != 0; i++) - 802030c0: 100a0a13 addi s4,s4,256 - 802030c4: 6088 ld a0,0(s1) - 802030c6: c911 beqz a0,802030da <sys_exec+0x116> + 802030c2: 100a0a13 addi s4,s4,256 + 802030c6: 6088 ld a0,0(s1) + 802030c8: c911 beqz a0,802030dc <sys_exec+0x116> kfree(argv[i]); - 802030c8: ffffd097 auipc ra,0xffffd - 802030cc: 378080e7 jalr 888(ra) # 80200440 <kfree> + 802030ca: ffffd097 auipc ra,0xffffd + 802030ce: 376080e7 jalr 886(ra) # 80200440 <kfree> for(i = 0; i < NELEM(argv) && argv[i] != 0; i++) - 802030d0: 04a1 addi s1,s1,8 - 802030d2: ff4499e3 bne s1,s4,802030c4 <sys_exec+0x100> - 802030d6: a011 j 802030da <sys_exec+0x116> + 802030d2: 04a1 addi s1,s1,8 + 802030d4: ff4499e3 bne s1,s4,802030c6 <sys_exec+0x100> + 802030d8: a011 j 802030dc <sys_exec+0x116> return -1; - 802030d8: 597d li s2,-1 -} - 802030da: 854a mv a0,s2 - 802030dc: 26813083 ld ra,616(sp) - 802030e0: 26013403 ld s0,608(sp) - 802030e4: 25813483 ld s1,600(sp) - 802030e8: 25013903 ld s2,592(sp) - 802030ec: 24813983 ld s3,584(sp) - 802030f0: 24013a03 ld s4,576(sp) - 802030f4: 23813a83 ld s5,568(sp) - 802030f8: 23013b03 ld s6,560(sp) - 802030fc: 22813b83 ld s7,552(sp) - 80203100: 27010113 addi sp,sp,624 - 80203104: 8082 ret - -0000000080203106 <sys_exit>: + 802030da: 597d li s2,-1 +} + 802030dc: 854a mv a0,s2 + 802030de: 26813083 ld ra,616(sp) + 802030e2: 26013403 ld s0,608(sp) + 802030e6: 25813483 ld s1,600(sp) + 802030ea: 25013903 ld s2,592(sp) + 802030ee: 24813983 ld s3,584(sp) + 802030f2: 24013a03 ld s4,576(sp) + 802030f6: 23813a83 ld s5,568(sp) + 802030fa: 23013b03 ld s6,560(sp) + 802030fe: 22813b83 ld s7,552(sp) + 80203102: 27010113 addi sp,sp,624 + 80203106: 8082 ret + +0000000080203108 <sys_exit>: uint64 sys_exit(void) { - 80203106: 1101 addi sp,sp,-32 - 80203108: ec06 sd ra,24(sp) - 8020310a: e822 sd s0,16(sp) - 8020310c: 1000 addi s0,sp,32 + 80203108: 1101 addi sp,sp,-32 + 8020310a: ec06 sd ra,24(sp) + 8020310c: e822 sd s0,16(sp) + 8020310e: 1000 addi s0,sp,32 int n; if(argint(0, &n) < 0) - 8020310e: fec40593 addi a1,s0,-20 - 80203112: 4501 li a0,0 - 80203114: 00000097 auipc ra,0x0 - 80203118: d58080e7 jalr -680(ra) # 80202e6c <argint> + 80203110: fec40593 addi a1,s0,-20 + 80203114: 4501 li a0,0 + 80203116: 00000097 auipc ra,0x0 + 8020311a: d58080e7 jalr -680(ra) # 80202e6e <argint> return -1; - 8020311c: 57fd li a5,-1 + 8020311e: 57fd li a5,-1 if(argint(0, &n) < 0) - 8020311e: 00054963 bltz a0,80203130 <sys_exit+0x2a> + 80203120: 00054963 bltz a0,80203132 <sys_exit+0x2a> exit(n); - 80203122: fec42503 lw a0,-20(s0) - 80203126: fffff097 auipc ra,0xfffff - 8020312a: 05a080e7 jalr 90(ra) # 80202180 <exit> + 80203124: fec42503 lw a0,-20(s0) + 80203128: fffff097 auipc ra,0xfffff + 8020312c: 058080e7 jalr 88(ra) # 80202180 <exit> return 0; // not reached - 8020312e: 4781 li a5,0 + 80203130: 4781 li a5,0 } - 80203130: 853e mv a0,a5 - 80203132: 60e2 ld ra,24(sp) - 80203134: 6442 ld s0,16(sp) - 80203136: 6105 addi sp,sp,32 - 80203138: 8082 ret + 80203132: 853e mv a0,a5 + 80203134: 60e2 ld ra,24(sp) + 80203136: 6442 ld s0,16(sp) + 80203138: 6105 addi sp,sp,32 + 8020313a: 8082 ret -000000008020313a <sys_getpid>: +000000008020313c <sys_getpid>: uint64 sys_getpid(void) { - 8020313a: 1141 addi sp,sp,-16 - 8020313c: e406 sd ra,8(sp) - 8020313e: e022 sd s0,0(sp) - 80203140: 0800 addi s0,sp,16 + 8020313c: 1141 addi sp,sp,-16 + 8020313e: e406 sd ra,8(sp) + 80203140: e022 sd s0,0(sp) + 80203142: 0800 addi s0,sp,16 return myproc()->pid; - 80203142: fffff097 auipc ra,0xfffff - 80203146: 8fa080e7 jalr -1798(ra) # 80201a3c <myproc> + 80203144: fffff097 auipc ra,0xfffff + 80203148: 8f8080e7 jalr -1800(ra) # 80201a3c <myproc> } - 8020314a: 5d08 lw a0,56(a0) - 8020314c: 60a2 ld ra,8(sp) - 8020314e: 6402 ld s0,0(sp) - 80203150: 0141 addi sp,sp,16 - 80203152: 8082 ret + 8020314c: 5d08 lw a0,56(a0) + 8020314e: 60a2 ld ra,8(sp) + 80203150: 6402 ld s0,0(sp) + 80203152: 0141 addi sp,sp,16 + 80203154: 8082 ret -0000000080203154 <sys_fork>: +0000000080203156 <sys_fork>: uint64 sys_fork(void) { - 80203154: 1141 addi sp,sp,-16 - 80203156: e406 sd ra,8(sp) - 80203158: e022 sd s0,0(sp) - 8020315a: 0800 addi s0,sp,16 + 80203156: 1141 addi sp,sp,-16 + 80203158: e406 sd ra,8(sp) + 8020315a: e022 sd s0,0(sp) + 8020315c: 0800 addi s0,sp,16 return fork(); - 8020315c: fffff097 auipc ra,0xfffff - 80203160: ce6080e7 jalr -794(ra) # 80201e42 <fork> + 8020315e: fffff097 auipc ra,0xfffff + 80203162: ce4080e7 jalr -796(ra) # 80201e42 <fork> } - 80203164: 60a2 ld ra,8(sp) - 80203166: 6402 ld s0,0(sp) - 80203168: 0141 addi sp,sp,16 - 8020316a: 8082 ret + 80203166: 60a2 ld ra,8(sp) + 80203168: 6402 ld s0,0(sp) + 8020316a: 0141 addi sp,sp,16 + 8020316c: 8082 ret -000000008020316c <sys_wait>: +000000008020316e <sys_wait>: uint64 sys_wait(void) { - 8020316c: 1101 addi sp,sp,-32 - 8020316e: ec06 sd ra,24(sp) - 80203170: e822 sd s0,16(sp) - 80203172: 1000 addi s0,sp,32 + 8020316e: 1101 addi sp,sp,-32 + 80203170: ec06 sd ra,24(sp) + 80203172: e822 sd s0,16(sp) + 80203174: 1000 addi s0,sp,32 uint64 p; if(argaddr(0, &p) < 0) - 80203174: fe840593 addi a1,s0,-24 - 80203178: 4501 li a0,0 - 8020317a: 00000097 auipc ra,0x0 - 8020317e: d54080e7 jalr -684(ra) # 80202ece <argaddr> - 80203182: 87aa mv a5,a0 + 80203176: fe840593 addi a1,s0,-24 + 8020317a: 4501 li a0,0 + 8020317c: 00000097 auipc ra,0x0 + 80203180: d54080e7 jalr -684(ra) # 80202ed0 <argaddr> + 80203184: 87aa mv a5,a0 return -1; - 80203184: 557d li a0,-1 + 80203186: 557d li a0,-1 if(argaddr(0, &p) < 0) - 80203186: 0007c863 bltz a5,80203196 <sys_wait+0x2a> + 80203188: 0007c863 bltz a5,80203198 <sys_wait+0x2a> return wait(p); - 8020318a: fe843503 ld a0,-24(s0) - 8020318e: fffff097 auipc ra,0xfffff - 80203192: 1ac080e7 jalr 428(ra) # 8020233a <wait> + 8020318c: fe843503 ld a0,-24(s0) + 80203190: fffff097 auipc ra,0xfffff + 80203194: 1aa080e7 jalr 426(ra) # 8020233a <wait> } - 80203196: 60e2 ld ra,24(sp) - 80203198: 6442 ld s0,16(sp) - 8020319a: 6105 addi sp,sp,32 - 8020319c: 8082 ret + 80203198: 60e2 ld ra,24(sp) + 8020319a: 6442 ld s0,16(sp) + 8020319c: 6105 addi sp,sp,32 + 8020319e: 8082 ret -000000008020319e <sys_sbrk>: +00000000802031a0 <sys_sbrk>: uint64 sys_sbrk(void) { - 8020319e: 7179 addi sp,sp,-48 - 802031a0: f406 sd ra,40(sp) - 802031a2: f022 sd s0,32(sp) - 802031a4: ec26 sd s1,24(sp) - 802031a6: 1800 addi s0,sp,48 + 802031a0: 7179 addi sp,sp,-48 + 802031a2: f406 sd ra,40(sp) + 802031a4: f022 sd s0,32(sp) + 802031a6: ec26 sd s1,24(sp) + 802031a8: 1800 addi s0,sp,48 int addr; int n; if(argint(0, &n) < 0) - 802031a8: fdc40593 addi a1,s0,-36 - 802031ac: 4501 li a0,0 - 802031ae: 00000097 auipc ra,0x0 - 802031b2: cbe080e7 jalr -834(ra) # 80202e6c <argint> - 802031b6: 87aa mv a5,a0 + 802031aa: fdc40593 addi a1,s0,-36 + 802031ae: 4501 li a0,0 + 802031b0: 00000097 auipc ra,0x0 + 802031b4: cbe080e7 jalr -834(ra) # 80202e6e <argint> + 802031b8: 87aa mv a5,a0 return -1; - 802031b8: 557d li a0,-1 + 802031ba: 557d li a0,-1 if(argint(0, &n) < 0) - 802031ba: 0207c063 bltz a5,802031da <sys_sbrk+0x3c> + 802031bc: 0207c063 bltz a5,802031dc <sys_sbrk+0x3c> addr = myproc()->sz; - 802031be: fffff097 auipc ra,0xfffff - 802031c2: 87e080e7 jalr -1922(ra) # 80201a3c <myproc> - 802031c6: 4524 lw s1,72(a0) + 802031c0: fffff097 auipc ra,0xfffff + 802031c4: 87c080e7 jalr -1924(ra) # 80201a3c <myproc> + 802031c8: 4524 lw s1,72(a0) if(growproc(n) < 0) - 802031c8: fdc42503 lw a0,-36(s0) - 802031cc: fffff097 auipc ra,0xfffff - 802031d0: bfa080e7 jalr -1030(ra) # 80201dc6 <growproc> - 802031d4: 00054863 bltz a0,802031e4 <sys_sbrk+0x46> + 802031ca: fdc42503 lw a0,-36(s0) + 802031ce: fffff097 auipc ra,0xfffff + 802031d2: bf8080e7 jalr -1032(ra) # 80201dc6 <growproc> + 802031d6: 00054863 bltz a0,802031e6 <sys_sbrk+0x46> return -1; return addr; - 802031d8: 8526 mv a0,s1 + 802031da: 8526 mv a0,s1 } - 802031da: 70a2 ld ra,40(sp) - 802031dc: 7402 ld s0,32(sp) - 802031de: 64e2 ld s1,24(sp) - 802031e0: 6145 addi sp,sp,48 - 802031e2: 8082 ret + 802031dc: 70a2 ld ra,40(sp) + 802031de: 7402 ld s0,32(sp) + 802031e0: 64e2 ld s1,24(sp) + 802031e2: 6145 addi sp,sp,48 + 802031e4: 8082 ret return -1; - 802031e4: 557d li a0,-1 - 802031e6: bfd5 j 802031da <sys_sbrk+0x3c> + 802031e6: 557d li a0,-1 + 802031e8: bfd5 j 802031dc <sys_sbrk+0x3c> -00000000802031e8 <sys_sleep>: +00000000802031ea <sys_sleep>: uint64 sys_sleep(void) { - 802031e8: 7139 addi sp,sp,-64 - 802031ea: fc06 sd ra,56(sp) - 802031ec: f822 sd s0,48(sp) - 802031ee: f426 sd s1,40(sp) - 802031f0: f04a sd s2,32(sp) - 802031f2: ec4e sd s3,24(sp) - 802031f4: 0080 addi s0,sp,64 + 802031ea: 7139 addi sp,sp,-64 + 802031ec: fc06 sd ra,56(sp) + 802031ee: f822 sd s0,48(sp) + 802031f0: f426 sd s1,40(sp) + 802031f2: f04a sd s2,32(sp) + 802031f4: ec4e sd s3,24(sp) + 802031f6: 0080 addi s0,sp,64 int n; uint ticks0; if(argint(0, &n) < 0) - 802031f6: fcc40593 addi a1,s0,-52 - 802031fa: 4501 li a0,0 - 802031fc: 00000097 auipc ra,0x0 - 80203200: c70080e7 jalr -912(ra) # 80202e6c <argint> + 802031f8: fcc40593 addi a1,s0,-52 + 802031fc: 4501 li a0,0 + 802031fe: 00000097 auipc ra,0x0 + 80203202: c70080e7 jalr -912(ra) # 80202e6e <argint> return -1; - 80203204: 57fd li a5,-1 + 80203206: 57fd li a5,-1 if(argint(0, &n) < 0) - 80203206: 06054763 bltz a0,80203274 <sys_sleep+0x8c> + 80203208: 06054763 bltz a0,80203276 <sys_sleep+0x8c> acquire(&tickslock); - 8020320a: 00008517 auipc a0,0x8 - 8020320e: 6e653503 ld a0,1766(a0) # 8020b8f0 <_GLOBAL_OFFSET_TABLE_+0x30> - 80203212: ffffd097 auipc ra,0xffffd - 80203216: 4b4080e7 jalr 1204(ra) # 802006c6 <acquire> + 8020320c: 00008517 auipc a0,0x8 + 80203210: 70c53503 ld a0,1804(a0) # 8020b918 <_GLOBAL_OFFSET_TABLE_+0x30> + 80203214: ffffd097 auipc ra,0xffffd + 80203218: 4b2080e7 jalr 1202(ra) # 802006c6 <acquire> ticks0 = ticks; - 8020321a: 00008797 auipc a5,0x8 - 8020321e: 6e67b783 ld a5,1766(a5) # 8020b900 <_GLOBAL_OFFSET_TABLE_+0x40> - 80203222: 0007a903 lw s2,0(a5) + 8020321c: 00008797 auipc a5,0x8 + 80203220: 70c7b783 ld a5,1804(a5) # 8020b928 <_GLOBAL_OFFSET_TABLE_+0x40> + 80203224: 0007a903 lw s2,0(a5) while(ticks - ticks0 < n){ - 80203226: fcc42783 lw a5,-52(s0) - 8020322a: cf85 beqz a5,80203262 <sys_sleep+0x7a> + 80203228: fcc42783 lw a5,-52(s0) + 8020322c: cf85 beqz a5,80203264 <sys_sleep+0x7a> if(myproc()->killed){ release(&tickslock); return -1; } sleep(&ticks, &tickslock); - 8020322c: 00008997 auipc s3,0x8 - 80203230: 6c49b983 ld s3,1732(s3) # 8020b8f0 <_GLOBAL_OFFSET_TABLE_+0x30> - 80203234: 00008497 auipc s1,0x8 - 80203238: 6cc4b483 ld s1,1740(s1) # 8020b900 <_GLOBAL_OFFSET_TABLE_+0x40> + 8020322e: 00008997 auipc s3,0x8 + 80203232: 6ea9b983 ld s3,1770(s3) # 8020b918 <_GLOBAL_OFFSET_TABLE_+0x30> + 80203236: 00008497 auipc s1,0x8 + 8020323a: 6f24b483 ld s1,1778(s1) # 8020b928 <_GLOBAL_OFFSET_TABLE_+0x40> if(myproc()->killed){ - 8020323c: fffff097 auipc ra,0xfffff - 80203240: 800080e7 jalr -2048(ra) # 80201a3c <myproc> - 80203244: 591c lw a5,48(a0) - 80203246: ef9d bnez a5,80203284 <sys_sleep+0x9c> + 8020323e: ffffe097 auipc ra,0xffffe + 80203242: 7fe080e7 jalr 2046(ra) # 80201a3c <myproc> + 80203246: 591c lw a5,48(a0) + 80203248: ef9d bnez a5,80203286 <sys_sleep+0x9c> sleep(&ticks, &tickslock); - 80203248: 85ce mv a1,s3 - 8020324a: 8526 mv a0,s1 - 8020324c: fffff097 auipc ra,0xfffff - 80203250: 070080e7 jalr 112(ra) # 802022bc <sleep> + 8020324a: 85ce mv a1,s3 + 8020324c: 8526 mv a0,s1 + 8020324e: fffff097 auipc ra,0xfffff + 80203252: 06e080e7 jalr 110(ra) # 802022bc <sleep> while(ticks - ticks0 < n){ - 80203254: 409c lw a5,0(s1) - 80203256: 412787bb subw a5,a5,s2 - 8020325a: fcc42703 lw a4,-52(s0) - 8020325e: fce7efe3 bltu a5,a4,8020323c <sys_sleep+0x54> + 80203256: 409c lw a5,0(s1) + 80203258: 412787bb subw a5,a5,s2 + 8020325c: fcc42703 lw a4,-52(s0) + 80203260: fce7efe3 bltu a5,a4,8020323e <sys_sleep+0x54> } release(&tickslock); - 80203262: 00008517 auipc a0,0x8 - 80203266: 68e53503 ld a0,1678(a0) # 8020b8f0 <_GLOBAL_OFFSET_TABLE_+0x30> - 8020326a: ffffd097 auipc ra,0xffffd - 8020326e: 4b0080e7 jalr 1200(ra) # 8020071a <release> + 80203264: 00008517 auipc a0,0x8 + 80203268: 6b453503 ld a0,1716(a0) # 8020b918 <_GLOBAL_OFFSET_TABLE_+0x30> + 8020326c: ffffd097 auipc ra,0xffffd + 80203270: 4ae080e7 jalr 1198(ra) # 8020071a <release> return 0; - 80203272: 4781 li a5,0 -} - 80203274: 853e mv a0,a5 - 80203276: 70e2 ld ra,56(sp) - 80203278: 7442 ld s0,48(sp) - 8020327a: 74a2 ld s1,40(sp) - 8020327c: 7902 ld s2,32(sp) - 8020327e: 69e2 ld s3,24(sp) - 80203280: 6121 addi sp,sp,64 - 80203282: 8082 ret + 80203274: 4781 li a5,0 +} + 80203276: 853e mv a0,a5 + 80203278: 70e2 ld ra,56(sp) + 8020327a: 7442 ld s0,48(sp) + 8020327c: 74a2 ld s1,40(sp) + 8020327e: 7902 ld s2,32(sp) + 80203280: 69e2 ld s3,24(sp) + 80203282: 6121 addi sp,sp,64 + 80203284: 8082 ret release(&tickslock); - 80203284: 00008517 auipc a0,0x8 - 80203288: 66c53503 ld a0,1644(a0) # 8020b8f0 <_GLOBAL_OFFSET_TABLE_+0x30> - 8020328c: ffffd097 auipc ra,0xffffd - 80203290: 48e080e7 jalr 1166(ra) # 8020071a <release> + 80203286: 00008517 auipc a0,0x8 + 8020328a: 69253503 ld a0,1682(a0) # 8020b918 <_GLOBAL_OFFSET_TABLE_+0x30> + 8020328e: ffffd097 auipc ra,0xffffd + 80203292: 48c080e7 jalr 1164(ra) # 8020071a <release> return -1; - 80203294: 57fd li a5,-1 - 80203296: bff9 j 80203274 <sys_sleep+0x8c> + 80203296: 57fd li a5,-1 + 80203298: bff9 j 80203276 <sys_sleep+0x8c> -0000000080203298 <sys_kill>: +000000008020329a <sys_kill>: uint64 sys_kill(void) { - 80203298: 1101 addi sp,sp,-32 - 8020329a: ec06 sd ra,24(sp) - 8020329c: e822 sd s0,16(sp) - 8020329e: 1000 addi s0,sp,32 + 8020329a: 1101 addi sp,sp,-32 + 8020329c: ec06 sd ra,24(sp) + 8020329e: e822 sd s0,16(sp) + 802032a0: 1000 addi s0,sp,32 int pid; if(argint(0, &pid) < 0) - 802032a0: fec40593 addi a1,s0,-20 - 802032a4: 4501 li a0,0 - 802032a6: 00000097 auipc ra,0x0 - 802032aa: bc6080e7 jalr -1082(ra) # 80202e6c <argint> - 802032ae: 87aa mv a5,a0 + 802032a2: fec40593 addi a1,s0,-20 + 802032a6: 4501 li a0,0 + 802032a8: 00000097 auipc ra,0x0 + 802032ac: bc6080e7 jalr -1082(ra) # 80202e6e <argint> + 802032b0: 87aa mv a5,a0 return -1; - 802032b0: 557d li a0,-1 + 802032b2: 557d li a0,-1 if(argint(0, &pid) < 0) - 802032b2: 0007c863 bltz a5,802032c2 <sys_kill+0x2a> + 802032b4: 0007c863 bltz a5,802032c4 <sys_kill+0x2a> return kill(pid); - 802032b6: fec42503 lw a0,-20(s0) - 802032ba: fffff097 auipc ra,0xfffff - 802032be: 1e8080e7 jalr 488(ra) # 802024a2 <kill> + 802032b8: fec42503 lw a0,-20(s0) + 802032bc: fffff097 auipc ra,0xfffff + 802032c0: 1e6080e7 jalr 486(ra) # 802024a2 <kill> } - 802032c2: 60e2 ld ra,24(sp) - 802032c4: 6442 ld s0,16(sp) - 802032c6: 6105 addi sp,sp,32 - 802032c8: 8082 ret + 802032c4: 60e2 ld ra,24(sp) + 802032c6: 6442 ld s0,16(sp) + 802032c8: 6105 addi sp,sp,32 + 802032ca: 8082 ret -00000000802032ca <sys_uptime>: +00000000802032cc <sys_uptime>: // return how many clock tick interrupts have occurred // since start. uint64 sys_uptime(void) { - 802032ca: 1101 addi sp,sp,-32 - 802032cc: ec06 sd ra,24(sp) - 802032ce: e822 sd s0,16(sp) - 802032d0: e426 sd s1,8(sp) - 802032d2: 1000 addi s0,sp,32 + 802032cc: 1101 addi sp,sp,-32 + 802032ce: ec06 sd ra,24(sp) + 802032d0: e822 sd s0,16(sp) + 802032d2: e426 sd s1,8(sp) + 802032d4: 1000 addi s0,sp,32 uint xticks; acquire(&tickslock); - 802032d4: 00008517 auipc a0,0x8 - 802032d8: 61c53503 ld a0,1564(a0) # 8020b8f0 <_GLOBAL_OFFSET_TABLE_+0x30> - 802032dc: ffffd097 auipc ra,0xffffd - 802032e0: 3ea080e7 jalr 1002(ra) # 802006c6 <acquire> + 802032d6: 00008517 auipc a0,0x8 + 802032da: 64253503 ld a0,1602(a0) # 8020b918 <_GLOBAL_OFFSET_TABLE_+0x30> + 802032de: ffffd097 auipc ra,0xffffd + 802032e2: 3e8080e7 jalr 1000(ra) # 802006c6 <acquire> xticks = ticks; - 802032e4: 00008797 auipc a5,0x8 - 802032e8: 61c7b783 ld a5,1564(a5) # 8020b900 <_GLOBAL_OFFSET_TABLE_+0x40> - 802032ec: 4384 lw s1,0(a5) + 802032e6: 00008797 auipc a5,0x8 + 802032ea: 6427b783 ld a5,1602(a5) # 8020b928 <_GLOBAL_OFFSET_TABLE_+0x40> + 802032ee: 4384 lw s1,0(a5) release(&tickslock); - 802032ee: 00008517 auipc a0,0x8 - 802032f2: 60253503 ld a0,1538(a0) # 8020b8f0 <_GLOBAL_OFFSET_TABLE_+0x30> - 802032f6: ffffd097 auipc ra,0xffffd - 802032fa: 424080e7 jalr 1060(ra) # 8020071a <release> + 802032f0: 00008517 auipc a0,0x8 + 802032f4: 62853503 ld a0,1576(a0) # 8020b918 <_GLOBAL_OFFSET_TABLE_+0x30> + 802032f8: ffffd097 auipc ra,0xffffd + 802032fc: 422080e7 jalr 1058(ra) # 8020071a <release> return xticks; } - 802032fe: 02049513 slli a0,s1,0x20 - 80203302: 9101 srli a0,a0,0x20 - 80203304: 60e2 ld ra,24(sp) - 80203306: 6442 ld s0,16(sp) - 80203308: 64a2 ld s1,8(sp) - 8020330a: 6105 addi sp,sp,32 - 8020330c: 8082 ret + 80203300: 02049513 slli a0,s1,0x20 + 80203304: 9101 srli a0,a0,0x20 + 80203306: 60e2 ld ra,24(sp) + 80203308: 6442 ld s0,16(sp) + 8020330a: 64a2 ld s1,8(sp) + 8020330c: 6105 addi sp,sp,32 + 8020330e: 8082 ret -000000008020330e <sys_trace>: +0000000080203310 <sys_trace>: uint64 sys_trace(void) { - 8020330e: 1101 addi sp,sp,-32 - 80203310: ec06 sd ra,24(sp) - 80203312: e822 sd s0,16(sp) - 80203314: 1000 addi s0,sp,32 + 80203310: 1101 addi sp,sp,-32 + 80203312: ec06 sd ra,24(sp) + 80203314: e822 sd s0,16(sp) + 80203316: 1000 addi s0,sp,32 int mask; if(argint(0, &mask) < 0) { - 80203316: fec40593 addi a1,s0,-20 - 8020331a: 4501 li a0,0 - 8020331c: 00000097 auipc ra,0x0 - 80203320: b50080e7 jalr -1200(ra) # 80202e6c <argint> + 80203318: fec40593 addi a1,s0,-20 + 8020331c: 4501 li a0,0 + 8020331e: 00000097 auipc ra,0x0 + 80203322: b50080e7 jalr -1200(ra) # 80202e6e <argint> return -1; - 80203324: 57fd li a5,-1 + 80203326: 57fd li a5,-1 if(argint(0, &mask) < 0) { - 80203326: 00054b63 bltz a0,8020333c <sys_trace+0x2e> + 80203328: 00054b63 bltz a0,8020333e <sys_trace+0x2e> } myproc()->tmask = mask; - 8020332a: ffffe097 auipc ra,0xffffe - 8020332e: 712080e7 jalr 1810(ra) # 80201a3c <myproc> - 80203332: fec42783 lw a5,-20(s0) - 80203336: 16f52823 sw a5,368(a0) + 8020332c: ffffe097 auipc ra,0xffffe + 80203330: 710080e7 jalr 1808(ra) # 80201a3c <myproc> + 80203334: fec42783 lw a5,-20(s0) + 80203338: 16f52823 sw a5,368(a0) return 0; - 8020333a: 4781 li a5,0 - 8020333c: 853e mv a0,a5 - 8020333e: 60e2 ld ra,24(sp) - 80203340: 6442 ld s0,16(sp) - 80203342: 6105 addi sp,sp,32 - 80203344: 8082 ret - -0000000080203346 <binit>: + 8020333c: 4781 li a5,0 + 8020333e: 853e mv a0,a5 + 80203340: 60e2 ld ra,24(sp) + 80203342: 6442 ld s0,16(sp) + 80203344: 6105 addi sp,sp,32 + 80203346: 8082 ret + +0000000080203348 <binit>: struct buf head; } bcache; void binit(void) { - 80203346: 7139 addi sp,sp,-64 - 80203348: fc06 sd ra,56(sp) - 8020334a: f822 sd s0,48(sp) - 8020334c: f426 sd s1,40(sp) - 8020334e: f04a sd s2,32(sp) - 80203350: ec4e sd s3,24(sp) - 80203352: e852 sd s4,16(sp) - 80203354: e456 sd s5,8(sp) - 80203356: 0080 addi s0,sp,64 + 80203348: 7139 addi sp,sp,-64 + 8020334a: fc06 sd ra,56(sp) + 8020334c: f822 sd s0,48(sp) + 8020334e: f426 sd s1,40(sp) + 80203350: f04a sd s2,32(sp) + 80203352: ec4e sd s3,24(sp) + 80203354: e852 sd s4,16(sp) + 80203356: e456 sd s5,8(sp) + 80203358: 0080 addi s0,sp,64 struct buf *b; initlock(&bcache.lock, "bcache"); - 80203358: 00006597 auipc a1,0x6 - 8020335c: 78858593 addi a1,a1,1928 # 80209ae0 <digits+0x760> - 80203360: 00015517 auipc a0,0x15 - 80203364: 79050513 addi a0,a0,1936 # 80218af0 <bcache> - 80203368: ffffd097 auipc ra,0xffffd - 8020336c: 31a080e7 jalr 794(ra) # 80200682 <initlock> + 8020335a: 00006597 auipc a1,0x6 + 8020335e: 78e58593 addi a1,a1,1934 # 80209ae8 <digits+0x768> + 80203362: 00015517 auipc a0,0x15 + 80203366: 78e50513 addi a0,a0,1934 # 80218af0 <bcache> + 8020336a: ffffd097 auipc ra,0xffffd + 8020336e: 318080e7 jalr 792(ra) # 80200682 <initlock> // Create linked list of buffers bcache.head.prev = &bcache.head; - 80203370: 00019797 auipc a5,0x19 - 80203374: 78078793 addi a5,a5,1920 # 8021caf0 <bcache+0x4000> - 80203378: 0001a717 auipc a4,0x1a - 8020337c: de070713 addi a4,a4,-544 # 8021d158 <bcache+0x4668> - 80203380: 6ae7b823 sd a4,1712(a5) + 80203372: 00019797 auipc a5,0x19 + 80203376: 77e78793 addi a5,a5,1918 # 8021caf0 <bcache+0x4000> + 8020337a: 0001a717 auipc a4,0x1a + 8020337e: dde70713 addi a4,a4,-546 # 8021d158 <bcache+0x4668> + 80203382: 6ae7b823 sd a4,1712(a5) bcache.head.next = &bcache.head; - 80203384: 6ae7bc23 sd a4,1720(a5) + 80203386: 6ae7bc23 sd a4,1720(a5) for(b = bcache.buf; b < bcache.buf+NBUF; b++){ - 80203388: 00015497 auipc s1,0x15 - 8020338c: 78048493 addi s1,s1,1920 # 80218b08 <bcache+0x18> + 8020338a: 00015497 auipc s1,0x15 + 8020338e: 77e48493 addi s1,s1,1918 # 80218b08 <bcache+0x18> b->refcnt = 0; b->sectorno = ~0; - 80203390: 5a7d li s4,-1 + 80203392: 5a7d li s4,-1 b->dev = ~0; b->next = bcache.head.next; - 80203392: 893e mv s2,a5 + 80203394: 893e mv s2,a5 b->prev = &bcache.head; - 80203394: 89ba mv s3,a4 + 80203396: 89ba mv s3,a4 initsleeplock(&b->lock, "buffer"); - 80203396: 00006a97 auipc s5,0x6 - 8020339a: 752a8a93 addi s5,s5,1874 # 80209ae8 <digits+0x768> + 80203398: 00006a97 auipc s5,0x6 + 8020339c: 758a8a93 addi s5,s5,1880 # 80209af0 <digits+0x770> b->refcnt = 0; - 8020339e: 0404a023 sw zero,64(s1) + 802033a0: 0404a023 sw zero,64(s1) b->sectorno = ~0; - 802033a2: 0144a623 sw s4,12(s1) + 802033a4: 0144a623 sw s4,12(s1) b->dev = ~0; - 802033a6: 0144a423 sw s4,8(s1) + 802033a8: 0144a423 sw s4,8(s1) b->next = bcache.head.next; - 802033aa: 6b893783 ld a5,1720(s2) - 802033ae: e8bc sd a5,80(s1) + 802033ac: 6b893783 ld a5,1720(s2) + 802033b0: e8bc sd a5,80(s1) b->prev = &bcache.head; - 802033b0: 0534b423 sd s3,72(s1) + 802033b2: 0534b423 sd s3,72(s1) initsleeplock(&b->lock, "buffer"); - 802033b4: 85d6 mv a1,s5 - 802033b6: 01048513 addi a0,s1,16 - 802033ba: 00000097 auipc ra,0x0 - 802033be: 26e080e7 jalr 622(ra) # 80203628 <initsleeplock> + 802033b6: 85d6 mv a1,s5 + 802033b8: 01048513 addi a0,s1,16 + 802033bc: 00000097 auipc ra,0x0 + 802033c0: 26e080e7 jalr 622(ra) # 8020362a <initsleeplock> bcache.head.next->prev = b; - 802033c2: 6b893783 ld a5,1720(s2) - 802033c6: e7a4 sd s1,72(a5) + 802033c4: 6b893783 ld a5,1720(s2) + 802033c8: e7a4 sd s1,72(a5) bcache.head.next = b; - 802033c8: 6a993c23 sd s1,1720(s2) + 802033ca: 6a993c23 sd s1,1720(s2) for(b = bcache.buf; b < bcache.buf+NBUF; b++){ - 802033cc: 25848493 addi s1,s1,600 - 802033d0: fd3497e3 bne s1,s3,8020339e <binit+0x58> + 802033ce: 25848493 addi s1,s1,600 + 802033d2: fd3497e3 bne s1,s3,802033a0 <binit+0x58> } #ifdef DEBUG printf("binit\n"); #endif } - 802033d4: 70e2 ld ra,56(sp) - 802033d6: 7442 ld s0,48(sp) - 802033d8: 74a2 ld s1,40(sp) - 802033da: 7902 ld s2,32(sp) - 802033dc: 69e2 ld s3,24(sp) - 802033de: 6a42 ld s4,16(sp) - 802033e0: 6aa2 ld s5,8(sp) - 802033e2: 6121 addi sp,sp,64 - 802033e4: 8082 ret - -00000000802033e6 <bread>: + 802033d6: 70e2 ld ra,56(sp) + 802033d8: 7442 ld s0,48(sp) + 802033da: 74a2 ld s1,40(sp) + 802033dc: 7902 ld s2,32(sp) + 802033de: 69e2 ld s3,24(sp) + 802033e0: 6a42 ld s4,16(sp) + 802033e2: 6aa2 ld s5,8(sp) + 802033e4: 6121 addi sp,sp,64 + 802033e6: 8082 ret + +00000000802033e8 <bread>: panic("bget: no buffers"); } // Return a locked buf with the contents of the indicated block. struct buf* bread(uint dev, uint sectorno) { - 802033e6: 7179 addi sp,sp,-48 - 802033e8: f406 sd ra,40(sp) - 802033ea: f022 sd s0,32(sp) - 802033ec: ec26 sd s1,24(sp) - 802033ee: e84a sd s2,16(sp) - 802033f0: e44e sd s3,8(sp) - 802033f2: 1800 addi s0,sp,48 - 802033f4: 892a mv s2,a0 - 802033f6: 89ae mv s3,a1 + 802033e8: 7179 addi sp,sp,-48 + 802033ea: f406 sd ra,40(sp) + 802033ec: f022 sd s0,32(sp) + 802033ee: ec26 sd s1,24(sp) + 802033f0: e84a sd s2,16(sp) + 802033f2: e44e sd s3,8(sp) + 802033f4: 1800 addi s0,sp,48 + 802033f6: 892a mv s2,a0 + 802033f8: 89ae mv s3,a1 acquire(&bcache.lock); - 802033f8: 00015517 auipc a0,0x15 - 802033fc: 6f850513 addi a0,a0,1784 # 80218af0 <bcache> - 80203400: ffffd097 auipc ra,0xffffd - 80203404: 2c6080e7 jalr 710(ra) # 802006c6 <acquire> + 802033fa: 00015517 auipc a0,0x15 + 802033fe: 6f650513 addi a0,a0,1782 # 80218af0 <bcache> + 80203402: ffffd097 auipc ra,0xffffd + 80203406: 2c4080e7 jalr 708(ra) # 802006c6 <acquire> for(b = bcache.head.next; b != &bcache.head; b = b->next){ - 80203408: 0001a497 auipc s1,0x1a - 8020340c: da04b483 ld s1,-608(s1) # 8021d1a8 <bcache+0x46b8> - 80203410: 0001a797 auipc a5,0x1a - 80203414: d4878793 addi a5,a5,-696 # 8021d158 <bcache+0x4668> - 80203418: 02f48f63 beq s1,a5,80203456 <bread+0x70> - 8020341c: 873e mv a4,a5 - 8020341e: a021 j 80203426 <bread+0x40> - 80203420: 68a4 ld s1,80(s1) - 80203422: 02e48a63 beq s1,a4,80203456 <bread+0x70> + 8020340a: 0001a497 auipc s1,0x1a + 8020340e: d9e4b483 ld s1,-610(s1) # 8021d1a8 <bcache+0x46b8> + 80203412: 0001a797 auipc a5,0x1a + 80203416: d4678793 addi a5,a5,-698 # 8021d158 <bcache+0x4668> + 8020341a: 02f48f63 beq s1,a5,80203458 <bread+0x70> + 8020341e: 873e mv a4,a5 + 80203420: a021 j 80203428 <bread+0x40> + 80203422: 68a4 ld s1,80(s1) + 80203424: 02e48a63 beq s1,a4,80203458 <bread+0x70> if(b->dev == dev && b->sectorno == sectorno){ - 80203426: 449c lw a5,8(s1) - 80203428: ff279ce3 bne a5,s2,80203420 <bread+0x3a> - 8020342c: 44dc lw a5,12(s1) - 8020342e: ff3799e3 bne a5,s3,80203420 <bread+0x3a> + 80203428: 449c lw a5,8(s1) + 8020342a: ff279ce3 bne a5,s2,80203422 <bread+0x3a> + 8020342e: 44dc lw a5,12(s1) + 80203430: ff3799e3 bne a5,s3,80203422 <bread+0x3a> b->refcnt++; - 80203432: 40bc lw a5,64(s1) - 80203434: 2785 addiw a5,a5,1 - 80203436: c0bc sw a5,64(s1) + 80203434: 40bc lw a5,64(s1) + 80203436: 2785 addiw a5,a5,1 + 80203438: c0bc sw a5,64(s1) release(&bcache.lock); - 80203438: 00015517 auipc a0,0x15 - 8020343c: 6b850513 addi a0,a0,1720 # 80218af0 <bcache> - 80203440: ffffd097 auipc ra,0xffffd - 80203444: 2da080e7 jalr 730(ra) # 8020071a <release> + 8020343a: 00015517 auipc a0,0x15 + 8020343e: 6b650513 addi a0,a0,1718 # 80218af0 <bcache> + 80203442: ffffd097 auipc ra,0xffffd + 80203446: 2d8080e7 jalr 728(ra) # 8020071a <release> acquiresleep(&b->lock); - 80203448: 01048513 addi a0,s1,16 - 8020344c: 00000097 auipc ra,0x0 - 80203450: 216080e7 jalr 534(ra) # 80203662 <acquiresleep> + 8020344a: 01048513 addi a0,s1,16 + 8020344e: 00000097 auipc ra,0x0 + 80203452: 216080e7 jalr 534(ra) # 80203664 <acquiresleep> return b; - 80203454: a8b9 j 802034b2 <bread+0xcc> + 80203456: a8b9 j 802034b4 <bread+0xcc> for(b = bcache.head.prev; b != &bcache.head; b = b->prev){ - 80203456: 0001a497 auipc s1,0x1a - 8020345a: d4a4b483 ld s1,-694(s1) # 8021d1a0 <bcache+0x46b0> - 8020345e: 0001a797 auipc a5,0x1a - 80203462: cfa78793 addi a5,a5,-774 # 8021d158 <bcache+0x4668> - 80203466: 00f48863 beq s1,a5,80203476 <bread+0x90> - 8020346a: 873e mv a4,a5 + 80203458: 0001a497 auipc s1,0x1a + 8020345c: d484b483 ld s1,-696(s1) # 8021d1a0 <bcache+0x46b0> + 80203460: 0001a797 auipc a5,0x1a + 80203464: cf878793 addi a5,a5,-776 # 8021d158 <bcache+0x4668> + 80203468: 00f48863 beq s1,a5,80203478 <bread+0x90> + 8020346c: 873e mv a4,a5 if(b->refcnt == 0) { - 8020346c: 40bc lw a5,64(s1) - 8020346e: cf81 beqz a5,80203486 <bread+0xa0> + 8020346e: 40bc lw a5,64(s1) + 80203470: cf81 beqz a5,80203488 <bread+0xa0> for(b = bcache.head.prev; b != &bcache.head; b = b->prev){ - 80203470: 64a4 ld s1,72(s1) - 80203472: fee49de3 bne s1,a4,8020346c <bread+0x86> + 80203472: 64a4 ld s1,72(s1) + 80203474: fee49de3 bne s1,a4,8020346e <bread+0x86> panic("bget: no buffers"); - 80203476: 00006517 auipc a0,0x6 - 8020347a: 67a50513 addi a0,a0,1658 # 80209af0 <digits+0x770> - 8020347e: ffffd097 auipc ra,0xffffd - 80203482: cc6080e7 jalr -826(ra) # 80200144 <panic> + 80203478: 00006517 auipc a0,0x6 + 8020347c: 68050513 addi a0,a0,1664 # 80209af8 <digits+0x778> + 80203480: ffffd097 auipc ra,0xffffd + 80203484: cc4080e7 jalr -828(ra) # 80200144 <panic> b->dev = dev; - 80203486: 0124a423 sw s2,8(s1) + 80203488: 0124a423 sw s2,8(s1) b->sectorno = sectorno; - 8020348a: 0134a623 sw s3,12(s1) + 8020348c: 0134a623 sw s3,12(s1) b->valid = 0; - 8020348e: 0004a023 sw zero,0(s1) + 80203490: 0004a023 sw zero,0(s1) b->refcnt = 1; - 80203492: 4785 li a5,1 - 80203494: c0bc sw a5,64(s1) + 80203494: 4785 li a5,1 + 80203496: c0bc sw a5,64(s1) release(&bcache.lock); - 80203496: 00015517 auipc a0,0x15 - 8020349a: 65a50513 addi a0,a0,1626 # 80218af0 <bcache> - 8020349e: ffffd097 auipc ra,0xffffd - 802034a2: 27c080e7 jalr 636(ra) # 8020071a <release> + 80203498: 00015517 auipc a0,0x15 + 8020349c: 65850513 addi a0,a0,1624 # 80218af0 <bcache> + 802034a0: ffffd097 auipc ra,0xffffd + 802034a4: 27a080e7 jalr 634(ra) # 8020071a <release> acquiresleep(&b->lock); - 802034a6: 01048513 addi a0,s1,16 - 802034aa: 00000097 auipc ra,0x0 - 802034ae: 1b8080e7 jalr 440(ra) # 80203662 <acquiresleep> + 802034a8: 01048513 addi a0,s1,16 + 802034ac: 00000097 auipc ra,0x0 + 802034b0: 1b8080e7 jalr 440(ra) # 80203664 <acquiresleep> struct buf *b; b = bget(dev, sectorno); if (!b->valid) { - 802034b2: 409c lw a5,0(s1) - 802034b4: cb89 beqz a5,802034c6 <bread+0xe0> + 802034b4: 409c lw a5,0(s1) + 802034b6: cb89 beqz a5,802034c8 <bread+0xe0> disk_read(b); b->valid = 1; } return b; } - 802034b6: 8526 mv a0,s1 - 802034b8: 70a2 ld ra,40(sp) - 802034ba: 7402 ld s0,32(sp) - 802034bc: 64e2 ld s1,24(sp) - 802034be: 6942 ld s2,16(sp) - 802034c0: 69a2 ld s3,8(sp) - 802034c2: 6145 addi sp,sp,48 - 802034c4: 8082 ret + 802034b8: 8526 mv a0,s1 + 802034ba: 70a2 ld ra,40(sp) + 802034bc: 7402 ld s0,32(sp) + 802034be: 64e2 ld s1,24(sp) + 802034c0: 6942 ld s2,16(sp) + 802034c2: 69a2 ld s3,8(sp) + 802034c4: 6145 addi sp,sp,48 + 802034c6: 8082 ret disk_read(b); - 802034c6: 8526 mv a0,s1 - 802034c8: 00002097 auipc ra,0x2 - 802034cc: baa080e7 jalr -1110(ra) # 80205072 <disk_read> + 802034c8: 8526 mv a0,s1 + 802034ca: 00002097 auipc ra,0x2 + 802034ce: bb8080e7 jalr -1096(ra) # 80205082 <disk_read> b->valid = 1; - 802034d0: 4785 li a5,1 - 802034d2: c09c sw a5,0(s1) + 802034d2: 4785 li a5,1 + 802034d4: c09c sw a5,0(s1) return b; - 802034d4: b7cd j 802034b6 <bread+0xd0> + 802034d6: b7cd j 802034b8 <bread+0xd0> -00000000802034d6 <bwrite>: +00000000802034d8 <bwrite>: // Write b's contents to disk. Must be locked. void bwrite(struct buf *b) { - 802034d6: 1101 addi sp,sp,-32 - 802034d8: ec06 sd ra,24(sp) - 802034da: e822 sd s0,16(sp) - 802034dc: e426 sd s1,8(sp) - 802034de: 1000 addi s0,sp,32 - 802034e0: 84aa mv s1,a0 + 802034d8: 1101 addi sp,sp,-32 + 802034da: ec06 sd ra,24(sp) + 802034dc: e822 sd s0,16(sp) + 802034de: e426 sd s1,8(sp) + 802034e0: 1000 addi s0,sp,32 + 802034e2: 84aa mv s1,a0 if(!holdingsleep(&b->lock)) - 802034e2: 0541 addi a0,a0,16 - 802034e4: 00000097 auipc ra,0x0 - 802034e8: 218080e7 jalr 536(ra) # 802036fc <holdingsleep> - 802034ec: c919 beqz a0,80203502 <bwrite+0x2c> + 802034e4: 0541 addi a0,a0,16 + 802034e6: 00000097 auipc ra,0x0 + 802034ea: 218080e7 jalr 536(ra) # 802036fe <holdingsleep> + 802034ee: c919 beqz a0,80203504 <bwrite+0x2c> panic("bwrite"); disk_write(b); - 802034ee: 8526 mv a0,s1 - 802034f0: 00002097 auipc ra,0x2 - 802034f4: b9c080e7 jalr -1124(ra) # 8020508c <disk_write> -} - 802034f8: 60e2 ld ra,24(sp) - 802034fa: 6442 ld s0,16(sp) - 802034fc: 64a2 ld s1,8(sp) - 802034fe: 6105 addi sp,sp,32 - 80203500: 8082 ret + 802034f0: 8526 mv a0,s1 + 802034f2: 00002097 auipc ra,0x2 + 802034f6: baa080e7 jalr -1110(ra) # 8020509c <disk_write> +} + 802034fa: 60e2 ld ra,24(sp) + 802034fc: 6442 ld s0,16(sp) + 802034fe: 64a2 ld s1,8(sp) + 80203500: 6105 addi sp,sp,32 + 80203502: 8082 ret panic("bwrite"); - 80203502: 00006517 auipc a0,0x6 - 80203506: 60650513 addi a0,a0,1542 # 80209b08 <digits+0x788> - 8020350a: ffffd097 auipc ra,0xffffd - 8020350e: c3a080e7 jalr -966(ra) # 80200144 <panic> + 80203504: 00006517 auipc a0,0x6 + 80203508: 60c50513 addi a0,a0,1548 # 80209b10 <digits+0x790> + 8020350c: ffffd097 auipc ra,0xffffd + 80203510: c38080e7 jalr -968(ra) # 80200144 <panic> -0000000080203512 <brelse>: +0000000080203514 <brelse>: // Release a locked buffer. // Move to the head of the most-recently-used list. void brelse(struct buf *b) { - 80203512: 1101 addi sp,sp,-32 - 80203514: ec06 sd ra,24(sp) - 80203516: e822 sd s0,16(sp) - 80203518: e426 sd s1,8(sp) - 8020351a: e04a sd s2,0(sp) - 8020351c: 1000 addi s0,sp,32 - 8020351e: 84aa mv s1,a0 + 80203514: 1101 addi sp,sp,-32 + 80203516: ec06 sd ra,24(sp) + 80203518: e822 sd s0,16(sp) + 8020351a: e426 sd s1,8(sp) + 8020351c: e04a sd s2,0(sp) + 8020351e: 1000 addi s0,sp,32 + 80203520: 84aa mv s1,a0 if(!holdingsleep(&b->lock)) - 80203520: 01050913 addi s2,a0,16 - 80203524: 854a mv a0,s2 - 80203526: 00000097 auipc ra,0x0 - 8020352a: 1d6080e7 jalr 470(ra) # 802036fc <holdingsleep> - 8020352e: c92d beqz a0,802035a0 <brelse+0x8e> + 80203522: 01050913 addi s2,a0,16 + 80203526: 854a mv a0,s2 + 80203528: 00000097 auipc ra,0x0 + 8020352c: 1d6080e7 jalr 470(ra) # 802036fe <holdingsleep> + 80203530: c92d beqz a0,802035a2 <brelse+0x8e> panic("brelse"); releasesleep(&b->lock); - 80203530: 854a mv a0,s2 - 80203532: 00000097 auipc ra,0x0 - 80203536: 186080e7 jalr 390(ra) # 802036b8 <releasesleep> + 80203532: 854a mv a0,s2 + 80203534: 00000097 auipc ra,0x0 + 80203538: 186080e7 jalr 390(ra) # 802036ba <releasesleep> acquire(&bcache.lock); - 8020353a: 00015517 auipc a0,0x15 - 8020353e: 5b650513 addi a0,a0,1462 # 80218af0 <bcache> - 80203542: ffffd097 auipc ra,0xffffd - 80203546: 184080e7 jalr 388(ra) # 802006c6 <acquire> + 8020353c: 00015517 auipc a0,0x15 + 80203540: 5b450513 addi a0,a0,1460 # 80218af0 <bcache> + 80203544: ffffd097 auipc ra,0xffffd + 80203548: 182080e7 jalr 386(ra) # 802006c6 <acquire> b->refcnt--; - 8020354a: 40bc lw a5,64(s1) - 8020354c: 37fd addiw a5,a5,-1 - 8020354e: 0007871b sext.w a4,a5 - 80203552: c0bc sw a5,64(s1) + 8020354c: 40bc lw a5,64(s1) + 8020354e: 37fd addiw a5,a5,-1 + 80203550: 0007871b sext.w a4,a5 + 80203554: c0bc sw a5,64(s1) if (b->refcnt == 0) { - 80203554: eb05 bnez a4,80203584 <brelse+0x72> + 80203556: eb05 bnez a4,80203586 <brelse+0x72> // no one is waiting for it. b->next->prev = b->prev; - 80203556: 68bc ld a5,80(s1) - 80203558: 64b8 ld a4,72(s1) - 8020355a: e7b8 sd a4,72(a5) + 80203558: 68bc ld a5,80(s1) + 8020355a: 64b8 ld a4,72(s1) + 8020355c: e7b8 sd a4,72(a5) b->prev->next = b->next; - 8020355c: 64bc ld a5,72(s1) - 8020355e: 68b8 ld a4,80(s1) - 80203560: ebb8 sd a4,80(a5) + 8020355e: 64bc ld a5,72(s1) + 80203560: 68b8 ld a4,80(s1) + 80203562: ebb8 sd a4,80(a5) b->next = bcache.head.next; - 80203562: 00019797 auipc a5,0x19 - 80203566: 58e78793 addi a5,a5,1422 # 8021caf0 <bcache+0x4000> - 8020356a: 6b87b703 ld a4,1720(a5) - 8020356e: e8b8 sd a4,80(s1) + 80203564: 00019797 auipc a5,0x19 + 80203568: 58c78793 addi a5,a5,1420 # 8021caf0 <bcache+0x4000> + 8020356c: 6b87b703 ld a4,1720(a5) + 80203570: e8b8 sd a4,80(s1) b->prev = &bcache.head; - 80203570: 0001a717 auipc a4,0x1a - 80203574: be870713 addi a4,a4,-1048 # 8021d158 <bcache+0x4668> - 80203578: e4b8 sd a4,72(s1) + 80203572: 0001a717 auipc a4,0x1a + 80203576: be670713 addi a4,a4,-1050 # 8021d158 <bcache+0x4668> + 8020357a: e4b8 sd a4,72(s1) bcache.head.next->prev = b; - 8020357a: 6b87b703 ld a4,1720(a5) - 8020357e: e724 sd s1,72(a4) + 8020357c: 6b87b703 ld a4,1720(a5) + 80203580: e724 sd s1,72(a4) bcache.head.next = b; - 80203580: 6a97bc23 sd s1,1720(a5) + 80203582: 6a97bc23 sd s1,1720(a5) } release(&bcache.lock); - 80203584: 00015517 auipc a0,0x15 - 80203588: 56c50513 addi a0,a0,1388 # 80218af0 <bcache> - 8020358c: ffffd097 auipc ra,0xffffd - 80203590: 18e080e7 jalr 398(ra) # 8020071a <release> -} - 80203594: 60e2 ld ra,24(sp) - 80203596: 6442 ld s0,16(sp) - 80203598: 64a2 ld s1,8(sp) - 8020359a: 6902 ld s2,0(sp) - 8020359c: 6105 addi sp,sp,32 - 8020359e: 8082 ret + 80203586: 00015517 auipc a0,0x15 + 8020358a: 56a50513 addi a0,a0,1386 # 80218af0 <bcache> + 8020358e: ffffd097 auipc ra,0xffffd + 80203592: 18c080e7 jalr 396(ra) # 8020071a <release> +} + 80203596: 60e2 ld ra,24(sp) + 80203598: 6442 ld s0,16(sp) + 8020359a: 64a2 ld s1,8(sp) + 8020359c: 6902 ld s2,0(sp) + 8020359e: 6105 addi sp,sp,32 + 802035a0: 8082 ret panic("brelse"); - 802035a0: 00006517 auipc a0,0x6 - 802035a4: 57050513 addi a0,a0,1392 # 80209b10 <digits+0x790> - 802035a8: ffffd097 auipc ra,0xffffd - 802035ac: b9c080e7 jalr -1124(ra) # 80200144 <panic> + 802035a2: 00006517 auipc a0,0x6 + 802035a6: 57650513 addi a0,a0,1398 # 80209b18 <digits+0x798> + 802035aa: ffffd097 auipc ra,0xffffd + 802035ae: b9a080e7 jalr -1126(ra) # 80200144 <panic> -00000000802035b0 <bpin>: +00000000802035b2 <bpin>: void bpin(struct buf *b) { - 802035b0: 1101 addi sp,sp,-32 - 802035b2: ec06 sd ra,24(sp) - 802035b4: e822 sd s0,16(sp) - 802035b6: e426 sd s1,8(sp) - 802035b8: 1000 addi s0,sp,32 - 802035ba: 84aa mv s1,a0 + 802035b2: 1101 addi sp,sp,-32 + 802035b4: ec06 sd ra,24(sp) + 802035b6: e822 sd s0,16(sp) + 802035b8: e426 sd s1,8(sp) + 802035ba: 1000 addi s0,sp,32 + 802035bc: 84aa mv s1,a0 acquire(&bcache.lock); - 802035bc: 00015517 auipc a0,0x15 - 802035c0: 53450513 addi a0,a0,1332 # 80218af0 <bcache> - 802035c4: ffffd097 auipc ra,0xffffd - 802035c8: 102080e7 jalr 258(ra) # 802006c6 <acquire> + 802035be: 00015517 auipc a0,0x15 + 802035c2: 53250513 addi a0,a0,1330 # 80218af0 <bcache> + 802035c6: ffffd097 auipc ra,0xffffd + 802035ca: 100080e7 jalr 256(ra) # 802006c6 <acquire> b->refcnt++; - 802035cc: 40bc lw a5,64(s1) - 802035ce: 2785 addiw a5,a5,1 - 802035d0: c0bc sw a5,64(s1) + 802035ce: 40bc lw a5,64(s1) + 802035d0: 2785 addiw a5,a5,1 + 802035d2: c0bc sw a5,64(s1) release(&bcache.lock); - 802035d2: 00015517 auipc a0,0x15 - 802035d6: 51e50513 addi a0,a0,1310 # 80218af0 <bcache> - 802035da: ffffd097 auipc ra,0xffffd - 802035de: 140080e7 jalr 320(ra) # 8020071a <release> + 802035d4: 00015517 auipc a0,0x15 + 802035d8: 51c50513 addi a0,a0,1308 # 80218af0 <bcache> + 802035dc: ffffd097 auipc ra,0xffffd + 802035e0: 13e080e7 jalr 318(ra) # 8020071a <release> } - 802035e2: 60e2 ld ra,24(sp) - 802035e4: 6442 ld s0,16(sp) - 802035e6: 64a2 ld s1,8(sp) - 802035e8: 6105 addi sp,sp,32 - 802035ea: 8082 ret + 802035e4: 60e2 ld ra,24(sp) + 802035e6: 6442 ld s0,16(sp) + 802035e8: 64a2 ld s1,8(sp) + 802035ea: 6105 addi sp,sp,32 + 802035ec: 8082 ret -00000000802035ec <bunpin>: +00000000802035ee <bunpin>: void bunpin(struct buf *b) { - 802035ec: 1101 addi sp,sp,-32 - 802035ee: ec06 sd ra,24(sp) - 802035f0: e822 sd s0,16(sp) - 802035f2: e426 sd s1,8(sp) - 802035f4: 1000 addi s0,sp,32 - 802035f6: 84aa mv s1,a0 + 802035ee: 1101 addi sp,sp,-32 + 802035f0: ec06 sd ra,24(sp) + 802035f2: e822 sd s0,16(sp) + 802035f4: e426 sd s1,8(sp) + 802035f6: 1000 addi s0,sp,32 + 802035f8: 84aa mv s1,a0 acquire(&bcache.lock); - 802035f8: 00015517 auipc a0,0x15 - 802035fc: 4f850513 addi a0,a0,1272 # 80218af0 <bcache> - 80203600: ffffd097 auipc ra,0xffffd - 80203604: 0c6080e7 jalr 198(ra) # 802006c6 <acquire> + 802035fa: 00015517 auipc a0,0x15 + 802035fe: 4f650513 addi a0,a0,1270 # 80218af0 <bcache> + 80203602: ffffd097 auipc ra,0xffffd + 80203606: 0c4080e7 jalr 196(ra) # 802006c6 <acquire> b->refcnt--; - 80203608: 40bc lw a5,64(s1) - 8020360a: 37fd addiw a5,a5,-1 - 8020360c: c0bc sw a5,64(s1) + 8020360a: 40bc lw a5,64(s1) + 8020360c: 37fd addiw a5,a5,-1 + 8020360e: c0bc sw a5,64(s1) release(&bcache.lock); - 8020360e: 00015517 auipc a0,0x15 - 80203612: 4e250513 addi a0,a0,1250 # 80218af0 <bcache> - 80203616: ffffd097 auipc ra,0xffffd - 8020361a: 104080e7 jalr 260(ra) # 8020071a <release> -} - 8020361e: 60e2 ld ra,24(sp) - 80203620: 6442 ld s0,16(sp) - 80203622: 64a2 ld s1,8(sp) - 80203624: 6105 addi sp,sp,32 - 80203626: 8082 ret - -0000000080203628 <initsleeplock>: + 80203610: 00015517 auipc a0,0x15 + 80203614: 4e050513 addi a0,a0,1248 # 80218af0 <bcache> + 80203618: ffffd097 auipc ra,0xffffd + 8020361c: 102080e7 jalr 258(ra) # 8020071a <release> +} + 80203620: 60e2 ld ra,24(sp) + 80203622: 6442 ld s0,16(sp) + 80203624: 64a2 ld s1,8(sp) + 80203626: 6105 addi sp,sp,32 + 80203628: 8082 ret + +000000008020362a <initsleeplock>: #include "include/proc.h" #include "include/sleeplock.h" void initsleeplock(struct sleeplock *lk, char *name) { - 80203628: 1101 addi sp,sp,-32 - 8020362a: ec06 sd ra,24(sp) - 8020362c: e822 sd s0,16(sp) - 8020362e: e426 sd s1,8(sp) - 80203630: e04a sd s2,0(sp) - 80203632: 1000 addi s0,sp,32 - 80203634: 84aa mv s1,a0 - 80203636: 892e mv s2,a1 + 8020362a: 1101 addi sp,sp,-32 + 8020362c: ec06 sd ra,24(sp) + 8020362e: e822 sd s0,16(sp) + 80203630: e426 sd s1,8(sp) + 80203632: e04a sd s2,0(sp) + 80203634: 1000 addi s0,sp,32 + 80203636: 84aa mv s1,a0 + 80203638: 892e mv s2,a1 initlock(&lk->lk, "sleep lock"); - 80203638: 00006597 auipc a1,0x6 - 8020363c: 4e058593 addi a1,a1,1248 # 80209b18 <digits+0x798> - 80203640: 0521 addi a0,a0,8 - 80203642: ffffd097 auipc ra,0xffffd - 80203646: 040080e7 jalr 64(ra) # 80200682 <initlock> + 8020363a: 00006597 auipc a1,0x6 + 8020363e: 4e658593 addi a1,a1,1254 # 80209b20 <digits+0x7a0> + 80203642: 0521 addi a0,a0,8 + 80203644: ffffd097 auipc ra,0xffffd + 80203648: 03e080e7 jalr 62(ra) # 80200682 <initlock> lk->name = name; - 8020364a: 0324b023 sd s2,32(s1) + 8020364c: 0324b023 sd s2,32(s1) lk->locked = 0; - 8020364e: 0004a023 sw zero,0(s1) + 80203650: 0004a023 sw zero,0(s1) lk->pid = 0; - 80203652: 0204a423 sw zero,40(s1) + 80203654: 0204a423 sw zero,40(s1) } - 80203656: 60e2 ld ra,24(sp) - 80203658: 6442 ld s0,16(sp) - 8020365a: 64a2 ld s1,8(sp) - 8020365c: 6902 ld s2,0(sp) - 8020365e: 6105 addi sp,sp,32 - 80203660: 8082 ret + 80203658: 60e2 ld ra,24(sp) + 8020365a: 6442 ld s0,16(sp) + 8020365c: 64a2 ld s1,8(sp) + 8020365e: 6902 ld s2,0(sp) + 80203660: 6105 addi sp,sp,32 + 80203662: 8082 ret -0000000080203662 <acquiresleep>: +0000000080203664 <acquiresleep>: void acquiresleep(struct sleeplock *lk) { - 80203662: 1101 addi sp,sp,-32 - 80203664: ec06 sd ra,24(sp) - 80203666: e822 sd s0,16(sp) - 80203668: e426 sd s1,8(sp) - 8020366a: e04a sd s2,0(sp) - 8020366c: 1000 addi s0,sp,32 - 8020366e: 84aa mv s1,a0 + 80203664: 1101 addi sp,sp,-32 + 80203666: ec06 sd ra,24(sp) + 80203668: e822 sd s0,16(sp) + 8020366a: e426 sd s1,8(sp) + 8020366c: e04a sd s2,0(sp) + 8020366e: 1000 addi s0,sp,32 + 80203670: 84aa mv s1,a0 acquire(&lk->lk); - 80203670: 00850913 addi s2,a0,8 - 80203674: 854a mv a0,s2 - 80203676: ffffd097 auipc ra,0xffffd - 8020367a: 050080e7 jalr 80(ra) # 802006c6 <acquire> + 80203672: 00850913 addi s2,a0,8 + 80203676: 854a mv a0,s2 + 80203678: ffffd097 auipc ra,0xffffd + 8020367c: 04e080e7 jalr 78(ra) # 802006c6 <acquire> while (lk->locked) { - 8020367e: 409c lw a5,0(s1) - 80203680: cb89 beqz a5,80203692 <acquiresleep+0x30> + 80203680: 409c lw a5,0(s1) + 80203682: cb89 beqz a5,80203694 <acquiresleep+0x30> sleep(lk, &lk->lk); - 80203682: 85ca mv a1,s2 - 80203684: 8526 mv a0,s1 - 80203686: fffff097 auipc ra,0xfffff - 8020368a: c36080e7 jalr -970(ra) # 802022bc <sleep> + 80203684: 85ca mv a1,s2 + 80203686: 8526 mv a0,s1 + 80203688: fffff097 auipc ra,0xfffff + 8020368c: c34080e7 jalr -972(ra) # 802022bc <sleep> while (lk->locked) { - 8020368e: 409c lw a5,0(s1) - 80203690: fbed bnez a5,80203682 <acquiresleep+0x20> + 80203690: 409c lw a5,0(s1) + 80203692: fbed bnez a5,80203684 <acquiresleep+0x20> } lk->locked = 1; - 80203692: 4785 li a5,1 - 80203694: c09c sw a5,0(s1) + 80203694: 4785 li a5,1 + 80203696: c09c sw a5,0(s1) lk->pid = myproc()->pid; - 80203696: ffffe097 auipc ra,0xffffe - 8020369a: 3a6080e7 jalr 934(ra) # 80201a3c <myproc> - 8020369e: 5d1c lw a5,56(a0) - 802036a0: d49c sw a5,40(s1) + 80203698: ffffe097 auipc ra,0xffffe + 8020369c: 3a4080e7 jalr 932(ra) # 80201a3c <myproc> + 802036a0: 5d1c lw a5,56(a0) + 802036a2: d49c sw a5,40(s1) release(&lk->lk); - 802036a2: 854a mv a0,s2 - 802036a4: ffffd097 auipc ra,0xffffd - 802036a8: 076080e7 jalr 118(ra) # 8020071a <release> + 802036a4: 854a mv a0,s2 + 802036a6: ffffd097 auipc ra,0xffffd + 802036aa: 074080e7 jalr 116(ra) # 8020071a <release> } - 802036ac: 60e2 ld ra,24(sp) - 802036ae: 6442 ld s0,16(sp) - 802036b0: 64a2 ld s1,8(sp) - 802036b2: 6902 ld s2,0(sp) - 802036b4: 6105 addi sp,sp,32 - 802036b6: 8082 ret + 802036ae: 60e2 ld ra,24(sp) + 802036b0: 6442 ld s0,16(sp) + 802036b2: 64a2 ld s1,8(sp) + 802036b4: 6902 ld s2,0(sp) + 802036b6: 6105 addi sp,sp,32 + 802036b8: 8082 ret -00000000802036b8 <releasesleep>: +00000000802036ba <releasesleep>: void releasesleep(struct sleeplock *lk) { - 802036b8: 1101 addi sp,sp,-32 - 802036ba: ec06 sd ra,24(sp) - 802036bc: e822 sd s0,16(sp) - 802036be: e426 sd s1,8(sp) - 802036c0: e04a sd s2,0(sp) - 802036c2: 1000 addi s0,sp,32 - 802036c4: 84aa mv s1,a0 + 802036ba: 1101 addi sp,sp,-32 + 802036bc: ec06 sd ra,24(sp) + 802036be: e822 sd s0,16(sp) + 802036c0: e426 sd s1,8(sp) + 802036c2: e04a sd s2,0(sp) + 802036c4: 1000 addi s0,sp,32 + 802036c6: 84aa mv s1,a0 acquire(&lk->lk); - 802036c6: 00850913 addi s2,a0,8 - 802036ca: 854a mv a0,s2 - 802036cc: ffffd097 auipc ra,0xffffd - 802036d0: ffa080e7 jalr -6(ra) # 802006c6 <acquire> + 802036c8: 00850913 addi s2,a0,8 + 802036cc: 854a mv a0,s2 + 802036ce: ffffd097 auipc ra,0xffffd + 802036d2: ff8080e7 jalr -8(ra) # 802006c6 <acquire> lk->locked = 0; - 802036d4: 0004a023 sw zero,0(s1) + 802036d6: 0004a023 sw zero,0(s1) lk->pid = 0; - 802036d8: 0204a423 sw zero,40(s1) + 802036da: 0204a423 sw zero,40(s1) wakeup(lk); - 802036dc: 8526 mv a0,s1 - 802036de: fffff097 auipc ra,0xfffff - 802036e2: d5a080e7 jalr -678(ra) # 80202438 <wakeup> + 802036de: 8526 mv a0,s1 + 802036e0: fffff097 auipc ra,0xfffff + 802036e4: d58080e7 jalr -680(ra) # 80202438 <wakeup> release(&lk->lk); - 802036e6: 854a mv a0,s2 - 802036e8: ffffd097 auipc ra,0xffffd - 802036ec: 032080e7 jalr 50(ra) # 8020071a <release> + 802036e8: 854a mv a0,s2 + 802036ea: ffffd097 auipc ra,0xffffd + 802036ee: 030080e7 jalr 48(ra) # 8020071a <release> } - 802036f0: 60e2 ld ra,24(sp) - 802036f2: 6442 ld s0,16(sp) - 802036f4: 64a2 ld s1,8(sp) - 802036f6: 6902 ld s2,0(sp) - 802036f8: 6105 addi sp,sp,32 - 802036fa: 8082 ret + 802036f2: 60e2 ld ra,24(sp) + 802036f4: 6442 ld s0,16(sp) + 802036f6: 64a2 ld s1,8(sp) + 802036f8: 6902 ld s2,0(sp) + 802036fa: 6105 addi sp,sp,32 + 802036fc: 8082 ret -00000000802036fc <holdingsleep>: +00000000802036fe <holdingsleep>: int holdingsleep(struct sleeplock *lk) { - 802036fc: 7179 addi sp,sp,-48 - 802036fe: f406 sd ra,40(sp) - 80203700: f022 sd s0,32(sp) - 80203702: ec26 sd s1,24(sp) - 80203704: e84a sd s2,16(sp) - 80203706: e44e sd s3,8(sp) - 80203708: 1800 addi s0,sp,48 - 8020370a: 84aa mv s1,a0 + 802036fe: 7179 addi sp,sp,-48 + 80203700: f406 sd ra,40(sp) + 80203702: f022 sd s0,32(sp) + 80203704: ec26 sd s1,24(sp) + 80203706: e84a sd s2,16(sp) + 80203708: e44e sd s3,8(sp) + 8020370a: 1800 addi s0,sp,48 + 8020370c: 84aa mv s1,a0 int r; acquire(&lk->lk); - 8020370c: 00850913 addi s2,a0,8 - 80203710: 854a mv a0,s2 - 80203712: ffffd097 auipc ra,0xffffd - 80203716: fb4080e7 jalr -76(ra) # 802006c6 <acquire> + 8020370e: 00850913 addi s2,a0,8 + 80203712: 854a mv a0,s2 + 80203714: ffffd097 auipc ra,0xffffd + 80203718: fb2080e7 jalr -78(ra) # 802006c6 <acquire> r = lk->locked && (lk->pid == myproc()->pid); - 8020371a: 409c lw a5,0(s1) - 8020371c: ef99 bnez a5,8020373a <holdingsleep+0x3e> - 8020371e: 4481 li s1,0 + 8020371c: 409c lw a5,0(s1) + 8020371e: ef99 bnez a5,8020373c <holdingsleep+0x3e> + 80203720: 4481 li s1,0 release(&lk->lk); - 80203720: 854a mv a0,s2 - 80203722: ffffd097 auipc ra,0xffffd - 80203726: ff8080e7 jalr -8(ra) # 8020071a <release> + 80203722: 854a mv a0,s2 + 80203724: ffffd097 auipc ra,0xffffd + 80203728: ff6080e7 jalr -10(ra) # 8020071a <release> return r; } - 8020372a: 8526 mv a0,s1 - 8020372c: 70a2 ld ra,40(sp) - 8020372e: 7402 ld s0,32(sp) - 80203730: 64e2 ld s1,24(sp) - 80203732: 6942 ld s2,16(sp) - 80203734: 69a2 ld s3,8(sp) - 80203736: 6145 addi sp,sp,48 - 80203738: 8082 ret + 8020372c: 8526 mv a0,s1 + 8020372e: 70a2 ld ra,40(sp) + 80203730: 7402 ld s0,32(sp) + 80203732: 64e2 ld s1,24(sp) + 80203734: 6942 ld s2,16(sp) + 80203736: 69a2 ld s3,8(sp) + 80203738: 6145 addi sp,sp,48 + 8020373a: 8082 ret r = lk->locked && (lk->pid == myproc()->pid); - 8020373a: 0284a983 lw s3,40(s1) - 8020373e: ffffe097 auipc ra,0xffffe - 80203742: 2fe080e7 jalr 766(ra) # 80201a3c <myproc> - 80203746: 5d04 lw s1,56(a0) - 80203748: 413484b3 sub s1,s1,s3 - 8020374c: 0014b493 seqz s1,s1 - 80203750: bfc1 j 80203720 <holdingsleep+0x24> - -0000000080203752 <fileinit>: + 8020373c: 0284a983 lw s3,40(s1) + 80203740: ffffe097 auipc ra,0xffffe + 80203744: 2fc080e7 jalr 764(ra) # 80201a3c <myproc> + 80203748: 5d04 lw s1,56(a0) + 8020374a: 413484b3 sub s1,s1,s3 + 8020374e: 0014b493 seqz s1,s1 + 80203752: bfc1 j 80203722 <holdingsleep+0x24> + +0000000080203754 <fileinit>: struct file file[NFILE]; } ftable; void fileinit(void) { - 80203752: 1101 addi sp,sp,-32 - 80203754: ec06 sd ra,24(sp) - 80203756: e822 sd s0,16(sp) - 80203758: e426 sd s1,8(sp) - 8020375a: e04a sd s2,0(sp) - 8020375c: 1000 addi s0,sp,32 + 80203754: 1101 addi sp,sp,-32 + 80203756: ec06 sd ra,24(sp) + 80203758: e822 sd s0,16(sp) + 8020375a: e426 sd s1,8(sp) + 8020375c: e04a sd s2,0(sp) + 8020375e: 1000 addi s0,sp,32 initlock(&ftable.lock, "ftable"); - 8020375e: 00006597 auipc a1,0x6 - 80203762: 3ca58593 addi a1,a1,970 # 80209b28 <digits+0x7a8> - 80203766: 0001a517 auipc a0,0x1a - 8020376a: cea50513 addi a0,a0,-790 # 8021d450 <ftable> - 8020376e: ffffd097 auipc ra,0xffffd - 80203772: f14080e7 jalr -236(ra) # 80200682 <initlock> + 80203760: 00006597 auipc a1,0x6 + 80203764: 3d058593 addi a1,a1,976 # 80209b30 <digits+0x7b0> + 80203768: 0001a517 auipc a0,0x1a + 8020376c: ce850513 addi a0,a0,-792 # 8021d450 <ftable> + 80203770: ffffd097 auipc ra,0xffffd + 80203774: f12080e7 jalr -238(ra) # 80200682 <initlock> struct file *f; for(f = ftable.file; f < ftable.file + NFILE; f++){ - 80203776: 0001a497 auipc s1,0x1a - 8020377a: cf248493 addi s1,s1,-782 # 8021d468 <ftable+0x18> - 8020377e: 0001b917 auipc s2,0x1b - 80203782: c8a90913 addi s2,s2,-886 # 8021e408 <tickslock> + 80203778: 0001a497 auipc s1,0x1a + 8020377c: cf048493 addi s1,s1,-784 # 8021d468 <ftable+0x18> + 80203780: 0001b917 auipc s2,0x1b + 80203784: c8890913 addi s2,s2,-888 # 8021e408 <tickslock> memset(f, 0, sizeof(struct file)); - 80203786: 02800613 li a2,40 - 8020378a: 4581 li a1,0 - 8020378c: 8526 mv a0,s1 - 8020378e: ffffd097 auipc ra,0xffffd - 80203792: fd4080e7 jalr -44(ra) # 80200762 <memset> + 80203788: 02800613 li a2,40 + 8020378c: 4581 li a1,0 + 8020378e: 8526 mv a0,s1 + 80203790: ffffd097 auipc ra,0xffffd + 80203794: fd2080e7 jalr -46(ra) # 80200762 <memset> for(f = ftable.file; f < ftable.file + NFILE; f++){ - 80203796: 02848493 addi s1,s1,40 - 8020379a: ff2496e3 bne s1,s2,80203786 <fileinit+0x34> + 80203798: 02848493 addi s1,s1,40 + 8020379c: ff2496e3 bne s1,s2,80203788 <fileinit+0x34> } #ifdef DEBUG printf("fileinit\n"); #endif } - 8020379e: 60e2 ld ra,24(sp) - 802037a0: 6442 ld s0,16(sp) - 802037a2: 64a2 ld s1,8(sp) - 802037a4: 6902 ld s2,0(sp) - 802037a6: 6105 addi sp,sp,32 - 802037a8: 8082 ret + 802037a0: 60e2 ld ra,24(sp) + 802037a2: 6442 ld s0,16(sp) + 802037a4: 64a2 ld s1,8(sp) + 802037a6: 6902 ld s2,0(sp) + 802037a8: 6105 addi sp,sp,32 + 802037aa: 8082 ret -00000000802037aa <filealloc>: +00000000802037ac <filealloc>: // Allocate a file structure. struct file* filealloc(void) { - 802037aa: 1101 addi sp,sp,-32 - 802037ac: ec06 sd ra,24(sp) - 802037ae: e822 sd s0,16(sp) - 802037b0: e426 sd s1,8(sp) - 802037b2: 1000 addi s0,sp,32 + 802037ac: 1101 addi sp,sp,-32 + 802037ae: ec06 sd ra,24(sp) + 802037b0: e822 sd s0,16(sp) + 802037b2: e426 sd s1,8(sp) + 802037b4: 1000 addi s0,sp,32 struct file *f; acquire(&ftable.lock); - 802037b4: 0001a517 auipc a0,0x1a - 802037b8: c9c50513 addi a0,a0,-868 # 8021d450 <ftable> - 802037bc: ffffd097 auipc ra,0xffffd - 802037c0: f0a080e7 jalr -246(ra) # 802006c6 <acquire> + 802037b6: 0001a517 auipc a0,0x1a + 802037ba: c9a50513 addi a0,a0,-870 # 8021d450 <ftable> + 802037be: ffffd097 auipc ra,0xffffd + 802037c2: f08080e7 jalr -248(ra) # 802006c6 <acquire> for(f = ftable.file; f < ftable.file + NFILE; f++){ - 802037c4: 0001a497 auipc s1,0x1a - 802037c8: ca448493 addi s1,s1,-860 # 8021d468 <ftable+0x18> - 802037cc: 0001b717 auipc a4,0x1b - 802037d0: c3c70713 addi a4,a4,-964 # 8021e408 <tickslock> + 802037c6: 0001a497 auipc s1,0x1a + 802037ca: ca248493 addi s1,s1,-862 # 8021d468 <ftable+0x18> + 802037ce: 0001b717 auipc a4,0x1b + 802037d2: c3a70713 addi a4,a4,-966 # 8021e408 <tickslock> if(f->ref == 0){ - 802037d4: 40dc lw a5,4(s1) - 802037d6: cf99 beqz a5,802037f4 <filealloc+0x4a> + 802037d6: 40dc lw a5,4(s1) + 802037d8: cf99 beqz a5,802037f6 <filealloc+0x4a> for(f = ftable.file; f < ftable.file + NFILE; f++){ - 802037d8: 02848493 addi s1,s1,40 - 802037dc: fee49ce3 bne s1,a4,802037d4 <filealloc+0x2a> + 802037da: 02848493 addi s1,s1,40 + 802037de: fee49ce3 bne s1,a4,802037d6 <filealloc+0x2a> f->ref = 1; release(&ftable.lock); return f; } } release(&ftable.lock); - 802037e0: 0001a517 auipc a0,0x1a - 802037e4: c7050513 addi a0,a0,-912 # 8021d450 <ftable> - 802037e8: ffffd097 auipc ra,0xffffd - 802037ec: f32080e7 jalr -206(ra) # 8020071a <release> + 802037e2: 0001a517 auipc a0,0x1a + 802037e6: c6e50513 addi a0,a0,-914 # 8021d450 <ftable> + 802037ea: ffffd097 auipc ra,0xffffd + 802037ee: f30080e7 jalr -208(ra) # 8020071a <release> return NULL; - 802037f0: 4481 li s1,0 - 802037f2: a819 j 80203808 <filealloc+0x5e> + 802037f2: 4481 li s1,0 + 802037f4: a819 j 8020380a <filealloc+0x5e> f->ref = 1; - 802037f4: 4785 li a5,1 - 802037f6: c0dc sw a5,4(s1) + 802037f6: 4785 li a5,1 + 802037f8: c0dc sw a5,4(s1) release(&ftable.lock); - 802037f8: 0001a517 auipc a0,0x1a - 802037fc: c5850513 addi a0,a0,-936 # 8021d450 <ftable> - 80203800: ffffd097 auipc ra,0xffffd - 80203804: f1a080e7 jalr -230(ra) # 8020071a <release> + 802037fa: 0001a517 auipc a0,0x1a + 802037fe: c5650513 addi a0,a0,-938 # 8021d450 <ftable> + 80203802: ffffd097 auipc ra,0xffffd + 80203806: f18080e7 jalr -232(ra) # 8020071a <release> } - 80203808: 8526 mv a0,s1 - 8020380a: 60e2 ld ra,24(sp) - 8020380c: 6442 ld s0,16(sp) - 8020380e: 64a2 ld s1,8(sp) - 80203810: 6105 addi sp,sp,32 - 80203812: 8082 ret + 8020380a: 8526 mv a0,s1 + 8020380c: 60e2 ld ra,24(sp) + 8020380e: 6442 ld s0,16(sp) + 80203810: 64a2 ld s1,8(sp) + 80203812: 6105 addi sp,sp,32 + 80203814: 8082 ret -0000000080203814 <filedup>: +0000000080203816 <filedup>: // Increment ref count for file f. struct file* filedup(struct file *f) { - 80203814: 1101 addi sp,sp,-32 - 80203816: ec06 sd ra,24(sp) - 80203818: e822 sd s0,16(sp) - 8020381a: e426 sd s1,8(sp) - 8020381c: 1000 addi s0,sp,32 - 8020381e: 84aa mv s1,a0 + 80203816: 1101 addi sp,sp,-32 + 80203818: ec06 sd ra,24(sp) + 8020381a: e822 sd s0,16(sp) + 8020381c: e426 sd s1,8(sp) + 8020381e: 1000 addi s0,sp,32 + 80203820: 84aa mv s1,a0 acquire(&ftable.lock); - 80203820: 0001a517 auipc a0,0x1a - 80203824: c3050513 addi a0,a0,-976 # 8021d450 <ftable> - 80203828: ffffd097 auipc ra,0xffffd - 8020382c: e9e080e7 jalr -354(ra) # 802006c6 <acquire> + 80203822: 0001a517 auipc a0,0x1a + 80203826: c2e50513 addi a0,a0,-978 # 8021d450 <ftable> + 8020382a: ffffd097 auipc ra,0xffffd + 8020382e: e9c080e7 jalr -356(ra) # 802006c6 <acquire> if(f->ref < 1) - 80203830: 40dc lw a5,4(s1) - 80203832: 02f05263 blez a5,80203856 <filedup+0x42> + 80203832: 40dc lw a5,4(s1) + 80203834: 02f05263 blez a5,80203858 <filedup+0x42> panic("filedup"); f->ref++; - 80203836: 2785 addiw a5,a5,1 - 80203838: c0dc sw a5,4(s1) + 80203838: 2785 addiw a5,a5,1 + 8020383a: c0dc sw a5,4(s1) release(&ftable.lock); - 8020383a: 0001a517 auipc a0,0x1a - 8020383e: c1650513 addi a0,a0,-1002 # 8021d450 <ftable> - 80203842: ffffd097 auipc ra,0xffffd - 80203846: ed8080e7 jalr -296(ra) # 8020071a <release> + 8020383c: 0001a517 auipc a0,0x1a + 80203840: c1450513 addi a0,a0,-1004 # 8021d450 <ftable> + 80203844: ffffd097 auipc ra,0xffffd + 80203848: ed6080e7 jalr -298(ra) # 8020071a <release> return f; } - 8020384a: 8526 mv a0,s1 - 8020384c: 60e2 ld ra,24(sp) - 8020384e: 6442 ld s0,16(sp) - 80203850: 64a2 ld s1,8(sp) - 80203852: 6105 addi sp,sp,32 - 80203854: 8082 ret + 8020384c: 8526 mv a0,s1 + 8020384e: 60e2 ld ra,24(sp) + 80203850: 6442 ld s0,16(sp) + 80203852: 64a2 ld s1,8(sp) + 80203854: 6105 addi sp,sp,32 + 80203856: 8082 ret panic("filedup"); - 80203856: 00006517 auipc a0,0x6 - 8020385a: 2da50513 addi a0,a0,730 # 80209b30 <digits+0x7b0> - 8020385e: ffffd097 auipc ra,0xffffd - 80203862: 8e6080e7 jalr -1818(ra) # 80200144 <panic> + 80203858: 00006517 auipc a0,0x6 + 8020385c: 2e050513 addi a0,a0,736 # 80209b38 <digits+0x7b8> + 80203860: ffffd097 auipc ra,0xffffd + 80203864: 8e4080e7 jalr -1820(ra) # 80200144 <panic> -0000000080203866 <fileclose>: +0000000080203868 <fileclose>: // Close file f. (Decrement ref count, close when reaches 0.) void fileclose(struct file *f) { - 80203866: 7139 addi sp,sp,-64 - 80203868: fc06 sd ra,56(sp) - 8020386a: f822 sd s0,48(sp) - 8020386c: f426 sd s1,40(sp) - 8020386e: f04a sd s2,32(sp) - 80203870: ec4e sd s3,24(sp) - 80203872: e852 sd s4,16(sp) - 80203874: e456 sd s5,8(sp) - 80203876: 0080 addi s0,sp,64 - 80203878: 84aa mv s1,a0 + 80203868: 7139 addi sp,sp,-64 + 8020386a: fc06 sd ra,56(sp) + 8020386c: f822 sd s0,48(sp) + 8020386e: f426 sd s1,40(sp) + 80203870: f04a sd s2,32(sp) + 80203872: ec4e sd s3,24(sp) + 80203874: e852 sd s4,16(sp) + 80203876: e456 sd s5,8(sp) + 80203878: 0080 addi s0,sp,64 + 8020387a: 84aa mv s1,a0 struct file ff; acquire(&ftable.lock); - 8020387a: 0001a517 auipc a0,0x1a - 8020387e: bd650513 addi a0,a0,-1066 # 8021d450 <ftable> - 80203882: ffffd097 auipc ra,0xffffd - 80203886: e44080e7 jalr -444(ra) # 802006c6 <acquire> + 8020387c: 0001a517 auipc a0,0x1a + 80203880: bd450513 addi a0,a0,-1068 # 8021d450 <ftable> + 80203884: ffffd097 auipc ra,0xffffd + 80203888: e42080e7 jalr -446(ra) # 802006c6 <acquire> if(f->ref < 1) - 8020388a: 40dc lw a5,4(s1) - 8020388c: 04f05863 blez a5,802038dc <fileclose+0x76> + 8020388c: 40dc lw a5,4(s1) + 8020388e: 04f05863 blez a5,802038de <fileclose+0x76> panic("fileclose"); if(--f->ref > 0){ - 80203890: 37fd addiw a5,a5,-1 - 80203892: 0007871b sext.w a4,a5 - 80203896: c0dc sw a5,4(s1) - 80203898: 04e04a63 bgtz a4,802038ec <fileclose+0x86> + 80203892: 37fd addiw a5,a5,-1 + 80203894: 0007871b sext.w a4,a5 + 80203898: c0dc sw a5,4(s1) + 8020389a: 04e04a63 bgtz a4,802038ee <fileclose+0x86> release(&ftable.lock); return; } ff = *f; - 8020389c: 0004a903 lw s2,0(s1) - 802038a0: 0094ca03 lbu s4,9(s1) - 802038a4: 0104b983 ld s3,16(s1) - 802038a8: 0184ba83 ld s5,24(s1) + 8020389e: 0004a903 lw s2,0(s1) + 802038a2: 0094ca03 lbu s4,9(s1) + 802038a6: 0104b983 ld s3,16(s1) + 802038aa: 0184ba83 ld s5,24(s1) f->ref = 0; - 802038ac: 0004a223 sw zero,4(s1) + 802038ae: 0004a223 sw zero,4(s1) f->type = FD_NONE; - 802038b0: 0004a023 sw zero,0(s1) + 802038b2: 0004a023 sw zero,0(s1) release(&ftable.lock); - 802038b4: 0001a517 auipc a0,0x1a - 802038b8: b9c50513 addi a0,a0,-1124 # 8021d450 <ftable> - 802038bc: ffffd097 auipc ra,0xffffd - 802038c0: e5e080e7 jalr -418(ra) # 8020071a <release> + 802038b6: 0001a517 auipc a0,0x1a + 802038ba: b9a50513 addi a0,a0,-1126 # 8021d450 <ftable> + 802038be: ffffd097 auipc ra,0xffffd + 802038c2: e5c080e7 jalr -420(ra) # 8020071a <release> if(ff.type == FD_PIPE){ - 802038c4: 4785 li a5,1 - 802038c6: 04f90463 beq s2,a5,8020390e <fileclose+0xa8> + 802038c6: 4785 li a5,1 + 802038c8: 04f90463 beq s2,a5,80203910 <fileclose+0xa8> pipeclose(ff.pipe, ff.writable); } else if(ff.type == FD_ENTRY){ - 802038ca: 4789 li a5,2 - 802038cc: 02f91863 bne s2,a5,802038fc <fileclose+0x96> + 802038cc: 4789 li a5,2 + 802038ce: 02f91863 bne s2,a5,802038fe <fileclose+0x96> eput(ff.ep); - 802038d0: 8556 mv a0,s5 - 802038d2: 00003097 auipc ra,0x3 - 802038d6: 9c0080e7 jalr -1600(ra) # 80206292 <eput> - 802038da: a00d j 802038fc <fileclose+0x96> + 802038d2: 8556 mv a0,s5 + 802038d4: 00003097 auipc ra,0x3 + 802038d8: 9ce080e7 jalr -1586(ra) # 802062a2 <eput> + 802038dc: a00d j 802038fe <fileclose+0x96> panic("fileclose"); - 802038dc: 00006517 auipc a0,0x6 - 802038e0: 25c50513 addi a0,a0,604 # 80209b38 <digits+0x7b8> - 802038e4: ffffd097 auipc ra,0xffffd - 802038e8: 860080e7 jalr -1952(ra) # 80200144 <panic> + 802038de: 00006517 auipc a0,0x6 + 802038e2: 26250513 addi a0,a0,610 # 80209b40 <digits+0x7c0> + 802038e6: ffffd097 auipc ra,0xffffd + 802038ea: 85e080e7 jalr -1954(ra) # 80200144 <panic> release(&ftable.lock); - 802038ec: 0001a517 auipc a0,0x1a - 802038f0: b6450513 addi a0,a0,-1180 # 8021d450 <ftable> - 802038f4: ffffd097 auipc ra,0xffffd - 802038f8: e26080e7 jalr -474(ra) # 8020071a <release> + 802038ee: 0001a517 auipc a0,0x1a + 802038f2: b6250513 addi a0,a0,-1182 # 8021d450 <ftable> + 802038f6: ffffd097 auipc ra,0xffffd + 802038fa: e24080e7 jalr -476(ra) # 8020071a <release> } else if (ff.type == FD_DEVICE) { } } - 802038fc: 70e2 ld ra,56(sp) - 802038fe: 7442 ld s0,48(sp) - 80203900: 74a2 ld s1,40(sp) - 80203902: 7902 ld s2,32(sp) - 80203904: 69e2 ld s3,24(sp) - 80203906: 6a42 ld s4,16(sp) - 80203908: 6aa2 ld s5,8(sp) - 8020390a: 6121 addi sp,sp,64 - 8020390c: 8082 ret + 802038fe: 70e2 ld ra,56(sp) + 80203900: 7442 ld s0,48(sp) + 80203902: 74a2 ld s1,40(sp) + 80203904: 7902 ld s2,32(sp) + 80203906: 69e2 ld s3,24(sp) + 80203908: 6a42 ld s4,16(sp) + 8020390a: 6aa2 ld s5,8(sp) + 8020390c: 6121 addi sp,sp,64 + 8020390e: 8082 ret pipeclose(ff.pipe, ff.writable); - 8020390e: 85d2 mv a1,s4 - 80203910: 854e mv a0,s3 - 80203912: 00000097 auipc ra,0x0 - 80203916: 3a0080e7 jalr 928(ra) # 80203cb2 <pipeclose> - 8020391a: b7cd j 802038fc <fileclose+0x96> + 80203910: 85d2 mv a1,s4 + 80203912: 854e mv a0,s3 + 80203914: 00000097 auipc ra,0x0 + 80203918: 3a0080e7 jalr 928(ra) # 80203cb4 <pipeclose> + 8020391c: b7cd j 802038fe <fileclose+0x96> -000000008020391c <filestat>: +000000008020391e <filestat>: filestat(struct file *f, uint64 addr) { // struct proc *p = myproc(); struct stat st; if(f->type == FD_ENTRY){ - 8020391c: 4118 lw a4,0(a0) - 8020391e: 4789 li a5,2 - 80203920: 04f71e63 bne a4,a5,8020397c <filestat+0x60> -{ - 80203924: 7159 addi sp,sp,-112 - 80203926: f486 sd ra,104(sp) - 80203928: f0a2 sd s0,96(sp) - 8020392a: eca6 sd s1,88(sp) - 8020392c: e8ca sd s2,80(sp) - 8020392e: e4ce sd s3,72(sp) - 80203930: 1880 addi s0,sp,112 - 80203932: 84aa mv s1,a0 - 80203934: 892e mv s2,a1 + 8020391e: 4118 lw a4,0(a0) + 80203920: 4789 li a5,2 + 80203922: 04f71e63 bne a4,a5,8020397e <filestat+0x60> +{ + 80203926: 7159 addi sp,sp,-112 + 80203928: f486 sd ra,104(sp) + 8020392a: f0a2 sd s0,96(sp) + 8020392c: eca6 sd s1,88(sp) + 8020392e: e8ca sd s2,80(sp) + 80203930: e4ce sd s3,72(sp) + 80203932: 1880 addi s0,sp,112 + 80203934: 84aa mv s1,a0 + 80203936: 892e mv s2,a1 elock(f->ep); - 80203936: 6d08 ld a0,24(a0) - 80203938: 00003097 auipc ra,0x3 - 8020393c: 8d6080e7 jalr -1834(ra) # 8020620e <elock> + 80203938: 6d08 ld a0,24(a0) + 8020393a: 00003097 auipc ra,0x3 + 8020393e: 8e4080e7 jalr -1820(ra) # 8020621e <elock> estat(f->ep, &st); - 80203940: f9840993 addi s3,s0,-104 - 80203944: 85ce mv a1,s3 - 80203946: 6c88 ld a0,24(s1) - 80203948: 00003097 auipc ra,0x3 - 8020394c: a82080e7 jalr -1406(ra) # 802063ca <estat> + 80203942: f9840993 addi s3,s0,-104 + 80203946: 85ce mv a1,s3 + 80203948: 6c88 ld a0,24(s1) + 8020394a: 00003097 auipc ra,0x3 + 8020394e: a90080e7 jalr -1392(ra) # 802063da <estat> eunlock(f->ep); - 80203950: 6c88 ld a0,24(s1) - 80203952: 00003097 auipc ra,0x3 - 80203956: 8f2080e7 jalr -1806(ra) # 80206244 <eunlock> + 80203952: 6c88 ld a0,24(s1) + 80203954: 00003097 auipc ra,0x3 + 80203958: 900080e7 jalr -1792(ra) # 80206254 <eunlock> // if(copyout(p->pagetable, addr, (char *)&st, sizeof(st)) < 0) if(copyout2(addr, (char *)&st, sizeof(st)) < 0) - 8020395a: 03800613 li a2,56 - 8020395e: 85ce mv a1,s3 - 80203960: 854a mv a0,s2 - 80203962: ffffe097 auipc ra,0xffffe - 80203966: a10080e7 jalr -1520(ra) # 80201372 <copyout2> - 8020396a: 41f5551b sraiw a0,a0,0x1f + 8020395c: 03800613 li a2,56 + 80203960: 85ce mv a1,s3 + 80203962: 854a mv a0,s2 + 80203964: ffffe097 auipc ra,0xffffe + 80203968: a0e080e7 jalr -1522(ra) # 80201372 <copyout2> + 8020396c: 41f5551b sraiw a0,a0,0x1f return -1; return 0; } return -1; } - 8020396e: 70a6 ld ra,104(sp) - 80203970: 7406 ld s0,96(sp) - 80203972: 64e6 ld s1,88(sp) - 80203974: 6946 ld s2,80(sp) - 80203976: 69a6 ld s3,72(sp) - 80203978: 6165 addi sp,sp,112 - 8020397a: 8082 ret + 80203970: 70a6 ld ra,104(sp) + 80203972: 7406 ld s0,96(sp) + 80203974: 64e6 ld s1,88(sp) + 80203976: 6946 ld s2,80(sp) + 80203978: 69a6 ld s3,72(sp) + 8020397a: 6165 addi sp,sp,112 + 8020397c: 8082 ret return -1; - 8020397c: 557d li a0,-1 + 8020397e: 557d li a0,-1 } - 8020397e: 8082 ret + 80203980: 8082 ret -0000000080203980 <fileread>: +0000000080203982 <fileread>: // Read from file f. // addr is a user virtual address. int fileread(struct file *f, uint64 addr, int n) { - 80203980: 7179 addi sp,sp,-48 - 80203982: f406 sd ra,40(sp) - 80203984: f022 sd s0,32(sp) - 80203986: ec26 sd s1,24(sp) - 80203988: e84a sd s2,16(sp) - 8020398a: e44e sd s3,8(sp) - 8020398c: 1800 addi s0,sp,48 + 80203982: 7179 addi sp,sp,-48 + 80203984: f406 sd ra,40(sp) + 80203986: f022 sd s0,32(sp) + 80203988: ec26 sd s1,24(sp) + 8020398a: e84a sd s2,16(sp) + 8020398c: e44e sd s3,8(sp) + 8020398e: 1800 addi s0,sp,48 int r = 0; if(f->readable == 0) - 8020398e: 00854783 lbu a5,8(a0) - 80203992: c3d5 beqz a5,80203a36 <fileread+0xb6> - 80203994: 84aa mv s1,a0 - 80203996: 89ae mv s3,a1 - 80203998: 8932 mv s2,a2 + 80203990: 00854783 lbu a5,8(a0) + 80203994: c3d5 beqz a5,80203a38 <fileread+0xb6> + 80203996: 84aa mv s1,a0 + 80203998: 89ae mv s3,a1 + 8020399a: 8932 mv s2,a2 return -1; switch (f->type) { - 8020399a: 411c lw a5,0(a0) - 8020399c: 4709 li a4,2 - 8020399e: 06e78263 beq a5,a4,80203a02 <fileread+0x82> - 802039a2: 470d li a4,3 - 802039a4: 02e78b63 beq a5,a4,802039da <fileread+0x5a> - 802039a8: 4705 li a4,1 - 802039aa: 00e78a63 beq a5,a4,802039be <fileread+0x3e> + 8020399c: 411c lw a5,0(a0) + 8020399e: 4709 li a4,2 + 802039a0: 06e78263 beq a5,a4,80203a04 <fileread+0x82> + 802039a4: 470d li a4,3 + 802039a6: 02e78b63 beq a5,a4,802039dc <fileread+0x5a> + 802039aa: 4705 li a4,1 + 802039ac: 00e78a63 beq a5,a4,802039c0 <fileread+0x3e> if((r = eread(f->ep, 1, addr, f->off, n)) > 0) f->off += r; eunlock(f->ep); break; default: panic("fileread"); - 802039ae: 00006517 auipc a0,0x6 - 802039b2: 19a50513 addi a0,a0,410 # 80209b48 <digits+0x7c8> - 802039b6: ffffc097 auipc ra,0xffffc - 802039ba: 78e080e7 jalr 1934(ra) # 80200144 <panic> + 802039b0: 00006517 auipc a0,0x6 + 802039b4: 1a050513 addi a0,a0,416 # 80209b50 <digits+0x7d0> + 802039b8: ffffc097 auipc ra,0xffffc + 802039bc: 78c080e7 jalr 1932(ra) # 80200144 <panic> r = piperead(f->pipe, addr, n); - 802039be: 6908 ld a0,16(a0) - 802039c0: 00000097 auipc ra,0x0 - 802039c4: 466080e7 jalr 1126(ra) # 80203e26 <piperead> - 802039c8: 892a mv s2,a0 + 802039c0: 6908 ld a0,16(a0) + 802039c2: 00000097 auipc ra,0x0 + 802039c6: 466080e7 jalr 1126(ra) # 80203e28 <piperead> + 802039ca: 892a mv s2,a0 } return r; } - 802039ca: 854a mv a0,s2 - 802039cc: 70a2 ld ra,40(sp) - 802039ce: 7402 ld s0,32(sp) - 802039d0: 64e2 ld s1,24(sp) - 802039d2: 6942 ld s2,16(sp) - 802039d4: 69a2 ld s3,8(sp) - 802039d6: 6145 addi sp,sp,48 - 802039d8: 8082 ret + 802039cc: 854a mv a0,s2 + 802039ce: 70a2 ld ra,40(sp) + 802039d0: 7402 ld s0,32(sp) + 802039d2: 64e2 ld s1,24(sp) + 802039d4: 6942 ld s2,16(sp) + 802039d6: 69a2 ld s3,8(sp) + 802039d8: 6145 addi sp,sp,48 + 802039da: 8082 ret if(f->major < 0 || f->major >= NDEV || !devsw[f->major].read) - 802039da: 02451783 lh a5,36(a0) - 802039de: 03079693 slli a3,a5,0x30 - 802039e2: 92c1 srli a3,a3,0x30 - 802039e4: 4725 li a4,9 - 802039e6: 04d76a63 bltu a4,a3,80203a3a <fileread+0xba> - 802039ea: 0792 slli a5,a5,0x4 - 802039ec: 0001a717 auipc a4,0x1a - 802039f0: 9c470713 addi a4,a4,-1596 # 8021d3b0 <devsw> - 802039f4: 97ba add a5,a5,a4 - 802039f6: 639c ld a5,0(a5) - 802039f8: c3b9 beqz a5,80203a3e <fileread+0xbe> + 802039dc: 02451783 lh a5,36(a0) + 802039e0: 03079693 slli a3,a5,0x30 + 802039e4: 92c1 srli a3,a3,0x30 + 802039e6: 4725 li a4,9 + 802039e8: 04d76a63 bltu a4,a3,80203a3c <fileread+0xba> + 802039ec: 0792 slli a5,a5,0x4 + 802039ee: 0001a717 auipc a4,0x1a + 802039f2: 9c270713 addi a4,a4,-1598 # 8021d3b0 <devsw> + 802039f6: 97ba add a5,a5,a4 + 802039f8: 639c ld a5,0(a5) + 802039fa: c3b9 beqz a5,80203a40 <fileread+0xbe> r = devsw[f->major].read(1, addr, n); - 802039fa: 4505 li a0,1 - 802039fc: 9782 jalr a5 - 802039fe: 892a mv s2,a0 + 802039fc: 4505 li a0,1 + 802039fe: 9782 jalr a5 + 80203a00: 892a mv s2,a0 break; - 80203a00: b7e9 j 802039ca <fileread+0x4a> + 80203a02: b7e9 j 802039cc <fileread+0x4a> elock(f->ep); - 80203a02: 6d08 ld a0,24(a0) - 80203a04: 00003097 auipc ra,0x3 - 80203a08: 80a080e7 jalr -2038(ra) # 8020620e <elock> + 80203a04: 6d08 ld a0,24(a0) + 80203a06: 00003097 auipc ra,0x3 + 80203a0a: 818080e7 jalr -2024(ra) # 8020621e <elock> if((r = eread(f->ep, 1, addr, f->off, n)) > 0) - 80203a0c: 874a mv a4,s2 - 80203a0e: 5094 lw a3,32(s1) - 80203a10: 864e mv a2,s3 - 80203a12: 4585 li a1,1 - 80203a14: 6c88 ld a0,24(s1) - 80203a16: 00002097 auipc ra,0x2 - 80203a1a: ef4080e7 jalr -268(ra) # 8020590a <eread> - 80203a1e: 892a mv s2,a0 - 80203a20: 00a05563 blez a0,80203a2a <fileread+0xaa> + 80203a0e: 874a mv a4,s2 + 80203a10: 5094 lw a3,32(s1) + 80203a12: 864e mv a2,s3 + 80203a14: 4585 li a1,1 + 80203a16: 6c88 ld a0,24(s1) + 80203a18: 00002097 auipc ra,0x2 + 80203a1c: f02080e7 jalr -254(ra) # 8020591a <eread> + 80203a20: 892a mv s2,a0 + 80203a22: 00a05563 blez a0,80203a2c <fileread+0xaa> f->off += r; - 80203a24: 509c lw a5,32(s1) - 80203a26: 9fa9 addw a5,a5,a0 - 80203a28: d09c sw a5,32(s1) + 80203a26: 509c lw a5,32(s1) + 80203a28: 9fa9 addw a5,a5,a0 + 80203a2a: d09c sw a5,32(s1) eunlock(f->ep); - 80203a2a: 6c88 ld a0,24(s1) - 80203a2c: 00003097 auipc ra,0x3 - 80203a30: 818080e7 jalr -2024(ra) # 80206244 <eunlock> + 80203a2c: 6c88 ld a0,24(s1) + 80203a2e: 00003097 auipc ra,0x3 + 80203a32: 826080e7 jalr -2010(ra) # 80206254 <eunlock> break; - 80203a34: bf59 j 802039ca <fileread+0x4a> + 80203a36: bf59 j 802039cc <fileread+0x4a> return -1; - 80203a36: 597d li s2,-1 - 80203a38: bf49 j 802039ca <fileread+0x4a> + 80203a38: 597d li s2,-1 + 80203a3a: bf49 j 802039cc <fileread+0x4a> return -1; - 80203a3a: 597d li s2,-1 - 80203a3c: b779 j 802039ca <fileread+0x4a> - 80203a3e: 597d li s2,-1 - 80203a40: b769 j 802039ca <fileread+0x4a> + 80203a3c: 597d li s2,-1 + 80203a3e: b779 j 802039cc <fileread+0x4a> + 80203a40: 597d li s2,-1 + 80203a42: b769 j 802039cc <fileread+0x4a> -0000000080203a42 <filewrite>: +0000000080203a44 <filewrite>: // Write to file f. // addr is a user virtual address. int filewrite(struct file *f, uint64 addr, int n) { - 80203a42: 7179 addi sp,sp,-48 - 80203a44: f406 sd ra,40(sp) - 80203a46: f022 sd s0,32(sp) - 80203a48: ec26 sd s1,24(sp) - 80203a4a: e84a sd s2,16(sp) - 80203a4c: e44e sd s3,8(sp) - 80203a4e: e052 sd s4,0(sp) - 80203a50: 1800 addi s0,sp,48 + 80203a44: 7179 addi sp,sp,-48 + 80203a46: f406 sd ra,40(sp) + 80203a48: f022 sd s0,32(sp) + 80203a4a: ec26 sd s1,24(sp) + 80203a4c: e84a sd s2,16(sp) + 80203a4e: e44e sd s3,8(sp) + 80203a50: e052 sd s4,0(sp) + 80203a52: 1800 addi s0,sp,48 int ret = 0; if(f->writable == 0) - 80203a52: 00954783 lbu a5,9(a0) - 80203a56: cbc5 beqz a5,80203b06 <filewrite+0xc4> - 80203a58: 84aa mv s1,a0 - 80203a5a: 892e mv s2,a1 - 80203a5c: 89b2 mv s3,a2 + 80203a54: 00954783 lbu a5,9(a0) + 80203a58: cbc5 beqz a5,80203b08 <filewrite+0xc4> + 80203a5a: 84aa mv s1,a0 + 80203a5c: 892e mv s2,a1 + 80203a5e: 89b2 mv s3,a2 return -1; if(f->type == FD_PIPE){ - 80203a5e: 411c lw a5,0(a0) - 80203a60: 4705 li a4,1 - 80203a62: 04e78963 beq a5,a4,80203ab4 <filewrite+0x72> + 80203a60: 411c lw a5,0(a0) + 80203a62: 4705 li a4,1 + 80203a64: 04e78963 beq a5,a4,80203ab6 <filewrite+0x72> ret = pipewrite(f->pipe, addr, n); } else if(f->type == FD_DEVICE){ - 80203a66: 470d li a4,3 - 80203a68: 04e78d63 beq a5,a4,80203ac2 <filewrite+0x80> + 80203a68: 470d li a4,3 + 80203a6a: 04e78d63 beq a5,a4,80203ac4 <filewrite+0x80> if(f->major < 0 || f->major >= NDEV || !devsw[f->major].write) return -1; ret = devsw[f->major].write(1, addr, n); } else if(f->type == FD_ENTRY){ - 80203a6c: 4709 li a4,2 - 80203a6e: 08e79463 bne a5,a4,80203af6 <filewrite+0xb4> + 80203a6e: 4709 li a4,2 + 80203a70: 08e79463 bne a5,a4,80203af8 <filewrite+0xb4> elock(f->ep); - 80203a72: 6d08 ld a0,24(a0) - 80203a74: 00002097 auipc ra,0x2 - 80203a78: 79a080e7 jalr 1946(ra) # 8020620e <elock> + 80203a74: 6d08 ld a0,24(a0) + 80203a76: 00002097 auipc ra,0x2 + 80203a7a: 7a8080e7 jalr 1960(ra) # 8020621e <elock> if (ewrite(f->ep, 1, addr, f->off, n) == n) { - 80203a7c: 00098a1b sext.w s4,s3 - 80203a80: 8752 mv a4,s4 - 80203a82: 5094 lw a3,32(s1) - 80203a84: 864a mv a2,s2 - 80203a86: 4585 li a1,1 - 80203a88: 6c88 ld a0,24(s1) - 80203a8a: 00002097 auipc ra,0x2 - 80203a8e: f78080e7 jalr -136(ra) # 80205a02 <ewrite> + 80203a7e: 00098a1b sext.w s4,s3 + 80203a82: 8752 mv a4,s4 + 80203a84: 5094 lw a3,32(s1) + 80203a86: 864a mv a2,s2 + 80203a88: 4585 li a1,1 + 80203a8a: 6c88 ld a0,24(s1) + 80203a8c: 00002097 auipc ra,0x2 + 80203a90: f86080e7 jalr -122(ra) # 80205a12 <ewrite> ret = n; f->off += n; } else { ret = -1; - 80203a92: 597d li s2,-1 + 80203a94: 597d li s2,-1 if (ewrite(f->ep, 1, addr, f->off, n) == n) { - 80203a94: 05350b63 beq a0,s3,80203aea <filewrite+0xa8> + 80203a96: 05350b63 beq a0,s3,80203aec <filewrite+0xa8> } eunlock(f->ep); - 80203a98: 6c88 ld a0,24(s1) - 80203a9a: 00002097 auipc ra,0x2 - 80203a9e: 7aa080e7 jalr 1962(ra) # 80206244 <eunlock> + 80203a9a: 6c88 ld a0,24(s1) + 80203a9c: 00002097 auipc ra,0x2 + 80203aa0: 7b8080e7 jalr 1976(ra) # 80206254 <eunlock> } else { panic("filewrite"); } return ret; } - 80203aa2: 854a mv a0,s2 - 80203aa4: 70a2 ld ra,40(sp) - 80203aa6: 7402 ld s0,32(sp) - 80203aa8: 64e2 ld s1,24(sp) - 80203aaa: 6942 ld s2,16(sp) - 80203aac: 69a2 ld s3,8(sp) - 80203aae: 6a02 ld s4,0(sp) - 80203ab0: 6145 addi sp,sp,48 - 80203ab2: 8082 ret + 80203aa4: 854a mv a0,s2 + 80203aa6: 70a2 ld ra,40(sp) + 80203aa8: 7402 ld s0,32(sp) + 80203aaa: 64e2 ld s1,24(sp) + 80203aac: 6942 ld s2,16(sp) + 80203aae: 69a2 ld s3,8(sp) + 80203ab0: 6a02 ld s4,0(sp) + 80203ab2: 6145 addi sp,sp,48 + 80203ab4: 8082 ret ret = pipewrite(f->pipe, addr, n); - 80203ab4: 6908 ld a0,16(a0) - 80203ab6: 00000097 auipc ra,0x0 - 80203aba: 26c080e7 jalr 620(ra) # 80203d22 <pipewrite> - 80203abe: 892a mv s2,a0 - 80203ac0: b7cd j 80203aa2 <filewrite+0x60> + 80203ab6: 6908 ld a0,16(a0) + 80203ab8: 00000097 auipc ra,0x0 + 80203abc: 26c080e7 jalr 620(ra) # 80203d24 <pipewrite> + 80203ac0: 892a mv s2,a0 + 80203ac2: b7cd j 80203aa4 <filewrite+0x60> if(f->major < 0 || f->major >= NDEV || !devsw[f->major].write) - 80203ac2: 02451783 lh a5,36(a0) - 80203ac6: 03079693 slli a3,a5,0x30 - 80203aca: 92c1 srli a3,a3,0x30 - 80203acc: 4725 li a4,9 - 80203ace: 02d76e63 bltu a4,a3,80203b0a <filewrite+0xc8> - 80203ad2: 0792 slli a5,a5,0x4 - 80203ad4: 0001a717 auipc a4,0x1a - 80203ad8: 8dc70713 addi a4,a4,-1828 # 8021d3b0 <devsw> - 80203adc: 97ba add a5,a5,a4 - 80203ade: 679c ld a5,8(a5) - 80203ae0: c79d beqz a5,80203b0e <filewrite+0xcc> + 80203ac4: 02451783 lh a5,36(a0) + 80203ac8: 03079693 slli a3,a5,0x30 + 80203acc: 92c1 srli a3,a3,0x30 + 80203ace: 4725 li a4,9 + 80203ad0: 02d76e63 bltu a4,a3,80203b0c <filewrite+0xc8> + 80203ad4: 0792 slli a5,a5,0x4 + 80203ad6: 0001a717 auipc a4,0x1a + 80203ada: 8da70713 addi a4,a4,-1830 # 8021d3b0 <devsw> + 80203ade: 97ba add a5,a5,a4 + 80203ae0: 679c ld a5,8(a5) + 80203ae2: c79d beqz a5,80203b10 <filewrite+0xcc> ret = devsw[f->major].write(1, addr, n); - 80203ae2: 4505 li a0,1 - 80203ae4: 9782 jalr a5 - 80203ae6: 892a mv s2,a0 - 80203ae8: bf6d j 80203aa2 <filewrite+0x60> + 80203ae4: 4505 li a0,1 + 80203ae6: 9782 jalr a5 + 80203ae8: 892a mv s2,a0 + 80203aea: bf6d j 80203aa4 <filewrite+0x60> f->off += n; - 80203aea: 509c lw a5,32(s1) - 80203aec: 014787bb addw a5,a5,s4 - 80203af0: d09c sw a5,32(s1) + 80203aec: 509c lw a5,32(s1) + 80203aee: 014787bb addw a5,a5,s4 + 80203af2: d09c sw a5,32(s1) ret = n; - 80203af2: 894e mv s2,s3 - 80203af4: b755 j 80203a98 <filewrite+0x56> + 80203af4: 894e mv s2,s3 + 80203af6: b755 j 80203a9a <filewrite+0x56> panic("filewrite"); - 80203af6: 00006517 auipc a0,0x6 - 80203afa: 06250513 addi a0,a0,98 # 80209b58 <digits+0x7d8> - 80203afe: ffffc097 auipc ra,0xffffc - 80203b02: 646080e7 jalr 1606(ra) # 80200144 <panic> + 80203af8: 00006517 auipc a0,0x6 + 80203afc: 06850513 addi a0,a0,104 # 80209b60 <digits+0x7e0> + 80203b00: ffffc097 auipc ra,0xffffc + 80203b04: 644080e7 jalr 1604(ra) # 80200144 <panic> return -1; - 80203b06: 597d li s2,-1 - 80203b08: bf69 j 80203aa2 <filewrite+0x60> + 80203b08: 597d li s2,-1 + 80203b0a: bf69 j 80203aa4 <filewrite+0x60> return -1; - 80203b0a: 597d li s2,-1 - 80203b0c: bf59 j 80203aa2 <filewrite+0x60> - 80203b0e: 597d li s2,-1 - 80203b10: bf49 j 80203aa2 <filewrite+0x60> + 80203b0c: 597d li s2,-1 + 80203b0e: bf59 j 80203aa4 <filewrite+0x60> + 80203b10: 597d li s2,-1 + 80203b12: bf49 j 80203aa4 <filewrite+0x60> -0000000080203b12 <dirnext>: +0000000080203b14 <dirnext>: int dirnext(struct file *f, uint64 addr) { // struct proc *p = myproc(); if(f->readable == 0 || !(f->ep->attribute & ATTR_DIRECTORY)) - 80203b12: 00854783 lbu a5,8(a0) - 80203b16: cfdd beqz a5,80203bd4 <dirnext+0xc2> -{ - 80203b18: 7141 addi sp,sp,-496 - 80203b1a: f786 sd ra,488(sp) - 80203b1c: f3a2 sd s0,480(sp) - 80203b1e: efa6 sd s1,472(sp) - 80203b20: ebca sd s2,464(sp) - 80203b22: e7ce sd s3,456(sp) - 80203b24: e3d2 sd s4,448(sp) - 80203b26: ff56 sd s5,440(sp) - 80203b28: 1b80 addi s0,sp,496 - 80203b2a: 84aa mv s1,a0 - 80203b2c: 8aae mv s5,a1 + 80203b14: 00854783 lbu a5,8(a0) + 80203b18: cfdd beqz a5,80203bd6 <dirnext+0xc2> +{ + 80203b1a: 7141 addi sp,sp,-496 + 80203b1c: f786 sd ra,488(sp) + 80203b1e: f3a2 sd s0,480(sp) + 80203b20: efa6 sd s1,472(sp) + 80203b22: ebca sd s2,464(sp) + 80203b24: e7ce sd s3,456(sp) + 80203b26: e3d2 sd s4,448(sp) + 80203b28: ff56 sd s5,440(sp) + 80203b2a: 1b80 addi s0,sp,496 + 80203b2c: 84aa mv s1,a0 + 80203b2e: 8aae mv s5,a1 if(f->readable == 0 || !(f->ep->attribute & ATTR_DIRECTORY)) - 80203b2e: 6d18 ld a4,24(a0) - 80203b30: 10074783 lbu a5,256(a4) - 80203b34: 8bc1 andi a5,a5,16 + 80203b30: 6d18 ld a4,24(a0) + 80203b32: 10074783 lbu a5,256(a4) + 80203b36: 8bc1 andi a5,a5,16 return -1; - 80203b36: 557d li a0,-1 + 80203b38: 557d li a0,-1 if(f->readable == 0 || !(f->ep->attribute & ATTR_DIRECTORY)) - 80203b38: eb91 bnez a5,80203b4c <dirnext+0x3a> + 80203b3a: eb91 bnez a5,80203b4e <dirnext+0x3a> // if(copyout(p->pagetable, addr, (char *)&st, sizeof(st)) < 0) if(copyout2(addr, (char *)&st, sizeof(st)) < 0) return -1; return 1; - 80203b3a: 70be ld ra,488(sp) - 80203b3c: 741e ld s0,480(sp) - 80203b3e: 64fe ld s1,472(sp) - 80203b40: 695e ld s2,464(sp) - 80203b42: 69be ld s3,456(sp) - 80203b44: 6a1e ld s4,448(sp) - 80203b46: 7afa ld s5,440(sp) - 80203b48: 617d addi sp,sp,496 - 80203b4a: 8082 ret + 80203b3c: 70be ld ra,488(sp) + 80203b3e: 741e ld s0,480(sp) + 80203b40: 64fe ld s1,472(sp) + 80203b42: 695e ld s2,464(sp) + 80203b44: 69be ld s3,456(sp) + 80203b46: 6a1e ld s4,448(sp) + 80203b48: 7afa ld s5,440(sp) + 80203b4a: 617d addi sp,sp,496 + 80203b4c: 8082 ret int count = 0; - 80203b4c: e0042e23 sw zero,-484(s0) + 80203b4e: e0042e23 sw zero,-484(s0) elock(f->ep); - 80203b50: 853a mv a0,a4 - 80203b52: 00002097 auipc ra,0x2 - 80203b56: 6bc080e7 jalr 1724(ra) # 8020620e <elock> + 80203b52: 853a mv a0,a4 + 80203b54: 00002097 auipc ra,0x2 + 80203b58: 6ca080e7 jalr 1738(ra) # 8020621e <elock> while ((ret = enext(f->ep, &de, f->off, &count)) == 0) { // skip empty entry - 80203b5a: e1c40a13 addi s4,s0,-484 - 80203b5e: e5840993 addi s3,s0,-424 - 80203b62: a801 j 80203b72 <dirnext+0x60> + 80203b5c: e1c40a13 addi s4,s0,-484 + 80203b60: e5840993 addi s3,s0,-424 + 80203b64: a801 j 80203b74 <dirnext+0x60> f->off += count * 32; - 80203b64: e1c42783 lw a5,-484(s0) - 80203b68: 0057979b slliw a5,a5,0x5 - 80203b6c: 5098 lw a4,32(s1) - 80203b6e: 9fb9 addw a5,a5,a4 - 80203b70: d09c sw a5,32(s1) + 80203b66: e1c42783 lw a5,-484(s0) + 80203b6a: 0057979b slliw a5,a5,0x5 + 80203b6e: 5098 lw a4,32(s1) + 80203b70: 9fb9 addw a5,a5,a4 + 80203b72: d09c sw a5,32(s1) while ((ret = enext(f->ep, &de, f->off, &count)) == 0) { // skip empty entry - 80203b72: 86d2 mv a3,s4 - 80203b74: 5090 lw a2,32(s1) - 80203b76: 85ce mv a1,s3 - 80203b78: 6c88 ld a0,24(s1) - 80203b7a: 00003097 auipc ra,0x3 - 80203b7e: 898080e7 jalr -1896(ra) # 80206412 <enext> - 80203b82: 892a mv s2,a0 - 80203b84: d165 beqz a0,80203b64 <dirnext+0x52> + 80203b74: 86d2 mv a3,s4 + 80203b76: 5090 lw a2,32(s1) + 80203b78: 85ce mv a1,s3 + 80203b7a: 6c88 ld a0,24(s1) + 80203b7c: 00003097 auipc ra,0x3 + 80203b80: 8a6080e7 jalr -1882(ra) # 80206422 <enext> + 80203b84: 892a mv s2,a0 + 80203b86: d165 beqz a0,80203b66 <dirnext+0x52> eunlock(f->ep); - 80203b86: 6c88 ld a0,24(s1) - 80203b88: 00002097 auipc ra,0x2 - 80203b8c: 6bc080e7 jalr 1724(ra) # 80206244 <eunlock> + 80203b88: 6c88 ld a0,24(s1) + 80203b8a: 00002097 auipc ra,0x2 + 80203b8e: 6ca080e7 jalr 1738(ra) # 80206254 <eunlock> if (ret == -1) - 80203b90: 57fd li a5,-1 + 80203b92: 57fd li a5,-1 return 0; - 80203b92: 4501 li a0,0 + 80203b94: 4501 li a0,0 if (ret == -1) - 80203b94: faf903e3 beq s2,a5,80203b3a <dirnext+0x28> + 80203b96: faf903e3 beq s2,a5,80203b3c <dirnext+0x28> f->off += count * 32; - 80203b98: e1c42783 lw a5,-484(s0) - 80203b9c: 0057979b slliw a5,a5,0x5 - 80203ba0: 5098 lw a4,32(s1) - 80203ba2: 9fb9 addw a5,a5,a4 - 80203ba4: d09c sw a5,32(s1) + 80203b9a: e1c42783 lw a5,-484(s0) + 80203b9e: 0057979b slliw a5,a5,0x5 + 80203ba2: 5098 lw a4,32(s1) + 80203ba4: 9fb9 addw a5,a5,a4 + 80203ba6: d09c sw a5,32(s1) estat(&de, &st); - 80203ba6: e2040493 addi s1,s0,-480 - 80203baa: 85a6 mv a1,s1 - 80203bac: e5840513 addi a0,s0,-424 - 80203bb0: 00003097 auipc ra,0x3 - 80203bb4: 81a080e7 jalr -2022(ra) # 802063ca <estat> + 80203ba8: e2040493 addi s1,s0,-480 + 80203bac: 85a6 mv a1,s1 + 80203bae: e5840513 addi a0,s0,-424 + 80203bb2: 00003097 auipc ra,0x3 + 80203bb6: 828080e7 jalr -2008(ra) # 802063da <estat> if(copyout2(addr, (char *)&st, sizeof(st)) < 0) - 80203bb8: 03800613 li a2,56 - 80203bbc: 85a6 mv a1,s1 - 80203bbe: 8556 mv a0,s5 - 80203bc0: ffffd097 auipc ra,0xffffd - 80203bc4: 7b2080e7 jalr 1970(ra) # 80201372 <copyout2> + 80203bba: 03800613 li a2,56 + 80203bbe: 85a6 mv a1,s1 + 80203bc0: 8556 mv a0,s5 + 80203bc2: ffffd097 auipc ra,0xffffd + 80203bc6: 7b0080e7 jalr 1968(ra) # 80201372 <copyout2> return -1; - 80203bc8: fff54513 not a0,a0 - 80203bcc: 957d srai a0,a0,0x3f - 80203bce: 8909 andi a0,a0,2 - 80203bd0: 157d addi a0,a0,-1 - 80203bd2: b7a5 j 80203b3a <dirnext+0x28> + 80203bca: fff54513 not a0,a0 + 80203bce: 957d srai a0,a0,0x3f + 80203bd0: 8909 andi a0,a0,2 + 80203bd2: 157d addi a0,a0,-1 + 80203bd4: b7a5 j 80203b3c <dirnext+0x28> return -1; - 80203bd4: 557d li a0,-1 - 80203bd6: 8082 ret + 80203bd6: 557d li a0,-1 + 80203bd8: 8082 ret -0000000080203bd8 <pipealloc>: +0000000080203bda <pipealloc>: #include "include/kalloc.h" #include "include/vm.h" int pipealloc(struct file **f0, struct file **f1) { - 80203bd8: 7179 addi sp,sp,-48 - 80203bda: f406 sd ra,40(sp) - 80203bdc: f022 sd s0,32(sp) - 80203bde: ec26 sd s1,24(sp) - 80203be0: e84a sd s2,16(sp) - 80203be2: e44e sd s3,8(sp) - 80203be4: e052 sd s4,0(sp) - 80203be6: 1800 addi s0,sp,48 - 80203be8: 84aa mv s1,a0 - 80203bea: 8a2e mv s4,a1 + 80203bda: 7179 addi sp,sp,-48 + 80203bdc: f406 sd ra,40(sp) + 80203bde: f022 sd s0,32(sp) + 80203be0: ec26 sd s1,24(sp) + 80203be2: e84a sd s2,16(sp) + 80203be4: e44e sd s3,8(sp) + 80203be6: e052 sd s4,0(sp) + 80203be8: 1800 addi s0,sp,48 + 80203bea: 84aa mv s1,a0 + 80203bec: 8a2e mv s4,a1 struct pipe *pi; pi = 0; *f0 = *f1 = 0; - 80203bec: 0005b023 sd zero,0(a1) - 80203bf0: 00053023 sd zero,0(a0) + 80203bee: 0005b023 sd zero,0(a1) + 80203bf2: 00053023 sd zero,0(a0) if((*f0 = filealloc()) == NULL || (*f1 = filealloc()) == NULL) - 80203bf4: 00000097 auipc ra,0x0 - 80203bf8: bb6080e7 jalr -1098(ra) # 802037aa <filealloc> - 80203bfc: e088 sd a0,0(s1) - 80203bfe: c551 beqz a0,80203c8a <pipealloc+0xb2> - 80203c00: 00000097 auipc ra,0x0 - 80203c04: baa080e7 jalr -1110(ra) # 802037aa <filealloc> - 80203c08: 00aa3023 sd a0,0(s4) - 80203c0c: c92d beqz a0,80203c7e <pipealloc+0xa6> + 80203bf6: 00000097 auipc ra,0x0 + 80203bfa: bb6080e7 jalr -1098(ra) # 802037ac <filealloc> + 80203bfe: e088 sd a0,0(s1) + 80203c00: c551 beqz a0,80203c8c <pipealloc+0xb2> + 80203c02: 00000097 auipc ra,0x0 + 80203c06: baa080e7 jalr -1110(ra) # 802037ac <filealloc> + 80203c0a: 00aa3023 sd a0,0(s4) + 80203c0e: c92d beqz a0,80203c80 <pipealloc+0xa6> goto bad; if((pi = (struct pipe*)kalloc()) == NULL) - 80203c0e: ffffd097 auipc ra,0xffffd - 80203c12: 94c080e7 jalr -1716(ra) # 8020055a <kalloc> - 80203c16: 892a mv s2,a0 - 80203c18: c125 beqz a0,80203c78 <pipealloc+0xa0> + 80203c10: ffffd097 auipc ra,0xffffd + 80203c14: 94a080e7 jalr -1718(ra) # 8020055a <kalloc> + 80203c18: 892a mv s2,a0 + 80203c1a: c125 beqz a0,80203c7a <pipealloc+0xa0> goto bad; pi->readopen = 1; - 80203c1a: 4985 li s3,1 - 80203c1c: 23352023 sw s3,544(a0) + 80203c1c: 4985 li s3,1 + 80203c1e: 23352023 sw s3,544(a0) pi->writeopen = 1; - 80203c20: 23352223 sw s3,548(a0) + 80203c22: 23352223 sw s3,548(a0) pi->nwrite = 0; - 80203c24: 20052e23 sw zero,540(a0) + 80203c26: 20052e23 sw zero,540(a0) pi->nread = 0; - 80203c28: 20052c23 sw zero,536(a0) + 80203c2a: 20052c23 sw zero,536(a0) initlock(&pi->lock, "pipe"); - 80203c2c: 00006597 auipc a1,0x6 - 80203c30: e5458593 addi a1,a1,-428 # 80209a80 <digits+0x700> - 80203c34: ffffd097 auipc ra,0xffffd - 80203c38: a4e080e7 jalr -1458(ra) # 80200682 <initlock> + 80203c2e: 00006597 auipc a1,0x6 + 80203c32: e5258593 addi a1,a1,-430 # 80209a80 <digits+0x700> + 80203c36: ffffd097 auipc ra,0xffffd + 80203c3a: a4c080e7 jalr -1460(ra) # 80200682 <initlock> (*f0)->type = FD_PIPE; - 80203c3c: 609c ld a5,0(s1) - 80203c3e: 0137a023 sw s3,0(a5) + 80203c3e: 609c ld a5,0(s1) + 80203c40: 0137a023 sw s3,0(a5) (*f0)->readable = 1; - 80203c42: 609c ld a5,0(s1) - 80203c44: 01378423 sb s3,8(a5) + 80203c44: 609c ld a5,0(s1) + 80203c46: 01378423 sb s3,8(a5) (*f0)->writable = 0; - 80203c48: 609c ld a5,0(s1) - 80203c4a: 000784a3 sb zero,9(a5) + 80203c4a: 609c ld a5,0(s1) + 80203c4c: 000784a3 sb zero,9(a5) (*f0)->pipe = pi; - 80203c4e: 609c ld a5,0(s1) - 80203c50: 0127b823 sd s2,16(a5) + 80203c50: 609c ld a5,0(s1) + 80203c52: 0127b823 sd s2,16(a5) (*f1)->type = FD_PIPE; - 80203c54: 000a3783 ld a5,0(s4) - 80203c58: 0137a023 sw s3,0(a5) + 80203c56: 000a3783 ld a5,0(s4) + 80203c5a: 0137a023 sw s3,0(a5) (*f1)->readable = 0; - 80203c5c: 000a3783 ld a5,0(s4) - 80203c60: 00078423 sb zero,8(a5) + 80203c5e: 000a3783 ld a5,0(s4) + 80203c62: 00078423 sb zero,8(a5) (*f1)->writable = 1; - 80203c64: 000a3783 ld a5,0(s4) - 80203c68: 013784a3 sb s3,9(a5) + 80203c66: 000a3783 ld a5,0(s4) + 80203c6a: 013784a3 sb s3,9(a5) (*f1)->pipe = pi; - 80203c6c: 000a3783 ld a5,0(s4) - 80203c70: 0127b823 sd s2,16(a5) + 80203c6e: 000a3783 ld a5,0(s4) + 80203c72: 0127b823 sd s2,16(a5) return 0; - 80203c74: 4501 li a0,0 - 80203c76: a025 j 80203c9e <pipealloc+0xc6> + 80203c76: 4501 li a0,0 + 80203c78: a025 j 80203ca0 <pipealloc+0xc6> bad: if(pi) kfree((char*)pi); if(*f0) - 80203c78: 6088 ld a0,0(s1) - 80203c7a: e501 bnez a0,80203c82 <pipealloc+0xaa> - 80203c7c: a039 j 80203c8a <pipealloc+0xb2> - 80203c7e: 6088 ld a0,0(s1) - 80203c80: c51d beqz a0,80203cae <pipealloc+0xd6> + 80203c7a: 6088 ld a0,0(s1) + 80203c7c: e501 bnez a0,80203c84 <pipealloc+0xaa> + 80203c7e: a039 j 80203c8c <pipealloc+0xb2> + 80203c80: 6088 ld a0,0(s1) + 80203c82: c51d beqz a0,80203cb0 <pipealloc+0xd6> fileclose(*f0); - 80203c82: 00000097 auipc ra,0x0 - 80203c86: be4080e7 jalr -1052(ra) # 80203866 <fileclose> + 80203c84: 00000097 auipc ra,0x0 + 80203c88: be4080e7 jalr -1052(ra) # 80203868 <fileclose> if(*f1) - 80203c8a: 000a3783 ld a5,0(s4) + 80203c8c: 000a3783 ld a5,0(s4) fileclose(*f1); return -1; - 80203c8e: 557d li a0,-1 + 80203c90: 557d li a0,-1 if(*f1) - 80203c90: c799 beqz a5,80203c9e <pipealloc+0xc6> + 80203c92: c799 beqz a5,80203ca0 <pipealloc+0xc6> fileclose(*f1); - 80203c92: 853e mv a0,a5 - 80203c94: 00000097 auipc ra,0x0 - 80203c98: bd2080e7 jalr -1070(ra) # 80203866 <fileclose> + 80203c94: 853e mv a0,a5 + 80203c96: 00000097 auipc ra,0x0 + 80203c9a: bd2080e7 jalr -1070(ra) # 80203868 <fileclose> return -1; - 80203c9c: 557d li a0,-1 -} - 80203c9e: 70a2 ld ra,40(sp) - 80203ca0: 7402 ld s0,32(sp) - 80203ca2: 64e2 ld s1,24(sp) - 80203ca4: 6942 ld s2,16(sp) - 80203ca6: 69a2 ld s3,8(sp) - 80203ca8: 6a02 ld s4,0(sp) - 80203caa: 6145 addi sp,sp,48 - 80203cac: 8082 ret + 80203c9e: 557d li a0,-1 +} + 80203ca0: 70a2 ld ra,40(sp) + 80203ca2: 7402 ld s0,32(sp) + 80203ca4: 64e2 ld s1,24(sp) + 80203ca6: 6942 ld s2,16(sp) + 80203ca8: 69a2 ld s3,8(sp) + 80203caa: 6a02 ld s4,0(sp) + 80203cac: 6145 addi sp,sp,48 + 80203cae: 8082 ret return -1; - 80203cae: 557d li a0,-1 - 80203cb0: b7fd j 80203c9e <pipealloc+0xc6> + 80203cb0: 557d li a0,-1 + 80203cb2: b7fd j 80203ca0 <pipealloc+0xc6> -0000000080203cb2 <pipeclose>: +0000000080203cb4 <pipeclose>: void pipeclose(struct pipe *pi, int writable) { - 80203cb2: 1101 addi sp,sp,-32 - 80203cb4: ec06 sd ra,24(sp) - 80203cb6: e822 sd s0,16(sp) - 80203cb8: e426 sd s1,8(sp) - 80203cba: e04a sd s2,0(sp) - 80203cbc: 1000 addi s0,sp,32 - 80203cbe: 84aa mv s1,a0 - 80203cc0: 892e mv s2,a1 + 80203cb4: 1101 addi sp,sp,-32 + 80203cb6: ec06 sd ra,24(sp) + 80203cb8: e822 sd s0,16(sp) + 80203cba: e426 sd s1,8(sp) + 80203cbc: e04a sd s2,0(sp) + 80203cbe: 1000 addi s0,sp,32 + 80203cc0: 84aa mv s1,a0 + 80203cc2: 892e mv s2,a1 acquire(&pi->lock); - 80203cc2: ffffd097 auipc ra,0xffffd - 80203cc6: a04080e7 jalr -1532(ra) # 802006c6 <acquire> + 80203cc4: ffffd097 auipc ra,0xffffd + 80203cc8: a02080e7 jalr -1534(ra) # 802006c6 <acquire> if(writable){ - 80203cca: 02090d63 beqz s2,80203d04 <pipeclose+0x52> + 80203ccc: 02090d63 beqz s2,80203d06 <pipeclose+0x52> pi->writeopen = 0; - 80203cce: 2204a223 sw zero,548(s1) + 80203cd0: 2204a223 sw zero,548(s1) wakeup(&pi->nread); - 80203cd2: 21848513 addi a0,s1,536 - 80203cd6: ffffe097 auipc ra,0xffffe - 80203cda: 762080e7 jalr 1890(ra) # 80202438 <wakeup> + 80203cd4: 21848513 addi a0,s1,536 + 80203cd8: ffffe097 auipc ra,0xffffe + 80203cdc: 760080e7 jalr 1888(ra) # 80202438 <wakeup> } else { pi->readopen = 0; wakeup(&pi->nwrite); } if(pi->readopen == 0 && pi->writeopen == 0){ - 80203cde: 2204b783 ld a5,544(s1) - 80203ce2: eb95 bnez a5,80203d16 <pipeclose+0x64> + 80203ce0: 2204b783 ld a5,544(s1) + 80203ce4: eb95 bnez a5,80203d18 <pipeclose+0x64> release(&pi->lock); - 80203ce4: 8526 mv a0,s1 - 80203ce6: ffffd097 auipc ra,0xffffd - 80203cea: a34080e7 jalr -1484(ra) # 8020071a <release> + 80203ce6: 8526 mv a0,s1 + 80203ce8: ffffd097 auipc ra,0xffffd + 80203cec: a32080e7 jalr -1486(ra) # 8020071a <release> kfree((char*)pi); - 80203cee: 8526 mv a0,s1 - 80203cf0: ffffc097 auipc ra,0xffffc - 80203cf4: 750080e7 jalr 1872(ra) # 80200440 <kfree> + 80203cf0: 8526 mv a0,s1 + 80203cf2: ffffc097 auipc ra,0xffffc + 80203cf6: 74e080e7 jalr 1870(ra) # 80200440 <kfree> } else release(&pi->lock); } - 80203cf8: 60e2 ld ra,24(sp) - 80203cfa: 6442 ld s0,16(sp) - 80203cfc: 64a2 ld s1,8(sp) - 80203cfe: 6902 ld s2,0(sp) - 80203d00: 6105 addi sp,sp,32 - 80203d02: 8082 ret + 80203cfa: 60e2 ld ra,24(sp) + 80203cfc: 6442 ld s0,16(sp) + 80203cfe: 64a2 ld s1,8(sp) + 80203d00: 6902 ld s2,0(sp) + 80203d02: 6105 addi sp,sp,32 + 80203d04: 8082 ret pi->readopen = 0; - 80203d04: 2204a023 sw zero,544(s1) + 80203d06: 2204a023 sw zero,544(s1) wakeup(&pi->nwrite); - 80203d08: 21c48513 addi a0,s1,540 - 80203d0c: ffffe097 auipc ra,0xffffe - 80203d10: 72c080e7 jalr 1836(ra) # 80202438 <wakeup> - 80203d14: b7e9 j 80203cde <pipeclose+0x2c> + 80203d0a: 21c48513 addi a0,s1,540 + 80203d0e: ffffe097 auipc ra,0xffffe + 80203d12: 72a080e7 jalr 1834(ra) # 80202438 <wakeup> + 80203d16: b7e9 j 80203ce0 <pipeclose+0x2c> release(&pi->lock); - 80203d16: 8526 mv a0,s1 - 80203d18: ffffd097 auipc ra,0xffffd - 80203d1c: a02080e7 jalr -1534(ra) # 8020071a <release> + 80203d18: 8526 mv a0,s1 + 80203d1a: ffffd097 auipc ra,0xffffd + 80203d1e: a00080e7 jalr -1536(ra) # 8020071a <release> } - 80203d20: bfe1 j 80203cf8 <pipeclose+0x46> + 80203d22: bfe1 j 80203cfa <pipeclose+0x46> -0000000080203d22 <pipewrite>: +0000000080203d24 <pipewrite>: int pipewrite(struct pipe *pi, uint64 addr, int n) { - 80203d22: 7159 addi sp,sp,-112 - 80203d24: f486 sd ra,104(sp) - 80203d26: f0a2 sd s0,96(sp) - 80203d28: eca6 sd s1,88(sp) - 80203d2a: e8ca sd s2,80(sp) - 80203d2c: e4ce sd s3,72(sp) - 80203d2e: e0d2 sd s4,64(sp) - 80203d30: fc56 sd s5,56(sp) - 80203d32: f85a sd s6,48(sp) - 80203d34: f45e sd s7,40(sp) - 80203d36: f062 sd s8,32(sp) - 80203d38: ec66 sd s9,24(sp) - 80203d3a: 1880 addi s0,sp,112 - 80203d3c: 84aa mv s1,a0 - 80203d3e: 8b2e mv s6,a1 - 80203d40: 8ab2 mv s5,a2 + 80203d24: 7159 addi sp,sp,-112 + 80203d26: f486 sd ra,104(sp) + 80203d28: f0a2 sd s0,96(sp) + 80203d2a: eca6 sd s1,88(sp) + 80203d2c: e8ca sd s2,80(sp) + 80203d2e: e4ce sd s3,72(sp) + 80203d30: e0d2 sd s4,64(sp) + 80203d32: fc56 sd s5,56(sp) + 80203d34: f85a sd s6,48(sp) + 80203d36: f45e sd s7,40(sp) + 80203d38: f062 sd s8,32(sp) + 80203d3a: ec66 sd s9,24(sp) + 80203d3c: 1880 addi s0,sp,112 + 80203d3e: 84aa mv s1,a0 + 80203d40: 8b2e mv s6,a1 + 80203d42: 8ab2 mv s5,a2 int i; char ch; struct proc *pr = myproc(); - 80203d42: ffffe097 auipc ra,0xffffe - 80203d46: cfa080e7 jalr -774(ra) # 80201a3c <myproc> - 80203d4a: 892a mv s2,a0 + 80203d44: ffffe097 auipc ra,0xffffe + 80203d48: cf8080e7 jalr -776(ra) # 80201a3c <myproc> + 80203d4c: 892a mv s2,a0 acquire(&pi->lock); - 80203d4c: 8526 mv a0,s1 - 80203d4e: ffffd097 auipc ra,0xffffd - 80203d52: 978080e7 jalr -1672(ra) # 802006c6 <acquire> + 80203d4e: 8526 mv a0,s1 + 80203d50: ffffd097 auipc ra,0xffffd + 80203d54: 976080e7 jalr -1674(ra) # 802006c6 <acquire> for(i = 0; i < n; i++){ - 80203d56: 09505763 blez s5,80203de4 <pipewrite+0xc2> - 80203d5a: 4b81 li s7,0 + 80203d58: 09505763 blez s5,80203de6 <pipewrite+0xc2> + 80203d5c: 4b81 li s7,0 while(pi->nwrite == pi->nread + PIPESIZE){ //DOC: pipewrite-full if(pi->readopen == 0 || pr->killed){ release(&pi->lock); return -1; } wakeup(&pi->nread); - 80203d5c: 21848a13 addi s4,s1,536 + 80203d5e: 21848a13 addi s4,s1,536 sleep(&pi->nwrite, &pi->lock); - 80203d60: 21c48993 addi s3,s1,540 + 80203d62: 21c48993 addi s3,s1,540 } // if(copyin(pr->pagetable, &ch, addr + i, 1) == -1) if(copyin2(&ch, addr + i, 1) == -1) - 80203d64: f9f40c93 addi s9,s0,-97 - 80203d68: 5c7d li s8,-1 + 80203d66: f9f40c93 addi s9,s0,-97 + 80203d6a: 5c7d li s8,-1 while(pi->nwrite == pi->nread + PIPESIZE){ //DOC: pipewrite-full - 80203d6a: 2184a783 lw a5,536(s1) - 80203d6e: 21c4a703 lw a4,540(s1) - 80203d72: 2007879b addiw a5,a5,512 - 80203d76: 02f71b63 bne a4,a5,80203dac <pipewrite+0x8a> + 80203d6c: 2184a783 lw a5,536(s1) + 80203d70: 21c4a703 lw a4,540(s1) + 80203d74: 2007879b addiw a5,a5,512 + 80203d78: 02f71b63 bne a4,a5,80203dae <pipewrite+0x8a> if(pi->readopen == 0 || pr->killed){ - 80203d7a: 2204a783 lw a5,544(s1) - 80203d7e: c3c1 beqz a5,80203dfe <pipewrite+0xdc> - 80203d80: 03092783 lw a5,48(s2) - 80203d84: efad bnez a5,80203dfe <pipewrite+0xdc> + 80203d7c: 2204a783 lw a5,544(s1) + 80203d80: c3c1 beqz a5,80203e00 <pipewrite+0xdc> + 80203d82: 03092783 lw a5,48(s2) + 80203d86: efad bnez a5,80203e00 <pipewrite+0xdc> wakeup(&pi->nread); - 80203d86: 8552 mv a0,s4 - 80203d88: ffffe097 auipc ra,0xffffe - 80203d8c: 6b0080e7 jalr 1712(ra) # 80202438 <wakeup> + 80203d88: 8552 mv a0,s4 + 80203d8a: ffffe097 auipc ra,0xffffe + 80203d8e: 6ae080e7 jalr 1710(ra) # 80202438 <wakeup> sleep(&pi->nwrite, &pi->lock); - 80203d90: 85a6 mv a1,s1 - 80203d92: 854e mv a0,s3 - 80203d94: ffffe097 auipc ra,0xffffe - 80203d98: 528080e7 jalr 1320(ra) # 802022bc <sleep> + 80203d92: 85a6 mv a1,s1 + 80203d94: 854e mv a0,s3 + 80203d96: ffffe097 auipc ra,0xffffe + 80203d9a: 526080e7 jalr 1318(ra) # 802022bc <sleep> while(pi->nwrite == pi->nread + PIPESIZE){ //DOC: pipewrite-full - 80203d9c: 2184a783 lw a5,536(s1) - 80203da0: 21c4a703 lw a4,540(s1) - 80203da4: 2007879b addiw a5,a5,512 - 80203da8: fcf709e3 beq a4,a5,80203d7a <pipewrite+0x58> + 80203d9e: 2184a783 lw a5,536(s1) + 80203da2: 21c4a703 lw a4,540(s1) + 80203da6: 2007879b addiw a5,a5,512 + 80203daa: fcf709e3 beq a4,a5,80203d7c <pipewrite+0x58> if(copyin2(&ch, addr + i, 1) == -1) - 80203dac: 4605 li a2,1 - 80203dae: 85da mv a1,s6 - 80203db0: 8566 mv a0,s9 - 80203db2: ffffd097 auipc ra,0xffffd - 80203db6: 6a0080e7 jalr 1696(ra) # 80201452 <copyin2> - 80203dba: 03850663 beq a0,s8,80203de6 <pipewrite+0xc4> + 80203dae: 4605 li a2,1 + 80203db0: 85da mv a1,s6 + 80203db2: 8566 mv a0,s9 + 80203db4: ffffd097 auipc ra,0xffffd + 80203db8: 69e080e7 jalr 1694(ra) # 80201452 <copyin2> + 80203dbc: 03850663 beq a0,s8,80203de8 <pipewrite+0xc4> break; pi->data[pi->nwrite++ % PIPESIZE] = ch; - 80203dbe: 21c4a783 lw a5,540(s1) - 80203dc2: 0017871b addiw a4,a5,1 - 80203dc6: 20e4ae23 sw a4,540(s1) - 80203dca: 1ff7f793 andi a5,a5,511 - 80203dce: 97a6 add a5,a5,s1 - 80203dd0: f9f44703 lbu a4,-97(s0) - 80203dd4: 00e78c23 sb a4,24(a5) + 80203dc0: 21c4a783 lw a5,540(s1) + 80203dc4: 0017871b addiw a4,a5,1 + 80203dc8: 20e4ae23 sw a4,540(s1) + 80203dcc: 1ff7f793 andi a5,a5,511 + 80203dd0: 97a6 add a5,a5,s1 + 80203dd2: f9f44703 lbu a4,-97(s0) + 80203dd6: 00e78c23 sb a4,24(a5) for(i = 0; i < n; i++){ - 80203dd8: 2b85 addiw s7,s7,1 - 80203dda: 0b05 addi s6,s6,1 - 80203ddc: f97a97e3 bne s5,s7,80203d6a <pipewrite+0x48> - 80203de0: 8bd6 mv s7,s5 - 80203de2: a011 j 80203de6 <pipewrite+0xc4> - 80203de4: 4b81 li s7,0 + 80203dda: 2b85 addiw s7,s7,1 + 80203ddc: 0b05 addi s6,s6,1 + 80203dde: f97a97e3 bne s5,s7,80203d6c <pipewrite+0x48> + 80203de2: 8bd6 mv s7,s5 + 80203de4: a011 j 80203de8 <pipewrite+0xc4> + 80203de6: 4b81 li s7,0 } wakeup(&pi->nread); - 80203de6: 21848513 addi a0,s1,536 - 80203dea: ffffe097 auipc ra,0xffffe - 80203dee: 64e080e7 jalr 1614(ra) # 80202438 <wakeup> + 80203de8: 21848513 addi a0,s1,536 + 80203dec: ffffe097 auipc ra,0xffffe + 80203df0: 64c080e7 jalr 1612(ra) # 80202438 <wakeup> release(&pi->lock); - 80203df2: 8526 mv a0,s1 - 80203df4: ffffd097 auipc ra,0xffffd - 80203df8: 926080e7 jalr -1754(ra) # 8020071a <release> + 80203df4: 8526 mv a0,s1 + 80203df6: ffffd097 auipc ra,0xffffd + 80203dfa: 924080e7 jalr -1756(ra) # 8020071a <release> return i; - 80203dfc: a039 j 80203e0a <pipewrite+0xe8> + 80203dfe: a039 j 80203e0c <pipewrite+0xe8> release(&pi->lock); - 80203dfe: 8526 mv a0,s1 - 80203e00: ffffd097 auipc ra,0xffffd - 80203e04: 91a080e7 jalr -1766(ra) # 8020071a <release> + 80203e00: 8526 mv a0,s1 + 80203e02: ffffd097 auipc ra,0xffffd + 80203e06: 918080e7 jalr -1768(ra) # 8020071a <release> return -1; - 80203e08: 5bfd li s7,-1 -} - 80203e0a: 855e mv a0,s7 - 80203e0c: 70a6 ld ra,104(sp) - 80203e0e: 7406 ld s0,96(sp) - 80203e10: 64e6 ld s1,88(sp) - 80203e12: 6946 ld s2,80(sp) - 80203e14: 69a6 ld s3,72(sp) - 80203e16: 6a06 ld s4,64(sp) - 80203e18: 7ae2 ld s5,56(sp) - 80203e1a: 7b42 ld s6,48(sp) - 80203e1c: 7ba2 ld s7,40(sp) - 80203e1e: 7c02 ld s8,32(sp) - 80203e20: 6ce2 ld s9,24(sp) - 80203e22: 6165 addi sp,sp,112 - 80203e24: 8082 ret - -0000000080203e26 <piperead>: + 80203e0a: 5bfd li s7,-1 +} + 80203e0c: 855e mv a0,s7 + 80203e0e: 70a6 ld ra,104(sp) + 80203e10: 7406 ld s0,96(sp) + 80203e12: 64e6 ld s1,88(sp) + 80203e14: 6946 ld s2,80(sp) + 80203e16: 69a6 ld s3,72(sp) + 80203e18: 6a06 ld s4,64(sp) + 80203e1a: 7ae2 ld s5,56(sp) + 80203e1c: 7b42 ld s6,48(sp) + 80203e1e: 7ba2 ld s7,40(sp) + 80203e20: 7c02 ld s8,32(sp) + 80203e22: 6ce2 ld s9,24(sp) + 80203e24: 6165 addi sp,sp,112 + 80203e26: 8082 ret + +0000000080203e28 <piperead>: int piperead(struct pipe *pi, uint64 addr, int n) { - 80203e26: 715d addi sp,sp,-80 - 80203e28: e486 sd ra,72(sp) - 80203e2a: e0a2 sd s0,64(sp) - 80203e2c: fc26 sd s1,56(sp) - 80203e2e: f84a sd s2,48(sp) - 80203e30: f44e sd s3,40(sp) - 80203e32: f052 sd s4,32(sp) - 80203e34: ec56 sd s5,24(sp) - 80203e36: e85a sd s6,16(sp) - 80203e38: 0880 addi s0,sp,80 - 80203e3a: 84aa mv s1,a0 - 80203e3c: 892e mv s2,a1 - 80203e3e: 8a32 mv s4,a2 + 80203e28: 715d addi sp,sp,-80 + 80203e2a: e486 sd ra,72(sp) + 80203e2c: e0a2 sd s0,64(sp) + 80203e2e: fc26 sd s1,56(sp) + 80203e30: f84a sd s2,48(sp) + 80203e32: f44e sd s3,40(sp) + 80203e34: f052 sd s4,32(sp) + 80203e36: ec56 sd s5,24(sp) + 80203e38: e85a sd s6,16(sp) + 80203e3a: 0880 addi s0,sp,80 + 80203e3c: 84aa mv s1,a0 + 80203e3e: 892e mv s2,a1 + 80203e40: 8a32 mv s4,a2 int i; struct proc *pr = myproc(); - 80203e40: ffffe097 auipc ra,0xffffe - 80203e44: bfc080e7 jalr -1028(ra) # 80201a3c <myproc> - 80203e48: 89aa mv s3,a0 + 80203e42: ffffe097 auipc ra,0xffffe + 80203e46: bfa080e7 jalr -1030(ra) # 80201a3c <myproc> + 80203e4a: 89aa mv s3,a0 char ch; acquire(&pi->lock); - 80203e4a: 8526 mv a0,s1 - 80203e4c: ffffd097 auipc ra,0xffffd - 80203e50: 87a080e7 jalr -1926(ra) # 802006c6 <acquire> + 80203e4c: 8526 mv a0,s1 + 80203e4e: ffffd097 auipc ra,0xffffd + 80203e52: 878080e7 jalr -1928(ra) # 802006c6 <acquire> while(pi->nread == pi->nwrite && pi->writeopen){ //DOC: pipe-empty - 80203e54: 2184a703 lw a4,536(s1) - 80203e58: 21c4a783 lw a5,540(s1) + 80203e56: 2184a703 lw a4,536(s1) + 80203e5a: 21c4a783 lw a5,540(s1) if(pr->killed){ release(&pi->lock); return -1; } sleep(&pi->nread, &pi->lock); //DOC: piperead-sleep - 80203e5c: 21848a93 addi s5,s1,536 + 80203e5e: 21848a93 addi s5,s1,536 while(pi->nread == pi->nwrite && pi->writeopen){ //DOC: pipe-empty - 80203e60: 02f71463 bne a4,a5,80203e88 <piperead+0x62> - 80203e64: 2244a783 lw a5,548(s1) - 80203e68: c385 beqz a5,80203e88 <piperead+0x62> + 80203e62: 02f71463 bne a4,a5,80203e8a <piperead+0x62> + 80203e66: 2244a783 lw a5,548(s1) + 80203e6a: c385 beqz a5,80203e8a <piperead+0x62> if(pr->killed){ - 80203e6a: 0309a783 lw a5,48(s3) - 80203e6e: ebc1 bnez a5,80203efe <piperead+0xd8> + 80203e6c: 0309a783 lw a5,48(s3) + 80203e70: ebc1 bnez a5,80203f00 <piperead+0xd8> sleep(&pi->nread, &pi->lock); //DOC: piperead-sleep - 80203e70: 85a6 mv a1,s1 - 80203e72: 8556 mv a0,s5 - 80203e74: ffffe097 auipc ra,0xffffe - 80203e78: 448080e7 jalr 1096(ra) # 802022bc <sleep> + 80203e72: 85a6 mv a1,s1 + 80203e74: 8556 mv a0,s5 + 80203e76: ffffe097 auipc ra,0xffffe + 80203e7a: 446080e7 jalr 1094(ra) # 802022bc <sleep> while(pi->nread == pi->nwrite && pi->writeopen){ //DOC: pipe-empty - 80203e7c: 2184a703 lw a4,536(s1) - 80203e80: 21c4a783 lw a5,540(s1) - 80203e84: fef700e3 beq a4,a5,80203e64 <piperead+0x3e> + 80203e7e: 2184a703 lw a4,536(s1) + 80203e82: 21c4a783 lw a5,540(s1) + 80203e86: fef700e3 beq a4,a5,80203e66 <piperead+0x3e> } for(i = 0; i < n; i++){ //DOC: piperead-copy - 80203e88: 4981 li s3,0 + 80203e8a: 4981 li s3,0 if(pi->nread == pi->nwrite) break; ch = pi->data[pi->nread++ % PIPESIZE]; // if(copyout(pr->pagetable, addr + i, &ch, 1) == -1) if(copyout2(addr + i, &ch, 1) == -1) - 80203e8a: fbf40b13 addi s6,s0,-65 - 80203e8e: 5afd li s5,-1 + 80203e8c: fbf40b13 addi s6,s0,-65 + 80203e90: 5afd li s5,-1 for(i = 0; i < n; i++){ //DOC: piperead-copy - 80203e90: 05405163 blez s4,80203ed2 <piperead+0xac> + 80203e92: 05405163 blez s4,80203ed4 <piperead+0xac> if(pi->nread == pi->nwrite) - 80203e94: 2184a783 lw a5,536(s1) - 80203e98: 21c4a703 lw a4,540(s1) - 80203e9c: 02f70b63 beq a4,a5,80203ed2 <piperead+0xac> + 80203e96: 2184a783 lw a5,536(s1) + 80203e9a: 21c4a703 lw a4,540(s1) + 80203e9e: 02f70b63 beq a4,a5,80203ed4 <piperead+0xac> ch = pi->data[pi->nread++ % PIPESIZE]; - 80203ea0: 0017871b addiw a4,a5,1 - 80203ea4: 20e4ac23 sw a4,536(s1) - 80203ea8: 1ff7f793 andi a5,a5,511 - 80203eac: 97a6 add a5,a5,s1 - 80203eae: 0187c783 lbu a5,24(a5) - 80203eb2: faf40fa3 sb a5,-65(s0) + 80203ea2: 0017871b addiw a4,a5,1 + 80203ea6: 20e4ac23 sw a4,536(s1) + 80203eaa: 1ff7f793 andi a5,a5,511 + 80203eae: 97a6 add a5,a5,s1 + 80203eb0: 0187c783 lbu a5,24(a5) + 80203eb4: faf40fa3 sb a5,-65(s0) if(copyout2(addr + i, &ch, 1) == -1) - 80203eb6: 4605 li a2,1 - 80203eb8: 85da mv a1,s6 - 80203eba: 854a mv a0,s2 - 80203ebc: ffffd097 auipc ra,0xffffd - 80203ec0: 4b6080e7 jalr 1206(ra) # 80201372 <copyout2> - 80203ec4: 01550763 beq a0,s5,80203ed2 <piperead+0xac> + 80203eb8: 4605 li a2,1 + 80203eba: 85da mv a1,s6 + 80203ebc: 854a mv a0,s2 + 80203ebe: ffffd097 auipc ra,0xffffd + 80203ec2: 4b4080e7 jalr 1204(ra) # 80201372 <copyout2> + 80203ec6: 01550763 beq a0,s5,80203ed4 <piperead+0xac> for(i = 0; i < n; i++){ //DOC: piperead-copy - 80203ec8: 2985 addiw s3,s3,1 - 80203eca: 0905 addi s2,s2,1 - 80203ecc: fd3a14e3 bne s4,s3,80203e94 <piperead+0x6e> - 80203ed0: 89d2 mv s3,s4 + 80203eca: 2985 addiw s3,s3,1 + 80203ecc: 0905 addi s2,s2,1 + 80203ece: fd3a14e3 bne s4,s3,80203e96 <piperead+0x6e> + 80203ed2: 89d2 mv s3,s4 break; } wakeup(&pi->nwrite); //DOC: piperead-wakeup - 80203ed2: 21c48513 addi a0,s1,540 - 80203ed6: ffffe097 auipc ra,0xffffe - 80203eda: 562080e7 jalr 1378(ra) # 80202438 <wakeup> + 80203ed4: 21c48513 addi a0,s1,540 + 80203ed8: ffffe097 auipc ra,0xffffe + 80203edc: 560080e7 jalr 1376(ra) # 80202438 <wakeup> release(&pi->lock); - 80203ede: 8526 mv a0,s1 - 80203ee0: ffffd097 auipc ra,0xffffd - 80203ee4: 83a080e7 jalr -1990(ra) # 8020071a <release> + 80203ee0: 8526 mv a0,s1 + 80203ee2: ffffd097 auipc ra,0xffffd + 80203ee6: 838080e7 jalr -1992(ra) # 8020071a <release> return i; } - 80203ee8: 854e mv a0,s3 - 80203eea: 60a6 ld ra,72(sp) - 80203eec: 6406 ld s0,64(sp) - 80203eee: 74e2 ld s1,56(sp) - 80203ef0: 7942 ld s2,48(sp) - 80203ef2: 79a2 ld s3,40(sp) - 80203ef4: 7a02 ld s4,32(sp) - 80203ef6: 6ae2 ld s5,24(sp) - 80203ef8: 6b42 ld s6,16(sp) - 80203efa: 6161 addi sp,sp,80 - 80203efc: 8082 ret + 80203eea: 854e mv a0,s3 + 80203eec: 60a6 ld ra,72(sp) + 80203eee: 6406 ld s0,64(sp) + 80203ef0: 74e2 ld s1,56(sp) + 80203ef2: 7942 ld s2,48(sp) + 80203ef4: 79a2 ld s3,40(sp) + 80203ef6: 7a02 ld s4,32(sp) + 80203ef8: 6ae2 ld s5,24(sp) + 80203efa: 6b42 ld s6,16(sp) + 80203efc: 6161 addi sp,sp,80 + 80203efe: 8082 ret release(&pi->lock); - 80203efe: 8526 mv a0,s1 - 80203f00: ffffd097 auipc ra,0xffffd - 80203f04: 81a080e7 jalr -2022(ra) # 8020071a <release> + 80203f00: 8526 mv a0,s1 + 80203f02: ffffd097 auipc ra,0xffffd + 80203f06: 818080e7 jalr -2024(ra) # 8020071a <release> return -1; - 80203f08: 59fd li s3,-1 - 80203f0a: bff9 j 80203ee8 <piperead+0xc2> + 80203f0a: 59fd li s3,-1 + 80203f0c: bff9 j 80203eea <piperead+0xc2> -0000000080203f0c <exec>: +0000000080203f0e <exec>: return 0; } int exec(char *path, char **argv) { - 80203f0c: dd010113 addi sp,sp,-560 - 80203f10: 22113423 sd ra,552(sp) - 80203f14: 22813023 sd s0,544(sp) - 80203f18: 20913c23 sd s1,536(sp) - 80203f1c: 21213823 sd s2,528(sp) - 80203f20: 21313423 sd s3,520(sp) - 80203f24: 21413023 sd s4,512(sp) - 80203f28: ffd6 sd s5,504(sp) - 80203f2a: fbda sd s6,496(sp) - 80203f2c: f7de sd s7,488(sp) - 80203f2e: f3e2 sd s8,480(sp) - 80203f30: efe6 sd s9,472(sp) - 80203f32: ebea sd s10,464(sp) - 80203f34: e7ee sd s11,456(sp) - 80203f36: 1c00 addi s0,sp,560 - 80203f38: 892a mv s2,a0 - 80203f3a: dca43c23 sd a0,-552(s0) - 80203f3e: deb43423 sd a1,-536(s0) + 80203f0e: dd010113 addi sp,sp,-560 + 80203f12: 22113423 sd ra,552(sp) + 80203f16: 22813023 sd s0,544(sp) + 80203f1a: 20913c23 sd s1,536(sp) + 80203f1e: 21213823 sd s2,528(sp) + 80203f22: 21313423 sd s3,520(sp) + 80203f26: 21413023 sd s4,512(sp) + 80203f2a: ffd6 sd s5,504(sp) + 80203f2c: fbda sd s6,496(sp) + 80203f2e: f7de sd s7,488(sp) + 80203f30: f3e2 sd s8,480(sp) + 80203f32: efe6 sd s9,472(sp) + 80203f34: ebea sd s10,464(sp) + 80203f36: e7ee sd s11,456(sp) + 80203f38: 1c00 addi s0,sp,560 + 80203f3a: 892a mv s2,a0 + 80203f3c: dca43c23 sd a0,-552(s0) + 80203f40: deb43423 sd a1,-536(s0) struct elfhdr elf; struct dirent *ep; struct proghdr ph; pagetable_t pagetable = 0, oldpagetable; pagetable_t kpagetable = 0, oldkpagetable; struct proc *p = myproc(); - 80203f42: ffffe097 auipc ra,0xffffe - 80203f46: afa080e7 jalr -1286(ra) # 80201a3c <myproc> - 80203f4a: 84aa mv s1,a0 + 80203f44: ffffe097 auipc ra,0xffffe + 80203f48: af8080e7 jalr -1288(ra) # 80201a3c <myproc> + 80203f4c: 84aa mv s1,a0 // Make a copy of p->kpt without old user space, // but with the same kstack we are using now, which can't be changed if ((kpagetable = (pagetable_t)kalloc()) == NULL) { - 80203f4c: ffffc097 auipc ra,0xffffc - 80203f50: 60e080e7 jalr 1550(ra) # 8020055a <kalloc> - 80203f54: 2a050863 beqz a0,80204204 <exec+0x2f8> - 80203f58: 8b2a mv s6,a0 + 80203f4e: ffffc097 auipc ra,0xffffc + 80203f52: 60c080e7 jalr 1548(ra) # 8020055a <kalloc> + 80203f56: 2a050863 beqz a0,80204206 <exec+0x2f8> + 80203f5a: 8b2a mv s6,a0 return -1; } memmove(kpagetable, p->kpagetable, PGSIZE); - 80203f5a: 6605 lui a2,0x1 - 80203f5c: 6cac ld a1,88(s1) - 80203f5e: ffffd097 auipc ra,0xffffd - 80203f62: 860080e7 jalr -1952(ra) # 802007be <memmove> + 80203f5c: 6605 lui a2,0x1 + 80203f5e: 6cac ld a1,88(s1) + 80203f60: ffffd097 auipc ra,0xffffd + 80203f64: 85e080e7 jalr -1954(ra) # 802007be <memmove> for (int i = 0; i < PX(2, MAXUVA); i++) { kpagetable[i] = 0; - 80203f66: 000b3023 sd zero,0(s6) - 80203f6a: 000b3423 sd zero,8(s6) + 80203f68: 000b3023 sd zero,0(s6) + 80203f6c: 000b3423 sd zero,8(s6) } if((ep = ename(path)) == NULL) { - 80203f6e: 854a mv a0,s2 - 80203f70: 00003097 auipc ra,0x3 - 80203f74: a46080e7 jalr -1466(ra) # 802069b6 <ename> - 80203f78: 8a2a mv s4,a0 - 80203f7a: 3a050e63 beqz a0,80204336 <exec+0x42a> + 80203f70: 854a mv a0,s2 + 80203f72: 00003097 auipc ra,0x3 + 80203f76: a54080e7 jalr -1452(ra) # 802069c6 <ename> + 80203f7a: 8a2a mv s4,a0 + 80203f7c: 3a050e63 beqz a0,80204338 <exec+0x42a> #ifdef DEBUG printf("[exec] %s not found\n", path); #endif goto bad; } elock(ep); - 80203f7e: 00002097 auipc ra,0x2 - 80203f82: 290080e7 jalr 656(ra) # 8020620e <elock> + 80203f80: 00002097 auipc ra,0x2 + 80203f84: 29e080e7 jalr 670(ra) # 8020621e <elock> // Check ELF header if(eread(ep, 0, (uint64) &elf, 0, sizeof(elf)) != sizeof(elf)) - 80203f86: 04000713 li a4,64 - 80203f8a: 4681 li a3,0 - 80203f8c: e4840613 addi a2,s0,-440 - 80203f90: 4581 li a1,0 - 80203f92: 8552 mv a0,s4 - 80203f94: 00002097 auipc ra,0x2 - 80203f98: 976080e7 jalr -1674(ra) # 8020590a <eread> - 80203f9c: 04000793 li a5,64 - 80203fa0: 00f51a63 bne a0,a5,80203fb4 <exec+0xa8> + 80203f88: 04000713 li a4,64 + 80203f8c: 4681 li a3,0 + 80203f8e: e4840613 addi a2,s0,-440 + 80203f92: 4581 li a1,0 + 80203f94: 8552 mv a0,s4 + 80203f96: 00002097 auipc ra,0x2 + 80203f9a: 984080e7 jalr -1660(ra) # 8020591a <eread> + 80203f9e: 04000793 li a5,64 + 80203fa2: 00f51a63 bne a0,a5,80203fb6 <exec+0xa8> goto bad; if(elf.magic != ELF_MAGIC) - 80203fa4: e4842703 lw a4,-440(s0) - 80203fa8: 464c47b7 lui a5,0x464c4 - 80203fac: 57f78793 addi a5,a5,1407 # 464c457f <_entry-0x39d3ba81> - 80203fb0: 00f70963 beq a4,a5,80203fc2 <exec+0xb6> + 80203fa6: e4842703 lw a4,-440(s0) + 80203faa: 464c47b7 lui a5,0x464c4 + 80203fae: 57f78793 addi a5,a5,1407 # 464c457f <_entry-0x39d3ba81> + 80203fb2: 00f70963 beq a4,a5,80203fc4 <exec+0xb6> printf("[exec] reach bad\n"); #endif if(pagetable) proc_freepagetable(pagetable, sz); if(kpagetable) kvmfree(kpagetable, 0); - 80203fb4: 4581 li a1,0 - 80203fb6: 855a mv a0,s6 - 80203fb8: ffffd097 auipc ra,0xffffd - 80203fbc: 6ba080e7 jalr 1722(ra) # 80201672 <kvmfree> + 80203fb6: 4581 li a1,0 + 80203fb8: 855a mv a0,s6 + 80203fba: ffffd097 auipc ra,0xffffd + 80203fbe: 6b8080e7 jalr 1720(ra) # 80201672 <kvmfree> if(ep){ - 80203fc0: a4bd j 8020422e <exec+0x322> + 80203fc2: a4bd j 80204230 <exec+0x322> if((pagetable = proc_pagetable(p)) == NULL) - 80203fc2: 8526 mv a0,s1 - 80203fc4: ffffe097 auipc ra,0xffffe - 80203fc8: b5c080e7 jalr -1188(ra) # 80201b20 <proc_pagetable> - 80203fcc: e0a43423 sd a0,-504(s0) - 80203fd0: d175 beqz a0,80203fb4 <exec+0xa8> + 80203fc4: 8526 mv a0,s1 + 80203fc6: ffffe097 auipc ra,0xffffe + 80203fca: b5a080e7 jalr -1190(ra) # 80201b20 <proc_pagetable> + 80203fce: e0a43423 sd a0,-504(s0) + 80203fd2: d175 beqz a0,80203fb6 <exec+0xa8> for(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof(ph)){ - 80203fd2: e6842783 lw a5,-408(s0) - 80203fd6: e8045703 lhu a4,-384(s0) - 80203fda: cb3d beqz a4,80204050 <exec+0x144> + 80203fd4: e6842783 lw a5,-408(s0) + 80203fd8: e8045703 lhu a4,-384(s0) + 80203fdc: cb3d beqz a4,80204052 <exec+0x144> uint64 argc, sz = 0, sp, ustack[MAXARG+1], stackbase; - 80203fdc: 4481 li s1,0 + 80203fde: 4481 li s1,0 for(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof(ph)){ - 80203fde: e0043023 sd zero,-512(s0) + 80203fe0: e0043023 sd zero,-512(s0) if(eread(ep, 0, (uint64)&ph, off, sizeof(ph)) != sizeof(ph)) - 80203fe2: e1040713 addi a4,s0,-496 - 80203fe6: dee43023 sd a4,-544(s0) + 80203fe4: e1040713 addi a4,s0,-496 + 80203fe8: dee43023 sd a4,-544(s0) if(ph.vaddr % PGSIZE != 0) - 80203fea: 6a85 lui s5,0x1 - 80203fec: fffa8713 addi a4,s5,-1 # fff <_entry-0x801ff001> - 80203ff0: dce43823 sd a4,-560(s0) + 80203fec: 6a85 lui s5,0x1 + 80203fee: fffa8713 addi a4,s5,-1 # fff <_entry-0x801ff001> + 80203ff2: dce43823 sd a4,-560(s0) for(i = 0; i < sz; i += PGSIZE){ - 80203ff4: 6d85 lui s11,0x1 - 80203ff6: 7d7d lui s10,0xfffff - 80203ff8: a4c9 j 802042ba <exec+0x3ae> + 80203ff6: 6d85 lui s11,0x1 + 80203ff8: 7d7d lui s10,0xfffff + 80203ffa: a4c9 j 802042bc <exec+0x3ae> panic("loadseg: address should exist"); - 80203ffa: 00006517 auipc a0,0x6 - 80203ffe: b6e50513 addi a0,a0,-1170 # 80209b68 <digits+0x7e8> - 80204002: ffffc097 auipc ra,0xffffc - 80204006: 142080e7 jalr 322(ra) # 80200144 <panic> + 80203ffc: 00006517 auipc a0,0x6 + 80204000: b7450513 addi a0,a0,-1164 # 80209b70 <digits+0x7f0> + 80204004: ffffc097 auipc ra,0xffffc + 80204008: 140080e7 jalr 320(ra) # 80200144 <panic> if(eread(ep, 0, (uint64)pa, offset+i, n) != n) - 8020400a: 874a mv a4,s2 - 8020400c: 009c86bb addw a3,s9,s1 - 80204010: 4581 li a1,0 - 80204012: 8552 mv a0,s4 - 80204014: 00002097 auipc ra,0x2 - 80204018: 8f6080e7 jalr -1802(ra) # 8020590a <eread> - 8020401c: 2501 sext.w a0,a0 - 8020401e: 1ea91763 bne s2,a0,8020420c <exec+0x300> + 8020400c: 874a mv a4,s2 + 8020400e: 009c86bb addw a3,s9,s1 + 80204012: 4581 li a1,0 + 80204014: 8552 mv a0,s4 + 80204016: 00002097 auipc ra,0x2 + 8020401a: 904080e7 jalr -1788(ra) # 8020591a <eread> + 8020401e: 2501 sext.w a0,a0 + 80204020: 1ea91763 bne s2,a0,8020420e <exec+0x300> for(i = 0; i < sz; i += PGSIZE){ - 80204022: 009d84bb addw s1,s11,s1 - 80204026: 013d09bb addw s3,s10,s3 - 8020402a: 2774f863 bgeu s1,s7,8020429a <exec+0x38e> + 80204024: 009d84bb addw s1,s11,s1 + 80204028: 013d09bb addw s3,s10,s3 + 8020402c: 2774f863 bgeu s1,s7,8020429c <exec+0x38e> pa = walkaddr(pagetable, va + i); - 8020402e: 02049593 slli a1,s1,0x20 - 80204032: 9181 srli a1,a1,0x20 - 80204034: 95e2 add a1,a1,s8 - 80204036: e0843503 ld a0,-504(s0) - 8020403a: ffffd097 auipc ra,0xffffd - 8020403e: b74080e7 jalr -1164(ra) # 80200bae <walkaddr> - 80204042: 862a mv a2,a0 + 80204030: 02049593 slli a1,s1,0x20 + 80204034: 9181 srli a1,a1,0x20 + 80204036: 95e2 add a1,a1,s8 + 80204038: e0843503 ld a0,-504(s0) + 8020403c: ffffd097 auipc ra,0xffffd + 80204040: b72080e7 jalr -1166(ra) # 80200bae <walkaddr> + 80204044: 862a mv a2,a0 if(pa == NULL) - 80204044: d95d beqz a0,80203ffa <exec+0xee> + 80204046: d95d beqz a0,80203ffc <exec+0xee> n = PGSIZE; - 80204046: 8956 mv s2,s5 + 80204048: 8956 mv s2,s5 if(sz - i < PGSIZE) - 80204048: fd59f1e3 bgeu s3,s5,8020400a <exec+0xfe> + 8020404a: fd59f1e3 bgeu s3,s5,8020400c <exec+0xfe> n = sz - i; - 8020404c: 894e mv s2,s3 - 8020404e: bf75 j 8020400a <exec+0xfe> + 8020404e: 894e mv s2,s3 + 80204050: bf75 j 8020400c <exec+0xfe> uint64 argc, sz = 0, sp, ustack[MAXARG+1], stackbase; - 80204050: 4481 li s1,0 + 80204052: 4481 li s1,0 eunlock(ep); - 80204052: 8552 mv a0,s4 - 80204054: 00002097 auipc ra,0x2 - 80204058: 1f0080e7 jalr 496(ra) # 80206244 <eunlock> + 80204054: 8552 mv a0,s4 + 80204056: 00002097 auipc ra,0x2 + 8020405a: 1fe080e7 jalr 510(ra) # 80206254 <eunlock> eput(ep); - 8020405c: 8552 mv a0,s4 - 8020405e: 00002097 auipc ra,0x2 - 80204062: 234080e7 jalr 564(ra) # 80206292 <eput> + 8020405e: 8552 mv a0,s4 + 80204060: 00002097 auipc ra,0x2 + 80204064: 242080e7 jalr 578(ra) # 802062a2 <eput> p = myproc(); - 80204066: ffffe097 auipc ra,0xffffe - 8020406a: 9d6080e7 jalr -1578(ra) # 80201a3c <myproc> - 8020406e: 8aaa mv s5,a0 + 80204068: ffffe097 auipc ra,0xffffe + 8020406c: 9d4080e7 jalr -1580(ra) # 80201a3c <myproc> + 80204070: 8aaa mv s5,a0 uint64 oldsz = p->sz; - 80204070: 04853d03 ld s10,72(a0) + 80204072: 04853d03 ld s10,72(a0) sz = PGROUNDUP(sz); - 80204074: 6785 lui a5,0x1 - 80204076: 17fd addi a5,a5,-1 # fff <_entry-0x801ff001> - 80204078: 97a6 add a5,a5,s1 - 8020407a: 777d lui a4,0xfffff - 8020407c: 8ff9 and a5,a5,a4 - 8020407e: def43823 sd a5,-528(s0) + 80204076: 6785 lui a5,0x1 + 80204078: 17fd addi a5,a5,-1 # fff <_entry-0x801ff001> + 8020407a: 97a6 add a5,a5,s1 + 8020407c: 777d lui a4,0xfffff + 8020407e: 8ff9 and a5,a5,a4 + 80204080: def43823 sd a5,-528(s0) if((sz1 = uvmalloc(pagetable, kpagetable, sz, sz + 2*PGSIZE)) == 0) - 80204082: 6689 lui a3,0x2 - 80204084: 96be add a3,a3,a5 - 80204086: 863e mv a2,a5 - 80204088: 85da mv a1,s6 - 8020408a: e0843483 ld s1,-504(s0) - 8020408e: 8526 mv a0,s1 - 80204090: ffffd097 auipc ra,0xffffd - 80204094: f7a080e7 jalr -134(ra) # 8020100a <uvmalloc> - 80204098: 8caa mv s9,a0 + 80204084: 6689 lui a3,0x2 + 80204086: 96be add a3,a3,a5 + 80204088: 863e mv a2,a5 + 8020408a: 85da mv a1,s6 + 8020408c: e0843483 ld s1,-504(s0) + 80204090: 8526 mv a0,s1 + 80204092: ffffd097 auipc ra,0xffffd + 80204096: f78080e7 jalr -136(ra) # 8020100a <uvmalloc> + 8020409a: 8caa mv s9,a0 ep = 0; - 8020409a: 4a01 li s4,0 + 8020409c: 4a01 li s4,0 if((sz1 = uvmalloc(pagetable, kpagetable, sz, sz + 2*PGSIZE)) == 0) - 8020409c: 16050863 beqz a0,8020420c <exec+0x300> + 8020409e: 16050863 beqz a0,8020420e <exec+0x300> uvmclear(pagetable, sz-2*PGSIZE); - 802040a0: 75f9 lui a1,0xffffe - 802040a2: 95aa add a1,a1,a0 - 802040a4: 8526 mv a0,s1 - 802040a6: ffffd097 auipc ra,0xffffd - 802040aa: 20e080e7 jalr 526(ra) # 802012b4 <uvmclear> + 802040a2: 75f9 lui a1,0xffffe + 802040a4: 95aa add a1,a1,a0 + 802040a6: 8526 mv a0,s1 + 802040a8: ffffd097 auipc ra,0xffffd + 802040ac: 20c080e7 jalr 524(ra) # 802012b4 <uvmclear> stackbase = sp - PGSIZE; - 802040ae: 7bfd lui s7,0xfffff - 802040b0: 9be6 add s7,s7,s9 + 802040b0: 7bfd lui s7,0xfffff + 802040b2: 9be6 add s7,s7,s9 for(argc = 0; argv[argc]; argc++) { - 802040b2: de843783 ld a5,-536(s0) - 802040b6: 6388 ld a0,0(a5) - 802040b8: c92d beqz a0,8020412a <exec+0x21e> - 802040ba: e8840993 addi s3,s0,-376 - 802040be: f8840c13 addi s8,s0,-120 + 802040b4: de843783 ld a5,-536(s0) + 802040b8: 6388 ld a0,0(a5) + 802040ba: c92d beqz a0,8020412c <exec+0x21e> + 802040bc: e8840993 addi s3,s0,-376 + 802040c0: f8840c13 addi s8,s0,-120 sp = sz; - 802040c2: 8966 mv s2,s9 + 802040c4: 8966 mv s2,s9 for(argc = 0; argv[argc]; argc++) { - 802040c4: 4481 li s1,0 + 802040c6: 4481 li s1,0 sp -= strlen(argv[argc]) + 1; - 802040c6: ffffd097 auipc ra,0xffffd - 802040ca: 820080e7 jalr -2016(ra) # 802008e6 <strlen> - 802040ce: 0015079b addiw a5,a0,1 - 802040d2: 40f907b3 sub a5,s2,a5 + 802040c8: ffffd097 auipc ra,0xffffd + 802040cc: 81e080e7 jalr -2018(ra) # 802008e6 <strlen> + 802040d0: 0015079b addiw a5,a0,1 + 802040d4: 40f907b3 sub a5,s2,a5 sp -= sp % 16; // riscv sp must be 16-byte aligned - 802040d6: ff07f913 andi s2,a5,-16 + 802040d8: ff07f913 andi s2,a5,-16 if(sp < stackbase) - 802040da: 1b796463 bltu s2,s7,80204282 <exec+0x376> + 802040dc: 1b796463 bltu s2,s7,80204284 <exec+0x376> if(copyout(pagetable, sp, argv[argc], strlen(argv[argc]) + 1) < 0) - 802040de: de843d83 ld s11,-536(s0) - 802040e2: 000dba03 ld s4,0(s11) # 1000 <_entry-0x801ff000> - 802040e6: 8552 mv a0,s4 - 802040e8: ffffc097 auipc ra,0xffffc - 802040ec: 7fe080e7 jalr 2046(ra) # 802008e6 <strlen> - 802040f0: 0015069b addiw a3,a0,1 - 802040f4: 8652 mv a2,s4 - 802040f6: 85ca mv a1,s2 - 802040f8: e0843503 ld a0,-504(s0) - 802040fc: ffffd097 auipc ra,0xffffd - 80204100: 1ea080e7 jalr 490(ra) # 802012e6 <copyout> - 80204104: 18054363 bltz a0,8020428a <exec+0x37e> + 802040e0: de843d83 ld s11,-536(s0) + 802040e4: 000dba03 ld s4,0(s11) # 1000 <_entry-0x801ff000> + 802040e8: 8552 mv a0,s4 + 802040ea: ffffc097 auipc ra,0xffffc + 802040ee: 7fc080e7 jalr 2044(ra) # 802008e6 <strlen> + 802040f2: 0015069b addiw a3,a0,1 + 802040f6: 8652 mv a2,s4 + 802040f8: 85ca mv a1,s2 + 802040fa: e0843503 ld a0,-504(s0) + 802040fe: ffffd097 auipc ra,0xffffd + 80204102: 1e8080e7 jalr 488(ra) # 802012e6 <copyout> + 80204106: 18054363 bltz a0,8020428c <exec+0x37e> ustack[argc] = sp; - 80204108: 0129b023 sd s2,0(s3) + 8020410a: 0129b023 sd s2,0(s3) for(argc = 0; argv[argc]; argc++) { - 8020410c: 0485 addi s1,s1,1 - 8020410e: 008d8793 addi a5,s11,8 - 80204112: def43423 sd a5,-536(s0) - 80204116: 008db503 ld a0,8(s11) - 8020411a: c911 beqz a0,8020412e <exec+0x222> + 8020410e: 0485 addi s1,s1,1 + 80204110: 008d8793 addi a5,s11,8 + 80204114: def43423 sd a5,-536(s0) + 80204118: 008db503 ld a0,8(s11) + 8020411c: c911 beqz a0,80204130 <exec+0x222> if(argc >= MAXARG) - 8020411c: 09a1 addi s3,s3,8 - 8020411e: fb3c14e3 bne s8,s3,802040c6 <exec+0x1ba> + 8020411e: 09a1 addi s3,s3,8 + 80204120: fb3c14e3 bne s8,s3,802040c8 <exec+0x1ba> sz = sz1; - 80204122: df943823 sd s9,-528(s0) + 80204124: df943823 sd s9,-528(s0) ep = 0; - 80204126: 4a01 li s4,0 - 80204128: a0d5 j 8020420c <exec+0x300> + 80204128: 4a01 li s4,0 + 8020412a: a0d5 j 8020420e <exec+0x300> sp = sz; - 8020412a: 8966 mv s2,s9 + 8020412c: 8966 mv s2,s9 for(argc = 0; argv[argc]; argc++) { - 8020412c: 4481 li s1,0 + 8020412e: 4481 li s1,0 ustack[argc] = 0; - 8020412e: 00349793 slli a5,s1,0x3 - 80204132: f9078793 addi a5,a5,-112 - 80204136: 97a2 add a5,a5,s0 - 80204138: ee07bc23 sd zero,-264(a5) + 80204130: 00349793 slli a5,s1,0x3 + 80204134: f9078793 addi a5,a5,-112 + 80204138: 97a2 add a5,a5,s0 + 8020413a: ee07bc23 sd zero,-264(a5) sp -= (argc+1) * sizeof(uint64); - 8020413c: 00148693 addi a3,s1,1 - 80204140: 068e slli a3,a3,0x3 - 80204142: 40d90933 sub s2,s2,a3 + 8020413e: 00148693 addi a3,s1,1 + 80204142: 068e slli a3,a3,0x3 + 80204144: 40d90933 sub s2,s2,a3 sp -= sp % 16; - 80204146: ff097913 andi s2,s2,-16 + 80204148: ff097913 andi s2,s2,-16 if(sp < stackbase) - 8020414a: 01797663 bgeu s2,s7,80204156 <exec+0x24a> + 8020414c: 01797663 bgeu s2,s7,80204158 <exec+0x24a> sz = sz1; - 8020414e: df943823 sd s9,-528(s0) + 80204150: df943823 sd s9,-528(s0) ep = 0; - 80204152: 4a01 li s4,0 - 80204154: a865 j 8020420c <exec+0x300> + 80204154: 4a01 li s4,0 + 80204156: a865 j 8020420e <exec+0x300> if(copyout(pagetable, sp, (char *)ustack, (argc+1)*sizeof(uint64)) < 0) - 80204156: e8840613 addi a2,s0,-376 - 8020415a: 85ca mv a1,s2 - 8020415c: e0843503 ld a0,-504(s0) - 80204160: ffffd097 auipc ra,0xffffd - 80204164: 186080e7 jalr 390(ra) # 802012e6 <copyout> - 80204168: 12054563 bltz a0,80204292 <exec+0x386> + 80204158: e8840613 addi a2,s0,-376 + 8020415c: 85ca mv a1,s2 + 8020415e: e0843503 ld a0,-504(s0) + 80204162: ffffd097 auipc ra,0xffffd + 80204166: 184080e7 jalr 388(ra) # 802012e6 <copyout> + 8020416a: 12054563 bltz a0,80204294 <exec+0x386> p->trapframe->a1 = sp; - 8020416c: 060ab783 ld a5,96(s5) - 80204170: 0727bc23 sd s2,120(a5) + 8020416e: 060ab783 ld a5,96(s5) + 80204172: 0727bc23 sd s2,120(a5) for(last=s=path; *s; s++) - 80204174: dd843783 ld a5,-552(s0) - 80204178: 0007c703 lbu a4,0(a5) - 8020417c: cf11 beqz a4,80204198 <exec+0x28c> - 8020417e: 0785 addi a5,a5,1 + 80204176: dd843783 ld a5,-552(s0) + 8020417a: 0007c703 lbu a4,0(a5) + 8020417e: cf11 beqz a4,8020419a <exec+0x28c> + 80204180: 0785 addi a5,a5,1 if(*s == '/') - 80204180: 02f00693 li a3,47 - 80204184: a039 j 80204192 <exec+0x286> + 80204182: 02f00693 li a3,47 + 80204186: a039 j 80204194 <exec+0x286> last = s+1; - 80204186: dcf43c23 sd a5,-552(s0) + 80204188: dcf43c23 sd a5,-552(s0) for(last=s=path; *s; s++) - 8020418a: 0785 addi a5,a5,1 - 8020418c: fff7c703 lbu a4,-1(a5) - 80204190: c701 beqz a4,80204198 <exec+0x28c> + 8020418c: 0785 addi a5,a5,1 + 8020418e: fff7c703 lbu a4,-1(a5) + 80204192: c701 beqz a4,8020419a <exec+0x28c> if(*s == '/') - 80204192: fed71ce3 bne a4,a3,8020418a <exec+0x27e> - 80204196: bfc5 j 80204186 <exec+0x27a> + 80204194: fed71ce3 bne a4,a3,8020418c <exec+0x27e> + 80204198: bfc5 j 80204188 <exec+0x27a> safestrcpy(p->name, last, sizeof(p->name)); - 80204198: 4641 li a2,16 - 8020419a: dd843583 ld a1,-552(s0) - 8020419e: 160a8513 addi a0,s5,352 - 802041a2: ffffc097 auipc ra,0xffffc - 802041a6: 712080e7 jalr 1810(ra) # 802008b4 <safestrcpy> + 8020419a: 4641 li a2,16 + 8020419c: dd843583 ld a1,-552(s0) + 802041a0: 160a8513 addi a0,s5,352 + 802041a4: ffffc097 auipc ra,0xffffc + 802041a8: 710080e7 jalr 1808(ra) # 802008b4 <safestrcpy> oldpagetable = p->pagetable; - 802041aa: 050ab503 ld a0,80(s5) + 802041ac: 050ab503 ld a0,80(s5) oldkpagetable = p->kpagetable; - 802041ae: 058ab983 ld s3,88(s5) + 802041b0: 058ab983 ld s3,88(s5) p->pagetable = pagetable; - 802041b2: e0843783 ld a5,-504(s0) - 802041b6: 04fab823 sd a5,80(s5) + 802041b4: e0843783 ld a5,-504(s0) + 802041b8: 04fab823 sd a5,80(s5) p->kpagetable = kpagetable; - 802041ba: 056abc23 sd s6,88(s5) + 802041bc: 056abc23 sd s6,88(s5) p->sz = sz; - 802041be: 059ab423 sd s9,72(s5) + 802041c0: 059ab423 sd s9,72(s5) p->trapframe->epc = elf.entry; // initial program counter = main - 802041c2: 060ab783 ld a5,96(s5) - 802041c6: e6043703 ld a4,-416(s0) - 802041ca: ef98 sd a4,24(a5) + 802041c4: 060ab783 ld a5,96(s5) + 802041c8: e6043703 ld a4,-416(s0) + 802041cc: ef98 sd a4,24(a5) p->trapframe->sp = sp; // initial stack pointer - 802041cc: 060ab783 ld a5,96(s5) - 802041d0: 0327b823 sd s2,48(a5) + 802041ce: 060ab783 ld a5,96(s5) + 802041d2: 0327b823 sd s2,48(a5) proc_freepagetable(oldpagetable, oldsz); - 802041d4: 85ea mv a1,s10 - 802041d6: ffffe097 auipc ra,0xffffe - 802041da: 9e6080e7 jalr -1562(ra) # 80201bbc <proc_freepagetable> + 802041d6: 85ea mv a1,s10 + 802041d8: ffffe097 auipc ra,0xffffe + 802041dc: 9e4080e7 jalr -1564(ra) # 80201bbc <proc_freepagetable> w_satp(MAKE_SATP(p->kpagetable)); - 802041de: 058ab783 ld a5,88(s5) - 802041e2: 83b1 srli a5,a5,0xc - 802041e4: 577d li a4,-1 - 802041e6: 177e slli a4,a4,0x3f - 802041e8: 8fd9 or a5,a5,a4 + 802041e0: 058ab783 ld a5,88(s5) + 802041e4: 83b1 srli a5,a5,0xc + 802041e6: 577d li a4,-1 + 802041e8: 177e slli a4,a4,0x3f + 802041ea: 8fd9 or a5,a5,a4 asm volatile("csrw satp, %0" : : "r" (x)); - 802041ea: 18079073 csrw satp,a5 + 802041ec: 18079073 csrw satp,a5 asm volatile("sfence.vma"); - 802041ee: 12000073 sfence.vma + 802041f0: 12000073 sfence.vma kvmfree(oldkpagetable, 0); - 802041f2: 4581 li a1,0 - 802041f4: 854e mv a0,s3 - 802041f6: ffffd097 auipc ra,0xffffd - 802041fa: 47c080e7 jalr 1148(ra) # 80201672 <kvmfree> + 802041f4: 4581 li a1,0 + 802041f6: 854e mv a0,s3 + 802041f8: ffffd097 auipc ra,0xffffd + 802041fc: 47a080e7 jalr 1146(ra) # 80201672 <kvmfree> return argc; // this ends up in a0, the first argument to main(argc, argv) - 802041fe: 0004851b sext.w a0,s1 - 80204202: a089 j 80204244 <exec+0x338> + 80204200: 0004851b sext.w a0,s1 + 80204204: a089 j 80204246 <exec+0x338> return -1; - 80204204: 557d li a0,-1 - 80204206: a83d j 80204244 <exec+0x338> - 80204208: de943823 sd s1,-528(s0) + 80204206: 557d li a0,-1 + 80204208: a83d j 80204246 <exec+0x338> + 8020420a: de943823 sd s1,-528(s0) proc_freepagetable(pagetable, sz); - 8020420c: df043583 ld a1,-528(s0) - 80204210: e0843503 ld a0,-504(s0) - 80204214: ffffe097 auipc ra,0xffffe - 80204218: 9a8080e7 jalr -1624(ra) # 80201bbc <proc_freepagetable> + 8020420e: df043583 ld a1,-528(s0) + 80204212: e0843503 ld a0,-504(s0) + 80204216: ffffe097 auipc ra,0xffffe + 8020421a: 9a6080e7 jalr -1626(ra) # 80201bbc <proc_freepagetable> kvmfree(kpagetable, 0); - 8020421c: 4581 li a1,0 - 8020421e: 855a mv a0,s6 - 80204220: ffffd097 auipc ra,0xffffd - 80204224: 452080e7 jalr 1106(ra) # 80201672 <kvmfree> + 8020421e: 4581 li a1,0 + 80204220: 855a mv a0,s6 + 80204222: ffffd097 auipc ra,0xffffd + 80204226: 450080e7 jalr 1104(ra) # 80201672 <kvmfree> eunlock(ep); eput(ep); } return -1; - 80204228: 557d li a0,-1 + 8020422a: 557d li a0,-1 if(ep){ - 8020422a: 000a0d63 beqz s4,80204244 <exec+0x338> + 8020422c: 000a0d63 beqz s4,80204246 <exec+0x338> eunlock(ep); - 8020422e: 8552 mv a0,s4 - 80204230: 00002097 auipc ra,0x2 - 80204234: 014080e7 jalr 20(ra) # 80206244 <eunlock> + 80204230: 8552 mv a0,s4 + 80204232: 00002097 auipc ra,0x2 + 80204236: 022080e7 jalr 34(ra) # 80206254 <eunlock> eput(ep); - 80204238: 8552 mv a0,s4 - 8020423a: 00002097 auipc ra,0x2 - 8020423e: 058080e7 jalr 88(ra) # 80206292 <eput> + 8020423a: 8552 mv a0,s4 + 8020423c: 00002097 auipc ra,0x2 + 80204240: 066080e7 jalr 102(ra) # 802062a2 <eput> return -1; - 80204242: 557d li a0,-1 -} - 80204244: 22813083 ld ra,552(sp) - 80204248: 22013403 ld s0,544(sp) - 8020424c: 21813483 ld s1,536(sp) - 80204250: 21013903 ld s2,528(sp) - 80204254: 20813983 ld s3,520(sp) - 80204258: 20013a03 ld s4,512(sp) - 8020425c: 7afe ld s5,504(sp) - 8020425e: 7b5e ld s6,496(sp) - 80204260: 7bbe ld s7,488(sp) - 80204262: 7c1e ld s8,480(sp) - 80204264: 6cfe ld s9,472(sp) - 80204266: 6d5e ld s10,464(sp) - 80204268: 6dbe ld s11,456(sp) - 8020426a: 23010113 addi sp,sp,560 - 8020426e: 8082 ret - 80204270: de943823 sd s1,-528(s0) - 80204274: bf61 j 8020420c <exec+0x300> - 80204276: de943823 sd s1,-528(s0) - 8020427a: bf49 j 8020420c <exec+0x300> - 8020427c: de943823 sd s1,-528(s0) - 80204280: b771 j 8020420c <exec+0x300> + 80204244: 557d li a0,-1 +} + 80204246: 22813083 ld ra,552(sp) + 8020424a: 22013403 ld s0,544(sp) + 8020424e: 21813483 ld s1,536(sp) + 80204252: 21013903 ld s2,528(sp) + 80204256: 20813983 ld s3,520(sp) + 8020425a: 20013a03 ld s4,512(sp) + 8020425e: 7afe ld s5,504(sp) + 80204260: 7b5e ld s6,496(sp) + 80204262: 7bbe ld s7,488(sp) + 80204264: 7c1e ld s8,480(sp) + 80204266: 6cfe ld s9,472(sp) + 80204268: 6d5e ld s10,464(sp) + 8020426a: 6dbe ld s11,456(sp) + 8020426c: 23010113 addi sp,sp,560 + 80204270: 8082 ret + 80204272: de943823 sd s1,-528(s0) + 80204276: bf61 j 8020420e <exec+0x300> + 80204278: de943823 sd s1,-528(s0) + 8020427c: bf49 j 8020420e <exec+0x300> + 8020427e: de943823 sd s1,-528(s0) + 80204282: b771 j 8020420e <exec+0x300> sz = sz1; - 80204282: df943823 sd s9,-528(s0) + 80204284: df943823 sd s9,-528(s0) ep = 0; - 80204286: 4a01 li s4,0 - 80204288: b751 j 8020420c <exec+0x300> + 80204288: 4a01 li s4,0 + 8020428a: b751 j 8020420e <exec+0x300> sz = sz1; - 8020428a: df943823 sd s9,-528(s0) + 8020428c: df943823 sd s9,-528(s0) ep = 0; - 8020428e: 4a01 li s4,0 - 80204290: bfb5 j 8020420c <exec+0x300> + 80204290: 4a01 li s4,0 + 80204292: bfb5 j 8020420e <exec+0x300> sz = sz1; - 80204292: df943823 sd s9,-528(s0) + 80204294: df943823 sd s9,-528(s0) ep = 0; - 80204296: 4a01 li s4,0 - 80204298: bf95 j 8020420c <exec+0x300> + 80204298: 4a01 li s4,0 + 8020429a: bf95 j 8020420e <exec+0x300> if((sz1 = uvmalloc(pagetable, kpagetable, sz, ph.vaddr + ph.memsz)) == 0) - 8020429a: df043483 ld s1,-528(s0) + 8020429c: df043483 ld s1,-528(s0) for(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof(ph)){ - 8020429e: e0043783 ld a5,-512(s0) - 802042a2: 0017869b addiw a3,a5,1 - 802042a6: e0d43023 sd a3,-512(s0) - 802042aa: df843783 ld a5,-520(s0) - 802042ae: 0387879b addiw a5,a5,56 - 802042b2: e8045703 lhu a4,-384(s0) - 802042b6: d8e6dee3 bge a3,a4,80204052 <exec+0x146> + 802042a0: e0043783 ld a5,-512(s0) + 802042a4: 0017869b addiw a3,a5,1 + 802042a8: e0d43023 sd a3,-512(s0) + 802042ac: df843783 ld a5,-520(s0) + 802042b0: 0387879b addiw a5,a5,56 + 802042b4: e8045703 lhu a4,-384(s0) + 802042b8: d8e6dee3 bge a3,a4,80204054 <exec+0x146> if(eread(ep, 0, (uint64)&ph, off, sizeof(ph)) != sizeof(ph)) - 802042ba: 2781 sext.w a5,a5 - 802042bc: def43c23 sd a5,-520(s0) - 802042c0: 03800713 li a4,56 - 802042c4: 86be mv a3,a5 - 802042c6: de043603 ld a2,-544(s0) - 802042ca: 4581 li a1,0 - 802042cc: 8552 mv a0,s4 - 802042ce: 00001097 auipc ra,0x1 - 802042d2: 63c080e7 jalr 1596(ra) # 8020590a <eread> - 802042d6: 03800793 li a5,56 - 802042da: f2f517e3 bne a0,a5,80204208 <exec+0x2fc> + 802042bc: 2781 sext.w a5,a5 + 802042be: def43c23 sd a5,-520(s0) + 802042c2: 03800713 li a4,56 + 802042c6: 86be mv a3,a5 + 802042c8: de043603 ld a2,-544(s0) + 802042cc: 4581 li a1,0 + 802042ce: 8552 mv a0,s4 + 802042d0: 00001097 auipc ra,0x1 + 802042d4: 64a080e7 jalr 1610(ra) # 8020591a <eread> + 802042d8: 03800793 li a5,56 + 802042dc: f2f517e3 bne a0,a5,8020420a <exec+0x2fc> if(ph.type != ELF_PROG_LOAD) - 802042de: e1042783 lw a5,-496(s0) - 802042e2: 4705 li a4,1 - 802042e4: fae79de3 bne a5,a4,8020429e <exec+0x392> + 802042e0: e1042783 lw a5,-496(s0) + 802042e4: 4705 li a4,1 + 802042e6: fae79de3 bne a5,a4,802042a0 <exec+0x392> if(ph.memsz < ph.filesz) - 802042e8: e3843683 ld a3,-456(s0) - 802042ec: e3043783 ld a5,-464(s0) - 802042f0: f8f6e0e3 bltu a3,a5,80204270 <exec+0x364> + 802042ea: e3843683 ld a3,-456(s0) + 802042ee: e3043783 ld a5,-464(s0) + 802042f2: f8f6e0e3 bltu a3,a5,80204272 <exec+0x364> if(ph.vaddr + ph.memsz < ph.vaddr) - 802042f4: e2043783 ld a5,-480(s0) - 802042f8: 96be add a3,a3,a5 - 802042fa: f6f6eee3 bltu a3,a5,80204276 <exec+0x36a> + 802042f6: e2043783 ld a5,-480(s0) + 802042fa: 96be add a3,a3,a5 + 802042fc: f6f6eee3 bltu a3,a5,80204278 <exec+0x36a> if((sz1 = uvmalloc(pagetable, kpagetable, sz, ph.vaddr + ph.memsz)) == 0) - 802042fe: 8626 mv a2,s1 - 80204300: 85da mv a1,s6 - 80204302: e0843503 ld a0,-504(s0) - 80204306: ffffd097 auipc ra,0xffffd - 8020430a: d04080e7 jalr -764(ra) # 8020100a <uvmalloc> - 8020430e: dea43823 sd a0,-528(s0) - 80204312: d52d beqz a0,8020427c <exec+0x370> + 80204300: 8626 mv a2,s1 + 80204302: 85da mv a1,s6 + 80204304: e0843503 ld a0,-504(s0) + 80204308: ffffd097 auipc ra,0xffffd + 8020430c: d02080e7 jalr -766(ra) # 8020100a <uvmalloc> + 80204310: dea43823 sd a0,-528(s0) + 80204314: d52d beqz a0,8020427e <exec+0x370> if(ph.vaddr % PGSIZE != 0) - 80204314: e2043c03 ld s8,-480(s0) - 80204318: dd043783 ld a5,-560(s0) - 8020431c: 00fc77b3 and a5,s8,a5 - 80204320: ee0796e3 bnez a5,8020420c <exec+0x300> + 80204316: e2043c03 ld s8,-480(s0) + 8020431a: dd043783 ld a5,-560(s0) + 8020431e: 00fc77b3 and a5,s8,a5 + 80204322: ee0796e3 bnez a5,8020420e <exec+0x300> if(loadseg(pagetable, ph.vaddr, ep, ph.off, ph.filesz) < 0) - 80204324: e1842c83 lw s9,-488(s0) - 80204328: e3042b83 lw s7,-464(s0) + 80204326: e1842c83 lw s9,-488(s0) + 8020432a: e3042b83 lw s7,-464(s0) for(i = 0; i < sz; i += PGSIZE){ - 8020432c: f60b87e3 beqz s7,8020429a <exec+0x38e> - 80204330: 89de mv s3,s7 - 80204332: 4481 li s1,0 - 80204334: b9ed j 8020402e <exec+0x122> + 8020432e: f60b87e3 beqz s7,8020429c <exec+0x38e> + 80204332: 89de mv s3,s7 + 80204334: 4481 li s1,0 + 80204336: b9ed j 80204030 <exec+0x122> kvmfree(kpagetable, 0); - 80204336: 4581 li a1,0 - 80204338: 855a mv a0,s6 - 8020433a: ffffd097 auipc ra,0xffffd - 8020433e: 338080e7 jalr 824(ra) # 80201672 <kvmfree> + 80204338: 4581 li a1,0 + 8020433a: 855a mv a0,s6 + 8020433c: ffffd097 auipc ra,0xffffd + 80204340: 336080e7 jalr 822(ra) # 80201672 <kvmfree> return -1; - 80204342: 557d li a0,-1 - 80204344: b701 j 80204244 <exec+0x338> + 80204344: 557d li a0,-1 + 80204346: b701 j 80204246 <exec+0x338> -0000000080204346 <argfd>: +0000000080204348 <argfd>: // Fetch the nth word-sized system call argument as a file descriptor // and return both the descriptor and the corresponding struct file. static int argfd(int n, int *pfd, struct file **pf) { - 80204346: 7179 addi sp,sp,-48 - 80204348: f406 sd ra,40(sp) - 8020434a: f022 sd s0,32(sp) - 8020434c: ec26 sd s1,24(sp) - 8020434e: e84a sd s2,16(sp) - 80204350: 1800 addi s0,sp,48 - 80204352: 892e mv s2,a1 - 80204354: 84b2 mv s1,a2 + 80204348: 7179 addi sp,sp,-48 + 8020434a: f406 sd ra,40(sp) + 8020434c: f022 sd s0,32(sp) + 8020434e: ec26 sd s1,24(sp) + 80204350: e84a sd s2,16(sp) + 80204352: 1800 addi s0,sp,48 + 80204354: 892e mv s2,a1 + 80204356: 84b2 mv s1,a2 int fd; struct file *f; if(argint(n, &fd) < 0) - 80204356: fdc40593 addi a1,s0,-36 - 8020435a: fffff097 auipc ra,0xfffff - 8020435e: b12080e7 jalr -1262(ra) # 80202e6c <argint> - 80204362: 04054063 bltz a0,802043a2 <argfd+0x5c> + 80204358: fdc40593 addi a1,s0,-36 + 8020435c: fffff097 auipc ra,0xfffff + 80204360: b12080e7 jalr -1262(ra) # 80202e6e <argint> + 80204364: 04054063 bltz a0,802043a4 <argfd+0x5c> return -1; if(fd < 0 || fd >= NOFILE || (f=myproc()->ofile[fd]) == NULL) - 80204366: fdc42703 lw a4,-36(s0) - 8020436a: 47bd li a5,15 - 8020436c: 02e7ed63 bltu a5,a4,802043a6 <argfd+0x60> - 80204370: ffffd097 auipc ra,0xffffd - 80204374: 6cc080e7 jalr 1740(ra) # 80201a3c <myproc> - 80204378: fdc42703 lw a4,-36(s0) - 8020437c: 01a70793 addi a5,a4,26 # fffffffffffff01a <ebss_clear+0xffffffff7fdd901a> - 80204380: 078e slli a5,a5,0x3 - 80204382: 953e add a0,a0,a5 - 80204384: 651c ld a5,8(a0) - 80204386: c395 beqz a5,802043aa <argfd+0x64> + 80204368: fdc42703 lw a4,-36(s0) + 8020436c: 47bd li a5,15 + 8020436e: 02e7ed63 bltu a5,a4,802043a8 <argfd+0x60> + 80204372: ffffd097 auipc ra,0xffffd + 80204376: 6ca080e7 jalr 1738(ra) # 80201a3c <myproc> + 8020437a: fdc42703 lw a4,-36(s0) + 8020437e: 01a70793 addi a5,a4,26 # fffffffffffff01a <ebss_clear+0xffffffff7fdd901a> + 80204382: 078e slli a5,a5,0x3 + 80204384: 953e add a0,a0,a5 + 80204386: 651c ld a5,8(a0) + 80204388: c395 beqz a5,802043ac <argfd+0x64> return -1; if(pfd) - 80204388: 00090463 beqz s2,80204390 <argfd+0x4a> + 8020438a: 00090463 beqz s2,80204392 <argfd+0x4a> *pfd = fd; - 8020438c: 00e92023 sw a4,0(s2) + 8020438e: 00e92023 sw a4,0(s2) if(pf) *pf = f; return 0; - 80204390: 4501 li a0,0 + 80204392: 4501 li a0,0 if(pf) - 80204392: c091 beqz s1,80204396 <argfd+0x50> + 80204394: c091 beqz s1,80204398 <argfd+0x50> *pf = f; - 80204394: e09c sd a5,0(s1) -} - 80204396: 70a2 ld ra,40(sp) - 80204398: 7402 ld s0,32(sp) - 8020439a: 64e2 ld s1,24(sp) - 8020439c: 6942 ld s2,16(sp) - 8020439e: 6145 addi sp,sp,48 - 802043a0: 8082 ret + 80204396: e09c sd a5,0(s1) +} + 80204398: 70a2 ld ra,40(sp) + 8020439a: 7402 ld s0,32(sp) + 8020439c: 64e2 ld s1,24(sp) + 8020439e: 6942 ld s2,16(sp) + 802043a0: 6145 addi sp,sp,48 + 802043a2: 8082 ret return -1; - 802043a2: 557d li a0,-1 - 802043a4: bfcd j 80204396 <argfd+0x50> + 802043a4: 557d li a0,-1 + 802043a6: bfcd j 80204398 <argfd+0x50> return -1; - 802043a6: 557d li a0,-1 - 802043a8: b7fd j 80204396 <argfd+0x50> - 802043aa: 557d li a0,-1 - 802043ac: b7ed j 80204396 <argfd+0x50> + 802043a8: 557d li a0,-1 + 802043aa: b7fd j 80204398 <argfd+0x50> + 802043ac: 557d li a0,-1 + 802043ae: b7ed j 80204398 <argfd+0x50> -00000000802043ae <fdalloc>: +00000000802043b0 <fdalloc>: // Allocate a file descriptor for the given file. // Takes over file reference from caller on success. static int fdalloc(struct file *f) { - 802043ae: 1101 addi sp,sp,-32 - 802043b0: ec06 sd ra,24(sp) - 802043b2: e822 sd s0,16(sp) - 802043b4: e426 sd s1,8(sp) - 802043b6: 1000 addi s0,sp,32 - 802043b8: 84aa mv s1,a0 + 802043b0: 1101 addi sp,sp,-32 + 802043b2: ec06 sd ra,24(sp) + 802043b4: e822 sd s0,16(sp) + 802043b6: e426 sd s1,8(sp) + 802043b8: 1000 addi s0,sp,32 + 802043ba: 84aa mv s1,a0 int fd; struct proc *p = myproc(); - 802043ba: ffffd097 auipc ra,0xffffd - 802043be: 682080e7 jalr 1666(ra) # 80201a3c <myproc> - 802043c2: 862a mv a2,a0 + 802043bc: ffffd097 auipc ra,0xffffd + 802043c0: 680080e7 jalr 1664(ra) # 80201a3c <myproc> + 802043c4: 862a mv a2,a0 for(fd = 0; fd < NOFILE; fd++){ - 802043c4: 0d850793 addi a5,a0,216 - 802043c8: 4501 li a0,0 - 802043ca: 46c1 li a3,16 + 802043c6: 0d850793 addi a5,a0,216 + 802043ca: 4501 li a0,0 + 802043cc: 46c1 li a3,16 if(p->ofile[fd] == 0){ - 802043cc: 6398 ld a4,0(a5) - 802043ce: cb19 beqz a4,802043e4 <fdalloc+0x36> + 802043ce: 6398 ld a4,0(a5) + 802043d0: cb19 beqz a4,802043e6 <fdalloc+0x36> for(fd = 0; fd < NOFILE; fd++){ - 802043d0: 2505 addiw a0,a0,1 - 802043d2: 07a1 addi a5,a5,8 - 802043d4: fed51ce3 bne a0,a3,802043cc <fdalloc+0x1e> + 802043d2: 2505 addiw a0,a0,1 + 802043d4: 07a1 addi a5,a5,8 + 802043d6: fed51ce3 bne a0,a3,802043ce <fdalloc+0x1e> p->ofile[fd] = f; return fd; } } return -1; - 802043d8: 557d li a0,-1 + 802043da: 557d li a0,-1 } - 802043da: 60e2 ld ra,24(sp) - 802043dc: 6442 ld s0,16(sp) - 802043de: 64a2 ld s1,8(sp) - 802043e0: 6105 addi sp,sp,32 - 802043e2: 8082 ret + 802043dc: 60e2 ld ra,24(sp) + 802043de: 6442 ld s0,16(sp) + 802043e0: 64a2 ld s1,8(sp) + 802043e2: 6105 addi sp,sp,32 + 802043e4: 8082 ret p->ofile[fd] = f; - 802043e4: 01a50793 addi a5,a0,26 - 802043e8: 078e slli a5,a5,0x3 - 802043ea: 963e add a2,a2,a5 - 802043ec: e604 sd s1,8(a2) + 802043e6: 01a50793 addi a5,a0,26 + 802043ea: 078e slli a5,a5,0x3 + 802043ec: 963e add a2,a2,a5 + 802043ee: e604 sd s1,8(a2) return fd; - 802043ee: b7f5 j 802043da <fdalloc+0x2c> + 802043f0: b7f5 j 802043dc <fdalloc+0x2c> -00000000802043f0 <create>: +00000000802043f2 <create>: return filestat(f, st); } static struct dirent* create(char *path, short type, int mode) { - 802043f0: 7169 addi sp,sp,-304 - 802043f2: f606 sd ra,296(sp) - 802043f4: f222 sd s0,288(sp) - 802043f6: ee26 sd s1,280(sp) - 802043f8: ea4a sd s2,272(sp) - 802043fa: e64e sd s3,264(sp) - 802043fc: 1a00 addi s0,sp,304 - 802043fe: 892e mv s2,a1 + 802043f2: 7169 addi sp,sp,-304 + 802043f4: f606 sd ra,296(sp) + 802043f6: f222 sd s0,288(sp) + 802043f8: ee26 sd s1,280(sp) + 802043fa: ea4a sd s2,272(sp) + 802043fc: e64e sd s3,264(sp) + 802043fe: 1a00 addi s0,sp,304 + 80204400: 892e mv s2,a1 struct dirent *ep, *dp; char name[FAT32_MAX_FILENAME + 1]; if((dp = enameparent(path, name)) == NULL) - 80204400: ed040593 addi a1,s0,-304 - 80204404: 00002097 auipc ra,0x2 - 80204408: 5d0080e7 jalr 1488(ra) # 802069d4 <enameparent> - 8020440c: 84aa mv s1,a0 - 8020440e: c945 beqz a0,802044be <create+0xce> + 80204402: ed040593 addi a1,s0,-304 + 80204406: 00002097 auipc ra,0x2 + 8020440a: 5de080e7 jalr 1502(ra) # 802069e4 <enameparent> + 8020440e: 84aa mv s1,a0 + 80204410: c945 beqz a0,802044c0 <create+0xce> mode = ATTR_READ_ONLY; } else { mode = 0; } elock(dp); - 80204410: 00002097 auipc ra,0x2 - 80204414: dfe080e7 jalr -514(ra) # 8020620e <elock> + 80204412: 00002097 auipc ra,0x2 + 80204416: e0c080e7 jalr -500(ra) # 8020621e <elock> if (type == T_DIR) { - 80204418: fff90613 addi a2,s2,-1 - 8020441c: 00163613 seqz a2,a2 + 8020441a: fff90613 addi a2,s2,-1 + 8020441e: 00163613 seqz a2,a2 if ((ep = ealloc(dp, name, mode)) == NULL) { - 80204420: 0046161b slliw a2,a2,0x4 - 80204424: ed040593 addi a1,s0,-304 - 80204428: 8526 mv a0,s1 - 8020442a: 00002097 auipc ra,0x2 - 8020442e: 2d0080e7 jalr 720(ra) # 802066fa <ealloc> - 80204432: 89aa mv s3,a0 - 80204434: c529 beqz a0,8020447e <create+0x8e> + 80204422: 0046161b slliw a2,a2,0x4 + 80204426: ed040593 addi a1,s0,-304 + 8020442a: 8526 mv a0,s1 + 8020442c: 00002097 auipc ra,0x2 + 80204430: 2de080e7 jalr 734(ra) # 8020670a <ealloc> + 80204434: 89aa mv s3,a0 + 80204436: c529 beqz a0,80204480 <create+0x8e> eunlock(dp); eput(dp); return NULL; } if ((type == T_DIR && !(ep->attribute & ATTR_DIRECTORY)) || - 80204436: 0009079b sext.w a5,s2 - 8020443a: 4705 li a4,1 - 8020443c: 04e78c63 beq a5,a4,80204494 <create+0xa4> - 80204440: 2901 sext.w s2,s2 - 80204442: 4789 li a5,2 - 80204444: 00f91663 bne s2,a5,80204450 <create+0x60> + 80204438: 0009079b sext.w a5,s2 + 8020443c: 4705 li a4,1 + 8020443e: 04e78c63 beq a5,a4,80204496 <create+0xa4> + 80204442: 2901 sext.w s2,s2 + 80204444: 4789 li a5,2 + 80204446: 00f91663 bne s2,a5,80204452 <create+0x60> (type == T_FILE && (ep->attribute & ATTR_DIRECTORY))) { - 80204448: 10054783 lbu a5,256(a0) - 8020444c: 8bc1 andi a5,a5,16 - 8020444e: e7b9 bnez a5,8020449c <create+0xac> + 8020444a: 10054783 lbu a5,256(a0) + 8020444e: 8bc1 andi a5,a5,16 + 80204450: e7b9 bnez a5,8020449e <create+0xac> eput(ep); eput(dp); return NULL; } eunlock(dp); - 80204450: 8526 mv a0,s1 - 80204452: 00002097 auipc ra,0x2 - 80204456: df2080e7 jalr -526(ra) # 80206244 <eunlock> + 80204452: 8526 mv a0,s1 + 80204454: 00002097 auipc ra,0x2 + 80204458: e00080e7 jalr -512(ra) # 80206254 <eunlock> eput(dp); - 8020445a: 8526 mv a0,s1 - 8020445c: 00002097 auipc ra,0x2 - 80204460: e36080e7 jalr -458(ra) # 80206292 <eput> + 8020445c: 8526 mv a0,s1 + 8020445e: 00002097 auipc ra,0x2 + 80204462: e44080e7 jalr -444(ra) # 802062a2 <eput> elock(ep); - 80204464: 854e mv a0,s3 - 80204466: 00002097 auipc ra,0x2 - 8020446a: da8080e7 jalr -600(ra) # 8020620e <elock> + 80204466: 854e mv a0,s3 + 80204468: 00002097 auipc ra,0x2 + 8020446c: db6080e7 jalr -586(ra) # 8020621e <elock> return ep; } - 8020446e: 854e mv a0,s3 - 80204470: 70b2 ld ra,296(sp) - 80204472: 7412 ld s0,288(sp) - 80204474: 64f2 ld s1,280(sp) - 80204476: 6952 ld s2,272(sp) - 80204478: 69b2 ld s3,264(sp) - 8020447a: 6155 addi sp,sp,304 - 8020447c: 8082 ret + 80204470: 854e mv a0,s3 + 80204472: 70b2 ld ra,296(sp) + 80204474: 7412 ld s0,288(sp) + 80204476: 64f2 ld s1,280(sp) + 80204478: 6952 ld s2,272(sp) + 8020447a: 69b2 ld s3,264(sp) + 8020447c: 6155 addi sp,sp,304 + 8020447e: 8082 ret eunlock(dp); - 8020447e: 8526 mv a0,s1 - 80204480: 00002097 auipc ra,0x2 - 80204484: dc4080e7 jalr -572(ra) # 80206244 <eunlock> + 80204480: 8526 mv a0,s1 + 80204482: 00002097 auipc ra,0x2 + 80204486: dd2080e7 jalr -558(ra) # 80206254 <eunlock> eput(dp); - 80204488: 8526 mv a0,s1 - 8020448a: 00002097 auipc ra,0x2 - 8020448e: e08080e7 jalr -504(ra) # 80206292 <eput> + 8020448a: 8526 mv a0,s1 + 8020448c: 00002097 auipc ra,0x2 + 80204490: e16080e7 jalr -490(ra) # 802062a2 <eput> return NULL; - 80204492: bff1 j 8020446e <create+0x7e> + 80204494: bff1 j 80204470 <create+0x7e> if ((type == T_DIR && !(ep->attribute & ATTR_DIRECTORY)) || - 80204494: 10054783 lbu a5,256(a0) - 80204498: 8bc1 andi a5,a5,16 - 8020449a: fbdd bnez a5,80204450 <create+0x60> + 80204496: 10054783 lbu a5,256(a0) + 8020449a: 8bc1 andi a5,a5,16 + 8020449c: fbdd bnez a5,80204452 <create+0x60> eunlock(dp); - 8020449c: 8526 mv a0,s1 - 8020449e: 00002097 auipc ra,0x2 - 802044a2: da6080e7 jalr -602(ra) # 80206244 <eunlock> + 8020449e: 8526 mv a0,s1 + 802044a0: 00002097 auipc ra,0x2 + 802044a4: db4080e7 jalr -588(ra) # 80206254 <eunlock> eput(ep); - 802044a6: 854e mv a0,s3 - 802044a8: 00002097 auipc ra,0x2 - 802044ac: dea080e7 jalr -534(ra) # 80206292 <eput> + 802044a8: 854e mv a0,s3 + 802044aa: 00002097 auipc ra,0x2 + 802044ae: df8080e7 jalr -520(ra) # 802062a2 <eput> eput(dp); - 802044b0: 8526 mv a0,s1 - 802044b2: 00002097 auipc ra,0x2 - 802044b6: de0080e7 jalr -544(ra) # 80206292 <eput> + 802044b2: 8526 mv a0,s1 + 802044b4: 00002097 auipc ra,0x2 + 802044b8: dee080e7 jalr -530(ra) # 802062a2 <eput> return NULL; - 802044ba: 4981 li s3,0 - 802044bc: bf4d j 8020446e <create+0x7e> + 802044bc: 4981 li s3,0 + 802044be: bf4d j 80204470 <create+0x7e> return NULL; - 802044be: 89aa mv s3,a0 - 802044c0: b77d j 8020446e <create+0x7e> + 802044c0: 89aa mv s3,a0 + 802044c2: b77d j 80204470 <create+0x7e> -00000000802044c2 <sys_dup>: +00000000802044c4 <sys_dup>: { - 802044c2: 7179 addi sp,sp,-48 - 802044c4: f406 sd ra,40(sp) - 802044c6: f022 sd s0,32(sp) - 802044c8: ec26 sd s1,24(sp) - 802044ca: e84a sd s2,16(sp) - 802044cc: 1800 addi s0,sp,48 + 802044c4: 7179 addi sp,sp,-48 + 802044c6: f406 sd ra,40(sp) + 802044c8: f022 sd s0,32(sp) + 802044ca: ec26 sd s1,24(sp) + 802044cc: e84a sd s2,16(sp) + 802044ce: 1800 addi s0,sp,48 if(argfd(0, 0, &f) < 0) - 802044ce: fd840613 addi a2,s0,-40 - 802044d2: 4581 li a1,0 - 802044d4: 4501 li a0,0 - 802044d6: 00000097 auipc ra,0x0 - 802044da: e70080e7 jalr -400(ra) # 80204346 <argfd> + 802044d0: fd840613 addi a2,s0,-40 + 802044d4: 4581 li a1,0 + 802044d6: 4501 li a0,0 + 802044d8: 00000097 auipc ra,0x0 + 802044dc: e70080e7 jalr -400(ra) # 80204348 <argfd> return -1; - 802044de: 57fd li a5,-1 + 802044e0: 57fd li a5,-1 if(argfd(0, 0, &f) < 0) - 802044e0: 02054363 bltz a0,80204506 <sys_dup+0x44> + 802044e2: 02054363 bltz a0,80204508 <sys_dup+0x44> if((fd=fdalloc(f)) < 0) - 802044e4: fd843903 ld s2,-40(s0) - 802044e8: 854a mv a0,s2 - 802044ea: 00000097 auipc ra,0x0 - 802044ee: ec4080e7 jalr -316(ra) # 802043ae <fdalloc> - 802044f2: 84aa mv s1,a0 + 802044e6: fd843903 ld s2,-40(s0) + 802044ea: 854a mv a0,s2 + 802044ec: 00000097 auipc ra,0x0 + 802044f0: ec4080e7 jalr -316(ra) # 802043b0 <fdalloc> + 802044f4: 84aa mv s1,a0 return -1; - 802044f4: 57fd li a5,-1 + 802044f6: 57fd li a5,-1 if((fd=fdalloc(f)) < 0) - 802044f6: 00054863 bltz a0,80204506 <sys_dup+0x44> + 802044f8: 00054863 bltz a0,80204508 <sys_dup+0x44> filedup(f); - 802044fa: 854a mv a0,s2 - 802044fc: fffff097 auipc ra,0xfffff - 80204500: 318080e7 jalr 792(ra) # 80203814 <filedup> + 802044fc: 854a mv a0,s2 + 802044fe: fffff097 auipc ra,0xfffff + 80204502: 318080e7 jalr 792(ra) # 80203816 <filedup> return fd; - 80204504: 87a6 mv a5,s1 -} - 80204506: 853e mv a0,a5 - 80204508: 70a2 ld ra,40(sp) - 8020450a: 7402 ld s0,32(sp) - 8020450c: 64e2 ld s1,24(sp) - 8020450e: 6942 ld s2,16(sp) - 80204510: 6145 addi sp,sp,48 - 80204512: 8082 ret - -0000000080204514 <sys_read>: -{ - 80204514: 7179 addi sp,sp,-48 - 80204516: f406 sd ra,40(sp) - 80204518: f022 sd s0,32(sp) - 8020451a: 1800 addi s0,sp,48 + 80204506: 87a6 mv a5,s1 +} + 80204508: 853e mv a0,a5 + 8020450a: 70a2 ld ra,40(sp) + 8020450c: 7402 ld s0,32(sp) + 8020450e: 64e2 ld s1,24(sp) + 80204510: 6942 ld s2,16(sp) + 80204512: 6145 addi sp,sp,48 + 80204514: 8082 ret + +0000000080204516 <sys_read>: +{ + 80204516: 7179 addi sp,sp,-48 + 80204518: f406 sd ra,40(sp) + 8020451a: f022 sd s0,32(sp) + 8020451c: 1800 addi s0,sp,48 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 8020451c: fe840613 addi a2,s0,-24 - 80204520: 4581 li a1,0 - 80204522: 4501 li a0,0 - 80204524: 00000097 auipc ra,0x0 - 80204528: e22080e7 jalr -478(ra) # 80204346 <argfd> + 8020451e: fe840613 addi a2,s0,-24 + 80204522: 4581 li a1,0 + 80204524: 4501 li a0,0 + 80204526: 00000097 auipc ra,0x0 + 8020452a: e22080e7 jalr -478(ra) # 80204348 <argfd> return -1; - 8020452c: 57fd li a5,-1 + 8020452e: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 8020452e: 04054163 bltz a0,80204570 <sys_read+0x5c> - 80204532: fe440593 addi a1,s0,-28 - 80204536: 4509 li a0,2 - 80204538: fffff097 auipc ra,0xfffff - 8020453c: 934080e7 jalr -1740(ra) # 80202e6c <argint> + 80204530: 04054163 bltz a0,80204572 <sys_read+0x5c> + 80204534: fe440593 addi a1,s0,-28 + 80204538: 4509 li a0,2 + 8020453a: fffff097 auipc ra,0xfffff + 8020453e: 934080e7 jalr -1740(ra) # 80202e6e <argint> return -1; - 80204540: 57fd li a5,-1 + 80204542: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 80204542: 02054763 bltz a0,80204570 <sys_read+0x5c> - 80204546: fd840593 addi a1,s0,-40 - 8020454a: 4505 li a0,1 - 8020454c: fffff097 auipc ra,0xfffff - 80204550: 982080e7 jalr -1662(ra) # 80202ece <argaddr> + 80204544: 02054763 bltz a0,80204572 <sys_read+0x5c> + 80204548: fd840593 addi a1,s0,-40 + 8020454c: 4505 li a0,1 + 8020454e: fffff097 auipc ra,0xfffff + 80204552: 982080e7 jalr -1662(ra) # 80202ed0 <argaddr> return -1; - 80204554: 57fd li a5,-1 + 80204556: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 80204556: 00054d63 bltz a0,80204570 <sys_read+0x5c> + 80204558: 00054d63 bltz a0,80204572 <sys_read+0x5c> return fileread(f, p, n); - 8020455a: fe442603 lw a2,-28(s0) - 8020455e: fd843583 ld a1,-40(s0) - 80204562: fe843503 ld a0,-24(s0) - 80204566: fffff097 auipc ra,0xfffff - 8020456a: 41a080e7 jalr 1050(ra) # 80203980 <fileread> - 8020456e: 87aa mv a5,a0 -} - 80204570: 853e mv a0,a5 - 80204572: 70a2 ld ra,40(sp) - 80204574: 7402 ld s0,32(sp) - 80204576: 6145 addi sp,sp,48 - 80204578: 8082 ret - -000000008020457a <sys_write>: -{ - 8020457a: 7179 addi sp,sp,-48 - 8020457c: f406 sd ra,40(sp) - 8020457e: f022 sd s0,32(sp) - 80204580: 1800 addi s0,sp,48 + 8020455c: fe442603 lw a2,-28(s0) + 80204560: fd843583 ld a1,-40(s0) + 80204564: fe843503 ld a0,-24(s0) + 80204568: fffff097 auipc ra,0xfffff + 8020456c: 41a080e7 jalr 1050(ra) # 80203982 <fileread> + 80204570: 87aa mv a5,a0 +} + 80204572: 853e mv a0,a5 + 80204574: 70a2 ld ra,40(sp) + 80204576: 7402 ld s0,32(sp) + 80204578: 6145 addi sp,sp,48 + 8020457a: 8082 ret + +000000008020457c <sys_write>: +{ + 8020457c: 7179 addi sp,sp,-48 + 8020457e: f406 sd ra,40(sp) + 80204580: f022 sd s0,32(sp) + 80204582: 1800 addi s0,sp,48 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 80204582: fe840613 addi a2,s0,-24 - 80204586: 4581 li a1,0 - 80204588: 4501 li a0,0 - 8020458a: 00000097 auipc ra,0x0 - 8020458e: dbc080e7 jalr -580(ra) # 80204346 <argfd> + 80204584: fe840613 addi a2,s0,-24 + 80204588: 4581 li a1,0 + 8020458a: 4501 li a0,0 + 8020458c: 00000097 auipc ra,0x0 + 80204590: dbc080e7 jalr -580(ra) # 80204348 <argfd> return -1; - 80204592: 57fd li a5,-1 + 80204594: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 80204594: 04054163 bltz a0,802045d6 <sys_write+0x5c> - 80204598: fe440593 addi a1,s0,-28 - 8020459c: 4509 li a0,2 - 8020459e: fffff097 auipc ra,0xfffff - 802045a2: 8ce080e7 jalr -1842(ra) # 80202e6c <argint> + 80204596: 04054163 bltz a0,802045d8 <sys_write+0x5c> + 8020459a: fe440593 addi a1,s0,-28 + 8020459e: 4509 li a0,2 + 802045a0: fffff097 auipc ra,0xfffff + 802045a4: 8ce080e7 jalr -1842(ra) # 80202e6e <argint> return -1; - 802045a6: 57fd li a5,-1 + 802045a8: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 802045a8: 02054763 bltz a0,802045d6 <sys_write+0x5c> - 802045ac: fd840593 addi a1,s0,-40 - 802045b0: 4505 li a0,1 - 802045b2: fffff097 auipc ra,0xfffff - 802045b6: 91c080e7 jalr -1764(ra) # 80202ece <argaddr> + 802045aa: 02054763 bltz a0,802045d8 <sys_write+0x5c> + 802045ae: fd840593 addi a1,s0,-40 + 802045b2: 4505 li a0,1 + 802045b4: fffff097 auipc ra,0xfffff + 802045b8: 91c080e7 jalr -1764(ra) # 80202ed0 <argaddr> return -1; - 802045ba: 57fd li a5,-1 + 802045bc: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 802045bc: 00054d63 bltz a0,802045d6 <sys_write+0x5c> + 802045be: 00054d63 bltz a0,802045d8 <sys_write+0x5c> return filewrite(f, p, n); - 802045c0: fe442603 lw a2,-28(s0) - 802045c4: fd843583 ld a1,-40(s0) - 802045c8: fe843503 ld a0,-24(s0) - 802045cc: fffff097 auipc ra,0xfffff - 802045d0: 476080e7 jalr 1142(ra) # 80203a42 <filewrite> - 802045d4: 87aa mv a5,a0 -} - 802045d6: 853e mv a0,a5 - 802045d8: 70a2 ld ra,40(sp) - 802045da: 7402 ld s0,32(sp) - 802045dc: 6145 addi sp,sp,48 - 802045de: 8082 ret - -00000000802045e0 <sys_close>: -{ - 802045e0: 1101 addi sp,sp,-32 - 802045e2: ec06 sd ra,24(sp) - 802045e4: e822 sd s0,16(sp) - 802045e6: 1000 addi s0,sp,32 + 802045c2: fe442603 lw a2,-28(s0) + 802045c6: fd843583 ld a1,-40(s0) + 802045ca: fe843503 ld a0,-24(s0) + 802045ce: fffff097 auipc ra,0xfffff + 802045d2: 476080e7 jalr 1142(ra) # 80203a44 <filewrite> + 802045d6: 87aa mv a5,a0 +} + 802045d8: 853e mv a0,a5 + 802045da: 70a2 ld ra,40(sp) + 802045dc: 7402 ld s0,32(sp) + 802045de: 6145 addi sp,sp,48 + 802045e0: 8082 ret + +00000000802045e2 <sys_close>: +{ + 802045e2: 1101 addi sp,sp,-32 + 802045e4: ec06 sd ra,24(sp) + 802045e6: e822 sd s0,16(sp) + 802045e8: 1000 addi s0,sp,32 if(argfd(0, &fd, &f) < 0) - 802045e8: fe040613 addi a2,s0,-32 - 802045ec: fec40593 addi a1,s0,-20 - 802045f0: 4501 li a0,0 - 802045f2: 00000097 auipc ra,0x0 - 802045f6: d54080e7 jalr -684(ra) # 80204346 <argfd> + 802045ea: fe040613 addi a2,s0,-32 + 802045ee: fec40593 addi a1,s0,-20 + 802045f2: 4501 li a0,0 + 802045f4: 00000097 auipc ra,0x0 + 802045f8: d54080e7 jalr -684(ra) # 80204348 <argfd> return -1; - 802045fa: 57fd li a5,-1 + 802045fc: 57fd li a5,-1 if(argfd(0, &fd, &f) < 0) - 802045fc: 02054463 bltz a0,80204624 <sys_close+0x44> + 802045fe: 02054463 bltz a0,80204626 <sys_close+0x44> myproc()->ofile[fd] = 0; - 80204600: ffffd097 auipc ra,0xffffd - 80204604: 43c080e7 jalr 1084(ra) # 80201a3c <myproc> - 80204608: fec42783 lw a5,-20(s0) - 8020460c: 07e9 addi a5,a5,26 - 8020460e: 078e slli a5,a5,0x3 - 80204610: 953e add a0,a0,a5 - 80204612: 00053423 sd zero,8(a0) + 80204602: ffffd097 auipc ra,0xffffd + 80204606: 43a080e7 jalr 1082(ra) # 80201a3c <myproc> + 8020460a: fec42783 lw a5,-20(s0) + 8020460e: 07e9 addi a5,a5,26 + 80204610: 078e slli a5,a5,0x3 + 80204612: 953e add a0,a0,a5 + 80204614: 00053423 sd zero,8(a0) fileclose(f); - 80204616: fe043503 ld a0,-32(s0) - 8020461a: fffff097 auipc ra,0xfffff - 8020461e: 24c080e7 jalr 588(ra) # 80203866 <fileclose> + 80204618: fe043503 ld a0,-32(s0) + 8020461c: fffff097 auipc ra,0xfffff + 80204620: 24c080e7 jalr 588(ra) # 80203868 <fileclose> return 0; - 80204622: 4781 li a5,0 + 80204624: 4781 li a5,0 } - 80204624: 853e mv a0,a5 - 80204626: 60e2 ld ra,24(sp) - 80204628: 6442 ld s0,16(sp) - 8020462a: 6105 addi sp,sp,32 - 8020462c: 8082 ret + 80204626: 853e mv a0,a5 + 80204628: 60e2 ld ra,24(sp) + 8020462a: 6442 ld s0,16(sp) + 8020462c: 6105 addi sp,sp,32 + 8020462e: 8082 ret -000000008020462e <sys_fstat>: +0000000080204630 <sys_fstat>: { - 8020462e: 1101 addi sp,sp,-32 - 80204630: ec06 sd ra,24(sp) - 80204632: e822 sd s0,16(sp) - 80204634: 1000 addi s0,sp,32 + 80204630: 1101 addi sp,sp,-32 + 80204632: ec06 sd ra,24(sp) + 80204634: e822 sd s0,16(sp) + 80204636: 1000 addi s0,sp,32 if(argfd(0, 0, &f) < 0 || argaddr(1, &st) < 0) - 80204636: fe840613 addi a2,s0,-24 - 8020463a: 4581 li a1,0 - 8020463c: 4501 li a0,0 - 8020463e: 00000097 auipc ra,0x0 - 80204642: d08080e7 jalr -760(ra) # 80204346 <argfd> + 80204638: fe840613 addi a2,s0,-24 + 8020463c: 4581 li a1,0 + 8020463e: 4501 li a0,0 + 80204640: 00000097 auipc ra,0x0 + 80204644: d08080e7 jalr -760(ra) # 80204348 <argfd> return -1; - 80204646: 57fd li a5,-1 + 80204648: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argaddr(1, &st) < 0) - 80204648: 02054563 bltz a0,80204672 <sys_fstat+0x44> - 8020464c: fe040593 addi a1,s0,-32 - 80204650: 4505 li a0,1 - 80204652: fffff097 auipc ra,0xfffff - 80204656: 87c080e7 jalr -1924(ra) # 80202ece <argaddr> + 8020464a: 02054563 bltz a0,80204674 <sys_fstat+0x44> + 8020464e: fe040593 addi a1,s0,-32 + 80204652: 4505 li a0,1 + 80204654: fffff097 auipc ra,0xfffff + 80204658: 87c080e7 jalr -1924(ra) # 80202ed0 <argaddr> return -1; - 8020465a: 57fd li a5,-1 + 8020465c: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argaddr(1, &st) < 0) - 8020465c: 00054b63 bltz a0,80204672 <sys_fstat+0x44> + 8020465e: 00054b63 bltz a0,80204674 <sys_fstat+0x44> return filestat(f, st); - 80204660: fe043583 ld a1,-32(s0) - 80204664: fe843503 ld a0,-24(s0) - 80204668: fffff097 auipc ra,0xfffff - 8020466c: 2b4080e7 jalr 692(ra) # 8020391c <filestat> - 80204670: 87aa mv a5,a0 + 80204662: fe043583 ld a1,-32(s0) + 80204666: fe843503 ld a0,-24(s0) + 8020466a: fffff097 auipc ra,0xfffff + 8020466e: 2b4080e7 jalr 692(ra) # 8020391e <filestat> + 80204672: 87aa mv a5,a0 } - 80204672: 853e mv a0,a5 - 80204674: 60e2 ld ra,24(sp) - 80204676: 6442 ld s0,16(sp) - 80204678: 6105 addi sp,sp,32 - 8020467a: 8082 ret + 80204674: 853e mv a0,a5 + 80204676: 60e2 ld ra,24(sp) + 80204678: 6442 ld s0,16(sp) + 8020467a: 6105 addi sp,sp,32 + 8020467c: 8082 ret -000000008020467c <sys_open>: +000000008020467e <sys_open>: uint64 sys_open(void) { - 8020467c: 7129 addi sp,sp,-320 - 8020467e: fe06 sd ra,312(sp) - 80204680: fa22 sd s0,304(sp) - 80204682: f626 sd s1,296(sp) - 80204684: f24a sd s2,288(sp) - 80204686: ee4e sd s3,280(sp) - 80204688: 0280 addi s0,sp,320 + 8020467e: 7129 addi sp,sp,-320 + 80204680: fe06 sd ra,312(sp) + 80204682: fa22 sd s0,304(sp) + 80204684: f626 sd s1,296(sp) + 80204686: f24a sd s2,288(sp) + 80204688: ee4e sd s3,280(sp) + 8020468a: 0280 addi s0,sp,320 char path[FAT32_MAX_PATH]; int fd, omode; struct file *f; struct dirent *ep; if(argstr(0, path, FAT32_MAX_PATH) < 0 || argint(1, &omode) < 0) - 8020468a: 10400613 li a2,260 - 8020468e: ec840593 addi a1,s0,-312 - 80204692: 4501 li a0,0 - 80204694: fffff097 auipc ra,0xfffff - 80204698: 85c080e7 jalr -1956(ra) # 80202ef0 <argstr> - 8020469c: 87aa mv a5,a0 + 8020468c: 10400613 li a2,260 + 80204690: ec840593 addi a1,s0,-312 + 80204694: 4501 li a0,0 + 80204696: fffff097 auipc ra,0xfffff + 8020469a: 85c080e7 jalr -1956(ra) # 80202ef2 <argstr> + 8020469e: 87aa mv a5,a0 return -1; - 8020469e: 557d li a0,-1 + 802046a0: 557d li a0,-1 if(argstr(0, path, FAT32_MAX_PATH) < 0 || argint(1, &omode) < 0) - 802046a0: 0807ce63 bltz a5,8020473c <sys_open+0xc0> - 802046a4: ec440593 addi a1,s0,-316 - 802046a8: 4505 li a0,1 - 802046aa: ffffe097 auipc ra,0xffffe - 802046ae: 7c2080e7 jalr 1986(ra) # 80202e6c <argint> - 802046b2: 0e054163 bltz a0,80204794 <sys_open+0x118> + 802046a2: 0807ce63 bltz a5,8020473e <sys_open+0xc0> + 802046a6: ec440593 addi a1,s0,-316 + 802046aa: 4505 li a0,1 + 802046ac: ffffe097 auipc ra,0xffffe + 802046b0: 7c2080e7 jalr 1986(ra) # 80202e6e <argint> + 802046b4: 0e054163 bltz a0,80204796 <sys_open+0x118> if(omode & O_CREATE){ - 802046b6: ec442603 lw a2,-316(s0) - 802046ba: 20067793 andi a5,a2,512 - 802046be: c7d1 beqz a5,8020474a <sys_open+0xce> + 802046b8: ec442603 lw a2,-316(s0) + 802046bc: 20067793 andi a5,a2,512 + 802046c0: c7d1 beqz a5,8020474c <sys_open+0xce> ep = create(path, T_FILE, omode); - 802046c0: 4589 li a1,2 - 802046c2: ec840513 addi a0,s0,-312 - 802046c6: 00000097 auipc ra,0x0 - 802046ca: d2a080e7 jalr -726(ra) # 802043f0 <create> - 802046ce: 892a mv s2,a0 + 802046c2: 4589 li a1,2 + 802046c4: ec840513 addi a0,s0,-312 + 802046c8: 00000097 auipc ra,0x0 + 802046cc: d2a080e7 jalr -726(ra) # 802043f2 <create> + 802046d0: 892a mv s2,a0 if(ep == NULL){ - 802046d0: c561 beqz a0,80204798 <sys_open+0x11c> + 802046d2: c561 beqz a0,8020479a <sys_open+0x11c> eput(ep); return -1; } } if((f = filealloc()) == NULL || (fd = fdalloc(f)) < 0){ - 802046d2: fffff097 auipc ra,0xfffff - 802046d6: 0d8080e7 jalr 216(ra) # 802037aa <filealloc> - 802046da: 89aa mv s3,a0 - 802046dc: c579 beqz a0,802047aa <sys_open+0x12e> - 802046de: 00000097 auipc ra,0x0 - 802046e2: cd0080e7 jalr -816(ra) # 802043ae <fdalloc> - 802046e6: 84aa mv s1,a0 - 802046e8: 0a054c63 bltz a0,802047a0 <sys_open+0x124> + 802046d4: fffff097 auipc ra,0xfffff + 802046d8: 0d8080e7 jalr 216(ra) # 802037ac <filealloc> + 802046dc: 89aa mv s3,a0 + 802046de: c579 beqz a0,802047ac <sys_open+0x12e> + 802046e0: 00000097 auipc ra,0x0 + 802046e4: cd0080e7 jalr -816(ra) # 802043b0 <fdalloc> + 802046e8: 84aa mv s1,a0 + 802046ea: 0a054c63 bltz a0,802047a2 <sys_open+0x124> eunlock(ep); eput(ep); return -1; } if(!(ep->attribute & ATTR_DIRECTORY) && (omode & O_TRUNC)){ - 802046ec: 10094783 lbu a5,256(s2) - 802046f0: 8bc1 andi a5,a5,16 - 802046f2: e791 bnez a5,802046fe <sys_open+0x82> - 802046f4: ec442783 lw a5,-316(s0) - 802046f8: 4007f793 andi a5,a5,1024 - 802046fc: e7d1 bnez a5,80204788 <sys_open+0x10c> + 802046ee: 10094783 lbu a5,256(s2) + 802046f2: 8bc1 andi a5,a5,16 + 802046f4: e791 bnez a5,80204700 <sys_open+0x82> + 802046f6: ec442783 lw a5,-316(s0) + 802046fa: 4007f793 andi a5,a5,1024 + 802046fe: e7d1 bnez a5,8020478a <sys_open+0x10c> etrunc(ep); } f->type = FD_ENTRY; - 802046fe: 4789 li a5,2 - 80204700: 00f9a023 sw a5,0(s3) + 80204700: 4789 li a5,2 + 80204702: 00f9a023 sw a5,0(s3) f->off = (omode & O_APPEND) ? ep->file_size : 0; - 80204704: ec442783 lw a5,-316(s0) - 80204708: 0047f693 andi a3,a5,4 - 8020470c: 4701 li a4,0 - 8020470e: c299 beqz a3,80204714 <sys_open+0x98> - 80204710: 10892703 lw a4,264(s2) - 80204714: 02e9a023 sw a4,32(s3) + 80204706: ec442783 lw a5,-316(s0) + 8020470a: 0047f693 andi a3,a5,4 + 8020470e: 4701 li a4,0 + 80204710: c299 beqz a3,80204716 <sys_open+0x98> + 80204712: 10892703 lw a4,264(s2) + 80204716: 02e9a023 sw a4,32(s3) f->ep = ep; - 80204718: 0129bc23 sd s2,24(s3) + 8020471a: 0129bc23 sd s2,24(s3) f->readable = !(omode & O_WRONLY); - 8020471c: 0017c713 xori a4,a5,1 - 80204720: 8b05 andi a4,a4,1 - 80204722: 00e98423 sb a4,8(s3) + 8020471e: 0017c713 xori a4,a5,1 + 80204722: 8b05 andi a4,a4,1 + 80204724: 00e98423 sb a4,8(s3) f->writable = (omode & O_WRONLY) || (omode & O_RDWR); - 80204726: 8b8d andi a5,a5,3 - 80204728: 00f037b3 snez a5,a5 - 8020472c: 00f984a3 sb a5,9(s3) + 80204728: 8b8d andi a5,a5,3 + 8020472a: 00f037b3 snez a5,a5 + 8020472e: 00f984a3 sb a5,9(s3) eunlock(ep); - 80204730: 854a mv a0,s2 - 80204732: 00002097 auipc ra,0x2 - 80204736: b12080e7 jalr -1262(ra) # 80206244 <eunlock> + 80204732: 854a mv a0,s2 + 80204734: 00002097 auipc ra,0x2 + 80204738: b20080e7 jalr -1248(ra) # 80206254 <eunlock> return fd; - 8020473a: 8526 mv a0,s1 -} - 8020473c: 70f2 ld ra,312(sp) - 8020473e: 7452 ld s0,304(sp) - 80204740: 74b2 ld s1,296(sp) - 80204742: 7912 ld s2,288(sp) - 80204744: 69f2 ld s3,280(sp) - 80204746: 6131 addi sp,sp,320 - 80204748: 8082 ret + 8020473c: 8526 mv a0,s1 +} + 8020473e: 70f2 ld ra,312(sp) + 80204740: 7452 ld s0,304(sp) + 80204742: 74b2 ld s1,296(sp) + 80204744: 7912 ld s2,288(sp) + 80204746: 69f2 ld s3,280(sp) + 80204748: 6131 addi sp,sp,320 + 8020474a: 8082 ret if((ep = ename(path)) == NULL){ - 8020474a: ec840513 addi a0,s0,-312 - 8020474e: 00002097 auipc ra,0x2 - 80204752: 268080e7 jalr 616(ra) # 802069b6 <ename> - 80204756: 892a mv s2,a0 - 80204758: c131 beqz a0,8020479c <sys_open+0x120> + 8020474c: ec840513 addi a0,s0,-312 + 80204750: 00002097 auipc ra,0x2 + 80204754: 276080e7 jalr 630(ra) # 802069c6 <ename> + 80204758: 892a mv s2,a0 + 8020475a: c131 beqz a0,8020479e <sys_open+0x120> elock(ep); - 8020475a: 00002097 auipc ra,0x2 - 8020475e: ab4080e7 jalr -1356(ra) # 8020620e <elock> + 8020475c: 00002097 auipc ra,0x2 + 80204760: ac2080e7 jalr -1342(ra) # 8020621e <elock> if((ep->attribute & ATTR_DIRECTORY) && omode != O_RDONLY){ - 80204762: 10094783 lbu a5,256(s2) - 80204766: 8bc1 andi a5,a5,16 - 80204768: d7ad beqz a5,802046d2 <sys_open+0x56> - 8020476a: ec442783 lw a5,-316(s0) - 8020476e: d3b5 beqz a5,802046d2 <sys_open+0x56> + 80204764: 10094783 lbu a5,256(s2) + 80204768: 8bc1 andi a5,a5,16 + 8020476a: d7ad beqz a5,802046d4 <sys_open+0x56> + 8020476c: ec442783 lw a5,-316(s0) + 80204770: d3b5 beqz a5,802046d4 <sys_open+0x56> eunlock(ep); - 80204770: 854a mv a0,s2 - 80204772: 00002097 auipc ra,0x2 - 80204776: ad2080e7 jalr -1326(ra) # 80206244 <eunlock> + 80204772: 854a mv a0,s2 + 80204774: 00002097 auipc ra,0x2 + 80204778: ae0080e7 jalr -1312(ra) # 80206254 <eunlock> eput(ep); - 8020477a: 854a mv a0,s2 - 8020477c: 00002097 auipc ra,0x2 - 80204780: b16080e7 jalr -1258(ra) # 80206292 <eput> + 8020477c: 854a mv a0,s2 + 8020477e: 00002097 auipc ra,0x2 + 80204782: b24080e7 jalr -1244(ra) # 802062a2 <eput> return -1; - 80204784: 557d li a0,-1 - 80204786: bf5d j 8020473c <sys_open+0xc0> + 80204786: 557d li a0,-1 + 80204788: bf5d j 8020473e <sys_open+0xc0> etrunc(ep); - 80204788: 854a mv a0,s2 - 8020478a: 00002097 auipc ra,0x2 - 8020478e: a1a080e7 jalr -1510(ra) # 802061a4 <etrunc> - 80204792: b7b5 j 802046fe <sys_open+0x82> + 8020478a: 854a mv a0,s2 + 8020478c: 00002097 auipc ra,0x2 + 80204790: a28080e7 jalr -1496(ra) # 802061b4 <etrunc> + 80204794: b7b5 j 80204700 <sys_open+0x82> return -1; - 80204794: 557d li a0,-1 - 80204796: b75d j 8020473c <sys_open+0xc0> + 80204796: 557d li a0,-1 + 80204798: b75d j 8020473e <sys_open+0xc0> return -1; - 80204798: 557d li a0,-1 - 8020479a: b74d j 8020473c <sys_open+0xc0> + 8020479a: 557d li a0,-1 + 8020479c: b74d j 8020473e <sys_open+0xc0> return -1; - 8020479c: 557d li a0,-1 - 8020479e: bf79 j 8020473c <sys_open+0xc0> + 8020479e: 557d li a0,-1 + 802047a0: bf79 j 8020473e <sys_open+0xc0> fileclose(f); - 802047a0: 854e mv a0,s3 - 802047a2: fffff097 auipc ra,0xfffff - 802047a6: 0c4080e7 jalr 196(ra) # 80203866 <fileclose> + 802047a2: 854e mv a0,s3 + 802047a4: fffff097 auipc ra,0xfffff + 802047a8: 0c4080e7 jalr 196(ra) # 80203868 <fileclose> eunlock(ep); - 802047aa: 854a mv a0,s2 - 802047ac: 00002097 auipc ra,0x2 - 802047b0: a98080e7 jalr -1384(ra) # 80206244 <eunlock> + 802047ac: 854a mv a0,s2 + 802047ae: 00002097 auipc ra,0x2 + 802047b2: aa6080e7 jalr -1370(ra) # 80206254 <eunlock> eput(ep); - 802047b4: 854a mv a0,s2 - 802047b6: 00002097 auipc ra,0x2 - 802047ba: adc080e7 jalr -1316(ra) # 80206292 <eput> + 802047b6: 854a mv a0,s2 + 802047b8: 00002097 auipc ra,0x2 + 802047bc: aea080e7 jalr -1302(ra) # 802062a2 <eput> return -1; - 802047be: 557d li a0,-1 - 802047c0: bfb5 j 8020473c <sys_open+0xc0> + 802047c0: 557d li a0,-1 + 802047c2: bfb5 j 8020473e <sys_open+0xc0> -00000000802047c2 <sys_mkdir>: +00000000802047c4 <sys_mkdir>: uint64 sys_mkdir(void) { - 802047c2: 7169 addi sp,sp,-304 - 802047c4: f606 sd ra,296(sp) - 802047c6: f222 sd s0,288(sp) - 802047c8: ee26 sd s1,280(sp) - 802047ca: 1a00 addi s0,sp,304 + 802047c4: 7169 addi sp,sp,-304 + 802047c6: f606 sd ra,296(sp) + 802047c8: f222 sd s0,288(sp) + 802047ca: ee26 sd s1,280(sp) + 802047cc: 1a00 addi s0,sp,304 char path[FAT32_MAX_PATH]; struct dirent *ep; if(argstr(0, path, FAT32_MAX_PATH) < 0 || (ep = create(path, T_DIR, 0)) == 0){ - 802047cc: 10400613 li a2,260 - 802047d0: ed840593 addi a1,s0,-296 - 802047d4: 4501 li a0,0 - 802047d6: ffffe097 auipc ra,0xffffe - 802047da: 71a080e7 jalr 1818(ra) # 80202ef0 <argstr> + 802047ce: 10400613 li a2,260 + 802047d2: ed840593 addi a1,s0,-296 + 802047d6: 4501 li a0,0 + 802047d8: ffffe097 auipc ra,0xffffe + 802047dc: 71a080e7 jalr 1818(ra) # 80202ef2 <argstr> return -1; - 802047de: 57fd li a5,-1 + 802047e0: 57fd li a5,-1 if(argstr(0, path, FAT32_MAX_PATH) < 0 || (ep = create(path, T_DIR, 0)) == 0){ - 802047e0: 02054663 bltz a0,8020480c <sys_mkdir+0x4a> - 802047e4: 4601 li a2,0 - 802047e6: 4585 li a1,1 - 802047e8: ed840513 addi a0,s0,-296 - 802047ec: 00000097 auipc ra,0x0 - 802047f0: c04080e7 jalr -1020(ra) # 802043f0 <create> - 802047f4: 84aa mv s1,a0 - 802047f6: c10d beqz a0,80204818 <sys_mkdir+0x56> + 802047e2: 02054663 bltz a0,8020480e <sys_mkdir+0x4a> + 802047e6: 4601 li a2,0 + 802047e8: 4585 li a1,1 + 802047ea: ed840513 addi a0,s0,-296 + 802047ee: 00000097 auipc ra,0x0 + 802047f2: c04080e7 jalr -1020(ra) # 802043f2 <create> + 802047f6: 84aa mv s1,a0 + 802047f8: c10d beqz a0,8020481a <sys_mkdir+0x56> } eunlock(ep); - 802047f8: 00002097 auipc ra,0x2 - 802047fc: a4c080e7 jalr -1460(ra) # 80206244 <eunlock> + 802047fa: 00002097 auipc ra,0x2 + 802047fe: a5a080e7 jalr -1446(ra) # 80206254 <eunlock> eput(ep); - 80204800: 8526 mv a0,s1 - 80204802: 00002097 auipc ra,0x2 - 80204806: a90080e7 jalr -1392(ra) # 80206292 <eput> + 80204802: 8526 mv a0,s1 + 80204804: 00002097 auipc ra,0x2 + 80204808: a9e080e7 jalr -1378(ra) # 802062a2 <eput> return 0; - 8020480a: 4781 li a5,0 -} - 8020480c: 853e mv a0,a5 - 8020480e: 70b2 ld ra,296(sp) - 80204810: 7412 ld s0,288(sp) - 80204812: 64f2 ld s1,280(sp) - 80204814: 6155 addi sp,sp,304 - 80204816: 8082 ret + 8020480c: 4781 li a5,0 +} + 8020480e: 853e mv a0,a5 + 80204810: 70b2 ld ra,296(sp) + 80204812: 7412 ld s0,288(sp) + 80204814: 64f2 ld s1,280(sp) + 80204816: 6155 addi sp,sp,304 + 80204818: 8082 ret return -1; - 80204818: 57fd li a5,-1 - 8020481a: bfcd j 8020480c <sys_mkdir+0x4a> + 8020481a: 57fd li a5,-1 + 8020481c: bfcd j 8020480e <sys_mkdir+0x4a> -000000008020481c <sys_chdir>: +000000008020481e <sys_chdir>: uint64 sys_chdir(void) { - 8020481c: 7169 addi sp,sp,-304 - 8020481e: f606 sd ra,296(sp) - 80204820: f222 sd s0,288(sp) - 80204822: ee26 sd s1,280(sp) - 80204824: ea4a sd s2,272(sp) - 80204826: 1a00 addi s0,sp,304 + 8020481e: 7169 addi sp,sp,-304 + 80204820: f606 sd ra,296(sp) + 80204822: f222 sd s0,288(sp) + 80204824: ee26 sd s1,280(sp) + 80204826: ea4a sd s2,272(sp) + 80204828: 1a00 addi s0,sp,304 char path[FAT32_MAX_PATH]; struct dirent *ep; struct proc *p = myproc(); - 80204828: ffffd097 auipc ra,0xffffd - 8020482c: 214080e7 jalr 532(ra) # 80201a3c <myproc> - 80204830: 892a mv s2,a0 + 8020482a: ffffd097 auipc ra,0xffffd + 8020482e: 212080e7 jalr 530(ra) # 80201a3c <myproc> + 80204832: 892a mv s2,a0 if(argstr(0, path, FAT32_MAX_PATH) < 0 || (ep = ename(path)) == NULL){ - 80204832: 10400613 li a2,260 - 80204836: ed840593 addi a1,s0,-296 - 8020483a: 4501 li a0,0 - 8020483c: ffffe097 auipc ra,0xffffe - 80204840: 6b4080e7 jalr 1716(ra) # 80202ef0 <argstr> + 80204834: 10400613 li a2,260 + 80204838: ed840593 addi a1,s0,-296 + 8020483c: 4501 li a0,0 + 8020483e: ffffe097 auipc ra,0xffffe + 80204842: 6b4080e7 jalr 1716(ra) # 80202ef2 <argstr> return -1; - 80204844: 57fd li a5,-1 + 80204846: 57fd li a5,-1 if(argstr(0, path, FAT32_MAX_PATH) < 0 || (ep = ename(path)) == NULL){ - 80204846: 04054063 bltz a0,80204886 <sys_chdir+0x6a> - 8020484a: ed840513 addi a0,s0,-296 - 8020484e: 00002097 auipc ra,0x2 - 80204852: 168080e7 jalr 360(ra) # 802069b6 <ename> - 80204856: 84aa mv s1,a0 - 80204858: c931 beqz a0,802048ac <sys_chdir+0x90> + 80204848: 04054063 bltz a0,80204888 <sys_chdir+0x6a> + 8020484c: ed840513 addi a0,s0,-296 + 80204850: 00002097 auipc ra,0x2 + 80204854: 176080e7 jalr 374(ra) # 802069c6 <ename> + 80204858: 84aa mv s1,a0 + 8020485a: c931 beqz a0,802048ae <sys_chdir+0x90> } elock(ep); - 8020485a: 00002097 auipc ra,0x2 - 8020485e: 9b4080e7 jalr -1612(ra) # 8020620e <elock> + 8020485c: 00002097 auipc ra,0x2 + 80204860: 9c2080e7 jalr -1598(ra) # 8020621e <elock> if(!(ep->attribute & ATTR_DIRECTORY)){ - 80204862: 1004c783 lbu a5,256(s1) - 80204866: 8bc1 andi a5,a5,16 - 80204868: c795 beqz a5,80204894 <sys_chdir+0x78> + 80204864: 1004c783 lbu a5,256(s1) + 80204868: 8bc1 andi a5,a5,16 + 8020486a: c795 beqz a5,80204896 <sys_chdir+0x78> eunlock(ep); eput(ep); return -1; } eunlock(ep); - 8020486a: 8526 mv a0,s1 - 8020486c: 00002097 auipc ra,0x2 - 80204870: 9d8080e7 jalr -1576(ra) # 80206244 <eunlock> + 8020486c: 8526 mv a0,s1 + 8020486e: 00002097 auipc ra,0x2 + 80204872: 9e6080e7 jalr -1562(ra) # 80206254 <eunlock> eput(p->cwd); - 80204874: 15893503 ld a0,344(s2) - 80204878: 00002097 auipc ra,0x2 - 8020487c: a1a080e7 jalr -1510(ra) # 80206292 <eput> + 80204876: 15893503 ld a0,344(s2) + 8020487a: 00002097 auipc ra,0x2 + 8020487e: a28080e7 jalr -1496(ra) # 802062a2 <eput> p->cwd = ep; - 80204880: 14993c23 sd s1,344(s2) + 80204882: 14993c23 sd s1,344(s2) return 0; - 80204884: 4781 li a5,0 -} - 80204886: 853e mv a0,a5 - 80204888: 70b2 ld ra,296(sp) - 8020488a: 7412 ld s0,288(sp) - 8020488c: 64f2 ld s1,280(sp) - 8020488e: 6952 ld s2,272(sp) - 80204890: 6155 addi sp,sp,304 - 80204892: 8082 ret + 80204886: 4781 li a5,0 +} + 80204888: 853e mv a0,a5 + 8020488a: 70b2 ld ra,296(sp) + 8020488c: 7412 ld s0,288(sp) + 8020488e: 64f2 ld s1,280(sp) + 80204890: 6952 ld s2,272(sp) + 80204892: 6155 addi sp,sp,304 + 80204894: 8082 ret eunlock(ep); - 80204894: 8526 mv a0,s1 - 80204896: 00002097 auipc ra,0x2 - 8020489a: 9ae080e7 jalr -1618(ra) # 80206244 <eunlock> + 80204896: 8526 mv a0,s1 + 80204898: 00002097 auipc ra,0x2 + 8020489c: 9bc080e7 jalr -1604(ra) # 80206254 <eunlock> eput(ep); - 8020489e: 8526 mv a0,s1 - 802048a0: 00002097 auipc ra,0x2 - 802048a4: 9f2080e7 jalr -1550(ra) # 80206292 <eput> + 802048a0: 8526 mv a0,s1 + 802048a2: 00002097 auipc ra,0x2 + 802048a6: a00080e7 jalr -1536(ra) # 802062a2 <eput> return -1; - 802048a8: 57fd li a5,-1 - 802048aa: bff1 j 80204886 <sys_chdir+0x6a> + 802048aa: 57fd li a5,-1 + 802048ac: bff1 j 80204888 <sys_chdir+0x6a> return -1; - 802048ac: 57fd li a5,-1 - 802048ae: bfe1 j 80204886 <sys_chdir+0x6a> + 802048ae: 57fd li a5,-1 + 802048b0: bfe1 j 80204888 <sys_chdir+0x6a> -00000000802048b0 <sys_pipe>: +00000000802048b2 <sys_pipe>: uint64 sys_pipe(void) { - 802048b0: 7139 addi sp,sp,-64 - 802048b2: fc06 sd ra,56(sp) - 802048b4: f822 sd s0,48(sp) - 802048b6: f426 sd s1,40(sp) - 802048b8: 0080 addi s0,sp,64 + 802048b2: 7139 addi sp,sp,-64 + 802048b4: fc06 sd ra,56(sp) + 802048b6: f822 sd s0,48(sp) + 802048b8: f426 sd s1,40(sp) + 802048ba: 0080 addi s0,sp,64 uint64 fdarray; // user pointer to array of two integers struct file *rf, *wf; int fd0, fd1; struct proc *p = myproc(); - 802048ba: ffffd097 auipc ra,0xffffd - 802048be: 182080e7 jalr 386(ra) # 80201a3c <myproc> - 802048c2: 84aa mv s1,a0 + 802048bc: ffffd097 auipc ra,0xffffd + 802048c0: 180080e7 jalr 384(ra) # 80201a3c <myproc> + 802048c4: 84aa mv s1,a0 if(argaddr(0, &fdarray) < 0) - 802048c4: fd840593 addi a1,s0,-40 - 802048c8: 4501 li a0,0 - 802048ca: ffffe097 auipc ra,0xffffe - 802048ce: 604080e7 jalr 1540(ra) # 80202ece <argaddr> + 802048c6: fd840593 addi a1,s0,-40 + 802048ca: 4501 li a0,0 + 802048cc: ffffe097 auipc ra,0xffffe + 802048d0: 604080e7 jalr 1540(ra) # 80202ed0 <argaddr> return -1; - 802048d2: 57fd li a5,-1 + 802048d4: 57fd li a5,-1 if(argaddr(0, &fdarray) < 0) - 802048d4: 0c054e63 bltz a0,802049b0 <sys_pipe+0x100> + 802048d6: 0c054e63 bltz a0,802049b2 <sys_pipe+0x100> if(pipealloc(&rf, &wf) < 0) - 802048d8: fc840593 addi a1,s0,-56 - 802048dc: fd040513 addi a0,s0,-48 - 802048e0: fffff097 auipc ra,0xfffff - 802048e4: 2f8080e7 jalr 760(ra) # 80203bd8 <pipealloc> + 802048da: fc840593 addi a1,s0,-56 + 802048de: fd040513 addi a0,s0,-48 + 802048e2: fffff097 auipc ra,0xfffff + 802048e6: 2f8080e7 jalr 760(ra) # 80203bda <pipealloc> return -1; - 802048e8: 57fd li a5,-1 + 802048ea: 57fd li a5,-1 if(pipealloc(&rf, &wf) < 0) - 802048ea: 0c054363 bltz a0,802049b0 <sys_pipe+0x100> + 802048ec: 0c054363 bltz a0,802049b2 <sys_pipe+0x100> fd0 = -1; - 802048ee: fcf42223 sw a5,-60(s0) + 802048f0: fcf42223 sw a5,-60(s0) if((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0){ - 802048f2: fd043503 ld a0,-48(s0) - 802048f6: 00000097 auipc ra,0x0 - 802048fa: ab8080e7 jalr -1352(ra) # 802043ae <fdalloc> - 802048fe: fca42223 sw a0,-60(s0) - 80204902: 08054a63 bltz a0,80204996 <sys_pipe+0xe6> - 80204906: fc843503 ld a0,-56(s0) - 8020490a: 00000097 auipc ra,0x0 - 8020490e: aa4080e7 jalr -1372(ra) # 802043ae <fdalloc> - 80204912: fca42023 sw a0,-64(s0) - 80204916: 06054763 bltz a0,80204984 <sys_pipe+0xd4> + 802048f4: fd043503 ld a0,-48(s0) + 802048f8: 00000097 auipc ra,0x0 + 802048fc: ab8080e7 jalr -1352(ra) # 802043b0 <fdalloc> + 80204900: fca42223 sw a0,-60(s0) + 80204904: 08054a63 bltz a0,80204998 <sys_pipe+0xe6> + 80204908: fc843503 ld a0,-56(s0) + 8020490c: 00000097 auipc ra,0x0 + 80204910: aa4080e7 jalr -1372(ra) # 802043b0 <fdalloc> + 80204914: fca42023 sw a0,-64(s0) + 80204918: 06054763 bltz a0,80204986 <sys_pipe+0xd4> fileclose(wf); return -1; } // if(copyout(p->pagetable, fdarray, (char*)&fd0, sizeof(fd0)) < 0 || // copyout(p->pagetable, fdarray+sizeof(fd0), (char *)&fd1, sizeof(fd1)) < 0){ if(copyout2(fdarray, (char*)&fd0, sizeof(fd0)) < 0 || - 8020491a: 4611 li a2,4 - 8020491c: fc440593 addi a1,s0,-60 - 80204920: fd843503 ld a0,-40(s0) - 80204924: ffffd097 auipc ra,0xffffd - 80204928: a4e080e7 jalr -1458(ra) # 80201372 <copyout2> - 8020492c: 00054f63 bltz a0,8020494a <sys_pipe+0x9a> + 8020491c: 4611 li a2,4 + 8020491e: fc440593 addi a1,s0,-60 + 80204922: fd843503 ld a0,-40(s0) + 80204926: ffffd097 auipc ra,0xffffd + 8020492a: a4c080e7 jalr -1460(ra) # 80201372 <copyout2> + 8020492e: 00054f63 bltz a0,8020494c <sys_pipe+0x9a> copyout2(fdarray+sizeof(fd0), (char *)&fd1, sizeof(fd1)) < 0){ - 80204930: 4611 li a2,4 - 80204932: fc040593 addi a1,s0,-64 - 80204936: fd843503 ld a0,-40(s0) - 8020493a: 0511 addi a0,a0,4 - 8020493c: ffffd097 auipc ra,0xffffd - 80204940: a36080e7 jalr -1482(ra) # 80201372 <copyout2> + 80204932: 4611 li a2,4 + 80204934: fc040593 addi a1,s0,-64 + 80204938: fd843503 ld a0,-40(s0) + 8020493c: 0511 addi a0,a0,4 + 8020493e: ffffd097 auipc ra,0xffffd + 80204942: a34080e7 jalr -1484(ra) # 80201372 <copyout2> p->ofile[fd1] = 0; fileclose(rf); fileclose(wf); return -1; } return 0; - 80204944: 4781 li a5,0 + 80204946: 4781 li a5,0 if(copyout2(fdarray, (char*)&fd0, sizeof(fd0)) < 0 || - 80204946: 06055563 bgez a0,802049b0 <sys_pipe+0x100> + 80204948: 06055563 bgez a0,802049b2 <sys_pipe+0x100> p->ofile[fd0] = 0; - 8020494a: fc442783 lw a5,-60(s0) - 8020494e: 07e9 addi a5,a5,26 - 80204950: 078e slli a5,a5,0x3 - 80204952: 97a6 add a5,a5,s1 - 80204954: 0007b423 sd zero,8(a5) + 8020494c: fc442783 lw a5,-60(s0) + 80204950: 07e9 addi a5,a5,26 + 80204952: 078e slli a5,a5,0x3 + 80204954: 97a6 add a5,a5,s1 + 80204956: 0007b423 sd zero,8(a5) p->ofile[fd1] = 0; - 80204958: fc042783 lw a5,-64(s0) - 8020495c: 07e9 addi a5,a5,26 - 8020495e: 078e slli a5,a5,0x3 - 80204960: 00f48533 add a0,s1,a5 - 80204964: 00053423 sd zero,8(a0) + 8020495a: fc042783 lw a5,-64(s0) + 8020495e: 07e9 addi a5,a5,26 + 80204960: 078e slli a5,a5,0x3 + 80204962: 00f48533 add a0,s1,a5 + 80204966: 00053423 sd zero,8(a0) fileclose(rf); - 80204968: fd043503 ld a0,-48(s0) - 8020496c: fffff097 auipc ra,0xfffff - 80204970: efa080e7 jalr -262(ra) # 80203866 <fileclose> + 8020496a: fd043503 ld a0,-48(s0) + 8020496e: fffff097 auipc ra,0xfffff + 80204972: efa080e7 jalr -262(ra) # 80203868 <fileclose> fileclose(wf); - 80204974: fc843503 ld a0,-56(s0) - 80204978: fffff097 auipc ra,0xfffff - 8020497c: eee080e7 jalr -274(ra) # 80203866 <fileclose> + 80204976: fc843503 ld a0,-56(s0) + 8020497a: fffff097 auipc ra,0xfffff + 8020497e: eee080e7 jalr -274(ra) # 80203868 <fileclose> return -1; - 80204980: 57fd li a5,-1 - 80204982: a03d j 802049b0 <sys_pipe+0x100> + 80204982: 57fd li a5,-1 + 80204984: a03d j 802049b2 <sys_pipe+0x100> if(fd0 >= 0) - 80204984: fc442783 lw a5,-60(s0) - 80204988: 0007c763 bltz a5,80204996 <sys_pipe+0xe6> + 80204986: fc442783 lw a5,-60(s0) + 8020498a: 0007c763 bltz a5,80204998 <sys_pipe+0xe6> p->ofile[fd0] = 0; - 8020498c: 07e9 addi a5,a5,26 - 8020498e: 078e slli a5,a5,0x3 - 80204990: 97a6 add a5,a5,s1 - 80204992: 0007b423 sd zero,8(a5) + 8020498e: 07e9 addi a5,a5,26 + 80204990: 078e slli a5,a5,0x3 + 80204992: 97a6 add a5,a5,s1 + 80204994: 0007b423 sd zero,8(a5) fileclose(rf); - 80204996: fd043503 ld a0,-48(s0) - 8020499a: fffff097 auipc ra,0xfffff - 8020499e: ecc080e7 jalr -308(ra) # 80203866 <fileclose> + 80204998: fd043503 ld a0,-48(s0) + 8020499c: fffff097 auipc ra,0xfffff + 802049a0: ecc080e7 jalr -308(ra) # 80203868 <fileclose> fileclose(wf); - 802049a2: fc843503 ld a0,-56(s0) - 802049a6: fffff097 auipc ra,0xfffff - 802049aa: ec0080e7 jalr -320(ra) # 80203866 <fileclose> + 802049a4: fc843503 ld a0,-56(s0) + 802049a8: fffff097 auipc ra,0xfffff + 802049ac: ec0080e7 jalr -320(ra) # 80203868 <fileclose> return -1; - 802049ae: 57fd li a5,-1 + 802049b0: 57fd li a5,-1 } - 802049b0: 853e mv a0,a5 - 802049b2: 70e2 ld ra,56(sp) - 802049b4: 7442 ld s0,48(sp) - 802049b6: 74a2 ld s1,40(sp) - 802049b8: 6121 addi sp,sp,64 - 802049ba: 8082 ret + 802049b2: 853e mv a0,a5 + 802049b4: 70e2 ld ra,56(sp) + 802049b6: 7442 ld s0,48(sp) + 802049b8: 74a2 ld s1,40(sp) + 802049ba: 6121 addi sp,sp,64 + 802049bc: 8082 ret -00000000802049bc <sys_dev>: +00000000802049be <sys_dev>: // To open console device. uint64 sys_dev(void) { - 802049bc: 7179 addi sp,sp,-48 - 802049be: f406 sd ra,40(sp) - 802049c0: f022 sd s0,32(sp) - 802049c2: ec26 sd s1,24(sp) - 802049c4: 1800 addi s0,sp,48 + 802049be: 7179 addi sp,sp,-48 + 802049c0: f406 sd ra,40(sp) + 802049c2: f022 sd s0,32(sp) + 802049c4: ec26 sd s1,24(sp) + 802049c6: 1800 addi s0,sp,48 int fd, omode; int major, minor; struct file *f; if(argint(0, &omode) < 0 || argint(1, &major) < 0 || argint(2, &minor) < 0){ - 802049c6: fdc40593 addi a1,s0,-36 - 802049ca: 4501 li a0,0 - 802049cc: ffffe097 auipc ra,0xffffe - 802049d0: 4a0080e7 jalr 1184(ra) # 80202e6c <argint> - 802049d4: 08054a63 bltz a0,80204a68 <sys_dev+0xac> - 802049d8: fd840593 addi a1,s0,-40 - 802049dc: 4505 li a0,1 - 802049de: ffffe097 auipc ra,0xffffe - 802049e2: 48e080e7 jalr 1166(ra) # 80202e6c <argint> - 802049e6: 08054763 bltz a0,80204a74 <sys_dev+0xb8> - 802049ea: fd440593 addi a1,s0,-44 - 802049ee: 4509 li a0,2 - 802049f0: ffffe097 auipc ra,0xffffe - 802049f4: 47c080e7 jalr 1148(ra) # 80202e6c <argint> - 802049f8: 08054063 bltz a0,80204a78 <sys_dev+0xbc> + 802049c8: fdc40593 addi a1,s0,-36 + 802049cc: 4501 li a0,0 + 802049ce: ffffe097 auipc ra,0xffffe + 802049d2: 4a0080e7 jalr 1184(ra) # 80202e6e <argint> + 802049d6: 08054a63 bltz a0,80204a6a <sys_dev+0xac> + 802049da: fd840593 addi a1,s0,-40 + 802049de: 4505 li a0,1 + 802049e0: ffffe097 auipc ra,0xffffe + 802049e4: 48e080e7 jalr 1166(ra) # 80202e6e <argint> + 802049e8: 08054763 bltz a0,80204a76 <sys_dev+0xb8> + 802049ec: fd440593 addi a1,s0,-44 + 802049f0: 4509 li a0,2 + 802049f2: ffffe097 auipc ra,0xffffe + 802049f6: 47c080e7 jalr 1148(ra) # 80202e6e <argint> + 802049fa: 08054063 bltz a0,80204a7a <sys_dev+0xbc> return -1; } if(omode & O_CREATE){ - 802049fc: fdc42783 lw a5,-36(s0) - 80204a00: 2007f793 andi a5,a5,512 - 80204a04: ebb1 bnez a5,80204a58 <sys_dev+0x9c> + 802049fe: fdc42783 lw a5,-36(s0) + 80204a02: 2007f793 andi a5,a5,512 + 80204a06: ebb1 bnez a5,80204a5a <sys_dev+0x9c> panic("dev file on FAT"); } if(major < 0 || major >= NDEV) - 80204a06: fd842703 lw a4,-40(s0) - 80204a0a: 47a5 li a5,9 + 80204a08: fd842703 lw a4,-40(s0) + 80204a0c: 47a5 li a5,9 return -1; - 80204a0c: 557d li a0,-1 + 80204a0e: 557d li a0,-1 if(major < 0 || major >= NDEV) - 80204a0e: 04e7ee63 bltu a5,a4,80204a6a <sys_dev+0xae> + 80204a10: 04e7ee63 bltu a5,a4,80204a6c <sys_dev+0xae> if((f = filealloc()) == NULL || (fd = fdalloc(f)) < 0){ - 80204a12: fffff097 auipc ra,0xfffff - 80204a16: d98080e7 jalr -616(ra) # 802037aa <filealloc> - 80204a1a: 84aa mv s1,a0 - 80204a1c: c125 beqz a0,80204a7c <sys_dev+0xc0> - 80204a1e: 00000097 auipc ra,0x0 - 80204a22: 990080e7 jalr -1648(ra) # 802043ae <fdalloc> - 80204a26: 04054d63 bltz a0,80204a80 <sys_dev+0xc4> + 80204a14: fffff097 auipc ra,0xfffff + 80204a18: d98080e7 jalr -616(ra) # 802037ac <filealloc> + 80204a1c: 84aa mv s1,a0 + 80204a1e: c125 beqz a0,80204a7e <sys_dev+0xc0> + 80204a20: 00000097 auipc ra,0x0 + 80204a24: 990080e7 jalr -1648(ra) # 802043b0 <fdalloc> + 80204a28: 04054d63 bltz a0,80204a82 <sys_dev+0xc4> if(f) fileclose(f); return -1; } f->type = FD_DEVICE; - 80204a2a: 478d li a5,3 - 80204a2c: c09c sw a5,0(s1) + 80204a2c: 478d li a5,3 + 80204a2e: c09c sw a5,0(s1) f->off = 0; - 80204a2e: 0204a023 sw zero,32(s1) + 80204a30: 0204a023 sw zero,32(s1) f->ep = 0; - 80204a32: 0004bc23 sd zero,24(s1) + 80204a34: 0004bc23 sd zero,24(s1) f->major = major; - 80204a36: fd842783 lw a5,-40(s0) - 80204a3a: 02f49223 sh a5,36(s1) + 80204a38: fd842783 lw a5,-40(s0) + 80204a3c: 02f49223 sh a5,36(s1) f->readable = !(omode & O_WRONLY); - 80204a3e: fdc42783 lw a5,-36(s0) - 80204a42: 0017c713 xori a4,a5,1 - 80204a46: 8b05 andi a4,a4,1 - 80204a48: 00e48423 sb a4,8(s1) + 80204a40: fdc42783 lw a5,-36(s0) + 80204a44: 0017c713 xori a4,a5,1 + 80204a48: 8b05 andi a4,a4,1 + 80204a4a: 00e48423 sb a4,8(s1) f->writable = (omode & O_WRONLY) || (omode & O_RDWR); - 80204a4c: 8b8d andi a5,a5,3 - 80204a4e: 00f037b3 snez a5,a5 - 80204a52: 00f484a3 sb a5,9(s1) + 80204a4e: 8b8d andi a5,a5,3 + 80204a50: 00f037b3 snez a5,a5 + 80204a54: 00f484a3 sb a5,9(s1) return fd; - 80204a56: a811 j 80204a6a <sys_dev+0xae> + 80204a58: a811 j 80204a6c <sys_dev+0xae> panic("dev file on FAT"); - 80204a58: 00005517 auipc a0,0x5 - 80204a5c: 13050513 addi a0,a0,304 # 80209b88 <digits+0x808> - 80204a60: ffffb097 auipc ra,0xffffb - 80204a64: 6e4080e7 jalr 1764(ra) # 80200144 <panic> + 80204a5a: 00005517 auipc a0,0x5 + 80204a5e: 13650513 addi a0,a0,310 # 80209b90 <digits+0x810> + 80204a62: ffffb097 auipc ra,0xffffb + 80204a66: 6e2080e7 jalr 1762(ra) # 80200144 <panic> return -1; - 80204a68: 557d li a0,-1 + 80204a6a: 557d li a0,-1 } - 80204a6a: 70a2 ld ra,40(sp) - 80204a6c: 7402 ld s0,32(sp) - 80204a6e: 64e2 ld s1,24(sp) - 80204a70: 6145 addi sp,sp,48 - 80204a72: 8082 ret + 80204a6c: 70a2 ld ra,40(sp) + 80204a6e: 7402 ld s0,32(sp) + 80204a70: 64e2 ld s1,24(sp) + 80204a72: 6145 addi sp,sp,48 + 80204a74: 8082 ret return -1; - 80204a74: 557d li a0,-1 - 80204a76: bfd5 j 80204a6a <sys_dev+0xae> - 80204a78: 557d li a0,-1 - 80204a7a: bfc5 j 80204a6a <sys_dev+0xae> + 80204a76: 557d li a0,-1 + 80204a78: bfd5 j 80204a6c <sys_dev+0xae> + 80204a7a: 557d li a0,-1 + 80204a7c: bfc5 j 80204a6c <sys_dev+0xae> return -1; - 80204a7c: 557d li a0,-1 - 80204a7e: b7f5 j 80204a6a <sys_dev+0xae> + 80204a7e: 557d li a0,-1 + 80204a80: b7f5 j 80204a6c <sys_dev+0xae> fileclose(f); - 80204a80: 8526 mv a0,s1 - 80204a82: fffff097 auipc ra,0xfffff - 80204a86: de4080e7 jalr -540(ra) # 80203866 <fileclose> + 80204a82: 8526 mv a0,s1 + 80204a84: fffff097 auipc ra,0xfffff + 80204a88: de4080e7 jalr -540(ra) # 80203868 <fileclose> return -1; - 80204a8a: 557d li a0,-1 - 80204a8c: bff9 j 80204a6a <sys_dev+0xae> + 80204a8c: 557d li a0,-1 + 80204a8e: bff9 j 80204a6c <sys_dev+0xae> -0000000080204a8e <sys_readdir>: +0000000080204a90 <sys_readdir>: // To support ls command uint64 sys_readdir(void) { - 80204a8e: 1101 addi sp,sp,-32 - 80204a90: ec06 sd ra,24(sp) - 80204a92: e822 sd s0,16(sp) - 80204a94: 1000 addi s0,sp,32 + 80204a90: 1101 addi sp,sp,-32 + 80204a92: ec06 sd ra,24(sp) + 80204a94: e822 sd s0,16(sp) + 80204a96: 1000 addi s0,sp,32 struct file *f; uint64 p; if(argfd(0, 0, &f) < 0 || argaddr(1, &p) < 0) - 80204a96: fe840613 addi a2,s0,-24 - 80204a9a: 4581 li a1,0 - 80204a9c: 4501 li a0,0 - 80204a9e: 00000097 auipc ra,0x0 - 80204aa2: 8a8080e7 jalr -1880(ra) # 80204346 <argfd> + 80204a98: fe840613 addi a2,s0,-24 + 80204a9c: 4581 li a1,0 + 80204a9e: 4501 li a0,0 + 80204aa0: 00000097 auipc ra,0x0 + 80204aa4: 8a8080e7 jalr -1880(ra) # 80204348 <argfd> return -1; - 80204aa6: 57fd li a5,-1 + 80204aa8: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argaddr(1, &p) < 0) - 80204aa8: 02054563 bltz a0,80204ad2 <sys_readdir+0x44> - 80204aac: fe040593 addi a1,s0,-32 - 80204ab0: 4505 li a0,1 - 80204ab2: ffffe097 auipc ra,0xffffe - 80204ab6: 41c080e7 jalr 1052(ra) # 80202ece <argaddr> + 80204aaa: 02054563 bltz a0,80204ad4 <sys_readdir+0x44> + 80204aae: fe040593 addi a1,s0,-32 + 80204ab2: 4505 li a0,1 + 80204ab4: ffffe097 auipc ra,0xffffe + 80204ab8: 41c080e7 jalr 1052(ra) # 80202ed0 <argaddr> return -1; - 80204aba: 57fd li a5,-1 + 80204abc: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argaddr(1, &p) < 0) - 80204abc: 00054b63 bltz a0,80204ad2 <sys_readdir+0x44> + 80204abe: 00054b63 bltz a0,80204ad4 <sys_readdir+0x44> return dirnext(f, p); - 80204ac0: fe043583 ld a1,-32(s0) - 80204ac4: fe843503 ld a0,-24(s0) - 80204ac8: fffff097 auipc ra,0xfffff - 80204acc: 04a080e7 jalr 74(ra) # 80203b12 <dirnext> - 80204ad0: 87aa mv a5,a0 + 80204ac2: fe043583 ld a1,-32(s0) + 80204ac6: fe843503 ld a0,-24(s0) + 80204aca: fffff097 auipc ra,0xfffff + 80204ace: 04a080e7 jalr 74(ra) # 80203b14 <dirnext> + 80204ad2: 87aa mv a5,a0 } - 80204ad2: 853e mv a0,a5 - 80204ad4: 60e2 ld ra,24(sp) - 80204ad6: 6442 ld s0,16(sp) - 80204ad8: 6105 addi sp,sp,32 - 80204ada: 8082 ret + 80204ad4: 853e mv a0,a5 + 80204ad6: 60e2 ld ra,24(sp) + 80204ad8: 6442 ld s0,16(sp) + 80204ada: 6105 addi sp,sp,32 + 80204adc: 8082 ret -0000000080204adc <sys_getcwd>: +0000000080204ade <sys_getcwd>: } */ uint64 sys_getcwd(void) { - 80204adc: 714d addi sp,sp,-336 - 80204ade: e686 sd ra,328(sp) - 80204ae0: e2a2 sd s0,320(sp) - 80204ae2: fe26 sd s1,312(sp) - 80204ae4: fa4a sd s2,304(sp) - 80204ae6: f64e sd s3,296(sp) - 80204ae8: f252 sd s4,288(sp) - 80204aea: ee56 sd s5,280(sp) - 80204aec: 0a80 addi s0,sp,336 + 80204ade: 714d addi sp,sp,-336 + 80204ae0: e686 sd ra,328(sp) + 80204ae2: e2a2 sd s0,320(sp) + 80204ae4: fe26 sd s1,312(sp) + 80204ae6: fa4a sd s2,304(sp) + 80204ae8: f64e sd s3,296(sp) + 80204aea: f252 sd s4,288(sp) + 80204aec: ee56 sd s5,280(sp) + 80204aee: 0a80 addi s0,sp,336 char path[FAT32_MAX_PATH]; // 用于构建路径的缓冲区 char *s; // 指å‘路径å—符串的指针 int len; // 目录å的长度 // ä»Žç³»ç»Ÿè°ƒç”¨å‚æ•°ä¸æå– buf å’Œ size if (argaddr(0, &buf_addr) < 0 || argint(1, (int *)&size) < 0) { - 80204aee: fb840593 addi a1,s0,-72 - 80204af2: 4501 li a0,0 - 80204af4: ffffe097 auipc ra,0xffffe - 80204af8: 3da080e7 jalr 986(ra) # 80202ece <argaddr> + 80204af0: fb840593 addi a1,s0,-72 + 80204af4: 4501 li a0,0 + 80204af6: ffffe097 auipc ra,0xffffe + 80204afa: 3da080e7 jalr 986(ra) # 80202ed0 <argaddr> return -1; // æå–傿•°å¤±è´¥ï¼Œè¿”回错误 - 80204afc: 57fd li a5,-1 + 80204afe: 57fd li a5,-1 if (argaddr(0, &buf_addr) < 0 || argint(1, (int *)&size) < 0) { - 80204afe: 0c054263 bltz a0,80204bc2 <sys_getcwd+0xe6> - 80204b02: fb440593 addi a1,s0,-76 - 80204b06: 4505 li a0,1 - 80204b08: ffffe097 auipc ra,0xffffe - 80204b0c: 364080e7 jalr 868(ra) # 80202e6c <argint> - 80204b10: 0a054663 bltz a0,80204bbc <sys_getcwd+0xe0> + 80204b00: 0c054263 bltz a0,80204bc4 <sys_getcwd+0xe6> + 80204b04: fb440593 addi a1,s0,-76 + 80204b08: 4505 li a0,1 + 80204b0a: ffffe097 auipc ra,0xffffe + 80204b0e: 364080e7 jalr 868(ra) # 80202e6e <argint> + 80204b12: 0a054663 bltz a0,80204bbe <sys_getcwd+0xe0> } // 如果用户æä¾›çš„缓冲区地å€ä¸º 0(NULL),直接返回错误 if (buf_addr == 0) { - 80204b14: fb843703 ld a4,-72(s0) + 80204b16: fb843703 ld a4,-72(s0) return -1; - 80204b18: 57fd li a5,-1 + 80204b1a: 57fd li a5,-1 if (buf_addr == 0) { - 80204b1a: c745 beqz a4,80204bc2 <sys_getcwd+0xe6> + 80204b1c: c745 beqz a4,80204bc4 <sys_getcwd+0xe6> } // 获å–当å‰è¿›ç¨‹çš„当å‰å·¥ä½œç›®å½• struct dirent *de = myproc()->cwd; - 80204b1c: ffffd097 auipc ra,0xffffd - 80204b20: f20080e7 jalr -224(ra) # 80201a3c <myproc> - 80204b24: 15853483 ld s1,344(a0) + 80204b1e: ffffd097 auipc ra,0xffffd + 80204b22: f1e080e7 jalr -226(ra) # 80201a3c <myproc> + 80204b26: 15853483 ld s1,344(a0) // å¤„ç†æ ¹ç›®å½• if (de->parent == NULL) { - 80204b28: 1204b783 ld a5,288(s1) - 80204b2c: cbb5 beqz a5,80204ba0 <sys_getcwd+0xc4> + 80204b2a: 1204b783 ld a5,288(s1) + 80204b2e: cbb5 beqz a5,80204ba2 <sys_getcwd+0xc4> s = path; // æŒ‡å‘ path } // 处ç†éžæ ¹ç›®å½• else { s = path + FAT32_MAX_PATH - 1; // 指å‘缓冲区末尾 *s = '\0'; // æ·»åŠ å—符串结æŸç¬¦ - 80204b2e: fa0409a3 sb zero,-77(s0) + 80204b30: fa0409a3 sb zero,-77(s0) s = path + FAT32_MAX_PATH - 1; // 指å‘缓冲区末尾 - 80204b32: fb340993 addi s3,s0,-77 + 80204b34: fb340993 addi s3,s0,-77 while (de->parent) { // é€çº§å‘上é历父目录 len = strlen(de->filename); // 获å–当å‰ç›®å½•å的长度 s -= len; // 移动指针,为目录å腾出空间 if (s <= path) { // 检查是å¦è¶…出缓冲区 - 80204b36: eb040a13 addi s4,s0,-336 + 80204b38: eb040a13 addi s4,s0,-336 return -1; // 路径过长,返回错误 } strncpy(s, de->filename, len); // å¤åˆ¶ç›®å½•å *--s = '/'; // æ·»åŠ æ–œæ - 80204b3a: 02f00a93 li s5,47 + 80204b3c: 02f00a93 li s5,47 len = strlen(de->filename); // 获å–当å‰ç›®å½•å的长度 - 80204b3e: 8526 mv a0,s1 - 80204b40: ffffc097 auipc ra,0xffffc - 80204b44: da6080e7 jalr -602(ra) # 802008e6 <strlen> - 80204b48: 862a mv a2,a0 + 80204b40: 8526 mv a0,s1 + 80204b42: ffffc097 auipc ra,0xffffc + 80204b46: da4080e7 jalr -604(ra) # 802008e6 <strlen> + 80204b4a: 862a mv a2,a0 s -= len; // 移动指针,为目录å腾出空间 - 80204b4a: 40a98933 sub s2,s3,a0 + 80204b4c: 40a98933 sub s2,s3,a0 if (s <= path) { // 检查是å¦è¶…出缓冲区 - 80204b4e: 072a7963 bgeu s4,s2,80204bc0 <sys_getcwd+0xe4> + 80204b50: 072a7963 bgeu s4,s2,80204bc2 <sys_getcwd+0xe4> strncpy(s, de->filename, len); // å¤åˆ¶ç›®å½•å - 80204b52: 85a6 mv a1,s1 - 80204b54: 854a mv a0,s2 - 80204b56: ffffc097 auipc ra,0xffffc - 80204b5a: d20080e7 jalr -736(ra) # 80200876 <strncpy> + 80204b54: 85a6 mv a1,s1 + 80204b56: 854a mv a0,s2 + 80204b58: ffffc097 auipc ra,0xffffc + 80204b5c: d1e080e7 jalr -738(ra) # 80200876 <strncpy> *--s = '/'; // æ·»åŠ æ–œæ - 80204b5e: fff90993 addi s3,s2,-1 - 80204b62: ff590fa3 sb s5,-1(s2) + 80204b60: fff90993 addi s3,s2,-1 + 80204b64: ff590fa3 sb s5,-1(s2) de = de->parent; // 移动到父目录 - 80204b66: 1204b483 ld s1,288(s1) + 80204b68: 1204b483 ld s1,288(s1) while (de->parent) { // é€çº§å‘上é历父目录 - 80204b6a: 1204b783 ld a5,288(s1) - 80204b6e: fbe1 bnez a5,80204b3e <sys_getcwd+0x62> + 80204b6c: 1204b783 ld a5,288(s1) + 80204b70: fbe1 bnez a5,80204b40 <sys_getcwd+0x62> } } // 计算路径长度 int path_len = strlen(s); - 80204b70: 854e mv a0,s3 - 80204b72: ffffc097 auipc ra,0xffffc - 80204b76: d74080e7 jalr -652(ra) # 802008e6 <strlen> + 80204b72: 854e mv a0,s3 + 80204b74: ffffc097 auipc ra,0xffffc + 80204b78: d72080e7 jalr -654(ra) # 802008e6 <strlen> // 检查用户æä¾›çš„ç¼“å†²åŒºå¤§å°æ˜¯å¦è¶³å¤Ÿ if (size < path_len + 1) { - 80204b7a: fb442703 lw a4,-76(s0) + 80204b7c: fb442703 lw a4,-76(s0) return -1; // 缓冲区ä¸è¶³ï¼Œè¿”回错误 - 80204b7e: 57fd li a5,-1 + 80204b80: 57fd li a5,-1 if (size < path_len + 1) { - 80204b80: 04e55163 bge a0,a4,80204bc2 <sys_getcwd+0xe6> + 80204b82: 04e55163 bge a0,a4,80204bc4 <sys_getcwd+0xe6> } // 将路径å¤åˆ¶åˆ°ç”¨æˆ·æä¾›çš„缓冲区 if (copyout2(buf_addr, s, path_len + 1) < 0) { - 80204b84: 0015061b addiw a2,a0,1 - 80204b88: 85ce mv a1,s3 - 80204b8a: fb843503 ld a0,-72(s0) - 80204b8e: ffffc097 auipc ra,0xffffc - 80204b92: 7e4080e7 jalr 2020(ra) # 80201372 <copyout2> - 80204b96: 04054063 bltz a0,80204bd6 <sys_getcwd+0xfa> + 80204b86: 0015061b addiw a2,a0,1 + 80204b8a: 85ce mv a1,s3 + 80204b8c: fb843503 ld a0,-72(s0) + 80204b90: ffffc097 auipc ra,0xffffc + 80204b94: 7e2080e7 jalr 2018(ra) # 80201372 <copyout2> + 80204b98: 04054063 bltz a0,80204bd8 <sys_getcwd+0xfa> return -1; // å¤åˆ¶å¤±è´¥ } return buf_addr; // æˆåŠŸ - 80204b9a: fb843783 ld a5,-72(s0) - 80204b9e: a015 j 80204bc2 <sys_getcwd+0xe6> + 80204b9c: fb843783 ld a5,-72(s0) + 80204ba0: a015 j 80204bc4 <sys_getcwd+0xe6> strncpy(path, "/", FAT32_MAX_PATH); // å°†æ ¹ç›®å½•å¤åˆ¶åˆ° path - 80204ba0: 10400613 li a2,260 - 80204ba4: 00005597 auipc a1,0x5 - 80204ba8: a8c58593 addi a1,a1,-1396 # 80209630 <digits+0x2b0> - 80204bac: eb040993 addi s3,s0,-336 - 80204bb0: 854e mv a0,s3 - 80204bb2: ffffc097 auipc ra,0xffffc - 80204bb6: cc4080e7 jalr -828(ra) # 80200876 <strncpy> + 80204ba2: 10400613 li a2,260 + 80204ba6: 00005597 auipc a1,0x5 + 80204baa: a8a58593 addi a1,a1,-1398 # 80209630 <digits+0x2b0> + 80204bae: eb040993 addi s3,s0,-336 + 80204bb2: 854e mv a0,s3 + 80204bb4: ffffc097 auipc ra,0xffffc + 80204bb8: cc2080e7 jalr -830(ra) # 80200876 <strncpy> s = path; // æŒ‡å‘ path - 80204bba: bf5d j 80204b70 <sys_getcwd+0x94> + 80204bbc: bf5d j 80204b72 <sys_getcwd+0x94> return -1; // æå–傿•°å¤±è´¥ï¼Œè¿”回错误 - 80204bbc: 57fd li a5,-1 - 80204bbe: a011 j 80204bc2 <sys_getcwd+0xe6> + 80204bbe: 57fd li a5,-1 + 80204bc0: a011 j 80204bc4 <sys_getcwd+0xe6> return -1; // 路径过长,返回错误 - 80204bc0: 57fd li a5,-1 -} - 80204bc2: 853e mv a0,a5 - 80204bc4: 60b6 ld ra,328(sp) - 80204bc6: 6416 ld s0,320(sp) - 80204bc8: 74f2 ld s1,312(sp) - 80204bca: 7952 ld s2,304(sp) - 80204bcc: 79b2 ld s3,296(sp) - 80204bce: 7a12 ld s4,288(sp) - 80204bd0: 6af2 ld s5,280(sp) - 80204bd2: 6171 addi sp,sp,336 - 80204bd4: 8082 ret + 80204bc2: 57fd li a5,-1 +} + 80204bc4: 853e mv a0,a5 + 80204bc6: 60b6 ld ra,328(sp) + 80204bc8: 6416 ld s0,320(sp) + 80204bca: 74f2 ld s1,312(sp) + 80204bcc: 7952 ld s2,304(sp) + 80204bce: 79b2 ld s3,296(sp) + 80204bd0: 7a12 ld s4,288(sp) + 80204bd2: 6af2 ld s5,280(sp) + 80204bd4: 6171 addi sp,sp,336 + 80204bd6: 8082 ret return -1; // å¤åˆ¶å¤±è´¥ - 80204bd6: 57fd li a5,-1 - 80204bd8: b7ed j 80204bc2 <sys_getcwd+0xe6> + 80204bd8: 57fd li a5,-1 + 80204bda: b7ed j 80204bc4 <sys_getcwd+0xe6> -0000000080204bda <sys_remove>: +0000000080204bdc <sys_remove>: return ret == -1; } uint64 sys_remove(void) { - 80204bda: d6010113 addi sp,sp,-672 - 80204bde: 28113c23 sd ra,664(sp) - 80204be2: 28813823 sd s0,656(sp) - 80204be6: 28913423 sd s1,648(sp) - 80204bea: 1500 addi s0,sp,672 + 80204bdc: d6010113 addi sp,sp,-672 + 80204be0: 28113c23 sd ra,664(sp) + 80204be4: 28813823 sd s0,656(sp) + 80204be8: 28913423 sd s1,648(sp) + 80204bec: 1500 addi s0,sp,672 char path[FAT32_MAX_PATH]; struct dirent *ep; int len; if((len = argstr(0, path, FAT32_MAX_PATH)) <= 0) - 80204bec: 10400613 li a2,260 - 80204bf0: ed840593 addi a1,s0,-296 - 80204bf4: 4501 li a0,0 - 80204bf6: ffffe097 auipc ra,0xffffe - 80204bfa: 2fa080e7 jalr 762(ra) # 80202ef0 <argstr> - 80204bfe: 0ea05a63 blez a0,80204cf2 <sys_remove+0x118> + 80204bee: 10400613 li a2,260 + 80204bf2: ed840593 addi a1,s0,-296 + 80204bf6: 4501 li a0,0 + 80204bf8: ffffe097 auipc ra,0xffffe + 80204bfc: 2fa080e7 jalr 762(ra) # 80202ef2 <argstr> + 80204c00: 0ea05a63 blez a0,80204cf4 <sys_remove+0x118> return -1; char *s = path + len - 1; - 80204c02: 157d addi a0,a0,-1 - 80204c04: ed840713 addi a4,s0,-296 - 80204c08: 00a707b3 add a5,a4,a0 + 80204c04: 157d addi a0,a0,-1 + 80204c06: ed840713 addi a4,s0,-296 + 80204c0a: 00a707b3 add a5,a4,a0 while (s >= path && *s == '/') { - 80204c0c: 02f00693 li a3,47 - 80204c10: 863a mv a2,a4 - 80204c12: 00e7e963 bltu a5,a4,80204c24 <sys_remove+0x4a> - 80204c16: 0007c703 lbu a4,0(a5) - 80204c1a: 08d71a63 bne a4,a3,80204cae <sys_remove+0xd4> + 80204c0e: 02f00693 li a3,47 + 80204c12: 863a mv a2,a4 + 80204c14: 00e7e963 bltu a5,a4,80204c26 <sys_remove+0x4a> + 80204c18: 0007c703 lbu a4,0(a5) + 80204c1c: 08d71a63 bne a4,a3,80204cb0 <sys_remove+0xd4> s--; - 80204c1e: 17fd addi a5,a5,-1 + 80204c20: 17fd addi a5,a5,-1 while (s >= path && *s == '/') { - 80204c20: fec7fbe3 bgeu a5,a2,80204c16 <sys_remove+0x3c> + 80204c22: fec7fbe3 bgeu a5,a2,80204c18 <sys_remove+0x3c> } if (s >= path && *s == '.' && (s == path || *--s == '/')) { return -1; } if((ep = ename(path)) == NULL){ - 80204c24: ed840513 addi a0,s0,-296 - 80204c28: 00002097 auipc ra,0x2 - 80204c2c: d8e080e7 jalr -626(ra) # 802069b6 <ename> - 80204c30: 84aa mv s1,a0 - 80204c32: c561 beqz a0,80204cfa <sys_remove+0x120> + 80204c26: ed840513 addi a0,s0,-296 + 80204c2a: 00002097 auipc ra,0x2 + 80204c2e: d9c080e7 jalr -612(ra) # 802069c6 <ename> + 80204c32: 84aa mv s1,a0 + 80204c34: c561 beqz a0,80204cfc <sys_remove+0x120> return -1; } elock(ep); - 80204c34: 00001097 auipc ra,0x1 - 80204c38: 5da080e7 jalr 1498(ra) # 8020620e <elock> + 80204c36: 00001097 auipc ra,0x1 + 80204c3a: 5e8080e7 jalr 1512(ra) # 8020621e <elock> if((ep->attribute & ATTR_DIRECTORY) && !isdirempty(ep)){ - 80204c3c: 1004c783 lbu a5,256(s1) - 80204c40: 8bc1 andi a5,a5,16 - 80204c42: c38d beqz a5,80204c64 <sys_remove+0x8a> + 80204c3e: 1004c783 lbu a5,256(s1) + 80204c42: 8bc1 andi a5,a5,16 + 80204c44: c38d beqz a5,80204c66 <sys_remove+0x8a> ep.valid = 0; - 80204c44: e8041323 sh zero,-378(s0) + 80204c46: e8041323 sh zero,-378(s0) ret = enext(dp, &ep, 2 * 32, &count); // skip the "." and ".." - 80204c48: d6c40693 addi a3,s0,-660 - 80204c4c: 04000613 li a2,64 - 80204c50: d7040593 addi a1,s0,-656 - 80204c54: 8526 mv a0,s1 - 80204c56: 00001097 auipc ra,0x1 - 80204c5a: 7bc080e7 jalr 1980(ra) # 80206412 <enext> + 80204c4a: d6c40693 addi a3,s0,-660 + 80204c4e: 04000613 li a2,64 + 80204c52: d7040593 addi a1,s0,-656 + 80204c56: 8526 mv a0,s1 + 80204c58: 00001097 auipc ra,0x1 + 80204c5c: 7ca080e7 jalr 1994(ra) # 80206422 <enext> if((ep->attribute & ATTR_DIRECTORY) && !isdirempty(ep)){ - 80204c5e: 57fd li a5,-1 - 80204c60: 06f51d63 bne a0,a5,80204cda <sys_remove+0x100> + 80204c60: 57fd li a5,-1 + 80204c62: 06f51d63 bne a0,a5,80204cdc <sys_remove+0x100> eunlock(ep); eput(ep); return -1; } elock(ep->parent); // Will this lead to deadlock? - 80204c64: 1204b503 ld a0,288(s1) - 80204c68: 00001097 auipc ra,0x1 - 80204c6c: 5a6080e7 jalr 1446(ra) # 8020620e <elock> + 80204c66: 1204b503 ld a0,288(s1) + 80204c6a: 00001097 auipc ra,0x1 + 80204c6e: 5b4080e7 jalr 1460(ra) # 8020621e <elock> eremove(ep); - 80204c70: 8526 mv a0,s1 - 80204c72: 00001097 auipc ra,0x1 - 80204c76: 468080e7 jalr 1128(ra) # 802060da <eremove> + 80204c72: 8526 mv a0,s1 + 80204c74: 00001097 auipc ra,0x1 + 80204c78: 476080e7 jalr 1142(ra) # 802060ea <eremove> eunlock(ep->parent); - 80204c7a: 1204b503 ld a0,288(s1) - 80204c7e: 00001097 auipc ra,0x1 - 80204c82: 5c6080e7 jalr 1478(ra) # 80206244 <eunlock> + 80204c7c: 1204b503 ld a0,288(s1) + 80204c80: 00001097 auipc ra,0x1 + 80204c84: 5d4080e7 jalr 1492(ra) # 80206254 <eunlock> eunlock(ep); - 80204c86: 8526 mv a0,s1 - 80204c88: 00001097 auipc ra,0x1 - 80204c8c: 5bc080e7 jalr 1468(ra) # 80206244 <eunlock> + 80204c88: 8526 mv a0,s1 + 80204c8a: 00001097 auipc ra,0x1 + 80204c8e: 5ca080e7 jalr 1482(ra) # 80206254 <eunlock> eput(ep); - 80204c90: 8526 mv a0,s1 - 80204c92: 00001097 auipc ra,0x1 - 80204c96: 600080e7 jalr 1536(ra) # 80206292 <eput> + 80204c92: 8526 mv a0,s1 + 80204c94: 00001097 auipc ra,0x1 + 80204c98: 60e080e7 jalr 1550(ra) # 802062a2 <eput> return 0; - 80204c9a: 4501 li a0,0 + 80204c9c: 4501 li a0,0 } - 80204c9c: 29813083 ld ra,664(sp) - 80204ca0: 29013403 ld s0,656(sp) - 80204ca4: 28813483 ld s1,648(sp) - 80204ca8: 2a010113 addi sp,sp,672 - 80204cac: 8082 ret + 80204c9e: 29813083 ld ra,664(sp) + 80204ca2: 29013403 ld s0,656(sp) + 80204ca6: 28813483 ld s1,648(sp) + 80204caa: 2a010113 addi sp,sp,672 + 80204cae: 8082 ret if (s >= path && *s == '.' && (s == path || *--s == '/')) { - 80204cae: ed840713 addi a4,s0,-296 - 80204cb2: f6e7e9e3 bltu a5,a4,80204c24 <sys_remove+0x4a> - 80204cb6: 0007c683 lbu a3,0(a5) - 80204cba: 02e00713 li a4,46 - 80204cbe: f6e693e3 bne a3,a4,80204c24 <sys_remove+0x4a> - 80204cc2: ed840713 addi a4,s0,-296 - 80204cc6: 02e78863 beq a5,a4,80204cf6 <sys_remove+0x11c> - 80204cca: fff7c703 lbu a4,-1(a5) - 80204cce: 02f00793 li a5,47 - 80204cd2: f4f719e3 bne a4,a5,80204c24 <sys_remove+0x4a> + 80204cb0: ed840713 addi a4,s0,-296 + 80204cb4: f6e7e9e3 bltu a5,a4,80204c26 <sys_remove+0x4a> + 80204cb8: 0007c683 lbu a3,0(a5) + 80204cbc: 02e00713 li a4,46 + 80204cc0: f6e693e3 bne a3,a4,80204c26 <sys_remove+0x4a> + 80204cc4: ed840713 addi a4,s0,-296 + 80204cc8: 02e78863 beq a5,a4,80204cf8 <sys_remove+0x11c> + 80204ccc: fff7c703 lbu a4,-1(a5) + 80204cd0: 02f00793 li a5,47 + 80204cd4: f4f719e3 bne a4,a5,80204c26 <sys_remove+0x4a> return -1; - 80204cd6: 557d li a0,-1 - 80204cd8: b7d1 j 80204c9c <sys_remove+0xc2> + 80204cd8: 557d li a0,-1 + 80204cda: b7d1 j 80204c9e <sys_remove+0xc2> eunlock(ep); - 80204cda: 8526 mv a0,s1 - 80204cdc: 00001097 auipc ra,0x1 - 80204ce0: 568080e7 jalr 1384(ra) # 80206244 <eunlock> + 80204cdc: 8526 mv a0,s1 + 80204cde: 00001097 auipc ra,0x1 + 80204ce2: 576080e7 jalr 1398(ra) # 80206254 <eunlock> eput(ep); - 80204ce4: 8526 mv a0,s1 - 80204ce6: 00001097 auipc ra,0x1 - 80204cea: 5ac080e7 jalr 1452(ra) # 80206292 <eput> + 80204ce6: 8526 mv a0,s1 + 80204ce8: 00001097 auipc ra,0x1 + 80204cec: 5ba080e7 jalr 1466(ra) # 802062a2 <eput> return -1; - 80204cee: 557d li a0,-1 - 80204cf0: b775 j 80204c9c <sys_remove+0xc2> + 80204cf0: 557d li a0,-1 + 80204cf2: b775 j 80204c9e <sys_remove+0xc2> return -1; - 80204cf2: 557d li a0,-1 - 80204cf4: b765 j 80204c9c <sys_remove+0xc2> + 80204cf4: 557d li a0,-1 + 80204cf6: b765 j 80204c9e <sys_remove+0xc2> return -1; - 80204cf6: 557d li a0,-1 - 80204cf8: b755 j 80204c9c <sys_remove+0xc2> + 80204cf8: 557d li a0,-1 + 80204cfa: b755 j 80204c9e <sys_remove+0xc2> return -1; - 80204cfa: 557d li a0,-1 - 80204cfc: b745 j 80204c9c <sys_remove+0xc2> + 80204cfc: 557d li a0,-1 + 80204cfe: b745 j 80204c9e <sys_remove+0xc2> -0000000080204cfe <sys_rename>: +0000000080204d00 <sys_rename>: // Must hold too many locks at a time! It's possible to raise a deadlock. // Because this op takes some steps, we can't promise uint64 sys_rename(void) { - 80204cfe: c4010113 addi sp,sp,-960 - 80204d02: 3a113c23 sd ra,952(sp) - 80204d06: 3a813823 sd s0,944(sp) - 80204d0a: 3a913423 sd s1,936(sp) - 80204d0e: 3b213023 sd s2,928(sp) - 80204d12: 39313c23 sd s3,920(sp) - 80204d16: 39413823 sd s4,912(sp) - 80204d1a: 0780 addi s0,sp,960 + 80204d00: c4010113 addi sp,sp,-960 + 80204d04: 3a113c23 sd ra,952(sp) + 80204d08: 3a813823 sd s0,944(sp) + 80204d0c: 3a913423 sd s1,936(sp) + 80204d10: 3b213023 sd s2,928(sp) + 80204d14: 39313c23 sd s3,920(sp) + 80204d18: 39413823 sd s4,912(sp) + 80204d1c: 0780 addi s0,sp,960 char old[FAT32_MAX_PATH], new[FAT32_MAX_PATH]; if (argstr(0, old, FAT32_MAX_PATH) < 0 || argstr(1, new, FAT32_MAX_PATH) < 0) { - 80204d1c: 10400613 li a2,260 - 80204d20: ec840593 addi a1,s0,-312 - 80204d24: 4501 li a0,0 - 80204d26: ffffe097 auipc ra,0xffffe - 80204d2a: 1ca080e7 jalr 458(ra) # 80202ef0 <argstr> + 80204d1e: 10400613 li a2,260 + 80204d22: ec840593 addi a1,s0,-312 + 80204d26: 4501 li a0,0 + 80204d28: ffffe097 auipc ra,0xffffe + 80204d2c: 1ca080e7 jalr 458(ra) # 80202ef2 <argstr> return -1; - 80204d2e: 57fd li a5,-1 + 80204d30: 57fd li a5,-1 if (argstr(0, old, FAT32_MAX_PATH) < 0 || argstr(1, new, FAT32_MAX_PATH) < 0) { - 80204d30: 0c054d63 bltz a0,80204e0a <sys_rename+0x10c> - 80204d34: 10400613 li a2,260 - 80204d38: dc040593 addi a1,s0,-576 - 80204d3c: 4505 li a0,1 - 80204d3e: ffffe097 auipc ra,0xffffe - 80204d42: 1b2080e7 jalr 434(ra) # 80202ef0 <argstr> + 80204d32: 0c054d63 bltz a0,80204e0c <sys_rename+0x10c> + 80204d36: 10400613 li a2,260 + 80204d3a: dc040593 addi a1,s0,-576 + 80204d3e: 4505 li a0,1 + 80204d40: ffffe097 auipc ra,0xffffe + 80204d44: 1b2080e7 jalr 434(ra) # 80202ef2 <argstr> return -1; - 80204d46: 57fd li a5,-1 + 80204d48: 57fd li a5,-1 if (argstr(0, old, FAT32_MAX_PATH) < 0 || argstr(1, new, FAT32_MAX_PATH) < 0) { - 80204d48: 0c054163 bltz a0,80204e0a <sys_rename+0x10c> + 80204d4a: 0c054163 bltz a0,80204e0c <sys_rename+0x10c> } struct dirent *src = NULL, *dst = NULL, *pdst = NULL; int srclock = 0; char *name; if ((src = ename(old)) == NULL || (pdst = enameparent(new, old)) == NULL - 80204d4c: ec840513 addi a0,s0,-312 - 80204d50: 00002097 auipc ra,0x2 - 80204d54: c66080e7 jalr -922(ra) # 802069b6 <ename> - 80204d58: 84aa mv s1,a0 - 80204d5a: 1c050963 beqz a0,80204f2c <sys_rename+0x22e> - 80204d5e: ec840593 addi a1,s0,-312 - 80204d62: dc040513 addi a0,s0,-576 - 80204d66: 00002097 auipc ra,0x2 - 80204d6a: c6e080e7 jalr -914(ra) # 802069d4 <enameparent> - 80204d6e: 892a mv s2,a0 - 80204d70: cd35 beqz a0,80204dec <sys_rename+0xee> + 80204d4e: ec840513 addi a0,s0,-312 + 80204d52: 00002097 auipc ra,0x2 + 80204d56: c74080e7 jalr -908(ra) # 802069c6 <ename> + 80204d5a: 84aa mv s1,a0 + 80204d5c: 1c050963 beqz a0,80204f2e <sys_rename+0x22e> + 80204d60: ec840593 addi a1,s0,-312 + 80204d64: dc040513 addi a0,s0,-576 + 80204d68: 00002097 auipc ra,0x2 + 80204d6c: c7c080e7 jalr -900(ra) # 802069e4 <enameparent> + 80204d70: 892a mv s2,a0 + 80204d72: cd35 beqz a0,80204dee <sys_rename+0xee> || (name = formatname(old)) == NULL) { - 80204d72: ec840513 addi a0,s0,-312 - 80204d76: 00001097 auipc ra,0x1 - 80204d7a: db8080e7 jalr -584(ra) # 80205b2e <formatname> - 80204d7e: 89aa mv s3,a0 - 80204d80: c535 beqz a0,80204dec <sys_rename+0xee> + 80204d74: ec840513 addi a0,s0,-312 + 80204d78: 00001097 auipc ra,0x1 + 80204d7c: dc6080e7 jalr -570(ra) # 80205b3e <formatname> + 80204d80: 89aa mv s3,a0 + 80204d82: c535 beqz a0,80204dee <sys_rename+0xee> goto fail; // src doesn't exist || dst parent doesn't exist || illegal new name } for (struct dirent *ep = pdst; ep != NULL; ep = ep->parent) { if (ep == src) { // In what universe can we move a directory into its child? - 80204d82: 07248563 beq s1,s2,80204dec <sys_rename+0xee> + 80204d84: 07248563 beq s1,s2,80204dee <sys_rename+0xee> for (struct dirent *ep = pdst; ep != NULL; ep = ep->parent) { - 80204d86: 87ca mv a5,s2 - 80204d88: 1207b783 ld a5,288(a5) - 80204d8c: c781 beqz a5,80204d94 <sys_rename+0x96> + 80204d88: 87ca mv a5,s2 + 80204d8a: 1207b783 ld a5,288(a5) + 80204d8e: c781 beqz a5,80204d96 <sys_rename+0x96> if (ep == src) { // In what universe can we move a directory into its child? - 80204d8e: fef49de3 bne s1,a5,80204d88 <sys_rename+0x8a> - 80204d92: a8a9 j 80204dec <sys_rename+0xee> + 80204d90: fef49de3 bne s1,a5,80204d8a <sys_rename+0x8a> + 80204d94: a8a9 j 80204dee <sys_rename+0xee> goto fail; } } uint off; elock(src); // must hold child's lock before acquiring parent's, because we do so in other similar cases - 80204d94: 8526 mv a0,s1 - 80204d96: 00001097 auipc ra,0x1 - 80204d9a: 478080e7 jalr 1144(ra) # 8020620e <elock> + 80204d96: 8526 mv a0,s1 + 80204d98: 00001097 auipc ra,0x1 + 80204d9c: 486080e7 jalr 1158(ra) # 8020621e <elock> srclock = 1; elock(pdst); - 80204d9e: 854a mv a0,s2 - 80204da0: 00001097 auipc ra,0x1 - 80204da4: 46e080e7 jalr 1134(ra) # 8020620e <elock> + 80204da0: 854a mv a0,s2 + 80204da2: 00001097 auipc ra,0x1 + 80204da6: 47c080e7 jalr 1148(ra) # 8020621e <elock> dst = dirlookup(pdst, name, &off); - 80204da8: dbc40613 addi a2,s0,-580 - 80204dac: 85ce mv a1,s3 - 80204dae: 854a mv a0,s2 - 80204db0: 00001097 auipc ra,0x1 - 80204db4: 7ec080e7 jalr 2028(ra) # 8020659c <dirlookup> - 80204db8: 8a2a mv s4,a0 + 80204daa: dbc40613 addi a2,s0,-580 + 80204dae: 85ce mv a1,s3 + 80204db0: 854a mv a0,s2 + 80204db2: 00001097 auipc ra,0x1 + 80204db6: 7fa080e7 jalr 2042(ra) # 802065ac <dirlookup> + 80204dba: 8a2a mv s4,a0 if (dst != NULL) { - 80204dba: cd45 beqz a0,80204e72 <sys_rename+0x174> + 80204dbc: cd45 beqz a0,80204e74 <sys_rename+0x174> eunlock(pdst); - 80204dbc: 854a mv a0,s2 - 80204dbe: 00001097 auipc ra,0x1 - 80204dc2: 486080e7 jalr 1158(ra) # 80206244 <eunlock> + 80204dbe: 854a mv a0,s2 + 80204dc0: 00001097 auipc ra,0x1 + 80204dc4: 494080e7 jalr 1172(ra) # 80206254 <eunlock> if (src == dst) { - 80204dc6: 01448963 beq s1,s4,80204dd8 <sys_rename+0xda> + 80204dc8: 01448963 beq s1,s4,80204dda <sys_rename+0xda> goto fail; } else if (src->attribute & dst->attribute & ATTR_DIRECTORY) { - 80204dca: 1004c783 lbu a5,256(s1) - 80204dce: 100a4703 lbu a4,256(s4) - 80204dd2: 8ff9 and a5,a5,a4 - 80204dd4: 8bc1 andi a5,a5,16 - 80204dd6: ebb1 bnez a5,80204e2a <sys_rename+0x12c> + 80204dcc: 1004c783 lbu a5,256(s1) + 80204dd0: 100a4703 lbu a4,256(s4) + 80204dd4: 8ff9 and a5,a5,a4 + 80204dd6: 8bc1 andi a5,a5,16 + 80204dd8: ebb1 bnez a5,80204e2c <sys_rename+0x12c> return 0; fail: if (srclock) eunlock(src); - 80204dd8: 8526 mv a0,s1 - 80204dda: 00001097 auipc ra,0x1 - 80204dde: 46a080e7 jalr 1130(ra) # 80206244 <eunlock> + 80204dda: 8526 mv a0,s1 + 80204ddc: 00001097 auipc ra,0x1 + 80204de0: 478080e7 jalr 1144(ra) # 80206254 <eunlock> if (dst) eput(dst); - 80204de2: 8552 mv a0,s4 - 80204de4: 00001097 auipc ra,0x1 - 80204de8: 4ae080e7 jalr 1198(ra) # 80206292 <eput> + 80204de4: 8552 mv a0,s4 + 80204de6: 00001097 auipc ra,0x1 + 80204dea: 4bc080e7 jalr 1212(ra) # 802062a2 <eput> if (pdst) - 80204dec: 00090763 beqz s2,80204dfa <sys_rename+0xfc> + 80204dee: 00090763 beqz s2,80204dfc <sys_rename+0xfc> eput(pdst); - 80204df0: 854a mv a0,s2 - 80204df2: 00001097 auipc ra,0x1 - 80204df6: 4a0080e7 jalr 1184(ra) # 80206292 <eput> + 80204df2: 854a mv a0,s2 + 80204df4: 00001097 auipc ra,0x1 + 80204df8: 4ae080e7 jalr 1198(ra) # 802062a2 <eput> if (src) eput(src); return -1; - 80204dfa: 57fd li a5,-1 + 80204dfc: 57fd li a5,-1 if (src) - 80204dfc: c499 beqz s1,80204e0a <sys_rename+0x10c> + 80204dfe: c499 beqz s1,80204e0c <sys_rename+0x10c> eput(src); - 80204dfe: 8526 mv a0,s1 - 80204e00: 00001097 auipc ra,0x1 - 80204e04: 492080e7 jalr 1170(ra) # 80206292 <eput> + 80204e00: 8526 mv a0,s1 + 80204e02: 00001097 auipc ra,0x1 + 80204e06: 4a0080e7 jalr 1184(ra) # 802062a2 <eput> return -1; - 80204e08: 57fd li a5,-1 -} - 80204e0a: 853e mv a0,a5 - 80204e0c: 3b813083 ld ra,952(sp) - 80204e10: 3b013403 ld s0,944(sp) - 80204e14: 3a813483 ld s1,936(sp) - 80204e18: 3a013903 ld s2,928(sp) - 80204e1c: 39813983 ld s3,920(sp) - 80204e20: 39013a03 ld s4,912(sp) - 80204e24: 3c010113 addi sp,sp,960 - 80204e28: 8082 ret + 80204e0a: 57fd li a5,-1 +} + 80204e0c: 853e mv a0,a5 + 80204e0e: 3b813083 ld ra,952(sp) + 80204e12: 3b013403 ld s0,944(sp) + 80204e16: 3a813483 ld s1,936(sp) + 80204e1a: 3a013903 ld s2,928(sp) + 80204e1e: 39813983 ld s3,920(sp) + 80204e22: 39013a03 ld s4,912(sp) + 80204e26: 3c010113 addi sp,sp,960 + 80204e2a: 8082 ret elock(dst); - 80204e2a: 8552 mv a0,s4 - 80204e2c: 00001097 auipc ra,0x1 - 80204e30: 3e2080e7 jalr 994(ra) # 8020620e <elock> + 80204e2c: 8552 mv a0,s4 + 80204e2e: 00001097 auipc ra,0x1 + 80204e32: 3f0080e7 jalr 1008(ra) # 8020621e <elock> ep.valid = 0; - 80204e34: d6041323 sh zero,-666(s0) + 80204e36: d6041323 sh zero,-666(s0) ret = enext(dp, &ep, 2 * 32, &count); // skip the "." and ".." - 80204e38: c4c40693 addi a3,s0,-948 - 80204e3c: 04000613 li a2,64 - 80204e40: c5040593 addi a1,s0,-944 - 80204e44: 8552 mv a0,s4 - 80204e46: 00001097 auipc ra,0x1 - 80204e4a: 5cc080e7 jalr 1484(ra) # 80206412 <enext> + 80204e3a: c4c40693 addi a3,s0,-948 + 80204e3e: 04000613 li a2,64 + 80204e42: c5040593 addi a1,s0,-944 + 80204e46: 8552 mv a0,s4 + 80204e48: 00001097 auipc ra,0x1 + 80204e4c: 5da080e7 jalr 1498(ra) # 80206422 <enext> if (!isdirempty(dst)) { // it's ok to overwrite an empty dir - 80204e4e: 57fd li a5,-1 - 80204e50: 0cf51863 bne a0,a5,80204f20 <sys_rename+0x222> + 80204e50: 57fd li a5,-1 + 80204e52: 0cf51863 bne a0,a5,80204f22 <sys_rename+0x222> elock(pdst); - 80204e54: 854a mv a0,s2 - 80204e56: 00001097 auipc ra,0x1 - 80204e5a: 3b8080e7 jalr 952(ra) # 8020620e <elock> + 80204e56: 854a mv a0,s2 + 80204e58: 00001097 auipc ra,0x1 + 80204e5c: 3c6080e7 jalr 966(ra) # 8020621e <elock> eremove(dst); - 80204e5e: 8552 mv a0,s4 - 80204e60: 00001097 auipc ra,0x1 - 80204e64: 27a080e7 jalr 634(ra) # 802060da <eremove> + 80204e60: 8552 mv a0,s4 + 80204e62: 00001097 auipc ra,0x1 + 80204e66: 288080e7 jalr 648(ra) # 802060ea <eremove> eunlock(dst); - 80204e68: 8552 mv a0,s4 - 80204e6a: 00001097 auipc ra,0x1 - 80204e6e: 3da080e7 jalr 986(ra) # 80206244 <eunlock> + 80204e6a: 8552 mv a0,s4 + 80204e6c: 00001097 auipc ra,0x1 + 80204e70: 3e8080e7 jalr 1000(ra) # 80206254 <eunlock> memmove(src->filename, name, FAT32_MAX_FILENAME); - 80204e72: 0ff00613 li a2,255 - 80204e76: 85ce mv a1,s3 - 80204e78: 8526 mv a0,s1 - 80204e7a: ffffc097 auipc ra,0xffffc - 80204e7e: 944080e7 jalr -1724(ra) # 802007be <memmove> + 80204e74: 0ff00613 li a2,255 + 80204e78: 85ce mv a1,s3 + 80204e7a: 8526 mv a0,s1 + 80204e7c: ffffc097 auipc ra,0xffffc + 80204e80: 942080e7 jalr -1726(ra) # 802007be <memmove> emake(pdst, src, off); - 80204e82: dbc42603 lw a2,-580(s0) - 80204e86: 85a6 mv a1,s1 - 80204e88: 854a mv a0,s2 - 80204e8a: 00001097 auipc ra,0x1 - 80204e8e: d5c080e7 jalr -676(ra) # 80205be6 <emake> + 80204e84: dbc42603 lw a2,-580(s0) + 80204e88: 85a6 mv a1,s1 + 80204e8a: 854a mv a0,s2 + 80204e8c: 00001097 auipc ra,0x1 + 80204e90: d6a080e7 jalr -662(ra) # 80205bf6 <emake> if (src->parent != pdst) { - 80204e92: 1204b783 ld a5,288(s1) - 80204e96: 01278d63 beq a5,s2,80204eb0 <sys_rename+0x1b2> + 80204e94: 1204b783 ld a5,288(s1) + 80204e98: 01278d63 beq a5,s2,80204eb2 <sys_rename+0x1b2> eunlock(pdst); - 80204e9a: 854a mv a0,s2 - 80204e9c: 00001097 auipc ra,0x1 - 80204ea0: 3a8080e7 jalr 936(ra) # 80206244 <eunlock> + 80204e9c: 854a mv a0,s2 + 80204e9e: 00001097 auipc ra,0x1 + 80204ea2: 3b6080e7 jalr 950(ra) # 80206254 <eunlock> elock(src->parent); - 80204ea4: 1204b503 ld a0,288(s1) - 80204ea8: 00001097 auipc ra,0x1 - 80204eac: 366080e7 jalr 870(ra) # 8020620e <elock> + 80204ea6: 1204b503 ld a0,288(s1) + 80204eaa: 00001097 auipc ra,0x1 + 80204eae: 374080e7 jalr 884(ra) # 8020621e <elock> eremove(src); - 80204eb0: 8526 mv a0,s1 - 80204eb2: 00001097 auipc ra,0x1 - 80204eb6: 228080e7 jalr 552(ra) # 802060da <eremove> + 80204eb2: 8526 mv a0,s1 + 80204eb4: 00001097 auipc ra,0x1 + 80204eb8: 236080e7 jalr 566(ra) # 802060ea <eremove> eunlock(src->parent); - 80204eba: 1204b503 ld a0,288(s1) - 80204ebe: 00001097 auipc ra,0x1 - 80204ec2: 386080e7 jalr 902(ra) # 80206244 <eunlock> + 80204ebc: 1204b503 ld a0,288(s1) + 80204ec0: 00001097 auipc ra,0x1 + 80204ec4: 394080e7 jalr 916(ra) # 80206254 <eunlock> struct dirent *psrc = src->parent; // src must not be root, or it won't pass the for-loop test - 80204ec6: 1204b983 ld s3,288(s1) + 80204ec8: 1204b983 ld s3,288(s1) src->parent = edup(pdst); - 80204eca: 854a mv a0,s2 - 80204ecc: 00001097 auipc ra,0x1 - 80204ed0: 0e4080e7 jalr 228(ra) # 80205fb0 <edup> - 80204ed4: 12a4b023 sd a0,288(s1) + 80204ecc: 854a mv a0,s2 + 80204ece: 00001097 auipc ra,0x1 + 80204ed2: 0f2080e7 jalr 242(ra) # 80205fc0 <edup> + 80204ed6: 12a4b023 sd a0,288(s1) src->off = off; - 80204ed8: dbc42783 lw a5,-580(s0) - 80204edc: 10f4ae23 sw a5,284(s1) + 80204eda: dbc42783 lw a5,-580(s0) + 80204ede: 10f4ae23 sw a5,284(s1) src->valid = 1; - 80204ee0: 4785 li a5,1 - 80204ee2: 10f49b23 sh a5,278(s1) + 80204ee2: 4785 li a5,1 + 80204ee4: 10f49b23 sh a5,278(s1) eunlock(src); - 80204ee6: 8526 mv a0,s1 - 80204ee8: 00001097 auipc ra,0x1 - 80204eec: 35c080e7 jalr 860(ra) # 80206244 <eunlock> + 80204ee8: 8526 mv a0,s1 + 80204eea: 00001097 auipc ra,0x1 + 80204eee: 36a080e7 jalr 874(ra) # 80206254 <eunlock> eput(psrc); - 80204ef0: 854e mv a0,s3 - 80204ef2: 00001097 auipc ra,0x1 - 80204ef6: 3a0080e7 jalr 928(ra) # 80206292 <eput> + 80204ef2: 854e mv a0,s3 + 80204ef4: 00001097 auipc ra,0x1 + 80204ef8: 3ae080e7 jalr 942(ra) # 802062a2 <eput> if (dst) { - 80204efa: 000a0763 beqz s4,80204f08 <sys_rename+0x20a> + 80204efc: 000a0763 beqz s4,80204f0a <sys_rename+0x20a> eput(dst); - 80204efe: 8552 mv a0,s4 - 80204f00: 00001097 auipc ra,0x1 - 80204f04: 392080e7 jalr 914(ra) # 80206292 <eput> + 80204f00: 8552 mv a0,s4 + 80204f02: 00001097 auipc ra,0x1 + 80204f06: 3a0080e7 jalr 928(ra) # 802062a2 <eput> eput(pdst); - 80204f08: 854a mv a0,s2 - 80204f0a: 00001097 auipc ra,0x1 - 80204f0e: 388080e7 jalr 904(ra) # 80206292 <eput> + 80204f0a: 854a mv a0,s2 + 80204f0c: 00001097 auipc ra,0x1 + 80204f10: 396080e7 jalr 918(ra) # 802062a2 <eput> eput(src); - 80204f12: 8526 mv a0,s1 - 80204f14: 00001097 auipc ra,0x1 - 80204f18: 37e080e7 jalr 894(ra) # 80206292 <eput> + 80204f14: 8526 mv a0,s1 + 80204f16: 00001097 auipc ra,0x1 + 80204f1a: 38c080e7 jalr 908(ra) # 802062a2 <eput> return 0; - 80204f1c: 4781 li a5,0 - 80204f1e: b5f5 j 80204e0a <sys_rename+0x10c> + 80204f1e: 4781 li a5,0 + 80204f20: b5f5 j 80204e0c <sys_rename+0x10c> eunlock(dst); - 80204f20: 8552 mv a0,s4 - 80204f22: 00001097 auipc ra,0x1 - 80204f26: 322080e7 jalr 802(ra) # 80206244 <eunlock> + 80204f22: 8552 mv a0,s4 + 80204f24: 00001097 auipc ra,0x1 + 80204f28: 330080e7 jalr 816(ra) # 80206254 <eunlock> goto fail; - 80204f2a: b57d j 80204dd8 <sys_rename+0xda> + 80204f2c: b57d j 80204dda <sys_rename+0xda> struct dirent *src = NULL, *dst = NULL, *pdst = NULL; - 80204f2c: 892a mv s2,a0 + 80204f2e: 892a mv s2,a0 if (dst) - 80204f2e: bd7d j 80204dec <sys_rename+0xee> - -0000000080204f30 <kernelvec>: - 80204f30: 7111 addi sp,sp,-256 - 80204f32: e006 sd ra,0(sp) - 80204f34: e40a sd sp,8(sp) - 80204f36: e80e sd gp,16(sp) - 80204f38: ec12 sd tp,24(sp) - 80204f3a: f016 sd t0,32(sp) - 80204f3c: f41a sd t1,40(sp) - 80204f3e: f81e sd t2,48(sp) - 80204f40: fc22 sd s0,56(sp) - 80204f42: e0a6 sd s1,64(sp) - 80204f44: e4aa sd a0,72(sp) - 80204f46: e8ae sd a1,80(sp) - 80204f48: ecb2 sd a2,88(sp) - 80204f4a: f0b6 sd a3,96(sp) - 80204f4c: f4ba sd a4,104(sp) - 80204f4e: f8be sd a5,112(sp) - 80204f50: fcc2 sd a6,120(sp) - 80204f52: e146 sd a7,128(sp) - 80204f54: e54a sd s2,136(sp) - 80204f56: e94e sd s3,144(sp) - 80204f58: ed52 sd s4,152(sp) - 80204f5a: f156 sd s5,160(sp) - 80204f5c: f55a sd s6,168(sp) - 80204f5e: f95e sd s7,176(sp) - 80204f60: fd62 sd s8,184(sp) - 80204f62: e1e6 sd s9,192(sp) - 80204f64: e5ea sd s10,200(sp) - 80204f66: e9ee sd s11,208(sp) - 80204f68: edf2 sd t3,216(sp) - 80204f6a: f1f6 sd t4,224(sp) - 80204f6c: f5fa sd t5,232(sp) - 80204f6e: f9fe sd t6,240(sp) - 80204f70: 9d1fd0ef jal ra,80202940 <kerneltrap> - 80204f74: 6082 ld ra,0(sp) - 80204f76: 6122 ld sp,8(sp) - 80204f78: 61c2 ld gp,16(sp) - 80204f7a: 7282 ld t0,32(sp) - 80204f7c: 7322 ld t1,40(sp) - 80204f7e: 73c2 ld t2,48(sp) - 80204f80: 7462 ld s0,56(sp) - 80204f82: 6486 ld s1,64(sp) - 80204f84: 6526 ld a0,72(sp) - 80204f86: 65c6 ld a1,80(sp) - 80204f88: 6666 ld a2,88(sp) - 80204f8a: 7686 ld a3,96(sp) - 80204f8c: 7726 ld a4,104(sp) - 80204f8e: 77c6 ld a5,112(sp) - 80204f90: 7866 ld a6,120(sp) - 80204f92: 688a ld a7,128(sp) - 80204f94: 692a ld s2,136(sp) - 80204f96: 69ca ld s3,144(sp) - 80204f98: 6a6a ld s4,152(sp) - 80204f9a: 7a8a ld s5,160(sp) - 80204f9c: 7b2a ld s6,168(sp) - 80204f9e: 7bca ld s7,176(sp) - 80204fa0: 7c6a ld s8,184(sp) - 80204fa2: 6c8e ld s9,192(sp) - 80204fa4: 6d2e ld s10,200(sp) - 80204fa6: 6dce ld s11,208(sp) - 80204fa8: 6e6e ld t3,216(sp) - 80204faa: 7e8e ld t4,224(sp) - 80204fac: 7f2e ld t5,232(sp) - 80204fae: 7fce ld t6,240(sp) - 80204fb0: 6111 addi sp,sp,256 - 80204fb2: 10200073 sret + 80204f30: bd7d j 80204dee <sys_rename+0xee> ... -0000000080204fbe <timerinit>: +0000000080204f40 <kernelvec>: + 80204f40: 7111 addi sp,sp,-256 + 80204f42: e006 sd ra,0(sp) + 80204f44: e40a sd sp,8(sp) + 80204f46: e80e sd gp,16(sp) + 80204f48: ec12 sd tp,24(sp) + 80204f4a: f016 sd t0,32(sp) + 80204f4c: f41a sd t1,40(sp) + 80204f4e: f81e sd t2,48(sp) + 80204f50: fc22 sd s0,56(sp) + 80204f52: e0a6 sd s1,64(sp) + 80204f54: e4aa sd a0,72(sp) + 80204f56: e8ae sd a1,80(sp) + 80204f58: ecb2 sd a2,88(sp) + 80204f5a: f0b6 sd a3,96(sp) + 80204f5c: f4ba sd a4,104(sp) + 80204f5e: f8be sd a5,112(sp) + 80204f60: fcc2 sd a6,120(sp) + 80204f62: e146 sd a7,128(sp) + 80204f64: e54a sd s2,136(sp) + 80204f66: e94e sd s3,144(sp) + 80204f68: ed52 sd s4,152(sp) + 80204f6a: f156 sd s5,160(sp) + 80204f6c: f55a sd s6,168(sp) + 80204f6e: f95e sd s7,176(sp) + 80204f70: fd62 sd s8,184(sp) + 80204f72: e1e6 sd s9,192(sp) + 80204f74: e5ea sd s10,200(sp) + 80204f76: e9ee sd s11,208(sp) + 80204f78: edf2 sd t3,216(sp) + 80204f7a: f1f6 sd t4,224(sp) + 80204f7c: f5fa sd t5,232(sp) + 80204f7e: f9fe sd t6,240(sp) + 80204f80: 9c1fd0ef jal ra,80202940 <kerneltrap> + 80204f84: 6082 ld ra,0(sp) + 80204f86: 6122 ld sp,8(sp) + 80204f88: 61c2 ld gp,16(sp) + 80204f8a: 7282 ld t0,32(sp) + 80204f8c: 7322 ld t1,40(sp) + 80204f8e: 73c2 ld t2,48(sp) + 80204f90: 7462 ld s0,56(sp) + 80204f92: 6486 ld s1,64(sp) + 80204f94: 6526 ld a0,72(sp) + 80204f96: 65c6 ld a1,80(sp) + 80204f98: 6666 ld a2,88(sp) + 80204f9a: 7686 ld a3,96(sp) + 80204f9c: 7726 ld a4,104(sp) + 80204f9e: 77c6 ld a5,112(sp) + 80204fa0: 7866 ld a6,120(sp) + 80204fa2: 688a ld a7,128(sp) + 80204fa4: 692a ld s2,136(sp) + 80204fa6: 69ca ld s3,144(sp) + 80204fa8: 6a6a ld s4,152(sp) + 80204faa: 7a8a ld s5,160(sp) + 80204fac: 7b2a ld s6,168(sp) + 80204fae: 7bca ld s7,176(sp) + 80204fb0: 7c6a ld s8,184(sp) + 80204fb2: 6c8e ld s9,192(sp) + 80204fb4: 6d2e ld s10,200(sp) + 80204fb6: 6dce ld s11,208(sp) + 80204fb8: 6e6e ld t3,216(sp) + 80204fba: 7e8e ld t4,224(sp) + 80204fbc: 7f2e ld t5,232(sp) + 80204fbe: 7fce ld t6,240(sp) + 80204fc0: 6111 addi sp,sp,256 + 80204fc2: 10200073 sret + ... + +0000000080204fce <timerinit>: #include "include/proc.h" struct spinlock tickslock; uint ticks; void timerinit() { - 80204fbe: 1141 addi sp,sp,-16 - 80204fc0: e406 sd ra,8(sp) - 80204fc2: e022 sd s0,0(sp) - 80204fc4: 0800 addi s0,sp,16 + 80204fce: 1141 addi sp,sp,-16 + 80204fd0: e406 sd ra,8(sp) + 80204fd2: e022 sd s0,0(sp) + 80204fd4: 0800 addi s0,sp,16 initlock(&tickslock, "time"); - 80204fc6: 00005597 auipc a1,0x5 - 80204fca: bd258593 addi a1,a1,-1070 # 80209b98 <digits+0x818> - 80204fce: 00019517 auipc a0,0x19 - 80204fd2: 43a50513 addi a0,a0,1082 # 8021e408 <tickslock> - 80204fd6: ffffb097 auipc ra,0xffffb - 80204fda: 6ac080e7 jalr 1708(ra) # 80200682 <initlock> + 80204fd6: 00005597 auipc a1,0x5 + 80204fda: bca58593 addi a1,a1,-1078 # 80209ba0 <digits+0x820> + 80204fde: 00019517 auipc a0,0x19 + 80204fe2: 42a50513 addi a0,a0,1066 # 8021e408 <tickslock> + 80204fe6: ffffb097 auipc ra,0xffffb + 80204fea: 69c080e7 jalr 1692(ra) # 80200682 <initlock> #ifdef DEBUG printf("timerinit\n"); #endif } - 80204fde: 60a2 ld ra,8(sp) - 80204fe0: 6402 ld s0,0(sp) - 80204fe2: 0141 addi sp,sp,16 - 80204fe4: 8082 ret + 80204fee: 60a2 ld ra,8(sp) + 80204ff0: 6402 ld s0,0(sp) + 80204ff2: 0141 addi sp,sp,16 + 80204ff4: 8082 ret -0000000080204fe6 <set_next_timeout>: +0000000080204ff6 <set_next_timeout>: void set_next_timeout() { - 80204fe6: 1141 addi sp,sp,-16 - 80204fe8: e422 sd s0,8(sp) - 80204fea: 0800 addi s0,sp,16 + 80204ff6: 1141 addi sp,sp,-16 + 80204ff8: e422 sd s0,8(sp) + 80204ffa: 0800 addi s0,sp,16 asm volatile("rdtime %0" : "=r" (x) ); - 80204fec: c0102573 rdtime a0 + 80204ffc: c0102573 rdtime a0 // if comment the `printf` line below // the timer will not work. // this bug seems to disappear automatically // printf(""); sbi_set_timer(r_time() + INTERVAL); - 80204ff0: 001dc7b7 lui a5,0x1dc - 80204ff4: 13078793 addi a5,a5,304 # 1dc130 <_entry-0x80023ed0> - 80204ff8: 953e add a0,a0,a5 + 80205000: 001dc7b7 lui a5,0x1dc + 80205004: 13078793 addi a5,a5,304 # 1dc130 <_entry-0x80023ed0> + 80205008: 953e add a0,a0,a5 SBI_CALL_1(SBI_SET_TIMER, stime_value); - 80204ffa: 4581 li a1,0 - 80204ffc: 4601 li a2,0 - 80204ffe: 4681 li a3,0 - 80205000: 4881 li a7,0 - 80205002: 00000073 ecall + 8020500a: 4581 li a1,0 + 8020500c: 4601 li a2,0 + 8020500e: 4681 li a3,0 + 80205010: 4881 li a7,0 + 80205012: 00000073 ecall } - 80205006: 6422 ld s0,8(sp) - 80205008: 0141 addi sp,sp,16 - 8020500a: 8082 ret + 80205016: 6422 ld s0,8(sp) + 80205018: 0141 addi sp,sp,16 + 8020501a: 8082 ret -000000008020500c <timer_tick>: +000000008020501c <timer_tick>: void timer_tick() { - 8020500c: 1101 addi sp,sp,-32 - 8020500e: ec06 sd ra,24(sp) - 80205010: e822 sd s0,16(sp) - 80205012: e426 sd s1,8(sp) - 80205014: 1000 addi s0,sp,32 + 8020501c: 1101 addi sp,sp,-32 + 8020501e: ec06 sd ra,24(sp) + 80205020: e822 sd s0,16(sp) + 80205022: e426 sd s1,8(sp) + 80205024: 1000 addi s0,sp,32 acquire(&tickslock); - 80205016: 00019497 auipc s1,0x19 - 8020501a: 3f248493 addi s1,s1,1010 # 8021e408 <tickslock> - 8020501e: 8526 mv a0,s1 - 80205020: ffffb097 auipc ra,0xffffb - 80205024: 6a6080e7 jalr 1702(ra) # 802006c6 <acquire> + 80205026: 00019497 auipc s1,0x19 + 8020502a: 3e248493 addi s1,s1,994 # 8021e408 <tickslock> + 8020502e: 8526 mv a0,s1 + 80205030: ffffb097 auipc ra,0xffffb + 80205034: 696080e7 jalr 1686(ra) # 802006c6 <acquire> ticks++; - 80205028: 4c9c lw a5,24(s1) - 8020502a: 2785 addiw a5,a5,1 - 8020502c: cc9c sw a5,24(s1) + 80205038: 4c9c lw a5,24(s1) + 8020503a: 2785 addiw a5,a5,1 + 8020503c: cc9c sw a5,24(s1) wakeup(&ticks); - 8020502e: 00019517 auipc a0,0x19 - 80205032: 3f250513 addi a0,a0,1010 # 8021e420 <ticks> - 80205036: ffffd097 auipc ra,0xffffd - 8020503a: 402080e7 jalr 1026(ra) # 80202438 <wakeup> + 8020503e: 00019517 auipc a0,0x19 + 80205042: 3e250513 addi a0,a0,994 # 8021e420 <ticks> + 80205046: ffffd097 auipc ra,0xffffd + 8020504a: 3f2080e7 jalr 1010(ra) # 80202438 <wakeup> release(&tickslock); - 8020503e: 8526 mv a0,s1 - 80205040: ffffb097 auipc ra,0xffffb - 80205044: 6da080e7 jalr 1754(ra) # 8020071a <release> + 8020504e: 8526 mv a0,s1 + 80205050: ffffb097 auipc ra,0xffffb + 80205054: 6ca080e7 jalr 1738(ra) # 8020071a <release> set_next_timeout(); - 80205048: 00000097 auipc ra,0x0 - 8020504c: f9e080e7 jalr -98(ra) # 80204fe6 <set_next_timeout> + 80205058: 00000097 auipc ra,0x0 + 8020505c: f9e080e7 jalr -98(ra) # 80204ff6 <set_next_timeout> } - 80205050: 60e2 ld ra,24(sp) - 80205052: 6442 ld s0,16(sp) - 80205054: 64a2 ld s1,8(sp) - 80205056: 6105 addi sp,sp,32 - 80205058: 8082 ret + 80205060: 60e2 ld ra,24(sp) + 80205062: 6442 ld s0,16(sp) + 80205064: 64a2 ld s1,8(sp) + 80205066: 6105 addi sp,sp,32 + 80205068: 8082 ret -000000008020505a <disk_init>: +000000008020506a <disk_init>: #else #include "include/virtio.h" #endif void disk_init(void) { - 8020505a: 1141 addi sp,sp,-16 - 8020505c: e406 sd ra,8(sp) - 8020505e: e022 sd s0,0(sp) - 80205060: 0800 addi s0,sp,16 + 8020506a: 1141 addi sp,sp,-16 + 8020506c: e406 sd ra,8(sp) + 8020506e: e022 sd s0,0(sp) + 80205070: 0800 addi s0,sp,16 #ifdef QEMU virtio_disk_init(); - 80205062: 00002097 auipc ra,0x2 - 80205066: eaa080e7 jalr -342(ra) # 80206f0c <virtio_disk_init> + 80205072: 00002097 auipc ra,0x2 + 80205076: f30080e7 jalr -208(ra) # 80206fa2 <virtio_disk_init> #else sdcard_init(); #endif } - 8020506a: 60a2 ld ra,8(sp) - 8020506c: 6402 ld s0,0(sp) - 8020506e: 0141 addi sp,sp,16 - 80205070: 8082 ret + 8020507a: 60a2 ld ra,8(sp) + 8020507c: 6402 ld s0,0(sp) + 8020507e: 0141 addi sp,sp,16 + 80205080: 8082 ret -0000000080205072 <disk_read>: +0000000080205082 <disk_read>: void disk_read(struct buf *b) { - 80205072: 1141 addi sp,sp,-16 - 80205074: e406 sd ra,8(sp) - 80205076: e022 sd s0,0(sp) - 80205078: 0800 addi s0,sp,16 + 80205082: 1141 addi sp,sp,-16 + 80205084: e406 sd ra,8(sp) + 80205086: e022 sd s0,0(sp) + 80205088: 0800 addi s0,sp,16 #ifdef QEMU virtio_disk_rw(b, 0); - 8020507a: 4581 li a1,0 - 8020507c: 00002097 auipc ra,0x2 - 80205080: 016080e7 jalr 22(ra) # 80207092 <virtio_disk_rw> + 8020508a: 4581 li a1,0 + 8020508c: 00002097 auipc ra,0x2 + 80205090: 09c080e7 jalr 156(ra) # 80207128 <virtio_disk_rw> #else sdcard_read_sector(b->data, b->sectorno); #endif } - 80205084: 60a2 ld ra,8(sp) - 80205086: 6402 ld s0,0(sp) - 80205088: 0141 addi sp,sp,16 - 8020508a: 8082 ret + 80205094: 60a2 ld ra,8(sp) + 80205096: 6402 ld s0,0(sp) + 80205098: 0141 addi sp,sp,16 + 8020509a: 8082 ret -000000008020508c <disk_write>: +000000008020509c <disk_write>: void disk_write(struct buf *b) { - 8020508c: 1141 addi sp,sp,-16 - 8020508e: e406 sd ra,8(sp) - 80205090: e022 sd s0,0(sp) - 80205092: 0800 addi s0,sp,16 + 8020509c: 1141 addi sp,sp,-16 + 8020509e: e406 sd ra,8(sp) + 802050a0: e022 sd s0,0(sp) + 802050a2: 0800 addi s0,sp,16 #ifdef QEMU virtio_disk_rw(b, 1); - 80205094: 4585 li a1,1 - 80205096: 00002097 auipc ra,0x2 - 8020509a: ffc080e7 jalr -4(ra) # 80207092 <virtio_disk_rw> + 802050a4: 4585 li a1,1 + 802050a6: 00002097 auipc ra,0x2 + 802050aa: 082080e7 jalr 130(ra) # 80207128 <virtio_disk_rw> #else sdcard_write_sector(b->data, b->sectorno); #endif } - 8020509e: 60a2 ld ra,8(sp) - 802050a0: 6402 ld s0,0(sp) - 802050a2: 0141 addi sp,sp,16 - 802050a4: 8082 ret + 802050ae: 60a2 ld ra,8(sp) + 802050b0: 6402 ld s0,0(sp) + 802050b2: 0141 addi sp,sp,16 + 802050b4: 8082 ret -00000000802050a6 <disk_intr>: +00000000802050b6 <disk_intr>: void disk_intr(void) { - 802050a6: 1141 addi sp,sp,-16 - 802050a8: e406 sd ra,8(sp) - 802050aa: e022 sd s0,0(sp) - 802050ac: 0800 addi s0,sp,16 + 802050b6: 1141 addi sp,sp,-16 + 802050b8: e406 sd ra,8(sp) + 802050ba: e022 sd s0,0(sp) + 802050bc: 0800 addi s0,sp,16 #ifdef QEMU virtio_disk_intr(); - 802050ae: 00002097 auipc ra,0x2 - 802050b2: 270080e7 jalr 624(ra) # 8020731e <virtio_disk_intr> + 802050be: 00002097 auipc ra,0x2 + 802050c2: 2f6080e7 jalr 758(ra) # 802073b4 <virtio_disk_intr> #else dmac_intr(DMAC_CHANNEL0); #endif } - 802050b6: 60a2 ld ra,8(sp) - 802050b8: 6402 ld s0,0(sp) - 802050ba: 0141 addi sp,sp,16 - 802050bc: 8082 ret + 802050c6: 60a2 ld ra,8(sp) + 802050c8: 6402 ld s0,0(sp) + 802050ca: 0141 addi sp,sp,16 + 802050cc: 8082 ret -00000000802050be <read_fat>: +00000000802050ce <read_fat>: /** * Read the FAT table content corresponded to the given cluster number. * @param cluster the number of cluster which you want to read its content in FAT table */ static uint32 read_fat(uint32 cluster) { - 802050be: 1101 addi sp,sp,-32 - 802050c0: ec06 sd ra,24(sp) - 802050c2: e822 sd s0,16(sp) - 802050c4: e426 sd s1,8(sp) - 802050c6: e04a sd s2,0(sp) - 802050c8: 1000 addi s0,sp,32 + 802050ce: 1101 addi sp,sp,-32 + 802050d0: ec06 sd ra,24(sp) + 802050d2: e822 sd s0,16(sp) + 802050d4: e426 sd s1,8(sp) + 802050d6: e04a sd s2,0(sp) + 802050d8: 1000 addi s0,sp,32 if (cluster >= FAT32_EOC) { - 802050ca: 100007b7 lui a5,0x10000 - 802050ce: 17dd addi a5,a5,-9 # ffffff7 <_entry-0x70200009> + 802050da: 100007b7 lui a5,0x10000 + 802050de: 17dd addi a5,a5,-9 # ffffff7 <_entry-0x70200009> return cluster; - 802050d0: 84aa mv s1,a0 + 802050e0: 84aa mv s1,a0 if (cluster >= FAT32_EOC) { - 802050d2: 00a7ea63 bltu a5,a0,802050e6 <read_fat+0x28> + 802050e2: 00a7ea63 bltu a5,a0,802050f6 <read_fat+0x28> } if (cluster > fat.data_clus_cnt + 1) { // because cluster number starts at 2, not 0 - 802050d6: 00019797 auipc a5,0x19 - 802050da: 35a7a783 lw a5,858(a5) # 8021e430 <fat+0x8> - 802050de: 2785 addiw a5,a5,1 + 802050e6: 00019797 auipc a5,0x19 + 802050ea: 34a7a783 lw a5,842(a5) # 8021e430 <fat+0x8> + 802050ee: 2785 addiw a5,a5,1 return 0; - 802050e0: 4481 li s1,0 + 802050f0: 4481 li s1,0 if (cluster > fat.data_clus_cnt + 1) { // because cluster number starts at 2, not 0 - 802050e2: 00a7f963 bgeu a5,a0,802050f4 <read_fat+0x36> + 802050f2: 00a7f963 bgeu a5,a0,80205104 <read_fat+0x36> // here should be a cache layer for FAT table, but not implemented yet. struct buf *b = bread(0, fat_sec); uint32 next_clus = *(uint32 *)(b->data + fat_offset_of_clus(cluster)); brelse(b); return next_clus; } - 802050e6: 8526 mv a0,s1 - 802050e8: 60e2 ld ra,24(sp) - 802050ea: 6442 ld s0,16(sp) - 802050ec: 64a2 ld s1,8(sp) - 802050ee: 6902 ld s2,0(sp) - 802050f0: 6105 addi sp,sp,32 - 802050f2: 8082 ret + 802050f6: 8526 mv a0,s1 + 802050f8: 60e2 ld ra,24(sp) + 802050fa: 6442 ld s0,16(sp) + 802050fc: 64a2 ld s1,8(sp) + 802050fe: 6902 ld s2,0(sp) + 80205100: 6105 addi sp,sp,32 + 80205102: 8082 ret return fat.bpb.rsvd_sec_cnt + (cluster << 2) / fat.bpb.byts_per_sec + fat.bpb.fat_sz * (fat_num - 1); - 802050f4: 0025149b slliw s1,a0,0x2 - 802050f8: 00019917 auipc s2,0x19 - 802050fc: 33090913 addi s2,s2,816 # 8021e428 <fat> - 80205100: 01095783 lhu a5,16(s2) - 80205104: 02f4d7bb divuw a5,s1,a5 - 80205108: 01495583 lhu a1,20(s2) + 80205104: 0025149b slliw s1,a0,0x2 + 80205108: 00019917 auipc s2,0x19 + 8020510c: 32090913 addi s2,s2,800 # 8021e428 <fat> + 80205110: 01095783 lhu a5,16(s2) + 80205114: 02f4d7bb divuw a5,s1,a5 + 80205118: 01495583 lhu a1,20(s2) struct buf *b = bread(0, fat_sec); - 8020510c: 9dbd addw a1,a1,a5 - 8020510e: 4501 li a0,0 - 80205110: ffffe097 auipc ra,0xffffe - 80205114: 2d6080e7 jalr 726(ra) # 802033e6 <bread> + 8020511c: 9dbd addw a1,a1,a5 + 8020511e: 4501 li a0,0 + 80205120: ffffe097 auipc ra,0xffffe + 80205124: 2c8080e7 jalr 712(ra) # 802033e8 <bread> return (cluster << 2) % fat.bpb.byts_per_sec; - 80205118: 01095783 lhu a5,16(s2) - 8020511c: 02f4f4bb remuw s1,s1,a5 + 80205128: 01095783 lhu a5,16(s2) + 8020512c: 02f4f4bb remuw s1,s1,a5 uint32 next_clus = *(uint32 *)(b->data + fat_offset_of_clus(cluster)); - 80205120: 1482 slli s1,s1,0x20 - 80205122: 9081 srli s1,s1,0x20 - 80205124: 009507b3 add a5,a0,s1 - 80205128: 4fa4 lw s1,88(a5) + 80205130: 1482 slli s1,s1,0x20 + 80205132: 9081 srli s1,s1,0x20 + 80205134: 009507b3 add a5,a0,s1 + 80205138: 4fa4 lw s1,88(a5) brelse(b); - 8020512a: ffffe097 auipc ra,0xffffe - 8020512e: 3e8080e7 jalr 1000(ra) # 80203512 <brelse> + 8020513a: ffffe097 auipc ra,0xffffe + 8020513e: 3da080e7 jalr 986(ra) # 80203514 <brelse> return next_clus; - 80205132: bf55 j 802050e6 <read_fat+0x28> + 80205142: bf55 j 802050f6 <read_fat+0x28> -0000000080205134 <alloc_clus>: +0000000080205144 <alloc_clus>: brelse(b); } } static uint32 alloc_clus(uint8 dev) { - 80205134: 711d addi sp,sp,-96 - 80205136: ec86 sd ra,88(sp) - 80205138: e8a2 sd s0,80(sp) - 8020513a: e4a6 sd s1,72(sp) - 8020513c: e0ca sd s2,64(sp) - 8020513e: fc4e sd s3,56(sp) - 80205140: f852 sd s4,48(sp) - 80205142: f456 sd s5,40(sp) - 80205144: f05a sd s6,32(sp) - 80205146: ec5e sd s7,24(sp) - 80205148: e862 sd s8,16(sp) - 8020514a: e466 sd s9,8(sp) - 8020514c: 1080 addi s0,sp,96 + 80205144: 711d addi sp,sp,-96 + 80205146: ec86 sd ra,88(sp) + 80205148: e8a2 sd s0,80(sp) + 8020514a: e4a6 sd s1,72(sp) + 8020514c: e0ca sd s2,64(sp) + 8020514e: fc4e sd s3,56(sp) + 80205150: f852 sd s4,48(sp) + 80205152: f456 sd s5,40(sp) + 80205154: f05a sd s6,32(sp) + 80205156: ec5e sd s7,24(sp) + 80205158: e862 sd s8,16(sp) + 8020515a: e466 sd s9,8(sp) + 8020515c: 1080 addi s0,sp,96 // should we keep a free cluster list? instead of searching fat every time. struct buf *b; uint32 sec = fat.bpb.rsvd_sec_cnt; - 8020514e: 00019797 auipc a5,0x19 - 80205152: 2da78793 addi a5,a5,730 # 8021e428 <fat> - 80205156: 0147db83 lhu s7,20(a5) + 8020515e: 00019797 auipc a5,0x19 + 80205162: 2ca78793 addi a5,a5,714 # 8021e428 <fat> + 80205166: 0147db83 lhu s7,20(a5) uint32 const ent_per_sec = fat.bpb.byts_per_sec / sizeof(uint32); - 8020515a: 0107d903 lhu s2,16(a5) + 8020516a: 0107d903 lhu s2,16(a5) for (uint32 i = 0; i < fat.bpb.fat_sz; i++, sec++) { - 8020515e: 539c lw a5,32(a5) - 80205160: 10078363 beqz a5,80205266 <alloc_clus+0x132> - 80205164: 0029591b srliw s2,s2,0x2 - 80205168: 0009099b sext.w s3,s2 - 8020516c: 4b01 li s6,0 + 8020516e: 539c lw a5,32(a5) + 80205170: 10078363 beqz a5,80205276 <alloc_clus+0x132> + 80205174: 0029591b srliw s2,s2,0x2 + 80205178: 0009099b sext.w s3,s2 + 8020517c: 4b01 li s6,0 b = bread(dev, sec); - 8020516e: 00050a9b sext.w s5,a0 + 8020517e: 00050a9b sext.w s5,a0 for (uint32 j = 0; j < ent_per_sec; j++) { - 80205172: 4c01 li s8,0 + 80205182: 4c01 li s8,0 for (uint32 i = 0; i < fat.bpb.fat_sz; i++, sec++) { - 80205174: 00019c97 auipc s9,0x19 - 80205178: 2b4c8c93 addi s9,s9,692 # 8021e428 <fat> - 8020517c: a0c9 j 8020523e <alloc_clus+0x10a> + 80205184: 00019c97 auipc s9,0x19 + 80205188: 2a4c8c93 addi s9,s9,676 # 8021e428 <fat> + 8020518c: a0c9 j 8020524e <alloc_clus+0x10a> if (((uint32 *)(b->data))[j] == 0) { ((uint32 *)(b->data))[j] = FAT32_EOC + 7; - 8020517e: 100007b7 lui a5,0x10000 - 80205182: 17fd addi a5,a5,-1 # fffffff <_entry-0x70200001> - 80205184: c29c sw a5,0(a3) + 8020518e: 100007b7 lui a5,0x10000 + 80205192: 17fd addi a5,a5,-1 # fffffff <_entry-0x70200001> + 80205194: c29c sw a5,0(a3) bwrite(b); - 80205186: 8552 mv a0,s4 - 80205188: ffffe097 auipc ra,0xffffe - 8020518c: 34e080e7 jalr 846(ra) # 802034d6 <bwrite> + 80205196: 8552 mv a0,s4 + 80205198: ffffe097 auipc ra,0xffffe + 8020519c: 340080e7 jalr 832(ra) # 802034d8 <bwrite> brelse(b); - 80205190: 8552 mv a0,s4 - 80205192: ffffe097 auipc ra,0xffffe - 80205196: 380080e7 jalr 896(ra) # 80203512 <brelse> + 802051a0: 8552 mv a0,s4 + 802051a2: ffffe097 auipc ra,0xffffe + 802051a6: 372080e7 jalr 882(ra) # 80203514 <brelse> uint32 clus = i * ent_per_sec + j; - 8020519a: 0369093b mulw s2,s2,s6 - 8020519e: 0099093b addw s2,s2,s1 - 802051a2: 00090a9b sext.w s5,s2 + 802051aa: 0369093b mulw s2,s2,s6 + 802051ae: 0099093b addw s2,s2,s1 + 802051b2: 00090a9b sext.w s5,s2 return ((cluster - 2) * fat.bpb.sec_per_clus) + fat.first_data_sec; - 802051a6: 00019717 auipc a4,0x19 - 802051aa: 28270713 addi a4,a4,642 # 8021e428 <fat> - 802051ae: 01274783 lbu a5,18(a4) - 802051b2: ffe9099b addiw s3,s2,-2 - 802051b6: 02f989bb mulw s3,s3,a5 - 802051ba: 4318 lw a4,0(a4) - 802051bc: 00e989bb addw s3,s3,a4 + 802051b6: 00019717 auipc a4,0x19 + 802051ba: 27270713 addi a4,a4,626 # 8021e428 <fat> + 802051be: 01274783 lbu a5,18(a4) + 802051c2: ffe9099b addiw s3,s2,-2 + 802051c6: 02f989bb mulw s3,s3,a5 + 802051ca: 4318 lw a4,0(a4) + 802051cc: 00e989bb addw s3,s3,a4 for (int i = 0; i < fat.bpb.sec_per_clus; i++) { - 802051c0: c7b1 beqz a5,8020520c <alloc_clus+0xd8> - 802051c2: 4901 li s2,0 - 802051c4: 00019a17 auipc s4,0x19 - 802051c8: 264a0a13 addi s4,s4,612 # 8021e428 <fat> + 802051d0: c7b1 beqz a5,8020521c <alloc_clus+0xd8> + 802051d2: 4901 li s2,0 + 802051d4: 00019a17 auipc s4,0x19 + 802051d8: 254a0a13 addi s4,s4,596 # 8021e428 <fat> b = bread(0, sec++); - 802051cc: 013905bb addw a1,s2,s3 - 802051d0: 4501 li a0,0 - 802051d2: ffffe097 auipc ra,0xffffe - 802051d6: 214080e7 jalr 532(ra) # 802033e6 <bread> - 802051da: 84aa mv s1,a0 + 802051dc: 013905bb addw a1,s2,s3 + 802051e0: 4501 li a0,0 + 802051e2: ffffe097 auipc ra,0xffffe + 802051e6: 206080e7 jalr 518(ra) # 802033e8 <bread> + 802051ea: 84aa mv s1,a0 memset(b->data, 0, BSIZE); - 802051dc: 20000613 li a2,512 - 802051e0: 4581 li a1,0 - 802051e2: 05850513 addi a0,a0,88 - 802051e6: ffffb097 auipc ra,0xffffb - 802051ea: 57c080e7 jalr 1404(ra) # 80200762 <memset> + 802051ec: 20000613 li a2,512 + 802051f0: 4581 li a1,0 + 802051f2: 05850513 addi a0,a0,88 + 802051f6: ffffb097 auipc ra,0xffffb + 802051fa: 56c080e7 jalr 1388(ra) # 80200762 <memset> bwrite(b); - 802051ee: 8526 mv a0,s1 - 802051f0: ffffe097 auipc ra,0xffffe - 802051f4: 2e6080e7 jalr 742(ra) # 802034d6 <bwrite> + 802051fe: 8526 mv a0,s1 + 80205200: ffffe097 auipc ra,0xffffe + 80205204: 2d8080e7 jalr 728(ra) # 802034d8 <bwrite> brelse(b); - 802051f8: 8526 mv a0,s1 - 802051fa: ffffe097 auipc ra,0xffffe - 802051fe: 318080e7 jalr 792(ra) # 80203512 <brelse> + 80205208: 8526 mv a0,s1 + 8020520a: ffffe097 auipc ra,0xffffe + 8020520e: 30a080e7 jalr 778(ra) # 80203514 <brelse> for (int i = 0; i < fat.bpb.sec_per_clus; i++) { - 80205202: 2905 addiw s2,s2,1 - 80205204: 012a4783 lbu a5,18(s4) - 80205208: fcf942e3 blt s2,a5,802051cc <alloc_clus+0x98> + 80205212: 2905 addiw s2,s2,1 + 80205214: 012a4783 lbu a5,18(s4) + 80205218: fcf942e3 blt s2,a5,802051dc <alloc_clus+0x98> } } brelse(b); } panic("no clusters"); } - 8020520c: 8556 mv a0,s5 - 8020520e: 60e6 ld ra,88(sp) - 80205210: 6446 ld s0,80(sp) - 80205212: 64a6 ld s1,72(sp) - 80205214: 6906 ld s2,64(sp) - 80205216: 79e2 ld s3,56(sp) - 80205218: 7a42 ld s4,48(sp) - 8020521a: 7aa2 ld s5,40(sp) - 8020521c: 7b02 ld s6,32(sp) - 8020521e: 6be2 ld s7,24(sp) - 80205220: 6c42 ld s8,16(sp) - 80205222: 6ca2 ld s9,8(sp) - 80205224: 6125 addi sp,sp,96 - 80205226: 8082 ret + 8020521c: 8556 mv a0,s5 + 8020521e: 60e6 ld ra,88(sp) + 80205220: 6446 ld s0,80(sp) + 80205222: 64a6 ld s1,72(sp) + 80205224: 6906 ld s2,64(sp) + 80205226: 79e2 ld s3,56(sp) + 80205228: 7a42 ld s4,48(sp) + 8020522a: 7aa2 ld s5,40(sp) + 8020522c: 7b02 ld s6,32(sp) + 8020522e: 6be2 ld s7,24(sp) + 80205230: 6c42 ld s8,16(sp) + 80205232: 6ca2 ld s9,8(sp) + 80205234: 6125 addi sp,sp,96 + 80205236: 8082 ret brelse(b); - 80205228: 8552 mv a0,s4 - 8020522a: ffffe097 auipc ra,0xffffe - 8020522e: 2e8080e7 jalr 744(ra) # 80203512 <brelse> + 80205238: 8552 mv a0,s4 + 8020523a: ffffe097 auipc ra,0xffffe + 8020523e: 2da080e7 jalr 730(ra) # 80203514 <brelse> for (uint32 i = 0; i < fat.bpb.fat_sz; i++, sec++) { - 80205232: 2b05 addiw s6,s6,1 - 80205234: 2b85 addiw s7,s7,1 # fffffffffffff001 <ebss_clear+0xffffffff7fdd9001> - 80205236: 020ca783 lw a5,32(s9) - 8020523a: 02fb7663 bgeu s6,a5,80205266 <alloc_clus+0x132> + 80205242: 2b05 addiw s6,s6,1 + 80205244: 2b85 addiw s7,s7,1 # fffffffffffff001 <ebss_clear+0xffffffff7fdd9001> + 80205246: 020ca783 lw a5,32(s9) + 8020524a: 02fb7663 bgeu s6,a5,80205276 <alloc_clus+0x132> b = bread(dev, sec); - 8020523e: 85de mv a1,s7 - 80205240: 8556 mv a0,s5 - 80205242: ffffe097 auipc ra,0xffffe - 80205246: 1a4080e7 jalr 420(ra) # 802033e6 <bread> - 8020524a: 8a2a mv s4,a0 + 8020524e: 85de mv a1,s7 + 80205250: 8556 mv a0,s5 + 80205252: ffffe097 auipc ra,0xffffe + 80205256: 196080e7 jalr 406(ra) # 802033e8 <bread> + 8020525a: 8a2a mv s4,a0 for (uint32 j = 0; j < ent_per_sec; j++) { - 8020524c: fc098ee3 beqz s3,80205228 <alloc_clus+0xf4> - 80205250: 05850793 addi a5,a0,88 - 80205254: 84e2 mv s1,s8 + 8020525c: fc098ee3 beqz s3,80205238 <alloc_clus+0xf4> + 80205260: 05850793 addi a5,a0,88 + 80205264: 84e2 mv s1,s8 if (((uint32 *)(b->data))[j] == 0) { - 80205256: 86be mv a3,a5 - 80205258: 4398 lw a4,0(a5) - 8020525a: d315 beqz a4,8020517e <alloc_clus+0x4a> + 80205266: 86be mv a3,a5 + 80205268: 4398 lw a4,0(a5) + 8020526a: d315 beqz a4,8020518e <alloc_clus+0x4a> for (uint32 j = 0; j < ent_per_sec; j++) { - 8020525c: 2485 addiw s1,s1,1 - 8020525e: 0791 addi a5,a5,4 - 80205260: fe999be3 bne s3,s1,80205256 <alloc_clus+0x122> - 80205264: b7d1 j 80205228 <alloc_clus+0xf4> + 8020526c: 2485 addiw s1,s1,1 + 8020526e: 0791 addi a5,a5,4 + 80205270: fe999be3 bne s3,s1,80205266 <alloc_clus+0x122> + 80205274: b7d1 j 80205238 <alloc_clus+0xf4> panic("no clusters"); - 80205266: 00005517 auipc a0,0x5 - 8020526a: 93a50513 addi a0,a0,-1734 # 80209ba0 <digits+0x820> - 8020526e: ffffb097 auipc ra,0xffffb - 80205272: ed6080e7 jalr -298(ra) # 80200144 <panic> + 80205276: 00005517 auipc a0,0x5 + 8020527a: 93250513 addi a0,a0,-1742 # 80209ba8 <digits+0x828> + 8020527e: ffffb097 auipc ra,0xffffb + 80205282: ec6080e7 jalr -314(ra) # 80200144 <panic> -0000000080205276 <write_fat>: +0000000080205286 <write_fat>: if (cluster > fat.data_clus_cnt + 1) { - 80205276: 00019797 auipc a5,0x19 - 8020527a: 1ba7a783 lw a5,442(a5) # 8021e430 <fat+0x8> - 8020527e: 2785 addiw a5,a5,1 - 80205280: 06a7e963 bltu a5,a0,802052f2 <write_fat+0x7c> -{ - 80205284: 7179 addi sp,sp,-48 - 80205286: f406 sd ra,40(sp) - 80205288: f022 sd s0,32(sp) - 8020528a: ec26 sd s1,24(sp) - 8020528c: e84a sd s2,16(sp) - 8020528e: e44e sd s3,8(sp) - 80205290: e052 sd s4,0(sp) - 80205292: 1800 addi s0,sp,48 - 80205294: 89ae mv s3,a1 + 80205286: 00019797 auipc a5,0x19 + 8020528a: 1aa7a783 lw a5,426(a5) # 8021e430 <fat+0x8> + 8020528e: 2785 addiw a5,a5,1 + 80205290: 06a7e963 bltu a5,a0,80205302 <write_fat+0x7c> +{ + 80205294: 7179 addi sp,sp,-48 + 80205296: f406 sd ra,40(sp) + 80205298: f022 sd s0,32(sp) + 8020529a: ec26 sd s1,24(sp) + 8020529c: e84a sd s2,16(sp) + 8020529e: e44e sd s3,8(sp) + 802052a0: e052 sd s4,0(sp) + 802052a2: 1800 addi s0,sp,48 + 802052a4: 89ae mv s3,a1 return fat.bpb.rsvd_sec_cnt + (cluster << 2) / fat.bpb.byts_per_sec + fat.bpb.fat_sz * (fat_num - 1); - 80205296: 0025149b slliw s1,a0,0x2 - 8020529a: 00019a17 auipc s4,0x19 - 8020529e: 18ea0a13 addi s4,s4,398 # 8021e428 <fat> - 802052a2: 010a5783 lhu a5,16(s4) - 802052a6: 02f4d7bb divuw a5,s1,a5 - 802052aa: 014a5583 lhu a1,20(s4) + 802052a6: 0025149b slliw s1,a0,0x2 + 802052aa: 00019a17 auipc s4,0x19 + 802052ae: 17ea0a13 addi s4,s4,382 # 8021e428 <fat> + 802052b2: 010a5783 lhu a5,16(s4) + 802052b6: 02f4d7bb divuw a5,s1,a5 + 802052ba: 014a5583 lhu a1,20(s4) struct buf *b = bread(0, fat_sec); - 802052ae: 9dbd addw a1,a1,a5 - 802052b0: 4501 li a0,0 - 802052b2: ffffe097 auipc ra,0xffffe - 802052b6: 134080e7 jalr 308(ra) # 802033e6 <bread> - 802052ba: 892a mv s2,a0 + 802052be: 9dbd addw a1,a1,a5 + 802052c0: 4501 li a0,0 + 802052c2: ffffe097 auipc ra,0xffffe + 802052c6: 126080e7 jalr 294(ra) # 802033e8 <bread> + 802052ca: 892a mv s2,a0 return (cluster << 2) % fat.bpb.byts_per_sec; - 802052bc: 010a5783 lhu a5,16(s4) - 802052c0: 02f4f4bb remuw s1,s1,a5 + 802052cc: 010a5783 lhu a5,16(s4) + 802052d0: 02f4f4bb remuw s1,s1,a5 *(uint32 *)(b->data + off) = content; - 802052c4: 1482 slli s1,s1,0x20 - 802052c6: 9081 srli s1,s1,0x20 - 802052c8: 94aa add s1,s1,a0 - 802052ca: 0534ac23 sw s3,88(s1) + 802052d4: 1482 slli s1,s1,0x20 + 802052d6: 9081 srli s1,s1,0x20 + 802052d8: 94aa add s1,s1,a0 + 802052da: 0534ac23 sw s3,88(s1) bwrite(b); - 802052ce: ffffe097 auipc ra,0xffffe - 802052d2: 208080e7 jalr 520(ra) # 802034d6 <bwrite> + 802052de: ffffe097 auipc ra,0xffffe + 802052e2: 1fa080e7 jalr 506(ra) # 802034d8 <bwrite> brelse(b); - 802052d6: 854a mv a0,s2 - 802052d8: ffffe097 auipc ra,0xffffe - 802052dc: 23a080e7 jalr 570(ra) # 80203512 <brelse> + 802052e6: 854a mv a0,s2 + 802052e8: ffffe097 auipc ra,0xffffe + 802052ec: 22c080e7 jalr 556(ra) # 80203514 <brelse> return 0; - 802052e0: 4501 li a0,0 -} - 802052e2: 70a2 ld ra,40(sp) - 802052e4: 7402 ld s0,32(sp) - 802052e6: 64e2 ld s1,24(sp) - 802052e8: 6942 ld s2,16(sp) - 802052ea: 69a2 ld s3,8(sp) - 802052ec: 6a02 ld s4,0(sp) - 802052ee: 6145 addi sp,sp,48 - 802052f0: 8082 ret + 802052f0: 4501 li a0,0 +} + 802052f2: 70a2 ld ra,40(sp) + 802052f4: 7402 ld s0,32(sp) + 802052f6: 64e2 ld s1,24(sp) + 802052f8: 6942 ld s2,16(sp) + 802052fa: 69a2 ld s3,8(sp) + 802052fc: 6a02 ld s4,0(sp) + 802052fe: 6145 addi sp,sp,48 + 80205300: 8082 ret return -1; - 802052f2: 557d li a0,-1 + 80205302: 557d li a0,-1 } - 802052f4: 8082 ret + 80205304: 8082 ret -00000000802052f6 <reloc_clus>: +0000000080205306 <reloc_clus>: * @param off the offset from the beginning of the relative file * @param alloc whether alloc new cluster when meeting end of FAT chains * @return the offset from the new cur_clus */ static int reloc_clus(struct dirent *entry, uint off, int alloc) { - 802052f6: 715d addi sp,sp,-80 - 802052f8: e486 sd ra,72(sp) - 802052fa: e0a2 sd s0,64(sp) - 802052fc: fc26 sd s1,56(sp) - 802052fe: f84a sd s2,48(sp) - 80205300: f44e sd s3,40(sp) - 80205302: f052 sd s4,32(sp) - 80205304: ec56 sd s5,24(sp) - 80205306: e85a sd s6,16(sp) - 80205308: e45e sd s7,8(sp) - 8020530a: 0880 addi s0,sp,80 - 8020530c: 84aa mv s1,a0 - 8020530e: 8a2e mv s4,a1 + 80205306: 715d addi sp,sp,-80 + 80205308: e486 sd ra,72(sp) + 8020530a: e0a2 sd s0,64(sp) + 8020530c: fc26 sd s1,56(sp) + 8020530e: f84a sd s2,48(sp) + 80205310: f44e sd s3,40(sp) + 80205312: f052 sd s4,32(sp) + 80205314: ec56 sd s5,24(sp) + 80205316: e85a sd s6,16(sp) + 80205318: e45e sd s7,8(sp) + 8020531a: 0880 addi s0,sp,80 + 8020531c: 84aa mv s1,a0 + 8020531e: 8a2e mv s4,a1 int clus_num = off / fat.byts_per_clus; - 80205310: 00019b97 auipc s7,0x19 - 80205314: 124bab83 lw s7,292(s7) # 8021e434 <fat+0xc> - 80205318: 0375d9bb divuw s3,a1,s7 + 80205320: 00019b97 auipc s7,0x19 + 80205324: 114bab83 lw s7,276(s7) # 8021e434 <fat+0xc> + 80205328: 0375d9bb divuw s3,a1,s7 while (clus_num > entry->clus_cnt) { - 8020531c: 11052703 lw a4,272(a0) - 80205320: 07377563 bgeu a4,s3,8020538a <reloc_clus+0x94> - 80205324: 8b32 mv s6,a2 + 8020532c: 11052703 lw a4,272(a0) + 80205330: 07377563 bgeu a4,s3,8020539a <reloc_clus+0x94> + 80205334: 8b32 mv s6,a2 int clus = read_fat(entry->cur_clus); if (clus >= FAT32_EOC) { - 80205326: 10000ab7 lui s5,0x10000 - 8020532a: 1add addi s5,s5,-9 # ffffff7 <_entry-0x70200009> - 8020532c: a81d j 80205362 <reloc_clus+0x6c> + 80205336: 10000ab7 lui s5,0x10000 + 8020533a: 1add addi s5,s5,-9 # ffffff7 <_entry-0x70200009> + 8020533c: a81d j 80205372 <reloc_clus+0x6c> if (alloc) { clus = alloc_clus(entry->dev); - 8020532e: 1144c503 lbu a0,276(s1) - 80205332: 00000097 auipc ra,0x0 - 80205336: e02080e7 jalr -510(ra) # 80205134 <alloc_clus> - 8020533a: 0005091b sext.w s2,a0 + 8020533e: 1144c503 lbu a0,276(s1) + 80205342: 00000097 auipc ra,0x0 + 80205346: e02080e7 jalr -510(ra) # 80205144 <alloc_clus> + 8020534a: 0005091b sext.w s2,a0 write_fat(entry->cur_clus, clus); - 8020533e: 85ca mv a1,s2 - 80205340: 10c4a503 lw a0,268(s1) - 80205344: 00000097 auipc ra,0x0 - 80205348: f32080e7 jalr -206(ra) # 80205276 <write_fat> + 8020534e: 85ca mv a1,s2 + 80205350: 10c4a503 lw a0,268(s1) + 80205354: 00000097 auipc ra,0x0 + 80205358: f32080e7 jalr -206(ra) # 80205286 <write_fat> entry->cur_clus = entry->first_clus; entry->clus_cnt = 0; return -1; } } entry->cur_clus = clus; - 8020534c: 1124a623 sw s2,268(s1) + 8020535c: 1124a623 sw s2,268(s1) entry->clus_cnt++; - 80205350: 1104a783 lw a5,272(s1) - 80205354: 2785 addiw a5,a5,1 - 80205356: 0007871b sext.w a4,a5 - 8020535a: 10f4a823 sw a5,272(s1) + 80205360: 1104a783 lw a5,272(s1) + 80205364: 2785 addiw a5,a5,1 + 80205366: 0007871b sext.w a4,a5 + 8020536a: 10f4a823 sw a5,272(s1) while (clus_num > entry->clus_cnt) { - 8020535e: 03377663 bgeu a4,s3,8020538a <reloc_clus+0x94> + 8020536e: 03377663 bgeu a4,s3,8020539a <reloc_clus+0x94> int clus = read_fat(entry->cur_clus); - 80205362: 10c4a503 lw a0,268(s1) - 80205366: 00000097 auipc ra,0x0 - 8020536a: d58080e7 jalr -680(ra) # 802050be <read_fat> - 8020536e: 0005091b sext.w s2,a0 + 80205372: 10c4a503 lw a0,268(s1) + 80205376: 00000097 auipc ra,0x0 + 8020537a: d58080e7 jalr -680(ra) # 802050ce <read_fat> + 8020537e: 0005091b sext.w s2,a0 if (clus >= FAT32_EOC) { - 80205372: fd2adde3 bge s5,s2,8020534c <reloc_clus+0x56> + 80205382: fd2adde3 bge s5,s2,8020535c <reloc_clus+0x56> if (alloc) { - 80205376: fa0b1ce3 bnez s6,8020532e <reloc_clus+0x38> + 80205386: fa0b1ce3 bnez s6,8020533e <reloc_clus+0x38> entry->cur_clus = entry->first_clus; - 8020537a: 1044a783 lw a5,260(s1) - 8020537e: 10f4a623 sw a5,268(s1) + 8020538a: 1044a783 lw a5,260(s1) + 8020538e: 10f4a623 sw a5,268(s1) entry->clus_cnt = 0; - 80205382: 1004a823 sw zero,272(s1) + 80205392: 1004a823 sw zero,272(s1) return -1; - 80205386: 557d li a0,-1 - 80205388: a881 j 802053d8 <reloc_clus+0xe2> + 80205396: 557d li a0,-1 + 80205398: a881 j 802053e8 <reloc_clus+0xe2> } if (clus_num < entry->clus_cnt) { - 8020538a: 04e9f163 bgeu s3,a4,802053cc <reloc_clus+0xd6> + 8020539a: 04e9f163 bgeu s3,a4,802053dc <reloc_clus+0xd6> entry->cur_clus = entry->first_clus; - 8020538e: 1044a783 lw a5,260(s1) - 80205392: 10f4a623 sw a5,268(s1) + 8020539e: 1044a783 lw a5,260(s1) + 802053a2: 10f4a623 sw a5,268(s1) entry->clus_cnt = 0; - 80205396: 1004a823 sw zero,272(s1) + 802053a6: 1004a823 sw zero,272(s1) while (entry->clus_cnt < clus_num) { - 8020539a: 037a6963 bltu s4,s7,802053cc <reloc_clus+0xd6> + 802053aa: 037a6963 bltu s4,s7,802053dc <reloc_clus+0xd6> entry->cur_clus = read_fat(entry->cur_clus); if (entry->cur_clus >= FAT32_EOC) { - 8020539e: 10000937 lui s2,0x10000 - 802053a2: 195d addi s2,s2,-9 # ffffff7 <_entry-0x70200009> + 802053ae: 10000937 lui s2,0x10000 + 802053b2: 195d addi s2,s2,-9 # ffffff7 <_entry-0x70200009> entry->cur_clus = read_fat(entry->cur_clus); - 802053a4: 10c4a503 lw a0,268(s1) - 802053a8: 00000097 auipc ra,0x0 - 802053ac: d16080e7 jalr -746(ra) # 802050be <read_fat> - 802053b0: 2501 sext.w a0,a0 - 802053b2: 10a4a623 sw a0,268(s1) + 802053b4: 10c4a503 lw a0,268(s1) + 802053b8: 00000097 auipc ra,0x0 + 802053bc: d16080e7 jalr -746(ra) # 802050ce <read_fat> + 802053c0: 2501 sext.w a0,a0 + 802053c2: 10a4a623 sw a0,268(s1) if (entry->cur_clus >= FAT32_EOC) { - 802053b6: 02a96c63 bltu s2,a0,802053ee <reloc_clus+0xf8> + 802053c6: 02a96c63 bltu s2,a0,802053fe <reloc_clus+0xf8> panic("reloc_clus"); } entry->clus_cnt++; - 802053ba: 1104a783 lw a5,272(s1) - 802053be: 2785 addiw a5,a5,1 - 802053c0: 0007871b sext.w a4,a5 - 802053c4: 10f4a823 sw a5,272(s1) + 802053ca: 1104a783 lw a5,272(s1) + 802053ce: 2785 addiw a5,a5,1 + 802053d0: 0007871b sext.w a4,a5 + 802053d4: 10f4a823 sw a5,272(s1) while (entry->clus_cnt < clus_num) { - 802053c8: fd376ee3 bltu a4,s3,802053a4 <reloc_clus+0xae> + 802053d8: fd376ee3 bltu a4,s3,802053b4 <reloc_clus+0xae> } } return off % fat.byts_per_clus; - 802053cc: 00019797 auipc a5,0x19 - 802053d0: 0687a783 lw a5,104(a5) # 8021e434 <fat+0xc> - 802053d4: 02fa753b remuw a0,s4,a5 -} - 802053d8: 60a6 ld ra,72(sp) - 802053da: 6406 ld s0,64(sp) - 802053dc: 74e2 ld s1,56(sp) - 802053de: 7942 ld s2,48(sp) - 802053e0: 79a2 ld s3,40(sp) - 802053e2: 7a02 ld s4,32(sp) - 802053e4: 6ae2 ld s5,24(sp) - 802053e6: 6b42 ld s6,16(sp) - 802053e8: 6ba2 ld s7,8(sp) - 802053ea: 6161 addi sp,sp,80 - 802053ec: 8082 ret + 802053dc: 00019797 auipc a5,0x19 + 802053e0: 0587a783 lw a5,88(a5) # 8021e434 <fat+0xc> + 802053e4: 02fa753b remuw a0,s4,a5 +} + 802053e8: 60a6 ld ra,72(sp) + 802053ea: 6406 ld s0,64(sp) + 802053ec: 74e2 ld s1,56(sp) + 802053ee: 7942 ld s2,48(sp) + 802053f0: 79a2 ld s3,40(sp) + 802053f2: 7a02 ld s4,32(sp) + 802053f4: 6ae2 ld s5,24(sp) + 802053f6: 6b42 ld s6,16(sp) + 802053f8: 6ba2 ld s7,8(sp) + 802053fa: 6161 addi sp,sp,80 + 802053fc: 8082 ret panic("reloc_clus"); - 802053ee: 00004517 auipc a0,0x4 - 802053f2: 7c250513 addi a0,a0,1986 # 80209bb0 <digits+0x830> - 802053f6: ffffb097 auipc ra,0xffffb - 802053fa: d4e080e7 jalr -690(ra) # 80200144 <panic> - -00000000802053fe <rw_clus>: -{ - 802053fe: 7119 addi sp,sp,-128 - 80205400: fc86 sd ra,120(sp) - 80205402: f8a2 sd s0,112(sp) - 80205404: f4a6 sd s1,104(sp) - 80205406: f0ca sd s2,96(sp) - 80205408: ecce sd s3,88(sp) - 8020540a: e8d2 sd s4,80(sp) - 8020540c: e4d6 sd s5,72(sp) - 8020540e: e0da sd s6,64(sp) - 80205410: fc5e sd s7,56(sp) - 80205412: f862 sd s8,48(sp) - 80205414: f466 sd s9,40(sp) - 80205416: f06a sd s10,32(sp) - 80205418: ec6e sd s11,24(sp) - 8020541a: 0100 addi s0,sp,128 - 8020541c: f8c43423 sd a2,-120(s0) - 80205420: 8b36 mv s6,a3 - 80205422: 8c3e mv s8,a5 + 802053fe: 00004517 auipc a0,0x4 + 80205402: 7ba50513 addi a0,a0,1978 # 80209bb8 <digits+0x838> + 80205406: ffffb097 auipc ra,0xffffb + 8020540a: d3e080e7 jalr -706(ra) # 80200144 <panic> + +000000008020540e <rw_clus>: +{ + 8020540e: 7119 addi sp,sp,-128 + 80205410: fc86 sd ra,120(sp) + 80205412: f8a2 sd s0,112(sp) + 80205414: f4a6 sd s1,104(sp) + 80205416: f0ca sd s2,96(sp) + 80205418: ecce sd s3,88(sp) + 8020541a: e8d2 sd s4,80(sp) + 8020541c: e4d6 sd s5,72(sp) + 8020541e: e0da sd s6,64(sp) + 80205420: fc5e sd s7,56(sp) + 80205422: f862 sd s8,48(sp) + 80205424: f466 sd s9,40(sp) + 80205426: f06a sd s10,32(sp) + 80205428: ec6e sd s11,24(sp) + 8020542a: 0100 addi s0,sp,128 + 8020542c: f8c43423 sd a2,-120(s0) + 80205430: 8b36 mv s6,a3 + 80205432: 8c3e mv s8,a5 if (off + n > fat.byts_per_clus) - 80205424: 00f706bb addw a3,a4,a5 - 80205428: 00019797 auipc a5,0x19 - 8020542c: 00c7a783 lw a5,12(a5) # 8021e434 <fat+0xc> - 80205430: 02d7ef63 bltu a5,a3,8020546e <rw_clus+0x70> - 80205434: 8cae mv s9,a1 + 80205434: 00f706bb addw a3,a4,a5 + 80205438: 00019797 auipc a5,0x19 + 8020543c: ffc7a783 lw a5,-4(a5) # 8021e434 <fat+0xc> + 80205440: 02d7ef63 bltu a5,a3,8020547e <rw_clus+0x70> + 80205444: 8cae mv s9,a1 uint sec = first_sec_of_clus(cluster) + off / fat.bpb.byts_per_sec; - 80205436: 00019797 auipc a5,0x19 - 8020543a: ff278793 addi a5,a5,-14 # 8021e428 <fat> - 8020543e: 0107d683 lhu a3,16(a5) + 80205446: 00019797 auipc a5,0x19 + 8020544a: fe278793 addi a5,a5,-30 # 8021e428 <fat> + 8020544e: 0107d683 lhu a3,16(a5) return ((cluster - 2) * fat.bpb.sec_per_clus) + fat.first_data_sec; - 80205442: ffe5099b addiw s3,a0,-2 - 80205446: 0127c603 lbu a2,18(a5) - 8020544a: 02c989bb mulw s3,s3,a2 - 8020544e: 439c lw a5,0(a5) - 80205450: 00f989bb addw s3,s3,a5 + 80205452: ffe5099b addiw s3,a0,-2 + 80205456: 0127c603 lbu a2,18(a5) + 8020545a: 02c989bb mulw s3,s3,a2 + 8020545e: 439c lw a5,0(a5) + 80205460: 00f989bb addw s3,s3,a5 uint sec = first_sec_of_clus(cluster) + off / fat.bpb.byts_per_sec; - 80205454: 02d757bb divuw a5,a4,a3 - 80205458: 00f989bb addw s3,s3,a5 + 80205464: 02d757bb divuw a5,a4,a3 + 80205468: 00f989bb addw s3,s3,a5 off = off % fat.bpb.byts_per_sec; - 8020545c: 02d77abb remuw s5,a4,a3 + 8020546c: 02d77abb remuw s5,a4,a3 for (tot = 0; tot < n; tot += m, off += m, data += m, sec++) { - 80205460: 0e0c0363 beqz s8,80205546 <rw_clus+0x148> - 80205464: 4a01 li s4,0 + 80205470: 0e0c0363 beqz s8,80205556 <rw_clus+0x148> + 80205474: 4a01 li s4,0 m = BSIZE - off % BSIZE; - 80205466: 20000d93 li s11,512 + 80205476: 20000d93 li s11,512 if (bad == -1) { - 8020546a: 5d7d li s10,-1 - 8020546c: a095 j 802054d0 <rw_clus+0xd2> + 8020547a: 5d7d li s10,-1 + 8020547c: a095 j 802054e0 <rw_clus+0xd2> panic("offset out of range"); - 8020546e: 00004517 auipc a0,0x4 - 80205472: 75250513 addi a0,a0,1874 # 80209bc0 <digits+0x840> - 80205476: ffffb097 auipc ra,0xffffb - 8020547a: cce080e7 jalr -818(ra) # 80200144 <panic> + 8020547e: 00004517 auipc a0,0x4 + 80205482: 74a50513 addi a0,a0,1866 # 80209bc8 <digits+0x848> + 80205486: ffffb097 auipc ra,0xffffb + 8020548a: cbe080e7 jalr -834(ra) # 80200144 <panic> bwrite(bp); - 8020547e: 854a mv a0,s2 - 80205480: ffffe097 auipc ra,0xffffe - 80205484: 056080e7 jalr 86(ra) # 802034d6 <bwrite> + 8020548e: 854a mv a0,s2 + 80205490: ffffe097 auipc ra,0xffffe + 80205494: 048080e7 jalr 72(ra) # 802034d8 <bwrite> brelse(bp); - 80205488: 854a mv a0,s2 - 8020548a: ffffe097 auipc ra,0xffffe - 8020548e: 088080e7 jalr 136(ra) # 80203512 <brelse> + 80205498: 854a mv a0,s2 + 8020549a: ffffe097 auipc ra,0xffffe + 8020549e: 07a080e7 jalr 122(ra) # 80203514 <brelse> if (bad == -1) { - 80205492: a02d j 802054bc <rw_clus+0xbe> + 802054a2: a02d j 802054cc <rw_clus+0xbe> bad = either_copyout(user, data, bp->data + (off % BSIZE), m); - 80205494: 05890613 addi a2,s2,88 - 80205498: 1682 slli a3,a3,0x20 - 8020549a: 9281 srli a3,a3,0x20 - 8020549c: 963a add a2,a2,a4 - 8020549e: 85da mv a1,s6 - 802054a0: f8843503 ld a0,-120(s0) - 802054a4: ffffd097 auipc ra,0xffffd - 802054a8: 06e080e7 jalr 110(ra) # 80202512 <either_copyout> - 802054ac: 8baa mv s7,a0 + 802054a4: 05890613 addi a2,s2,88 + 802054a8: 1682 slli a3,a3,0x20 + 802054aa: 9281 srli a3,a3,0x20 + 802054ac: 963a add a2,a2,a4 + 802054ae: 85da mv a1,s6 + 802054b0: f8843503 ld a0,-120(s0) + 802054b4: ffffd097 auipc ra,0xffffd + 802054b8: 05e080e7 jalr 94(ra) # 80202512 <either_copyout> + 802054bc: 8baa mv s7,a0 brelse(bp); - 802054ae: 854a mv a0,s2 - 802054b0: ffffe097 auipc ra,0xffffe - 802054b4: 062080e7 jalr 98(ra) # 80203512 <brelse> + 802054be: 854a mv a0,s2 + 802054c0: ffffe097 auipc ra,0xffffe + 802054c4: 054080e7 jalr 84(ra) # 80203514 <brelse> if (bad == -1) { - 802054b8: 07ab8763 beq s7,s10,80205526 <rw_clus+0x128> + 802054c8: 07ab8763 beq s7,s10,80205536 <rw_clus+0x128> for (tot = 0; tot < n; tot += m, off += m, data += m, sec++) { - 802054bc: 01448a3b addw s4,s1,s4 - 802054c0: 01548abb addw s5,s1,s5 - 802054c4: 1482 slli s1,s1,0x20 - 802054c6: 9081 srli s1,s1,0x20 - 802054c8: 9b26 add s6,s6,s1 - 802054ca: 2985 addiw s3,s3,1 - 802054cc: 058a7d63 bgeu s4,s8,80205526 <rw_clus+0x128> + 802054cc: 01448a3b addw s4,s1,s4 + 802054d0: 01548abb addw s5,s1,s5 + 802054d4: 1482 slli s1,s1,0x20 + 802054d6: 9081 srli s1,s1,0x20 + 802054d8: 9b26 add s6,s6,s1 + 802054da: 2985 addiw s3,s3,1 + 802054dc: 058a7d63 bgeu s4,s8,80205536 <rw_clus+0x128> bp = bread(0, sec); - 802054d0: 85ce mv a1,s3 - 802054d2: 4501 li a0,0 - 802054d4: ffffe097 auipc ra,0xffffe - 802054d8: f12080e7 jalr -238(ra) # 802033e6 <bread> - 802054dc: 892a mv s2,a0 + 802054e0: 85ce mv a1,s3 + 802054e2: 4501 li a0,0 + 802054e4: ffffe097 auipc ra,0xffffe + 802054e8: f04080e7 jalr -252(ra) # 802033e8 <bread> + 802054ec: 892a mv s2,a0 m = BSIZE - off % BSIZE; - 802054de: 1ffaf713 andi a4,s5,511 + 802054ee: 1ffaf713 andi a4,s5,511 if (n - tot < m) { - 802054e2: 414c07bb subw a5,s8,s4 + 802054f2: 414c07bb subw a5,s8,s4 m = BSIZE - off % BSIZE; - 802054e6: 40ed863b subw a2,s11,a4 - 802054ea: 86be mv a3,a5 - 802054ec: 2781 sext.w a5,a5 - 802054ee: 0006059b sext.w a1,a2 - 802054f2: 00f5f363 bgeu a1,a5,802054f8 <rw_clus+0xfa> - 802054f6: 86b2 mv a3,a2 - 802054f8: 0006849b sext.w s1,a3 + 802054f6: 40ed863b subw a2,s11,a4 + 802054fa: 86be mv a3,a5 + 802054fc: 2781 sext.w a5,a5 + 802054fe: 0006059b sext.w a1,a2 + 80205502: 00f5f363 bgeu a1,a5,80205508 <rw_clus+0xfa> + 80205506: 86b2 mv a3,a2 + 80205508: 0006849b sext.w s1,a3 if (write) { - 802054fc: f80c8ce3 beqz s9,80205494 <rw_clus+0x96> + 8020550c: f80c8ce3 beqz s9,802054a4 <rw_clus+0x96> if ((bad = either_copyin(bp->data + (off % BSIZE), user, data, m)) != -1) { - 80205500: 05890513 addi a0,s2,88 - 80205504: 1682 slli a3,a3,0x20 - 80205506: 9281 srli a3,a3,0x20 - 80205508: 865a mv a2,s6 - 8020550a: f8843583 ld a1,-120(s0) - 8020550e: 953a add a0,a0,a4 - 80205510: ffffd097 auipc ra,0xffffd - 80205514: 038080e7 jalr 56(ra) # 80202548 <either_copyin> - 80205518: f7a513e3 bne a0,s10,8020547e <rw_clus+0x80> + 80205510: 05890513 addi a0,s2,88 + 80205514: 1682 slli a3,a3,0x20 + 80205516: 9281 srli a3,a3,0x20 + 80205518: 865a mv a2,s6 + 8020551a: f8843583 ld a1,-120(s0) + 8020551e: 953a add a0,a0,a4 + 80205520: ffffd097 auipc ra,0xffffd + 80205524: 028080e7 jalr 40(ra) # 80202548 <either_copyin> + 80205528: f7a513e3 bne a0,s10,8020548e <rw_clus+0x80> brelse(bp); - 8020551c: 854a mv a0,s2 - 8020551e: ffffe097 auipc ra,0xffffe - 80205522: ff4080e7 jalr -12(ra) # 80203512 <brelse> -} - 80205526: 8552 mv a0,s4 - 80205528: 70e6 ld ra,120(sp) - 8020552a: 7446 ld s0,112(sp) - 8020552c: 74a6 ld s1,104(sp) - 8020552e: 7906 ld s2,96(sp) - 80205530: 69e6 ld s3,88(sp) - 80205532: 6a46 ld s4,80(sp) - 80205534: 6aa6 ld s5,72(sp) - 80205536: 6b06 ld s6,64(sp) - 80205538: 7be2 ld s7,56(sp) - 8020553a: 7c42 ld s8,48(sp) - 8020553c: 7ca2 ld s9,40(sp) - 8020553e: 7d02 ld s10,32(sp) - 80205540: 6de2 ld s11,24(sp) - 80205542: 6109 addi sp,sp,128 - 80205544: 8082 ret + 8020552c: 854a mv a0,s2 + 8020552e: ffffe097 auipc ra,0xffffe + 80205532: fe6080e7 jalr -26(ra) # 80203514 <brelse> +} + 80205536: 8552 mv a0,s4 + 80205538: 70e6 ld ra,120(sp) + 8020553a: 7446 ld s0,112(sp) + 8020553c: 74a6 ld s1,104(sp) + 8020553e: 7906 ld s2,96(sp) + 80205540: 69e6 ld s3,88(sp) + 80205542: 6a46 ld s4,80(sp) + 80205544: 6aa6 ld s5,72(sp) + 80205546: 6b06 ld s6,64(sp) + 80205548: 7be2 ld s7,56(sp) + 8020554a: 7c42 ld s8,48(sp) + 8020554c: 7ca2 ld s9,40(sp) + 8020554e: 7d02 ld s10,32(sp) + 80205550: 6de2 ld s11,24(sp) + 80205552: 6109 addi sp,sp,128 + 80205554: 8082 ret for (tot = 0; tot < n; tot += m, off += m, data += m, sec++) { - 80205546: 8a62 mv s4,s8 - 80205548: bff9 j 80205526 <rw_clus+0x128> + 80205556: 8a62 mv s4,s8 + 80205558: bff9 j 80205536 <rw_clus+0x128> -000000008020554a <eget>: +000000008020555a <eget>: // by their whole path. But when parsing a path, we open all the directories through it, // which forms a linked list from the final file to the root. Thus, we use the "parent" pointer // to recognize whether an entry with the "name" as given is really the file we want in the right path. // Should never get root by eget, it's easy to understand. static struct dirent *eget(struct dirent *parent, char *name) { - 8020554a: 7139 addi sp,sp,-64 - 8020554c: fc06 sd ra,56(sp) - 8020554e: f822 sd s0,48(sp) - 80205550: f426 sd s1,40(sp) - 80205552: f04a sd s2,32(sp) - 80205554: ec4e sd s3,24(sp) - 80205556: e852 sd s4,16(sp) - 80205558: e456 sd s5,8(sp) - 8020555a: 0080 addi s0,sp,64 - 8020555c: 8a2a mv s4,a0 - 8020555e: 8aae mv s5,a1 + 8020555a: 7139 addi sp,sp,-64 + 8020555c: fc06 sd ra,56(sp) + 8020555e: f822 sd s0,48(sp) + 80205560: f426 sd s1,40(sp) + 80205562: f04a sd s2,32(sp) + 80205564: ec4e sd s3,24(sp) + 80205566: e852 sd s4,16(sp) + 80205568: e456 sd s5,8(sp) + 8020556a: 0080 addi s0,sp,64 + 8020556c: 8a2a mv s4,a0 + 8020556e: 8aae mv s5,a1 struct dirent *ep; acquire(&ecache.lock); - 80205560: 00019517 auipc a0,0x19 - 80205564: 05850513 addi a0,a0,88 # 8021e5b8 <ecache> - 80205568: ffffb097 auipc ra,0xffffb - 8020556c: 15e080e7 jalr 350(ra) # 802006c6 <acquire> + 80205570: 00019517 auipc a0,0x19 + 80205574: 04850513 addi a0,a0,72 # 8021e5b8 <ecache> + 80205578: ffffb097 auipc ra,0xffffb + 8020557c: 14e080e7 jalr 334(ra) # 802006c6 <acquire> if (name) { - 80205570: 060a8b63 beqz s5,802055e6 <eget+0x9c> + 80205580: 060a8b63 beqz s5,802055f6 <eget+0x9c> for (ep = root.next; ep != &root; ep = ep->next) { // LRU algo - 80205574: 00019497 auipc s1,0x19 - 80205578: 0044b483 ld s1,4(s1) # 8021e578 <root+0x128> - 8020557c: 00019797 auipc a5,0x19 - 80205580: ed478793 addi a5,a5,-300 # 8021e450 <root> - 80205584: 06f48163 beq s1,a5,802055e6 <eget+0x9c> + 80205584: 00019497 auipc s1,0x19 + 80205588: ff44b483 ld s1,-12(s1) # 8021e578 <root+0x128> + 8020558c: 00019797 auipc a5,0x19 + 80205590: ec478793 addi a5,a5,-316 # 8021e450 <root> + 80205594: 06f48163 beq s1,a5,802055f6 <eget+0x9c> if (ep->valid == 1 && ep->parent == parent - 80205588: 4905 li s2,1 + 80205598: 4905 li s2,1 for (ep = root.next; ep != &root; ep = ep->next) { // LRU algo - 8020558a: 89be mv s3,a5 - 8020558c: a029 j 80205596 <eget+0x4c> - 8020558e: 1284b483 ld s1,296(s1) - 80205592: 05348a63 beq s1,s3,802055e6 <eget+0x9c> + 8020559a: 89be mv s3,a5 + 8020559c: a029 j 802055a6 <eget+0x4c> + 8020559e: 1284b483 ld s1,296(s1) + 802055a2: 05348a63 beq s1,s3,802055f6 <eget+0x9c> if (ep->valid == 1 && ep->parent == parent - 80205596: 11649783 lh a5,278(s1) - 8020559a: ff279ae3 bne a5,s2,8020558e <eget+0x44> - 8020559e: 1204b783 ld a5,288(s1) - 802055a2: ff4796e3 bne a5,s4,8020558e <eget+0x44> + 802055a6: 11649783 lh a5,278(s1) + 802055aa: ff279ae3 bne a5,s2,8020559e <eget+0x44> + 802055ae: 1204b783 ld a5,288(s1) + 802055b2: ff4796e3 bne a5,s4,8020559e <eget+0x44> && strncmp(ep->filename, name, FAT32_MAX_FILENAME) == 0) { - 802055a6: 0ff00613 li a2,255 - 802055aa: 85d6 mv a1,s5 - 802055ac: 8526 mv a0,s1 - 802055ae: ffffb097 auipc ra,0xffffb - 802055b2: 28c080e7 jalr 652(ra) # 8020083a <strncmp> - 802055b6: fd61 bnez a0,8020558e <eget+0x44> + 802055b6: 0ff00613 li a2,255 + 802055ba: 85d6 mv a1,s5 + 802055bc: 8526 mv a0,s1 + 802055be: ffffb097 auipc ra,0xffffb + 802055c2: 27c080e7 jalr 636(ra) # 8020083a <strncmp> + 802055c6: fd61 bnez a0,8020559e <eget+0x44> if (ep->ref++ == 0) { - 802055b8: 1184a783 lw a5,280(s1) - 802055bc: 0017871b addiw a4,a5,1 - 802055c0: 10e4ac23 sw a4,280(s1) - 802055c4: eb81 bnez a5,802055d4 <eget+0x8a> + 802055c8: 1184a783 lw a5,280(s1) + 802055cc: 0017871b addiw a4,a5,1 + 802055d0: 10e4ac23 sw a4,280(s1) + 802055d4: eb81 bnez a5,802055e4 <eget+0x8a> ep->parent->ref++; - 802055c6: 1204b703 ld a4,288(s1) - 802055ca: 11872783 lw a5,280(a4) - 802055ce: 2785 addiw a5,a5,1 - 802055d0: 10f72c23 sw a5,280(a4) + 802055d6: 1204b703 ld a4,288(s1) + 802055da: 11872783 lw a5,280(a4) + 802055de: 2785 addiw a5,a5,1 + 802055e0: 10f72c23 sw a5,280(a4) } release(&ecache.lock); - 802055d4: 00019517 auipc a0,0x19 - 802055d8: fe450513 addi a0,a0,-28 # 8021e5b8 <ecache> - 802055dc: ffffb097 auipc ra,0xffffb - 802055e0: 13e080e7 jalr 318(ra) # 8020071a <release> + 802055e4: 00019517 auipc a0,0x19 + 802055e8: fd450513 addi a0,a0,-44 # 8021e5b8 <ecache> + 802055ec: ffffb097 auipc ra,0xffffb + 802055f0: 12e080e7 jalr 302(ra) # 8020071a <release> // edup(ep->parent); return ep; - 802055e4: a085 j 80205644 <eget+0xfa> + 802055f4: a085 j 80205654 <eget+0xfa> } } } for (ep = root.prev; ep != &root; ep = ep->prev) { // LRU algo - 802055e6: 00019497 auipc s1,0x19 - 802055ea: f9a4b483 ld s1,-102(s1) # 8021e580 <root+0x130> - 802055ee: 00019797 auipc a5,0x19 - 802055f2: e6278793 addi a5,a5,-414 # 8021e450 <root> - 802055f6: 00f48a63 beq s1,a5,8020560a <eget+0xc0> - 802055fa: 873e mv a4,a5 + 802055f6: 00019497 auipc s1,0x19 + 802055fa: f8a4b483 ld s1,-118(s1) # 8021e580 <root+0x130> + 802055fe: 00019797 auipc a5,0x19 + 80205602: e5278793 addi a5,a5,-430 # 8021e450 <root> + 80205606: 00f48a63 beq s1,a5,8020561a <eget+0xc0> + 8020560a: 873e mv a4,a5 if (ep->ref == 0) { - 802055fc: 1184a783 lw a5,280(s1) - 80205600: cf89 beqz a5,8020561a <eget+0xd0> + 8020560c: 1184a783 lw a5,280(s1) + 80205610: cf89 beqz a5,8020562a <eget+0xd0> for (ep = root.prev; ep != &root; ep = ep->prev) { // LRU algo - 80205602: 1304b483 ld s1,304(s1) - 80205606: fee49be3 bne s1,a4,802055fc <eget+0xb2> + 80205612: 1304b483 ld s1,304(s1) + 80205616: fee49be3 bne s1,a4,8020560c <eget+0xb2> ep->dirty = 0; release(&ecache.lock); return ep; } } panic("eget: insufficient ecache"); - 8020560a: 00004517 auipc a0,0x4 - 8020560e: 5ce50513 addi a0,a0,1486 # 80209bd8 <digits+0x858> - 80205612: ffffb097 auipc ra,0xffffb - 80205616: b32080e7 jalr -1230(ra) # 80200144 <panic> + 8020561a: 00004517 auipc a0,0x4 + 8020561e: 5c650513 addi a0,a0,1478 # 80209be0 <digits+0x860> + 80205622: ffffb097 auipc ra,0xffffb + 80205626: b22080e7 jalr -1246(ra) # 80200144 <panic> ep->ref = 1; - 8020561a: 4785 li a5,1 - 8020561c: 10f4ac23 sw a5,280(s1) + 8020562a: 4785 li a5,1 + 8020562c: 10f4ac23 sw a5,280(s1) ep->dev = parent->dev; - 80205620: 114a4783 lbu a5,276(s4) - 80205624: 10f48a23 sb a5,276(s1) + 80205630: 114a4783 lbu a5,276(s4) + 80205634: 10f48a23 sb a5,276(s1) ep->off = 0; - 80205628: 1004ae23 sw zero,284(s1) + 80205638: 1004ae23 sw zero,284(s1) ep->valid = 0; - 8020562c: 10049b23 sh zero,278(s1) + 8020563c: 10049b23 sh zero,278(s1) ep->dirty = 0; - 80205630: 10048aa3 sb zero,277(s1) + 80205640: 10048aa3 sb zero,277(s1) release(&ecache.lock); - 80205634: 00019517 auipc a0,0x19 - 80205638: f8450513 addi a0,a0,-124 # 8021e5b8 <ecache> - 8020563c: ffffb097 auipc ra,0xffffb - 80205640: 0de080e7 jalr 222(ra) # 8020071a <release> + 80205644: 00019517 auipc a0,0x19 + 80205648: f7450513 addi a0,a0,-140 # 8021e5b8 <ecache> + 8020564c: ffffb097 auipc ra,0xffffb + 80205650: 0ce080e7 jalr 206(ra) # 8020071a <release> return 0; } - 80205644: 8526 mv a0,s1 - 80205646: 70e2 ld ra,56(sp) - 80205648: 7442 ld s0,48(sp) - 8020564a: 74a2 ld s1,40(sp) - 8020564c: 7902 ld s2,32(sp) - 8020564e: 69e2 ld s3,24(sp) - 80205650: 6a42 ld s4,16(sp) - 80205652: 6aa2 ld s5,8(sp) - 80205654: 6121 addi sp,sp,64 - 80205656: 8082 ret - -0000000080205658 <read_entry_name>: + 80205654: 8526 mv a0,s1 + 80205656: 70e2 ld ra,56(sp) + 80205658: 7442 ld s0,48(sp) + 8020565a: 74a2 ld s1,40(sp) + 8020565c: 7902 ld s2,32(sp) + 8020565e: 69e2 ld s3,24(sp) + 80205660: 6a42 ld s4,16(sp) + 80205662: 6aa2 ld s5,8(sp) + 80205664: 6121 addi sp,sp,64 + 80205666: 8082 ret + +0000000080205668 <read_entry_name>: * @param buffer pointer to the array that stores the name * @param raw_entry pointer to the entry in a sector buffer * @param islong if non-zero, read as l-n-e, otherwise s-n-e. */ static void read_entry_name(char *buffer, union dentry *d) { - 80205658: 7139 addi sp,sp,-64 - 8020565a: fc06 sd ra,56(sp) - 8020565c: f822 sd s0,48(sp) - 8020565e: f426 sd s1,40(sp) - 80205660: f04a sd s2,32(sp) - 80205662: ec4e sd s3,24(sp) - 80205664: 0080 addi s0,sp,64 - 80205666: 84aa mv s1,a0 - 80205668: 892e mv s2,a1 + 80205668: 7139 addi sp,sp,-64 + 8020566a: fc06 sd ra,56(sp) + 8020566c: f822 sd s0,48(sp) + 8020566e: f426 sd s1,40(sp) + 80205670: f04a sd s2,32(sp) + 80205672: ec4e sd s3,24(sp) + 80205674: 0080 addi s0,sp,64 + 80205676: 84aa mv s1,a0 + 80205678: 892e mv s2,a1 if (d->lne.attr == ATTR_LONG_NAME) { // long entry branch - 8020566a: 00b5c703 lbu a4,11(a1) - 8020566e: 47bd li a5,15 - 80205670: 08f70563 beq a4,a5,802056fa <read_entry_name+0xa2> + 8020567a: 00b5c703 lbu a4,11(a1) + 8020567e: 47bd li a5,15 + 80205680: 08f70563 beq a4,a5,8020570a <read_entry_name+0xa2> snstr(buffer, d->lne.name2, NELEM(d->lne.name2)); buffer += NELEM(d->lne.name2); snstr(buffer, d->lne.name3, NELEM(d->lne.name3)); } else { // assert: only "." and ".." will enter this branch memset(buffer, 0, CHAR_SHORT_NAME + 2); // plus '.' and '\0' - 80205674: 4635 li a2,13 - 80205676: 4581 li a1,0 - 80205678: ffffb097 auipc ra,0xffffb - 8020567c: 0ea080e7 jalr 234(ra) # 80200762 <memset> + 80205684: 4635 li a2,13 + 80205686: 4581 li a1,0 + 80205688: ffffb097 auipc ra,0xffffb + 8020568c: 0da080e7 jalr 218(ra) # 80200762 <memset> int i; for (i = 0; d->sne.name[i] != ' ' && i < 8; i++) { - 80205680: 00094703 lbu a4,0(s2) - 80205684: 02000793 li a5,32 - 80205688: 0af70c63 beq a4,a5,80205740 <read_entry_name+0xe8> - 8020568c: 4785 li a5,1 - 8020568e: 02000613 li a2,32 - 80205692: 45a5 li a1,9 + 80205690: 00094703 lbu a4,0(s2) + 80205694: 02000793 li a5,32 + 80205698: 0af70c63 beq a4,a5,80205750 <read_entry_name+0xe8> + 8020569c: 4785 li a5,1 + 8020569e: 02000613 li a2,32 + 802056a2: 45a5 li a1,9 buffer[i] = d->sne.name[i]; - 80205694: 00f486b3 add a3,s1,a5 - 80205698: fee68fa3 sb a4,-1(a3) # 1fff <_entry-0x801fe001> + 802056a4: 00f486b3 add a3,s1,a5 + 802056a8: fee68fa3 sb a4,-1(a3) # 1fff <_entry-0x801fe001> for (i = 0; d->sne.name[i] != ' ' && i < 8; i++) { - 8020569c: 0007869b sext.w a3,a5 - 802056a0: 00f90733 add a4,s2,a5 - 802056a4: 00074703 lbu a4,0(a4) - 802056a8: 00c70563 beq a4,a2,802056b2 <read_entry_name+0x5a> - 802056ac: 0785 addi a5,a5,1 - 802056ae: feb793e3 bne a5,a1,80205694 <read_entry_name+0x3c> + 802056ac: 0007869b sext.w a3,a5 + 802056b0: 00f90733 add a4,s2,a5 + 802056b4: 00074703 lbu a4,0(a4) + 802056b8: 00c70563 beq a4,a2,802056c2 <read_entry_name+0x5a> + 802056bc: 0785 addi a5,a5,1 + 802056be: feb793e3 bne a5,a1,802056a4 <read_entry_name+0x3c> } if (d->sne.name[8] != ' ') { - 802056b2: 00894703 lbu a4,8(s2) - 802056b6: 02000793 li a5,32 - 802056ba: 00f70963 beq a4,a5,802056cc <read_entry_name+0x74> + 802056c2: 00894703 lbu a4,8(s2) + 802056c6: 02000793 li a5,32 + 802056ca: 00f70963 beq a4,a5,802056dc <read_entry_name+0x74> buffer[i++] = '.'; - 802056be: 00d487b3 add a5,s1,a3 - 802056c2: 02e00713 li a4,46 - 802056c6: 00e78023 sb a4,0(a5) - 802056ca: 2685 addiw a3,a3,1 + 802056ce: 00d487b3 add a5,s1,a3 + 802056d2: 02e00713 li a4,46 + 802056d6: 00e78023 sb a4,0(a5) + 802056da: 2685 addiw a3,a3,1 } for (int j = 8; j < CHAR_SHORT_NAME; j++, i++) { - 802056cc: 00890793 addi a5,s2,8 - 802056d0: 94b6 add s1,s1,a3 - 802056d2: 092d addi s2,s2,11 + 802056dc: 00890793 addi a5,s2,8 + 802056e0: 94b6 add s1,s1,a3 + 802056e2: 092d addi s2,s2,11 if (d->sne.name[j] == ' ') { break; } - 802056d4: 02000693 li a3,32 - 802056d8: 0007c703 lbu a4,0(a5) - 802056dc: 00d70863 beq a4,a3,802056ec <read_entry_name+0x94> + 802056e4: 02000693 li a3,32 + 802056e8: 0007c703 lbu a4,0(a5) + 802056ec: 00d70863 beq a4,a3,802056fc <read_entry_name+0x94> buffer[i] = d->sne.name[j]; - 802056e0: 00e48023 sb a4,0(s1) + 802056f0: 00e48023 sb a4,0(s1) for (int j = 8; j < CHAR_SHORT_NAME; j++, i++) { - 802056e4: 0785 addi a5,a5,1 - 802056e6: 0485 addi s1,s1,1 - 802056e8: ff2798e3 bne a5,s2,802056d8 <read_entry_name+0x80> + 802056f4: 0785 addi a5,a5,1 + 802056f6: 0485 addi s1,s1,1 + 802056f8: ff2798e3 bne a5,s2,802056e8 <read_entry_name+0x80> } } } - 802056ec: 70e2 ld ra,56(sp) - 802056ee: 7442 ld s0,48(sp) - 802056f0: 74a2 ld s1,40(sp) - 802056f2: 7902 ld s2,32(sp) - 802056f4: 69e2 ld s3,24(sp) - 802056f6: 6121 addi sp,sp,64 - 802056f8: 8082 ret + 802056fc: 70e2 ld ra,56(sp) + 802056fe: 7442 ld s0,48(sp) + 80205700: 74a2 ld s1,40(sp) + 80205702: 7902 ld s2,32(sp) + 80205704: 69e2 ld s3,24(sp) + 80205706: 6121 addi sp,sp,64 + 80205708: 8082 ret memmove(temp, d->lne.name1, sizeof(temp)); - 802056fa: 4629 li a2,10 - 802056fc: 0585 addi a1,a1,1 - 802056fe: fc040993 addi s3,s0,-64 - 80205702: 854e mv a0,s3 - 80205704: ffffb097 auipc ra,0xffffb - 80205708: 0ba080e7 jalr 186(ra) # 802007be <memmove> + 8020570a: 4629 li a2,10 + 8020570c: 0585 addi a1,a1,1 + 8020570e: fc040993 addi s3,s0,-64 + 80205712: 854e mv a0,s3 + 80205714: ffffb097 auipc ra,0xffffb + 80205718: 0aa080e7 jalr 170(ra) # 802007be <memmove> snstr(buffer, temp, NELEM(d->lne.name1)); - 8020570c: 4615 li a2,5 - 8020570e: 85ce mv a1,s3 - 80205710: 8526 mv a0,s1 - 80205712: ffffb097 auipc ra,0xffffb - 80205716: 230080e7 jalr 560(ra) # 80200942 <snstr> + 8020571c: 4615 li a2,5 + 8020571e: 85ce mv a1,s3 + 80205720: 8526 mv a0,s1 + 80205722: ffffb097 auipc ra,0xffffb + 80205726: 220080e7 jalr 544(ra) # 80200942 <snstr> snstr(buffer, d->lne.name2, NELEM(d->lne.name2)); - 8020571a: 4619 li a2,6 - 8020571c: 00e90593 addi a1,s2,14 - 80205720: 00548513 addi a0,s1,5 - 80205724: ffffb097 auipc ra,0xffffb - 80205728: 21e080e7 jalr 542(ra) # 80200942 <snstr> + 8020572a: 4619 li a2,6 + 8020572c: 00e90593 addi a1,s2,14 + 80205730: 00548513 addi a0,s1,5 + 80205734: ffffb097 auipc ra,0xffffb + 80205738: 20e080e7 jalr 526(ra) # 80200942 <snstr> snstr(buffer, d->lne.name3, NELEM(d->lne.name3)); - 8020572c: 4609 li a2,2 - 8020572e: 01c90593 addi a1,s2,28 - 80205732: 00b48513 addi a0,s1,11 - 80205736: ffffb097 auipc ra,0xffffb - 8020573a: 20c080e7 jalr 524(ra) # 80200942 <snstr> - 8020573e: b77d j 802056ec <read_entry_name+0x94> + 8020573c: 4609 li a2,2 + 8020573e: 01c90593 addi a1,s2,28 + 80205742: 00b48513 addi a0,s1,11 + 80205746: ffffb097 auipc ra,0xffffb + 8020574a: 1fc080e7 jalr 508(ra) # 80200942 <snstr> + 8020574e: b77d j 802056fc <read_entry_name+0x94> for (i = 0; d->sne.name[i] != ' ' && i < 8; i++) { - 80205740: 4681 li a3,0 - 80205742: bf85 j 802056b2 <read_entry_name+0x5a> - -0000000080205744 <fat32_init>: -{ - 80205744: 7139 addi sp,sp,-64 - 80205746: fc06 sd ra,56(sp) - 80205748: f822 sd s0,48(sp) - 8020574a: f426 sd s1,40(sp) - 8020574c: f04a sd s2,32(sp) - 8020574e: ec4e sd s3,24(sp) - 80205750: e852 sd s4,16(sp) - 80205752: e456 sd s5,8(sp) - 80205754: 0080 addi s0,sp,64 + 80205750: 4681 li a3,0 + 80205752: bf85 j 802056c2 <read_entry_name+0x5a> + +0000000080205754 <fat32_init>: +{ + 80205754: 7139 addi sp,sp,-64 + 80205756: fc06 sd ra,56(sp) + 80205758: f822 sd s0,48(sp) + 8020575a: f426 sd s1,40(sp) + 8020575c: f04a sd s2,32(sp) + 8020575e: ec4e sd s3,24(sp) + 80205760: e852 sd s4,16(sp) + 80205762: e456 sd s5,8(sp) + 80205764: 0080 addi s0,sp,64 struct buf *b = bread(0, 0); - 80205756: 4581 li a1,0 - 80205758: 4501 li a0,0 - 8020575a: ffffe097 auipc ra,0xffffe - 8020575e: c8c080e7 jalr -884(ra) # 802033e6 <bread> - 80205762: 892a mv s2,a0 + 80205766: 4581 li a1,0 + 80205768: 4501 li a0,0 + 8020576a: ffffe097 auipc ra,0xffffe + 8020576e: c7e080e7 jalr -898(ra) # 802033e8 <bread> + 80205772: 892a mv s2,a0 if (strncmp((char const*)(b->data + 82), "FAT32", 5)) - 80205764: 4615 li a2,5 - 80205766: 00004597 auipc a1,0x4 - 8020576a: 49258593 addi a1,a1,1170 # 80209bf8 <digits+0x878> - 8020576e: 0aa50513 addi a0,a0,170 - 80205772: ffffb097 auipc ra,0xffffb - 80205776: 0c8080e7 jalr 200(ra) # 8020083a <strncmp> - 8020577a: 16051863 bnez a0,802058ea <fat32_init+0x1a6> + 80205774: 4615 li a2,5 + 80205776: 00004597 auipc a1,0x4 + 8020577a: 48a58593 addi a1,a1,1162 # 80209c00 <digits+0x880> + 8020577e: 0aa50513 addi a0,a0,170 + 80205782: ffffb097 auipc ra,0xffffb + 80205786: 0b8080e7 jalr 184(ra) # 8020083a <strncmp> + 8020578a: 16051863 bnez a0,802058fa <fat32_init+0x1a6> memmove(&fat.bpb.byts_per_sec, b->data + 11, 2); // avoid misaligned load on k210 - 8020577e: 00019497 auipc s1,0x19 - 80205782: caa48493 addi s1,s1,-854 # 8021e428 <fat> - 80205786: 4609 li a2,2 - 80205788: 06390593 addi a1,s2,99 - 8020578c: 00019517 auipc a0,0x19 - 80205790: cac50513 addi a0,a0,-852 # 8021e438 <fat+0x10> - 80205794: ffffb097 auipc ra,0xffffb - 80205798: 02a080e7 jalr 42(ra) # 802007be <memmove> + 8020578e: 00019497 auipc s1,0x19 + 80205792: c9a48493 addi s1,s1,-870 # 8021e428 <fat> + 80205796: 4609 li a2,2 + 80205798: 06390593 addi a1,s2,99 + 8020579c: 00019517 auipc a0,0x19 + 802057a0: c9c50513 addi a0,a0,-868 # 8021e438 <fat+0x10> + 802057a4: ffffb097 auipc ra,0xffffb + 802057a8: 01a080e7 jalr 26(ra) # 802007be <memmove> fat.bpb.sec_per_clus = *(b->data + 13); - 8020579c: 06594683 lbu a3,101(s2) - 802057a0: 00d48923 sb a3,18(s1) + 802057ac: 06594683 lbu a3,101(s2) + 802057b0: 00d48923 sb a3,18(s1) fat.bpb.rsvd_sec_cnt = *(uint16 *)(b->data + 14); - 802057a4: 06695603 lhu a2,102(s2) - 802057a8: 00c49a23 sh a2,20(s1) + 802057b4: 06695603 lhu a2,102(s2) + 802057b8: 00c49a23 sh a2,20(s1) fat.bpb.fat_cnt = *(b->data + 16); - 802057ac: 06894703 lbu a4,104(s2) - 802057b0: 00e48b23 sb a4,22(s1) + 802057bc: 06894703 lbu a4,104(s2) + 802057c0: 00e48b23 sb a4,22(s1) fat.bpb.hidd_sec = *(uint32 *)(b->data + 28); - 802057b4: 07492783 lw a5,116(s2) - 802057b8: cc9c sw a5,24(s1) + 802057c4: 07492783 lw a5,116(s2) + 802057c8: cc9c sw a5,24(s1) fat.bpb.tot_sec = *(uint32 *)(b->data + 32); - 802057ba: 07892783 lw a5,120(s2) - 802057be: ccdc sw a5,28(s1) + 802057ca: 07892783 lw a5,120(s2) + 802057ce: ccdc sw a5,28(s1) fat.bpb.fat_sz = *(uint32 *)(b->data + 36); - 802057c0: 07c92583 lw a1,124(s2) - 802057c4: d08c sw a1,32(s1) + 802057d0: 07c92583 lw a1,124(s2) + 802057d4: d08c sw a1,32(s1) fat.bpb.root_clus = *(uint32 *)(b->data + 44); - 802057c6: 08492503 lw a0,132(s2) - 802057ca: d0c8 sw a0,36(s1) + 802057d6: 08492503 lw a0,132(s2) + 802057da: d0c8 sw a0,36(s1) fat.first_data_sec = fat.bpb.rsvd_sec_cnt + fat.bpb.fat_cnt * fat.bpb.fat_sz; - 802057cc: 02b7073b mulw a4,a4,a1 - 802057d0: 9f31 addw a4,a4,a2 - 802057d2: c098 sw a4,0(s1) + 802057dc: 02b7073b mulw a4,a4,a1 + 802057e0: 9f31 addw a4,a4,a2 + 802057e2: c098 sw a4,0(s1) fat.data_sec_cnt = fat.bpb.tot_sec - fat.first_data_sec; - 802057d4: 9f99 subw a5,a5,a4 - 802057d6: c0dc sw a5,4(s1) + 802057e4: 9f99 subw a5,a5,a4 + 802057e6: c0dc sw a5,4(s1) fat.data_clus_cnt = fat.data_sec_cnt / fat.bpb.sec_per_clus; - 802057d8: 02d7d7bb divuw a5,a5,a3 - 802057dc: c49c sw a5,8(s1) + 802057e8: 02d7d7bb divuw a5,a5,a3 + 802057ec: c49c sw a5,8(s1) fat.byts_per_clus = fat.bpb.sec_per_clus * fat.bpb.byts_per_sec; - 802057de: 0104d783 lhu a5,16(s1) - 802057e2: 02d787bb mulw a5,a5,a3 - 802057e6: c4dc sw a5,12(s1) + 802057ee: 0104d783 lhu a5,16(s1) + 802057f2: 02d787bb mulw a5,a5,a3 + 802057f6: c4dc sw a5,12(s1) brelse(b); - 802057e8: 854a mv a0,s2 - 802057ea: ffffe097 auipc ra,0xffffe - 802057ee: d28080e7 jalr -728(ra) # 80203512 <brelse> + 802057f8: 854a mv a0,s2 + 802057fa: ffffe097 auipc ra,0xffffe + 802057fe: d1a080e7 jalr -742(ra) # 80203514 <brelse> if (BSIZE != fat.bpb.byts_per_sec) - 802057f2: 0104d703 lhu a4,16(s1) - 802057f6: 20000793 li a5,512 - 802057fa: 10f71063 bne a4,a5,802058fa <fat32_init+0x1b6> + 80205802: 0104d703 lhu a4,16(s1) + 80205806: 20000793 li a5,512 + 8020580a: 10f71063 bne a4,a5,8020590a <fat32_init+0x1b6> initlock(&ecache.lock, "ecache"); - 802057fe: 00004597 auipc a1,0x4 - 80205802: 43258593 addi a1,a1,1074 # 80209c30 <digits+0x8b0> - 80205806: 00019517 auipc a0,0x19 - 8020580a: db250513 addi a0,a0,-590 # 8021e5b8 <ecache> - 8020580e: ffffb097 auipc ra,0xffffb - 80205812: e74080e7 jalr -396(ra) # 80200682 <initlock> + 8020580e: 00004597 auipc a1,0x4 + 80205812: 42a58593 addi a1,a1,1066 # 80209c38 <digits+0x8b8> + 80205816: 00019517 auipc a0,0x19 + 8020581a: da250513 addi a0,a0,-606 # 8021e5b8 <ecache> + 8020581e: ffffb097 auipc ra,0xffffb + 80205822: e64080e7 jalr -412(ra) # 80200682 <initlock> memset(&root, 0, sizeof(root)); - 80205816: 00019497 auipc s1,0x19 - 8020581a: c1248493 addi s1,s1,-1006 # 8021e428 <fat> - 8020581e: 00019917 auipc s2,0x19 - 80205822: c3290913 addi s2,s2,-974 # 8021e450 <root> - 80205826: 16800613 li a2,360 - 8020582a: 4581 li a1,0 - 8020582c: 854a mv a0,s2 - 8020582e: ffffb097 auipc ra,0xffffb - 80205832: f34080e7 jalr -204(ra) # 80200762 <memset> + 80205826: 00019497 auipc s1,0x19 + 8020582a: c0248493 addi s1,s1,-1022 # 8021e428 <fat> + 8020582e: 00019917 auipc s2,0x19 + 80205832: c2290913 addi s2,s2,-990 # 8021e450 <root> + 80205836: 16800613 li a2,360 + 8020583a: 4581 li a1,0 + 8020583c: 854a mv a0,s2 + 8020583e: ffffb097 auipc ra,0xffffb + 80205842: f24080e7 jalr -220(ra) # 80200762 <memset> initsleeplock(&root.lock, "entry"); - 80205836: 00004597 auipc a1,0x4 - 8020583a: 40258593 addi a1,a1,1026 # 80209c38 <digits+0x8b8> - 8020583e: 00019517 auipc a0,0x19 - 80205842: d4a50513 addi a0,a0,-694 # 8021e588 <root+0x138> - 80205846: ffffe097 auipc ra,0xffffe - 8020584a: de2080e7 jalr -542(ra) # 80203628 <initsleeplock> + 80205846: 00004597 auipc a1,0x4 + 8020584a: 3fa58593 addi a1,a1,1018 # 80209c40 <digits+0x8c0> + 8020584e: 00019517 auipc a0,0x19 + 80205852: d3a50513 addi a0,a0,-710 # 8021e588 <root+0x138> + 80205856: ffffe097 auipc ra,0xffffe + 8020585a: dd4080e7 jalr -556(ra) # 8020362a <initsleeplock> root.attribute = (ATTR_DIRECTORY | ATTR_SYSTEM); - 8020584e: 47d1 li a5,20 - 80205850: 12f48423 sb a5,296(s1) + 8020585e: 47d1 li a5,20 + 80205860: 12f48423 sb a5,296(s1) root.first_clus = root.cur_clus = fat.bpb.root_clus; - 80205854: 50dc lw a5,36(s1) - 80205856: 12f4aa23 sw a5,308(s1) - 8020585a: 12f4a623 sw a5,300(s1) + 80205864: 50dc lw a5,36(s1) + 80205866: 12f4aa23 sw a5,308(s1) + 8020586a: 12f4a623 sw a5,300(s1) root.valid = 1; - 8020585e: 4785 li a5,1 - 80205860: 12f49f23 sh a5,318(s1) + 8020586e: 4785 li a5,1 + 80205870: 12f49f23 sh a5,318(s1) root.prev = &root; - 80205864: 1524bc23 sd s2,344(s1) + 80205874: 1524bc23 sd s2,344(s1) root.next = &root; - 80205868: 1524b823 sd s2,336(s1) + 80205878: 1524b823 sd s2,336(s1) for(struct dirent *de = ecache.entries; de < ecache.entries + ENTRY_CACHE_NUM; de++) { - 8020586c: 00019497 auipc s1,0x19 - 80205870: d6448493 addi s1,s1,-668 # 8021e5d0 <ecache+0x18> + 8020587c: 00019497 auipc s1,0x19 + 80205880: d5448493 addi s1,s1,-684 # 8021e5d0 <ecache+0x18> de->next = root.next; - 80205874: 00019917 auipc s2,0x19 - 80205878: bb490913 addi s2,s2,-1100 # 8021e428 <fat> + 80205884: 00019917 auipc s2,0x19 + 80205888: ba490913 addi s2,s2,-1116 # 8021e428 <fat> de->prev = &root; - 8020587c: 00019a97 auipc s5,0x19 - 80205880: bd4a8a93 addi s5,s5,-1068 # 8021e450 <root> + 8020588c: 00019a97 auipc s5,0x19 + 80205890: bc4a8a93 addi s5,s5,-1084 # 8021e450 <root> initsleeplock(&de->lock, "entry"); - 80205884: 00004a17 auipc s4,0x4 - 80205888: 3b4a0a13 addi s4,s4,948 # 80209c38 <digits+0x8b8> + 80205894: 00004a17 auipc s4,0x4 + 80205898: 3aca0a13 addi s4,s4,940 # 80209c40 <digits+0x8c0> for(struct dirent *de = ecache.entries; de < ecache.entries + ENTRY_CACHE_NUM; de++) { - 8020588c: 0001d997 auipc s3,0x1d - 80205890: 39498993 addi s3,s3,916 # 80222c20 <cons> + 8020589c: 0001d997 auipc s3,0x1d + 802058a0: 38498993 addi s3,s3,900 # 80222c20 <cons> de->dev = 0; - 80205894: 10048a23 sb zero,276(s1) + 802058a4: 10048a23 sb zero,276(s1) de->valid = 0; - 80205898: 10049b23 sh zero,278(s1) + 802058a8: 10049b23 sh zero,278(s1) de->ref = 0; - 8020589c: 1004ac23 sw zero,280(s1) + 802058ac: 1004ac23 sw zero,280(s1) de->dirty = 0; - 802058a0: 10048aa3 sb zero,277(s1) + 802058b0: 10048aa3 sb zero,277(s1) de->parent = 0; - 802058a4: 1204b023 sd zero,288(s1) + 802058b4: 1204b023 sd zero,288(s1) de->next = root.next; - 802058a8: 15093783 ld a5,336(s2) - 802058ac: 12f4b423 sd a5,296(s1) + 802058b8: 15093783 ld a5,336(s2) + 802058bc: 12f4b423 sd a5,296(s1) de->prev = &root; - 802058b0: 1354b823 sd s5,304(s1) + 802058c0: 1354b823 sd s5,304(s1) initsleeplock(&de->lock, "entry"); - 802058b4: 85d2 mv a1,s4 - 802058b6: 13848513 addi a0,s1,312 - 802058ba: ffffe097 auipc ra,0xffffe - 802058be: d6e080e7 jalr -658(ra) # 80203628 <initsleeplock> + 802058c4: 85d2 mv a1,s4 + 802058c6: 13848513 addi a0,s1,312 + 802058ca: ffffe097 auipc ra,0xffffe + 802058ce: d60080e7 jalr -672(ra) # 8020362a <initsleeplock> root.next->prev = de; - 802058c2: 15093783 ld a5,336(s2) - 802058c6: 1297b823 sd s1,304(a5) + 802058d2: 15093783 ld a5,336(s2) + 802058d6: 1297b823 sd s1,304(a5) root.next = de; - 802058ca: 14993823 sd s1,336(s2) + 802058da: 14993823 sd s1,336(s2) for(struct dirent *de = ecache.entries; de < ecache.entries + ENTRY_CACHE_NUM; de++) { - 802058ce: 16848493 addi s1,s1,360 - 802058d2: fd3491e3 bne s1,s3,80205894 <fat32_init+0x150> -} - 802058d6: 4501 li a0,0 - 802058d8: 70e2 ld ra,56(sp) - 802058da: 7442 ld s0,48(sp) - 802058dc: 74a2 ld s1,40(sp) - 802058de: 7902 ld s2,32(sp) - 802058e0: 69e2 ld s3,24(sp) - 802058e2: 6a42 ld s4,16(sp) - 802058e4: 6aa2 ld s5,8(sp) - 802058e6: 6121 addi sp,sp,64 - 802058e8: 8082 ret + 802058de: 16848493 addi s1,s1,360 + 802058e2: fd3491e3 bne s1,s3,802058a4 <fat32_init+0x150> +} + 802058e6: 4501 li a0,0 + 802058e8: 70e2 ld ra,56(sp) + 802058ea: 7442 ld s0,48(sp) + 802058ec: 74a2 ld s1,40(sp) + 802058ee: 7902 ld s2,32(sp) + 802058f0: 69e2 ld s3,24(sp) + 802058f2: 6a42 ld s4,16(sp) + 802058f4: 6aa2 ld s5,8(sp) + 802058f6: 6121 addi sp,sp,64 + 802058f8: 8082 ret panic("not FAT32 volume"); - 802058ea: 00004517 auipc a0,0x4 - 802058ee: 31650513 addi a0,a0,790 # 80209c00 <digits+0x880> - 802058f2: ffffb097 auipc ra,0xffffb - 802058f6: 852080e7 jalr -1966(ra) # 80200144 <panic> - panic("byts_per_sec != BSIZE"); 802058fa: 00004517 auipc a0,0x4 - 802058fe: 31e50513 addi a0,a0,798 # 80209c18 <digits+0x898> + 802058fe: 30e50513 addi a0,a0,782 # 80209c08 <digits+0x888> 80205902: ffffb097 auipc ra,0xffffb 80205906: 842080e7 jalr -1982(ra) # 80200144 <panic> + panic("byts_per_sec != BSIZE"); + 8020590a: 00004517 auipc a0,0x4 + 8020590e: 31650513 addi a0,a0,790 # 80209c20 <digits+0x8a0> + 80205912: ffffb097 auipc ra,0xffffb + 80205916: 832080e7 jalr -1998(ra) # 80200144 <panic> -000000008020590a <eread>: +000000008020591a <eread>: if (off > entry->file_size || off + n < off || (entry->attribute & ATTR_DIRECTORY)) { - 8020590a: 10852783 lw a5,264(a0) - 8020590e: 0ed7e863 bltu a5,a3,802059fe <eread+0xf4> -{ - 80205912: 711d addi sp,sp,-96 - 80205914: ec86 sd ra,88(sp) - 80205916: e8a2 sd s0,80(sp) - 80205918: e4a6 sd s1,72(sp) - 8020591a: e0ca sd s2,64(sp) - 8020591c: fc4e sd s3,56(sp) - 8020591e: f852 sd s4,48(sp) - 80205920: f456 sd s5,40(sp) - 80205922: f05a sd s6,32(sp) - 80205924: ec5e sd s7,24(sp) - 80205926: e862 sd s8,16(sp) - 80205928: e466 sd s9,8(sp) - 8020592a: e06a sd s10,0(sp) - 8020592c: 1080 addi s0,sp,96 - 8020592e: 8a2a mv s4,a0 - 80205930: 8bae mv s7,a1 - 80205932: 8ab2 mv s5,a2 - 80205934: 8936 mv s2,a3 - 80205936: 8b3a mv s6,a4 + 8020591a: 10852783 lw a5,264(a0) + 8020591e: 0ed7e863 bltu a5,a3,80205a0e <eread+0xf4> +{ + 80205922: 711d addi sp,sp,-96 + 80205924: ec86 sd ra,88(sp) + 80205926: e8a2 sd s0,80(sp) + 80205928: e4a6 sd s1,72(sp) + 8020592a: e0ca sd s2,64(sp) + 8020592c: fc4e sd s3,56(sp) + 8020592e: f852 sd s4,48(sp) + 80205930: f456 sd s5,40(sp) + 80205932: f05a sd s6,32(sp) + 80205934: ec5e sd s7,24(sp) + 80205936: e862 sd s8,16(sp) + 80205938: e466 sd s9,8(sp) + 8020593a: e06a sd s10,0(sp) + 8020593c: 1080 addi s0,sp,96 + 8020593e: 8a2a mv s4,a0 + 80205940: 8bae mv s7,a1 + 80205942: 8ab2 mv s5,a2 + 80205944: 8936 mv s2,a3 + 80205946: 8b3a mv s6,a4 if (off > entry->file_size || off + n < off || (entry->attribute & ATTR_DIRECTORY)) { - 80205938: 9eb9 addw a3,a3,a4 + 80205948: 9eb9 addw a3,a3,a4 return 0; - 8020593a: 4501 li a0,0 + 8020594a: 4501 li a0,0 if (off > entry->file_size || off + n < off || (entry->attribute & ATTR_DIRECTORY)) { - 8020593c: 0b26e163 bltu a3,s2,802059de <eread+0xd4> - 80205940: 100a4703 lbu a4,256(s4) - 80205944: 8b41 andi a4,a4,16 - 80205946: ef41 bnez a4,802059de <eread+0xd4> + 8020594c: 0b26e163 bltu a3,s2,802059ee <eread+0xd4> + 80205950: 100a4703 lbu a4,256(s4) + 80205954: 8b41 andi a4,a4,16 + 80205956: ef41 bnez a4,802059ee <eread+0xd4> if (off + n > entry->file_size) { - 80205948: 00d7f463 bgeu a5,a3,80205950 <eread+0x46> + 80205958: 00d7f463 bgeu a5,a3,80205960 <eread+0x46> n = entry->file_size - off; - 8020594c: 41278b3b subw s6,a5,s2 + 8020595c: 41278b3b subw s6,a5,s2 for (tot = 0; entry->cur_clus < FAT32_EOC && tot < n; tot += m, off += m, dst += m) { - 80205950: 10ca2703 lw a4,268(s4) - 80205954: 100007b7 lui a5,0x10000 - 80205958: 17dd addi a5,a5,-9 # ffffff7 <_entry-0x70200009> - 8020595a: 06e7ef63 bltu a5,a4,802059d8 <eread+0xce> - 8020595e: 080b0e63 beqz s6,802059fa <eread+0xf0> - 80205962: 4981 li s3,0 + 80205960: 10ca2703 lw a4,268(s4) + 80205964: 100007b7 lui a5,0x10000 + 80205968: 17dd addi a5,a5,-9 # ffffff7 <_entry-0x70200009> + 8020596a: 06e7ef63 bltu a5,a4,802059e8 <eread+0xce> + 8020596e: 080b0e63 beqz s6,80205a0a <eread+0xf0> + 80205972: 4981 li s3,0 m = fat.byts_per_clus - off % fat.byts_per_clus; - 80205964: 00019c97 auipc s9,0x19 - 80205968: ac4c8c93 addi s9,s9,-1340 # 8021e428 <fat> + 80205974: 00019c97 auipc s9,0x19 + 80205978: ab4c8c93 addi s9,s9,-1356 # 8021e428 <fat> for (tot = 0; entry->cur_clus < FAT32_EOC && tot < n; tot += m, off += m, dst += m) { - 8020596c: 8c3e mv s8,a5 - 8020596e: a82d j 802059a8 <eread+0x9e> - 80205970: 00048d1b sext.w s10,s1 + 8020597c: 8c3e mv s8,a5 + 8020597e: a82d j 802059b8 <eread+0x9e> + 80205980: 00048d1b sext.w s10,s1 if (rw_clus(entry->cur_clus, 0, user_dst, dst, off % fat.byts_per_clus, m) != m) { - 80205974: 87ea mv a5,s10 - 80205976: 86d6 mv a3,s5 - 80205978: 865e mv a2,s7 - 8020597a: 4581 li a1,0 - 8020597c: 10ca2503 lw a0,268(s4) - 80205980: 00000097 auipc ra,0x0 - 80205984: a7e080e7 jalr -1410(ra) # 802053fe <rw_clus> - 80205988: 2501 sext.w a0,a0 - 8020598a: 04ad1863 bne s10,a0,802059da <eread+0xd0> + 80205984: 87ea mv a5,s10 + 80205986: 86d6 mv a3,s5 + 80205988: 865e mv a2,s7 + 8020598a: 4581 li a1,0 + 8020598c: 10ca2503 lw a0,268(s4) + 80205990: 00000097 auipc ra,0x0 + 80205994: a7e080e7 jalr -1410(ra) # 8020540e <rw_clus> + 80205998: 2501 sext.w a0,a0 + 8020599a: 04ad1863 bne s10,a0,802059ea <eread+0xd0> for (tot = 0; entry->cur_clus < FAT32_EOC && tot < n; tot += m, off += m, dst += m) { - 8020598e: 013489bb addw s3,s1,s3 - 80205992: 0124893b addw s2,s1,s2 - 80205996: 1482 slli s1,s1,0x20 - 80205998: 9081 srli s1,s1,0x20 - 8020599a: 9aa6 add s5,s5,s1 - 8020599c: 10ca2783 lw a5,268(s4) - 802059a0: 02fc6d63 bltu s8,a5,802059da <eread+0xd0> - 802059a4: 0369fb63 bgeu s3,s6,802059da <eread+0xd0> + 8020599e: 013489bb addw s3,s1,s3 + 802059a2: 0124893b addw s2,s1,s2 + 802059a6: 1482 slli s1,s1,0x20 + 802059a8: 9081 srli s1,s1,0x20 + 802059aa: 9aa6 add s5,s5,s1 + 802059ac: 10ca2783 lw a5,268(s4) + 802059b0: 02fc6d63 bltu s8,a5,802059ea <eread+0xd0> + 802059b4: 0369fb63 bgeu s3,s6,802059ea <eread+0xd0> reloc_clus(entry, off, 0); - 802059a8: 4601 li a2,0 - 802059aa: 85ca mv a1,s2 - 802059ac: 8552 mv a0,s4 - 802059ae: 00000097 auipc ra,0x0 - 802059b2: 948080e7 jalr -1720(ra) # 802052f6 <reloc_clus> + 802059b8: 4601 li a2,0 + 802059ba: 85ca mv a1,s2 + 802059bc: 8552 mv a0,s4 + 802059be: 00000097 auipc ra,0x0 + 802059c2: 948080e7 jalr -1720(ra) # 80205306 <reloc_clus> m = fat.byts_per_clus - off % fat.byts_per_clus; - 802059b6: 00cca683 lw a3,12(s9) - 802059ba: 02d9763b remuw a2,s2,a3 - 802059be: 0006071b sext.w a4,a2 + 802059c6: 00cca683 lw a3,12(s9) + 802059ca: 02d9763b remuw a2,s2,a3 + 802059ce: 0006071b sext.w a4,a2 if (n - tot < m) { - 802059c2: 413b07bb subw a5,s6,s3 + 802059d2: 413b07bb subw a5,s6,s3 m = fat.byts_per_clus - off % fat.byts_per_clus; - 802059c6: 9e91 subw a3,a3,a2 - 802059c8: 84be mv s1,a5 - 802059ca: 2781 sext.w a5,a5 - 802059cc: 0006861b sext.w a2,a3 - 802059d0: faf670e3 bgeu a2,a5,80205970 <eread+0x66> - 802059d4: 84b6 mv s1,a3 - 802059d6: bf69 j 80205970 <eread+0x66> + 802059d6: 9e91 subw a3,a3,a2 + 802059d8: 84be mv s1,a5 + 802059da: 2781 sext.w a5,a5 + 802059dc: 0006861b sext.w a2,a3 + 802059e0: faf670e3 bgeu a2,a5,80205980 <eread+0x66> + 802059e4: 84b6 mv s1,a3 + 802059e6: bf69 j 80205980 <eread+0x66> for (tot = 0; entry->cur_clus < FAT32_EOC && tot < n; tot += m, off += m, dst += m) { - 802059d8: 4981 li s3,0 + 802059e8: 4981 li s3,0 return tot; - 802059da: 0009851b sext.w a0,s3 -} - 802059de: 60e6 ld ra,88(sp) - 802059e0: 6446 ld s0,80(sp) - 802059e2: 64a6 ld s1,72(sp) - 802059e4: 6906 ld s2,64(sp) - 802059e6: 79e2 ld s3,56(sp) - 802059e8: 7a42 ld s4,48(sp) - 802059ea: 7aa2 ld s5,40(sp) - 802059ec: 7b02 ld s6,32(sp) - 802059ee: 6be2 ld s7,24(sp) - 802059f0: 6c42 ld s8,16(sp) - 802059f2: 6ca2 ld s9,8(sp) - 802059f4: 6d02 ld s10,0(sp) - 802059f6: 6125 addi sp,sp,96 - 802059f8: 8082 ret + 802059ea: 0009851b sext.w a0,s3 +} + 802059ee: 60e6 ld ra,88(sp) + 802059f0: 6446 ld s0,80(sp) + 802059f2: 64a6 ld s1,72(sp) + 802059f4: 6906 ld s2,64(sp) + 802059f6: 79e2 ld s3,56(sp) + 802059f8: 7a42 ld s4,48(sp) + 802059fa: 7aa2 ld s5,40(sp) + 802059fc: 7b02 ld s6,32(sp) + 802059fe: 6be2 ld s7,24(sp) + 80205a00: 6c42 ld s8,16(sp) + 80205a02: 6ca2 ld s9,8(sp) + 80205a04: 6d02 ld s10,0(sp) + 80205a06: 6125 addi sp,sp,96 + 80205a08: 8082 ret for (tot = 0; entry->cur_clus < FAT32_EOC && tot < n; tot += m, off += m, dst += m) { - 802059fa: 89da mv s3,s6 - 802059fc: bff9 j 802059da <eread+0xd0> + 80205a0a: 89da mv s3,s6 + 80205a0c: bff9 j 802059ea <eread+0xd0> return 0; - 802059fe: 4501 li a0,0 + 80205a0e: 4501 li a0,0 } - 80205a00: 8082 ret + 80205a10: 8082 ret -0000000080205a02 <ewrite>: +0000000080205a12 <ewrite>: if (off > entry->file_size || off + n < off || (uint64)off + n > 0xffffffff - 80205a02: 10852783 lw a5,264(a0) - 80205a06: 0ed7e463 bltu a5,a3,80205aee <ewrite+0xec> -{ - 80205a0a: 711d addi sp,sp,-96 - 80205a0c: ec86 sd ra,88(sp) - 80205a0e: e8a2 sd s0,80(sp) - 80205a10: e4a6 sd s1,72(sp) - 80205a12: e0ca sd s2,64(sp) - 80205a14: fc4e sd s3,56(sp) - 80205a16: f852 sd s4,48(sp) - 80205a18: f456 sd s5,40(sp) - 80205a1a: f05a sd s6,32(sp) - 80205a1c: ec5e sd s7,24(sp) - 80205a1e: e862 sd s8,16(sp) - 80205a20: e466 sd s9,8(sp) - 80205a22: 1080 addi s0,sp,96 - 80205a24: 8aaa mv s5,a0 - 80205a26: 8bae mv s7,a1 - 80205a28: 8a32 mv s4,a2 - 80205a2a: 8936 mv s2,a3 - 80205a2c: 8b3a mv s6,a4 + 80205a12: 10852783 lw a5,264(a0) + 80205a16: 0ed7e463 bltu a5,a3,80205afe <ewrite+0xec> +{ + 80205a1a: 711d addi sp,sp,-96 + 80205a1c: ec86 sd ra,88(sp) + 80205a1e: e8a2 sd s0,80(sp) + 80205a20: e4a6 sd s1,72(sp) + 80205a22: e0ca sd s2,64(sp) + 80205a24: fc4e sd s3,56(sp) + 80205a26: f852 sd s4,48(sp) + 80205a28: f456 sd s5,40(sp) + 80205a2a: f05a sd s6,32(sp) + 80205a2c: ec5e sd s7,24(sp) + 80205a2e: e862 sd s8,16(sp) + 80205a30: e466 sd s9,8(sp) + 80205a32: 1080 addi s0,sp,96 + 80205a34: 8aaa mv s5,a0 + 80205a36: 8bae mv s7,a1 + 80205a38: 8a32 mv s4,a2 + 80205a3a: 8936 mv s2,a3 + 80205a3c: 8b3a mv s6,a4 if (off > entry->file_size || off + n < off || (uint64)off + n > 0xffffffff - 80205a2e: 00e687bb addw a5,a3,a4 - 80205a32: 0cd7e063 bltu a5,a3,80205af2 <ewrite+0xf0> - 80205a36: 02069793 slli a5,a3,0x20 - 80205a3a: 9381 srli a5,a5,0x20 - 80205a3c: 1702 slli a4,a4,0x20 - 80205a3e: 9301 srli a4,a4,0x20 - 80205a40: 97ba add a5,a5,a4 - 80205a42: 577d li a4,-1 - 80205a44: 9301 srli a4,a4,0x20 - 80205a46: 0af76863 bltu a4,a5,80205af6 <ewrite+0xf4> + 80205a3e: 00e687bb addw a5,a3,a4 + 80205a42: 0cd7e063 bltu a5,a3,80205b02 <ewrite+0xf0> + 80205a46: 02069793 slli a5,a3,0x20 + 80205a4a: 9381 srli a5,a5,0x20 + 80205a4c: 1702 slli a4,a4,0x20 + 80205a4e: 9301 srli a4,a4,0x20 + 80205a50: 97ba add a5,a5,a4 + 80205a52: 577d li a4,-1 + 80205a54: 9301 srli a4,a4,0x20 + 80205a56: 0af76863 bltu a4,a5,80205b06 <ewrite+0xf4> || (entry->attribute & ATTR_READ_ONLY)) { - 80205a4a: 10054783 lbu a5,256(a0) - 80205a4e: 8b85 andi a5,a5,1 - 80205a50: e7cd bnez a5,80205afa <ewrite+0xf8> + 80205a5a: 10054783 lbu a5,256(a0) + 80205a5e: 8b85 andi a5,a5,1 + 80205a60: e7cd bnez a5,80205b0a <ewrite+0xf8> if (entry->first_clus == 0) { // so file_size if 0 too, which requests off == 0 - 80205a52: 10452783 lw a5,260(a0) - 80205a56: cb89 beqz a5,80205a68 <ewrite+0x66> + 80205a62: 10452783 lw a5,260(a0) + 80205a66: cb89 beqz a5,80205a78 <ewrite+0x66> for (tot = 0; tot < n; tot += m, off += m, src += m) { - 80205a58: 080b0963 beqz s6,80205aea <ewrite+0xe8> - 80205a5c: 4981 li s3,0 + 80205a68: 080b0963 beqz s6,80205afa <ewrite+0xe8> + 80205a6c: 4981 li s3,0 m = fat.byts_per_clus - off % fat.byts_per_clus; - 80205a5e: 00019c17 auipc s8,0x19 - 80205a62: 9cac0c13 addi s8,s8,-1590 # 8021e428 <fat> - 80205a66: a891 j 80205aba <ewrite+0xb8> + 80205a6e: 00019c17 auipc s8,0x19 + 80205a72: 9bac0c13 addi s8,s8,-1606 # 8021e428 <fat> + 80205a76: a891 j 80205aca <ewrite+0xb8> entry->cur_clus = entry->first_clus = alloc_clus(entry->dev); - 80205a68: 11454503 lbu a0,276(a0) - 80205a6c: fffff097 auipc ra,0xfffff - 80205a70: 6c8080e7 jalr 1736(ra) # 80205134 <alloc_clus> - 80205a74: 2501 sext.w a0,a0 - 80205a76: 10aaa223 sw a0,260(s5) - 80205a7a: 10aaa623 sw a0,268(s5) + 80205a78: 11454503 lbu a0,276(a0) + 80205a7c: fffff097 auipc ra,0xfffff + 80205a80: 6c8080e7 jalr 1736(ra) # 80205144 <alloc_clus> + 80205a84: 2501 sext.w a0,a0 + 80205a86: 10aaa223 sw a0,260(s5) + 80205a8a: 10aaa623 sw a0,268(s5) entry->clus_cnt = 0; - 80205a7e: 100aa823 sw zero,272(s5) + 80205a8e: 100aa823 sw zero,272(s5) entry->dirty = 1; - 80205a82: 4785 li a5,1 - 80205a84: 10fa8aa3 sb a5,277(s5) - 80205a88: bfc1 j 80205a58 <ewrite+0x56> - 80205a8a: 00048c9b sext.w s9,s1 + 80205a92: 4785 li a5,1 + 80205a94: 10fa8aa3 sb a5,277(s5) + 80205a98: bfc1 j 80205a68 <ewrite+0x56> + 80205a9a: 00048c9b sext.w s9,s1 if (rw_clus(entry->cur_clus, 1, user_src, src, off % fat.byts_per_clus, m) != m) { - 80205a8e: 87e6 mv a5,s9 - 80205a90: 86d2 mv a3,s4 - 80205a92: 865e mv a2,s7 - 80205a94: 4585 li a1,1 - 80205a96: 10caa503 lw a0,268(s5) - 80205a9a: 00000097 auipc ra,0x0 - 80205a9e: 964080e7 jalr -1692(ra) # 802053fe <rw_clus> - 80205aa2: 2501 sext.w a0,a0 - 80205aa4: 04ac9d63 bne s9,a0,80205afe <ewrite+0xfc> + 80205a9e: 87e6 mv a5,s9 + 80205aa0: 86d2 mv a3,s4 + 80205aa2: 865e mv a2,s7 + 80205aa4: 4585 li a1,1 + 80205aa6: 10caa503 lw a0,268(s5) + 80205aaa: 00000097 auipc ra,0x0 + 80205aae: 964080e7 jalr -1692(ra) # 8020540e <rw_clus> + 80205ab2: 2501 sext.w a0,a0 + 80205ab4: 04ac9d63 bne s9,a0,80205b0e <ewrite+0xfc> for (tot = 0; tot < n; tot += m, off += m, src += m) { - 80205aa8: 013489bb addw s3,s1,s3 - 80205aac: 0124893b addw s2,s1,s2 - 80205ab0: 1482 slli s1,s1,0x20 - 80205ab2: 9081 srli s1,s1,0x20 - 80205ab4: 9a26 add s4,s4,s1 - 80205ab6: 0569f463 bgeu s3,s6,80205afe <ewrite+0xfc> + 80205ab8: 013489bb addw s3,s1,s3 + 80205abc: 0124893b addw s2,s1,s2 + 80205ac0: 1482 slli s1,s1,0x20 + 80205ac2: 9081 srli s1,s1,0x20 + 80205ac4: 9a26 add s4,s4,s1 + 80205ac6: 0569f463 bgeu s3,s6,80205b0e <ewrite+0xfc> reloc_clus(entry, off, 1); - 80205aba: 4605 li a2,1 - 80205abc: 85ca mv a1,s2 - 80205abe: 8556 mv a0,s5 - 80205ac0: 00000097 auipc ra,0x0 - 80205ac4: 836080e7 jalr -1994(ra) # 802052f6 <reloc_clus> + 80205aca: 4605 li a2,1 + 80205acc: 85ca mv a1,s2 + 80205ace: 8556 mv a0,s5 + 80205ad0: 00000097 auipc ra,0x0 + 80205ad4: 836080e7 jalr -1994(ra) # 80205306 <reloc_clus> m = fat.byts_per_clus - off % fat.byts_per_clus; - 80205ac8: 00cc2683 lw a3,12(s8) - 80205acc: 02d9763b remuw a2,s2,a3 - 80205ad0: 0006071b sext.w a4,a2 + 80205ad8: 00cc2683 lw a3,12(s8) + 80205adc: 02d9763b remuw a2,s2,a3 + 80205ae0: 0006071b sext.w a4,a2 if (n - tot < m) { - 80205ad4: 413b07bb subw a5,s6,s3 + 80205ae4: 413b07bb subw a5,s6,s3 m = fat.byts_per_clus - off % fat.byts_per_clus; - 80205ad8: 9e91 subw a3,a3,a2 - 80205ada: 84be mv s1,a5 - 80205adc: 2781 sext.w a5,a5 - 80205ade: 0006861b sext.w a2,a3 - 80205ae2: faf674e3 bgeu a2,a5,80205a8a <ewrite+0x88> - 80205ae6: 84b6 mv s1,a3 - 80205ae8: b74d j 80205a8a <ewrite+0x88> + 80205ae8: 9e91 subw a3,a3,a2 + 80205aea: 84be mv s1,a5 + 80205aec: 2781 sext.w a5,a5 + 80205aee: 0006861b sext.w a2,a3 + 80205af2: faf674e3 bgeu a2,a5,80205a9a <ewrite+0x88> + 80205af6: 84b6 mv s1,a3 + 80205af8: b74d j 80205a9a <ewrite+0x88> for (tot = 0; tot < n; tot += m, off += m, src += m) { - 80205aea: 89da mv s3,s6 - 80205aec: a015 j 80205b10 <ewrite+0x10e> + 80205afa: 89da mv s3,s6 + 80205afc: a015 j 80205b20 <ewrite+0x10e> return -1; - 80205aee: 557d li a0,-1 + 80205afe: 557d li a0,-1 } - 80205af0: 8082 ret + 80205b00: 8082 ret return -1; - 80205af2: 557d li a0,-1 - 80205af4: a005 j 80205b14 <ewrite+0x112> - 80205af6: 557d li a0,-1 - 80205af8: a831 j 80205b14 <ewrite+0x112> - 80205afa: 557d li a0,-1 - 80205afc: a821 j 80205b14 <ewrite+0x112> + 80205b02: 557d li a0,-1 + 80205b04: a005 j 80205b24 <ewrite+0x112> + 80205b06: 557d li a0,-1 + 80205b08: a831 j 80205b24 <ewrite+0x112> + 80205b0a: 557d li a0,-1 + 80205b0c: a821 j 80205b24 <ewrite+0x112> if(off > entry->file_size) { - 80205afe: 108aa783 lw a5,264(s5) - 80205b02: 0127f763 bgeu a5,s2,80205b10 <ewrite+0x10e> + 80205b0e: 108aa783 lw a5,264(s5) + 80205b12: 0127f763 bgeu a5,s2,80205b20 <ewrite+0x10e> entry->file_size = off; - 80205b06: 112aa423 sw s2,264(s5) + 80205b16: 112aa423 sw s2,264(s5) entry->dirty = 1; - 80205b0a: 4785 li a5,1 - 80205b0c: 10fa8aa3 sb a5,277(s5) + 80205b1a: 4785 li a5,1 + 80205b1c: 10fa8aa3 sb a5,277(s5) return tot; - 80205b10: 0009851b sext.w a0,s3 -} - 80205b14: 60e6 ld ra,88(sp) - 80205b16: 6446 ld s0,80(sp) - 80205b18: 64a6 ld s1,72(sp) - 80205b1a: 6906 ld s2,64(sp) - 80205b1c: 79e2 ld s3,56(sp) - 80205b1e: 7a42 ld s4,48(sp) - 80205b20: 7aa2 ld s5,40(sp) - 80205b22: 7b02 ld s6,32(sp) - 80205b24: 6be2 ld s7,24(sp) - 80205b26: 6c42 ld s8,16(sp) - 80205b28: 6ca2 ld s9,8(sp) - 80205b2a: 6125 addi sp,sp,96 - 80205b2c: 8082 ret - -0000000080205b2e <formatname>: -{ - 80205b2e: 7179 addi sp,sp,-48 - 80205b30: f406 sd ra,40(sp) - 80205b32: f022 sd s0,32(sp) - 80205b34: ec26 sd s1,24(sp) - 80205b36: e84a sd s2,16(sp) - 80205b38: e44e sd s3,8(sp) - 80205b3a: e052 sd s4,0(sp) - 80205b3c: 1800 addi s0,sp,48 - 80205b3e: 84aa mv s1,a0 + 80205b20: 0009851b sext.w a0,s3 +} + 80205b24: 60e6 ld ra,88(sp) + 80205b26: 6446 ld s0,80(sp) + 80205b28: 64a6 ld s1,72(sp) + 80205b2a: 6906 ld s2,64(sp) + 80205b2c: 79e2 ld s3,56(sp) + 80205b2e: 7a42 ld s4,48(sp) + 80205b30: 7aa2 ld s5,40(sp) + 80205b32: 7b02 ld s6,32(sp) + 80205b34: 6be2 ld s7,24(sp) + 80205b36: 6c42 ld s8,16(sp) + 80205b38: 6ca2 ld s9,8(sp) + 80205b3a: 6125 addi sp,sp,96 + 80205b3c: 8082 ret + +0000000080205b3e <formatname>: +{ + 80205b3e: 7179 addi sp,sp,-48 + 80205b40: f406 sd ra,40(sp) + 80205b42: f022 sd s0,32(sp) + 80205b44: ec26 sd s1,24(sp) + 80205b46: e84a sd s2,16(sp) + 80205b48: e44e sd s3,8(sp) + 80205b4a: e052 sd s4,0(sp) + 80205b4c: 1800 addi s0,sp,48 + 80205b4e: 84aa mv s1,a0 while (*name == ' ' || *name == '.') { name++; } - 80205b40: 02000793 li a5,32 - 80205b44: 02e00713 li a4,46 - 80205b48: a011 j 80205b4c <formatname+0x1e> - 80205b4a: 0485 addi s1,s1,1 - 80205b4c: 0004c583 lbu a1,0(s1) - 80205b50: fef58de3 beq a1,a5,80205b4a <formatname+0x1c> - 80205b54: fee58be3 beq a1,a4,80205b4a <formatname+0x1c> + 80205b50: 02000793 li a5,32 + 80205b54: 02e00713 li a4,46 + 80205b58: a011 j 80205b5c <formatname+0x1e> + 80205b5a: 0485 addi s1,s1,1 + 80205b5c: 0004c583 lbu a1,0(s1) + 80205b60: fef58de3 beq a1,a5,80205b5a <formatname+0x1c> + 80205b64: fee58be3 beq a1,a4,80205b5a <formatname+0x1c> for (p = name; *p; p++) { - 80205b58: c1b9 beqz a1,80205b9e <formatname+0x70> - 80205b5a: 8926 mv s2,s1 + 80205b68: c1b9 beqz a1,80205bae <formatname+0x70> + 80205b6a: 8926 mv s2,s1 if (c < 0x20 || strchr(illegal, c)) { - 80205b5c: 49fd li s3,31 - 80205b5e: 00006a17 auipc s4,0x6 - 80205b62: d4aa0a13 addi s4,s4,-694 # 8020b8a8 <illegal.1> - 80205b66: 02b9fe63 bgeu s3,a1,80205ba2 <formatname+0x74> - 80205b6a: 8552 mv a0,s4 - 80205b6c: ffffb097 auipc ra,0xffffb - 80205b70: e54080e7 jalr -428(ra) # 802009c0 <strchr> - 80205b74: e121 bnez a0,80205bb4 <formatname+0x86> + 80205b6c: 49fd li s3,31 + 80205b6e: 00006a17 auipc s4,0x6 + 80205b72: d62a0a13 addi s4,s4,-670 # 8020b8d0 <illegal.1> + 80205b76: 02b9fe63 bgeu s3,a1,80205bb2 <formatname+0x74> + 80205b7a: 8552 mv a0,s4 + 80205b7c: ffffb097 auipc ra,0xffffb + 80205b80: e44080e7 jalr -444(ra) # 802009c0 <strchr> + 80205b84: e121 bnez a0,80205bc4 <formatname+0x86> for (p = name; *p; p++) { - 80205b76: 0905 addi s2,s2,1 - 80205b78: 00094583 lbu a1,0(s2) - 80205b7c: f5ed bnez a1,80205b66 <formatname+0x38> + 80205b86: 0905 addi s2,s2,1 + 80205b88: 00094583 lbu a1,0(s2) + 80205b8c: f5ed bnez a1,80205b76 <formatname+0x38> if (*p != ' ') { - 80205b7e: 02000693 li a3,32 - 80205b82: 874a mv a4,s2 + 80205b8e: 02000693 li a3,32 + 80205b92: 874a mv a4,s2 while (p-- > name) { - 80205b84: 0124fb63 bgeu s1,s2,80205b9a <formatname+0x6c> + 80205b94: 0124fb63 bgeu s1,s2,80205baa <formatname+0x6c> if (*p != ' ') { - 80205b88: 197d addi s2,s2,-1 - 80205b8a: 00094783 lbu a5,0(s2) - 80205b8e: fed78ae3 beq a5,a3,80205b82 <formatname+0x54> + 80205b98: 197d addi s2,s2,-1 + 80205b9a: 00094783 lbu a5,0(s2) + 80205b9e: fed78ae3 beq a5,a3,80205b92 <formatname+0x54> p[1] = '\0'; - 80205b92: 00070023 sb zero,0(a4) + 80205ba2: 00070023 sb zero,0(a4) break; - 80205b96: 8526 mv a0,s1 - 80205b98: a031 j 80205ba4 <formatname+0x76> - 80205b9a: 8526 mv a0,s1 - 80205b9c: a021 j 80205ba4 <formatname+0x76> + 80205ba6: 8526 mv a0,s1 + 80205ba8: a031 j 80205bb4 <formatname+0x76> + 80205baa: 8526 mv a0,s1 + 80205bac: a021 j 80205bb4 <formatname+0x76> for (p = name; *p; p++) { - 80205b9e: 8526 mv a0,s1 - 80205ba0: a011 j 80205ba4 <formatname+0x76> + 80205bae: 8526 mv a0,s1 + 80205bb0: a011 j 80205bb4 <formatname+0x76> return 0; - 80205ba2: 4501 li a0,0 -} - 80205ba4: 70a2 ld ra,40(sp) - 80205ba6: 7402 ld s0,32(sp) - 80205ba8: 64e2 ld s1,24(sp) - 80205baa: 6942 ld s2,16(sp) - 80205bac: 69a2 ld s3,8(sp) - 80205bae: 6a02 ld s4,0(sp) - 80205bb0: 6145 addi sp,sp,48 - 80205bb2: 8082 ret + 80205bb2: 4501 li a0,0 +} + 80205bb4: 70a2 ld ra,40(sp) + 80205bb6: 7402 ld s0,32(sp) + 80205bb8: 64e2 ld s1,24(sp) + 80205bba: 6942 ld s2,16(sp) + 80205bbc: 69a2 ld s3,8(sp) + 80205bbe: 6a02 ld s4,0(sp) + 80205bc0: 6145 addi sp,sp,48 + 80205bc2: 8082 ret return 0; - 80205bb4: 4501 li a0,0 - 80205bb6: b7fd j 80205ba4 <formatname+0x76> + 80205bc4: 4501 li a0,0 + 80205bc6: b7fd j 80205bb4 <formatname+0x76> -0000000080205bb8 <cal_checksum>: +0000000080205bc8 <cal_checksum>: { - 80205bb8: 1141 addi sp,sp,-16 - 80205bba: e422 sd s0,8(sp) - 80205bbc: 0800 addi s0,sp,16 - 80205bbe: 87aa mv a5,a0 + 80205bc8: 1141 addi sp,sp,-16 + 80205bca: e422 sd s0,8(sp) + 80205bcc: 0800 addi s0,sp,16 + 80205bce: 87aa mv a5,a0 for (int i = CHAR_SHORT_NAME; i != 0; i--) { - 80205bc0: 00b50613 addi a2,a0,11 + 80205bd0: 00b50613 addi a2,a0,11 uint8 sum = 0; - 80205bc4: 4501 li a0,0 + 80205bd4: 4501 li a0,0 sum = ((sum & 1) ? 0x80 : 0) + (sum >> 1) + *shortname++; - 80205bc6: 0075171b slliw a4,a0,0x7 - 80205bca: 0785 addi a5,a5,1 - 80205bcc: 0015551b srliw a0,a0,0x1 - 80205bd0: fff7c683 lbu a3,-1(a5) - 80205bd4: 9d35 addw a0,a0,a3 - 80205bd6: 953a add a0,a0,a4 - 80205bd8: 0ff57513 zext.b a0,a0 + 80205bd6: 0075171b slliw a4,a0,0x7 + 80205bda: 0785 addi a5,a5,1 + 80205bdc: 0015551b srliw a0,a0,0x1 + 80205be0: fff7c683 lbu a3,-1(a5) + 80205be4: 9d35 addw a0,a0,a3 + 80205be6: 953a add a0,a0,a4 + 80205be8: 0ff57513 zext.b a0,a0 for (int i = CHAR_SHORT_NAME; i != 0; i--) { - 80205bdc: fef615e3 bne a2,a5,80205bc6 <cal_checksum+0xe> -} - 80205be0: 6422 ld s0,8(sp) - 80205be2: 0141 addi sp,sp,16 - 80205be4: 8082 ret - -0000000080205be6 <emake>: -{ - 80205be6: 7131 addi sp,sp,-192 - 80205be8: fd06 sd ra,184(sp) - 80205bea: f922 sd s0,176(sp) - 80205bec: f526 sd s1,168(sp) - 80205bee: f14a sd s2,160(sp) - 80205bf0: ed4e sd s3,152(sp) - 80205bf2: e952 sd s4,144(sp) - 80205bf4: e556 sd s5,136(sp) - 80205bf6: e15a sd s6,128(sp) - 80205bf8: fcde sd s7,120(sp) - 80205bfa: f8e2 sd s8,112(sp) - 80205bfc: f4e6 sd s9,104(sp) - 80205bfe: f0ea sd s10,96(sp) - 80205c00: ecee sd s11,88(sp) - 80205c02: 0180 addi s0,sp,192 + 80205bec: fef615e3 bne a2,a5,80205bd6 <cal_checksum+0xe> +} + 80205bf0: 6422 ld s0,8(sp) + 80205bf2: 0141 addi sp,sp,16 + 80205bf4: 8082 ret + +0000000080205bf6 <emake>: +{ + 80205bf6: 7131 addi sp,sp,-192 + 80205bf8: fd06 sd ra,184(sp) + 80205bfa: f922 sd s0,176(sp) + 80205bfc: f526 sd s1,168(sp) + 80205bfe: f14a sd s2,160(sp) + 80205c00: ed4e sd s3,152(sp) + 80205c02: e952 sd s4,144(sp) + 80205c04: e556 sd s5,136(sp) + 80205c06: e15a sd s6,128(sp) + 80205c08: fcde sd s7,120(sp) + 80205c0a: f8e2 sd s8,112(sp) + 80205c0c: f4e6 sd s9,104(sp) + 80205c0e: f0ea sd s10,96(sp) + 80205c10: ecee sd s11,88(sp) + 80205c12: 0180 addi s0,sp,192 if (!(dp->attribute & ATTR_DIRECTORY)) - 80205c04: 10054783 lbu a5,256(a0) - 80205c08: 8bc1 andi a5,a5,16 - 80205c0a: c3d5 beqz a5,80205cae <emake+0xc8> - 80205c0c: 8b2a mv s6,a0 - 80205c0e: 8d2e mv s10,a1 - 80205c10: 8cb2 mv s9,a2 + 80205c14: 10054783 lbu a5,256(a0) + 80205c18: 8bc1 andi a5,a5,16 + 80205c1a: c3d5 beqz a5,80205cbe <emake+0xc8> + 80205c1c: 8b2a mv s6,a0 + 80205c1e: 8d2e mv s10,a1 + 80205c20: 8cb2 mv s9,a2 if (off % sizeof(union dentry)) - 80205c12: 01f67793 andi a5,a2,31 - 80205c16: e7c5 bnez a5,80205cbe <emake+0xd8> + 80205c22: 01f67793 andi a5,a2,31 + 80205c26: e7c5 bnez a5,80205cce <emake+0xd8> memset(&de, 0, sizeof(de)); - 80205c18: 02000613 li a2,32 - 80205c1c: 4581 li a1,0 - 80205c1e: f7040513 addi a0,s0,-144 - 80205c22: ffffb097 auipc ra,0xffffb - 80205c26: b40080e7 jalr -1216(ra) # 80200762 <memset> + 80205c28: 02000613 li a2,32 + 80205c2c: 4581 li a1,0 + 80205c2e: f7040513 addi a0,s0,-144 + 80205c32: ffffb097 auipc ra,0xffffb + 80205c36: b30080e7 jalr -1232(ra) # 80200762 <memset> if (off <= 32) { - 80205c2a: 02000793 li a5,32 - 80205c2e: 0b97ec63 bltu a5,s9,80205ce6 <emake+0x100> + 80205c3a: 02000793 li a5,32 + 80205c3e: 0b97ec63 bltu a5,s9,80205cf6 <emake+0x100> if (off == 0) { - 80205c32: 080c9e63 bnez s9,80205cce <emake+0xe8> + 80205c42: 080c9e63 bnez s9,80205cde <emake+0xe8> strncpy(de.sne.name, ". ", sizeof(de.sne.name)); - 80205c36: 462d li a2,11 - 80205c38: 00004597 auipc a1,0x4 - 80205c3c: 03058593 addi a1,a1,48 # 80209c68 <digits+0x8e8> - 80205c40: f7040513 addi a0,s0,-144 - 80205c44: ffffb097 auipc ra,0xffffb - 80205c48: c32080e7 jalr -974(ra) # 80200876 <strncpy> + 80205c46: 462d li a2,11 + 80205c48: 00004597 auipc a1,0x4 + 80205c4c: 02858593 addi a1,a1,40 # 80209c70 <digits+0x8f0> + 80205c50: f7040513 addi a0,s0,-144 + 80205c54: ffffb097 auipc ra,0xffffb + 80205c58: c22080e7 jalr -990(ra) # 80200876 <strncpy> de.sne.attr = ATTR_DIRECTORY; - 80205c4c: 47c1 li a5,16 - 80205c4e: f6f40da3 sb a5,-133(s0) + 80205c5c: 47c1 li a5,16 + 80205c5e: f6f40da3 sb a5,-133(s0) de.sne.fst_clus_hi = (uint16)(ep->first_clus >> 16); // first clus high 16 bits - 80205c52: 104d2783 lw a5,260(s10) # fffffffffffff104 <ebss_clear+0xffffffff7fdd9104> - 80205c56: 0107d71b srliw a4,a5,0x10 - 80205c5a: f8e41223 sh a4,-124(s0) + 80205c62: 104d2783 lw a5,260(s10) # fffffffffffff104 <ebss_clear+0xffffffff7fdd9104> + 80205c66: 0107d71b srliw a4,a5,0x10 + 80205c6a: f8e41223 sh a4,-124(s0) de.sne.fst_clus_lo = (uint16)(ep->first_clus & 0xffff); // low 16 bits - 80205c5e: f8f41523 sh a5,-118(s0) + 80205c6e: f8f41523 sh a5,-118(s0) de.sne.file_size = 0; // filesize is updated in eupdate() - 80205c62: f8042623 sw zero,-116(s0) + 80205c72: f8042623 sw zero,-116(s0) off = reloc_clus(dp, off, 1); - 80205c66: 4605 li a2,1 - 80205c68: 85e6 mv a1,s9 - 80205c6a: 855a mv a0,s6 - 80205c6c: fffff097 auipc ra,0xfffff - 80205c70: 68a080e7 jalr 1674(ra) # 802052f6 <reloc_clus> + 80205c76: 4605 li a2,1 + 80205c78: 85e6 mv a1,s9 + 80205c7a: 855a mv a0,s6 + 80205c7c: fffff097 auipc ra,0xfffff + 80205c80: 68a080e7 jalr 1674(ra) # 80205306 <reloc_clus> rw_clus(dp->cur_clus, 1, 0, (uint64)&de, off, sizeof(de)); - 80205c74: 02000793 li a5,32 - 80205c78: 0005071b sext.w a4,a0 - 80205c7c: f7040693 addi a3,s0,-144 - 80205c80: 4601 li a2,0 - 80205c82: 4585 li a1,1 - 80205c84: 10cb2503 lw a0,268(s6) - 80205c88: fffff097 auipc ra,0xfffff - 80205c8c: 776080e7 jalr 1910(ra) # 802053fe <rw_clus> -} - 80205c90: 70ea ld ra,184(sp) - 80205c92: 744a ld s0,176(sp) - 80205c94: 74aa ld s1,168(sp) - 80205c96: 790a ld s2,160(sp) - 80205c98: 69ea ld s3,152(sp) - 80205c9a: 6a4a ld s4,144(sp) - 80205c9c: 6aaa ld s5,136(sp) - 80205c9e: 6b0a ld s6,128(sp) - 80205ca0: 7be6 ld s7,120(sp) - 80205ca2: 7c46 ld s8,112(sp) - 80205ca4: 7ca6 ld s9,104(sp) - 80205ca6: 7d06 ld s10,96(sp) - 80205ca8: 6de6 ld s11,88(sp) - 80205caa: 6129 addi sp,sp,192 - 80205cac: 8082 ret + 80205c84: 02000793 li a5,32 + 80205c88: 0005071b sext.w a4,a0 + 80205c8c: f7040693 addi a3,s0,-144 + 80205c90: 4601 li a2,0 + 80205c92: 4585 li a1,1 + 80205c94: 10cb2503 lw a0,268(s6) + 80205c98: fffff097 auipc ra,0xfffff + 80205c9c: 776080e7 jalr 1910(ra) # 8020540e <rw_clus> +} + 80205ca0: 70ea ld ra,184(sp) + 80205ca2: 744a ld s0,176(sp) + 80205ca4: 74aa ld s1,168(sp) + 80205ca6: 790a ld s2,160(sp) + 80205ca8: 69ea ld s3,152(sp) + 80205caa: 6a4a ld s4,144(sp) + 80205cac: 6aaa ld s5,136(sp) + 80205cae: 6b0a ld s6,128(sp) + 80205cb0: 7be6 ld s7,120(sp) + 80205cb2: 7c46 ld s8,112(sp) + 80205cb4: 7ca6 ld s9,104(sp) + 80205cb6: 7d06 ld s10,96(sp) + 80205cb8: 6de6 ld s11,88(sp) + 80205cba: 6129 addi sp,sp,192 + 80205cbc: 8082 ret panic("emake: not dir"); - 80205cae: 00004517 auipc a0,0x4 - 80205cb2: f9250513 addi a0,a0,-110 # 80209c40 <digits+0x8c0> - 80205cb6: ffffa097 auipc ra,0xffffa - 80205cba: 48e080e7 jalr 1166(ra) # 80200144 <panic> - panic("emake: not aligned"); 80205cbe: 00004517 auipc a0,0x4 - 80205cc2: f9250513 addi a0,a0,-110 # 80209c50 <digits+0x8d0> + 80205cc2: f8a50513 addi a0,a0,-118 # 80209c48 <digits+0x8c8> 80205cc6: ffffa097 auipc ra,0xffffa 80205cca: 47e080e7 jalr 1150(ra) # 80200144 <panic> + panic("emake: not aligned"); + 80205cce: 00004517 auipc a0,0x4 + 80205cd2: f8a50513 addi a0,a0,-118 # 80209c58 <digits+0x8d8> + 80205cd6: ffffa097 auipc ra,0xffffa + 80205cda: 46e080e7 jalr 1134(ra) # 80200144 <panic> strncpy(de.sne.name, ".. ", sizeof(de.sne.name)); - 80205cce: 462d li a2,11 - 80205cd0: 00004597 auipc a1,0x4 - 80205cd4: fa858593 addi a1,a1,-88 # 80209c78 <digits+0x8f8> - 80205cd8: f7040513 addi a0,s0,-144 - 80205cdc: ffffb097 auipc ra,0xffffb - 80205ce0: b9a080e7 jalr -1126(ra) # 80200876 <strncpy> - 80205ce4: b7a5 j 80205c4c <emake+0x66> + 80205cde: 462d li a2,11 + 80205ce0: 00004597 auipc a1,0x4 + 80205ce4: fa058593 addi a1,a1,-96 # 80209c80 <digits+0x900> + 80205ce8: f7040513 addi a0,s0,-144 + 80205cec: ffffb097 auipc ra,0xffffb + 80205cf0: b8a080e7 jalr -1142(ra) # 80200876 <strncpy> + 80205cf4: b7a5 j 80205c5c <emake+0x66> int entcnt = (strlen(ep->filename) + CHAR_LONG_NAME - 1) / CHAR_LONG_NAME; // count of l-n-entries, rounds up - 80205ce6: 896a mv s2,s10 - 80205ce8: 856a mv a0,s10 - 80205cea: ffffb097 auipc ra,0xffffb - 80205cee: bfc080e7 jalr -1028(ra) # 802008e6 <strlen> - 80205cf2: f4a43423 sd a0,-184(s0) - 80205cf6: 00c5071b addiw a4,a0,12 - 80205cfa: 47b5 li a5,13 - 80205cfc: 02f747bb divw a5,a4,a5 - 80205d00: f4f42c23 sw a5,-168(s0) - 80205d04: 00078d9b sext.w s11,a5 + 80205cf6: 896a mv s2,s10 + 80205cf8: 856a mv a0,s10 + 80205cfa: ffffb097 auipc ra,0xffffb + 80205cfe: bec080e7 jalr -1044(ra) # 802008e6 <strlen> + 80205d02: f4a43423 sd a0,-184(s0) + 80205d06: 00c5071b addiw a4,a0,12 + 80205d0a: 47b5 li a5,13 + 80205d0c: 02f747bb divw a5,a4,a5 + 80205d10: f4f42c23 sw a5,-168(s0) + 80205d14: 00078d9b sext.w s11,a5 memset(shortname, 0, sizeof(shortname)); - 80205d08: 4631 li a2,12 - 80205d0a: 4581 li a1,0 - 80205d0c: f6040513 addi a0,s0,-160 - 80205d10: ffffb097 auipc ra,0xffffb - 80205d14: a52080e7 jalr -1454(ra) # 80200762 <memset> + 80205d18: 4631 li a2,12 + 80205d1a: 4581 li a1,0 + 80205d1c: f6040513 addi a0,s0,-160 + 80205d20: ffffb097 auipc ra,0xffffb + 80205d24: a42080e7 jalr -1470(ra) # 80200762 <memset> for (int j = strlen(name) - 1; j >= 0; j--) { - 80205d18: 856a mv a0,s10 - 80205d1a: ffffb097 auipc ra,0xffffb - 80205d1e: bcc080e7 jalr -1076(ra) # 802008e6 <strlen> - 80205d22: fff5079b addiw a5,a0,-1 - 80205d26: 0207cf63 bltz a5,80205d64 <emake+0x17e> - 80205d2a: 97ea add a5,a5,s10 - 80205d2c: ffed0693 addi a3,s10,-2 - 80205d30: 96aa add a3,a3,a0 - 80205d32: fff5071b addiw a4,a0,-1 - 80205d36: 1702 slli a4,a4,0x20 - 80205d38: 9301 srli a4,a4,0x20 - 80205d3a: 8e99 sub a3,a3,a4 + 80205d28: 856a mv a0,s10 + 80205d2a: ffffb097 auipc ra,0xffffb + 80205d2e: bbc080e7 jalr -1092(ra) # 802008e6 <strlen> + 80205d32: fff5079b addiw a5,a0,-1 + 80205d36: 0207cf63 bltz a5,80205d74 <emake+0x17e> + 80205d3a: 97ea add a5,a5,s10 + 80205d3c: ffed0693 addi a3,s10,-2 + 80205d40: 96aa add a3,a3,a0 + 80205d42: fff5071b addiw a4,a0,-1 + 80205d46: 1702 slli a4,a4,0x20 + 80205d48: 9301 srli a4,a4,0x20 + 80205d4a: 8e99 sub a3,a3,a4 if (name[j] == '.') { - 80205d3c: 02e00613 li a2,46 - 80205d40: 89be mv s3,a5 - 80205d42: 0007c703 lbu a4,0(a5) - 80205d46: 00c70663 beq a4,a2,80205d52 <emake+0x16c> + 80205d4c: 02e00613 li a2,46 + 80205d50: 89be mv s3,a5 + 80205d52: 0007c703 lbu a4,0(a5) + 80205d56: 00c70663 beq a4,a2,80205d62 <emake+0x16c> for (int j = strlen(name) - 1; j >= 0; j--) { - 80205d4a: 17fd addi a5,a5,-1 - 80205d4c: fed79ae3 bne a5,a3,80205d40 <emake+0x15a> + 80205d5a: 17fd addi a5,a5,-1 + 80205d5c: fed79ae3 bne a5,a3,80205d50 <emake+0x15a> char c, *p = name; - 80205d50: 89ea mv s3,s10 + 80205d60: 89ea mv s3,s10 shortname[i++] = c; - 80205d52: 4481 li s1,0 + 80205d62: 4481 li s1,0 if (i == 8 && p) { - 80205d54: 4aa1 li s5,8 + 80205d64: 4aa1 li s5,8 while (i < CHAR_SHORT_NAME && (c = *name++)) { - 80205d56: 4ba9 li s7,10 + 80205d66: 4ba9 li s7,10 if (c >= 'a' && c <= 'z') { - 80205d58: 4c65 li s8,25 + 80205d68: 4c65 li s8,25 memset(shortname + i, ' ', 8 - i); - 80205d5a: f6040793 addi a5,s0,-160 - 80205d5e: f4f43823 sd a5,-176(s0) - 80205d62: a8d9 j 80205e38 <emake+0x252> + 80205d6a: f6040793 addi a5,s0,-160 + 80205d6e: f4f43823 sd a5,-176(s0) + 80205d72: a8d9 j 80205e48 <emake+0x252> char c, *p = name; - 80205d64: 89ea mv s3,s10 - 80205d66: b7f5 j 80205d52 <emake+0x16c> + 80205d74: 89ea mv s3,s10 + 80205d76: b7f5 j 80205d62 <emake+0x16c> if (i == 8 && p) { - 80205d68: 22098b63 beqz s3,80205f9e <emake+0x3b8> + 80205d78: 22098b63 beqz s3,80205fae <emake+0x3b8> if (p + 1 < name) { break; } // no '.' - 80205d6c: 0985 addi s3,s3,1 - 80205d6e: 0949fc63 bgeu s3,s4,80205e06 <emake+0x220> - 80205d72: f6040793 addi a5,s0,-160 - 80205d76: 97a6 add a5,a5,s1 + 80205d7c: 0985 addi s3,s3,1 + 80205d7e: 0949fc63 bgeu s3,s4,80205e16 <emake+0x220> + 80205d82: f6040793 addi a5,s0,-160 + 80205d86: 97a6 add a5,a5,s1 shortname[i++] = ' '; - 80205d78: 02000693 li a3,32 + 80205d88: 02000693 li a3,32 while (i < CHAR_SHORT_NAME) { - 80205d7c: 4729 li a4,10 + 80205d8c: 4729 li a4,10 shortname[i++] = ' '; - 80205d7e: 2485 addiw s1,s1,1 - 80205d80: 00d78023 sb a3,0(a5) + 80205d8e: 2485 addiw s1,s1,1 + 80205d90: 00d78023 sb a3,0(a5) while (i < CHAR_SHORT_NAME) { - 80205d84: 0785 addi a5,a5,1 - 80205d86: fe975ce3 bge a4,s1,80205d7e <emake+0x198> + 80205d94: 0785 addi a5,a5,1 + 80205d96: fe975ce3 bge a4,s1,80205d8e <emake+0x198> de.lne.checksum = cal_checksum((uchar *)shortname); - 80205d8a: f6040513 addi a0,s0,-160 - 80205d8e: 00000097 auipc ra,0x0 - 80205d92: e2a080e7 jalr -470(ra) # 80205bb8 <cal_checksum> - 80205d96: f6a40ea3 sb a0,-131(s0) + 80205d9a: f6040513 addi a0,s0,-160 + 80205d9e: 00000097 auipc ra,0x0 + 80205da2: e2a080e7 jalr -470(ra) # 80205bc8 <cal_checksum> + 80205da6: f6a40ea3 sb a0,-131(s0) de.lne.attr = ATTR_LONG_NAME; - 80205d9a: 47bd li a5,15 - 80205d9c: f6f40da3 sb a5,-133(s0) + 80205daa: 47bd li a5,15 + 80205dac: f6f40da3 sb a5,-133(s0) for (int i = entcnt; i > 0; i--) { - 80205da0: f4843783 ld a5,-184(s0) - 80205da4: 14f05c63 blez a5,80205efc <emake+0x316> - 80205da8: f5842783 lw a5,-168(s0) - 80205dac: 37fd addiw a5,a5,-1 - 80205dae: f4f42223 sw a5,-188(s0) - 80205db2: 00179b9b slliw s7,a5,0x1 - 80205db6: 00fb8bbb addw s7,s7,a5 - 80205dba: 002b9b9b slliw s7,s7,0x2 - 80205dbe: 00fb8bbb addw s7,s7,a5 - 80205dc2: 9bea add s7,s7,s10 - 80205dc4: 8aee mv s5,s11 - 80205dc6: 8c66 mv s8,s9 + 80205db0: f4843783 ld a5,-184(s0) + 80205db4: 14f05c63 blez a5,80205f0c <emake+0x316> + 80205db8: f5842783 lw a5,-168(s0) + 80205dbc: 37fd addiw a5,a5,-1 + 80205dbe: f4f42223 sw a5,-188(s0) + 80205dc2: 00179b9b slliw s7,a5,0x1 + 80205dc6: 00fb8bbb addw s7,s7,a5 + 80205dca: 002b9b9b slliw s7,s7,0x2 + 80205dce: 00fb8bbb addw s7,s7,a5 + 80205dd2: 9bea add s7,s7,s10 + 80205dd4: 8aee mv s5,s11 + 80205dd6: 8c66 mv s8,s9 int end = 0; - 80205dc8: 4981 li s3,0 + 80205dd8: 4981 li s3,0 uint8 *w = (uint8 *)de.lne.name1; - 80205dca: f7140793 addi a5,s0,-143 - 80205dce: f4f43823 sd a5,-176(s0) - 80205dd2: 0ff00913 li s2,255 + 80205dda: f7140793 addi a5,s0,-143 + 80205dde: f4f43823 sd a5,-176(s0) + 80205de2: 0ff00913 li s2,255 case 5: w = (uint8 *)de.lne.name2; break; - 80205dd6: f7e40793 addi a5,s0,-130 - 80205dda: f4f43c23 sd a5,-168(s0) + 80205de6: f7e40793 addi a5,s0,-130 + 80205dea: f4f43c23 sd a5,-168(s0) switch (j) { - 80205dde: 44ad li s1,11 - 80205de0: f8c40a13 addi s4,s0,-116 - 80205de4: a0c5 j 80205ec4 <emake+0x2de> + 80205dee: 44ad li s1,11 + 80205df0: f8c40a13 addi s4,s0,-116 + 80205df4: a0c5 j 80205ed4 <emake+0x2de> if (name > p) { // last '.' - 80205de6: 0549f663 bgeu s3,s4,80205e32 <emake+0x24c> + 80205df6: 0549f663 bgeu s3,s4,80205e42 <emake+0x24c> memset(shortname + i, ' ', 8 - i); - 80205dea: 47a1 li a5,8 - 80205dec: 4097863b subw a2,a5,s1 - 80205df0: 02000593 li a1,32 - 80205df4: f5043783 ld a5,-176(s0) - 80205df8: 00978533 add a0,a5,s1 - 80205dfc: ffffb097 auipc ra,0xffffb - 80205e00: 966080e7 jalr -1690(ra) # 80200762 <memset> + 80205dfa: 47a1 li a5,8 + 80205dfc: 4097863b subw a2,a5,s1 + 80205e00: 02000593 li a1,32 + 80205e04: f5043783 ld a5,-176(s0) + 80205e08: 00978533 add a0,a5,s1 + 80205e0c: ffffb097 auipc ra,0xffffb + 80205e10: 956080e7 jalr -1706(ra) # 80200762 <memset> while (i < CHAR_SHORT_NAME && (c = *name++)) { - 80205e04: 89d2 mv s3,s4 + 80205e14: 89d2 mv s3,s4 shortname[i++] = c; - 80205e06: 8a4e mv s4,s3 - 80205e08: 84d6 mv s1,s5 - 80205e0a: 4981 li s3,0 - 80205e0c: a02d j 80205e36 <emake+0x250> + 80205e16: 8a4e mv s4,s3 + 80205e18: 84d6 mv s1,s5 + 80205e1a: 4981 li s3,0 + 80205e1c: a02d j 80205e46 <emake+0x250> if (strchr(illegal, c) != NULL) { - 80205e0e: 85ca mv a1,s2 - 80205e10: 00006517 auipc a0,0x6 - 80205e14: aa850513 addi a0,a0,-1368 # 8020b8b8 <illegal.0> - 80205e18: ffffb097 auipc ra,0xffffb - 80205e1c: ba8080e7 jalr -1112(ra) # 802009c0 <strchr> - 80205e20: c119 beqz a0,80205e26 <emake+0x240> + 80205e1e: 85ca mv a1,s2 + 80205e20: 00006517 auipc a0,0x6 + 80205e24: ac050513 addi a0,a0,-1344 # 8020b8e0 <illegal.0> + 80205e28: ffffb097 auipc ra,0xffffb + 80205e2c: b98080e7 jalr -1128(ra) # 802009c0 <strchr> + 80205e30: c119 beqz a0,80205e36 <emake+0x240> c = '_'; - 80205e22: 05f00913 li s2,95 + 80205e32: 05f00913 li s2,95 shortname[i++] = c; - 80205e26: f9048793 addi a5,s1,-112 - 80205e2a: 97a2 add a5,a5,s0 - 80205e2c: fd278823 sb s2,-48(a5) - 80205e30: 2485 addiw s1,s1,1 + 80205e36: f9048793 addi a5,s1,-112 + 80205e3a: 97a2 add a5,a5,s0 + 80205e3c: fd278823 sb s2,-48(a5) + 80205e40: 2485 addiw s1,s1,1 while (i < CHAR_SHORT_NAME && (c = *name++)) { - 80205e32: f49bcce3 blt s7,s1,80205d8a <emake+0x1a4> + 80205e42: f49bcce3 blt s7,s1,80205d9a <emake+0x1a4> shortname[i++] = c; - 80205e36: 8952 mv s2,s4 + 80205e46: 8952 mv s2,s4 while (i < CHAR_SHORT_NAME && (c = *name++)) { - 80205e38: 00190a13 addi s4,s2,1 - 80205e3c: 00094903 lbu s2,0(s2) - 80205e40: 02090663 beqz s2,80205e6c <emake+0x286> + 80205e48: 00190a13 addi s4,s2,1 + 80205e4c: 00094903 lbu s2,0(s2) + 80205e50: 02090663 beqz s2,80205e7c <emake+0x286> if (i == 8 && p) { - 80205e44: f35482e3 beq s1,s5,80205d68 <emake+0x182> + 80205e54: f35482e3 beq s1,s5,80205d78 <emake+0x182> if (c == ' ') { continue; } - 80205e48: 02000793 li a5,32 - 80205e4c: fef903e3 beq s2,a5,80205e32 <emake+0x24c> + 80205e58: 02000793 li a5,32 + 80205e5c: fef903e3 beq s2,a5,80205e42 <emake+0x24c> if (c == '.') { - 80205e50: 02e00793 li a5,46 - 80205e54: f8f909e3 beq s2,a5,80205de6 <emake+0x200> + 80205e60: 02e00793 li a5,46 + 80205e64: f8f909e3 beq s2,a5,80205df6 <emake+0x200> if (c >= 'a' && c <= 'z') { - 80205e58: f9f9079b addiw a5,s2,-97 - 80205e5c: 0ff7f793 zext.b a5,a5 - 80205e60: fafc67e3 bltu s8,a5,80205e0e <emake+0x228> + 80205e68: f9f9079b addiw a5,s2,-97 + 80205e6c: 0ff7f793 zext.b a5,a5 + 80205e70: fafc67e3 bltu s8,a5,80205e1e <emake+0x228> c += 'A' - 'a'; - 80205e64: 3901 addiw s2,s2,-32 - 80205e66: 0ff97913 zext.b s2,s2 - 80205e6a: bf75 j 80205e26 <emake+0x240> + 80205e74: 3901 addiw s2,s2,-32 + 80205e76: 0ff97913 zext.b s2,s2 + 80205e7a: bf75 j 80205e36 <emake+0x240> while (i < CHAR_SHORT_NAME) { - 80205e6c: 47a9 li a5,10 - 80205e6e: f097d2e3 bge a5,s1,80205d72 <emake+0x18c> - 80205e72: bf21 j 80205d8a <emake+0x1a4> + 80205e7c: 47a9 li a5,10 + 80205e7e: f097d2e3 bge a5,s1,80205d82 <emake+0x18c> + 80205e82: bf21 j 80205d9a <emake+0x1a4> de.lne.order |= LAST_LONG_ENTRY; - 80205e74: 0407e793 ori a5,a5,64 - 80205e78: f6f40823 sb a5,-144(s0) - 80205e7c: a891 j 80205ed0 <emake+0x2ea> + 80205e84: 0407e793 ori a5,a5,64 + 80205e88: f6f40823 sb a5,-144(s0) + 80205e8c: a891 j 80205ee0 <emake+0x2ea> if ((*w++ = *p++) == 0) { - 80205e7e: 00084603 lbu a2,0(a6) + 80205e8e: 00084603 lbu a2,0(a6) end = 1; - 80205e82: 00163513 seqz a0,a2 + 80205e92: 00163513 seqz a0,a2 *w++ = 0; - 80205e86: 00278893 addi a7,a5,2 + 80205e96: 00278893 addi a7,a5,2 if ((*w++ = *p++) == 0) { - 80205e8a: 0805 addi a6,a6,1 + 80205e9a: 0805 addi a6,a6,1 *w++ = 0; - 80205e8c: 85ce mv a1,s3 - 80205e8e: a8d5 j 80205f82 <emake+0x39c> + 80205e9c: 85ce mv a1,s3 + 80205e9e: a8d5 j 80205f92 <emake+0x39c> uint off2 = reloc_clus(dp, off, 1); - 80205e90: 4605 li a2,1 - 80205e92: 85e2 mv a1,s8 - 80205e94: 855a mv a0,s6 - 80205e96: fffff097 auipc ra,0xfffff - 80205e9a: 460080e7 jalr 1120(ra) # 802052f6 <reloc_clus> + 80205ea0: 4605 li a2,1 + 80205ea2: 85e2 mv a1,s8 + 80205ea4: 855a mv a0,s6 + 80205ea6: fffff097 auipc ra,0xfffff + 80205eaa: 460080e7 jalr 1120(ra) # 80205306 <reloc_clus> rw_clus(dp->cur_clus, 1, 0, (uint64)&de, off2, sizeof(de)); - 80205e9e: 02000793 li a5,32 - 80205ea2: 0005071b sext.w a4,a0 - 80205ea6: f7040693 addi a3,s0,-144 - 80205eaa: 864e mv a2,s3 - 80205eac: 4585 li a1,1 - 80205eae: 10cb2503 lw a0,268(s6) - 80205eb2: fffff097 auipc ra,0xfffff - 80205eb6: 54c080e7 jalr 1356(ra) # 802053fe <rw_clus> + 80205eae: 02000793 li a5,32 + 80205eb2: 0005071b sext.w a4,a0 + 80205eb6: f7040693 addi a3,s0,-144 + 80205eba: 864e mv a2,s3 + 80205ebc: 4585 li a1,1 + 80205ebe: 10cb2503 lw a0,268(s6) + 80205ec2: fffff097 auipc ra,0xfffff + 80205ec6: 54c080e7 jalr 1356(ra) # 8020540e <rw_clus> off += sizeof(de); - 80205eba: 020c0c1b addiw s8,s8,32 + 80205eca: 020c0c1b addiw s8,s8,32 for (int i = entcnt; i > 0; i--) { - 80205ebe: 1bcd addi s7,s7,-13 - 80205ec0: 03505163 blez s5,80205ee2 <emake+0x2fc> + 80205ece: 1bcd addi s7,s7,-13 + 80205ed0: 03505163 blez s5,80205ef2 <emake+0x2fc> if ((de.lne.order = i) == entcnt) { - 80205ec4: 0ffaf793 zext.b a5,s5 - 80205ec8: fafd86e3 beq s11,a5,80205e74 <emake+0x28e> - 80205ecc: f6f40823 sb a5,-144(s0) + 80205ed4: 0ffaf793 zext.b a5,s5 + 80205ed8: fafd86e3 beq s11,a5,80205e84 <emake+0x28e> + 80205edc: f6f40823 sb a5,-144(s0) char *p = ep->filename + (i - 1) * CHAR_LONG_NAME; - 80205ed0: 3afd addiw s5,s5,-1 - 80205ed2: 885e mv a6,s7 - 80205ed4: 4709 li a4,2 + 80205ee0: 3afd addiw s5,s5,-1 + 80205ee2: 885e mv a6,s7 + 80205ee4: 4709 li a4,2 int end = 0; - 80205ed6: 854e mv a0,s3 + 80205ee6: 854e mv a0,s3 uint8 *w = (uint8 *)de.lne.name1; - 80205ed8: f5043783 ld a5,-176(s0) + 80205ee8: f5043783 ld a5,-176(s0) switch (j) { - 80205edc: 4315 li t1,5 + 80205eec: 4315 li t1,5 for (int j = 1; j <= CHAR_LONG_NAME; j++) { - 80205ede: 4e35 li t3,13 - 80205ee0: a851 j 80205f74 <emake+0x38e> - 80205ee2: 020c8c9b addiw s9,s9,32 + 80205eee: 4e35 li t3,13 + 80205ef0: a851 j 80205f84 <emake+0x38e> + 80205ef2: 020c8c9b addiw s9,s9,32 off += sizeof(de); - 80205ee6: 4781 li a5,0 - 80205ee8: f4843703 ld a4,-184(s0) - 80205eec: 00e05663 blez a4,80205ef8 <emake+0x312> - 80205ef0: f4442783 lw a5,-188(s0) - 80205ef4: 0057979b slliw a5,a5,0x5 - 80205ef8: 01978cbb addw s9,a5,s9 + 80205ef6: 4781 li a5,0 + 80205ef8: f4843703 ld a4,-184(s0) + 80205efc: 00e05663 blez a4,80205f08 <emake+0x312> + 80205f00: f4442783 lw a5,-188(s0) + 80205f04: 0057979b slliw a5,a5,0x5 + 80205f08: 01978cbb addw s9,a5,s9 memset(&de, 0, sizeof(de)); - 80205efc: 02000613 li a2,32 - 80205f00: 4581 li a1,0 - 80205f02: f7040493 addi s1,s0,-144 - 80205f06: 8526 mv a0,s1 - 80205f08: ffffb097 auipc ra,0xffffb - 80205f0c: 85a080e7 jalr -1958(ra) # 80200762 <memset> - strncpy(de.sne.name, shortname, sizeof(de.sne.name)); - 80205f10: 462d li a2,11 - 80205f12: f6040593 addi a1,s0,-160 + 80205f0c: 02000613 li a2,32 + 80205f10: 4581 li a1,0 + 80205f12: f7040493 addi s1,s0,-144 80205f16: 8526 mv a0,s1 80205f18: ffffb097 auipc ra,0xffffb - 80205f1c: 95e080e7 jalr -1698(ra) # 80200876 <strncpy> + 80205f1c: 84a080e7 jalr -1974(ra) # 80200762 <memset> + strncpy(de.sne.name, shortname, sizeof(de.sne.name)); + 80205f20: 462d li a2,11 + 80205f22: f6040593 addi a1,s0,-160 + 80205f26: 8526 mv a0,s1 + 80205f28: ffffb097 auipc ra,0xffffb + 80205f2c: 94e080e7 jalr -1714(ra) # 80200876 <strncpy> de.sne.attr = ep->attribute; - 80205f20: 100d4783 lbu a5,256(s10) - 80205f24: f6f40da3 sb a5,-133(s0) + 80205f30: 100d4783 lbu a5,256(s10) + 80205f34: f6f40da3 sb a5,-133(s0) de.sne.fst_clus_hi = (uint16)(ep->first_clus >> 16); // first clus high 16 bits - 80205f28: 104d2783 lw a5,260(s10) - 80205f2c: 0107d71b srliw a4,a5,0x10 - 80205f30: f8e41223 sh a4,-124(s0) + 80205f38: 104d2783 lw a5,260(s10) + 80205f3c: 0107d71b srliw a4,a5,0x10 + 80205f40: f8e41223 sh a4,-124(s0) de.sne.fst_clus_lo = (uint16)(ep->first_clus & 0xffff); // low 16 bits - 80205f34: f8f41523 sh a5,-118(s0) + 80205f44: f8f41523 sh a5,-118(s0) de.sne.file_size = ep->file_size; // filesize is updated in eupdate() - 80205f38: 108d2783 lw a5,264(s10) - 80205f3c: f8f42623 sw a5,-116(s0) + 80205f48: 108d2783 lw a5,264(s10) + 80205f4c: f8f42623 sw a5,-116(s0) off = reloc_clus(dp, off, 1); - 80205f40: 4605 li a2,1 - 80205f42: 85e6 mv a1,s9 - 80205f44: 855a mv a0,s6 - 80205f46: fffff097 auipc ra,0xfffff - 80205f4a: 3b0080e7 jalr 944(ra) # 802052f6 <reloc_clus> + 80205f50: 4605 li a2,1 + 80205f52: 85e6 mv a1,s9 + 80205f54: 855a mv a0,s6 + 80205f56: fffff097 auipc ra,0xfffff + 80205f5a: 3b0080e7 jalr 944(ra) # 80205306 <reloc_clus> rw_clus(dp->cur_clus, 1, 0, (uint64)&de, off, sizeof(de)); - 80205f4e: 02000793 li a5,32 - 80205f52: 0005071b sext.w a4,a0 - 80205f56: 86a6 mv a3,s1 - 80205f58: 4601 li a2,0 - 80205f5a: 4585 li a1,1 - 80205f5c: 10cb2503 lw a0,268(s6) - 80205f60: fffff097 auipc ra,0xfffff - 80205f64: 49e080e7 jalr 1182(ra) # 802053fe <rw_clus> -} - 80205f68: b325 j 80205c90 <emake+0xaa> + 80205f5e: 02000793 li a5,32 + 80205f62: 0005071b sext.w a4,a0 + 80205f66: 86a6 mv a3,s1 + 80205f68: 4601 li a2,0 + 80205f6a: 4585 li a1,1 + 80205f6c: 10cb2503 lw a0,268(s6) + 80205f70: fffff097 auipc ra,0xfffff + 80205f74: 49e080e7 jalr 1182(ra) # 8020540e <rw_clus> +} + 80205f78: b325 j 80205ca0 <emake+0xaa> case 5: w = (uint8 *)de.lne.name2; break; - 80205f6a: f5843783 ld a5,-168(s0) - 80205f6e: a011 j 80205f72 <emake+0x38c> + 80205f7a: f5843783 ld a5,-168(s0) + 80205f7e: a011 j 80205f82 <emake+0x38c> switch (j) { - 80205f70: 87d2 mv a5,s4 + 80205f80: 87d2 mv a5,s4 for (int j = 1; j <= CHAR_LONG_NAME; j++) { - 80205f72: 2705 addiw a4,a4,1 - 80205f74: fff7069b addiw a3,a4,-1 + 80205f82: 2705 addiw a4,a4,1 + 80205f84: fff7069b addiw a3,a4,-1 if (end) { - 80205f78: d119 beqz a0,80205e7e <emake+0x298> + 80205f88: d119 beqz a0,80205e8e <emake+0x298> *w++ = 0xff; - 80205f7a: 00278893 addi a7,a5,2 - 80205f7e: 864a mv a2,s2 - 80205f80: 85ca mv a1,s2 + 80205f8a: 00278893 addi a7,a5,2 + 80205f8e: 864a mv a2,s2 + 80205f90: 85ca mv a1,s2 *w++ = 0xff; // on k210, unaligned reading is illegal - 80205f82: 00c78023 sb a2,0(a5) + 80205f92: 00c78023 sb a2,0(a5) *w++ = 0xff; - 80205f86: 00b780a3 sb a1,1(a5) + 80205f96: 00b780a3 sb a1,1(a5) switch (j) { - 80205f8a: fe6680e3 beq a3,t1,80205f6a <emake+0x384> - 80205f8e: fe9681e3 beq a3,s1,80205f70 <emake+0x38a> + 80205f9a: fe6680e3 beq a3,t1,80205f7a <emake+0x384> + 80205f9e: fe9681e3 beq a3,s1,80205f80 <emake+0x38a> for (int j = 1; j <= CHAR_LONG_NAME; j++) { - 80205f92: 0007079b sext.w a5,a4 - 80205f96: eefe4de3 blt t3,a5,80205e90 <emake+0x2aa> - 80205f9a: 87c6 mv a5,a7 - 80205f9c: bfd9 j 80205f72 <emake+0x38c> + 80205fa2: 0007079b sext.w a5,a4 + 80205fa6: eefe4de3 blt t3,a5,80205ea0 <emake+0x2aa> + 80205faa: 87c6 mv a5,a7 + 80205fac: bfd9 j 80205f82 <emake+0x38c> if (c == ' ') { continue; } - 80205f9e: 02000793 li a5,32 - 80205fa2: e8f90ae3 beq s2,a5,80205e36 <emake+0x250> + 80205fae: 02000793 li a5,32 + 80205fb2: e8f90ae3 beq s2,a5,80205e46 <emake+0x250> if (c == '.') { - 80205fa6: 02e00793 li a5,46 - 80205faa: eaf917e3 bne s2,a5,80205e58 <emake+0x272> - 80205fae: bd35 j 80205dea <emake+0x204> - -0000000080205fb0 <edup>: -{ - 80205fb0: 1101 addi sp,sp,-32 - 80205fb2: ec06 sd ra,24(sp) - 80205fb4: e822 sd s0,16(sp) - 80205fb6: e426 sd s1,8(sp) - 80205fb8: 1000 addi s0,sp,32 - 80205fba: 84aa mv s1,a0 + 80205fb6: 02e00793 li a5,46 + 80205fba: eaf917e3 bne s2,a5,80205e68 <emake+0x272> + 80205fbe: bd35 j 80205dfa <emake+0x204> + +0000000080205fc0 <edup>: +{ + 80205fc0: 1101 addi sp,sp,-32 + 80205fc2: ec06 sd ra,24(sp) + 80205fc4: e822 sd s0,16(sp) + 80205fc6: e426 sd s1,8(sp) + 80205fc8: 1000 addi s0,sp,32 + 80205fca: 84aa mv s1,a0 if (entry != 0) { - 80205fbc: c515 beqz a0,80205fe8 <edup+0x38> + 80205fcc: c515 beqz a0,80205ff8 <edup+0x38> acquire(&ecache.lock); - 80205fbe: 00018517 auipc a0,0x18 - 80205fc2: 5fa50513 addi a0,a0,1530 # 8021e5b8 <ecache> - 80205fc6: ffffa097 auipc ra,0xffffa - 80205fca: 700080e7 jalr 1792(ra) # 802006c6 <acquire> + 80205fce: 00018517 auipc a0,0x18 + 80205fd2: 5ea50513 addi a0,a0,1514 # 8021e5b8 <ecache> + 80205fd6: ffffa097 auipc ra,0xffffa + 80205fda: 6f0080e7 jalr 1776(ra) # 802006c6 <acquire> entry->ref++; - 80205fce: 1184a783 lw a5,280(s1) - 80205fd2: 2785 addiw a5,a5,1 - 80205fd4: 10f4ac23 sw a5,280(s1) + 80205fde: 1184a783 lw a5,280(s1) + 80205fe2: 2785 addiw a5,a5,1 + 80205fe4: 10f4ac23 sw a5,280(s1) release(&ecache.lock); - 80205fd8: 00018517 auipc a0,0x18 - 80205fdc: 5e050513 addi a0,a0,1504 # 8021e5b8 <ecache> - 80205fe0: ffffa097 auipc ra,0xffffa - 80205fe4: 73a080e7 jalr 1850(ra) # 8020071a <release> -} - 80205fe8: 8526 mv a0,s1 - 80205fea: 60e2 ld ra,24(sp) - 80205fec: 6442 ld s0,16(sp) - 80205fee: 64a2 ld s1,8(sp) - 80205ff0: 6105 addi sp,sp,32 - 80205ff2: 8082 ret - -0000000080205ff4 <eupdate>: + 80205fe8: 00018517 auipc a0,0x18 + 80205fec: 5d050513 addi a0,a0,1488 # 8021e5b8 <ecache> + 80205ff0: ffffa097 auipc ra,0xffffa + 80205ff4: 72a080e7 jalr 1834(ra) # 8020071a <release> +} + 80205ff8: 8526 mv a0,s1 + 80205ffa: 60e2 ld ra,24(sp) + 80205ffc: 6442 ld s0,16(sp) + 80205ffe: 64a2 ld s1,8(sp) + 80206000: 6105 addi sp,sp,32 + 80206002: 8082 ret + +0000000080206004 <eupdate>: if (!entry->dirty || entry->valid != 1) { return; } - 80205ff4: 11554783 lbu a5,277(a0) - 80205ff8: c3e5 beqz a5,802060d8 <eupdate+0xe4> -{ - 80205ffa: 711d addi sp,sp,-96 - 80205ffc: ec86 sd ra,88(sp) - 80205ffe: e8a2 sd s0,80(sp) - 80206000: e4a6 sd s1,72(sp) - 80206002: e0ca sd s2,64(sp) - 80206004: fc4e sd s3,56(sp) - 80206006: 1080 addi s0,sp,96 - 80206008: 84aa mv s1,a0 + 80206004: 11554783 lbu a5,277(a0) + 80206008: c3e5 beqz a5,802060e8 <eupdate+0xe4> +{ + 8020600a: 711d addi sp,sp,-96 + 8020600c: ec86 sd ra,88(sp) + 8020600e: e8a2 sd s0,80(sp) + 80206010: e4a6 sd s1,72(sp) + 80206012: e0ca sd s2,64(sp) + 80206014: fc4e sd s3,56(sp) + 80206016: 1080 addi s0,sp,96 + 80206018: 84aa mv s1,a0 if (!entry->dirty || entry->valid != 1) { return; } - 8020600a: 11651703 lh a4,278(a0) - 8020600e: 4785 li a5,1 - 80206010: 00f70963 beq a4,a5,80206022 <eupdate+0x2e> -} - 80206014: 60e6 ld ra,88(sp) - 80206016: 6446 ld s0,80(sp) - 80206018: 64a6 ld s1,72(sp) - 8020601a: 6906 ld s2,64(sp) - 8020601c: 79e2 ld s3,56(sp) - 8020601e: 6125 addi sp,sp,96 - 80206020: 8082 ret + 8020601a: 11651703 lh a4,278(a0) + 8020601e: 4785 li a5,1 + 80206020: 00f70963 beq a4,a5,80206032 <eupdate+0x2e> +} + 80206024: 60e6 ld ra,88(sp) + 80206026: 6446 ld s0,80(sp) + 80206028: 64a6 ld s1,72(sp) + 8020602a: 6906 ld s2,64(sp) + 8020602c: 79e2 ld s3,56(sp) + 8020602e: 6125 addi sp,sp,96 + 80206030: 8082 ret uint entcnt = 0; - 80206022: fc042623 sw zero,-52(s0) + 80206032: fc042623 sw zero,-52(s0) uint32 off = reloc_clus(entry->parent, entry->off, 0); - 80206026: 4601 li a2,0 - 80206028: 11c52583 lw a1,284(a0) - 8020602c: 12053503 ld a0,288(a0) - 80206030: fffff097 auipc ra,0xfffff - 80206034: 2c6080e7 jalr 710(ra) # 802052f6 <reloc_clus> + 80206036: 4601 li a2,0 + 80206038: 11c52583 lw a1,284(a0) + 8020603c: 12053503 ld a0,288(a0) + 80206040: fffff097 auipc ra,0xfffff + 80206044: 2c6080e7 jalr 710(ra) # 80205306 <reloc_clus> rw_clus(entry->parent->cur_clus, 0, 0, (uint64) &entcnt, off, 1); - 80206038: 1204b803 ld a6,288(s1) - 8020603c: 4785 li a5,1 - 8020603e: 0005071b sext.w a4,a0 - 80206042: fcc40693 addi a3,s0,-52 - 80206046: 4601 li a2,0 - 80206048: 4581 li a1,0 - 8020604a: 10c82503 lw a0,268(a6) - 8020604e: fffff097 auipc ra,0xfffff - 80206052: 3b0080e7 jalr 944(ra) # 802053fe <rw_clus> + 80206048: 1204b803 ld a6,288(s1) + 8020604c: 4785 li a5,1 + 8020604e: 0005071b sext.w a4,a0 + 80206052: fcc40693 addi a3,s0,-52 + 80206056: 4601 li a2,0 + 80206058: 4581 li a1,0 + 8020605a: 10c82503 lw a0,268(a6) + 8020605e: fffff097 auipc ra,0xfffff + 80206062: 3b0080e7 jalr 944(ra) # 8020540e <rw_clus> entcnt &= ~LAST_LONG_ENTRY; - 80206056: fcc42583 lw a1,-52(s0) - 8020605a: fbf5f593 andi a1,a1,-65 - 8020605e: fcb42623 sw a1,-52(s0) + 80206066: fcc42583 lw a1,-52(s0) + 8020606a: fbf5f593 andi a1,a1,-65 + 8020606e: fcb42623 sw a1,-52(s0) off = reloc_clus(entry->parent, entry->off + (entcnt << 5), 0); - 80206062: 0055959b slliw a1,a1,0x5 - 80206066: 11c4a783 lw a5,284(s1) - 8020606a: 4601 li a2,0 - 8020606c: 9dbd addw a1,a1,a5 - 8020606e: 1204b503 ld a0,288(s1) - 80206072: fffff097 auipc ra,0xfffff - 80206076: 284080e7 jalr 644(ra) # 802052f6 <reloc_clus> - 8020607a: 0005099b sext.w s3,a0 - rw_clus(entry->parent->cur_clus, 0, 0, (uint64)&de, off, sizeof(de)); + 80206072: 0055959b slliw a1,a1,0x5 + 80206076: 11c4a783 lw a5,284(s1) + 8020607a: 4601 li a2,0 + 8020607c: 9dbd addw a1,a1,a5 8020607e: 1204b503 ld a0,288(s1) - 80206082: 02000793 li a5,32 - 80206086: 874e mv a4,s3 - 80206088: fa840913 addi s2,s0,-88 - 8020608c: 86ca mv a3,s2 - 8020608e: 4601 li a2,0 - 80206090: 4581 li a1,0 - 80206092: 10c52503 lw a0,268(a0) - 80206096: fffff097 auipc ra,0xfffff - 8020609a: 368080e7 jalr 872(ra) # 802053fe <rw_clus> + 80206082: fffff097 auipc ra,0xfffff + 80206086: 284080e7 jalr 644(ra) # 80205306 <reloc_clus> + 8020608a: 0005099b sext.w s3,a0 + rw_clus(entry->parent->cur_clus, 0, 0, (uint64)&de, off, sizeof(de)); + 8020608e: 1204b503 ld a0,288(s1) + 80206092: 02000793 li a5,32 + 80206096: 874e mv a4,s3 + 80206098: fa840913 addi s2,s0,-88 + 8020609c: 86ca mv a3,s2 + 8020609e: 4601 li a2,0 + 802060a0: 4581 li a1,0 + 802060a2: 10c52503 lw a0,268(a0) + 802060a6: fffff097 auipc ra,0xfffff + 802060aa: 368080e7 jalr 872(ra) # 8020540e <rw_clus> de.sne.fst_clus_hi = (uint16)(entry->first_clus >> 16); - 8020609e: 1044a783 lw a5,260(s1) - 802060a2: 0107d71b srliw a4,a5,0x10 - 802060a6: fae41e23 sh a4,-68(s0) + 802060ae: 1044a783 lw a5,260(s1) + 802060b2: 0107d71b srliw a4,a5,0x10 + 802060b6: fae41e23 sh a4,-68(s0) de.sne.fst_clus_lo = (uint16)(entry->first_clus & 0xffff); - 802060aa: fcf41123 sh a5,-62(s0) + 802060ba: fcf41123 sh a5,-62(s0) de.sne.file_size = entry->file_size; - 802060ae: 1084a783 lw a5,264(s1) - 802060b2: fcf42223 sw a5,-60(s0) + 802060be: 1084a783 lw a5,264(s1) + 802060c2: fcf42223 sw a5,-60(s0) rw_clus(entry->parent->cur_clus, 1, 0, (uint64)&de, off, sizeof(de)); - 802060b6: 1204b503 ld a0,288(s1) - 802060ba: 02000793 li a5,32 - 802060be: 874e mv a4,s3 - 802060c0: 86ca mv a3,s2 - 802060c2: 4601 li a2,0 - 802060c4: 4585 li a1,1 - 802060c6: 10c52503 lw a0,268(a0) - 802060ca: fffff097 auipc ra,0xfffff - 802060ce: 334080e7 jalr 820(ra) # 802053fe <rw_clus> + 802060c6: 1204b503 ld a0,288(s1) + 802060ca: 02000793 li a5,32 + 802060ce: 874e mv a4,s3 + 802060d0: 86ca mv a3,s2 + 802060d2: 4601 li a2,0 + 802060d4: 4585 li a1,1 + 802060d6: 10c52503 lw a0,268(a0) + 802060da: fffff097 auipc ra,0xfffff + 802060de: 334080e7 jalr 820(ra) # 8020540e <rw_clus> entry->dirty = 0; - 802060d2: 10048aa3 sb zero,277(s1) - 802060d6: bf3d j 80206014 <eupdate+0x20> - 802060d8: 8082 ret + 802060e2: 10048aa3 sb zero,277(s1) + 802060e6: bf3d j 80206024 <eupdate+0x20> + 802060e8: 8082 ret -00000000802060da <eremove>: +00000000802060ea <eremove>: if (entry->valid != 1) { return; } - 802060da: 11651703 lh a4,278(a0) - 802060de: 4785 li a5,1 - 802060e0: 00f70363 beq a4,a5,802060e6 <eremove+0xc> - 802060e4: 8082 ret -{ - 802060e6: 715d addi sp,sp,-80 - 802060e8: e486 sd ra,72(sp) - 802060ea: e0a2 sd s0,64(sp) - 802060ec: fc26 sd s1,56(sp) - 802060ee: f84a sd s2,48(sp) - 802060f0: f44e sd s3,40(sp) - 802060f2: f052 sd s4,32(sp) - 802060f4: ec56 sd s5,24(sp) - 802060f6: 0880 addi s0,sp,80 - 802060f8: 89aa mv s3,a0 + 802060ea: 11651703 lh a4,278(a0) + 802060ee: 4785 li a5,1 + 802060f0: 00f70363 beq a4,a5,802060f6 <eremove+0xc> + 802060f4: 8082 ret +{ + 802060f6: 715d addi sp,sp,-80 + 802060f8: e486 sd ra,72(sp) + 802060fa: e0a2 sd s0,64(sp) + 802060fc: fc26 sd s1,56(sp) + 802060fe: f84a sd s2,48(sp) + 80206100: f44e sd s3,40(sp) + 80206102: f052 sd s4,32(sp) + 80206104: ec56 sd s5,24(sp) + 80206106: 0880 addi s0,sp,80 + 80206108: 89aa mv s3,a0 uint entcnt = 0; - 802060fa: fa042e23 sw zero,-68(s0) + 8020610a: fa042e23 sw zero,-68(s0) uint32 off = entry->off; - 802060fe: 11c52a03 lw s4,284(a0) + 8020610e: 11c52a03 lw s4,284(a0) uint32 off2 = reloc_clus(entry->parent, off, 0); - 80206102: 4601 li a2,0 - 80206104: 85d2 mv a1,s4 - 80206106: 12053503 ld a0,288(a0) - 8020610a: fffff097 auipc ra,0xfffff - 8020610e: 1ec080e7 jalr 492(ra) # 802052f6 <reloc_clus> - 80206112: 0005049b sext.w s1,a0 + 80206112: 4601 li a2,0 + 80206114: 85d2 mv a1,s4 + 80206116: 12053503 ld a0,288(a0) + 8020611a: fffff097 auipc ra,0xfffff + 8020611e: 1ec080e7 jalr 492(ra) # 80205306 <reloc_clus> + 80206122: 0005049b sext.w s1,a0 rw_clus(entry->parent->cur_clus, 0, 0, (uint64) &entcnt, off2, 1); - 80206116: 1209b503 ld a0,288(s3) - 8020611a: 4785 li a5,1 - 8020611c: 8726 mv a4,s1 - 8020611e: fbc40693 addi a3,s0,-68 - 80206122: 4601 li a2,0 - 80206124: 4581 li a1,0 - 80206126: 10c52503 lw a0,268(a0) - 8020612a: fffff097 auipc ra,0xfffff - 8020612e: 2d4080e7 jalr 724(ra) # 802053fe <rw_clus> + 80206126: 1209b503 ld a0,288(s3) + 8020612a: 4785 li a5,1 + 8020612c: 8726 mv a4,s1 + 8020612e: fbc40693 addi a3,s0,-68 + 80206132: 4601 li a2,0 + 80206134: 4581 li a1,0 + 80206136: 10c52503 lw a0,268(a0) + 8020613a: fffff097 auipc ra,0xfffff + 8020613e: 2d4080e7 jalr 724(ra) # 8020540e <rw_clus> entcnt &= ~LAST_LONG_ENTRY; - 80206132: fbc42783 lw a5,-68(s0) - 80206136: fbf7f793 andi a5,a5,-65 - 8020613a: faf42e23 sw a5,-68(s0) + 80206142: fbc42783 lw a5,-68(s0) + 80206146: fbf7f793 andi a5,a5,-65 + 8020614a: faf42e23 sw a5,-68(s0) uint8 flag = EMPTY_ENTRY; - 8020613e: 5795 li a5,-27 - 80206140: faf40da3 sb a5,-69(s0) + 8020614e: 5795 li a5,-27 + 80206150: faf40da3 sb a5,-69(s0) for (int i = 0; i <= entcnt; i++) { - 80206144: 4901 li s2,0 + 80206154: 4901 li s2,0 rw_clus(entry->parent->cur_clus, 1, 0, (uint64) &flag, off2, 1); - 80206146: fbb40a93 addi s5,s0,-69 - 8020614a: 1209b503 ld a0,288(s3) - 8020614e: 4785 li a5,1 - 80206150: 8726 mv a4,s1 - 80206152: 86d6 mv a3,s5 - 80206154: 4601 li a2,0 - 80206156: 4585 li a1,1 - 80206158: 10c52503 lw a0,268(a0) - 8020615c: fffff097 auipc ra,0xfffff - 80206160: 2a2080e7 jalr 674(ra) # 802053fe <rw_clus> + 80206156: fbb40a93 addi s5,s0,-69 + 8020615a: 1209b503 ld a0,288(s3) + 8020615e: 4785 li a5,1 + 80206160: 8726 mv a4,s1 + 80206162: 86d6 mv a3,s5 + 80206164: 4601 li a2,0 + 80206166: 4585 li a1,1 + 80206168: 10c52503 lw a0,268(a0) + 8020616c: fffff097 auipc ra,0xfffff + 80206170: 2a2080e7 jalr 674(ra) # 8020540e <rw_clus> off += 32; - 80206164: 020a0a1b addiw s4,s4,32 + 80206174: 020a0a1b addiw s4,s4,32 off2 = reloc_clus(entry->parent, off, 0); - 80206168: 4601 li a2,0 - 8020616a: 85d2 mv a1,s4 - 8020616c: 1209b503 ld a0,288(s3) - 80206170: fffff097 auipc ra,0xfffff - 80206174: 186080e7 jalr 390(ra) # 802052f6 <reloc_clus> - 80206178: 0005049b sext.w s1,a0 + 80206178: 4601 li a2,0 + 8020617a: 85d2 mv a1,s4 + 8020617c: 1209b503 ld a0,288(s3) + 80206180: fffff097 auipc ra,0xfffff + 80206184: 186080e7 jalr 390(ra) # 80205306 <reloc_clus> + 80206188: 0005049b sext.w s1,a0 for (int i = 0; i <= entcnt; i++) { - 8020617c: 0019079b addiw a5,s2,1 - 80206180: 0007891b sext.w s2,a5 - 80206184: fbc42703 lw a4,-68(s0) - 80206188: fd2771e3 bgeu a4,s2,8020614a <eremove+0x70> + 8020618c: 0019079b addiw a5,s2,1 + 80206190: 0007891b sext.w s2,a5 + 80206194: fbc42703 lw a4,-68(s0) + 80206198: fd2771e3 bgeu a4,s2,8020615a <eremove+0x70> entry->valid = -1; - 8020618c: 57fd li a5,-1 - 8020618e: 10f99b23 sh a5,278(s3) -} - 80206192: 60a6 ld ra,72(sp) - 80206194: 6406 ld s0,64(sp) - 80206196: 74e2 ld s1,56(sp) - 80206198: 7942 ld s2,48(sp) - 8020619a: 79a2 ld s3,40(sp) - 8020619c: 7a02 ld s4,32(sp) - 8020619e: 6ae2 ld s5,24(sp) - 802061a0: 6161 addi sp,sp,80 - 802061a2: 8082 ret - -00000000802061a4 <etrunc>: -{ - 802061a4: 7179 addi sp,sp,-48 - 802061a6: f406 sd ra,40(sp) - 802061a8: f022 sd s0,32(sp) - 802061aa: ec26 sd s1,24(sp) - 802061ac: e84a sd s2,16(sp) - 802061ae: e44e sd s3,8(sp) - 802061b0: e052 sd s4,0(sp) - 802061b2: 1800 addi s0,sp,48 - 802061b4: 8a2a mv s4,a0 + 8020619c: 57fd li a5,-1 + 8020619e: 10f99b23 sh a5,278(s3) +} + 802061a2: 60a6 ld ra,72(sp) + 802061a4: 6406 ld s0,64(sp) + 802061a6: 74e2 ld s1,56(sp) + 802061a8: 7942 ld s2,48(sp) + 802061aa: 79a2 ld s3,40(sp) + 802061ac: 7a02 ld s4,32(sp) + 802061ae: 6ae2 ld s5,24(sp) + 802061b0: 6161 addi sp,sp,80 + 802061b2: 8082 ret + +00000000802061b4 <etrunc>: +{ + 802061b4: 7179 addi sp,sp,-48 + 802061b6: f406 sd ra,40(sp) + 802061b8: f022 sd s0,32(sp) + 802061ba: ec26 sd s1,24(sp) + 802061bc: e84a sd s2,16(sp) + 802061be: e44e sd s3,8(sp) + 802061c0: e052 sd s4,0(sp) + 802061c2: 1800 addi s0,sp,48 + 802061c4: 8a2a mv s4,a0 for (uint32 clus = entry->first_clus; clus >= 2 && clus < FAT32_EOC; ) { - 802061b6: 10452483 lw s1,260(a0) - 802061ba: ffe4871b addiw a4,s1,-2 - 802061be: 100007b7 lui a5,0x10000 - 802061c2: 17d5 addi a5,a5,-11 # ffffff5 <_entry-0x7020000b> - 802061c4: 02e7e663 bltu a5,a4,802061f0 <etrunc+0x4c> - 802061c8: 89be mv s3,a5 + 802061c6: 10452483 lw s1,260(a0) + 802061ca: ffe4871b addiw a4,s1,-2 + 802061ce: 100007b7 lui a5,0x10000 + 802061d2: 17d5 addi a5,a5,-11 # ffffff5 <_entry-0x7020000b> + 802061d4: 02e7e663 bltu a5,a4,80206200 <etrunc+0x4c> + 802061d8: 89be mv s3,a5 uint32 next = read_fat(clus); - 802061ca: 0004891b sext.w s2,s1 - 802061ce: 8526 mv a0,s1 - 802061d0: fffff097 auipc ra,0xfffff - 802061d4: eee080e7 jalr -274(ra) # 802050be <read_fat> - 802061d8: 0005049b sext.w s1,a0 - write_fat(cluster, 0); - 802061dc: 4581 li a1,0 - 802061de: 854a mv a0,s2 + 802061da: 0004891b sext.w s2,s1 + 802061de: 8526 mv a0,s1 802061e0: fffff097 auipc ra,0xfffff - 802061e4: 096080e7 jalr 150(ra) # 80205276 <write_fat> + 802061e4: eee080e7 jalr -274(ra) # 802050ce <read_fat> + 802061e8: 0005049b sext.w s1,a0 + write_fat(cluster, 0); + 802061ec: 4581 li a1,0 + 802061ee: 854a mv a0,s2 + 802061f0: fffff097 auipc ra,0xfffff + 802061f4: 096080e7 jalr 150(ra) # 80205286 <write_fat> for (uint32 clus = entry->first_clus; clus >= 2 && clus < FAT32_EOC; ) { - 802061e8: ffe4879b addiw a5,s1,-2 - 802061ec: fcf9ffe3 bgeu s3,a5,802061ca <etrunc+0x26> + 802061f8: ffe4879b addiw a5,s1,-2 + 802061fc: fcf9ffe3 bgeu s3,a5,802061da <etrunc+0x26> entry->file_size = 0; - 802061f0: 100a2423 sw zero,264(s4) + 80206200: 100a2423 sw zero,264(s4) entry->first_clus = 0; - 802061f4: 100a2223 sw zero,260(s4) + 80206204: 100a2223 sw zero,260(s4) entry->dirty = 1; - 802061f8: 4785 li a5,1 - 802061fa: 10fa0aa3 sb a5,277(s4) -} - 802061fe: 70a2 ld ra,40(sp) - 80206200: 7402 ld s0,32(sp) - 80206202: 64e2 ld s1,24(sp) - 80206204: 6942 ld s2,16(sp) - 80206206: 69a2 ld s3,8(sp) - 80206208: 6a02 ld s4,0(sp) - 8020620a: 6145 addi sp,sp,48 - 8020620c: 8082 ret - -000000008020620e <elock>: -{ - 8020620e: 1141 addi sp,sp,-16 - 80206210: e406 sd ra,8(sp) - 80206212: e022 sd s0,0(sp) - 80206214: 0800 addi s0,sp,16 + 80206208: 4785 li a5,1 + 8020620a: 10fa0aa3 sb a5,277(s4) +} + 8020620e: 70a2 ld ra,40(sp) + 80206210: 7402 ld s0,32(sp) + 80206212: 64e2 ld s1,24(sp) + 80206214: 6942 ld s2,16(sp) + 80206216: 69a2 ld s3,8(sp) + 80206218: 6a02 ld s4,0(sp) + 8020621a: 6145 addi sp,sp,48 + 8020621c: 8082 ret + +000000008020621e <elock>: +{ + 8020621e: 1141 addi sp,sp,-16 + 80206220: e406 sd ra,8(sp) + 80206222: e022 sd s0,0(sp) + 80206224: 0800 addi s0,sp,16 if (entry == 0 || entry->ref < 1) - 80206216: cd19 beqz a0,80206234 <elock+0x26> - 80206218: 11852783 lw a5,280(a0) - 8020621c: 00f05c63 blez a5,80206234 <elock+0x26> + 80206226: cd19 beqz a0,80206244 <elock+0x26> + 80206228: 11852783 lw a5,280(a0) + 8020622c: 00f05c63 blez a5,80206244 <elock+0x26> acquiresleep(&entry->lock); - 80206220: 13850513 addi a0,a0,312 - 80206224: ffffd097 auipc ra,0xffffd - 80206228: 43e080e7 jalr 1086(ra) # 80203662 <acquiresleep> -} - 8020622c: 60a2 ld ra,8(sp) - 8020622e: 6402 ld s0,0(sp) - 80206230: 0141 addi sp,sp,16 - 80206232: 8082 ret + 80206230: 13850513 addi a0,a0,312 + 80206234: ffffd097 auipc ra,0xffffd + 80206238: 430080e7 jalr 1072(ra) # 80203664 <acquiresleep> +} + 8020623c: 60a2 ld ra,8(sp) + 8020623e: 6402 ld s0,0(sp) + 80206240: 0141 addi sp,sp,16 + 80206242: 8082 ret panic("elock"); - 80206234: 00004517 auipc a0,0x4 - 80206238: a5450513 addi a0,a0,-1452 # 80209c88 <digits+0x908> - 8020623c: ffffa097 auipc ra,0xffffa - 80206240: f08080e7 jalr -248(ra) # 80200144 <panic> - -0000000080206244 <eunlock>: -{ - 80206244: 1101 addi sp,sp,-32 - 80206246: ec06 sd ra,24(sp) - 80206248: e822 sd s0,16(sp) - 8020624a: e426 sd s1,8(sp) - 8020624c: e04a sd s2,0(sp) - 8020624e: 1000 addi s0,sp,32 + 80206244: 00004517 auipc a0,0x4 + 80206248: a4c50513 addi a0,a0,-1460 # 80209c90 <digits+0x910> + 8020624c: ffffa097 auipc ra,0xffffa + 80206250: ef8080e7 jalr -264(ra) # 80200144 <panic> + +0000000080206254 <eunlock>: +{ + 80206254: 1101 addi sp,sp,-32 + 80206256: ec06 sd ra,24(sp) + 80206258: e822 sd s0,16(sp) + 8020625a: e426 sd s1,8(sp) + 8020625c: e04a sd s2,0(sp) + 8020625e: 1000 addi s0,sp,32 if (entry == 0 || !holdingsleep(&entry->lock) || entry->ref < 1) - 80206250: c90d beqz a0,80206282 <eunlock+0x3e> - 80206252: 84aa mv s1,a0 - 80206254: 13850913 addi s2,a0,312 - 80206258: 854a mv a0,s2 - 8020625a: ffffd097 auipc ra,0xffffd - 8020625e: 4a2080e7 jalr 1186(ra) # 802036fc <holdingsleep> - 80206262: c105 beqz a0,80206282 <eunlock+0x3e> - 80206264: 1184a783 lw a5,280(s1) - 80206268: 00f05d63 blez a5,80206282 <eunlock+0x3e> + 80206260: c90d beqz a0,80206292 <eunlock+0x3e> + 80206262: 84aa mv s1,a0 + 80206264: 13850913 addi s2,a0,312 + 80206268: 854a mv a0,s2 + 8020626a: ffffd097 auipc ra,0xffffd + 8020626e: 494080e7 jalr 1172(ra) # 802036fe <holdingsleep> + 80206272: c105 beqz a0,80206292 <eunlock+0x3e> + 80206274: 1184a783 lw a5,280(s1) + 80206278: 00f05d63 blez a5,80206292 <eunlock+0x3e> releasesleep(&entry->lock); - 8020626c: 854a mv a0,s2 - 8020626e: ffffd097 auipc ra,0xffffd - 80206272: 44a080e7 jalr 1098(ra) # 802036b8 <releasesleep> -} - 80206276: 60e2 ld ra,24(sp) - 80206278: 6442 ld s0,16(sp) - 8020627a: 64a2 ld s1,8(sp) - 8020627c: 6902 ld s2,0(sp) - 8020627e: 6105 addi sp,sp,32 - 80206280: 8082 ret + 8020627c: 854a mv a0,s2 + 8020627e: ffffd097 auipc ra,0xffffd + 80206282: 43c080e7 jalr 1084(ra) # 802036ba <releasesleep> +} + 80206286: 60e2 ld ra,24(sp) + 80206288: 6442 ld s0,16(sp) + 8020628a: 64a2 ld s1,8(sp) + 8020628c: 6902 ld s2,0(sp) + 8020628e: 6105 addi sp,sp,32 + 80206290: 8082 ret panic("eunlock"); - 80206282: 00004517 auipc a0,0x4 - 80206286: a0e50513 addi a0,a0,-1522 # 80209c90 <digits+0x910> - 8020628a: ffffa097 auipc ra,0xffffa - 8020628e: eba080e7 jalr -326(ra) # 80200144 <panic> - -0000000080206292 <eput>: -{ - 80206292: 1101 addi sp,sp,-32 - 80206294: ec06 sd ra,24(sp) - 80206296: e822 sd s0,16(sp) - 80206298: e426 sd s1,8(sp) - 8020629a: e04a sd s2,0(sp) - 8020629c: 1000 addi s0,sp,32 - 8020629e: 84aa mv s1,a0 + 80206292: 00004517 auipc a0,0x4 + 80206296: a0650513 addi a0,a0,-1530 # 80209c98 <digits+0x918> + 8020629a: ffffa097 auipc ra,0xffffa + 8020629e: eaa080e7 jalr -342(ra) # 80200144 <panic> + +00000000802062a2 <eput>: +{ + 802062a2: 1101 addi sp,sp,-32 + 802062a4: ec06 sd ra,24(sp) + 802062a6: e822 sd s0,16(sp) + 802062a8: e426 sd s1,8(sp) + 802062aa: e04a sd s2,0(sp) + 802062ac: 1000 addi s0,sp,32 + 802062ae: 84aa mv s1,a0 acquire(&ecache.lock); - 802062a0: 00018517 auipc a0,0x18 - 802062a4: 31850513 addi a0,a0,792 # 8021e5b8 <ecache> - 802062a8: ffffa097 auipc ra,0xffffa - 802062ac: 41e080e7 jalr 1054(ra) # 802006c6 <acquire> + 802062b0: 00018517 auipc a0,0x18 + 802062b4: 30850513 addi a0,a0,776 # 8021e5b8 <ecache> + 802062b8: ffffa097 auipc ra,0xffffa + 802062bc: 40e080e7 jalr 1038(ra) # 802006c6 <acquire> if (entry != &root && entry->valid != 0 && entry->ref == 1) { - 802062b0: 00018797 auipc a5,0x18 - 802062b4: 1a078793 addi a5,a5,416 # 8021e450 <root> - 802062b8: 00f48a63 beq s1,a5,802062cc <eput+0x3a> - 802062bc: 11649783 lh a5,278(s1) - 802062c0: c791 beqz a5,802062cc <eput+0x3a> - 802062c2: 1184a703 lw a4,280(s1) - 802062c6: 4785 li a5,1 - 802062c8: 02f70563 beq a4,a5,802062f2 <eput+0x60> + 802062c0: 00018797 auipc a5,0x18 + 802062c4: 19078793 addi a5,a5,400 # 8021e450 <root> + 802062c8: 00f48a63 beq s1,a5,802062dc <eput+0x3a> + 802062cc: 11649783 lh a5,278(s1) + 802062d0: c791 beqz a5,802062dc <eput+0x3a> + 802062d2: 1184a703 lw a4,280(s1) + 802062d6: 4785 li a5,1 + 802062d8: 02f70563 beq a4,a5,80206302 <eput+0x60> entry->ref--; - 802062cc: 1184a783 lw a5,280(s1) - 802062d0: 37fd addiw a5,a5,-1 - 802062d2: 10f4ac23 sw a5,280(s1) + 802062dc: 1184a783 lw a5,280(s1) + 802062e0: 37fd addiw a5,a5,-1 + 802062e2: 10f4ac23 sw a5,280(s1) release(&ecache.lock); - 802062d6: 00018517 auipc a0,0x18 - 802062da: 2e250513 addi a0,a0,738 # 8021e5b8 <ecache> - 802062de: ffffa097 auipc ra,0xffffa - 802062e2: 43c080e7 jalr 1084(ra) # 8020071a <release> -} - 802062e6: 60e2 ld ra,24(sp) - 802062e8: 6442 ld s0,16(sp) - 802062ea: 64a2 ld s1,8(sp) - 802062ec: 6902 ld s2,0(sp) - 802062ee: 6105 addi sp,sp,32 - 802062f0: 8082 ret + 802062e6: 00018517 auipc a0,0x18 + 802062ea: 2d250513 addi a0,a0,722 # 8021e5b8 <ecache> + 802062ee: ffffa097 auipc ra,0xffffa + 802062f2: 42c080e7 jalr 1068(ra) # 8020071a <release> +} + 802062f6: 60e2 ld ra,24(sp) + 802062f8: 6442 ld s0,16(sp) + 802062fa: 64a2 ld s1,8(sp) + 802062fc: 6902 ld s2,0(sp) + 802062fe: 6105 addi sp,sp,32 + 80206300: 8082 ret acquiresleep(&entry->lock); - 802062f2: 13848913 addi s2,s1,312 - 802062f6: 854a mv a0,s2 - 802062f8: ffffd097 auipc ra,0xffffd - 802062fc: 36a080e7 jalr 874(ra) # 80203662 <acquiresleep> + 80206302: 13848913 addi s2,s1,312 + 80206306: 854a mv a0,s2 + 80206308: ffffd097 auipc ra,0xffffd + 8020630c: 35c080e7 jalr 860(ra) # 80203664 <acquiresleep> entry->next->prev = entry->prev; - 80206300: 1284b703 ld a4,296(s1) - 80206304: 1304b783 ld a5,304(s1) - 80206308: 12f73823 sd a5,304(a4) + 80206310: 1284b703 ld a4,296(s1) + 80206314: 1304b783 ld a5,304(s1) + 80206318: 12f73823 sd a5,304(a4) entry->prev->next = entry->next; - 8020630c: 1284b703 ld a4,296(s1) - 80206310: 12e7b423 sd a4,296(a5) + 8020631c: 1284b703 ld a4,296(s1) + 80206320: 12e7b423 sd a4,296(a5) entry->next = root.next; - 80206314: 00018797 auipc a5,0x18 - 80206318: 11478793 addi a5,a5,276 # 8021e428 <fat> - 8020631c: 1507b703 ld a4,336(a5) - 80206320: 12e4b423 sd a4,296(s1) + 80206324: 00018797 auipc a5,0x18 + 80206328: 10478793 addi a5,a5,260 # 8021e428 <fat> + 8020632c: 1507b703 ld a4,336(a5) + 80206330: 12e4b423 sd a4,296(s1) entry->prev = &root; - 80206324: 00018697 auipc a3,0x18 - 80206328: 12c68693 addi a3,a3,300 # 8021e450 <root> - 8020632c: 12d4b823 sd a3,304(s1) + 80206334: 00018697 auipc a3,0x18 + 80206338: 11c68693 addi a3,a3,284 # 8021e450 <root> + 8020633c: 12d4b823 sd a3,304(s1) root.next->prev = entry; - 80206330: 12973823 sd s1,304(a4) + 80206340: 12973823 sd s1,304(a4) root.next = entry; - 80206334: 1497b823 sd s1,336(a5) + 80206344: 1497b823 sd s1,336(a5) release(&ecache.lock); - 80206338: 00018517 auipc a0,0x18 - 8020633c: 28050513 addi a0,a0,640 # 8021e5b8 <ecache> - 80206340: ffffa097 auipc ra,0xffffa - 80206344: 3da080e7 jalr 986(ra) # 8020071a <release> + 80206348: 00018517 auipc a0,0x18 + 8020634c: 27050513 addi a0,a0,624 # 8021e5b8 <ecache> + 80206350: ffffa097 auipc ra,0xffffa + 80206354: 3ca080e7 jalr 970(ra) # 8020071a <release> if (entry->valid == -1) { // this means some one has called eremove() - 80206348: 11649703 lh a4,278(s1) - 8020634c: 57fd li a5,-1 - 8020634e: 06f70863 beq a4,a5,802063be <eput+0x12c> + 80206358: 11649703 lh a4,278(s1) + 8020635c: 57fd li a5,-1 + 8020635e: 06f70863 beq a4,a5,802063ce <eput+0x12c> elock(entry->parent); - 80206352: 1204b503 ld a0,288(s1) - 80206356: 00000097 auipc ra,0x0 - 8020635a: eb8080e7 jalr -328(ra) # 8020620e <elock> + 80206362: 1204b503 ld a0,288(s1) + 80206366: 00000097 auipc ra,0x0 + 8020636a: eb8080e7 jalr -328(ra) # 8020621e <elock> eupdate(entry); - 8020635e: 8526 mv a0,s1 - 80206360: 00000097 auipc ra,0x0 - 80206364: c94080e7 jalr -876(ra) # 80205ff4 <eupdate> + 8020636e: 8526 mv a0,s1 + 80206370: 00000097 auipc ra,0x0 + 80206374: c94080e7 jalr -876(ra) # 80206004 <eupdate> eunlock(entry->parent); - 80206368: 1204b503 ld a0,288(s1) - 8020636c: 00000097 auipc ra,0x0 - 80206370: ed8080e7 jalr -296(ra) # 80206244 <eunlock> + 80206378: 1204b503 ld a0,288(s1) + 8020637c: 00000097 auipc ra,0x0 + 80206380: ed8080e7 jalr -296(ra) # 80206254 <eunlock> releasesleep(&entry->lock); - 80206374: 854a mv a0,s2 - 80206376: ffffd097 auipc ra,0xffffd - 8020637a: 342080e7 jalr 834(ra) # 802036b8 <releasesleep> + 80206384: 854a mv a0,s2 + 80206386: ffffd097 auipc ra,0xffffd + 8020638a: 334080e7 jalr 820(ra) # 802036ba <releasesleep> struct dirent *eparent = entry->parent; - 8020637e: 1204b903 ld s2,288(s1) + 8020638e: 1204b903 ld s2,288(s1) acquire(&ecache.lock); - 80206382: 00018517 auipc a0,0x18 - 80206386: 23650513 addi a0,a0,566 # 8021e5b8 <ecache> - 8020638a: ffffa097 auipc ra,0xffffa - 8020638e: 33c080e7 jalr 828(ra) # 802006c6 <acquire> + 80206392: 00018517 auipc a0,0x18 + 80206396: 22650513 addi a0,a0,550 # 8021e5b8 <ecache> + 8020639a: ffffa097 auipc ra,0xffffa + 8020639e: 32c080e7 jalr 812(ra) # 802006c6 <acquire> entry->ref--; - 80206392: 1184a783 lw a5,280(s1) - 80206396: 37fd addiw a5,a5,-1 - 80206398: 10f4ac23 sw a5,280(s1) + 802063a2: 1184a783 lw a5,280(s1) + 802063a6: 37fd addiw a5,a5,-1 + 802063a8: 10f4ac23 sw a5,280(s1) release(&ecache.lock); - 8020639c: 00018517 auipc a0,0x18 - 802063a0: 21c50513 addi a0,a0,540 # 8021e5b8 <ecache> - 802063a4: ffffa097 auipc ra,0xffffa - 802063a8: 376080e7 jalr 886(ra) # 8020071a <release> + 802063ac: 00018517 auipc a0,0x18 + 802063b0: 20c50513 addi a0,a0,524 # 8021e5b8 <ecache> + 802063b4: ffffa097 auipc ra,0xffffa + 802063b8: 366080e7 jalr 870(ra) # 8020071a <release> if (entry->ref == 0) { - 802063ac: 1184a783 lw a5,280(s1) - 802063b0: fb9d bnez a5,802062e6 <eput+0x54> + 802063bc: 1184a783 lw a5,280(s1) + 802063c0: fb9d bnez a5,802062f6 <eput+0x54> eput(eparent); - 802063b2: 854a mv a0,s2 - 802063b4: 00000097 auipc ra,0x0 - 802063b8: ede080e7 jalr -290(ra) # 80206292 <eput> - 802063bc: b72d j 802062e6 <eput+0x54> + 802063c2: 854a mv a0,s2 + 802063c4: 00000097 auipc ra,0x0 + 802063c8: ede080e7 jalr -290(ra) # 802062a2 <eput> + 802063cc: b72d j 802062f6 <eput+0x54> etrunc(entry); - 802063be: 8526 mv a0,s1 - 802063c0: 00000097 auipc ra,0x0 - 802063c4: de4080e7 jalr -540(ra) # 802061a4 <etrunc> - 802063c8: b775 j 80206374 <eput+0xe2> - -00000000802063ca <estat>: -{ - 802063ca: 1101 addi sp,sp,-32 - 802063cc: ec06 sd ra,24(sp) - 802063ce: e822 sd s0,16(sp) - 802063d0: e426 sd s1,8(sp) - 802063d2: e04a sd s2,0(sp) - 802063d4: 1000 addi s0,sp,32 - 802063d6: 892a mv s2,a0 - 802063d8: 84ae mv s1,a1 + 802063ce: 8526 mv a0,s1 + 802063d0: 00000097 auipc ra,0x0 + 802063d4: de4080e7 jalr -540(ra) # 802061b4 <etrunc> + 802063d8: b775 j 80206384 <eput+0xe2> + +00000000802063da <estat>: +{ + 802063da: 1101 addi sp,sp,-32 + 802063dc: ec06 sd ra,24(sp) + 802063de: e822 sd s0,16(sp) + 802063e0: e426 sd s1,8(sp) + 802063e2: e04a sd s2,0(sp) + 802063e4: 1000 addi s0,sp,32 + 802063e6: 892a mv s2,a0 + 802063e8: 84ae mv s1,a1 strncpy(st->name, de->filename, STAT_MAX_NAME); - 802063da: 02000613 li a2,32 - 802063de: 85aa mv a1,a0 - 802063e0: 8526 mv a0,s1 - 802063e2: ffffa097 auipc ra,0xffffa - 802063e6: 494080e7 jalr 1172(ra) # 80200876 <strncpy> + 802063ea: 02000613 li a2,32 + 802063ee: 85aa mv a1,a0 + 802063f0: 8526 mv a0,s1 + 802063f2: ffffa097 auipc ra,0xffffa + 802063f6: 484080e7 jalr 1156(ra) # 80200876 <strncpy> st->type = (de->attribute & ATTR_DIRECTORY) ? T_DIR : T_FILE; - 802063ea: 10094783 lbu a5,256(s2) - 802063ee: 8bc1 andi a5,a5,16 - 802063f0: 0017b793 seqz a5,a5 - 802063f4: 0785 addi a5,a5,1 - 802063f6: 02f49423 sh a5,40(s1) + 802063fa: 10094783 lbu a5,256(s2) + 802063fe: 8bc1 andi a5,a5,16 + 80206400: 0017b793 seqz a5,a5 + 80206404: 0785 addi a5,a5,1 + 80206406: 02f49423 sh a5,40(s1) st->dev = de->dev; - 802063fa: 11494783 lbu a5,276(s2) - 802063fe: d0dc sw a5,36(s1) + 8020640a: 11494783 lbu a5,276(s2) + 8020640e: d0dc sw a5,36(s1) st->size = de->file_size; - 80206400: 10896783 lwu a5,264(s2) - 80206404: f89c sd a5,48(s1) + 80206410: 10896783 lwu a5,264(s2) + 80206414: f89c sd a5,48(s1) } - 80206406: 60e2 ld ra,24(sp) - 80206408: 6442 ld s0,16(sp) - 8020640a: 64a2 ld s1,8(sp) - 8020640c: 6902 ld s2,0(sp) - 8020640e: 6105 addi sp,sp,32 - 80206410: 8082 ret + 80206416: 60e2 ld ra,24(sp) + 80206418: 6442 ld s0,16(sp) + 8020641a: 64a2 ld s1,8(sp) + 8020641c: 6902 ld s2,0(sp) + 8020641e: 6105 addi sp,sp,32 + 80206420: 8082 ret -0000000080206412 <enext>: +0000000080206422 <enext>: * @return -1 meet the end of dir * 0 find empty slots * 1 find a file with all its entries */ int enext(struct dirent *dp, struct dirent *ep, uint off, int *count) { - 80206412: 7119 addi sp,sp,-128 - 80206414: fc86 sd ra,120(sp) - 80206416: f8a2 sd s0,112(sp) - 80206418: f4a6 sd s1,104(sp) - 8020641a: f0ca sd s2,96(sp) - 8020641c: ecce sd s3,88(sp) - 8020641e: e8d2 sd s4,80(sp) - 80206420: e4d6 sd s5,72(sp) - 80206422: e0da sd s6,64(sp) - 80206424: fc5e sd s7,56(sp) - 80206426: f862 sd s8,48(sp) - 80206428: f466 sd s9,40(sp) - 8020642a: 0100 addi s0,sp,128 + 80206422: 7119 addi sp,sp,-128 + 80206424: fc86 sd ra,120(sp) + 80206426: f8a2 sd s0,112(sp) + 80206428: f4a6 sd s1,104(sp) + 8020642a: f0ca sd s2,96(sp) + 8020642c: ecce sd s3,88(sp) + 8020642e: e8d2 sd s4,80(sp) + 80206430: e4d6 sd s5,72(sp) + 80206432: e0da sd s6,64(sp) + 80206434: fc5e sd s7,56(sp) + 80206436: f862 sd s8,48(sp) + 80206438: f466 sd s9,40(sp) + 8020643a: 0100 addi s0,sp,128 if (!(dp->attribute & ATTR_DIRECTORY)) - 8020642c: 10054783 lbu a5,256(a0) - 80206430: 8bc1 andi a5,a5,16 - 80206432: cf95 beqz a5,8020646e <enext+0x5c> - 80206434: 892a mv s2,a0 - 80206436: 89ae mv s3,a1 - 80206438: 84b2 mv s1,a2 - 8020643a: 8ab6 mv s5,a3 + 8020643c: 10054783 lbu a5,256(a0) + 80206440: 8bc1 andi a5,a5,16 + 80206442: cf95 beqz a5,8020647e <enext+0x5c> + 80206444: 892a mv s2,a0 + 80206446: 89ae mv s3,a1 + 80206448: 84b2 mv s1,a2 + 8020644a: 8ab6 mv s5,a3 panic("enext not dir"); if (ep->valid) - 8020643c: 11659783 lh a5,278(a1) - 80206440: ef9d bnez a5,8020647e <enext+0x6c> + 8020644c: 11659783 lh a5,278(a1) + 80206450: ef9d bnez a5,8020648e <enext+0x6c> panic("enext ep valid"); if (off % 32) - 80206442: 01f67793 andi a5,a2,31 - 80206446: e7a1 bnez a5,8020648e <enext+0x7c> + 80206452: 01f67793 andi a5,a2,31 + 80206456: e7a1 bnez a5,8020649e <enext+0x7c> panic("enext not align"); if (dp->valid != 1) { return -1; } - 80206448: 11651703 lh a4,278(a0) - 8020644c: 4785 li a5,1 - 8020644e: 557d li a0,-1 - 80206450: 04f70763 beq a4,a5,8020649e <enext+0x8c> + 80206458: 11651703 lh a4,278(a0) + 8020645c: 4785 li a5,1 + 8020645e: 557d li a0,-1 + 80206460: 04f70763 beq a4,a5,802064ae <enext+0x8c> read_entry_info(ep, &de); return 1; } } return -1; } - 80206454: 70e6 ld ra,120(sp) - 80206456: 7446 ld s0,112(sp) - 80206458: 74a6 ld s1,104(sp) - 8020645a: 7906 ld s2,96(sp) - 8020645c: 69e6 ld s3,88(sp) - 8020645e: 6a46 ld s4,80(sp) - 80206460: 6aa6 ld s5,72(sp) - 80206462: 6b06 ld s6,64(sp) - 80206464: 7be2 ld s7,56(sp) - 80206466: 7c42 ld s8,48(sp) - 80206468: 7ca2 ld s9,40(sp) - 8020646a: 6109 addi sp,sp,128 - 8020646c: 8082 ret + 80206464: 70e6 ld ra,120(sp) + 80206466: 7446 ld s0,112(sp) + 80206468: 74a6 ld s1,104(sp) + 8020646a: 7906 ld s2,96(sp) + 8020646c: 69e6 ld s3,88(sp) + 8020646e: 6a46 ld s4,80(sp) + 80206470: 6aa6 ld s5,72(sp) + 80206472: 6b06 ld s6,64(sp) + 80206474: 7be2 ld s7,56(sp) + 80206476: 7c42 ld s8,48(sp) + 80206478: 7ca2 ld s9,40(sp) + 8020647a: 6109 addi sp,sp,128 + 8020647c: 8082 ret panic("enext not dir"); - 8020646e: 00004517 auipc a0,0x4 - 80206472: 82a50513 addi a0,a0,-2006 # 80209c98 <digits+0x918> - 80206476: ffffa097 auipc ra,0xffffa - 8020647a: cce080e7 jalr -818(ra) # 80200144 <panic> - panic("enext ep valid"); 8020647e: 00004517 auipc a0,0x4 - 80206482: 82a50513 addi a0,a0,-2006 # 80209ca8 <digits+0x928> + 80206482: 82250513 addi a0,a0,-2014 # 80209ca0 <digits+0x920> 80206486: ffffa097 auipc ra,0xffffa 8020648a: cbe080e7 jalr -834(ra) # 80200144 <panic> - panic("enext not align"); + panic("enext ep valid"); 8020648e: 00004517 auipc a0,0x4 - 80206492: 82a50513 addi a0,a0,-2006 # 80209cb8 <digits+0x938> + 80206492: 82250513 addi a0,a0,-2014 # 80209cb0 <digits+0x930> 80206496: ffffa097 auipc ra,0xffffa 8020649a: cae080e7 jalr -850(ra) # 80200144 <panic> - memset(ep->filename, 0, FAT32_MAX_FILENAME + 1); - 8020649e: 10000613 li a2,256 - 802064a2: 4581 li a1,0 - 802064a4: 854e mv a0,s3 + panic("enext not align"); + 8020649e: 00004517 auipc a0,0x4 + 802064a2: 82250513 addi a0,a0,-2014 # 80209cc0 <digits+0x940> 802064a6: ffffa097 auipc ra,0xffffa - 802064aa: 2bc080e7 jalr 700(ra) # 80200762 <memset> + 802064aa: c9e080e7 jalr -866(ra) # 80200144 <panic> + memset(ep->filename, 0, FAT32_MAX_FILENAME + 1); + 802064ae: 10000613 li a2,256 + 802064b2: 4581 li a1,0 + 802064b4: 854e mv a0,s3 + 802064b6: ffffa097 auipc ra,0xffffa + 802064ba: 2ac080e7 jalr 684(ra) # 80200762 <memset> int cnt = 0; - 802064ae: 4b01 li s6,0 + 802064be: 4b01 li s6,0 for (int off2; (off2 = reloc_clus(dp, off, 0)) != -1; off += 32) { - 802064b0: 5bfd li s7,-1 + 802064c0: 5bfd li s7,-1 if (rw_clus(dp->cur_clus, 0, 0, (uint64)&de, off2, 32) != 32 || de.lne.order == END_OF_ENTRY) { - 802064b2: f8040a13 addi s4,s0,-128 + 802064c2: f8040a13 addi s4,s0,-128 if (de.lne.order == EMPTY_ENTRY) { - 802064b6: 0e500c13 li s8,229 + 802064c6: 0e500c13 li s8,229 if (de.lne.attr == ATTR_LONG_NAME) { - 802064ba: 4cbd li s9,15 + 802064ca: 4cbd li s9,15 for (int off2; (off2 = reloc_clus(dp, off, 0)) != -1; off += 32) { - 802064bc: a03d j 802064ea <enext+0xd8> + 802064cc: a03d j 802064fa <enext+0xd8> cnt++; - 802064be: 2b05 addiw s6,s6,1 + 802064ce: 2b05 addiw s6,s6,1 continue; - 802064c0: a01d j 802064e6 <enext+0xd4> + 802064d0: a01d j 802064f6 <enext+0xd4> *count = cnt; - 802064c2: 016aa023 sw s6,0(s5) + 802064d2: 016aa023 sw s6,0(s5) return 0; - 802064c6: 4501 li a0,0 - 802064c8: b771 j 80206454 <enext+0x42> + 802064d6: 4501 li a0,0 + 802064d8: b771 j 80206464 <enext+0x42> read_entry_name(ep->filename + (lcnt - 1) * CHAR_LONG_NAME, &de); - 802064ca: fff7079b addiw a5,a4,-1 - 802064ce: 0017951b slliw a0,a5,0x1 - 802064d2: 9d3d addw a0,a0,a5 - 802064d4: 0025151b slliw a0,a0,0x2 - 802064d8: 9d3d addw a0,a0,a5 - 802064da: 85d2 mv a1,s4 - 802064dc: 954e add a0,a0,s3 - 802064de: fffff097 auipc ra,0xfffff - 802064e2: 17a080e7 jalr 378(ra) # 80205658 <read_entry_name> + 802064da: fff7079b addiw a5,a4,-1 + 802064de: 0017951b slliw a0,a5,0x1 + 802064e2: 9d3d addw a0,a0,a5 + 802064e4: 0025151b slliw a0,a0,0x2 + 802064e8: 9d3d addw a0,a0,a5 + 802064ea: 85d2 mv a1,s4 + 802064ec: 954e add a0,a0,s3 + 802064ee: fffff097 auipc ra,0xfffff + 802064f2: 17a080e7 jalr 378(ra) # 80205668 <read_entry_name> for (int off2; (off2 = reloc_clus(dp, off, 0)) != -1; off += 32) { - 802064e6: 0204849b addiw s1,s1,32 - 802064ea: 4601 li a2,0 - 802064ec: 85a6 mv a1,s1 - 802064ee: 854a mv a0,s2 - 802064f0: fffff097 auipc ra,0xfffff - 802064f4: e06080e7 jalr -506(ra) # 802052f6 <reloc_clus> - 802064f8: f5750ee3 beq a0,s7,80206454 <enext+0x42> + 802064f6: 0204849b addiw s1,s1,32 + 802064fa: 4601 li a2,0 + 802064fc: 85a6 mv a1,s1 + 802064fe: 854a mv a0,s2 + 80206500: fffff097 auipc ra,0xfffff + 80206504: e06080e7 jalr -506(ra) # 80205306 <reloc_clus> + 80206508: f5750ee3 beq a0,s7,80206464 <enext+0x42> if (rw_clus(dp->cur_clus, 0, 0, (uint64)&de, off2, 32) != 32 || de.lne.order == END_OF_ENTRY) { - 802064fc: 02000793 li a5,32 - 80206500: 0005071b sext.w a4,a0 - 80206504: 86d2 mv a3,s4 - 80206506: 4601 li a2,0 - 80206508: 4581 li a1,0 - 8020650a: 10c92503 lw a0,268(s2) - 8020650e: fffff097 auipc ra,0xfffff - 80206512: ef0080e7 jalr -272(ra) # 802053fe <rw_clus> - 80206516: 2501 sext.w a0,a0 - 80206518: 02000793 li a5,32 - 8020651c: 06f51c63 bne a0,a5,80206594 <enext+0x182> - 80206520: f8044783 lbu a5,-128(s0) - 80206524: cbb5 beqz a5,80206598 <enext+0x186> + 8020650c: 02000793 li a5,32 + 80206510: 0005071b sext.w a4,a0 + 80206514: 86d2 mv a3,s4 + 80206516: 4601 li a2,0 + 80206518: 4581 li a1,0 + 8020651a: 10c92503 lw a0,268(s2) + 8020651e: fffff097 auipc ra,0xfffff + 80206522: ef0080e7 jalr -272(ra) # 8020540e <rw_clus> + 80206526: 2501 sext.w a0,a0 + 80206528: 02000793 li a5,32 + 8020652c: 06f51c63 bne a0,a5,802065a4 <enext+0x182> + 80206530: f8044783 lbu a5,-128(s0) + 80206534: cbb5 beqz a5,802065a8 <enext+0x186> if (de.lne.order == EMPTY_ENTRY) { - 80206526: f9878ce3 beq a5,s8,802064be <enext+0xac> + 80206536: f9878ce3 beq a5,s8,802064ce <enext+0xac> } else if (cnt) { - 8020652a: f80b1ce3 bnez s6,802064c2 <enext+0xb0> + 8020653a: f80b1ce3 bnez s6,802064d2 <enext+0xb0> if (de.lne.attr == ATTR_LONG_NAME) { - 8020652e: f8b44703 lbu a4,-117(s0) - 80206532: 01971d63 bne a4,s9,8020654c <enext+0x13a> + 8020653e: f8b44703 lbu a4,-117(s0) + 80206542: 01971d63 bne a4,s9,8020655c <enext+0x13a> int lcnt = de.lne.order & ~LAST_LONG_ENTRY; - 80206536: 0bf7f713 andi a4,a5,191 + 80206546: 0bf7f713 andi a4,a5,191 if (de.lne.order & LAST_LONG_ENTRY) { - 8020653a: 0407f793 andi a5,a5,64 - 8020653e: d7d1 beqz a5,802064ca <enext+0xb8> + 8020654a: 0407f793 andi a5,a5,64 + 8020654e: d7d1 beqz a5,802064da <enext+0xb8> *count = lcnt + 1; // plus the s-n-e; - 80206540: 0017079b addiw a5,a4,1 - 80206544: 00faa023 sw a5,0(s5) + 80206550: 0017079b addiw a5,a4,1 + 80206554: 00faa023 sw a5,0(s5) count = 0; - 80206548: 4a81 li s5,0 - 8020654a: b741 j 802064ca <enext+0xb8> + 80206558: 4a81 li s5,0 + 8020655a: b741 j 802064da <enext+0xb8> if (count) { - 8020654c: 000a8c63 beqz s5,80206564 <enext+0x152> + 8020655c: 000a8c63 beqz s5,80206574 <enext+0x152> *count = 1; - 80206550: 4785 li a5,1 - 80206552: 00faa023 sw a5,0(s5) + 80206560: 4785 li a5,1 + 80206562: 00faa023 sw a5,0(s5) read_entry_name(ep->filename, &de); - 80206556: f8040593 addi a1,s0,-128 - 8020655a: 854e mv a0,s3 - 8020655c: fffff097 auipc ra,0xfffff - 80206560: 0fc080e7 jalr 252(ra) # 80205658 <read_entry_name> + 80206566: f8040593 addi a1,s0,-128 + 8020656a: 854e mv a0,s3 + 8020656c: fffff097 auipc ra,0xfffff + 80206570: 0fc080e7 jalr 252(ra) # 80205668 <read_entry_name> entry->attribute = d->sne.attr; - 80206564: f8b44783 lbu a5,-117(s0) - 80206568: 10f98023 sb a5,256(s3) + 80206574: f8b44783 lbu a5,-117(s0) + 80206578: 10f98023 sb a5,256(s3) entry->first_clus = ((uint32)d->sne.fst_clus_hi << 16) | d->sne.fst_clus_lo; - 8020656c: f9445783 lhu a5,-108(s0) - 80206570: 0107979b slliw a5,a5,0x10 - 80206574: f9a45703 lhu a4,-102(s0) - 80206578: 8fd9 or a5,a5,a4 - 8020657a: 2781 sext.w a5,a5 - 8020657c: 10f9a223 sw a5,260(s3) + 8020657c: f9445783 lhu a5,-108(s0) + 80206580: 0107979b slliw a5,a5,0x10 + 80206584: f9a45703 lhu a4,-102(s0) + 80206588: 8fd9 or a5,a5,a4 + 8020658a: 2781 sext.w a5,a5 + 8020658c: 10f9a223 sw a5,260(s3) entry->file_size = d->sne.file_size; - 80206580: f9c42703 lw a4,-100(s0) - 80206584: 10e9a423 sw a4,264(s3) + 80206590: f9c42703 lw a4,-100(s0) + 80206594: 10e9a423 sw a4,264(s3) entry->cur_clus = entry->first_clus; - 80206588: 10f9a623 sw a5,268(s3) + 80206598: 10f9a623 sw a5,268(s3) entry->clus_cnt = 0; - 8020658c: 1009a823 sw zero,272(s3) + 8020659c: 1009a823 sw zero,272(s3) return 1; - 80206590: 4505 li a0,1 + 802065a0: 4505 li a0,1 } - 80206592: b5c9 j 80206454 <enext+0x42> + 802065a2: b5c9 j 80206464 <enext+0x42> return -1; - 80206594: 557d li a0,-1 - 80206596: bd7d j 80206454 <enext+0x42> - 80206598: 557d li a0,-1 - 8020659a: bd6d j 80206454 <enext+0x42> + 802065a4: 557d li a0,-1 + 802065a6: bd7d j 80206464 <enext+0x42> + 802065a8: 557d li a0,-1 + 802065aa: bd6d j 80206464 <enext+0x42> -000000008020659c <dirlookup>: +00000000802065ac <dirlookup>: * @param dp entry of a directory file * @param filename target filename * @param poff offset of proper empty entry slots from the beginning of the dir */ struct dirent *dirlookup(struct dirent *dp, char *filename, uint *poff) { - 8020659c: 711d addi sp,sp,-96 - 8020659e: ec86 sd ra,88(sp) - 802065a0: e8a2 sd s0,80(sp) - 802065a2: e4a6 sd s1,72(sp) - 802065a4: e0ca sd s2,64(sp) - 802065a6: fc4e sd s3,56(sp) - 802065a8: f852 sd s4,48(sp) - 802065aa: f456 sd s5,40(sp) - 802065ac: f05a sd s6,32(sp) - 802065ae: ec5e sd s7,24(sp) - 802065b0: 1080 addi s0,sp,96 + 802065ac: 711d addi sp,sp,-96 + 802065ae: ec86 sd ra,88(sp) + 802065b0: e8a2 sd s0,80(sp) + 802065b2: e4a6 sd s1,72(sp) + 802065b4: e0ca sd s2,64(sp) + 802065b6: fc4e sd s3,56(sp) + 802065b8: f852 sd s4,48(sp) + 802065ba: f456 sd s5,40(sp) + 802065bc: f05a sd s6,32(sp) + 802065be: ec5e sd s7,24(sp) + 802065c0: 1080 addi s0,sp,96 if (!(dp->attribute & ATTR_DIRECTORY)) - 802065b2: 10054783 lbu a5,256(a0) - 802065b6: 8bc1 andi a5,a5,16 - 802065b8: cbb1 beqz a5,8020660c <dirlookup+0x70> - 802065ba: 84aa mv s1,a0 - 802065bc: 89ae mv s3,a1 - 802065be: 8ab2 mv s5,a2 + 802065c2: 10054783 lbu a5,256(a0) + 802065c6: 8bc1 andi a5,a5,16 + 802065c8: cbb1 beqz a5,8020661c <dirlookup+0x70> + 802065ca: 84aa mv s1,a0 + 802065cc: 89ae mv s3,a1 + 802065ce: 8ab2 mv s5,a2 panic("dirlookup not DIR"); if (strncmp(filename, ".", FAT32_MAX_FILENAME) == 0) { - 802065c0: 0ff00613 li a2,255 - 802065c4: 00003597 auipc a1,0x3 - 802065c8: 71c58593 addi a1,a1,1820 # 80209ce0 <digits+0x960> - 802065cc: 854e mv a0,s3 - 802065ce: ffffa097 auipc ra,0xffffa - 802065d2: 26c080e7 jalr 620(ra) # 8020083a <strncmp> - 802065d6: c139 beqz a0,8020661c <dirlookup+0x80> + 802065d0: 0ff00613 li a2,255 + 802065d4: 00003597 auipc a1,0x3 + 802065d8: 71458593 addi a1,a1,1812 # 80209ce8 <digits+0x968> + 802065dc: 854e mv a0,s3 + 802065de: ffffa097 auipc ra,0xffffa + 802065e2: 25c080e7 jalr 604(ra) # 8020083a <strncmp> + 802065e6: c139 beqz a0,8020662c <dirlookup+0x80> return edup(dp); } else if (strncmp(filename, "..", FAT32_MAX_FILENAME) == 0) { - 802065d8: 0ff00613 li a2,255 - 802065dc: 00003597 auipc a1,0x3 - 802065e0: 70c58593 addi a1,a1,1804 # 80209ce8 <digits+0x968> - 802065e4: 854e mv a0,s3 - 802065e6: ffffa097 auipc ra,0xffffa - 802065ea: 254080e7 jalr 596(ra) # 8020083a <strncmp> - 802065ee: e125 bnez a0,8020664e <dirlookup+0xb2> + 802065e8: 0ff00613 li a2,255 + 802065ec: 00003597 auipc a1,0x3 + 802065f0: 70458593 addi a1,a1,1796 # 80209cf0 <digits+0x970> + 802065f4: 854e mv a0,s3 + 802065f6: ffffa097 auipc ra,0xffffa + 802065fa: 244080e7 jalr 580(ra) # 8020083a <strncmp> + 802065fe: e125 bnez a0,8020665e <dirlookup+0xb2> if (dp == &root) { - 802065f0: 00018797 auipc a5,0x18 - 802065f4: e6078793 addi a5,a5,-416 # 8021e450 <root> - 802065f8: 04f48463 beq s1,a5,80206640 <dirlookup+0xa4> + 80206600: 00018797 auipc a5,0x18 + 80206604: e5078793 addi a5,a5,-432 # 8021e450 <root> + 80206608: 04f48463 beq s1,a5,80206650 <dirlookup+0xa4> return edup(&root); } return edup(dp->parent); - 802065fc: 1204b503 ld a0,288(s1) - 80206600: 00000097 auipc ra,0x0 - 80206604: 9b0080e7 jalr -1616(ra) # 80205fb0 <edup> - 80206608: 892a mv s2,a0 - 8020660a: a839 j 80206628 <dirlookup+0x8c> + 8020660c: 1204b503 ld a0,288(s1) + 80206610: 00000097 auipc ra,0x0 + 80206614: 9b0080e7 jalr -1616(ra) # 80205fc0 <edup> + 80206618: 892a mv s2,a0 + 8020661a: a839 j 80206638 <dirlookup+0x8c> panic("dirlookup not DIR"); - 8020660c: 00003517 auipc a0,0x3 - 80206610: 6bc50513 addi a0,a0,1724 # 80209cc8 <digits+0x948> - 80206614: ffffa097 auipc ra,0xffffa - 80206618: b30080e7 jalr -1232(ra) # 80200144 <panic> + 8020661c: 00003517 auipc a0,0x3 + 80206620: 6b450513 addi a0,a0,1716 # 80209cd0 <digits+0x950> + 80206624: ffffa097 auipc ra,0xffffa + 80206628: b20080e7 jalr -1248(ra) # 80200144 <panic> return edup(dp); - 8020661c: 8526 mv a0,s1 - 8020661e: 00000097 auipc ra,0x0 - 80206622: 992080e7 jalr -1646(ra) # 80205fb0 <edup> - 80206626: 892a mv s2,a0 + 8020662c: 8526 mv a0,s1 + 8020662e: 00000097 auipc ra,0x0 + 80206632: 992080e7 jalr -1646(ra) # 80205fc0 <edup> + 80206636: 892a mv s2,a0 if (poff) { *poff = off; } eput(ep); return NULL; } - 80206628: 854a mv a0,s2 - 8020662a: 60e6 ld ra,88(sp) - 8020662c: 6446 ld s0,80(sp) - 8020662e: 64a6 ld s1,72(sp) - 80206630: 6906 ld s2,64(sp) - 80206632: 79e2 ld s3,56(sp) - 80206634: 7a42 ld s4,48(sp) - 80206636: 7aa2 ld s5,40(sp) - 80206638: 7b02 ld s6,32(sp) - 8020663a: 6be2 ld s7,24(sp) - 8020663c: 6125 addi sp,sp,96 - 8020663e: 8082 ret + 80206638: 854a mv a0,s2 + 8020663a: 60e6 ld ra,88(sp) + 8020663c: 6446 ld s0,80(sp) + 8020663e: 64a6 ld s1,72(sp) + 80206640: 6906 ld s2,64(sp) + 80206642: 79e2 ld s3,56(sp) + 80206644: 7a42 ld s4,48(sp) + 80206646: 7aa2 ld s5,40(sp) + 80206648: 7b02 ld s6,32(sp) + 8020664a: 6be2 ld s7,24(sp) + 8020664c: 6125 addi sp,sp,96 + 8020664e: 8082 ret return edup(&root); - 80206640: 853e mv a0,a5 - 80206642: 00000097 auipc ra,0x0 - 80206646: 96e080e7 jalr -1682(ra) # 80205fb0 <edup> - 8020664a: 892a mv s2,a0 - 8020664c: bff1 j 80206628 <dirlookup+0x8c> + 80206650: 853e mv a0,a5 + 80206652: 00000097 auipc ra,0x0 + 80206656: 96e080e7 jalr -1682(ra) # 80205fc0 <edup> + 8020665a: 892a mv s2,a0 + 8020665c: bff1 j 80206638 <dirlookup+0x8c> if (dp->valid != 1) { - 8020664e: 11649703 lh a4,278(s1) - 80206652: 4785 li a5,1 + 8020665e: 11649703 lh a4,278(s1) + 80206662: 4785 li a5,1 return NULL; - 80206654: 4901 li s2,0 + 80206664: 4901 li s2,0 if (dp->valid != 1) { - 80206656: fcf719e3 bne a4,a5,80206628 <dirlookup+0x8c> + 80206666: fcf719e3 bne a4,a5,80206638 <dirlookup+0x8c> struct dirent *ep = eget(dp, filename); - 8020665a: 85ce mv a1,s3 - 8020665c: 8526 mv a0,s1 - 8020665e: fffff097 auipc ra,0xfffff - 80206662: eec080e7 jalr -276(ra) # 8020554a <eget> - 80206666: 892a mv s2,a0 + 8020666a: 85ce mv a1,s3 + 8020666c: 8526 mv a0,s1 + 8020666e: fffff097 auipc ra,0xfffff + 80206672: eec080e7 jalr -276(ra) # 8020555a <eget> + 80206676: 892a mv s2,a0 if (ep->valid == 1) { return ep; } // ecache hits - 80206668: 11651703 lh a4,278(a0) - 8020666c: 4785 li a5,1 - 8020666e: faf70de3 beq a4,a5,80206628 <dirlookup+0x8c> + 80206678: 11651703 lh a4,278(a0) + 8020667c: 4785 li a5,1 + 8020667e: faf70de3 beq a4,a5,80206638 <dirlookup+0x8c> int len = strlen(filename); - 80206672: 854e mv a0,s3 - 80206674: ffffa097 auipc ra,0xffffa - 80206678: 272080e7 jalr 626(ra) # 802008e6 <strlen> + 80206682: 854e mv a0,s3 + 80206684: ffffa097 auipc ra,0xffffa + 80206688: 262080e7 jalr 610(ra) # 802008e6 <strlen> int count = 0; - 8020667c: fa042623 sw zero,-84(s0) + 8020668c: fa042623 sw zero,-84(s0) reloc_clus(dp, 0, 0); - 80206680: 4601 li a2,0 - 80206682: 4581 li a1,0 - 80206684: 8526 mv a0,s1 - 80206686: fffff097 auipc ra,0xfffff - 8020668a: c70080e7 jalr -912(ra) # 802052f6 <reloc_clus> + 80206690: 4601 li a2,0 + 80206692: 4581 li a1,0 + 80206694: 8526 mv a0,s1 + 80206696: fffff097 auipc ra,0xfffff + 8020669a: c70080e7 jalr -912(ra) # 80205306 <reloc_clus> uint off = 0; - 8020668e: 4a01 li s4,0 + 8020669e: 4a01 li s4,0 while ((type = enext(dp, ep, off, &count) != -1)) { - 80206690: fac40b93 addi s7,s0,-84 - 80206694: 5b7d li s6,-1 - 80206696: 86de mv a3,s7 - 80206698: 8652 mv a2,s4 - 8020669a: 85ca mv a1,s2 - 8020669c: 8526 mv a0,s1 - 8020669e: 00000097 auipc ra,0x0 - 802066a2: d74080e7 jalr -652(ra) # 80206412 <enext> - 802066a6: 03650f63 beq a0,s6,802066e4 <dirlookup+0x148> + 802066a0: fac40b93 addi s7,s0,-84 + 802066a4: 5b7d li s6,-1 + 802066a6: 86de mv a3,s7 + 802066a8: 8652 mv a2,s4 + 802066aa: 85ca mv a1,s2 + 802066ac: 8526 mv a0,s1 + 802066ae: 00000097 auipc ra,0x0 + 802066b2: d74080e7 jalr -652(ra) # 80206422 <enext> + 802066b6: 03650f63 beq a0,s6,802066f4 <dirlookup+0x148> } else if (strncmp(filename, ep->filename, FAT32_MAX_FILENAME) == 0) { - 802066aa: 0ff00613 li a2,255 - 802066ae: 85ca mv a1,s2 - 802066b0: 854e mv a0,s3 - 802066b2: ffffa097 auipc ra,0xffffa - 802066b6: 188080e7 jalr 392(ra) # 8020083a <strncmp> - 802066ba: c901 beqz a0,802066ca <dirlookup+0x12e> + 802066ba: 0ff00613 li a2,255 + 802066be: 85ca mv a1,s2 + 802066c0: 854e mv a0,s3 + 802066c2: ffffa097 auipc ra,0xffffa + 802066c6: 178080e7 jalr 376(ra) # 8020083a <strncmp> + 802066ca: c901 beqz a0,802066da <dirlookup+0x12e> off += count << 5; - 802066bc: fac42783 lw a5,-84(s0) - 802066c0: 0057979b slliw a5,a5,0x5 - 802066c4: 01478a3b addw s4,a5,s4 - 802066c8: b7f9 j 80206696 <dirlookup+0xfa> + 802066cc: fac42783 lw a5,-84(s0) + 802066d0: 0057979b slliw a5,a5,0x5 + 802066d4: 01478a3b addw s4,a5,s4 + 802066d8: b7f9 j 802066a6 <dirlookup+0xfa> ep->parent = edup(dp); - 802066ca: 8526 mv a0,s1 - 802066cc: 00000097 auipc ra,0x0 - 802066d0: 8e4080e7 jalr -1820(ra) # 80205fb0 <edup> - 802066d4: 12a93023 sd a0,288(s2) + 802066da: 8526 mv a0,s1 + 802066dc: 00000097 auipc ra,0x0 + 802066e0: 8e4080e7 jalr -1820(ra) # 80205fc0 <edup> + 802066e4: 12a93023 sd a0,288(s2) ep->off = off; - 802066d8: 11492e23 sw s4,284(s2) + 802066e8: 11492e23 sw s4,284(s2) ep->valid = 1; - 802066dc: 4785 li a5,1 - 802066de: 10f91b23 sh a5,278(s2) + 802066ec: 4785 li a5,1 + 802066ee: 10f91b23 sh a5,278(s2) return ep; - 802066e2: b799 j 80206628 <dirlookup+0x8c> + 802066f2: b799 j 80206638 <dirlookup+0x8c> if (poff) { - 802066e4: 000a8463 beqz s5,802066ec <dirlookup+0x150> + 802066f4: 000a8463 beqz s5,802066fc <dirlookup+0x150> *poff = off; - 802066e8: 014aa023 sw s4,0(s5) + 802066f8: 014aa023 sw s4,0(s5) eput(ep); - 802066ec: 854a mv a0,s2 - 802066ee: 00000097 auipc ra,0x0 - 802066f2: ba4080e7 jalr -1116(ra) # 80206292 <eput> + 802066fc: 854a mv a0,s2 + 802066fe: 00000097 auipc ra,0x0 + 80206702: ba4080e7 jalr -1116(ra) # 802062a2 <eput> return NULL; - 802066f6: 4901 li s2,0 - 802066f8: bf05 j 80206628 <dirlookup+0x8c> - -00000000802066fa <ealloc>: -{ - 802066fa: 715d addi sp,sp,-80 - 802066fc: e486 sd ra,72(sp) - 802066fe: e0a2 sd s0,64(sp) - 80206700: fc26 sd s1,56(sp) - 80206702: f84a sd s2,48(sp) - 80206704: f44e sd s3,40(sp) - 80206706: f052 sd s4,32(sp) - 80206708: ec56 sd s5,24(sp) - 8020670a: 0880 addi s0,sp,80 - 8020670c: 892a mv s2,a0 + 80206706: 4901 li s2,0 + 80206708: bf05 j 80206638 <dirlookup+0x8c> + +000000008020670a <ealloc>: +{ + 8020670a: 715d addi sp,sp,-80 + 8020670c: e486 sd ra,72(sp) + 8020670e: e0a2 sd s0,64(sp) + 80206710: fc26 sd s1,56(sp) + 80206712: f84a sd s2,48(sp) + 80206714: f44e sd s3,40(sp) + 80206716: f052 sd s4,32(sp) + 80206718: ec56 sd s5,24(sp) + 8020671a: 0880 addi s0,sp,80 + 8020671c: 892a mv s2,a0 if (!(dp->attribute & ATTR_DIRECTORY)) { - 8020670e: 10054783 lbu a5,256(a0) - 80206712: 8bc1 andi a5,a5,16 - 80206714: c7b1 beqz a5,80206760 <ealloc+0x66> - 80206716: 852e mv a0,a1 - 80206718: 8a32 mv s4,a2 + 8020671e: 10054783 lbu a5,256(a0) + 80206722: 8bc1 andi a5,a5,16 + 80206724: c7b1 beqz a5,80206770 <ealloc+0x66> + 80206726: 852e mv a0,a1 + 80206728: 8a32 mv s4,a2 if (dp->valid != 1 || !(name = formatname(name))) { // detect illegal character - 8020671a: 11691703 lh a4,278(s2) - 8020671e: 4785 li a5,1 + 8020672a: 11691703 lh a4,278(s2) + 8020672e: 4785 li a5,1 return NULL; - 80206720: 4481 li s1,0 + 80206730: 4481 li s1,0 if (dp->valid != 1 || !(name = formatname(name))) { // detect illegal character - 80206722: 02f71563 bne a4,a5,8020674c <ealloc+0x52> - 80206726: fffff097 auipc ra,0xfffff - 8020672a: 408080e7 jalr 1032(ra) # 80205b2e <formatname> - 8020672e: 89aa mv s3,a0 - 80206730: 10050663 beqz a0,8020683c <ealloc+0x142> + 80206732: 02f71563 bne a4,a5,8020675c <ealloc+0x52> + 80206736: fffff097 auipc ra,0xfffff + 8020673a: 408080e7 jalr 1032(ra) # 80205b3e <formatname> + 8020673e: 89aa mv s3,a0 + 80206740: 10050663 beqz a0,8020684c <ealloc+0x142> uint off = 0; - 80206734: fa042e23 sw zero,-68(s0) + 80206744: fa042e23 sw zero,-68(s0) if ((ep = dirlookup(dp, name, &off)) != 0) { // entry exists - 80206738: fbc40613 addi a2,s0,-68 - 8020673c: 85aa mv a1,a0 - 8020673e: 854a mv a0,s2 - 80206740: 00000097 auipc ra,0x0 - 80206744: e5c080e7 jalr -420(ra) # 8020659c <dirlookup> - 80206748: 84aa mv s1,a0 - 8020674a: c11d beqz a0,80206770 <ealloc+0x76> -} - 8020674c: 8526 mv a0,s1 - 8020674e: 60a6 ld ra,72(sp) - 80206750: 6406 ld s0,64(sp) - 80206752: 74e2 ld s1,56(sp) - 80206754: 7942 ld s2,48(sp) - 80206756: 79a2 ld s3,40(sp) - 80206758: 7a02 ld s4,32(sp) - 8020675a: 6ae2 ld s5,24(sp) - 8020675c: 6161 addi sp,sp,80 - 8020675e: 8082 ret + 80206748: fbc40613 addi a2,s0,-68 + 8020674c: 85aa mv a1,a0 + 8020674e: 854a mv a0,s2 + 80206750: 00000097 auipc ra,0x0 + 80206754: e5c080e7 jalr -420(ra) # 802065ac <dirlookup> + 80206758: 84aa mv s1,a0 + 8020675a: c11d beqz a0,80206780 <ealloc+0x76> +} + 8020675c: 8526 mv a0,s1 + 8020675e: 60a6 ld ra,72(sp) + 80206760: 6406 ld s0,64(sp) + 80206762: 74e2 ld s1,56(sp) + 80206764: 7942 ld s2,48(sp) + 80206766: 79a2 ld s3,40(sp) + 80206768: 7a02 ld s4,32(sp) + 8020676a: 6ae2 ld s5,24(sp) + 8020676c: 6161 addi sp,sp,80 + 8020676e: 8082 ret panic("ealloc not dir"); - 80206760: 00003517 auipc a0,0x3 - 80206764: 59050513 addi a0,a0,1424 # 80209cf0 <digits+0x970> - 80206768: ffffa097 auipc ra,0xffffa - 8020676c: 9dc080e7 jalr -1572(ra) # 80200144 <panic> + 80206770: 00003517 auipc a0,0x3 + 80206774: 58850513 addi a0,a0,1416 # 80209cf8 <digits+0x978> + 80206778: ffffa097 auipc ra,0xffffa + 8020677c: 9cc080e7 jalr -1588(ra) # 80200144 <panic> ep = eget(dp, name); - 80206770: 85ce mv a1,s3 - 80206772: 854a mv a0,s2 - 80206774: fffff097 auipc ra,0xfffff - 80206778: dd6080e7 jalr -554(ra) # 8020554a <eget> - 8020677c: 84aa mv s1,a0 + 80206780: 85ce mv a1,s3 + 80206782: 854a mv a0,s2 + 80206784: fffff097 auipc ra,0xfffff + 80206788: dd6080e7 jalr -554(ra) # 8020555a <eget> + 8020678c: 84aa mv s1,a0 elock(ep); - 8020677e: 00000097 auipc ra,0x0 - 80206782: a90080e7 jalr -1392(ra) # 8020620e <elock> + 8020678e: 00000097 auipc ra,0x0 + 80206792: a90080e7 jalr -1392(ra) # 8020621e <elock> ep->attribute = attr; - 80206786: 11448023 sb s4,256(s1) + 80206796: 11448023 sb s4,256(s1) ep->file_size = 0; - 8020678a: 1004a423 sw zero,264(s1) + 8020679a: 1004a423 sw zero,264(s1) ep->first_clus = 0; - 8020678e: 1004a223 sw zero,260(s1) + 8020679e: 1004a223 sw zero,260(s1) ep->parent = edup(dp); - 80206792: 854a mv a0,s2 - 80206794: 00000097 auipc ra,0x0 - 80206798: 81c080e7 jalr -2020(ra) # 80205fb0 <edup> - 8020679c: 12a4b023 sd a0,288(s1) + 802067a2: 854a mv a0,s2 + 802067a4: 00000097 auipc ra,0x0 + 802067a8: 81c080e7 jalr -2020(ra) # 80205fc0 <edup> + 802067ac: 12a4b023 sd a0,288(s1) ep->off = off; - 802067a0: fbc42a83 lw s5,-68(s0) - 802067a4: 1154ae23 sw s5,284(s1) + 802067b0: fbc42a83 lw s5,-68(s0) + 802067b4: 1154ae23 sw s5,284(s1) ep->clus_cnt = 0; - 802067a8: 1004a823 sw zero,272(s1) + 802067b8: 1004a823 sw zero,272(s1) ep->cur_clus = 0; - 802067ac: 1004a623 sw zero,268(s1) + 802067bc: 1004a623 sw zero,268(s1) ep->dirty = 0; - 802067b0: 10048aa3 sb zero,277(s1) + 802067c0: 10048aa3 sb zero,277(s1) strncpy(ep->filename, name, FAT32_MAX_FILENAME); - 802067b4: 0ff00613 li a2,255 - 802067b8: 85ce mv a1,s3 - 802067ba: 8526 mv a0,s1 - 802067bc: ffffa097 auipc ra,0xffffa - 802067c0: 0ba080e7 jalr 186(ra) # 80200876 <strncpy> + 802067c4: 0ff00613 li a2,255 + 802067c8: 85ce mv a1,s3 + 802067ca: 8526 mv a0,s1 + 802067cc: ffffa097 auipc ra,0xffffa + 802067d0: 0aa080e7 jalr 170(ra) # 80200876 <strncpy> ep->filename[FAT32_MAX_FILENAME] = '\0'; - 802067c4: 0e048fa3 sb zero,255(s1) + 802067d4: 0e048fa3 sb zero,255(s1) if (attr == ATTR_DIRECTORY) { // generate "." and ".." for ep - 802067c8: 47c1 li a5,16 - 802067ca: 02fa0863 beq s4,a5,802067fa <ealloc+0x100> + 802067d8: 47c1 li a5,16 + 802067da: 02fa0863 beq s4,a5,8020680a <ealloc+0x100> ep->attribute |= ATTR_ARCHIVE; - 802067ce: 1004c783 lbu a5,256(s1) - 802067d2: 0207e793 ori a5,a5,32 - 802067d6: 10f48023 sb a5,256(s1) + 802067de: 1004c783 lbu a5,256(s1) + 802067e2: 0207e793 ori a5,a5,32 + 802067e6: 10f48023 sb a5,256(s1) emake(dp, ep, off); - 802067da: 8656 mv a2,s5 - 802067dc: 85a6 mv a1,s1 - 802067de: 854a mv a0,s2 - 802067e0: fffff097 auipc ra,0xfffff - 802067e4: 406080e7 jalr 1030(ra) # 80205be6 <emake> + 802067ea: 8656 mv a2,s5 + 802067ec: 85a6 mv a1,s1 + 802067ee: 854a mv a0,s2 + 802067f0: fffff097 auipc ra,0xfffff + 802067f4: 406080e7 jalr 1030(ra) # 80205bf6 <emake> ep->valid = 1; - 802067e8: 4785 li a5,1 - 802067ea: 10f49b23 sh a5,278(s1) + 802067f8: 4785 li a5,1 + 802067fa: 10f49b23 sh a5,278(s1) eunlock(ep); - 802067ee: 8526 mv a0,s1 - 802067f0: 00000097 auipc ra,0x0 - 802067f4: a54080e7 jalr -1452(ra) # 80206244 <eunlock> + 802067fe: 8526 mv a0,s1 + 80206800: 00000097 auipc ra,0x0 + 80206804: a54080e7 jalr -1452(ra) # 80206254 <eunlock> return ep; - 802067f8: bf91 j 8020674c <ealloc+0x52> + 80206808: bf91 j 8020675c <ealloc+0x52> ep->attribute |= ATTR_DIRECTORY; - 802067fa: 1004c783 lbu a5,256(s1) - 802067fe: 0107e793 ori a5,a5,16 - 80206802: 10f48023 sb a5,256(s1) + 8020680a: 1004c783 lbu a5,256(s1) + 8020680e: 0107e793 ori a5,a5,16 + 80206812: 10f48023 sb a5,256(s1) ep->cur_clus = ep->first_clus = alloc_clus(dp->dev); - 80206806: 11494503 lbu a0,276(s2) - 8020680a: fffff097 auipc ra,0xfffff - 8020680e: 92a080e7 jalr -1750(ra) # 80205134 <alloc_clus> - 80206812: 2501 sext.w a0,a0 - 80206814: 10a4a223 sw a0,260(s1) - 80206818: 10a4a623 sw a0,268(s1) + 80206816: 11494503 lbu a0,276(s2) + 8020681a: fffff097 auipc ra,0xfffff + 8020681e: 92a080e7 jalr -1750(ra) # 80205144 <alloc_clus> + 80206822: 2501 sext.w a0,a0 + 80206824: 10a4a223 sw a0,260(s1) + 80206828: 10a4a623 sw a0,268(s1) emake(ep, ep, 0); - 8020681c: 4601 li a2,0 - 8020681e: 85a6 mv a1,s1 - 80206820: 8526 mv a0,s1 - 80206822: fffff097 auipc ra,0xfffff - 80206826: 3c4080e7 jalr 964(ra) # 80205be6 <emake> - emake(ep, dp, 32); - 8020682a: 02000613 li a2,32 - 8020682e: 85ca mv a1,s2 + 8020682c: 4601 li a2,0 + 8020682e: 85a6 mv a1,s1 80206830: 8526 mv a0,s1 80206832: fffff097 auipc ra,0xfffff - 80206836: 3b4080e7 jalr 948(ra) # 80205be6 <emake> - 8020683a: b745 j 802067da <ealloc+0xe0> + 80206836: 3c4080e7 jalr 964(ra) # 80205bf6 <emake> + emake(ep, dp, 32); + 8020683a: 02000613 li a2,32 + 8020683e: 85ca mv a1,s2 + 80206840: 8526 mv a0,s1 + 80206842: fffff097 auipc ra,0xfffff + 80206846: 3b4080e7 jalr 948(ra) # 80205bf6 <emake> + 8020684a: b745 j 802067ea <ealloc+0xe0> return NULL; - 8020683c: 84aa mv s1,a0 - 8020683e: b739 j 8020674c <ealloc+0x52> + 8020684c: 84aa mv s1,a0 + 8020684e: b739 j 8020675c <ealloc+0x52> -0000000080206840 <lookup_path>: +0000000080206850 <lookup_path>: return path; } // FAT32 version of namex in xv6's original file system. static struct dirent *lookup_path(char *path, int parent, char *name) { - 80206840: 715d addi sp,sp,-80 - 80206842: e486 sd ra,72(sp) - 80206844: e0a2 sd s0,64(sp) - 80206846: fc26 sd s1,56(sp) - 80206848: f84a sd s2,48(sp) - 8020684a: f44e sd s3,40(sp) - 8020684c: f052 sd s4,32(sp) - 8020684e: ec56 sd s5,24(sp) - 80206850: e85a sd s6,16(sp) - 80206852: e45e sd s7,8(sp) - 80206854: e062 sd s8,0(sp) - 80206856: 0880 addi s0,sp,80 - 80206858: 892a mv s2,a0 - 8020685a: 8b2e mv s6,a1 - 8020685c: 8ab2 mv s5,a2 + 80206850: 715d addi sp,sp,-80 + 80206852: e486 sd ra,72(sp) + 80206854: e0a2 sd s0,64(sp) + 80206856: fc26 sd s1,56(sp) + 80206858: f84a sd s2,48(sp) + 8020685a: f44e sd s3,40(sp) + 8020685c: f052 sd s4,32(sp) + 8020685e: ec56 sd s5,24(sp) + 80206860: e85a sd s6,16(sp) + 80206862: e45e sd s7,8(sp) + 80206864: e062 sd s8,0(sp) + 80206866: 0880 addi s0,sp,80 + 80206868: 892a mv s2,a0 + 8020686a: 8b2e mv s6,a1 + 8020686c: 8ab2 mv s5,a2 struct dirent *entry, *next; if (*path == '/') { - 8020685e: 00054783 lbu a5,0(a0) - 80206862: 02f00713 li a4,47 - 80206866: 02e78663 beq a5,a4,80206892 <lookup_path+0x52> + 8020686e: 00054783 lbu a5,0(a0) + 80206872: 02f00713 li a4,47 + 80206876: 02e78663 beq a5,a4,802068a2 <lookup_path+0x52> entry = edup(&root); } else if (*path != '\0') { entry = edup(myproc()->cwd); } else { return NULL; - 8020686a: 4a01 li s4,0 + 8020687a: 4a01 li s4,0 } else if (*path != '\0') { - 8020686c: cba1 beqz a5,802068bc <lookup_path+0x7c> + 8020687c: cba1 beqz a5,802068cc <lookup_path+0x7c> entry = edup(myproc()->cwd); - 8020686e: ffffb097 auipc ra,0xffffb - 80206872: 1ce080e7 jalr 462(ra) # 80201a3c <myproc> - 80206876: 15853503 ld a0,344(a0) - 8020687a: fffff097 auipc ra,0xfffff - 8020687e: 736080e7 jalr 1846(ra) # 80205fb0 <edup> - 80206882: 8a2a mv s4,a0 + 8020687e: ffffb097 auipc ra,0xffffb + 80206882: 1be080e7 jalr 446(ra) # 80201a3c <myproc> + 80206886: 15853503 ld a0,344(a0) + 8020688a: fffff097 auipc ra,0xfffff + 8020688e: 736080e7 jalr 1846(ra) # 80205fc0 <edup> + 80206892: 8a2a mv s4,a0 while (*path == '/') { - 80206884: 02f00993 li s3,47 - 80206888: 0ff00b93 li s7,255 - 8020688c: 0ff00c13 li s8,255 - 80206890: a0e5 j 80206978 <lookup_path+0x138> + 80206894: 02f00993 li s3,47 + 80206898: 0ff00b93 li s7,255 + 8020689c: 0ff00c13 li s8,255 + 802068a0: a0e5 j 80206988 <lookup_path+0x138> entry = edup(&root); - 80206892: 00018517 auipc a0,0x18 - 80206896: bbe50513 addi a0,a0,-1090 # 8021e450 <root> - 8020689a: fffff097 auipc ra,0xfffff - 8020689e: 716080e7 jalr 1814(ra) # 80205fb0 <edup> - 802068a2: 8a2a mv s4,a0 - 802068a4: b7c5 j 80206884 <lookup_path+0x44> + 802068a2: 00018517 auipc a0,0x18 + 802068a6: bae50513 addi a0,a0,-1106 # 8021e450 <root> + 802068aa: fffff097 auipc ra,0xfffff + 802068ae: 716080e7 jalr 1814(ra) # 80205fc0 <edup> + 802068b2: 8a2a mv s4,a0 + 802068b4: b7c5 j 80206894 <lookup_path+0x44> } while ((path = skipelem(path, name)) != 0) { elock(entry); if (!(entry->attribute & ATTR_DIRECTORY)) { eunlock(entry); - 802068a6: 8552 mv a0,s4 - 802068a8: 00000097 auipc ra,0x0 - 802068ac: 99c080e7 jalr -1636(ra) # 80206244 <eunlock> + 802068b6: 8552 mv a0,s4 + 802068b8: 00000097 auipc ra,0x0 + 802068bc: 99c080e7 jalr -1636(ra) # 80206254 <eunlock> eput(entry); - 802068b0: 8552 mv a0,s4 - 802068b2: 00000097 auipc ra,0x0 - 802068b6: 9e0080e7 jalr -1568(ra) # 80206292 <eput> + 802068c0: 8552 mv a0,s4 + 802068c2: 00000097 auipc ra,0x0 + 802068c6: 9e0080e7 jalr -1568(ra) # 802062a2 <eput> return NULL; - 802068ba: 4a01 li s4,0 + 802068ca: 4a01 li s4,0 if (parent) { eput(entry); return NULL; } return entry; } - 802068bc: 8552 mv a0,s4 - 802068be: 60a6 ld ra,72(sp) - 802068c0: 6406 ld s0,64(sp) - 802068c2: 74e2 ld s1,56(sp) - 802068c4: 7942 ld s2,48(sp) - 802068c6: 79a2 ld s3,40(sp) - 802068c8: 7a02 ld s4,32(sp) - 802068ca: 6ae2 ld s5,24(sp) - 802068cc: 6b42 ld s6,16(sp) - 802068ce: 6ba2 ld s7,8(sp) - 802068d0: 6c02 ld s8,0(sp) - 802068d2: 6161 addi sp,sp,80 - 802068d4: 8082 ret + 802068cc: 8552 mv a0,s4 + 802068ce: 60a6 ld ra,72(sp) + 802068d0: 6406 ld s0,64(sp) + 802068d2: 74e2 ld s1,56(sp) + 802068d4: 7942 ld s2,48(sp) + 802068d6: 79a2 ld s3,40(sp) + 802068d8: 7a02 ld s4,32(sp) + 802068da: 6ae2 ld s5,24(sp) + 802068dc: 6b42 ld s6,16(sp) + 802068de: 6ba2 ld s7,8(sp) + 802068e0: 6c02 ld s8,0(sp) + 802068e2: 6161 addi sp,sp,80 + 802068e4: 8082 ret eunlock(entry); - 802068d6: 8552 mv a0,s4 - 802068d8: 00000097 auipc ra,0x0 - 802068dc: 96c080e7 jalr -1684(ra) # 80206244 <eunlock> + 802068e6: 8552 mv a0,s4 + 802068e8: 00000097 auipc ra,0x0 + 802068ec: 96c080e7 jalr -1684(ra) # 80206254 <eunlock> return entry; - 802068e0: bff1 j 802068bc <lookup_path+0x7c> + 802068f0: bff1 j 802068cc <lookup_path+0x7c> eunlock(entry); - 802068e2: 8552 mv a0,s4 - 802068e4: 00000097 auipc ra,0x0 - 802068e8: 960080e7 jalr -1696(ra) # 80206244 <eunlock> + 802068f2: 8552 mv a0,s4 + 802068f4: 00000097 auipc ra,0x0 + 802068f8: 960080e7 jalr -1696(ra) # 80206254 <eunlock> eput(entry); - 802068ec: 8552 mv a0,s4 - 802068ee: 00000097 auipc ra,0x0 - 802068f2: 9a4080e7 jalr -1628(ra) # 80206292 <eput> + 802068fc: 8552 mv a0,s4 + 802068fe: 00000097 auipc ra,0x0 + 80206902: 9a4080e7 jalr -1628(ra) # 802062a2 <eput> return NULL; - 802068f6: 8a4a mv s4,s2 - 802068f8: b7d1 j 802068bc <lookup_path+0x7c> + 80206906: 8a4a mv s4,s2 + 80206908: b7d1 j 802068cc <lookup_path+0x7c> int len = path - s; - 802068fa: 412487b3 sub a5,s1,s2 - 802068fe: 863e mv a2,a5 - 80206900: 2781 sext.w a5,a5 - 80206902: 00fbd363 bge s7,a5,80206908 <lookup_path+0xc8> - 80206906: 8662 mv a2,s8 - 80206908: 0006079b sext.w a5,a2 + 8020690a: 412487b3 sub a5,s1,s2 + 8020690e: 863e mv a2,a5 + 80206910: 2781 sext.w a5,a5 + 80206912: 00fbd363 bge s7,a5,80206918 <lookup_path+0xc8> + 80206916: 8662 mv a2,s8 + 80206918: 0006079b sext.w a5,a2 name[len] = 0; - 8020690c: 97d6 add a5,a5,s5 - 8020690e: 00078023 sb zero,0(a5) + 8020691c: 97d6 add a5,a5,s5 + 8020691e: 00078023 sb zero,0(a5) memmove(name, s, len); - 80206912: 2601 sext.w a2,a2 - 80206914: 85ca mv a1,s2 - 80206916: 8556 mv a0,s5 - 80206918: ffffa097 auipc ra,0xffffa - 8020691c: ea6080e7 jalr -346(ra) # 802007be <memmove> + 80206922: 2601 sext.w a2,a2 + 80206924: 85ca mv a1,s2 + 80206926: 8556 mv a0,s5 + 80206928: ffffa097 auipc ra,0xffffa + 8020692c: e96080e7 jalr -362(ra) # 802007be <memmove> while (*path == '/') { - 80206920: 0004c783 lbu a5,0(s1) - 80206924: 01379763 bne a5,s3,80206932 <lookup_path+0xf2> + 80206930: 0004c783 lbu a5,0(s1) + 80206934: 01379763 bne a5,s3,80206942 <lookup_path+0xf2> path++; - 80206928: 0485 addi s1,s1,1 + 80206938: 0485 addi s1,s1,1 while (*path == '/') { - 8020692a: 0004c783 lbu a5,0(s1) - 8020692e: ff378de3 beq a5,s3,80206928 <lookup_path+0xe8> + 8020693a: 0004c783 lbu a5,0(s1) + 8020693e: ff378de3 beq a5,s3,80206938 <lookup_path+0xe8> elock(entry); - 80206932: 8552 mv a0,s4 - 80206934: 00000097 auipc ra,0x0 - 80206938: 8da080e7 jalr -1830(ra) # 8020620e <elock> + 80206942: 8552 mv a0,s4 + 80206944: 00000097 auipc ra,0x0 + 80206948: 8da080e7 jalr -1830(ra) # 8020621e <elock> if (!(entry->attribute & ATTR_DIRECTORY)) { - 8020693c: 100a4783 lbu a5,256(s4) - 80206940: 8bc1 andi a5,a5,16 - 80206942: d3b5 beqz a5,802068a6 <lookup_path+0x66> + 8020694c: 100a4783 lbu a5,256(s4) + 80206950: 8bc1 andi a5,a5,16 + 80206952: d3b5 beqz a5,802068b6 <lookup_path+0x66> if (parent && *path == '\0') { - 80206944: 000b0563 beqz s6,8020694e <lookup_path+0x10e> - 80206948: 0004c783 lbu a5,0(s1) - 8020694c: d7c9 beqz a5,802068d6 <lookup_path+0x96> + 80206954: 000b0563 beqz s6,8020695e <lookup_path+0x10e> + 80206958: 0004c783 lbu a5,0(s1) + 8020695c: d7c9 beqz a5,802068e6 <lookup_path+0x96> if ((next = dirlookup(entry, name, 0)) == 0) { - 8020694e: 4601 li a2,0 - 80206950: 85d6 mv a1,s5 - 80206952: 8552 mv a0,s4 - 80206954: 00000097 auipc ra,0x0 - 80206958: c48080e7 jalr -952(ra) # 8020659c <dirlookup> - 8020695c: 892a mv s2,a0 - 8020695e: d151 beqz a0,802068e2 <lookup_path+0xa2> + 8020695e: 4601 li a2,0 + 80206960: 85d6 mv a1,s5 + 80206962: 8552 mv a0,s4 + 80206964: 00000097 auipc ra,0x0 + 80206968: c48080e7 jalr -952(ra) # 802065ac <dirlookup> + 8020696c: 892a mv s2,a0 + 8020696e: d151 beqz a0,802068f2 <lookup_path+0xa2> eunlock(entry); - 80206960: 8552 mv a0,s4 - 80206962: 00000097 auipc ra,0x0 - 80206966: 8e2080e7 jalr -1822(ra) # 80206244 <eunlock> + 80206970: 8552 mv a0,s4 + 80206972: 00000097 auipc ra,0x0 + 80206976: 8e2080e7 jalr -1822(ra) # 80206254 <eunlock> eput(entry); - 8020696a: 8552 mv a0,s4 - 8020696c: 00000097 auipc ra,0x0 - 80206970: 926080e7 jalr -1754(ra) # 80206292 <eput> + 8020697a: 8552 mv a0,s4 + 8020697c: 00000097 auipc ra,0x0 + 80206980: 926080e7 jalr -1754(ra) # 802062a2 <eput> entry = next; - 80206974: 8a4a mv s4,s2 + 80206984: 8a4a mv s4,s2 eput(entry); - 80206976: 8926 mv s2,s1 + 80206986: 8926 mv s2,s1 while (*path == '/') { - 80206978: 00094783 lbu a5,0(s2) - 8020697c: 03379363 bne a5,s3,802069a2 <lookup_path+0x162> + 80206988: 00094783 lbu a5,0(s2) + 8020698c: 03379363 bne a5,s3,802069b2 <lookup_path+0x162> path++; - 80206980: 0905 addi s2,s2,1 + 80206990: 0905 addi s2,s2,1 while (*path == '/') { - 80206982: 00094783 lbu a5,0(s2) - 80206986: ff378de3 beq a5,s3,80206980 <lookup_path+0x140> + 80206992: 00094783 lbu a5,0(s2) + 80206996: ff378de3 beq a5,s3,80206990 <lookup_path+0x140> if (*path == 0) { return NULL; } - 8020698a: cf89 beqz a5,802069a4 <lookup_path+0x164> + 8020699a: cf89 beqz a5,802069b4 <lookup_path+0x164> path++; - 8020698c: 84ca mv s1,s2 + 8020699c: 84ca mv s1,s2 while (*path != '/' && *path != 0) { - 8020698e: f73786e3 beq a5,s3,802068fa <lookup_path+0xba> + 8020699e: f73786e3 beq a5,s3,8020690a <lookup_path+0xba> eput(entry); - 80206992: 84ca mv s1,s2 + 802069a2: 84ca mv s1,s2 while (*path != '/' && *path != 0) { - 80206994: d3bd beqz a5,802068fa <lookup_path+0xba> + 802069a4: d3bd beqz a5,8020690a <lookup_path+0xba> path++; - 80206996: 0485 addi s1,s1,1 + 802069a6: 0485 addi s1,s1,1 while (*path != '/' && *path != 0) { - 80206998: 0004c783 lbu a5,0(s1) - 8020699c: ff379ce3 bne a5,s3,80206994 <lookup_path+0x154> - 802069a0: bfa9 j 802068fa <lookup_path+0xba> + 802069a8: 0004c783 lbu a5,0(s1) + 802069ac: ff379ce3 bne a5,s3,802069a4 <lookup_path+0x154> + 802069b0: bfa9 j 8020690a <lookup_path+0xba> if (*path == 0) { return NULL; } - 802069a2: fbe5 bnez a5,80206992 <lookup_path+0x152> + 802069b2: fbe5 bnez a5,802069a2 <lookup_path+0x152> if (parent) { - 802069a4: f00b0ce3 beqz s6,802068bc <lookup_path+0x7c> + 802069b4: f00b0ce3 beqz s6,802068cc <lookup_path+0x7c> eput(entry); - 802069a8: 8552 mv a0,s4 - 802069aa: 00000097 auipc ra,0x0 - 802069ae: 8e8080e7 jalr -1816(ra) # 80206292 <eput> + 802069b8: 8552 mv a0,s4 + 802069ba: 00000097 auipc ra,0x0 + 802069be: 8e8080e7 jalr -1816(ra) # 802062a2 <eput> return NULL; - 802069b2: 4a01 li s4,0 - 802069b4: b721 j 802068bc <lookup_path+0x7c> + 802069c2: 4a01 li s4,0 + 802069c4: b721 j 802068cc <lookup_path+0x7c> -00000000802069b6 <ename>: +00000000802069c6 <ename>: struct dirent *ename(char *path) { - 802069b6: 716d addi sp,sp,-272 - 802069b8: e606 sd ra,264(sp) - 802069ba: e222 sd s0,256(sp) - 802069bc: 0a00 addi s0,sp,272 + 802069c6: 716d addi sp,sp,-272 + 802069c8: e606 sd ra,264(sp) + 802069ca: e222 sd s0,256(sp) + 802069cc: 0a00 addi s0,sp,272 char name[FAT32_MAX_FILENAME + 1]; return lookup_path(path, 0, name); - 802069be: ef040613 addi a2,s0,-272 - 802069c2: 4581 li a1,0 - 802069c4: 00000097 auipc ra,0x0 - 802069c8: e7c080e7 jalr -388(ra) # 80206840 <lookup_path> + 802069ce: ef040613 addi a2,s0,-272 + 802069d2: 4581 li a1,0 + 802069d4: 00000097 auipc ra,0x0 + 802069d8: e7c080e7 jalr -388(ra) # 80206850 <lookup_path> } - 802069cc: 60b2 ld ra,264(sp) - 802069ce: 6412 ld s0,256(sp) - 802069d0: 6151 addi sp,sp,272 - 802069d2: 8082 ret + 802069dc: 60b2 ld ra,264(sp) + 802069de: 6412 ld s0,256(sp) + 802069e0: 6151 addi sp,sp,272 + 802069e2: 8082 ret -00000000802069d4 <enameparent>: +00000000802069e4 <enameparent>: struct dirent *enameparent(char *path, char *name) { - 802069d4: 1141 addi sp,sp,-16 - 802069d6: e406 sd ra,8(sp) - 802069d8: e022 sd s0,0(sp) - 802069da: 0800 addi s0,sp,16 - 802069dc: 862e mv a2,a1 + 802069e4: 1141 addi sp,sp,-16 + 802069e6: e406 sd ra,8(sp) + 802069e8: e022 sd s0,0(sp) + 802069ea: 0800 addi s0,sp,16 + 802069ec: 862e mv a2,a1 return lookup_path(path, 1, name); - 802069de: 4585 li a1,1 - 802069e0: 00000097 auipc ra,0x0 - 802069e4: e60080e7 jalr -416(ra) # 80206840 <lookup_path> + 802069ee: 4585 li a1,1 + 802069f0: 00000097 auipc ra,0x0 + 802069f4: e60080e7 jalr -416(ra) # 80206850 <lookup_path> } - 802069e8: 60a2 ld ra,8(sp) - 802069ea: 6402 ld s0,0(sp) - 802069ec: 0141 addi sp,sp,16 - 802069ee: 8082 ret + 802069f8: 60a2 ld ra,8(sp) + 802069fa: 6402 ld s0,0(sp) + 802069fc: 0141 addi sp,sp,16 + 802069fe: 8082 ret -00000000802069f0 <plicinit>: +0000000080206a00 <plicinit>: // // the riscv Platform Level Interrupt Controller (PLIC). // void plicinit(void) { - 802069f0: 1141 addi sp,sp,-16 - 802069f2: e422 sd s0,8(sp) - 802069f4: 0800 addi s0,sp,16 + 80206a00: 1141 addi sp,sp,-16 + 80206a02: e422 sd s0,8(sp) + 80206a04: 0800 addi s0,sp,16 writed(1, PLIC_V + DISK_IRQ * sizeof(uint32)); - 802069f6: 00fc37b7 lui a5,0xfc3 - 802069fa: 07ba slli a5,a5,0xe - 802069fc: 4705 li a4,1 - 802069fe: c3d8 sw a4,4(a5) + 80206a06: 00fc37b7 lui a5,0xfc3 + 80206a0a: 07ba slli a5,a5,0xe + 80206a0c: 4705 li a4,1 + 80206a0e: c3d8 sw a4,4(a5) writed(1, PLIC_V + UART_IRQ * sizeof(uint32)); - 80206a00: d798 sw a4,40(a5) + 80206a10: d798 sw a4,40(a5) #ifdef DEBUG printf("plicinit\n"); #endif } - 80206a02: 6422 ld s0,8(sp) - 80206a04: 0141 addi sp,sp,16 - 80206a06: 8082 ret + 80206a12: 6422 ld s0,8(sp) + 80206a14: 0141 addi sp,sp,16 + 80206a16: 8082 ret -0000000080206a08 <plicinithart>: +0000000080206a18 <plicinithart>: void plicinithart(void) { - 80206a08: 1141 addi sp,sp,-16 - 80206a0a: e406 sd ra,8(sp) - 80206a0c: e022 sd s0,0(sp) - 80206a0e: 0800 addi s0,sp,16 + 80206a18: 1141 addi sp,sp,-16 + 80206a1a: e406 sd ra,8(sp) + 80206a1c: e022 sd s0,0(sp) + 80206a1e: 0800 addi s0,sp,16 int hart = cpuid(); - 80206a10: ffffb097 auipc ra,0xffffb - 80206a14: 000080e7 jalr ra # 80201a10 <cpuid> + 80206a20: ffffb097 auipc ra,0xffffb + 80206a24: ff0080e7 jalr -16(ra) # 80201a10 <cpuid> #ifdef QEMU // set uart's enable bit for this hart's S-mode. *(uint32*)PLIC_SENABLE(hart)= (1 << UART_IRQ) | (1 << DISK_IRQ); - 80206a18: 0085171b slliw a4,a0,0x8 - 80206a1c: 01f867b7 lui a5,0x1f86 - 80206a20: 0785 addi a5,a5,1 # 1f86001 <_entry-0x7e279fff> - 80206a22: 07b6 slli a5,a5,0xd - 80206a24: 97ba add a5,a5,a4 - 80206a26: 40200713 li a4,1026 - 80206a2a: 08e7a023 sw a4,128(a5) + 80206a28: 0085171b slliw a4,a0,0x8 + 80206a2c: 01f867b7 lui a5,0x1f86 + 80206a30: 0785 addi a5,a5,1 # 1f86001 <_entry-0x7e279fff> + 80206a32: 07b6 slli a5,a5,0xd + 80206a34: 97ba add a5,a5,a4 + 80206a36: 40200713 li a4,1026 + 80206a3a: 08e7a023 sw a4,128(a5) // set this hart's S-mode priority threshold to 0. *(uint32*)PLIC_SPRIORITY(hart) = 0; - 80206a2e: 00d5151b slliw a0,a0,0xd - 80206a32: 03f0c7b7 lui a5,0x3f0c - 80206a36: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> - 80206a3a: 07b2 slli a5,a5,0xc - 80206a3c: 97aa add a5,a5,a0 - 80206a3e: 0007a023 sw zero,0(a5) + 80206a3e: 00d5151b slliw a0,a0,0xd + 80206a42: 03f0c7b7 lui a5,0x3f0c + 80206a46: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> + 80206a4a: 07b2 slli a5,a5,0xc + 80206a4c: 97aa add a5,a5,a0 + 80206a4e: 0007a023 sw zero,0(a5) *(hart0_m_int_enable_hi) = readd(hart0_m_int_enable_hi) | (1 << (UART_IRQ % 32)); #endif #ifdef DEBUG printf("plicinithart\n"); #endif } - 80206a42: 60a2 ld ra,8(sp) - 80206a44: 6402 ld s0,0(sp) - 80206a46: 0141 addi sp,sp,16 - 80206a48: 8082 ret + 80206a52: 60a2 ld ra,8(sp) + 80206a54: 6402 ld s0,0(sp) + 80206a56: 0141 addi sp,sp,16 + 80206a58: 8082 ret -0000000080206a4a <plic_claim>: +0000000080206a5a <plic_claim>: // ask the PLIC what interrupt we should serve. int plic_claim(void) { - 80206a4a: 1141 addi sp,sp,-16 - 80206a4c: e406 sd ra,8(sp) - 80206a4e: e022 sd s0,0(sp) - 80206a50: 0800 addi s0,sp,16 + 80206a5a: 1141 addi sp,sp,-16 + 80206a5c: e406 sd ra,8(sp) + 80206a5e: e022 sd s0,0(sp) + 80206a60: 0800 addi s0,sp,16 int hart = cpuid(); - 80206a52: ffffb097 auipc ra,0xffffb - 80206a56: fbe080e7 jalr -66(ra) # 80201a10 <cpuid> + 80206a62: ffffb097 auipc ra,0xffffb + 80206a66: fae080e7 jalr -82(ra) # 80201a10 <cpuid> int irq; #ifndef QEMU irq = *(uint32*)PLIC_MCLAIM(hart); #else irq = *(uint32*)PLIC_SCLAIM(hart); - 80206a5a: 00d5151b slliw a0,a0,0xd - 80206a5e: 03f0c7b7 lui a5,0x3f0c - 80206a62: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> - 80206a66: 07b2 slli a5,a5,0xc - 80206a68: 97aa add a5,a5,a0 + 80206a6a: 00d5151b slliw a0,a0,0xd + 80206a6e: 03f0c7b7 lui a5,0x3f0c + 80206a72: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> + 80206a76: 07b2 slli a5,a5,0xc + 80206a78: 97aa add a5,a5,a0 #endif return irq; } - 80206a6a: 43c8 lw a0,4(a5) - 80206a6c: 60a2 ld ra,8(sp) - 80206a6e: 6402 ld s0,0(sp) - 80206a70: 0141 addi sp,sp,16 - 80206a72: 8082 ret + 80206a7a: 43c8 lw a0,4(a5) + 80206a7c: 60a2 ld ra,8(sp) + 80206a7e: 6402 ld s0,0(sp) + 80206a80: 0141 addi sp,sp,16 + 80206a82: 8082 ret -0000000080206a74 <plic_complete>: +0000000080206a84 <plic_complete>: // tell the PLIC we've served this IRQ. void plic_complete(int irq) { - 80206a74: 1101 addi sp,sp,-32 - 80206a76: ec06 sd ra,24(sp) - 80206a78: e822 sd s0,16(sp) - 80206a7a: e426 sd s1,8(sp) - 80206a7c: 1000 addi s0,sp,32 - 80206a7e: 84aa mv s1,a0 + 80206a84: 1101 addi sp,sp,-32 + 80206a86: ec06 sd ra,24(sp) + 80206a88: e822 sd s0,16(sp) + 80206a8a: e426 sd s1,8(sp) + 80206a8c: 1000 addi s0,sp,32 + 80206a8e: 84aa mv s1,a0 int hart = cpuid(); - 80206a80: ffffb097 auipc ra,0xffffb - 80206a84: f90080e7 jalr -112(ra) # 80201a10 <cpuid> + 80206a90: ffffb097 auipc ra,0xffffb + 80206a94: f80080e7 jalr -128(ra) # 80201a10 <cpuid> #ifndef QEMU *(uint32*)PLIC_MCLAIM(hart) = irq; #else *(uint32*)PLIC_SCLAIM(hart) = irq; - 80206a88: 00d5151b slliw a0,a0,0xd - 80206a8c: 03f0c7b7 lui a5,0x3f0c - 80206a90: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> - 80206a94: 07b2 slli a5,a5,0xc - 80206a96: 97aa add a5,a5,a0 - 80206a98: c3c4 sw s1,4(a5) + 80206a98: 00d5151b slliw a0,a0,0xd + 80206a9c: 03f0c7b7 lui a5,0x3f0c + 80206aa0: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> + 80206aa4: 07b2 slli a5,a5,0xc + 80206aa6: 97aa add a5,a5,a0 + 80206aa8: c3c4 sw s1,4(a5) #endif } - 80206a9a: 60e2 ld ra,24(sp) - 80206a9c: 6442 ld s0,16(sp) - 80206a9e: 64a2 ld s1,8(sp) - 80206aa0: 6105 addi sp,sp,32 - 80206aa2: 8082 ret + 80206aaa: 60e2 ld ra,24(sp) + 80206aac: 6442 ld s0,16(sp) + 80206aae: 64a2 ld s1,8(sp) + 80206ab0: 6105 addi sp,sp,32 + 80206ab2: 8082 ret -0000000080206aa4 <consolewrite>: +0000000080206ab4 <consolewrite>: // // user write()s to the console go here. // int consolewrite(int user_src, uint64 src, int n) { - 80206aa4: 715d addi sp,sp,-80 - 80206aa6: e486 sd ra,72(sp) - 80206aa8: e0a2 sd s0,64(sp) - 80206aaa: fc26 sd s1,56(sp) - 80206aac: f84a sd s2,48(sp) - 80206aae: f44e sd s3,40(sp) - 80206ab0: f052 sd s4,32(sp) - 80206ab2: ec56 sd s5,24(sp) - 80206ab4: e85a sd s6,16(sp) - 80206ab6: 0880 addi s0,sp,80 - 80206ab8: 8a2a mv s4,a0 - 80206aba: 84ae mv s1,a1 - 80206abc: 89b2 mv s3,a2 + 80206ab4: 715d addi sp,sp,-80 + 80206ab6: e486 sd ra,72(sp) + 80206ab8: e0a2 sd s0,64(sp) + 80206aba: fc26 sd s1,56(sp) + 80206abc: f84a sd s2,48(sp) + 80206abe: f44e sd s3,40(sp) + 80206ac0: f052 sd s4,32(sp) + 80206ac2: ec56 sd s5,24(sp) + 80206ac4: e85a sd s6,16(sp) + 80206ac6: 0880 addi s0,sp,80 + 80206ac8: 8a2a mv s4,a0 + 80206aca: 84ae mv s1,a1 + 80206acc: 89b2 mv s3,a2 int i; acquire(&cons.lock); - 80206abe: 0001c517 auipc a0,0x1c - 80206ac2: 16250513 addi a0,a0,354 # 80222c20 <cons> - 80206ac6: ffffa097 auipc ra,0xffffa - 80206aca: c00080e7 jalr -1024(ra) # 802006c6 <acquire> + 80206ace: 0001c517 auipc a0,0x1c + 80206ad2: 15250513 addi a0,a0,338 # 80222c20 <cons> + 80206ad6: ffffa097 auipc ra,0xffffa + 80206ada: bf0080e7 jalr -1040(ra) # 802006c6 <acquire> for(i = 0; i < n; i++){ - 80206ace: 07305063 blez s3,80206b2e <consolewrite+0x8a> - 80206ad2: 4901 li s2,0 + 80206ade: 07305063 blez s3,80206b3e <consolewrite+0x8a> + 80206ae2: 4901 li s2,0 char c; if(either_copyin(&c, user_src, src+i, 1) == -1) - 80206ad4: fbf40b13 addi s6,s0,-65 - 80206ad8: 5afd li s5,-1 - 80206ada: 4685 li a3,1 - 80206adc: 8626 mv a2,s1 - 80206ade: 85d2 mv a1,s4 - 80206ae0: 855a mv a0,s6 - 80206ae2: ffffc097 auipc ra,0xffffc - 80206ae6: a66080e7 jalr -1434(ra) # 80202548 <either_copyin> - 80206aea: 01550f63 beq a0,s5,80206b08 <consolewrite+0x64> + 80206ae4: fbf40b13 addi s6,s0,-65 + 80206ae8: 5afd li s5,-1 + 80206aea: 4685 li a3,1 + 80206aec: 8626 mv a2,s1 + 80206aee: 85d2 mv a1,s4 + 80206af0: 855a mv a0,s6 + 80206af2: ffffc097 auipc ra,0xffffc + 80206af6: a56080e7 jalr -1450(ra) # 80202548 <either_copyin> + 80206afa: 01550f63 beq a0,s5,80206b18 <consolewrite+0x64> SBI_CALL_1(SBI_CONSOLE_PUTCHAR, ch); - 80206aee: fbf44503 lbu a0,-65(s0) - 80206af2: 4581 li a1,0 - 80206af4: 4601 li a2,0 - 80206af6: 4681 li a3,0 - 80206af8: 4885 li a7,1 - 80206afa: 00000073 ecall + 80206afe: fbf44503 lbu a0,-65(s0) + 80206b02: 4581 li a1,0 + 80206b04: 4601 li a2,0 + 80206b06: 4681 li a3,0 + 80206b08: 4885 li a7,1 + 80206b0a: 00000073 ecall for(i = 0; i < n; i++){ - 80206afe: 2905 addiw s2,s2,1 - 80206b00: 0485 addi s1,s1,1 - 80206b02: fd299ce3 bne s3,s2,80206ada <consolewrite+0x36> - 80206b06: 894e mv s2,s3 + 80206b0e: 2905 addiw s2,s2,1 + 80206b10: 0485 addi s1,s1,1 + 80206b12: fd299ce3 bne s3,s2,80206aea <consolewrite+0x36> + 80206b16: 894e mv s2,s3 break; sbi_console_putchar(c); } release(&cons.lock); - 80206b08: 0001c517 auipc a0,0x1c - 80206b0c: 11850513 addi a0,a0,280 # 80222c20 <cons> - 80206b10: ffffa097 auipc ra,0xffffa - 80206b14: c0a080e7 jalr -1014(ra) # 8020071a <release> + 80206b18: 0001c517 auipc a0,0x1c + 80206b1c: 10850513 addi a0,a0,264 # 80222c20 <cons> + 80206b20: ffffa097 auipc ra,0xffffa + 80206b24: bfa080e7 jalr -1030(ra) # 8020071a <release> return i; } - 80206b18: 854a mv a0,s2 - 80206b1a: 60a6 ld ra,72(sp) - 80206b1c: 6406 ld s0,64(sp) - 80206b1e: 74e2 ld s1,56(sp) - 80206b20: 7942 ld s2,48(sp) - 80206b22: 79a2 ld s3,40(sp) - 80206b24: 7a02 ld s4,32(sp) - 80206b26: 6ae2 ld s5,24(sp) - 80206b28: 6b42 ld s6,16(sp) - 80206b2a: 6161 addi sp,sp,80 - 80206b2c: 8082 ret + 80206b28: 854a mv a0,s2 + 80206b2a: 60a6 ld ra,72(sp) + 80206b2c: 6406 ld s0,64(sp) + 80206b2e: 74e2 ld s1,56(sp) + 80206b30: 7942 ld s2,48(sp) + 80206b32: 79a2 ld s3,40(sp) + 80206b34: 7a02 ld s4,32(sp) + 80206b36: 6ae2 ld s5,24(sp) + 80206b38: 6b42 ld s6,16(sp) + 80206b3a: 6161 addi sp,sp,80 + 80206b3c: 8082 ret for(i = 0; i < n; i++){ - 80206b2e: 4901 li s2,0 - 80206b30: bfe1 j 80206b08 <consolewrite+0x64> + 80206b3e: 4901 li s2,0 + 80206b40: bfe1 j 80206b18 <consolewrite+0x64> -0000000080206b32 <consoleread>: +0000000080206b42 <consoleread>: // user_dist indicates whether dst is a user // or kernel address. // int consoleread(int user_dst, uint64 dst, int n) { - 80206b32: 7119 addi sp,sp,-128 - 80206b34: fc86 sd ra,120(sp) - 80206b36: f8a2 sd s0,112(sp) - 80206b38: f4a6 sd s1,104(sp) - 80206b3a: f0ca sd s2,96(sp) - 80206b3c: ecce sd s3,88(sp) - 80206b3e: e8d2 sd s4,80(sp) - 80206b40: e4d6 sd s5,72(sp) - 80206b42: e0da sd s6,64(sp) - 80206b44: fc5e sd s7,56(sp) - 80206b46: f862 sd s8,48(sp) - 80206b48: f466 sd s9,40(sp) - 80206b4a: f06a sd s10,32(sp) - 80206b4c: ec6e sd s11,24(sp) - 80206b4e: 0100 addi s0,sp,128 - 80206b50: 8aaa mv s5,a0 - 80206b52: 8a2e mv s4,a1 - 80206b54: 89b2 mv s3,a2 + 80206b42: 7119 addi sp,sp,-128 + 80206b44: fc86 sd ra,120(sp) + 80206b46: f8a2 sd s0,112(sp) + 80206b48: f4a6 sd s1,104(sp) + 80206b4a: f0ca sd s2,96(sp) + 80206b4c: ecce sd s3,88(sp) + 80206b4e: e8d2 sd s4,80(sp) + 80206b50: e4d6 sd s5,72(sp) + 80206b52: e0da sd s6,64(sp) + 80206b54: fc5e sd s7,56(sp) + 80206b56: f862 sd s8,48(sp) + 80206b58: f466 sd s9,40(sp) + 80206b5a: f06a sd s10,32(sp) + 80206b5c: ec6e sd s11,24(sp) + 80206b5e: 0100 addi s0,sp,128 + 80206b60: 8aaa mv s5,a0 + 80206b62: 8a2e mv s4,a1 + 80206b64: 89b2 mv s3,a2 uint target; int c; char cbuf; target = n; - 80206b56: 00060b1b sext.w s6,a2 + 80206b66: 00060b1b sext.w s6,a2 acquire(&cons.lock); - 80206b5a: 0001c517 auipc a0,0x1c - 80206b5e: 0c650513 addi a0,a0,198 # 80222c20 <cons> - 80206b62: ffffa097 auipc ra,0xffffa - 80206b66: b64080e7 jalr -1180(ra) # 802006c6 <acquire> + 80206b6a: 0001c517 auipc a0,0x1c + 80206b6e: 0b650513 addi a0,a0,182 # 80222c20 <cons> + 80206b72: ffffa097 auipc ra,0xffffa + 80206b76: b54080e7 jalr -1196(ra) # 802006c6 <acquire> while(n > 0){ // wait until interrupt handler has put some // input into cons.buffer. while(cons.r == cons.w){ - 80206b6a: 0001c497 auipc s1,0x1c - 80206b6e: 0b648493 addi s1,s1,182 # 80222c20 <cons> + 80206b7a: 0001c497 auipc s1,0x1c + 80206b7e: 0a648493 addi s1,s1,166 # 80222c20 <cons> if(myproc()->killed){ release(&cons.lock); return -1; } sleep(&cons.r, &cons.lock); - 80206b72: 0001c917 auipc s2,0x1c - 80206b76: 14690913 addi s2,s2,326 # 80222cb8 <cons+0x98> + 80206b82: 0001c917 auipc s2,0x1c + 80206b86: 13690913 addi s2,s2,310 # 80222cb8 <cons+0x98> } c = cons.buf[cons.r++ % INPUT_BUF]; if(c == C('D')){ // end-of-file - 80206b7a: 4c11 li s8,4 + 80206b8a: 4c11 li s8,4 break; } // copy the input byte to the user-space buffer. cbuf = c; if(either_copyout(user_dst, dst, &cbuf, 1) == -1) - 80206b7c: f8f40d13 addi s10,s0,-113 - 80206b80: 5cfd li s9,-1 + 80206b8c: f8f40d13 addi s10,s0,-113 + 80206b90: 5cfd li s9,-1 break; dst++; --n; if(c == '\n'){ - 80206b82: 4da9 li s11,10 + 80206b92: 4da9 li s11,10 while(n > 0){ - 80206b84: 07305763 blez s3,80206bf2 <consoleread+0xc0> + 80206b94: 07305763 blez s3,80206c02 <consoleread+0xc0> while(cons.r == cons.w){ - 80206b88: 0984a783 lw a5,152(s1) - 80206b8c: 09c4a703 lw a4,156(s1) - 80206b90: 02f71463 bne a4,a5,80206bb8 <consoleread+0x86> + 80206b98: 0984a783 lw a5,152(s1) + 80206b9c: 09c4a703 lw a4,156(s1) + 80206ba0: 02f71463 bne a4,a5,80206bc8 <consoleread+0x86> if(myproc()->killed){ - 80206b94: ffffb097 auipc ra,0xffffb - 80206b98: ea8080e7 jalr -344(ra) # 80201a3c <myproc> - 80206b9c: 591c lw a5,48(a0) - 80206b9e: e7ad bnez a5,80206c08 <consoleread+0xd6> - sleep(&cons.r, &cons.lock); - 80206ba0: 85a6 mv a1,s1 - 80206ba2: 854a mv a0,s2 80206ba4: ffffb097 auipc ra,0xffffb - 80206ba8: 718080e7 jalr 1816(ra) # 802022bc <sleep> + 80206ba8: e98080e7 jalr -360(ra) # 80201a3c <myproc> + 80206bac: 591c lw a5,48(a0) + 80206bae: e7ad bnez a5,80206c18 <consoleread+0xd6> + sleep(&cons.r, &cons.lock); + 80206bb0: 85a6 mv a1,s1 + 80206bb2: 854a mv a0,s2 + 80206bb4: ffffb097 auipc ra,0xffffb + 80206bb8: 708080e7 jalr 1800(ra) # 802022bc <sleep> while(cons.r == cons.w){ - 80206bac: 0984a783 lw a5,152(s1) - 80206bb0: 09c4a703 lw a4,156(s1) - 80206bb4: fef700e3 beq a4,a5,80206b94 <consoleread+0x62> + 80206bbc: 0984a783 lw a5,152(s1) + 80206bc0: 09c4a703 lw a4,156(s1) + 80206bc4: fef700e3 beq a4,a5,80206ba4 <consoleread+0x62> c = cons.buf[cons.r++ % INPUT_BUF]; - 80206bb8: 0017871b addiw a4,a5,1 - 80206bbc: 08e4ac23 sw a4,152(s1) - 80206bc0: 07f7f713 andi a4,a5,127 - 80206bc4: 9726 add a4,a4,s1 - 80206bc6: 01874703 lbu a4,24(a4) - 80206bca: 00070b9b sext.w s7,a4 + 80206bc8: 0017871b addiw a4,a5,1 + 80206bcc: 08e4ac23 sw a4,152(s1) + 80206bd0: 07f7f713 andi a4,a5,127 + 80206bd4: 9726 add a4,a4,s1 + 80206bd6: 01874703 lbu a4,24(a4) + 80206bda: 00070b9b sext.w s7,a4 if(c == C('D')){ // end-of-file - 80206bce: 078b8563 beq s7,s8,80206c38 <consoleread+0x106> + 80206bde: 078b8563 beq s7,s8,80206c48 <consoleread+0x106> cbuf = c; - 80206bd2: f8e407a3 sb a4,-113(s0) + 80206be2: f8e407a3 sb a4,-113(s0) if(either_copyout(user_dst, dst, &cbuf, 1) == -1) - 80206bd6: 4685 li a3,1 - 80206bd8: 866a mv a2,s10 - 80206bda: 85d2 mv a1,s4 - 80206bdc: 8556 mv a0,s5 - 80206bde: ffffc097 auipc ra,0xffffc - 80206be2: 934080e7 jalr -1740(ra) # 80202512 <either_copyout> - 80206be6: 01950663 beq a0,s9,80206bf2 <consoleread+0xc0> + 80206be6: 4685 li a3,1 + 80206be8: 866a mv a2,s10 + 80206bea: 85d2 mv a1,s4 + 80206bec: 8556 mv a0,s5 + 80206bee: ffffc097 auipc ra,0xffffc + 80206bf2: 924080e7 jalr -1756(ra) # 80202512 <either_copyout> + 80206bf6: 01950663 beq a0,s9,80206c02 <consoleread+0xc0> dst++; - 80206bea: 0a05 addi s4,s4,1 + 80206bfa: 0a05 addi s4,s4,1 --n; - 80206bec: 39fd addiw s3,s3,-1 + 80206bfc: 39fd addiw s3,s3,-1 if(c == '\n'){ - 80206bee: f9bb9be3 bne s7,s11,80206b84 <consoleread+0x52> + 80206bfe: f9bb9be3 bne s7,s11,80206b94 <consoleread+0x52> // a whole line has arrived, return to // the user-level read(). break; } } release(&cons.lock); - 80206bf2: 0001c517 auipc a0,0x1c - 80206bf6: 02e50513 addi a0,a0,46 # 80222c20 <cons> - 80206bfa: ffffa097 auipc ra,0xffffa - 80206bfe: b20080e7 jalr -1248(ra) # 8020071a <release> + 80206c02: 0001c517 auipc a0,0x1c + 80206c06: 01e50513 addi a0,a0,30 # 80222c20 <cons> + 80206c0a: ffffa097 auipc ra,0xffffa + 80206c0e: b10080e7 jalr -1264(ra) # 8020071a <release> return target - n; - 80206c02: 413b053b subw a0,s6,s3 - 80206c06: a811 j 80206c1a <consoleread+0xe8> + 80206c12: 413b053b subw a0,s6,s3 + 80206c16: a811 j 80206c2a <consoleread+0xe8> release(&cons.lock); - 80206c08: 0001c517 auipc a0,0x1c - 80206c0c: 01850513 addi a0,a0,24 # 80222c20 <cons> - 80206c10: ffffa097 auipc ra,0xffffa - 80206c14: b0a080e7 jalr -1270(ra) # 8020071a <release> + 80206c18: 0001c517 auipc a0,0x1c + 80206c1c: 00850513 addi a0,a0,8 # 80222c20 <cons> + 80206c20: ffffa097 auipc ra,0xffffa + 80206c24: afa080e7 jalr -1286(ra) # 8020071a <release> return -1; - 80206c18: 557d li a0,-1 -} - 80206c1a: 70e6 ld ra,120(sp) - 80206c1c: 7446 ld s0,112(sp) - 80206c1e: 74a6 ld s1,104(sp) - 80206c20: 7906 ld s2,96(sp) - 80206c22: 69e6 ld s3,88(sp) - 80206c24: 6a46 ld s4,80(sp) - 80206c26: 6aa6 ld s5,72(sp) - 80206c28: 6b06 ld s6,64(sp) - 80206c2a: 7be2 ld s7,56(sp) - 80206c2c: 7c42 ld s8,48(sp) - 80206c2e: 7ca2 ld s9,40(sp) - 80206c30: 7d02 ld s10,32(sp) - 80206c32: 6de2 ld s11,24(sp) - 80206c34: 6109 addi sp,sp,128 - 80206c36: 8082 ret + 80206c28: 557d li a0,-1 +} + 80206c2a: 70e6 ld ra,120(sp) + 80206c2c: 7446 ld s0,112(sp) + 80206c2e: 74a6 ld s1,104(sp) + 80206c30: 7906 ld s2,96(sp) + 80206c32: 69e6 ld s3,88(sp) + 80206c34: 6a46 ld s4,80(sp) + 80206c36: 6aa6 ld s5,72(sp) + 80206c38: 6b06 ld s6,64(sp) + 80206c3a: 7be2 ld s7,56(sp) + 80206c3c: 7c42 ld s8,48(sp) + 80206c3e: 7ca2 ld s9,40(sp) + 80206c40: 7d02 ld s10,32(sp) + 80206c42: 6de2 ld s11,24(sp) + 80206c44: 6109 addi sp,sp,128 + 80206c46: 8082 ret if(n < target){ - 80206c38: 0009871b sext.w a4,s3 - 80206c3c: fb677be3 bgeu a4,s6,80206bf2 <consoleread+0xc0> + 80206c48: 0009871b sext.w a4,s3 + 80206c4c: fb677be3 bgeu a4,s6,80206c02 <consoleread+0xc0> cons.r--; - 80206c40: 0001c717 auipc a4,0x1c - 80206c44: 06f72c23 sw a5,120(a4) # 80222cb8 <cons+0x98> - 80206c48: b76d j 80206bf2 <consoleread+0xc0> + 80206c50: 0001c717 auipc a4,0x1c + 80206c54: 06f72423 sw a5,104(a4) # 80222cb8 <cons+0x98> + 80206c58: b76d j 80206c02 <consoleread+0xc0> -0000000080206c4a <consputc>: +0000000080206c5a <consputc>: void consputc(int c) { - 80206c4a: 1141 addi sp,sp,-16 - 80206c4c: e422 sd s0,8(sp) - 80206c4e: 0800 addi s0,sp,16 + 80206c5a: 1141 addi sp,sp,-16 + 80206c5c: e422 sd s0,8(sp) + 80206c5e: 0800 addi s0,sp,16 if(c == BACKSPACE){ - 80206c50: 10000793 li a5,256 - 80206c54: 00f50b63 beq a0,a5,80206c6a <consputc+0x20> - 80206c58: 4581 li a1,0 - 80206c5a: 4601 li a2,0 - 80206c5c: 4681 li a3,0 - 80206c5e: 4885 li a7,1 - 80206c60: 00000073 ecall -} - 80206c64: 6422 ld s0,8(sp) - 80206c66: 0141 addi sp,sp,16 - 80206c68: 8082 ret - 80206c6a: 4521 li a0,8 - 80206c6c: 4581 li a1,0 - 80206c6e: 4601 li a2,0 - 80206c70: 4681 li a3,0 - 80206c72: 4885 li a7,1 - 80206c74: 00000073 ecall - 80206c78: 02000513 li a0,32 - 80206c7c: 00000073 ecall - 80206c80: 4521 li a0,8 - 80206c82: 00000073 ecall -} - 80206c86: bff9 j 80206c64 <consputc+0x1a> - -0000000080206c88 <consoleintr>: + 80206c60: 10000793 li a5,256 + 80206c64: 00f50b63 beq a0,a5,80206c7a <consputc+0x20> + 80206c68: 4581 li a1,0 + 80206c6a: 4601 li a2,0 + 80206c6c: 4681 li a3,0 + 80206c6e: 4885 li a7,1 + 80206c70: 00000073 ecall +} + 80206c74: 6422 ld s0,8(sp) + 80206c76: 0141 addi sp,sp,16 + 80206c78: 8082 ret + 80206c7a: 4521 li a0,8 + 80206c7c: 4581 li a1,0 + 80206c7e: 4601 li a2,0 + 80206c80: 4681 li a3,0 + 80206c82: 4885 li a7,1 + 80206c84: 00000073 ecall + 80206c88: 02000513 li a0,32 + 80206c8c: 00000073 ecall + 80206c90: 4521 li a0,8 + 80206c92: 00000073 ecall +} + 80206c96: bff9 j 80206c74 <consputc+0x1a> + +0000000080206c98 <consoleintr>: // do erase/kill processing, append to cons.buf, // wake up consoleread() if a whole line has arrived. // void consoleintr(int c) { - 80206c88: 1101 addi sp,sp,-32 - 80206c8a: ec06 sd ra,24(sp) - 80206c8c: e822 sd s0,16(sp) - 80206c8e: e426 sd s1,8(sp) - 80206c90: e04a sd s2,0(sp) - 80206c92: 1000 addi s0,sp,32 - 80206c94: 84aa mv s1,a0 + 80206c98: 1101 addi sp,sp,-32 + 80206c9a: ec06 sd ra,24(sp) + 80206c9c: e822 sd s0,16(sp) + 80206c9e: e426 sd s1,8(sp) + 80206ca0: e04a sd s2,0(sp) + 80206ca2: 1000 addi s0,sp,32 + 80206ca4: 84aa mv s1,a0 acquire(&cons.lock); - 80206c96: 0001c517 auipc a0,0x1c - 80206c9a: f8a50513 addi a0,a0,-118 # 80222c20 <cons> - 80206c9e: ffffa097 auipc ra,0xffffa - 80206ca2: a28080e7 jalr -1496(ra) # 802006c6 <acquire> + 80206ca6: 0001c517 auipc a0,0x1c + 80206caa: f7a50513 addi a0,a0,-134 # 80222c20 <cons> + 80206cae: ffffa097 auipc ra,0xffffa + 80206cb2: a18080e7 jalr -1512(ra) # 802006c6 <acquire> switch(c){ - 80206ca6: 47d5 li a5,21 - 80206ca8: 0af48663 beq s1,a5,80206d54 <consoleintr+0xcc> - 80206cac: 0297ca63 blt a5,s1,80206ce0 <consoleintr+0x58> - 80206cb0: 47a1 li a5,8 - 80206cb2: 0ef48763 beq s1,a5,80206da0 <consoleintr+0x118> - 80206cb6: 47c1 li a5,16 - 80206cb8: 10f49a63 bne s1,a5,80206dcc <consoleintr+0x144> + 80206cb6: 47d5 li a5,21 + 80206cb8: 0af48663 beq s1,a5,80206d64 <consoleintr+0xcc> + 80206cbc: 0297ca63 blt a5,s1,80206cf0 <consoleintr+0x58> + 80206cc0: 47a1 li a5,8 + 80206cc2: 0ef48763 beq s1,a5,80206db0 <consoleintr+0x118> + 80206cc6: 47c1 li a5,16 + 80206cc8: 10f49a63 bne s1,a5,80206ddc <consoleintr+0x144> case C('P'): // Print process list. procdump(); - 80206cbc: ffffc097 auipc ra,0xffffc - 80206cc0: 8c0080e7 jalr -1856(ra) # 8020257c <procdump> + 80206ccc: ffffc097 auipc ra,0xffffc + 80206cd0: 8b0080e7 jalr -1872(ra) # 8020257c <procdump> } } break; } release(&cons.lock); - 80206cc4: 0001c517 auipc a0,0x1c - 80206cc8: f5c50513 addi a0,a0,-164 # 80222c20 <cons> - 80206ccc: ffffa097 auipc ra,0xffffa - 80206cd0: a4e080e7 jalr -1458(ra) # 8020071a <release> -} - 80206cd4: 60e2 ld ra,24(sp) - 80206cd6: 6442 ld s0,16(sp) - 80206cd8: 64a2 ld s1,8(sp) - 80206cda: 6902 ld s2,0(sp) - 80206cdc: 6105 addi sp,sp,32 - 80206cde: 8082 ret + 80206cd4: 0001c517 auipc a0,0x1c + 80206cd8: f4c50513 addi a0,a0,-180 # 80222c20 <cons> + 80206cdc: ffffa097 auipc ra,0xffffa + 80206ce0: a3e080e7 jalr -1474(ra) # 8020071a <release> +} + 80206ce4: 60e2 ld ra,24(sp) + 80206ce6: 6442 ld s0,16(sp) + 80206ce8: 64a2 ld s1,8(sp) + 80206cea: 6902 ld s2,0(sp) + 80206cec: 6105 addi sp,sp,32 + 80206cee: 8082 ret switch(c){ - 80206ce0: 07f00793 li a5,127 - 80206ce4: 0af48e63 beq s1,a5,80206da0 <consoleintr+0x118> + 80206cf0: 07f00793 li a5,127 + 80206cf4: 0af48e63 beq s1,a5,80206db0 <consoleintr+0x118> if(c != 0 && cons.e-cons.r < INPUT_BUF){ - 80206ce8: 0001c717 auipc a4,0x1c - 80206cec: f3870713 addi a4,a4,-200 # 80222c20 <cons> - 80206cf0: 0a072783 lw a5,160(a4) - 80206cf4: 09872703 lw a4,152(a4) - 80206cf8: 9f99 subw a5,a5,a4 - 80206cfa: 07f00713 li a4,127 - 80206cfe: fcf763e3 bltu a4,a5,80206cc4 <consoleintr+0x3c> + 80206cf8: 0001c717 auipc a4,0x1c + 80206cfc: f2870713 addi a4,a4,-216 # 80222c20 <cons> + 80206d00: 0a072783 lw a5,160(a4) + 80206d04: 09872703 lw a4,152(a4) + 80206d08: 9f99 subw a5,a5,a4 + 80206d0a: 07f00713 li a4,127 + 80206d0e: fcf763e3 bltu a4,a5,80206cd4 <consoleintr+0x3c> c = (c == '\r') ? '\n' : c; - 80206d02: 47b5 li a5,13 - 80206d04: 0cf48763 beq s1,a5,80206dd2 <consoleintr+0x14a> + 80206d12: 47b5 li a5,13 + 80206d14: 0cf48763 beq s1,a5,80206de2 <consoleintr+0x14a> consputc(c); - 80206d08: 8526 mv a0,s1 - 80206d0a: 00000097 auipc ra,0x0 - 80206d0e: f40080e7 jalr -192(ra) # 80206c4a <consputc> + 80206d18: 8526 mv a0,s1 + 80206d1a: 00000097 auipc ra,0x0 + 80206d1e: f40080e7 jalr -192(ra) # 80206c5a <consputc> cons.buf[cons.e++ % INPUT_BUF] = c; - 80206d12: 0001c797 auipc a5,0x1c - 80206d16: f0e78793 addi a5,a5,-242 # 80222c20 <cons> - 80206d1a: 0a07a703 lw a4,160(a5) - 80206d1e: 0017069b addiw a3,a4,1 - 80206d22: 0006861b sext.w a2,a3 - 80206d26: 0ad7a023 sw a3,160(a5) - 80206d2a: 07f77713 andi a4,a4,127 - 80206d2e: 97ba add a5,a5,a4 - 80206d30: 00978c23 sb s1,24(a5) + 80206d22: 0001c797 auipc a5,0x1c + 80206d26: efe78793 addi a5,a5,-258 # 80222c20 <cons> + 80206d2a: 0a07a703 lw a4,160(a5) + 80206d2e: 0017069b addiw a3,a4,1 + 80206d32: 0006861b sext.w a2,a3 + 80206d36: 0ad7a023 sw a3,160(a5) + 80206d3a: 07f77713 andi a4,a4,127 + 80206d3e: 97ba add a5,a5,a4 + 80206d40: 00978c23 sb s1,24(a5) if(c == '\n' || c == C('D') || cons.e == cons.r+INPUT_BUF){ - 80206d34: 47a9 li a5,10 - 80206d36: 0cf48563 beq s1,a5,80206e00 <consoleintr+0x178> - 80206d3a: 4791 li a5,4 - 80206d3c: 0cf48263 beq s1,a5,80206e00 <consoleintr+0x178> - 80206d40: 0001c797 auipc a5,0x1c - 80206d44: f787a783 lw a5,-136(a5) # 80222cb8 <cons+0x98> - 80206d48: 0807879b addiw a5,a5,128 - 80206d4c: f6f61ce3 bne a2,a5,80206cc4 <consoleintr+0x3c> + 80206d44: 47a9 li a5,10 + 80206d46: 0cf48563 beq s1,a5,80206e10 <consoleintr+0x178> + 80206d4a: 4791 li a5,4 + 80206d4c: 0cf48263 beq s1,a5,80206e10 <consoleintr+0x178> + 80206d50: 0001c797 auipc a5,0x1c + 80206d54: f687a783 lw a5,-152(a5) # 80222cb8 <cons+0x98> + 80206d58: 0807879b addiw a5,a5,128 + 80206d5c: f6f61ce3 bne a2,a5,80206cd4 <consoleintr+0x3c> cons.buf[cons.e++ % INPUT_BUF] = c; - 80206d50: 863e mv a2,a5 - 80206d52: a07d j 80206e00 <consoleintr+0x178> + 80206d60: 863e mv a2,a5 + 80206d62: a07d j 80206e10 <consoleintr+0x178> while(cons.e != cons.w && - 80206d54: 0001c717 auipc a4,0x1c - 80206d58: ecc70713 addi a4,a4,-308 # 80222c20 <cons> - 80206d5c: 0a072783 lw a5,160(a4) - 80206d60: 09c72703 lw a4,156(a4) + 80206d64: 0001c717 auipc a4,0x1c + 80206d68: ebc70713 addi a4,a4,-324 # 80222c20 <cons> + 80206d6c: 0a072783 lw a5,160(a4) + 80206d70: 09c72703 lw a4,156(a4) cons.buf[(cons.e-1) % INPUT_BUF] != '\n'){ - 80206d64: 0001c497 auipc s1,0x1c - 80206d68: ebc48493 addi s1,s1,-324 # 80222c20 <cons> + 80206d74: 0001c497 auipc s1,0x1c + 80206d78: eac48493 addi s1,s1,-340 # 80222c20 <cons> while(cons.e != cons.w && - 80206d6c: 4929 li s2,10 - 80206d6e: f4f70be3 beq a4,a5,80206cc4 <consoleintr+0x3c> + 80206d7c: 4929 li s2,10 + 80206d7e: f4f70be3 beq a4,a5,80206cd4 <consoleintr+0x3c> cons.buf[(cons.e-1) % INPUT_BUF] != '\n'){ - 80206d72: 37fd addiw a5,a5,-1 - 80206d74: 07f7f713 andi a4,a5,127 - 80206d78: 9726 add a4,a4,s1 + 80206d82: 37fd addiw a5,a5,-1 + 80206d84: 07f7f713 andi a4,a5,127 + 80206d88: 9726 add a4,a4,s1 while(cons.e != cons.w && - 80206d7a: 01874703 lbu a4,24(a4) - 80206d7e: f52703e3 beq a4,s2,80206cc4 <consoleintr+0x3c> + 80206d8a: 01874703 lbu a4,24(a4) + 80206d8e: f52703e3 beq a4,s2,80206cd4 <consoleintr+0x3c> cons.e--; - 80206d82: 0af4a023 sw a5,160(s1) + 80206d92: 0af4a023 sw a5,160(s1) consputc(BACKSPACE); - 80206d86: 10000513 li a0,256 - 80206d8a: 00000097 auipc ra,0x0 - 80206d8e: ec0080e7 jalr -320(ra) # 80206c4a <consputc> + 80206d96: 10000513 li a0,256 + 80206d9a: 00000097 auipc ra,0x0 + 80206d9e: ec0080e7 jalr -320(ra) # 80206c5a <consputc> while(cons.e != cons.w && - 80206d92: 0a04a783 lw a5,160(s1) - 80206d96: 09c4a703 lw a4,156(s1) - 80206d9a: fcf71ce3 bne a4,a5,80206d72 <consoleintr+0xea> - 80206d9e: b71d j 80206cc4 <consoleintr+0x3c> + 80206da2: 0a04a783 lw a5,160(s1) + 80206da6: 09c4a703 lw a4,156(s1) + 80206daa: fcf71ce3 bne a4,a5,80206d82 <consoleintr+0xea> + 80206dae: b71d j 80206cd4 <consoleintr+0x3c> if(cons.e != cons.w){ - 80206da0: 0001c717 auipc a4,0x1c - 80206da4: e8070713 addi a4,a4,-384 # 80222c20 <cons> - 80206da8: 0a072783 lw a5,160(a4) - 80206dac: 09c72703 lw a4,156(a4) - 80206db0: f0f70ae3 beq a4,a5,80206cc4 <consoleintr+0x3c> + 80206db0: 0001c717 auipc a4,0x1c + 80206db4: e7070713 addi a4,a4,-400 # 80222c20 <cons> + 80206db8: 0a072783 lw a5,160(a4) + 80206dbc: 09c72703 lw a4,156(a4) + 80206dc0: f0f70ae3 beq a4,a5,80206cd4 <consoleintr+0x3c> cons.e--; - 80206db4: 37fd addiw a5,a5,-1 - 80206db6: 0001c717 auipc a4,0x1c - 80206dba: f0f72523 sw a5,-246(a4) # 80222cc0 <cons+0xa0> + 80206dc4: 37fd addiw a5,a5,-1 + 80206dc6: 0001c717 auipc a4,0x1c + 80206dca: eef72d23 sw a5,-262(a4) # 80222cc0 <cons+0xa0> consputc(BACKSPACE); - 80206dbe: 10000513 li a0,256 - 80206dc2: 00000097 auipc ra,0x0 - 80206dc6: e88080e7 jalr -376(ra) # 80206c4a <consputc> - 80206dca: bded j 80206cc4 <consoleintr+0x3c> + 80206dce: 10000513 li a0,256 + 80206dd2: 00000097 auipc ra,0x0 + 80206dd6: e88080e7 jalr -376(ra) # 80206c5a <consputc> + 80206dda: bded j 80206cd4 <consoleintr+0x3c> if(c != 0 && cons.e-cons.r < INPUT_BUF){ - 80206dcc: ee048ce3 beqz s1,80206cc4 <consoleintr+0x3c> - 80206dd0: bf21 j 80206ce8 <consoleintr+0x60> + 80206ddc: ee048ce3 beqz s1,80206cd4 <consoleintr+0x3c> + 80206de0: bf21 j 80206cf8 <consoleintr+0x60> consputc(c); - 80206dd2: 4529 li a0,10 - 80206dd4: 00000097 auipc ra,0x0 - 80206dd8: e76080e7 jalr -394(ra) # 80206c4a <consputc> + 80206de2: 4529 li a0,10 + 80206de4: 00000097 auipc ra,0x0 + 80206de8: e76080e7 jalr -394(ra) # 80206c5a <consputc> cons.buf[cons.e++ % INPUT_BUF] = c; - 80206ddc: 0001c797 auipc a5,0x1c - 80206de0: e4478793 addi a5,a5,-444 # 80222c20 <cons> - 80206de4: 0a07a703 lw a4,160(a5) - 80206de8: 0017069b addiw a3,a4,1 - 80206dec: 0006861b sext.w a2,a3 - 80206df0: 0ad7a023 sw a3,160(a5) - 80206df4: 07f77713 andi a4,a4,127 - 80206df8: 97ba add a5,a5,a4 - 80206dfa: 4729 li a4,10 - 80206dfc: 00e78c23 sb a4,24(a5) + 80206dec: 0001c797 auipc a5,0x1c + 80206df0: e3478793 addi a5,a5,-460 # 80222c20 <cons> + 80206df4: 0a07a703 lw a4,160(a5) + 80206df8: 0017069b addiw a3,a4,1 + 80206dfc: 0006861b sext.w a2,a3 + 80206e00: 0ad7a023 sw a3,160(a5) + 80206e04: 07f77713 andi a4,a4,127 + 80206e08: 97ba add a5,a5,a4 + 80206e0a: 4729 li a4,10 + 80206e0c: 00e78c23 sb a4,24(a5) cons.w = cons.e; - 80206e00: 0001c797 auipc a5,0x1c - 80206e04: eac7ae23 sw a2,-324(a5) # 80222cbc <cons+0x9c> + 80206e10: 0001c797 auipc a5,0x1c + 80206e14: eac7a623 sw a2,-340(a5) # 80222cbc <cons+0x9c> wakeup(&cons.r); - 80206e08: 0001c517 auipc a0,0x1c - 80206e0c: eb050513 addi a0,a0,-336 # 80222cb8 <cons+0x98> - 80206e10: ffffb097 auipc ra,0xffffb - 80206e14: 628080e7 jalr 1576(ra) # 80202438 <wakeup> - 80206e18: b575 j 80206cc4 <consoleintr+0x3c> + 80206e18: 0001c517 auipc a0,0x1c + 80206e1c: ea050513 addi a0,a0,-352 # 80222cb8 <cons+0x98> + 80206e20: ffffb097 auipc ra,0xffffb + 80206e24: 618080e7 jalr 1560(ra) # 80202438 <wakeup> + 80206e28: b575 j 80206cd4 <consoleintr+0x3c> -0000000080206e1a <consoleinit>: +0000000080206e2a <consoleinit>: void consoleinit(void) { - 80206e1a: 1101 addi sp,sp,-32 - 80206e1c: ec06 sd ra,24(sp) - 80206e1e: e822 sd s0,16(sp) - 80206e20: e426 sd s1,8(sp) - 80206e22: 1000 addi s0,sp,32 + 80206e2a: 1101 addi sp,sp,-32 + 80206e2c: ec06 sd ra,24(sp) + 80206e2e: e822 sd s0,16(sp) + 80206e30: e426 sd s1,8(sp) + 80206e32: 1000 addi s0,sp,32 initlock(&cons.lock, "cons"); - 80206e24: 0001c497 auipc s1,0x1c - 80206e28: dfc48493 addi s1,s1,-516 # 80222c20 <cons> - 80206e2c: 00003597 auipc a1,0x3 - 80206e30: ed458593 addi a1,a1,-300 # 80209d00 <digits+0x980> - 80206e34: 8526 mv a0,s1 - 80206e36: ffffa097 auipc ra,0xffffa - 80206e3a: 84c080e7 jalr -1972(ra) # 80200682 <initlock> + 80206e34: 0001c497 auipc s1,0x1c + 80206e38: dec48493 addi s1,s1,-532 # 80222c20 <cons> + 80206e3c: 00003597 auipc a1,0x3 + 80206e40: ecc58593 addi a1,a1,-308 # 80209d08 <digits+0x988> + 80206e44: 8526 mv a0,s1 + 80206e46: ffffa097 auipc ra,0xffffa + 80206e4a: 83c080e7 jalr -1988(ra) # 80200682 <initlock> cons.e = cons.w = cons.r = 0; - 80206e3e: 0804ac23 sw zero,152(s1) - 80206e42: 0804ae23 sw zero,156(s1) - 80206e46: 0a04a023 sw zero,160(s1) + 80206e4e: 0804ac23 sw zero,152(s1) + 80206e52: 0804ae23 sw zero,156(s1) + 80206e56: 0a04a023 sw zero,160(s1) // connect read and write system calls // to consoleread and consolewrite. devsw[CONSOLE].read = consoleread; - 80206e4a: 00005797 auipc a5,0x5 - 80206e4e: ace7b783 ld a5,-1330(a5) # 8020b918 <_GLOBAL_OFFSET_TABLE_+0x58> - 80206e52: 00000717 auipc a4,0x0 - 80206e56: ce070713 addi a4,a4,-800 # 80206b32 <consoleread> - 80206e5a: eb98 sd a4,16(a5) + 80206e5a: 00005797 auipc a5,0x5 + 80206e5e: ae67b783 ld a5,-1306(a5) # 8020b940 <_GLOBAL_OFFSET_TABLE_+0x58> + 80206e62: 00000717 auipc a4,0x0 + 80206e66: ce070713 addi a4,a4,-800 # 80206b42 <consoleread> + 80206e6a: eb98 sd a4,16(a5) devsw[CONSOLE].write = consolewrite; - 80206e5c: 00000717 auipc a4,0x0 - 80206e60: c4870713 addi a4,a4,-952 # 80206aa4 <consolewrite> - 80206e64: ef98 sd a4,24(a5) + 80206e6c: 00000717 auipc a4,0x0 + 80206e70: c4870713 addi a4,a4,-952 # 80206ab4 <consolewrite> + 80206e74: ef98 sd a4,24(a5) } - 80206e66: 60e2 ld ra,24(sp) - 80206e68: 6442 ld s0,16(sp) - 80206e6a: 64a2 ld s1,8(sp) - 80206e6c: 6105 addi sp,sp,32 - 80206e6e: 8082 ret + 80206e76: 60e2 ld ra,24(sp) + 80206e78: 6442 ld s0,16(sp) + 80206e7a: 64a2 ld s1,8(sp) + 80206e7c: 6105 addi sp,sp,32 + 80206e7e: 8082 ret -0000000080206e70 <sys_shutdown>: +0000000080206e80 <sys_shutdown>: #include "include/types.h" #include "include/sbi.h" uint64 sys_shutdown(void) { - 80206e70: 1141 addi sp,sp,-16 - 80206e72: e422 sd s0,8(sp) - 80206e74: 0800 addi s0,sp,16 + 80206e80: 1141 addi sp,sp,-16 + 80206e82: e422 sd s0,8(sp) + 80206e84: 0800 addi s0,sp,16 SBI_CALL_0(SBI_SHUTDOWN); - 80206e76: 4501 li a0,0 - 80206e78: 4581 li a1,0 - 80206e7a: 4601 li a2,0 - 80206e7c: 4681 li a3,0 - 80206e7e: 48a1 li a7,8 - 80206e80: 00000073 ecall + 80206e86: 4501 li a0,0 + 80206e88: 4581 li a1,0 + 80206e8a: 4601 li a2,0 + 80206e8c: 4681 li a3,0 + 80206e8e: 48a1 li a7,8 + 80206e90: 00000073 ecall sbi_shutdown(); return 0; - 80206e84: 4501 li a0,0 - 80206e86: 6422 ld s0,8(sp) - 80206e88: 0141 addi sp,sp,16 - 80206e8a: 8082 ret + 80206e94: 4501 li a0,0 + 80206e96: 6422 ld s0,8(sp) + 80206e98: 0141 addi sp,sp,16 + 80206e9a: 8082 ret + +0000000080206e9c <sys_times>: +}; + +// 系统调用 sys_times 实现 +uint64 +sys_times(void) +{ + 80206e9c: 715d addi sp,sp,-80 + 80206e9e: e486 sd ra,72(sp) + 80206ea0: e0a2 sd s0,64(sp) + 80206ea2: fc26 sd s1,56(sp) + 80206ea4: 0880 addi s0,sp,80 + uint64 tms_addr; // 用户空间 tms ç»“æž„ä½“çš„åœ°å€ + struct tms kernel_tms; + + // 1. ä»Žç³»ç»Ÿè°ƒç”¨å‚æ•°ä¸èŽ·å–用户空间 tms ç»“æž„ä½“åœ°å€ + if (argaddr(0, &tms_addr) < 0) { + 80206ea6: fd840593 addi a1,s0,-40 + 80206eaa: 4501 li a0,0 + 80206eac: ffffc097 auipc ra,0xffffc + 80206eb0: 024080e7 jalr 36(ra) # 80202ed0 <argaddr> + return -1; // 傿•°é”™è¯¯ + 80206eb4: 57fd li a5,-1 + if (argaddr(0, &tms_addr) < 0) { + 80206eb6: 04054163 bltz a0,80206ef8 <sys_times+0x5c> + } + + // 2. 获å–当å‰è¿›ç¨‹çš„æ—¶é—´ä¿¡æ¯ + struct proc *p = myproc(); + 80206eba: ffffb097 auipc ra,0xffffb + 80206ebe: b82080e7 jalr -1150(ra) # 80201a3c <myproc> + 80206ec2: 84aa mv s1,a0 + if (p == 0) { + 80206ec4: cd29 beqz a0,80206f1e <sys_times+0x82> + return -1; // 当å‰è¿›ç¨‹æ— 效 + } + + // å¡«å……å†…æ ¸ä¸çš„ tms 结构体 + kernel_tms.utime = 0; // 用户时间 + 80206ec6: fa043c23 sd zero,-72(s0) + kernel_tms.stime = sys_uptime(); // 系统时间 + 80206eca: ffffc097 auipc ra,0xffffc + 80206ece: 402080e7 jalr 1026(ra) # 802032cc <sys_uptime> + 80206ed2: fca43023 sd a0,-64(s0) + kernel_tms.cutime = 0; // å进程用户时间 + 80206ed6: fc043423 sd zero,-56(s0) + kernel_tms.cstime = sys_uptime(); // å进程系统时间 + 80206eda: ffffc097 auipc ra,0xffffc + 80206ede: 3f2080e7 jalr 1010(ra) # 802032cc <sys_uptime> + 80206ee2: fca43823 sd a0,-48(s0) + + // 3. 如果用户æä¾›äº† tms 结构体地å€ï¼Œå°†æ•°æ®å¤åˆ¶åˆ°ç”¨æˆ·ç©ºé—´ + if (tms_addr != 0) { + 80206ee6: fd843583 ld a1,-40(s0) + 80206eea: ed89 bnez a1,80206f04 <sys_times+0x68> + return -1; // å¤åˆ¶å¤±è´¥ + } + } -0000000080206e8c <free_desc>: + // 4. 返回系统å¯åЍ以æ¥çš„æ€»æ»´ç”数(å‡è®¾ ticks 是全局å˜é‡ï¼‰ + return ticks; + 80206eec: 00005797 auipc a5,0x5 + 80206ef0: a3c7b783 ld a5,-1476(a5) # 8020b928 <_GLOBAL_OFFSET_TABLE_+0x40> + 80206ef4: 0007e783 lwu a5,0(a5) + 80206ef8: 853e mv a0,a5 + 80206efa: 60a6 ld ra,72(sp) + 80206efc: 6406 ld s0,64(sp) + 80206efe: 74e2 ld s1,56(sp) + 80206f00: 6161 addi sp,sp,80 + 80206f02: 8082 ret + if (copyout(p->pagetable, tms_addr, (char *)&kernel_tms, sizeof(kernel_tms)) < 0) { + 80206f04: 02000693 li a3,32 + 80206f08: fb840613 addi a2,s0,-72 + 80206f0c: 68a8 ld a0,80(s1) + 80206f0e: ffffa097 auipc ra,0xffffa + 80206f12: 3d8080e7 jalr 984(ra) # 802012e6 <copyout> + 80206f16: fc055be3 bgez a0,80206eec <sys_times+0x50> + return -1; // å¤åˆ¶å¤±è´¥ + 80206f1a: 57fd li a5,-1 + 80206f1c: bff1 j 80206ef8 <sys_times+0x5c> + return -1; // 当å‰è¿›ç¨‹æ— 效 + 80206f1e: 57fd li a5,-1 + 80206f20: bfe1 j 80206ef8 <sys_times+0x5c> + +0000000080206f22 <free_desc>: } // mark a descriptor as free. static void free_desc(int i) { - 80206e8c: 1141 addi sp,sp,-16 - 80206e8e: e406 sd ra,8(sp) - 80206e90: e022 sd s0,0(sp) - 80206e92: 0800 addi s0,sp,16 + 80206f22: 1141 addi sp,sp,-16 + 80206f24: e406 sd ra,8(sp) + 80206f26: e022 sd s0,0(sp) + 80206f28: 0800 addi s0,sp,16 if(i >= NUM) - 80206e94: 479d li a5,7 - 80206e96: 04a7cb63 blt a5,a0,80206eec <free_desc+0x60> + 80206f2a: 479d li a5,7 + 80206f2c: 04a7cb63 blt a5,a0,80206f82 <free_desc+0x60> panic("virtio_disk_intr 1"); if(disk.free[i]) - 80206e9a: 0001c717 auipc a4,0x1c - 80206e9e: 16670713 addi a4,a4,358 # 80223000 <disk> - 80206ea2: 972a add a4,a4,a0 - 80206ea4: 6789 lui a5,0x2 - 80206ea6: 97ba add a5,a5,a4 - 80206ea8: 0187c783 lbu a5,24(a5) # 2018 <_entry-0x801fdfe8> - 80206eac: eba1 bnez a5,80206efc <free_desc+0x70> + 80206f30: 0001c717 auipc a4,0x1c + 80206f34: 0d070713 addi a4,a4,208 # 80223000 <disk> + 80206f38: 972a add a4,a4,a0 + 80206f3a: 6789 lui a5,0x2 + 80206f3c: 97ba add a5,a5,a4 + 80206f3e: 0187c783 lbu a5,24(a5) # 2018 <_entry-0x801fdfe8> + 80206f42: eba1 bnez a5,80206f92 <free_desc+0x70> panic("virtio_disk_intr 2"); disk.desc[i].addr = 0; - 80206eae: 00451713 slli a4,a0,0x4 - 80206eb2: 0001e797 auipc a5,0x1e - 80206eb6: 14e7b783 ld a5,334(a5) # 80225000 <disk+0x2000> - 80206eba: 97ba add a5,a5,a4 - 80206ebc: 0007b023 sd zero,0(a5) + 80206f44: 00451713 slli a4,a0,0x4 + 80206f48: 0001e797 auipc a5,0x1e + 80206f4c: 0b87b783 ld a5,184(a5) # 80225000 <disk+0x2000> + 80206f50: 97ba add a5,a5,a4 + 80206f52: 0007b023 sd zero,0(a5) disk.free[i] = 1; - 80206ec0: 0001c717 auipc a4,0x1c - 80206ec4: 14070713 addi a4,a4,320 # 80223000 <disk> - 80206ec8: 972a add a4,a4,a0 - 80206eca: 6789 lui a5,0x2 - 80206ecc: 97ba add a5,a5,a4 - 80206ece: 4705 li a4,1 - 80206ed0: 00e78c23 sb a4,24(a5) # 2018 <_entry-0x801fdfe8> + 80206f56: 0001c717 auipc a4,0x1c + 80206f5a: 0aa70713 addi a4,a4,170 # 80223000 <disk> + 80206f5e: 972a add a4,a4,a0 + 80206f60: 6789 lui a5,0x2 + 80206f62: 97ba add a5,a5,a4 + 80206f64: 4705 li a4,1 + 80206f66: 00e78c23 sb a4,24(a5) # 2018 <_entry-0x801fdfe8> wakeup(&disk.free[0]); - 80206ed4: 0001e517 auipc a0,0x1e - 80206ed8: 14450513 addi a0,a0,324 # 80225018 <disk+0x2018> - 80206edc: ffffb097 auipc ra,0xffffb - 80206ee0: 55c080e7 jalr 1372(ra) # 80202438 <wakeup> -} - 80206ee4: 60a2 ld ra,8(sp) - 80206ee6: 6402 ld s0,0(sp) - 80206ee8: 0141 addi sp,sp,16 - 80206eea: 8082 ret + 80206f6a: 0001e517 auipc a0,0x1e + 80206f6e: 0ae50513 addi a0,a0,174 # 80225018 <disk+0x2018> + 80206f72: ffffb097 auipc ra,0xffffb + 80206f76: 4c6080e7 jalr 1222(ra) # 80202438 <wakeup> +} + 80206f7a: 60a2 ld ra,8(sp) + 80206f7c: 6402 ld s0,0(sp) + 80206f7e: 0141 addi sp,sp,16 + 80206f80: 8082 ret panic("virtio_disk_intr 1"); - 80206eec: 00003517 auipc a0,0x3 - 80206ef0: e1c50513 addi a0,a0,-484 # 80209d08 <digits+0x988> - 80206ef4: ffff9097 auipc ra,0xffff9 - 80206ef8: 250080e7 jalr 592(ra) # 80200144 <panic> + 80206f82: 00003517 auipc a0,0x3 + 80206f86: d8e50513 addi a0,a0,-626 # 80209d10 <digits+0x990> + 80206f8a: ffff9097 auipc ra,0xffff9 + 80206f8e: 1ba080e7 jalr 442(ra) # 80200144 <panic> panic("virtio_disk_intr 2"); - 80206efc: 00003517 auipc a0,0x3 - 80206f00: e2450513 addi a0,a0,-476 # 80209d20 <digits+0x9a0> - 80206f04: ffff9097 auipc ra,0xffff9 - 80206f08: 240080e7 jalr 576(ra) # 80200144 <panic> + 80206f92: 00003517 auipc a0,0x3 + 80206f96: d9650513 addi a0,a0,-618 # 80209d28 <digits+0x9a8> + 80206f9a: ffff9097 auipc ra,0xffff9 + 80206f9e: 1aa080e7 jalr 426(ra) # 80200144 <panic> -0000000080206f0c <virtio_disk_init>: +0000000080206fa2 <virtio_disk_init>: { - 80206f0c: 1141 addi sp,sp,-16 - 80206f0e: e406 sd ra,8(sp) - 80206f10: e022 sd s0,0(sp) - 80206f12: 0800 addi s0,sp,16 + 80206fa2: 1141 addi sp,sp,-16 + 80206fa4: e406 sd ra,8(sp) + 80206fa6: e022 sd s0,0(sp) + 80206fa8: 0800 addi s0,sp,16 initlock(&disk.vdisk_lock, "virtio_disk"); - 80206f14: 00003597 auipc a1,0x3 - 80206f18: e2458593 addi a1,a1,-476 # 80209d38 <digits+0x9b8> - 80206f1c: 0001e517 auipc a0,0x1e - 80206f20: 18c50513 addi a0,a0,396 # 802250a8 <disk+0x20a8> - 80206f24: ffff9097 auipc ra,0xffff9 - 80206f28: 75e080e7 jalr 1886(ra) # 80200682 <initlock> + 80206faa: 00003597 auipc a1,0x3 + 80206fae: d9658593 addi a1,a1,-618 # 80209d40 <digits+0x9c0> + 80206fb2: 0001e517 auipc a0,0x1e + 80206fb6: 0f650513 addi a0,a0,246 # 802250a8 <disk+0x20a8> + 80206fba: ffff9097 auipc ra,0xffff9 + 80206fbe: 6c8080e7 jalr 1736(ra) # 80200682 <initlock> if(*R(VIRTIO_MMIO_MAGIC_VALUE) != 0x74726976 || - 80206f2c: 03f107b7 lui a5,0x3f10 - 80206f30: 0785 addi a5,a5,1 # 3f10001 <_entry-0x7c2effff> - 80206f32: 07b2 slli a5,a5,0xc - 80206f34: 4398 lw a4,0(a5) - 80206f36: 2701 sext.w a4,a4 - 80206f38: 747277b7 lui a5,0x74727 - 80206f3c: 97678793 addi a5,a5,-1674 # 74726976 <_entry-0xbad968a> - 80206f40: 12f71163 bne a4,a5,80207062 <virtio_disk_init+0x156> + 80206fc2: 03f107b7 lui a5,0x3f10 + 80206fc6: 0785 addi a5,a5,1 # 3f10001 <_entry-0x7c2effff> + 80206fc8: 07b2 slli a5,a5,0xc + 80206fca: 4398 lw a4,0(a5) + 80206fcc: 2701 sext.w a4,a4 + 80206fce: 747277b7 lui a5,0x74727 + 80206fd2: 97678793 addi a5,a5,-1674 # 74726976 <_entry-0xbad968a> + 80206fd6: 12f71163 bne a4,a5,802070f8 <virtio_disk_init+0x156> *R(VIRTIO_MMIO_VERSION) != 1 || - 80206f44: 00003797 auipc a5,0x3 - 80206f48: e7c7b783 ld a5,-388(a5) # 80209dc0 <digits+0xa40> - 80206f4c: 439c lw a5,0(a5) - 80206f4e: 2781 sext.w a5,a5 + 80206fda: 00003797 auipc a5,0x3 + 80206fde: dee7b783 ld a5,-530(a5) # 80209dc8 <digits+0xa48> + 80206fe2: 439c lw a5,0(a5) + 80206fe4: 2781 sext.w a5,a5 if(*R(VIRTIO_MMIO_MAGIC_VALUE) != 0x74726976 || - 80206f50: 4705 li a4,1 - 80206f52: 10e79863 bne a5,a4,80207062 <virtio_disk_init+0x156> + 80206fe6: 4705 li a4,1 + 80206fe8: 10e79863 bne a5,a4,802070f8 <virtio_disk_init+0x156> *R(VIRTIO_MMIO_DEVICE_ID) != 2 || - 80206f56: 00003797 auipc a5,0x3 - 80206f5a: e727b783 ld a5,-398(a5) # 80209dc8 <digits+0xa48> - 80206f5e: 439c lw a5,0(a5) - 80206f60: 2781 sext.w a5,a5 + 80206fec: 00003797 auipc a5,0x3 + 80206ff0: de47b783 ld a5,-540(a5) # 80209dd0 <digits+0xa50> + 80206ff4: 439c lw a5,0(a5) + 80206ff6: 2781 sext.w a5,a5 *R(VIRTIO_MMIO_VERSION) != 1 || - 80206f62: 4709 li a4,2 - 80206f64: 0ee79f63 bne a5,a4,80207062 <virtio_disk_init+0x156> + 80206ff8: 4709 li a4,2 + 80206ffa: 0ee79f63 bne a5,a4,802070f8 <virtio_disk_init+0x156> *R(VIRTIO_MMIO_VENDOR_ID) != 0x554d4551){ - 80206f68: 00003797 auipc a5,0x3 - 80206f6c: e687b783 ld a5,-408(a5) # 80209dd0 <digits+0xa50> - 80206f70: 4398 lw a4,0(a5) - 80206f72: 2701 sext.w a4,a4 + 80206ffe: 00003797 auipc a5,0x3 + 80207002: dda7b783 ld a5,-550(a5) # 80209dd8 <digits+0xa58> + 80207006: 4398 lw a4,0(a5) + 80207008: 2701 sext.w a4,a4 *R(VIRTIO_MMIO_DEVICE_ID) != 2 || - 80206f74: 554d47b7 lui a5,0x554d4 - 80206f78: 55178793 addi a5,a5,1361 # 554d4551 <_entry-0x2ad2baaf> - 80206f7c: 0ef71363 bne a4,a5,80207062 <virtio_disk_init+0x156> + 8020700a: 554d47b7 lui a5,0x554d4 + 8020700e: 55178793 addi a5,a5,1361 # 554d4551 <_entry-0x2ad2baaf> + 80207012: 0ef71363 bne a4,a5,802070f8 <virtio_disk_init+0x156> *R(VIRTIO_MMIO_STATUS) = status; - 80206f80: 00003797 auipc a5,0x3 - 80206f84: e587b783 ld a5,-424(a5) # 80209dd8 <digits+0xa58> - 80206f88: 4705 li a4,1 - 80206f8a: c398 sw a4,0(a5) + 80207016: 00003797 auipc a5,0x3 + 8020701a: dca7b783 ld a5,-566(a5) # 80209de0 <digits+0xa60> + 8020701e: 4705 li a4,1 + 80207020: c398 sw a4,0(a5) *R(VIRTIO_MMIO_STATUS) = status; - 80206f8c: 470d li a4,3 - 80206f8e: c398 sw a4,0(a5) + 80207022: 470d li a4,3 + 80207024: c398 sw a4,0(a5) uint64 features = *R(VIRTIO_MMIO_DEVICE_FEATURES); - 80206f90: 00003717 auipc a4,0x3 - 80206f94: e5073703 ld a4,-432(a4) # 80209de0 <digits+0xa60> - 80206f98: 4318 lw a4,0(a4) + 80207026: 00003717 auipc a4,0x3 + 8020702a: dc273703 ld a4,-574(a4) # 80209de8 <digits+0xa68> + 8020702e: 4318 lw a4,0(a4) *R(VIRTIO_MMIO_DRIVER_FEATURES) = features; - 80206f9a: c7ffe6b7 lui a3,0xc7ffe - 80206f9e: 75f68693 addi a3,a3,1887 # ffffffffc7ffe75f <ebss_clear+0xffffffff47dd875f> - 80206fa2: 8f75 and a4,a4,a3 - 80206fa4: 00003697 auipc a3,0x3 - 80206fa8: e446b683 ld a3,-444(a3) # 80209de8 <digits+0xa68> - 80206fac: c298 sw a4,0(a3) + 80207030: c7ffe6b7 lui a3,0xc7ffe + 80207034: 75f68693 addi a3,a3,1887 # ffffffffc7ffe75f <ebss_clear+0xffffffff47dd875f> + 80207038: 8f75 and a4,a4,a3 + 8020703a: 00003697 auipc a3,0x3 + 8020703e: db66b683 ld a3,-586(a3) # 80209df0 <digits+0xa70> + 80207042: c298 sw a4,0(a3) *R(VIRTIO_MMIO_STATUS) = status; - 80206fae: 472d li a4,11 - 80206fb0: c398 sw a4,0(a5) + 80207044: 472d li a4,11 + 80207046: c398 sw a4,0(a5) *R(VIRTIO_MMIO_STATUS) = status; - 80206fb2: 473d li a4,15 - 80206fb4: c398 sw a4,0(a5) + 80207048: 473d li a4,15 + 8020704a: c398 sw a4,0(a5) *R(VIRTIO_MMIO_GUEST_PAGE_SIZE) = PGSIZE; - 80206fb6: 00003797 auipc a5,0x3 - 80206fba: e3a7b783 ld a5,-454(a5) # 80209df0 <digits+0xa70> - 80206fbe: 6705 lui a4,0x1 - 80206fc0: c398 sw a4,0(a5) + 8020704c: 00003797 auipc a5,0x3 + 80207050: dac7b783 ld a5,-596(a5) # 80209df8 <digits+0xa78> + 80207054: 6705 lui a4,0x1 + 80207056: c398 sw a4,0(a5) *R(VIRTIO_MMIO_QUEUE_SEL) = 0; - 80206fc2: 00003797 auipc a5,0x3 - 80206fc6: e367b783 ld a5,-458(a5) # 80209df8 <digits+0xa78> - 80206fca: 0007a023 sw zero,0(a5) + 80207058: 00003797 auipc a5,0x3 + 8020705c: da87b783 ld a5,-600(a5) # 80209e00 <digits+0xa80> + 80207060: 0007a023 sw zero,0(a5) uint32 max = *R(VIRTIO_MMIO_QUEUE_NUM_MAX); - 80206fce: 00003797 auipc a5,0x3 - 80206fd2: e327b783 ld a5,-462(a5) # 80209e00 <digits+0xa80> - 80206fd6: 439c lw a5,0(a5) - 80206fd8: 2781 sext.w a5,a5 + 80207064: 00003797 auipc a5,0x3 + 80207068: da47b783 ld a5,-604(a5) # 80209e08 <digits+0xa88> + 8020706c: 439c lw a5,0(a5) + 8020706e: 2781 sext.w a5,a5 if(max == 0) - 80206fda: cfc1 beqz a5,80207072 <virtio_disk_init+0x166> + 80207070: cfc1 beqz a5,80207108 <virtio_disk_init+0x166> if(max < NUM) - 80206fdc: 471d li a4,7 - 80206fde: 0af77263 bgeu a4,a5,80207082 <virtio_disk_init+0x176> + 80207072: 471d li a4,7 + 80207074: 0af77263 bgeu a4,a5,80207118 <virtio_disk_init+0x176> *R(VIRTIO_MMIO_QUEUE_NUM) = NUM; - 80206fe2: 00003797 auipc a5,0x3 - 80206fe6: e267b783 ld a5,-474(a5) # 80209e08 <digits+0xa88> - 80206fea: 4721 li a4,8 - 80206fec: c398 sw a4,0(a5) + 80207078: 00003797 auipc a5,0x3 + 8020707c: d987b783 ld a5,-616(a5) # 80209e10 <digits+0xa90> + 80207080: 4721 li a4,8 + 80207082: c398 sw a4,0(a5) memset(disk.pages, 0, sizeof(disk.pages)); - 80206fee: 6609 lui a2,0x2 - 80206ff0: 4581 li a1,0 - 80206ff2: 0001c517 auipc a0,0x1c - 80206ff6: 00e50513 addi a0,a0,14 # 80223000 <disk> - 80206ffa: ffff9097 auipc ra,0xffff9 - 80206ffe: 768080e7 jalr 1896(ra) # 80200762 <memset> + 80207084: 6609 lui a2,0x2 + 80207086: 4581 li a1,0 + 80207088: 0001c517 auipc a0,0x1c + 8020708c: f7850513 addi a0,a0,-136 # 80223000 <disk> + 80207090: ffff9097 auipc ra,0xffff9 + 80207094: 6d2080e7 jalr 1746(ra) # 80200762 <memset> *R(VIRTIO_MMIO_QUEUE_PFN) = ((uint64)disk.pages) >> PGSHIFT; - 80207002: 0001c717 auipc a4,0x1c - 80207006: ffe70713 addi a4,a4,-2 # 80223000 <disk> - 8020700a: 00c75793 srli a5,a4,0xc - 8020700e: 2781 sext.w a5,a5 - 80207010: 00003697 auipc a3,0x3 - 80207014: e006b683 ld a3,-512(a3) # 80209e10 <digits+0xa90> - 80207018: c29c sw a5,0(a3) + 80207098: 0001c717 auipc a4,0x1c + 8020709c: f6870713 addi a4,a4,-152 # 80223000 <disk> + 802070a0: 00c75793 srli a5,a4,0xc + 802070a4: 2781 sext.w a5,a5 + 802070a6: 00003697 auipc a3,0x3 + 802070aa: d726b683 ld a3,-654(a3) # 80209e18 <digits+0xa98> + 802070ae: c29c sw a5,0(a3) disk.desc = (struct VRingDesc *) disk.pages; - 8020701a: 0001e797 auipc a5,0x1e - 8020701e: fe678793 addi a5,a5,-26 # 80225000 <disk+0x2000> - 80207022: e398 sd a4,0(a5) + 802070b0: 0001e797 auipc a5,0x1e + 802070b4: f5078793 addi a5,a5,-176 # 80225000 <disk+0x2000> + 802070b8: e398 sd a4,0(a5) disk.avail = (uint16*)(((char*)disk.desc) + NUM*sizeof(struct VRingDesc)); - 80207024: 0001c717 auipc a4,0x1c - 80207028: 05c70713 addi a4,a4,92 # 80223080 <disk+0x80> - 8020702c: e798 sd a4,8(a5) + 802070ba: 0001c717 auipc a4,0x1c + 802070be: fc670713 addi a4,a4,-58 # 80223080 <disk+0x80> + 802070c2: e798 sd a4,8(a5) disk.used = (struct UsedArea *) (disk.pages + PGSIZE); - 8020702e: 0001d717 auipc a4,0x1d - 80207032: fd270713 addi a4,a4,-46 # 80224000 <disk+0x1000> - 80207036: eb98 sd a4,16(a5) + 802070c4: 0001d717 auipc a4,0x1d + 802070c8: f3c70713 addi a4,a4,-196 # 80224000 <disk+0x1000> + 802070cc: eb98 sd a4,16(a5) disk.free[i] = 1; - 80207038: 4705 li a4,1 - 8020703a: 00e78c23 sb a4,24(a5) - 8020703e: 00e78ca3 sb a4,25(a5) - 80207042: 00e78d23 sb a4,26(a5) - 80207046: 00e78da3 sb a4,27(a5) - 8020704a: 00e78e23 sb a4,28(a5) - 8020704e: 00e78ea3 sb a4,29(a5) - 80207052: 00e78f23 sb a4,30(a5) - 80207056: 00e78fa3 sb a4,31(a5) -} - 8020705a: 60a2 ld ra,8(sp) - 8020705c: 6402 ld s0,0(sp) - 8020705e: 0141 addi sp,sp,16 - 80207060: 8082 ret + 802070ce: 4705 li a4,1 + 802070d0: 00e78c23 sb a4,24(a5) + 802070d4: 00e78ca3 sb a4,25(a5) + 802070d8: 00e78d23 sb a4,26(a5) + 802070dc: 00e78da3 sb a4,27(a5) + 802070e0: 00e78e23 sb a4,28(a5) + 802070e4: 00e78ea3 sb a4,29(a5) + 802070e8: 00e78f23 sb a4,30(a5) + 802070ec: 00e78fa3 sb a4,31(a5) +} + 802070f0: 60a2 ld ra,8(sp) + 802070f2: 6402 ld s0,0(sp) + 802070f4: 0141 addi sp,sp,16 + 802070f6: 8082 ret panic("could not find virtio disk"); - 80207062: 00003517 auipc a0,0x3 - 80207066: ce650513 addi a0,a0,-794 # 80209d48 <digits+0x9c8> - 8020706a: ffff9097 auipc ra,0xffff9 - 8020706e: 0da080e7 jalr 218(ra) # 80200144 <panic> + 802070f8: 00003517 auipc a0,0x3 + 802070fc: c5850513 addi a0,a0,-936 # 80209d50 <digits+0x9d0> + 80207100: ffff9097 auipc ra,0xffff9 + 80207104: 044080e7 jalr 68(ra) # 80200144 <panic> panic("virtio disk has no queue 0"); - 80207072: 00003517 auipc a0,0x3 - 80207076: cf650513 addi a0,a0,-778 # 80209d68 <digits+0x9e8> - 8020707a: ffff9097 auipc ra,0xffff9 - 8020707e: 0ca080e7 jalr 202(ra) # 80200144 <panic> + 80207108: 00003517 auipc a0,0x3 + 8020710c: c6850513 addi a0,a0,-920 # 80209d70 <digits+0x9f0> + 80207110: ffff9097 auipc ra,0xffff9 + 80207114: 034080e7 jalr 52(ra) # 80200144 <panic> panic("virtio disk max queue too short"); - 80207082: 00003517 auipc a0,0x3 - 80207086: d0650513 addi a0,a0,-762 # 80209d88 <digits+0xa08> - 8020708a: ffff9097 auipc ra,0xffff9 - 8020708e: 0ba080e7 jalr 186(ra) # 80200144 <panic> + 80207118: 00003517 auipc a0,0x3 + 8020711c: c7850513 addi a0,a0,-904 # 80209d90 <digits+0xa10> + 80207120: ffff9097 auipc ra,0xffff9 + 80207124: 024080e7 jalr 36(ra) # 80200144 <panic> -0000000080207092 <virtio_disk_rw>: +0000000080207128 <virtio_disk_rw>: return 0; } void virtio_disk_rw(struct buf *b, int write) { - 80207092: 7175 addi sp,sp,-144 - 80207094: e506 sd ra,136(sp) - 80207096: e122 sd s0,128(sp) - 80207098: fca6 sd s1,120(sp) - 8020709a: f8ca sd s2,112(sp) - 8020709c: f4ce sd s3,104(sp) - 8020709e: f0d2 sd s4,96(sp) - 802070a0: ecd6 sd s5,88(sp) - 802070a2: e8da sd s6,80(sp) - 802070a4: e4de sd s7,72(sp) - 802070a6: e0e2 sd s8,64(sp) - 802070a8: fc66 sd s9,56(sp) - 802070aa: f86a sd s10,48(sp) - 802070ac: f46e sd s11,40(sp) - 802070ae: 0900 addi s0,sp,144 - 802070b0: 8aaa mv s5,a0 - 802070b2: 8cae mv s9,a1 + 80207128: 7175 addi sp,sp,-144 + 8020712a: e506 sd ra,136(sp) + 8020712c: e122 sd s0,128(sp) + 8020712e: fca6 sd s1,120(sp) + 80207130: f8ca sd s2,112(sp) + 80207132: f4ce sd s3,104(sp) + 80207134: f0d2 sd s4,96(sp) + 80207136: ecd6 sd s5,88(sp) + 80207138: e8da sd s6,80(sp) + 8020713a: e4de sd s7,72(sp) + 8020713c: e0e2 sd s8,64(sp) + 8020713e: fc66 sd s9,56(sp) + 80207140: f86a sd s10,48(sp) + 80207142: f46e sd s11,40(sp) + 80207144: 0900 addi s0,sp,144 + 80207146: 8aaa mv s5,a0 + 80207148: 8cae mv s9,a1 uint64 sector = b->sectorno; - 802070b4: 00c56d03 lwu s10,12(a0) + 8020714a: 00c56d03 lwu s10,12(a0) acquire(&disk.vdisk_lock); - 802070b8: 0001e517 auipc a0,0x1e - 802070bc: ff050513 addi a0,a0,-16 # 802250a8 <disk+0x20a8> - 802070c0: ffff9097 auipc ra,0xffff9 - 802070c4: 606080e7 jalr 1542(ra) # 802006c6 <acquire> + 8020714e: 0001e517 auipc a0,0x1e + 80207152: f5a50513 addi a0,a0,-166 # 802250a8 <disk+0x20a8> + 80207156: ffff9097 auipc ra,0xffff9 + 8020715a: 570080e7 jalr 1392(ra) # 802006c6 <acquire> for(int i = 0; i < 3; i++){ - 802070c8: 4981 li s3,0 + 8020715e: 4981 li s3,0 for(int i = 0; i < NUM; i++){ - 802070ca: 44a1 li s1,8 + 80207160: 44a1 li s1,8 disk.free[i] = 0; - 802070cc: 0001cc17 auipc s8,0x1c - 802070d0: f34c0c13 addi s8,s8,-204 # 80223000 <disk> - 802070d4: 6b89 lui s7,0x2 + 80207162: 0001cc17 auipc s8,0x1c + 80207166: e9ec0c13 addi s8,s8,-354 # 80223000 <disk> + 8020716a: 6b89 lui s7,0x2 for(int i = 0; i < 3; i++){ - 802070d6: 4b0d li s6,3 - 802070d8: a0ad j 80207142 <virtio_disk_rw+0xb0> + 8020716c: 4b0d li s6,3 + 8020716e: a0ad j 802071d8 <virtio_disk_rw+0xb0> disk.free[i] = 0; - 802070da: 00fc0733 add a4,s8,a5 - 802070de: 975e add a4,a4,s7 - 802070e0: 00070c23 sb zero,24(a4) + 80207170: 00fc0733 add a4,s8,a5 + 80207174: 975e add a4,a4,s7 + 80207176: 00070c23 sb zero,24(a4) idx[i] = alloc_desc(); - 802070e4: c19c sw a5,0(a1) + 8020717a: c19c sw a5,0(a1) if(idx[i] < 0){ - 802070e6: 0207c563 bltz a5,80207110 <virtio_disk_rw+0x7e> + 8020717c: 0207c563 bltz a5,802071a6 <virtio_disk_rw+0x7e> for(int i = 0; i < 3; i++){ - 802070ea: 2905 addiw s2,s2,1 - 802070ec: 0611 addi a2,a2,4 # 2004 <_entry-0x801fdffc> - 802070ee: 19690e63 beq s2,s6,8020728a <virtio_disk_rw+0x1f8> + 80207180: 2905 addiw s2,s2,1 + 80207182: 0611 addi a2,a2,4 # 2004 <_entry-0x801fdffc> + 80207184: 19690e63 beq s2,s6,80207320 <virtio_disk_rw+0x1f8> idx[i] = alloc_desc(); - 802070f2: 85b2 mv a1,a2 + 80207188: 85b2 mv a1,a2 for(int i = 0; i < NUM; i++){ - 802070f4: 0001e717 auipc a4,0x1e - 802070f8: f2470713 addi a4,a4,-220 # 80225018 <disk+0x2018> - 802070fc: 87ce mv a5,s3 + 8020718a: 0001e717 auipc a4,0x1e + 8020718e: e8e70713 addi a4,a4,-370 # 80225018 <disk+0x2018> + 80207192: 87ce mv a5,s3 if(disk.free[i]){ - 802070fe: 00074683 lbu a3,0(a4) - 80207102: fee1 bnez a3,802070da <virtio_disk_rw+0x48> + 80207194: 00074683 lbu a3,0(a4) + 80207198: fee1 bnez a3,80207170 <virtio_disk_rw+0x48> for(int i = 0; i < NUM; i++){ - 80207104: 2785 addiw a5,a5,1 - 80207106: 0705 addi a4,a4,1 - 80207108: fe979be3 bne a5,s1,802070fe <virtio_disk_rw+0x6c> + 8020719a: 2785 addiw a5,a5,1 + 8020719c: 0705 addi a4,a4,1 + 8020719e: fe979be3 bne a5,s1,80207194 <virtio_disk_rw+0x6c> idx[i] = alloc_desc(); - 8020710c: 57fd li a5,-1 - 8020710e: c19c sw a5,0(a1) + 802071a2: 57fd li a5,-1 + 802071a4: c19c sw a5,0(a1) for(int j = 0; j < i; j++) - 80207110: 01205d63 blez s2,8020712a <virtio_disk_rw+0x98> - 80207114: 8dce mv s11,s3 + 802071a6: 01205d63 blez s2,802071c0 <virtio_disk_rw+0x98> + 802071aa: 8dce mv s11,s3 free_desc(idx[j]); - 80207116: 000a2503 lw a0,0(s4) - 8020711a: 00000097 auipc ra,0x0 - 8020711e: d72080e7 jalr -654(ra) # 80206e8c <free_desc> + 802071ac: 000a2503 lw a0,0(s4) + 802071b0: 00000097 auipc ra,0x0 + 802071b4: d72080e7 jalr -654(ra) # 80206f22 <free_desc> for(int j = 0; j < i; j++) - 80207122: 2d85 addiw s11,s11,1 - 80207124: 0a11 addi s4,s4,4 - 80207126: ff2d98e3 bne s11,s2,80207116 <virtio_disk_rw+0x84> + 802071b8: 2d85 addiw s11,s11,1 + 802071ba: 0a11 addi s4,s4,4 + 802071bc: ff2d98e3 bne s11,s2,802071ac <virtio_disk_rw+0x84> int idx[3]; while(1){ if(alloc3_desc(idx) == 0) { break; } sleep(&disk.free[0], &disk.vdisk_lock); - 8020712a: 0001e597 auipc a1,0x1e - 8020712e: f7e58593 addi a1,a1,-130 # 802250a8 <disk+0x20a8> - 80207132: 0001e517 auipc a0,0x1e - 80207136: ee650513 addi a0,a0,-282 # 80225018 <disk+0x2018> - 8020713a: ffffb097 auipc ra,0xffffb - 8020713e: 182080e7 jalr 386(ra) # 802022bc <sleep> + 802071c0: 0001e597 auipc a1,0x1e + 802071c4: ee858593 addi a1,a1,-280 # 802250a8 <disk+0x20a8> + 802071c8: 0001e517 auipc a0,0x1e + 802071cc: e5050513 addi a0,a0,-432 # 80225018 <disk+0x2018> + 802071d0: ffffb097 auipc ra,0xffffb + 802071d4: 0ec080e7 jalr 236(ra) # 802022bc <sleep> for(int i = 0; i < 3; i++){ - 80207142: f8040a13 addi s4,s0,-128 + 802071d8: f8040a13 addi s4,s0,-128 { - 80207146: 8652 mv a2,s4 + 802071dc: 8652 mv a2,s4 for(int i = 0; i < 3; i++){ - 80207148: 894e mv s2,s3 - 8020714a: b765 j 802070f2 <virtio_disk_rw+0x60> + 802071de: 894e mv s2,s3 + 802071e0: b765 j 80207188 <virtio_disk_rw+0x60> disk.desc[idx[0]].next = idx[1]; disk.desc[idx[1]].addr = (uint64) b->data; disk.desc[idx[1]].len = BSIZE; if(write) disk.desc[idx[1]].flags = 0; // device reads b->data - 8020714c: 0001e717 auipc a4,0x1e - 80207150: eb473703 ld a4,-332(a4) # 80225000 <disk+0x2000> - 80207154: 973e add a4,a4,a5 - 80207156: 00071623 sh zero,12(a4) + 802071e2: 0001e717 auipc a4,0x1e + 802071e6: e1e73703 ld a4,-482(a4) # 80225000 <disk+0x2000> + 802071ea: 973e add a4,a4,a5 + 802071ec: 00071623 sh zero,12(a4) else disk.desc[idx[1]].flags = VRING_DESC_F_WRITE; // device writes b->data disk.desc[idx[1]].flags |= VRING_DESC_F_NEXT; - 8020715a: 0001c517 auipc a0,0x1c - 8020715e: ea650513 addi a0,a0,-346 # 80223000 <disk> - 80207162: 0001e717 auipc a4,0x1e - 80207166: e9e70713 addi a4,a4,-354 # 80225000 <disk+0x2000> - 8020716a: 6314 ld a3,0(a4) - 8020716c: 96be add a3,a3,a5 - 8020716e: 00c6d603 lhu a2,12(a3) - 80207172: 00166613 ori a2,a2,1 - 80207176: 00c69623 sh a2,12(a3) + 802071f0: 0001c517 auipc a0,0x1c + 802071f4: e1050513 addi a0,a0,-496 # 80223000 <disk> + 802071f8: 0001e717 auipc a4,0x1e + 802071fc: e0870713 addi a4,a4,-504 # 80225000 <disk+0x2000> + 80207200: 6314 ld a3,0(a4) + 80207202: 96be add a3,a3,a5 + 80207204: 00c6d603 lhu a2,12(a3) + 80207208: 00166613 ori a2,a2,1 + 8020720c: 00c69623 sh a2,12(a3) disk.desc[idx[1]].next = idx[2]; - 8020717a: f8842683 lw a3,-120(s0) - 8020717e: 6310 ld a2,0(a4) - 80207180: 97b2 add a5,a5,a2 - 80207182: 00d79723 sh a3,14(a5) + 80207210: f8842683 lw a3,-120(s0) + 80207214: 6310 ld a2,0(a4) + 80207216: 97b2 add a5,a5,a2 + 80207218: 00d79723 sh a3,14(a5) disk.info[idx[0]].status = 0; - 80207186: 20048613 addi a2,s1,512 - 8020718a: 0612 slli a2,a2,0x4 - 8020718c: 962a add a2,a2,a0 - 8020718e: 02060823 sb zero,48(a2) + 8020721c: 20048613 addi a2,s1,512 + 80207220: 0612 slli a2,a2,0x4 + 80207222: 962a add a2,a2,a0 + 80207224: 02060823 sb zero,48(a2) disk.desc[idx[2]].addr = (uint64) &disk.info[idx[0]].status; - 80207192: 00469793 slli a5,a3,0x4 - 80207196: 630c ld a1,0(a4) - 80207198: 95be add a1,a1,a5 - 8020719a: 6689 lui a3,0x2 - 8020719c: 03068693 addi a3,a3,48 # 2030 <_entry-0x801fdfd0> - 802071a0: 96ca add a3,a3,s2 - 802071a2: 96aa add a3,a3,a0 - 802071a4: e194 sd a3,0(a1) + 80207228: 00469793 slli a5,a3,0x4 + 8020722c: 630c ld a1,0(a4) + 8020722e: 95be add a1,a1,a5 + 80207230: 6689 lui a3,0x2 + 80207232: 03068693 addi a3,a3,48 # 2030 <_entry-0x801fdfd0> + 80207236: 96ca add a3,a3,s2 + 80207238: 96aa add a3,a3,a0 + 8020723a: e194 sd a3,0(a1) disk.desc[idx[2]].len = 1; - 802071a6: 6314 ld a3,0(a4) - 802071a8: 96be add a3,a3,a5 - 802071aa: 4585 li a1,1 - 802071ac: c68c sw a1,8(a3) + 8020723c: 6314 ld a3,0(a4) + 8020723e: 96be add a3,a3,a5 + 80207240: 4585 li a1,1 + 80207242: c68c sw a1,8(a3) disk.desc[idx[2]].flags = VRING_DESC_F_WRITE; // device writes the status - 802071ae: 6314 ld a3,0(a4) - 802071b0: 96be add a3,a3,a5 - 802071b2: 4509 li a0,2 - 802071b4: 00a69623 sh a0,12(a3) + 80207244: 6314 ld a3,0(a4) + 80207246: 96be add a3,a3,a5 + 80207248: 4509 li a0,2 + 8020724a: 00a69623 sh a0,12(a3) disk.desc[idx[2]].next = 0; - 802071b8: 6314 ld a3,0(a4) - 802071ba: 97b6 add a5,a5,a3 - 802071bc: 00079723 sh zero,14(a5) + 8020724e: 6314 ld a3,0(a4) + 80207250: 97b6 add a5,a5,a3 + 80207252: 00079723 sh zero,14(a5) // record struct buf for virtio_disk_intr(). b->disk = 1; - 802071c0: 00baa223 sw a1,4(s5) + 80207256: 00baa223 sw a1,4(s5) disk.info[idx[0]].b = b; - 802071c4: 03563423 sd s5,40(a2) + 8020725a: 03563423 sd s5,40(a2) // avail[0] is flags // avail[1] tells the device how far to look in avail[2...]. // avail[2...] are desc[] indices the device should process. // we only tell device the first index in our chain of descriptors. disk.avail[2 + (disk.avail[1] % NUM)] = idx[0]; - 802071c8: 6714 ld a3,8(a4) - 802071ca: 0026d783 lhu a5,2(a3) - 802071ce: 8b9d andi a5,a5,7 - 802071d0: 0789 addi a5,a5,2 - 802071d2: 0786 slli a5,a5,0x1 - 802071d4: 96be add a3,a3,a5 - 802071d6: 00969023 sh s1,0(a3) + 8020725e: 6714 ld a3,8(a4) + 80207260: 0026d783 lhu a5,2(a3) + 80207264: 8b9d andi a5,a5,7 + 80207266: 0789 addi a5,a5,2 + 80207268: 0786 slli a5,a5,0x1 + 8020726a: 96be add a3,a3,a5 + 8020726c: 00969023 sh s1,0(a3) __sync_synchronize(); - 802071da: 0ff0000f fence + 80207270: 0ff0000f fence disk.avail[1] = disk.avail[1] + 1; - 802071de: 6718 ld a4,8(a4) - 802071e0: 00275783 lhu a5,2(a4) - 802071e4: 2785 addiw a5,a5,1 - 802071e6: 00f71123 sh a5,2(a4) + 80207274: 6718 ld a4,8(a4) + 80207276: 00275783 lhu a5,2(a4) + 8020727a: 2785 addiw a5,a5,1 + 8020727c: 00f71123 sh a5,2(a4) *R(VIRTIO_MMIO_QUEUE_NOTIFY) = 0; // value is queue number - 802071ea: 00003797 auipc a5,0x3 - 802071ee: c2e7b783 ld a5,-978(a5) # 80209e18 <digits+0xa98> - 802071f2: 0007a023 sw zero,0(a5) + 80207280: 00003797 auipc a5,0x3 + 80207284: ba07b783 ld a5,-1120(a5) # 80209e20 <digits+0xaa0> + 80207288: 0007a023 sw zero,0(a5) // Wait for virtio_disk_intr() to say request has finished. while(b->disk == 1) { - 802071f6: 004aa783 lw a5,4(s5) - 802071fa: 02b79163 bne a5,a1,8020721c <virtio_disk_rw+0x18a> + 8020728c: 004aa783 lw a5,4(s5) + 80207290: 02b79163 bne a5,a1,802072b2 <virtio_disk_rw+0x18a> sleep(b, &disk.vdisk_lock); - 802071fe: 0001e917 auipc s2,0x1e - 80207202: eaa90913 addi s2,s2,-342 # 802250a8 <disk+0x20a8> + 80207294: 0001e917 auipc s2,0x1e + 80207298: e1490913 addi s2,s2,-492 # 802250a8 <disk+0x20a8> while(b->disk == 1) { - 80207206: 4485 li s1,1 + 8020729c: 4485 li s1,1 sleep(b, &disk.vdisk_lock); - 80207208: 85ca mv a1,s2 - 8020720a: 8556 mv a0,s5 - 8020720c: ffffb097 auipc ra,0xffffb - 80207210: 0b0080e7 jalr 176(ra) # 802022bc <sleep> + 8020729e: 85ca mv a1,s2 + 802072a0: 8556 mv a0,s5 + 802072a2: ffffb097 auipc ra,0xffffb + 802072a6: 01a080e7 jalr 26(ra) # 802022bc <sleep> while(b->disk == 1) { - 80207214: 004aa783 lw a5,4(s5) - 80207218: fe9788e3 beq a5,s1,80207208 <virtio_disk_rw+0x176> + 802072aa: 004aa783 lw a5,4(s5) + 802072ae: fe9788e3 beq a5,s1,8020729e <virtio_disk_rw+0x176> } disk.info[idx[0]].b = 0; - 8020721c: f8042483 lw s1,-128(s0) - 80207220: 20048713 addi a4,s1,512 - 80207224: 0712 slli a4,a4,0x4 - 80207226: 0001c797 auipc a5,0x1c - 8020722a: dda78793 addi a5,a5,-550 # 80223000 <disk> - 8020722e: 97ba add a5,a5,a4 - 80207230: 0207b423 sd zero,40(a5) + 802072b2: f8042483 lw s1,-128(s0) + 802072b6: 20048713 addi a4,s1,512 + 802072ba: 0712 slli a4,a4,0x4 + 802072bc: 0001c797 auipc a5,0x1c + 802072c0: d4478793 addi a5,a5,-700 # 80223000 <disk> + 802072c4: 97ba add a5,a5,a4 + 802072c6: 0207b423 sd zero,40(a5) if(disk.desc[i].flags & VRING_DESC_F_NEXT) - 80207234: 0001e917 auipc s2,0x1e - 80207238: dcc90913 addi s2,s2,-564 # 80225000 <disk+0x2000> - 8020723c: a019 j 80207242 <virtio_disk_rw+0x1b0> + 802072ca: 0001e917 auipc s2,0x1e + 802072ce: d3690913 addi s2,s2,-714 # 80225000 <disk+0x2000> + 802072d2: a019 j 802072d8 <virtio_disk_rw+0x1b0> i = disk.desc[i].next; - 8020723e: 00e7d483 lhu s1,14(a5) + 802072d4: 00e7d483 lhu s1,14(a5) free_desc(i); - 80207242: 8526 mv a0,s1 - 80207244: 00000097 auipc ra,0x0 - 80207248: c48080e7 jalr -952(ra) # 80206e8c <free_desc> + 802072d8: 8526 mv a0,s1 + 802072da: 00000097 auipc ra,0x0 + 802072de: c48080e7 jalr -952(ra) # 80206f22 <free_desc> if(disk.desc[i].flags & VRING_DESC_F_NEXT) - 8020724c: 0492 slli s1,s1,0x4 - 8020724e: 00093783 ld a5,0(s2) - 80207252: 97a6 add a5,a5,s1 - 80207254: 00c7d703 lhu a4,12(a5) - 80207258: 8b05 andi a4,a4,1 - 8020725a: f375 bnez a4,8020723e <virtio_disk_rw+0x1ac> + 802072e2: 0492 slli s1,s1,0x4 + 802072e4: 00093783 ld a5,0(s2) + 802072e8: 97a6 add a5,a5,s1 + 802072ea: 00c7d703 lhu a4,12(a5) + 802072ee: 8b05 andi a4,a4,1 + 802072f0: f375 bnez a4,802072d4 <virtio_disk_rw+0x1ac> free_chain(idx[0]); release(&disk.vdisk_lock); - 8020725c: 0001e517 auipc a0,0x1e - 80207260: e4c50513 addi a0,a0,-436 # 802250a8 <disk+0x20a8> - 80207264: ffff9097 auipc ra,0xffff9 - 80207268: 4b6080e7 jalr 1206(ra) # 8020071a <release> -} - 8020726c: 60aa ld ra,136(sp) - 8020726e: 640a ld s0,128(sp) - 80207270: 74e6 ld s1,120(sp) - 80207272: 7946 ld s2,112(sp) - 80207274: 79a6 ld s3,104(sp) - 80207276: 7a06 ld s4,96(sp) - 80207278: 6ae6 ld s5,88(sp) - 8020727a: 6b46 ld s6,80(sp) - 8020727c: 6ba6 ld s7,72(sp) - 8020727e: 6c06 ld s8,64(sp) - 80207280: 7ce2 ld s9,56(sp) - 80207282: 7d42 ld s10,48(sp) - 80207284: 7da2 ld s11,40(sp) - 80207286: 6149 addi sp,sp,144 - 80207288: 8082 ret + 802072f2: 0001e517 auipc a0,0x1e + 802072f6: db650513 addi a0,a0,-586 # 802250a8 <disk+0x20a8> + 802072fa: ffff9097 auipc ra,0xffff9 + 802072fe: 420080e7 jalr 1056(ra) # 8020071a <release> +} + 80207302: 60aa ld ra,136(sp) + 80207304: 640a ld s0,128(sp) + 80207306: 74e6 ld s1,120(sp) + 80207308: 7946 ld s2,112(sp) + 8020730a: 79a6 ld s3,104(sp) + 8020730c: 7a06 ld s4,96(sp) + 8020730e: 6ae6 ld s5,88(sp) + 80207310: 6b46 ld s6,80(sp) + 80207312: 6ba6 ld s7,72(sp) + 80207314: 6c06 ld s8,64(sp) + 80207316: 7ce2 ld s9,56(sp) + 80207318: 7d42 ld s10,48(sp) + 8020731a: 7da2 ld s11,40(sp) + 8020731c: 6149 addi sp,sp,144 + 8020731e: 8082 ret if(write) - 8020728a: 019037b3 snez a5,s9 - 8020728e: f6f42823 sw a5,-144(s0) + 80207320: 019037b3 snez a5,s9 + 80207324: f6f42823 sw a5,-144(s0) buf0.reserved = 0; - 80207292: f6042a23 sw zero,-140(s0) + 80207328: f6042a23 sw zero,-140(s0) buf0.sector = sector; - 80207296: f7a43c23 sd s10,-136(s0) + 8020732c: f7a43c23 sd s10,-136(s0) disk.desc[idx[0]].addr = (uint64) kwalkaddr(myproc()->kpagetable, (uint64) &buf0); - 8020729a: ffffa097 auipc ra,0xffffa - 8020729e: 7a2080e7 jalr 1954(ra) # 80201a3c <myproc> - 802072a2: f8042483 lw s1,-128(s0) - 802072a6: 00449913 slli s2,s1,0x4 - 802072aa: 0001e997 auipc s3,0x1e - 802072ae: d5698993 addi s3,s3,-682 # 80225000 <disk+0x2000> - 802072b2: 0009ba03 ld s4,0(s3) - 802072b6: 9a4a add s4,s4,s2 - 802072b8: f7040593 addi a1,s0,-144 - 802072bc: 6d28 ld a0,88(a0) - 802072be: ffffa097 auipc ra,0xffffa - 802072c2: 932080e7 jalr -1742(ra) # 80200bf0 <kwalkaddr> - 802072c6: 00aa3023 sd a0,0(s4) + 80207330: ffffa097 auipc ra,0xffffa + 80207334: 70c080e7 jalr 1804(ra) # 80201a3c <myproc> + 80207338: f8042483 lw s1,-128(s0) + 8020733c: 00449913 slli s2,s1,0x4 + 80207340: 0001e997 auipc s3,0x1e + 80207344: cc098993 addi s3,s3,-832 # 80225000 <disk+0x2000> + 80207348: 0009ba03 ld s4,0(s3) + 8020734c: 9a4a add s4,s4,s2 + 8020734e: f7040593 addi a1,s0,-144 + 80207352: 6d28 ld a0,88(a0) + 80207354: ffffa097 auipc ra,0xffffa + 80207358: 89c080e7 jalr -1892(ra) # 80200bf0 <kwalkaddr> + 8020735c: 00aa3023 sd a0,0(s4) disk.desc[idx[0]].len = sizeof(buf0); - 802072ca: 0009b783 ld a5,0(s3) - 802072ce: 97ca add a5,a5,s2 - 802072d0: 4741 li a4,16 - 802072d2: c798 sw a4,8(a5) + 80207360: 0009b783 ld a5,0(s3) + 80207364: 97ca add a5,a5,s2 + 80207366: 4741 li a4,16 + 80207368: c798 sw a4,8(a5) disk.desc[idx[0]].flags = VRING_DESC_F_NEXT; - 802072d4: 0009b783 ld a5,0(s3) - 802072d8: 97ca add a5,a5,s2 - 802072da: 4705 li a4,1 - 802072dc: 00e79623 sh a4,12(a5) + 8020736a: 0009b783 ld a5,0(s3) + 8020736e: 97ca add a5,a5,s2 + 80207370: 4705 li a4,1 + 80207372: 00e79623 sh a4,12(a5) disk.desc[idx[0]].next = idx[1]; - 802072e0: f8442783 lw a5,-124(s0) - 802072e4: 0009b703 ld a4,0(s3) - 802072e8: 974a add a4,a4,s2 - 802072ea: 00f71723 sh a5,14(a4) + 80207376: f8442783 lw a5,-124(s0) + 8020737a: 0009b703 ld a4,0(s3) + 8020737e: 974a add a4,a4,s2 + 80207380: 00f71723 sh a5,14(a4) disk.desc[idx[1]].addr = (uint64) b->data; - 802072ee: 0792 slli a5,a5,0x4 - 802072f0: 0009b703 ld a4,0(s3) - 802072f4: 973e add a4,a4,a5 - 802072f6: 058a8693 addi a3,s5,88 - 802072fa: e314 sd a3,0(a4) + 80207384: 0792 slli a5,a5,0x4 + 80207386: 0009b703 ld a4,0(s3) + 8020738a: 973e add a4,a4,a5 + 8020738c: 058a8693 addi a3,s5,88 + 80207390: e314 sd a3,0(a4) disk.desc[idx[1]].len = BSIZE; - 802072fc: 0009b703 ld a4,0(s3) - 80207300: 973e add a4,a4,a5 - 80207302: 20000693 li a3,512 - 80207306: c714 sw a3,8(a4) + 80207392: 0009b703 ld a4,0(s3) + 80207396: 973e add a4,a4,a5 + 80207398: 20000693 li a3,512 + 8020739c: c714 sw a3,8(a4) if(write) - 80207308: e40c92e3 bnez s9,8020714c <virtio_disk_rw+0xba> + 8020739e: e40c92e3 bnez s9,802071e2 <virtio_disk_rw+0xba> disk.desc[idx[1]].flags = VRING_DESC_F_WRITE; // device writes b->data - 8020730c: 0001e717 auipc a4,0x1e - 80207310: cf473703 ld a4,-780(a4) # 80225000 <disk+0x2000> - 80207314: 973e add a4,a4,a5 - 80207316: 4689 li a3,2 - 80207318: 00d71623 sh a3,12(a4) - 8020731c: bd3d j 8020715a <virtio_disk_rw+0xc8> + 802073a2: 0001e717 auipc a4,0x1e + 802073a6: c5e73703 ld a4,-930(a4) # 80225000 <disk+0x2000> + 802073aa: 973e add a4,a4,a5 + 802073ac: 4689 li a3,2 + 802073ae: 00d71623 sh a3,12(a4) + 802073b2: bd3d j 802071f0 <virtio_disk_rw+0xc8> -000000008020731e <virtio_disk_intr>: +00000000802073b4 <virtio_disk_intr>: void virtio_disk_intr() { - 8020731e: 1101 addi sp,sp,-32 - 80207320: ec06 sd ra,24(sp) - 80207322: e822 sd s0,16(sp) - 80207324: e426 sd s1,8(sp) - 80207326: e04a sd s2,0(sp) - 80207328: 1000 addi s0,sp,32 + 802073b4: 1101 addi sp,sp,-32 + 802073b6: ec06 sd ra,24(sp) + 802073b8: e822 sd s0,16(sp) + 802073ba: e426 sd s1,8(sp) + 802073bc: e04a sd s2,0(sp) + 802073be: 1000 addi s0,sp,32 acquire(&disk.vdisk_lock); - 8020732a: 0001e517 auipc a0,0x1e - 8020732e: d7e50513 addi a0,a0,-642 # 802250a8 <disk+0x20a8> - 80207332: ffff9097 auipc ra,0xffff9 - 80207336: 394080e7 jalr 916(ra) # 802006c6 <acquire> + 802073c0: 0001e517 auipc a0,0x1e + 802073c4: ce850513 addi a0,a0,-792 # 802250a8 <disk+0x20a8> + 802073c8: ffff9097 auipc ra,0xffff9 + 802073cc: 2fe080e7 jalr 766(ra) # 802006c6 <acquire> while((disk.used_idx % NUM) != (disk.used->id % NUM)){ - 8020733a: 0001e717 auipc a4,0x1e - 8020733e: cc670713 addi a4,a4,-826 # 80225000 <disk+0x2000> - 80207342: 02075783 lhu a5,32(a4) - 80207346: 6b18 ld a4,16(a4) - 80207348: 00275683 lhu a3,2(a4) - 8020734c: 8ebd xor a3,a3,a5 - 8020734e: 8a9d andi a3,a3,7 - 80207350: cab9 beqz a3,802073a6 <virtio_disk_intr+0x88> + 802073d0: 0001e717 auipc a4,0x1e + 802073d4: c3070713 addi a4,a4,-976 # 80225000 <disk+0x2000> + 802073d8: 02075783 lhu a5,32(a4) + 802073dc: 6b18 ld a4,16(a4) + 802073de: 00275683 lhu a3,2(a4) + 802073e2: 8ebd xor a3,a3,a5 + 802073e4: 8a9d andi a3,a3,7 + 802073e6: cab9 beqz a3,8020743c <virtio_disk_intr+0x88> int id = disk.used->elems[disk.used_idx].id; if(disk.info[id].status != 0) - 80207352: 0001c917 auipc s2,0x1c - 80207356: cae90913 addi s2,s2,-850 # 80223000 <disk> + 802073e8: 0001c917 auipc s2,0x1c + 802073ec: c1890913 addi s2,s2,-1000 # 80223000 <disk> panic("virtio_disk_intr status"); disk.info[id].b->disk = 0; // disk is done with buf wakeup(disk.info[id].b); disk.used_idx = (disk.used_idx + 1) % NUM; - 8020735a: 0001e497 auipc s1,0x1e - 8020735e: ca648493 addi s1,s1,-858 # 80225000 <disk+0x2000> + 802073f0: 0001e497 auipc s1,0x1e + 802073f4: c1048493 addi s1,s1,-1008 # 80225000 <disk+0x2000> int id = disk.used->elems[disk.used_idx].id; - 80207362: 078e slli a5,a5,0x3 - 80207364: 973e add a4,a4,a5 - 80207366: 435c lw a5,4(a4) + 802073f8: 078e slli a5,a5,0x3 + 802073fa: 973e add a4,a4,a5 + 802073fc: 435c lw a5,4(a4) if(disk.info[id].status != 0) - 80207368: 20078713 addi a4,a5,512 - 8020736c: 0712 slli a4,a4,0x4 - 8020736e: 974a add a4,a4,s2 - 80207370: 03074703 lbu a4,48(a4) - 80207374: e335 bnez a4,802073d8 <virtio_disk_intr+0xba> + 802073fe: 20078713 addi a4,a5,512 + 80207402: 0712 slli a4,a4,0x4 + 80207404: 974a add a4,a4,s2 + 80207406: 03074703 lbu a4,48(a4) + 8020740a: e335 bnez a4,8020746e <virtio_disk_intr+0xba> disk.info[id].b->disk = 0; // disk is done with buf - 80207376: 20078793 addi a5,a5,512 - 8020737a: 0792 slli a5,a5,0x4 - 8020737c: 97ca add a5,a5,s2 - 8020737e: 7798 ld a4,40(a5) - 80207380: 00072223 sw zero,4(a4) + 8020740c: 20078793 addi a5,a5,512 + 80207410: 0792 slli a5,a5,0x4 + 80207412: 97ca add a5,a5,s2 + 80207414: 7798 ld a4,40(a5) + 80207416: 00072223 sw zero,4(a4) wakeup(disk.info[id].b); - 80207384: 7788 ld a0,40(a5) - 80207386: ffffb097 auipc ra,0xffffb - 8020738a: 0b2080e7 jalr 178(ra) # 80202438 <wakeup> + 8020741a: 7788 ld a0,40(a5) + 8020741c: ffffb097 auipc ra,0xffffb + 80207420: 01c080e7 jalr 28(ra) # 80202438 <wakeup> disk.used_idx = (disk.used_idx + 1) % NUM; - 8020738e: 0204d783 lhu a5,32(s1) - 80207392: 2785 addiw a5,a5,1 - 80207394: 8b9d andi a5,a5,7 - 80207396: 02f49023 sh a5,32(s1) + 80207424: 0204d783 lhu a5,32(s1) + 80207428: 2785 addiw a5,a5,1 + 8020742a: 8b9d andi a5,a5,7 + 8020742c: 02f49023 sh a5,32(s1) while((disk.used_idx % NUM) != (disk.used->id % NUM)){ - 8020739a: 6898 ld a4,16(s1) - 8020739c: 00275683 lhu a3,2(a4) - 802073a0: 8a9d andi a3,a3,7 - 802073a2: fcf690e3 bne a3,a5,80207362 <virtio_disk_intr+0x44> + 80207430: 6898 ld a4,16(s1) + 80207432: 00275683 lhu a3,2(a4) + 80207436: 8a9d andi a3,a3,7 + 80207438: fcf690e3 bne a3,a5,802073f8 <virtio_disk_intr+0x44> } *R(VIRTIO_MMIO_INTERRUPT_ACK) = *R(VIRTIO_MMIO_INTERRUPT_STATUS) & 0x3; - 802073a6: 00003797 auipc a5,0x3 - 802073aa: a7a7b783 ld a5,-1414(a5) # 80209e20 <digits+0xaa0> - 802073ae: 439c lw a5,0(a5) - 802073b0: 8b8d andi a5,a5,3 - 802073b2: 00003717 auipc a4,0x3 - 802073b6: a7673703 ld a4,-1418(a4) # 80209e28 <digits+0xaa8> - 802073ba: c31c sw a5,0(a4) + 8020743c: 00003797 auipc a5,0x3 + 80207440: 9ec7b783 ld a5,-1556(a5) # 80209e28 <digits+0xaa8> + 80207444: 439c lw a5,0(a5) + 80207446: 8b8d andi a5,a5,3 + 80207448: 00003717 auipc a4,0x3 + 8020744c: 9e873703 ld a4,-1560(a4) # 80209e30 <digits+0xab0> + 80207450: c31c sw a5,0(a4) release(&disk.vdisk_lock); - 802073bc: 0001e517 auipc a0,0x1e - 802073c0: cec50513 addi a0,a0,-788 # 802250a8 <disk+0x20a8> - 802073c4: ffff9097 auipc ra,0xffff9 - 802073c8: 356080e7 jalr 854(ra) # 8020071a <release> -} - 802073cc: 60e2 ld ra,24(sp) - 802073ce: 6442 ld s0,16(sp) - 802073d0: 64a2 ld s1,8(sp) - 802073d2: 6902 ld s2,0(sp) - 802073d4: 6105 addi sp,sp,32 - 802073d6: 8082 ret + 80207452: 0001e517 auipc a0,0x1e + 80207456: c5650513 addi a0,a0,-938 # 802250a8 <disk+0x20a8> + 8020745a: ffff9097 auipc ra,0xffff9 + 8020745e: 2c0080e7 jalr 704(ra) # 8020071a <release> +} + 80207462: 60e2 ld ra,24(sp) + 80207464: 6442 ld s0,16(sp) + 80207466: 64a2 ld s1,8(sp) + 80207468: 6902 ld s2,0(sp) + 8020746a: 6105 addi sp,sp,32 + 8020746c: 8082 ret panic("virtio_disk_intr status"); - 802073d8: 00003517 auipc a0,0x3 - 802073dc: 9d050513 addi a0,a0,-1584 # 80209da8 <digits+0xa28> - 802073e0: ffff9097 auipc ra,0xffff9 - 802073e4: d64080e7 jalr -668(ra) # 80200144 <panic> + 8020746e: 00003517 auipc a0,0x3 + 80207472: 94250513 addi a0,a0,-1726 # 80209db0 <digits+0xa30> + 80207476: ffff9097 auipc ra,0xffff9 + 8020747a: cce080e7 jalr -818(ra) # 80200144 <panic> ... 0000000080208000 <_trampoline>: diff --git a/target/kernel.sym b/target/kernel.sym index 66e9e9d..9cda02b 100644 --- a/target/kernel.sym +++ b/target/kernel.sym @@ -1,8 +1,8 @@ 0000000080200000 .text 0000000080209000 .rodata 000000008020a000 .data -000000008020b8c0 .got -000000008020b920 .got.plt +000000008020b8e8 .got +000000008020b948 .got.plt 000000008020c000 .bss 0000000000000000 .riscv.attributes 0000000000000000 .comment @@ -33,13 +33,13 @@ 0000000080201c0e freeproc 0000000080201c78 allocproc 000000008020a000 first.1 -000000008020ab50 states.0 +000000008020ab78 states.0 0000000000000000 swtch.o 0000000000000000 trap.c 0000000000000000 syscall.c 0000000080202c8c argraw -000000008020ab78 syscalls -000000008020b210 sysnames +000000008020aba0 syscalls +000000008020b238 sysnames 0000000000000000 sysproc.c 0000000000000000 bio.c 0000000000000000 sleeplock.c @@ -47,101 +47,102 @@ 0000000000000000 pipe.c 0000000000000000 exec.c 0000000000000000 sysfile.c -0000000080204346 argfd -00000000802043ae fdalloc -00000000802043f0 create +0000000080204348 argfd +00000000802043b0 fdalloc +00000000802043f2 create 0000000000000000 kernelvec.o 0000000000000000 timer.c 0000000000000000 disk.c 0000000000000000 fat32.c -00000000802050be read_fat -0000000080205134 alloc_clus -0000000080205276 write_fat -00000000802052f6 reloc_clus -00000000802053fe rw_clus -000000008020554a eget +00000000802050ce read_fat +0000000080205144 alloc_clus +0000000080205286 write_fat +0000000080205306 reloc_clus +000000008020540e rw_clus +000000008020555a eget 000000008021e5b8 ecache -0000000080205658 read_entry_name -0000000080206840 lookup_path -000000008020b8a8 illegal.1 -000000008020b8b8 illegal.0 +0000000080205668 read_entry_name +0000000080206850 lookup_path +000000008020b8d0 illegal.1 +000000008020b8e0 illegal.0 000000008021e428 fat 000000008021e450 root 0000000000000000 plic.c 0000000000000000 console.c 0000000000000000 shutdown.c +0000000000000000 times.c 0000000000000000 virtio_disk.c -0000000080206e8c free_desc +0000000080206f22 free_desc 0000000080223000 disk -000000008020b8c0 _GLOBAL_OFFSET_TABLE_ -0000000080204bda sys_remove -0000000080205fb0 edup +000000008020b8e8 _GLOBAL_OFFSET_TABLE_ +0000000080204bdc sys_remove +0000000080205fc0 edup 0000000080200c68 mappages 00000000802014a4 copyinstr -0000000080206b32 consoleread +0000000080206b42 consoleread 00000000802008b4 safestrcpy -00000000802045e0 sys_close +00000000802045e2 sys_close 0000000080202280 yield 0000000080214028 kmem 0000000080202512 either_copyout -0000000080204fbe timerinit +0000000080204fce timerinit 0000000080214180 proc 00000000802016cc proc_kpagetable -0000000080203980 fileread +0000000080203982 fileread 000000008020018e printf -000000008020319e sys_sbrk +00000000802031a0 sys_sbrk 0000000080208000 trampoline 0000000080214000 panicked -0000000080205be6 emake -0000000080206a4a plic_claim -00000000802049bc sys_dev -00000000802069f0 plicinit -0000000080206a74 plic_complete +0000000080205bf6 emake +0000000080206a5a plic_claim +00000000802049be sys_dev +0000000080206a00 plicinit +0000000080206a84 plic_complete 00000000802020aa sched 00000000802007be memmove -0000000080202f20 syscall +0000000080202f22 syscall 0000000080201a10 cpuid -0000000080203154 sys_fork +0000000080203156 sys_fork 0000000080218af0 bcache -00000000802047c2 sys_mkdir -00000000802061a4 etrunc -0000000080206a08 plicinithart +00000000802047c4 sys_mkdir +00000000802061b4 etrunc +0000000080206a18 plicinithart 0000000080201f5a reparent -0000000080205744 fat32_init -00000000802069d4 enameparent -0000000080202ef0 argstr +0000000080205754 fat32_init +00000000802069e4 enameparent +0000000080202ef2 argstr 0000000080200f9e uvmdealloc 000000008020a000 sdata -0000000080203814 filedup -0000000080203346 binit +0000000080203816 filedup +0000000080203348 binit 00000000802012b4 uvmclear -00000000802060da eremove -0000000080204514 sys_read +00000000802060ea eremove +0000000080204516 sys_read 0000000080200822 memcpy 0000000080200cf6 kvmmap 0000000080200440 kfree 0000000080201a20 mycpu 00000000802027a4 devintr -000000008020590a eread +000000008020591a eread 000000008020a004 nextpid -0000000080203752 fileinit +0000000080203754 fileinit 0000000080208090 userret 0000000080200682 initlock -0000000080205b2e formatname +0000000080205b3e formatname 00000000802012e6 copyout 00000000802022bc sleep 00000000802000b8 printstring -0000000080204f30 kernelvec -000000008020b8bf edata +0000000080204f40 kernelvec +000000008020b8e7 edata 0000000080200988 wcsncmp -0000000080203298 sys_kill -0000000080203cb2 pipeclose -000000008020462e sys_fstat -0000000080206aa4 consolewrite +000000008020329a sys_kill +0000000080203cb4 pipeclose +0000000080204630 sys_fstat +0000000080206ab4 consolewrite 0000000080209000 rodata_start -00000000802069b6 ename +00000000802069c6 ename 00000000802004c2 freerange -000000008020620e elock +000000008020621e elock 0000000080200ae4 kvminithart 000000008020100a uvmalloc 0000000080200f14 uvminit @@ -150,61 +151,62 @@ 0000000080201bbc proc_freepagetable 0000000080201894 reg_info 0000000080201b20 proc_pagetable -00000000802031e8 sys_sleep +00000000802031ea sys_sleep 0000000080201672 kvmfree -000000008020505a disk_init -0000000080203b12 dirnext -00000000802037aa filealloc +000000008020506a disk_init +0000000080203b14 dirnext +00000000802037ac filealloc 0000000080202438 wakeup -0000000080206f0c virtio_disk_init +0000000080206fa2 virtio_disk_init 0000000080201a3c myproc 0000000080200000 BASE_ADDRESS -0000000080204a8e sys_readdir +0000000080204a90 sys_readdir 0000000080200b08 walk -000000008020467c sys_open +000000008020467e sys_open 00000000802000e4 backtrace -0000000080206c88 consoleintr -0000000080206c4a consputc +0000000080206c98 consoleintr +0000000080206c5a consputc 00000000802024a2 kill 0000000080201ada allocpid 00000000802013c4 copyin 0000000080200910 wnstr 000000008020116c uvmfree 0000000080201372 copyout2 -0000000080203a42 filewrite +0000000080203a44 filewrite 0000000080200942 snstr -0000000080202e6c argint +0000000080202e6e argint 0000000080209000 srodata 0000000080200e22 vmunmap -000000008020330e sys_trace -0000000080203f0c exec +0000000080206e9c sys_times +0000000080203310 sys_trace +0000000080203f0e exec 0000000080209000 etext -000000008020457a sys_write +000000008020457c sys_write 000000008020071a release -0000000080202e3c fetchstr +0000000080202e3e fetchstr 000000008020233a wait -0000000080206292 eput +00000000802062a2 eput 0000000080214000 boot_stack_top 0000000080202706 usertrapret 0000000080201fc0 scheduler -0000000080205bb8 cal_checksum +0000000080205bc8 cal_checksum 0000000080208000 _trampoline 0000000080226000 kernel_end -000000008020659c dirlookup -0000000080203866 fileclose -00000000802066fa ealloc +00000000802065ac dirlookup +0000000080203868 fileclose +000000008020670a ealloc 0000000080200bf0 kwalkaddr 00000000802005c0 freemem_amount 0000000080202848 usertrap 000000008020083a strncmp 000000008021e408 tickslock -0000000080203d22 pipewrite -00000000802050a6 disk_intr +0000000080203d24 pipewrite +00000000802050b6 disk_intr 0000000080200876 strncpy 000000008021d450 ftable -000000008020731e virtio_disk_intr -0000000080209e30 erodata -00000000802044c2 sys_dup +00000000802073b4 virtio_disk_intr +0000000080209e38 erodata +00000000802044c4 sys_dup 0000000080201452 copyin2 0000000080200144 panic 000000008020c000 bss_start @@ -214,7 +216,7 @@ 0000000080202548 either_copyin 0000000080201e42 fork 0000000080214078 cpus -00000000802036b8 releasesleep +00000000802036ba releasesleep 0000000080200000 _entry 0000000080200698 holding 00000000802006c6 acquire @@ -223,76 +225,76 @@ 000000008020a008 initcode 00000000802026ca trapinithart 0000000080200762 memset -0000000080202e8e sys_test_proc +0000000080202e90 sys_test_proc 00000000802009e4 main -0000000080203662 acquiresleep +0000000080203664 acquiresleep 0000000080208000 uservec 0000000080200d2e kvminit 00000000802015c4 kfreewalk -00000000802035ec bunpin -0000000080202ece argaddr +00000000802035ee bunpin +0000000080202ed0 argaddr 0000000080200000 text_start -0000000080206e70 sys_shutdown -00000000802032ca sys_uptime +0000000080206e80 sys_shutdown +00000000802032cc sys_uptime 000000008020a000 data_start -0000000080204adc sys_getcwd +0000000080204ade sys_getcwd 000000008020036e printfinit 0000000080201732 vmprint 0000000080200ee6 uvmcreate -0000000080205a02 ewrite +0000000080205a12 ewrite 0000000080201dc6 growproc -00000000802036fc holdingsleep +00000000802036fe holdingsleep 0000000080201554 copyinstr2 0000000080201d4a userinit -00000000802033e6 bread -0000000080203e26 piperead +00000000802033e8 bread +0000000080203e28 piperead 00000000802003a0 print_logo 000000008021e420 ticks -0000000080206e1a consoleinit +0000000080206e2a consoleinit 0000000080200bae walkaddr 0000000080202a2e trapframedump 000000008020257c procdump -0000000080203512 brelse -0000000080202da2 sys_sysinfo -0000000080204fe6 set_next_timeout -0000000080202fc4 sys_exec +0000000080203514 brelse +0000000080202da4 sys_sysinfo +0000000080204ff6 set_next_timeout +0000000080202fc6 sys_exec 0000000080200c46 kvmpa -00000000802063ca estat +00000000802063da estat 0000000080202660 swtch 0000000080226000 ebss_clear 00000000802005d6 push_off -0000000080204cfe sys_rename +0000000080204d00 sys_rename 0000000080200622 pop_off -00000000802034d6 bwrite -000000008020500c timer_tick -000000008020508c disk_write +00000000802034d8 bwrite +000000008020501c timer_tick +000000008020509c disk_write 0000000080202180 exit 0000000080201100 freewalk -000000008020316c sys_wait -0000000080203106 sys_exit -0000000080203628 initsleeplock -0000000080206244 eunlock +000000008020316e sys_wait +0000000080203108 sys_exit +000000008020362a initsleeplock +0000000080206254 eunlock 0000000080214058 kernel_pagetable -0000000080207092 virtio_disk_rw +0000000080207128 virtio_disk_rw 00000000802008e6 strlen -0000000080205072 disk_read -00000000802048b0 sys_pipe +0000000080205082 disk_read +00000000802048b2 sys_pipe 000000008020c000 boot_stack 0000000080202630 procnum 00000000802009c0 strchr -0000000080206412 enext +0000000080206422 enext 0000000080201620 kvmfreeusr 0000000080222c20 cons 000000008020055a kalloc -0000000080202dec fetchaddr +0000000080202dee fetchaddr 000000008021d3b0 devsw -000000008020313a sys_getpid -0000000080203bd8 pipealloc +000000008020313c sys_getpid +0000000080203bda pipealloc 0000000080200000 kernel_start -000000008020481c sys_chdir -0000000080205ff4 eupdate +000000008020481e sys_chdir +0000000080206004 eupdate 0000000080202940 kerneltrap -00000000802035b0 bpin +00000000802035b2 bpin 000000008020199a procinit -000000008020391c filestat +000000008020391e filestat 0000000080214060 pid_lock diff --git a/xv6-user/_cat b/xv6-user/_cat index f6ee1ad02619e46f94fd04647975ea52a0d3d6fa..03987eef1e71d9e2f1e60cca3274fadef5fbe355 100755 GIT binary patch delta 4377 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 Kb{@Jr=lvJC@r1?z delta 4315 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 CbBGN9 diff --git a/xv6-user/_echo b/xv6-user/_echo index 5f84c66ea3021fe8473329409d4005b8c4d1214a..cd80802f3f652e3176b314daf037c7d399ee63f3 100755 GIT binary patch delta 4297 zcma)9eQZ=!7Qgq+$DP+g?eyz)u<}(DEJ#a>(~4-RDY&?l&R_}cOj}C93IsNQX1B5~ z!&K3xyRsdQiA!P}@FT5C5FEuuYXoE1)jwS7AEd1ArhaX9O?Ef9#;}CKp7-XQd6QSz z>`Ug|-~FB6Ip>~p-`8AvM~;lh!3A<8ar-Q-F((l(Np#ieOLSo!p~TT&XxsZ?hFq?B z4y0P;sLKt$K^^iuGqocZVX>!Lu7pjV_imbY7fj!;H8ee!D+K)d_0&S|tx~Rru=-LC zL5**#tb*r#)!Mg3aL#vI@wS4=$ScFoDbzka<Tr3ER6~%fSI8O&>T7evn_ri%pOh<C zegK1d>G~6s*RG9U!Jj$a;P->Wz9>t#Hw&|WK1}M5c++LV&vN!^n#AG{<>t#E_;V{| zW2zzdMJY#8-%R`5qxETUreJ|T=uSK2xzgihxLojzoDKbjH8KxI3zy2}aIvsLPC!}F zeVSK6SJ5m@^FX}lm$DHii%iv$;#*`HG~>A%b{3b*c1R#T1#cA3k)OdBp8pB|E}k3c zq{Y2~IXf_)lo9QK5Uv4OTw>hwe3lh5Rw<*}lc+hCWj*P%dPbnHq*=DYXC?jeuMjmB zV#!Y%cgPUDZPfT1aW~9khfI&3z<-RlOIFYo;aQ^zQIbE2Hr-VRAC=a~vv8@j1q*8m zROUV9OFOwxRXPj<fo5#vp8{8>%QdMB^J_KeT2KJ_6<soz+FfzhjmEmlgRaycs>d~4 z#L+t|aam(`)|)*m2zFv0cLysm^wD5F_U}u?XH)*#dDCKfw8*72%7|ikH&ao?kV|sE zBqK?oCa60eRz?&<j(a0zG_8zbm08j#2Gu<2%0o2biWqV}3OYp@y`J*AG22Or`CsNd zJ&NHdQ{9T;X{LG<!*Qm%6~ix>>QM}TV5(a&yuwtEiZPx}t&|%T!~2MG_4daUPgb$6 zM=|VWs#`I9oT(ngaFD5P#c<Rs%>LsY(W4Ms$A=l2P-_WqXKr&wcG{*GvZvP9D>D1g zO{IGKgzwsnq}oAq?sSX|qh#RbGVkmx^W4jsv=HW<ePZ6(8RFMvH^XWG8HAcmE8>e! zt4dBOOMgtfB%|fBEUCECEf8N-6yrL%DYnoK+(`+{z>IehCpRmGy;(BG@7gkM+<BWC z_oTN~d~b8yFJW&Sx9S0#;w~MuDZW@<u&E;i-_1}$l@VTHjhJ6<7K)Q`Ci##p<c%|{ zXIxD|JS+MHwv?wqrW;IJs8)J;JV_%yAsAjxQ!!yZA{0#pKPhCy_TIzZQN@tu=p0RE zoUhtKh8)il+9AhT8EaRJvtqW}F*$&2x4nDWyF)R|a_+c}bBD+*of}}b^C>s&e?LWZ z?UPBxlVhBwQ!zZvy8T*G@#Gwn`(oJhtu*6SnRys<sd5wdESBlGwgjDbk@Jf*%BW&^ zf~aXRF}(P3{M|e(lFHd<4{pdT48)%e%^WDA7`75+ZTw7I`V*E$6~ks&^gwCsEWNb8 zw_jciPteQPiY3&Kq`1P$jVefrWi;lv_`RM~%yp6tAL)At_S#fzfbc=)B8uS<QyYci zHD!`V)J!sSqW_sZGBtTb{l+IAww`v+awfbnzN7Md%xzH&bC}w!7;a~3OC|xgO>Pm2 zD;<DWe>zWpfyBpgRvxph`#4BMF+4z&Ywxb48fL$Y?*I11*B8~ZhqtXmS<t*W9wpAo z!jn_BkRe|rrcNwGM~_G^#oI{FR(?Hr`C+$=o>rnMTb@T16!=87)p_p>Vt6;bnU;~k z%UwI>gZPGWSkqJ%;1*jU=;RVEQJ0E0{ayz6{+LUqbR;Q)u&LPy@GbHhS*viALKCwg z(Tv~ea0WGX^m$5a5cgXemskN8o9F9a<E#LE@?cKLkW1jM(EV}|#6yL}`N#^o)hN99 z6(mANpbw|{n1%levGov~2^p&oQ^Yd-xHgZ{^dOGlXlCLK_>TA?9L-#pNKdpl4s*gr z;4QNH94i@xFj_w%>sp8J#}G&BAIX~U@I4PF!v;)*-7C$!gAU)X(92xs1nv4_oSTQa zUQ_>bhyGvSUuOh<M62n=uYteNUxcgBfL1roOy7MDUmbR%HIJ;V4r?JCU1zMGLDr=X z>nw|Ri4g6txkmF?Ncz(beHF+Djn&J@dd^{OplHrLZ9?9xYaWi~!Pj96Y<kcLw2}4G zv{5Xgu?rGt-Dbs<;<zK%PB??sM=k5rtLV>g5!d;|4XgteKeg)LQm*BWT+c$d#Rwcm zt69ZmT3-c?M<9;YSID{wNAsAM9>g&?*@D+ei~AOH?{+vMkC0a*{Jkaa-nR3hM^anY zhcq~~VXiy@7dBMtd~5#>{H?V*--iJRx7N!5B=Fn_V|d;V{<eC#3&MCVheTVwe(&t` z5{BSHTdn*X_#^eQ7s7Zx4+%UUf-yXw1Anw$51CITJSLzmTB}#BPtV?m!_iv#4;YKi F|1YvfX14$U delta 4291 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 diff --git a/xv6-user/_find b/xv6-user/_find index 8552c038799efe9f4b27ac439c4eedc2e6b38f37..9484bdc59e572cf9bcbfec2e357fe594cc6b0b60 100755 GIT binary patch delta 4578 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 G%lr>P!ovjs delta 4487 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 aOA1!Et#tH-%;5=mux%Cok72BB(f<Js1-xni diff --git a/xv6-user/_grep b/xv6-user/_grep index e753f29013ddc0f642525d7d4cd27fd8d381d869..a5d08eb230669d5fc2b211dbf436706aa447cd06 100755 GIT binary patch delta 4494 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 delta 4421 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 diff --git a/xv6-user/_init b/xv6-user/_init index bae23268a19dfd1e0dfa45f7911413453345c4c5..281abcafb7e8255670884b4e1415ad553ea505db 100755 GIT binary patch delta 4690 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 delta 4607 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 N8Fz4Y5r(&|`X6-6;oSfL diff --git a/xv6-user/_kill b/xv6-user/_kill index 3dbb2ee8f0f7e67b20a33ab9c8a5fa21820acf44..0afb6a5c07888b1eba6350a99a7fc5f6eb220020 100755 GIT binary patch delta 4283 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 F{{>9aW`Y0! delta 4255 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 diff --git a/xv6-user/_ls b/xv6-user/_ls index ab8a173861a35c7134afa12f48334e77dd996254..527642860cc216d56b21861a3167a5bda4e86552 100755 GIT binary patch delta 4356 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 PlQ;{sn6nEYqlNzi5-gtE delta 4337 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 diff --git a/xv6-user/_mkdir b/xv6-user/_mkdir index 8ab315c54443b1bab6889d4de790dc721d9eae57..5e46e7eafcc5e24f243cd1e64765abc30d6d0524 100755 GIT binary patch delta 4452 zcma)A4RBP|6~6avcJIC<U^XOq*;*S2R>CS-LNtk?B@l@nY(joyb=ghG4{<@8c2=p= zm@?V0qCzuuHXIelGP6XWlQPyq7dlAmPp68-VH}xZtkbC(tW+I;80a|Ec7*i2x99Ax zFVg9o*>}JDo$s7;@45H=?V)4xi(@iTCBK+hT%ir-Pi!lj=xfkBbzvRRiOKQB2Oia1 zc4PO$u~#-b37uV%=-XW?1U%A`v7Su@WXf?pxD)yol*h-U$MtFDN1|w-I&#H%J2*eT zk`A-?B2+q;NhbuHzrW_xa+ouwt!mp{fYHW(kg9NfTS^^T)O&IhEOKv_b&zl`lLz2W z?nR}GOD~5GOzl=EeQZ;Sf$coC31-|rc`NwzwfW+=@0SNI%a)dxVY|LMu>JDP%yVDj z&up*q`?Jk1a&&8RF#Df_>+-j_(&d52^G7sIV$ooJL6P)9O@UuFr1}e1N;w737B<RP zQtuYN?bPBL94)T$`0~<za~<jSGdN%TbGZ_>&a2fl1&8O=%BAp+c|Lgtib|R*|3hgG zN+F~SJNC)2l-=4yhY<PiAb0a6_;JZr*#H+yYQL+I_&1niR5Kky+9Rf$=3XisMLE_z zU$qVk=MB(by0D_dnI4rHVfrhYxDbwmu&;E1JOQua`S0*yX=P1UPRt&hQ97e=jOOqU z=I{w<EW1wbg&>}v!;B^Hv$Ex~6;71xkbi}C<3=ptPmLvVHT=q`^)%q(n#T}M)I45< z&y1sGeY7#1T{yt9qRVK|9YHu&UMr8or{(K3%?-`o>bWCs%Skv;R=x*Dz3sRzZ+d6u z$kx=Gi|REPuhJokKc}xx`ce_!i98f6@sB%b@Tp_V-qCPC6Sw$rh=07LNnQe3*NZFD zU*|U$YggS0to-RZzdW9j_4gLWG#YRfwKAj_`k4wVhCIEzeKM33>I|j*H?`=@kmFuW z8BQx>IN=;=7=vD-?Y5d07K1Y6d=zw+GW>PQuZ`JFO3eQ>=ZPqWhnN~r4397sQ4CKp zHJ}*2#Z*Kw{D`Rm#qa`C5f#f|E@7{d1na1E4DX03?liJ4q8JV_HJ}(qnTjZe+nE|r z3=g@4S%16+A_}o}{4OICs+sTx<~C+zN3s+{_SE9TBC`&6(NtY=;hy<MQuR@vD;;CQ zAu@1rnYUM#d9GzK4TO1notU>*hWJ=+F{}cRL8uZM5pO<iX>!)I^oIoA-WJMlCKb;# zNNxpeS}3#A<{D-EVz}WsQ5Sidi5L$OCpRjFLpd_W&u3*^$TzYS*YJZZ#pR2Ap5?f7 zE3#|LRf}gS-aNaq)Dr}s&rm`Y5xzNx<6N9b-XmfeAupskd&W1AvvXx!V2QcwV|tZI z3)M<@jA3f=j=}IeQPv$pagT2tG8D^tN7y^87_uI{!^w>IKeIxH9MBSGL!M$~w_=zR zvKvFjNWlSQch-A|y?YeH9Pgg&fHKZKA~SR@fLYEF3bd74$0%;ebO*2hy_{x)Vt9mw zV_H&i=T#<0%}v`)Jua1*hcVAp_GfCwL)2=}caVIa%H#V_SRuBK{nQr5#8mZG{9QXG zlFD9ZCoV_@M&ehK+sF%7o?$Cd^sHdzcUT!#CbV|{ZP0&5dF(hn?mpnhUPv+APtRqF z^)V?fu(DVANKs8~zJs6nNyS_j*<`PZ5FE-<u~EWt=0b|$FPQ2TnK5OOhg30{Inn=2 z9-5szq{iH0lU4p5oGB#KG)?bIp5~xpc!jBris1(K9Lyx(vdKZAc&4K;{r&6pT_k=M zdkbS(>jNAlq!>O#lw%~CRD0Mjqx-*o@o`3jj_}}nlm*Ra;AY~iEZjMm6*A;aV(P?= z=;##bp|~38M#_&17vJrw>24+3a^)J$z~vTxtMab7#PDjmG9_avRSlADr4VgfiZAPv zZH5e{UTAw=;!EGQcEiit+zN@OD*S0eidHz>Zs0rn$#%b&U*cHPj6e#92!f}>kbSVY zW6^?h$Q2{Y?`Cx*UWaXwxH!`Z_ji2HGoLOdGKyh1++nO4CEpG74m?8Uhb>=C@Mju( zfyGO4kiIXNe+E3AhIbOX=192mACq|sR&^Q>?R0zoVDmc)_oLs76!mX5>uWHH);Gvn zW}CrVa2l<DA?sZ>-*-WF8Q%BNYL4g(Eo?RR&EpfO=`vy$5Si8|EKUfv{)>3N6HZfg zW{@vJ{nNHwPPCi+12#UN_(mIlO`3<-yFA_!#O4^@#_tI8XiPWaTDXYgpKmE0B1&H+ zWE3~Sf;$aw4aGlYi@zK?(b`PD_BC7!+t3=Iyc}_uKnM<_wVxsv+G>6uymzM&`w>~s z+44SU@w0c$G{!dPXns<f$L;AxY`=<r+~Q}?I$`k=ezMNveG;)5^IKH6K8pDaOs>P7 zm{y7r+X#ONr_uUrvOaFJra%S^{RN8L01E=~ynBCm&z96=pk0IWcUQ{&;0gNmDZ0uN zuqIfq2Wf3?g`L4B{F~q;o(Dl+--KVHYw(<aop?6j<oYIk<^1$8@p=i>%d@a1)Fh*@ x6VGShB%UWg4>xIZ+Tf1x3O!-oh445F6XAM28c6qEg45WmzB}DJ0iN|0{{`V0l+*wK delta 4433 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 diff --git a/xv6-user/_mv b/xv6-user/_mv index 28a83cb039155539b8e4713b1bb5bafe1d941398..7231c100c24b4af21dfb07d6ca79328184d73899 100755 GIT binary patch delta 4445 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 Slzt5ZD1FjmO5-pQS@2(s&YpY# delta 4388 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 W1j~fdy|-Wrd*fZ{-dS*m7ylQ>ypgm3 diff --git a/xv6-user/_rm b/xv6-user/_rm index 15f878a19328419c343f48b2e44d3f13b6e138ee..3264e8dcc17b07cbfb29513dd0ca5a813e0a48e0 100755 GIT binary patch delta 4323 zcma)9YitzP6~1TIyLZQ?)UWk=Qz!%{wPUyI*luh{EDTWzxQT18F<^FW{J<DW6V)^! zO(^v^RuXJAiEK_3M-lBhg;Z945QinLl}HexG?c2Tu#_Jttq?S7LQr2+sH&p4^vvuz zJF9W1I?~Sl?ss1Ie)sO3nScBWX6Im{0%j-gSYZt0PCijG*}K||naa6_CSTqk8Xpf$ zPlc4ir*<7OH%yV?laaTv3aSjXJJks%eK{DMFfri&sxf^Hzvi!nU*mTFTVH<W9{kdX zvA$(0k79pPl`0F|4sZ^e^<^l>s^A{@CO#jmg<W_ySRVSccp?7E%#<eAL*>O`YKwF^ z`pimbz^M71Ty^53(k%<HVZ&)0GuLeyTexv!_H+8#?M;5a^VoB;{Mxgy#9zVXxeo`@ z6UXOr4;TiJ9Jn$sAEH>3R}GD+zP!}{GpU!B6b6h@1CJM06hw2<5lemP_V4&f;j^#~ z_ZQU}0gbN~)zLgJ7FEIpG>h+r|KJ0~E8#PIsQ4f>;?-hu3gC*+GAPEz&~m86c&H3I zaG3CMJQBJUev7B*{xMz(t!mxMqkD~Nc2hloxbc)yzR@gxe-{6I7LOSoAYnX7QO7V= zvK(gd`z5W=hNnx$;394cSJ7l234a4N;m^Z$1&y>2_Vpm7+tc`Q_>GcY-X8wVhEgT@ z3uH5Wo%nib9h|~Hmv$I|Al?&+E*%c0qkQC6I*mV!w33ErBd`=6NS!NhFtDwn@Ni`> zL{oj0@8yuKqWU>sYOeNzL4%mQtD1&&=B_4E3+j7FzrOlvThhbzYe~BK`f50pf`*DE zR)7cjb#5W91=b0b&;n&jIY%L$RQdvIw7@L|3zWP!^Gu{YEt+JOYl4z~#+zc3KP><y z6)5#M=_1d>7kPeR&Mx+(`bVVBpcZ&isD3SQPN+dG@Vrp{THpsl4QhdZ5vpGcye`zB zwgme{!X7Q~Zl-*XjagbcYsGI+3mg)vUkiLhs6j1oOsIY>@MJ*Q`qO`5P!o2pH#2TZ z-^aLLxSbidIhPVBk;dp_Dzgr8o@!uJ1#jGv)C1fXr7ba>WP^w+yjNM_MavQ%i11#W zg!d}Lyp=76BLEweF69x)<}>b0E}EA4xH<}nGFX<>GSe;&%M()>xYHJmGI17dcqz1% zBke+h_b>-LwZNe)H^C=dHxcspE+raXbt#e0`nSu8boaVzE2=&1QnGnoaH$s=p2$#2 z7c*X+#YrtG1iO@#ag>F$XD_&tgZ=A96-g}JsL<<eTIn`EF%EJ|Cx*a(GUc2YT6%JD zK-_Yp_eyj^3lx8fP9!tY|8gA#N<zocO?h5CyR^WplwFk4Vh>3GU2gP{M0aa}S<&6@ zfHJ||Dl>Euz?O5E6OC}|8>TIp?$H1Ln3UO}1<r}%h>_IN`Hhgn_NMLSo=9ca5iE0s zzKmuvM5Bgc_i*e>Idc9aG-2nO;dY6oW}*k__mvry)Lxzav>+=ele|D|<S1Hsfo)9j zvqC)AiDyFF(AoVPapkv5tyBECyDE>pxE46W&tlH?H}<$Lo;^Cs9<|)&`s6vE)WU6L z8}#VC42N9G8fE;naB(d#DO8Wjj44w*u1nY~h5l#p_~PPm{bW$>cI1CXD#exl6HiYG zH=qR?LhaN7`-K|F6cE{9KxvujDE{>R+sqf(`4`kHvs~+=k|eGL{+KD>fuW?Hmbi@H z{~b$@GoH_0S+;KNK>Hc^AahO?=^S?*1<EF|{ZthN`dN}dBOj#lxCqE;SIeiBYRPsF z@C<T;s>V@1P{@p|W*{RO8v>%*G3;w8!jWwu{8q~{n4w-6I#Z9goCSLITi+Uv$YysE z)9rTp846Sz?rROx`}KHhbwpm}#HWb>D4*)YdGhJSPg~1xy-ZvovGRsi&(1Mw^VPK* zF|29ZSa2KvrP!$U<G!|V^N%>TpWl8Duz7^qd>V~>CNZrh93Iqh{uU5^3g_Fxk)Ki5 z9*O9GmCdgp#KL%IELiZiC+-B+#KMs`IqM~l^&RXZ>shwm;+etwI7!wI*c$i5eu!tt zdWo#|h%WH*MyYRKSMXXaZ2gsxZGF+<loIQ8=H)!R$m)Dfd_MUf@zgTNZu5_Nc+LD; z55FYM<DvF~NC9Dc3?I@LgniweZd570-X4xDcRYP+h`&eJsP4eaWQ}tE^Pc>xv0!sJ z(!{aeHM}3!leL}eO2&f>w&6aq?%>S%9?f^-%bUa2_t<*HQ}+iBzj)XDfpXh({3F@z z>%MfOp16tsn8Pog^|KBS*w9fBIZW8jxr%k`<(yO4*Fifm?Wu-6BRq<eWPO#bhdtI= zJkt?2f618}@p6Zi^WBGbJ)GLHrJcTox2>YT@%*-GQ;y6DG&>v2PF|Ze*xcC!YjB+I z19*<^(`asQf(dM<dp?eDZ!*`cOb_!2&Tnt9KbYf9um_vz{yvV={Scm``@3i+n#@i1 eQAF1zj3pY(iY@8hTR2I*kG7_J@8NvsivI$kx_7hy delta 4286 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 N@%u8p2`Jh)_kSypcq#w@ diff --git a/xv6-user/_sh b/xv6-user/_sh index 9f0d107be5a53c117c7a29891538bf29ee947a64..8c2b7fc4e84667ef277c528269419e032203cb5a 100755 GIT binary patch delta 5774 zcma)A3shBA8s7Wd$L0d!y`UVfpn!l6BvG_5ExDi=mZdn35?~-8nNKX5kR0y?y{4&? z^xI%lOHd~U-{AF?8KN_mPEAW~R->)P(QLxdWzw|DO1<-+d-l(DuC><ewa(e!{=fgR z_rLeqXP<NEj&k#kvVIUhR5v(Qxg1?r6IoY0%5u67^ObXTn@>4UEDM@lZ)L2*)$YCT z()QKr5XKBcu5K;mA;$Vd#$ZL_-sIKwXaX+>FH@5liwF+hQd(HtGh(GtX>w0@>(&>G zOoL&CF=+X~V0L-j4|mQttG!Xzl)XgqGe2E@s<D1BW6QT$HXVDUbmb4BhPPM1SA0p- zsXv0r_~WCm>6*n?^|)mlpjsI{C~1KuTPGZoZa;bcC<x<^Zy&5j=ivVLeBxY>!e>f8 zUjyleb$l0`Fud5Syh>M^J)M-;2$*Kf3UyB<LEKQ-VjQZ>o(yM=4@7qq9j<?K+~NA# zmrNA#nm&jVkYI|B{nOK>Gj5nwI}Xe8!wWSNA>@V<5whYtJvo1cQqz+mZ)KA2c6i_P zNQnDkYBz%2yhcg7ADYaKN?bVPh#bY$16~z*{32Wx*^0{mX+aL9*b9|GIm+NvXbURi zry#*HFWAywPC$RyXem)9M#C*jCBF)bgY8Q8_pmm&Q!!tKs*s^dNGCLhj8~Grfa@WJ z`~*A}`XFxtcjzJ|`4jjqbfhxjV@T;yrj(z8S9=Uq%0GbPJsh^|_v&wWy&bN&IW*pg zupx^02pnO%6>~e>2pbuZbdW~kaO+xbNbfmu*cX3Z<>+V9voiRsp7NwtoJ?F}9WGat z#zvS-iq4o?prvP|!_=<Rj!C+q<^87B5y8XE`Y@As*GJ>@uG!I|VjU5(W0x9(b?9e* zsmB`DrW^sYH7C{Gggx>_X?*s?!2xa^$5q8Qf9fWNEhc#*{MI^;H^NueSbouCu^lxe zLeP54bLgPf#ck$m{jV_VR<ZAnX#$wOy(1lW!RNiwxEp%+e#bg#I`nWUnUB|pXq~&7 z@447Jk@MAHQZFeTAHWs$X+9dJM5Xa0SROSna@*0{`ENDXtEl`^N1KXugy?94_Nc-9 zVd#u{BAD&H9QEtlJUjcSXS{tMcgA#jy(xHoj@P8CUT-2^G1t7_y#IK;!|=+%s|>Gd zyw>A2XyNno=i>wQ*-u`tQM+#a@)Z}r=iSwA(s9`TICu!$(Q8b;eFA#Kyr?J~cMoWc zvGPu6jY;J<;Zn?v$ab6`twb%yn`$b-yTx$Y)6sV(=jR|hHj%f(T)dz3yb`;`z(+w^ z!UFDq#)P#z2kuL(MoDvG1z!dBq`5Iw_+<HtX=D!_oV78=dA`N49vYI~;8xF=0hOE= zds+rg=e)ur23xqo`apQ{Xx<EuC-;Gr#1PN3$<vJ({M67~ej1`vr}8|{!qk;K;}E%5 z&W7pklZ=eT^wL5USPbpm^c6{m8yFkoqp=6)V8rlw{3J9CKNi*=rQ35}h=gZh+60cz z@ct2F_!a0HF$;6^tC81vkSFW@mlZw-{+8a4SHQLOC43{4kBa3jo|U7%H7T_UEFC+@ z))}EY3&Utyse=7u*Wqx+WsKm*;f0Km{08jINah>h9~oKvF!XW6@dGf%u@u7`a%ei& z9DQ-5!I^#emoO+Zfm>k`;<+$4GoG)6wRqnGyEFUqa5$5x+Q&xfarWTgpU0S(U&W1k z{uJO@eR(m&;(b0moHdz;!n&+g{0|U0ZU|0#*0}o=V=q`dF3omRx|q*(S2?h6-2TXu z33|&^hh8JCx3Ps;1?Tt?yc#^?r(sWnvQxuG%j6jpTsDP}ojsY~^t_h6X&|5E8Mz=` zfqyLshk1*Nd8g;YMeiArgvvDrPh3@T5cZ<Rm5Tjpb!A`<x?Dw=mE4+C^juSuf%!Ow zxZ2ZI(=*O_T=wybta-j5_%(?N1VI{+aVyVnU}A&Rc$+ly1wr!rOPU3`rV~ehmudkz zJ%CF|D@J^EX$5;kkm5<F_h=UUoaWE^ER>oUKab*+3xX9SDiH)LNmMQft|d{4Ah@1H z<$_={iAn^)77~>UC*flxD-s01lOjXaDyN{vkEB;F2&Pc>O9a7TBq|pK$CIc;5Uhw~ zTK+M`<pQy<{H9xt2}R<5BrEM!tMrQqlBH5x#k%JqQg+u|%YwXp8bq9IQ>L9nR7ir7 zOY*?XlALmRHXuM?o=871Gg9unI~l$NNP>yK2dqP7Si?QTvMga+c|ih?X%IBhDA}P9 zq7t}&*p#DgJ0~u93KT9awLpXurHq#ff+=^Y5nkw5qeQ;!7f}wI{31%9bDv*Esk`GB zQP#5j(@l$Ks$Vos!iC);CQeHy-*!7=f?`o1KASna6=@>1(G&hs8k-!o3{y<aP7-Ho zVkSc6OpTH??id7j(<EvemY^1G96aCYw;n*&1%e>y<9<`%x8CblBuEZ@ihh@CNwZK8 zyvt=Fx^zkna=;7y)+uB?QxLq%dZxca-NrLnch@NaS~^EdM-R!`und=^-oWR-n8G|I z2v(A!OKA|)SV6*N+M?CY16rX}X>kbCSoy4bGOi3q+eB$Qy%+621p=|Jl*u~O$(n~Q z#Vfj*HHg4Gn{Yy6(GwjC4AKf`o?xgH$#(^5-jc@%ULZ8++yBT!c@bar__{T*AYWfZ zH6BK_(j;qiPq0kBo~8TkQlo`5i$te{*JT}Spf`VmAX&JRjz~pffP^W2(O3zyNR%%K z7Lcfjb@!<|c)mFM{{%-DzVYL*?g^eR95O-<MapMllXQDT*1Sv*Y$H*rAlQ#A%ewtj z+ISfg+CY6L=drMPdqS|7D%DG{ndGE2q>+<+LGVE-GE`SIh(faJ*3&&}^F{_ZK!SJM z;u}tOdH{8PrjRh14U#fn6l%=%D-x`RMLRxz<|ZvSxi^_<v%4+@>~ZW6tt|6#>E}IJ zn?I6(CeBRbr!`=nst*vp-q{=4cMih?bJtE4zZ>Fr^)?vUX;1vF$(-lG;@z*{`H$~W z?X={zOlSrFSTKcg77D}nsCaUoxF^+42Rfeu-m>xH%*fiI4s}k#wmk#mXW;QQ9Hn$l zdq67Bz}m{XyzS7nrw9-Bxh)aBt*Ez8K4Maht%g}Gs{MC9Z3CmfD#UJrI%MC%rWT_b zzZtc%P_Nh?IEL&YY-#N2a9u2?njM9%7IotLlKn=1YT0~g`ytjg9LqWRAIBx-XR+42 zJ!R1aLGpNh0diYadxvD{+3%EA*P*6Wg_hPJ+tPsX{RFM8>O=#2u`vT{m(k49F3cy# zjLJ_yxwo(glxx{~Gr(Ik*!HUScx1Ic(ih%F>1{h??p2{;Z;<Vi0K1W}812SLyDa&Y zR4DDTU^B8glD&hqR>sSE3Y<Z9x@75;Jycg>PXYI+6H6sK4S#}Zh1j`LPA{Pg(&w{S zYvaoc=w}to@~HM&Y4wflXC7|5T3HQs$nKD~X#uty;25&6BdcZlq|CIOcD5P1kZqEl z%Y$`~y|As77Kq=c+7C$f_i`nT)=Bm*<RW_<S*x~U<R_XW*+)==?8iQqv$X-e`X{s^ z`-QX(T;Dg~60+aRxOri^&x_dB$}O<%SM3%Yy*AsmGPfx@$*hoxtQ}b`lO+Lh`@&*m z6Q%7Hx!@*9+Z5QmUv-X<tV^<UB>Rxhr+>9dG0T<x+=zb^v_jq<llp<9o9dI_o3R-_ zIfwKEHhUprZFCo;&tjiv#%95+1FC(FuE|CRjBWwcAzLZgCj!`NIEJhXS?vj@Ug4*@ zuehP>fNEJM<K6_@!F9%G7R-Lm^X9=A0~|QqpO?Y;!>N`zawC}nws+Dk^yD@}F1E<$ zA*g#NgCBx3c)tv`BN;pna`A43I=o+iGe<Hk(NE}clfeFNI{vrGeK!Ml;yS#44QKGa n4Qy>0{0+!$%dni=sq4Dn^|o|N-a)<fDx7ai$9>y&bl`sh$C_7i delta 5795 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 diff --git a/xv6-user/_sleep b/xv6-user/_sleep index 39a942165f6a6f9780cca161a51547f4d05f9552..7e89ffcc9aea20b42e88008e144587c7f78370f6 100755 GIT binary patch delta 4280 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 JCUGjb<iA7~blv~} delta 4260 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 E7uL^XjsO4v diff --git a/xv6-user/_strace b/xv6-user/_strace index 58d6e8175a5bf9b017e5844484b183e458ec68ed..77d53e5e04b9c20fb94fb11fa7a0b91f81f9ee98 100755 GIT binary patch delta 4346 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 delta 4294 zcma)94Qy0Z7QW|AXKtr0&_X+JrYk~=@>9^ZK-xl-{%mm5C<ARNOJ}A+3k+B{N)|OO zYKI~sU5lZdC>zr_Gze)3aajfviiRy@SIzEb;}YU_vql>wimXehA*+yOyXVcEGc$RG zjW3yZzx$o<oOAEF_q})L@OyCOEF73`Tv^{=a<6eZtG~z7zp=_a=vMJ-q<?Tz_Wk?a zD-Tik>s>WC4Ys<Sy@}pzj6gy5(U+6fSQKIo3^~0<&3E{mbFty{<8kNNX@7nQr|dFn zR~^b$3SWIPw!?Kl814o5rXGW>_<ZIzSb>)_7sF9B-SY|-cy0%d4js~@ePwHbN$m{1 z6`R~8P>$Vhf6n1kUwWHw!^)MvBgH4~#^z^kPfQH_hkjOjm){wi{d!t|#T|Su;fq;2 zT!|v!wXB`+Lw}EnyRvhk1N*Z}p)+<q`xSsISU+VOc=6Pf<)C8!nlkD%egOP%#{9gF zjD+)4N1~l^Fn>QBz}NDZKpkGlUkcmt`}`8f$KrxISdLo?W<v$;EqDPs(c!T)m7bZi z*6;{^L%{|Nr2qoP%XAMKnVrfR#vPtH6!Va0CS1jLJw@QcztO!IZ+eQ$52pFH(jXGP z%5g4@e>RQ(7#}ld!WeeY{af5;u7*AwHTOXwws{xQtoM5#fIax0cS&9+Es1sg0ut?) zIN^QQbCS1=b3F~zlY5(NZpRS*(YM67rE$X7M008?ES-8bGvVbRnfFsXP`H|kIaU~& z3d>^;FQ_zd@4}7H5&L@K2N`5|r>xHrt64f~&<K2$r8K7c%4(`qZ{-H6-8aP4p|7f% zs@76fN{M2>s#=^AspAoD;}!y1;L}0{wLqCq#t{famCk3yGEoM!K#6-dWiX+P&<xY0 zK?+*oOw4)@w=^Pwl8=K<QU>p&ykpD|D=Gh|<Oyqm*M(}=0&fTv)&g^QdqBGum@8CR z3!E=hyB1g`R9Hs@*9x~m3w(|#N9VqXmd;Mmg|)yFLbYpwCxr@Yfxj23T?@SKQda$G z!-qBD`1S9kOzGW>-x6+9Qg$On2^3Fbcc)6O!y8;S*KU<LQ5e;Sxi6KDh{0ZG;q8?b zUTWFM0}<X{C*kdtVLp;xjCcXqp!8ZEs%$=^EIMgg?k;r%f^*=WsFs=jn%%O+GzU`C zmKr7fBDCQp(LwgK5($2rIoPBHo=B4kzLt_nA+u5|BsH9yqNIG0r72EI*PWuIY8O(J zY@UlL>Jr0iNlNK8jGsy4B$p(DEh>@}%0gPR7aV41XU%R!C6;c7(6tt=bRT~}&Tva_ z41o`FVd8HLEj@X0Kp>LxJ|^BlEl~929gHTu7fZ2&TA&1s3sWI;L>bZo(?W(QWP}wG z075D66EdJyEilcyH8r55bE`@YT?$~8^DGB?pIb*aZOKH3p8qjP^SBmxLxj7GsFqF! z57p6aZQ22rNU5wmf@QAImaLf!(I_Y1x7qiT43!su<{+pE$FIv+^JqcDURNhAz%25V zqryw9rj-^bn}EL!qI^M=K`l@`jOUelmOiacmH5u;Tl^WD8{rQxg`dmtGPfMQgu7*; z+@L!cKE-X8L%#D-E!@GB{20R%De4@<3u*Z;F!zt7OeM#ZOdimUY?eg-H+eu$N*>T7 z9N{BsAGekQ0!rV@<U`!TW-V}qP@A;Cw}jf9Odw^0%}UEm&tciB``i~<`~~&q&|@gp zQxYVg1r9Ui*ttEbKNY{E?nnF57mZi=m>gJIbsRoG^BrO?o<%xWQ$m4sL|f$dKH15S zgM1!b@^*WQ-%e^31(m(!s^j54!mZ2CKvvEr1vn=Psn8gX`)A;Ye>z_B-$Uo<alZ*e zG56{ZflhjVU1R!WuUo5TT?^=EC{TR}4JMs>eGR2PIl09Jbo(j&KsnS9wvpx}b~Vf^ z`kc7w#L9uJg2m0$=Bn|DK|J5^v%D4jM6pqIVR@tJ>yB#-C4Yy+`Wm)1n)R<!*NPnA zBfgi-1I){lca`}g)aH`D!j|heo^Ld9q%kw^5u4=<j?*Yc*sqWCa5(h`ENU`+e`2fO z=6ewvn#}r9w*JND`x)`p*yZr~AP4=5^`~w6f8uW`+IQ?FFTT(CAHXg4`oiW#3F0$; z-^M#JZ>{OeV(S|=>olxgYu0<%`b(SjCvo1PM)>~*4_wV-{eNxxML0;&D%d*JR;7nI zntg@qiMQ(0POWtnCmOW|q1p5`vo(jUi`W{%a<XnA)>`LpZ6kRC+sL{-Zk@cR{*L|4 zW_{!?*1d6l@~mIwTsv*K4&XTDdY!D+EUKuru98Hf2C!(I=^JG09=6`c)*)<IXBNFf ztTl_{w#cX1s}p<Iy%d}N^T!O_*fJX~V^2$|`wBniALDRKrF)2%s26XxR6{Q=3sl4D zSXV#;j9^c&66WJ@uo}+bO}ZE3vQRbs|LmgsEF2D1yAS&l1NsP|wbH$9U7|OPwbUzG MpXhynJ%L&O104l<8~^|S diff --git a/xv6-user/_test b/xv6-user/_test index 553cd72ac200b3989ab6d099d1a916000ddb90ce..914c5060bb45af75d41f1993d70b005d7e5c8486 100755 GIT binary patch delta 4438 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 VRr^cYtkEyv`>|^I0Zhi0{1<G1eS-i1 delta 4413 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 Pdkx+;>SYRKZ25lyN!fS8 diff --git a/xv6-user/_usertests b/xv6-user/_usertests index 15fd0c07e18457bb4b623369dde7d15589f9f2b2..7dad61f16fd7c500382d3be1a3a3ddf0eb72e303 100755 GIT binary patch delta 17397 zcmb7M3w%u1)<1ia$(WI7B1qy9BgsT09uY!_$0Uqry-PJ-LkvQxS3RoC&<u%Jv0I1M zWjw|s+R~;P6rE~=D!m@9s-mMhC{?tj>MGybXRnpy=HBo3`@Z@8th3kpuh(9CpS|}v zC#~nc!GGVdB1va{urfJT$EU2EUu&g3!|0l<XurKHH!d-Gud00&<+@Axg12Hr(``RU z)^m8PJ8Gb!MCvVmDRF(Ox5<|8HFc4q@I{7Dbt_yKF62j9eUtl=MC}LpT^7sS{25(6 z=H*Rv^_`aQB&3vp3#*7`olWioh*|d#=9)QsO2{8^cN2f<aijN7N_0`7Or(@F=W~6y zUCP|&r9c0yqWp+1DkRL^Hk8?420bh2HHTj4&q+o5jO0Q+DV|GoOQ~<_-_PgPxv!H> zZD;voT}xx&G<KJ_397FfdxftHs?DbdCF;6ff@V%V{V{2*OyI$(_0=4Rz4-W%s3Itu z={S!Jo}J?T1pCdYZ`OfZ3yT)^UU(Uc>qZSfF9~i?%W+70^bd_Rx-9Ao;IXjLLH=uS z52s@<X4<DHKewAcnEK$@g-JZ??wV`7AB<%w!Le{tU{6<xI6lNqy+(-AMIxmiNW{E= z5PRpc`WR73znlB?ommmrhwO4%w#eA7$z<V6OJ4XDcCB=?L_L!T^{1Aj0krkKNT|{b ztG`v+nI{lpZ&GgO@JiI0r{^sU?Za+vjx^;ziW&k%uey`ZHF%x2wHWsWviH|1w-2n5 zsPB0~mD(70CB_{@h&@^&UbJyNM~JUhxknqKp8gujH&&_70{qh|k+r-pOOHw|ZF1Vg z<aE5uZ&s-d_l4e=0&2~Tk<hjo+v{wrc)rmJOsTPxGw_<Uv}RI7*WbtKe$1Dct4;rf z=TKIrpHZg&h;A?o>9?w&??V6SW%_?6mw9s=7f9INg0C>uFnN)6HRtb{lH(lnCF;AM z+e>dsE}Y+4&eXgG@*WuP=8sIBb^1BnS~XhdxXN>?nsv6B{MD*SP79XA)qn!~u0o<v znn=B42Kuc}nDQfGmRS;0VhOYQFQ8ojF>77IT$c&6%$9bp+8S01mLA_l0?E+F+k`fR z!5A4D$#(FUL)+IZohr@D=Zm0wQ9B?#V<A5p+9IoT5+b1#%>ET6seeggb`xQq6K62V zQp7wwGb~=GAII%siNoD5qCrrZL1_^h*d|KM!wB<#Ru%{`|5L)uhsy#XW`4qd3QLG_ zU<lvg+^+g+Mfo+msM<UX@CMcDWLffL5Z5QLs`Su@%7G{yE2Y-bDYv=aY{uakBc;9r z$%SF)#mnbbtFN={;_Iu`irn@tH@HG_>-=eI)J64*$?oPyt2NL$hVz@%Vx5j*==ByQ z?Rpp13T@~u!!eJa3G?kF%z>EiI$=r?VU`inPPs;ybvt1W#H>GQSQHGsYb$|X1YJM! z_0PnzE&Sj!-F3#ld6n>~>?ofTo}M(et~vwyu<%-)NQ27|@4BwI4Ojp1?GtsTqQvJL zYO7-bU1T`R&xgl3OK;0O%pCTSu=`d19*C9fBjujsl%IcT@<Oi9{}u7Bh#xD%7ynoM zNEu!*chG;>*K>J3FH=~EixzHe%4d9agw+K5g|_k94{?7)vd;D+53QbLEc!w10o_<! z#M@V&GSZzXb^N=*S*qBk&C_7j(MHIIn0Xgr_9@8=2@N1>eV0(zOWbHTMuGQ8)8aES z%3}UZWOtq8B+rSgYjUSzLR+{i64sa&l67t3>my_9ZTmDn^^eDDS5f1!Y4I)pcpRS* z{8*+E;NL|yaq64N6#b)ev-H8R`GwvOrgUu0q%+T2O2<EhFn1hwQYFlsLzpdDV&>I^ z*#~odS=>D`qIC#F<n9^`n|m8dePt!-TL+LY2V&OOPnXQM$;`d{QjJEf^*5!JeF<54 zdXZIWO^JC53G??P+x9gZne_G1*3Bo^9L2umXKOZK+xY#O=?!f)aLi_tsXa5ulK)6b zJ?*337JK9^-mlh(L`RsE`ozwyjkMB&Qm`PVyu{DdN;0~uN(DbRM71`$jl^}0dMQhP zOLBHQx$(romZVLXQYJCaaKij%!rX}Y`JYiQne=}2GLTP>u5Bv4Bw6zS{zmj<ljS$b zx_a_zF}+RR+mcnf@G&u+O{GDooW(zk8Dz3uLpGDws69B_dl{9*Hm7yd`X{Xb0gP&G zL73}4VP3?<hF5!DvbPxBG$K{&t)L^p3N6RpZxL_E2h~Z0EqrdB=5YSqRi_Rs<zLo` zu{C@_9VFJ0#BotDqazIsPp!GS(QtJ=tR~OHYO=>LMjZ&a+dC*K9dNy+opk8B!u1L+ zzX9H;ZhRB(c?=a*mdbZh;yX|2I8evOXV)E&==~Zko+-09O_~8!V%9MJTitoOu{J)n zo^^ETF)8&ZWZ^%Yybx@(+yZkk-V;KVPs>sLJc;@r6Keis?jW+YAgcU}*NPow3LL=j zfA9sd-AtwXBx}CIzmCo6;zrhgqs-OLqJ@cNYmOU7#V^)=xmxWg+XN9a2a2cHw=$<? zv(#{%B3<7q8ti~qV!p2kQ&wsn(x$O~t3>@L2sOXnUlc>`TiYe7d`YNv8TobWkeKxg zeLYOjwWNaMof5Vm<$W8ZMg~ZGNl`xDK%6%ikfq;(Y6l^LS**z(Cq;l0w$^XY$AtOk z0;Ua<exStsykT4eINNlO>uL;ikTM@%8)q}RCzHnYxLzj91j)I!^A7QYOcn>SupGya zGQu9LMe=cDLeFZJz47g~JW^Y0i}N8qDj~H)>8mn1`;c6lK3JyUo+D+xoZRjtv&}=< za5y^#%Z}<@{8U2hF!xN%XDRi@+=nKP4KcG=GPNq$dlBZICGG5D$&?l9NtkW6#5}yG zB_-KCN#f>S6%v{#Wv*wngk<d|bB_fQGD*nqB**4#a$GtNUCkrRZY9k9lEmz<66WbZ zSZSWbJiJa~Yo~33<g7MXvC{Eq*&#PlpP(JRw1h~{lL^PP&iVvn7Zv32q&rsX`&+|< zn$~rHYw5`{M)IDHxjFhcDTAY+rsK-Ujn&5q?`8zB2EKG~-$x%u?gRW@VjWn{!W!0z zb|hkeCWT#dBk#vW!5e^}t_BOYHjEzYa3I(+x3=C4yPYiKXeqTf&K;)5P^E*VOlguE zL3!yXOPMbvw<gI-r%0JAIX8x6ZvIKbnlavC=piw;Z^asU`R#^L6D>0ljn92fps;#s zxmfz3zXrL3^a+Jj?_N@BHs`*ePjI8u@vM~kVsnS;6VM(tJqfwt`a~%U@F_{~kcTth z90!l(h&a0Px01}xQk;+GzBCc+)nS*F#pxo0*n1P^2`9{knCDr-{M884cawJh9)y|0 z2(xv^?sV5MCoC5Bss!qLV!*Cs=rIyzL(F3%%x@sfjhMd^VdfCRN)a<>6J{4@Fs*~` zXPp?(N}xwappDAefiS;9n7cRjupMFMr-a#X7|r6jSgr%&xmZ>dF?$=toG#D52(<N+ z>YmnQ=>Ll_cYh2hP6?V*^FzW)5i_?W%>IBd{QyiMjWEw2gxLUdYO8fBf&SkJbfcla zDPiV&gq0#@ZbF#-4q>pS%RZ+N=DAIn4Ka^6qi9-wo}LovbUY_H<!<+YtdmGhWahfl z?`J9TlI`y=oW#K!ggU?3N~I(aDJAA#dZCpKb*y&>qLue~)VVYJQ}n}+rqpv<aGJR4 zQEt8;Xh970kT$+LgejK^BRfSrylXjIFB0ZJpVnx?To(wlRFT@QS{l{|I;)+Iv}qE+ zo5WXx43%%m(2L2y5sU(ULl`A$jo=?Nj&oW_^&IRQp)#K5tn9S|?@{x)ypyyTdNE(+ zY;He&wF(Op`f;7k9iXp<wMKi_>A6__(yrM5a}HVSPI^nW6q&z)l{CC;MN7w2PQdyX zPQe{5(frGze0UJFh`qy-!dEv*cEXdJR#~5Tm7ukh!!)Ph7%C;=s3+_1Bh1krCE}o` zVXi}jdC{lq5n;XqggMZs@1cf?HA?xIKnprm{v<=|KEeVN@IGO#62dGUFooX<^X(xF z4n10WzI%izAGVni@;L5c;vYTk@<UB)WOr{L)mA*G_6SkiKxqoQH!a)_k1BFi!F>I{ zkhysmVWrql^DSPZ*{jC9no(dLY5bY5ZB}3BIL-GrYYdM8*PF!;wl$GScsAues}C-l zQYiI(N4}MHgn5&tg>s%S>sx@q&_(J4c8OWf@lmM>v2F{hZi+cc=A}teW<JBWq_)&K z68VMHWZ25}&9%3V&Fj?hPDHDtWdRD+meBqDd_J~$o{{!+AOEho#puQ@37!JeGIcgT z@0^yD;O&Sm_JE6Uv8GsO;(d>IguR%rNUN>0P2%sQMVl-psqfmwze<ZU2JklZ@xRh6 zM!i9TaA0jQ!sNzLvv1}rS|r0`)W<D8OVs~HDiqH=2;SvsH7TttG4m?ErKMFoCdx^< zjQ`qld}1J6vet!U>FNe2Wz7;E;-zXnpO^0H>|ZqTuldIk-T8LeCEvXJ4{JKm`ND`V zq|`o_QJ34%k=yY-7GW08Zq>4u`#Z@hohlsU&hw?M##l<vNXYXdrQ>f(lgfQoVtyXg zIuklRpmmnXa#G4%qxkyPX>gi9-P&SuQz}DOWwf(wI})Gq#{)c*ABk^A?S@C-Man}d zzs^Tyj4<5{jhX|qsOp?hemtYL$r6sfd+}d08rQHHkiGSOXLYu?8ybc1rft%CIzEzs zPn;37!B(os!7kk+d2?q%>><P5sI7l3J^w!HeJEufzOzk3c*}OS%}A5?9Vv5V@D6RW zli`_3b8Xj^*UYkA%9KaiyI9C6(wO%vFKXK*%CSj8)<2RL&+iT|YBjKs8!~%2E&o8z ziIkP^2G!Vsm@k1a<vL+r#FTi#tO3FTh*`zkYb{aNRl+RmQ6k=6hb!8f<|_n}p^yKZ zX%U~s+Ql17-;xIKMz~#bc!x8wU7ksQTFUIzxW8QwlWmz~%|_m`{dl8$uw?ywTl*BF zEuZYaZ=YxKIwj}&llShh%ITObS>J6r$%%LE(H?WOi4X78wLbVig!fq?xU|$or^WCb zhcft#q3L-_;IRp1<j;5gM|<|@O{4WA7r1D7@}5$2Gz0Cetk$w_C(toPI@8|DYM5&) zVHU((KT>&pTL=qGmUceAuVcMr_j1XZw>hq0;!~wW**Y<x?XFrE^)pvl>%y{E&sxVB zn2#D8X;-x^loJ02+*S1!oVK1VxHim_8lKI_&p>{Y<Smns--!5F<UMlATQH_)!;ieg z8sT(|lDPGs)I--w>LEOG%X*w7%=bEBfjo)%#Crx=+vS9LUqXp^$1JP8l(4`wl!*7s z;fnSSd@+IEnG$pz;ls0<HYHa1Y<_1RW)I<^t`3o*){q@NBdZ4Ak7@$<UD(7KQRCri z8b6os&+4I54)BodSd#_E#<h<(&7NfPPLO_;5BTm5vHbJwB=I^yX8kUIkR7XQxQo~7 zG@5<E=X7e`-hvCQvJrArv|S`uR@0p$t?U~J@r;y601>#KI>CF57o;A1$LS2*AmR!; zH#9oRxP6`Ln7sWZ=334#cZS4~RhIG)TZgc1%OefJ$D%TzhgELyeztg%1+87MH`toC zwDgwd%6v-5+UdP~6{Z?@2W$nSW%}kixq5xLl<Eg?zb(#Knk^v@uiB-7&NZ7i?PASv zTcyxHoxGV_%kDWkVIii$E~Ayil|INVTgp_vwTm@u(e(0MkMZBT#MgDVmkRdrYBD6W z*pzPU5tRacsX8I8IIU|@P%y8u!pP6{h}C)S@drK9U~_5I^W$fh*5+X@T~;p@bor8$ z;@^8(7z|BJuPd-9{j1kFW9px2aig=?0vETk8r;>pmM+kguj!pwGq3UAIo|E!g9u-= zEhP%Bk%n#jZ0}^&f<NiqJ3{&3YV^Rrna%deOOqXwk}Q*XR==9X)BDtj9k}L)r%!#C z;h(tvFaIu9!fRB}8&#oA_7C}`iFG0hra-~qS9aybN%fscFm1)}X0W`bBL7^7<TH?$ zoT6Bf&wfTq`XV1&SMqk`4;dss8TmJu<Xy<?A~fEqtUy6Qv{djQ@2e*H-N+wkAo;z> zUkH-?G2|bj{(0nU!;ww={KzLnN&YVKhcq4@MU@E>xZF%$!;$ZS0nNw{&y;v7@*!c8 z_YaWQK``6J&x&~C){^gr{3JLwi=R1HUVYW!D&h}Dg$1=GFb?^<I>{IGk=Il5qRc`( zqn;GFkUtPB`4z~Yijlkrd3&1Vw<AB*EaNMCQ7~BIiVyj9b)?`F^3`z+{m7p(O8hSJ zL#v{L7v*&*b|4)2Uz$p}8Tm;GTK^R#6$NYJrGgdt<2Z)hkY86r;(d`nlq&hb$d9ij zc{}pGlO;bH`FU+5KMVP<Q<9{hz%H*RU@;dz7b@JvNm=kB{Dly=PqFJYm>--nN2g;# z)^}<+d%{OfZN@_R%Bg#qhxeFfVJ<#-T4L0S`I@#;|0c}UMB_6r0Ba1&D1LX^(;#+( zzdJJn)UVBK*D)hcDk?giO}2ue)NesB#)cS!%s6EgT>`@2LS^@9aE>v^%16#hX9ZlH z)ry_sU(IT+Q^s>Pd!tUt<6CBTV@dq>>{u4gLth!nQhDAh2bqsIobxjC^MA}44XNs0 zO=q6sj8_*iNXj>N7<*V8JMRi(=U2H}fWwxqPHZrr<%(x_`8roRJ70XpHHNW=yv>3a zfbs>Kz@XJ@V4cJd<&S2wc)WWD8^=$&C$kmB9Tp}smcbp15?Eipc+uFp(c`eM`a@Z= zB|5_xbYvV4D_9L3*;0^F?M812Y6U3ZmkMGb*5iUMKsyz70=lR$73ki=SV;QY!fvbz zH!ofQ>26-^VQYBjB?)XV&s(w`dR%>}1!%_7`H;u{rJ0b&1E8+rv}N5G7|dDT4~lSd z`9SDp{Oez^-Te0Jnb3<yE3N_!TbT(x?!L084x+uuGntj225RSFZ)C#gb$=rZTr7ch zmExmsRAb=d+?#X2uK(&~>^%3c&V*#@s#%cCaP<nrv96f`wJBMX$+q*~f%<r}wex|# zzgEP#y|zAsaS3}n2g)$+?KGfoza0w^_P-qu^zz%5;iv3aKi%lYvNaXzH>VNSupFLI z0e*{Mn&^sdDZ)3v`VhhA`N(zgkhgnXBk0Mlb(w4hzXfzRZ}^W)NGw;Q8-P~f-vdqM zQR_27a{$m;{B@un{^k17KvOrw0__9zJf8&gAzud6&))$W&A$X{<u`$PxX}{}wMg=a zT8swj=N?a{PO<Y#p0+Ty(Hk?FnLh`#8(#r*96zyf8q~tNDHbN&2%s)LZ&Mlscz;u> zdE8j4&Wjyo>onX+FTgsX%`hKln`0r48R$6P5$Hoc9H@)W1)9Xy0X@Y(-W;n_#_;bq zw}qIswutWc2b#o}11;dkf%<ufw*(}Iyu$2~cM(v>)^0Gv-rFh)auet*p14g6|0tk) z`FfzI_=Rl)K(p!gSh$&bZT}18U3V-4oo{xu1ka|TypGXBsR#L%@*doR%|z>gxeQ*1 zuo%DyIGSm&m48r_0tLQYB&t?>XDs+`1JuU{?@WQ1`8zYA%f6kBpzt?$wg-9AI|A+c zPCV#OfcAF280dMv185a~Ohc~&I+#~|*8({<2WsZeYjp0r!fNBY@lI=5TB{n$ti`Ns z2U}*PthZKxhY)NZL4Dp|0e*$x@;+ZgSS%SE2u>QR@J{cwfw7wVo|qr|fO`0Spr?5A zU1F+E1e(Nm0PV&DK*#Y0yT#NV26Qi93-kv6252~scwcDt0y>Tt0$syPf$rt(1GqhT zd!P^bY@pG656}#L59m1Fq*%<0yy7=uUOX*M0Y51pia9d&!+4-eJ`@wb=))AK;kgg9 zAh+l}DL^~#5jw6tVlHfeb~OJUXa<k^NUSddfV%kWKt07@epFQ~xZjqH1=k(-t_P*d zd-EXCZu<&Z-{Ld-xPZreJQTcs_VHNAH03~h=u_T-UOHto-+SO)7G6B&U{?mC_1>Xa zpeGM4hMRZrCt|L?@yP&?-1wvm%-CkW0r1U-Mk5-JFrwTFEXdkedWtvsCNQ0n%bz)1 z3`_rKhg&gNQy+bn4Yd8|cA)D&k7XIf2S2xprT<AOhqA9aas}K^KRSrbD*p0l4+c!F zFW@$Ro)7rqYjJ6Gye(8<^l=*?MaPeU;j}Naq5aX96CuZh6RFT1ctTWW<q1)}gC{H? zxeDzS{F#$uph`1NzQmwp*S?wu!{+#>xNSH7Gl3oBNB%hpijjWmeV7W@Ph|s5K5c>O z^*t?a(xpJd`7xk3c<`C-5V-dlu}LgGlK`5#&WN@99!OU3CTGQD$~!C8j)Jpuh8H-f zP}MugmRM}&jKo5%DT5OcJ^=7r{|UFP0PiFCAs_j*xO-hdZ}1I3XYoT{i<$ih=w9CH z8<^k4Q@=@OFn#`UZWOz_>f3HG3%Y+RW|AAIm4Eu}0Q24cl;rkM*%G74AvbL_?Y!mr zb})IToQFdI-*!F|>UH(Js#E&&SHD{TmsJ;%0BCffy%3GNP!B4w@Pe48hk;J!Pk^rB zZNC>O%>a6efAIY@NI3CgDri1`QJfm)TofslTznha11`lwwP#-H1MQ=iQXt{qFNslT zcDcX#F7#dd=?>soT%`IGPM2D$8GPgAeGqcU53xXB0lJ&7{UIHU|M`P(QPmIgX(;dJ zZwm|BYyM@R6mdnUrUKo~`vCRxNkC`uWmm*_egV|S^*_SM7iaxAkAcW{RdnR>)e{2# zN!*|MKpUuJ#{f)RzB=$Vv?p8>o7duNDg3>4q5RWp(ZF4}ChqQ#>+#S|zTO*V>Fnz} z%~m|QE4l{;*)y?NZ+;m&WaXW2NGEe{q=Ml)H@X46f5QT_&d<{zk=K8o2<^Xr9s|xt z-xQtn+)RMcD!rKn3$@{vXg9u<1-+Pb3z97^y46qIi;sUv2T|H>k^iLIP?dpv=j|Ur zcge4PU~InsRV?A`P6;UOyVDMo9^7dslv>`+f&rOvw>R9drFS30t$O(08w_T|^S`Hq z*0SHllJo_%!}(L7NyX`Z>|`*^SMH~S!>9-1wiy5v)~yHWaQG{I@T*?8K*#qyPKtQa zT~?qPoQ1`282|P0GMzG!&;2`%o#VUzZmA3I#jpL{2s#%2Bs=b_XQf^d+%s?p4BE_w zFg8@Tvah0;K7)tVmdE+@C$GY(``(il?a%d;%DVuV2PKC2qH_x~U6oWN=%)(kx_?J! zDf&lz<kR^22^DlM|C`PN_?|zHZ+_Z<y~Rs`e#EaojccBW>4}KLpi45M64bwf{N)Pr z(Qme8_1N?`2LpAzIfM0K<~NV90`{KThp`m)M4iJ}6Be!RV5~(%XfN5F7oqRs*F?R| z*q&P3eHy3e+v*jiR`}n*8G}6PUL9+}maD($*mLZhnia&FRqKtX=OE}w^kj8j5X1{D z`6`Gxa*fY|Os`Z?nySshSaivAV_B3={b4Mtu1?5fcJ`#?L>@a54C;ImTM|@ap32t1 zBaXUn0c*z0>dy;UM|NCo^cow%wyTA&f$*HV?==vHs(%S?c}b&uHXwo(sB_<BX1J_> zlf|(W>ZfnA>2PVan#ICp;A+5Dl+0Mo&evofwa+^s^{A7yOUbf#SkF*kzuU_u!==YQ z0hZ+LW9ebwZ^IE_3rY?hVF#-^&tbVA<CWzYs2PMsWJ3(pq`C%gW;q)a!*(<}S#C^C z^83GO4l!t&;_<zL>JV^xyoVg5Xq-@x5j80uI{gpLA^%PDzxo`Cnh^g*iZjMQ&3qD# zGElRCL}Lup^pI$jftp)LG{!*910)({pyuZ!8e?!$`x}ytFi_KkRSlX|;4~0ZjY>Vn zKus%&Mj5EtnM7j@)ErErQ3h(}KZ~yq*cbz}wcp}0HN{X1+i4`rEmJEf7g3Webqi)G zW#f>H-3nQtRC!u^gP|qzRB0yx`3O*PNnW|KB&S+ls}!Jeok+iOWl-*{SPZQI2q=ad zmFA%?b;Eyj%Q#zsWi_7F-C&@eHpYai5){wMyG=DJvvb0Pr$C8lDFRVD17$4NKuv1} zHEJ&?SEE9%FBee__m_*Pe9mL#GAdp5^0B3=4JsGW<QY>g8i&mVWg^A!6Z)-EK}NAC z5OXNbGDR9l(R*q?LMM9b0tHG;>=P1a39(`@<48S=S6DHqc^F07ieVs*77mu<EVph; z)<X=`Bz>?RvZ2iSNVy_4$)ToL?$Se=Lk-ld;BqLqbfN}1U_;BTtz<pSK+Ou)!^#sX zGajatrA`G9<?M})`r<Wc9!yEe!1_0x!VEW1vw##`x(x<m){t<Xn6#<LQK>{6YExg? z$g-MIin``tn}N3DdnocHHtaCa)_$|pr{`HsXXV1`VFc=fDIJ2upZ|*=3^g^)D8kKw zG{Z@Ah=H19p_`*9FXLt|oEetmj<?@QTVIZ0KQ?FKi2&UnLh<LMIl}M+n>y4q1<`q9 zgMnm;h_Mldw%D|mi~3`8kdtINhC$eTi9{omvYg6-=NPX2e}d=yXYd@ua~NPKT!+ir zDuxfx?J4T!XahCRkSNzc%{0n!bXfo@8yl?{sHgqaI~Q1jaSUqD5Ny1&9PdJIatze$ zg`%KWCT}oICc`ql|FbP@YM6FgN`II^Yc_^1w?mm0g_wEeiqu?Qa`StZVVDq#3lW`9 zLTH84;i{(yTX9wtzmRk2=>lFue#8b1UPxJmuxBAuqv`7Dt1MFWTxIYWFWONt(GxYV z|3-q8V8vC!euC2~9Q67HSQK3H0_^n|x*g(BKTNwa<%t?`jYZX_o2LljY`8K7?v06R z_BGZN&Zbj9Eym-Mxa<(T7u3{(mF?=rYwUUBZa8jN2fK4ByAGjUYRq*ull`Htyv`zP zh68X6pJAjIcm=O+1jX)$ffsgZT_x}e;z!{ct^_IcpB1B6`BsxNWnLwBmsNHHviu2P z;qIqy(g43fD7Vz+06Xs@OdrVL)t~lzfO1*|ZlYW~CWz#Hm7<AH3?dAD=^Kv^8=-I& z`YS5wi?2VRuO7X@B4X;I(y2;H3F<x3g~n1>p^tXaz>8nH+Tdq^v(b8YCF>q)KLPhc zYx?@)*K8FfN1ZR=(FDWziXU}!qWZpoX8;@lRnNc)MuY8AuK=uu-(<ly(Z8FOf-lkR zf))B|6OQj1SAksUpRc69R?WHz;X)t_0Vh|2H>y(r?!E)92Umi3fm~F7JKkzdWnYvM z)bCJ9|A2a0MEe5G#&wbUWOhnrw;<X%gz0N8jp-$n(>`_?c<~FMoW9N;lVatLIuhK) z+(+0aK2^f+BAPu>R|2dH(y2waSkstLD1qpUIa{jXS2<;-dQW(XK$yPPZ9*?GYJ*<@ zHX}^mTc=7Vic9S$;6?}+;oSg#kf{B3sPhG!3UD|q8+&~y$4fi)eF1wZc9fJKN4Tqc zMZn@&SPY)0Qnd%E5x1e7!_b<(9lwRvc^I_vjV*R#QHWn~bmCC|Rdouui^)frzKgzr z@ayVE0l$GTeP}KKUi>zyrv>~T!t@z;KbEmXWxoP^2w>3_f2FP*RhtX=G{Q3~!QZGO z1$+^m(`WnYz>D8Cb)|ssAiSWH6t9;T<#+W{fV)3JnEoihhpFk|1xN%8j%PdS<5Fe> zxv0~%_EIjEF7b;{8{A>dn#TYv*3HUWgm@Js%-+Fu7OSizsq^nZ7O7}fc~n|!^8YeL zFpIv~GI|<j-9^0u?qYf({2NBIOD(0Z8gUn*4MCW`!sny4xRpeoDGN~3eh$<>j9Dk6 z{6%#NxQm&BF#S~ljqa=JMghNu@I`!8yal5zRZk0eHNx~K03RW|L1p(~%}c$<g0&5- zWu?*IsWu1Pn1$w{YQKBzU~t|<$F!2r-&l=cHTD6#yqTqDJz&j@bQZF!vmdb5rn1qQ zr0##fT9y6JGsdZZJ%HCi<J2~P!iB4|#pRT`Ph5QJU*Zy_wt2`pMz#u*X`1LoxuU4e z1FWX%dC1_Us=5!9;9b#Q;&MuD^A}v!s<Yvut94P`{}=0E+<R4e@T=?*Yi(R}PqKT| SEW!2?>lge^sPq41_5TMBwQ^Gc delta 17228 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 TKh)+4vHE=}p41Ni!Rr4HMhjyX diff --git a/xv6-user/_wc b/xv6-user/_wc index 97d1a0894dd6475139dc76ff60e5ac136e0a381d..73e82bdfe7555f001b8139320a2bb47b1a3c08b6 100755 GIT binary patch delta 4472 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 delta 4483 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 diff --git a/xv6-user/_xargs b/xv6-user/_xargs index cf08c86859fbbf7dad585c8d244ce3a3a1ff7a58..1e84a35e1ce11a468bbc3e1820a85738a0cade91 100755 GIT binary patch delta 4333 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 delta 4241 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 F^1n{LdprOD diff --git a/xv6-user/cat.asm b/xv6-user/cat.asm index 77fc17d..93a83b9 100644 --- a/xv6-user/cat.asm +++ b/xv6-user/cat.asm @@ -23,7 +23,7 @@ cat(int fd) while((n = read(fd, buf, sizeof(buf))) > 0) { 10: 00001917 auipc s2,0x1 - 14: 9f090913 addi s2,s2,-1552 # a00 <buf> + 14: a0090913 addi s2,s2,-1536 # a10 <buf> 18: 20000613 li a2,512 1c: 85ca mv a1,s2 1e: 854e mv a0,s3 @@ -40,10 +40,10 @@ cat(int fd) 3c: fc950ee3 beq a0,s1,18 <cat+0x18> fprintf(2, "cat: write error\n"); 40: 00001597 auipc a1,0x1 - 44: 90058593 addi a1,a1,-1792 # 940 <malloc+0xea> + 44: 91058593 addi a1,a1,-1776 # 950 <malloc+0xf0> 48: 4509 li a0,2 4a: 00000097 auipc ra,0x0 - 4e: 726080e7 jalr 1830(ra) # 770 <fprintf> + 4e: 730080e7 jalr 1840(ra) # 77a <fprintf> exit(1); 52: 4505 li a0,1 54: 00000097 auipc ra,0x0 @@ -65,10 +65,10 @@ cat(int fd) 6c: 8082 ret fprintf(2, "cat: read error\n"); 6e: 00001597 auipc a1,0x1 - 72: 8ea58593 addi a1,a1,-1814 # 958 <malloc+0x102> + 72: 8fa58593 addi a1,a1,-1798 # 968 <malloc+0x108> 76: 4509 li a0,2 78: 00000097 auipc ra,0x0 - 7c: 6f8080e7 jalr 1784(ra) # 770 <fprintf> + 7c: 702080e7 jalr 1794(ra) # 77a <fprintf> exit(1); 80: 4505 li a0,1 82: 00000097 auipc ra,0x0 @@ -139,10 +139,10 @@ main(int argc, char *argv[]) fprintf(2, "cat: cannot open %s\n", argv[i]); fe: 00093603 ld a2,0(s2) 102: 00001597 auipc a1,0x1 - 106: 86e58593 addi a1,a1,-1938 # 970 <malloc+0x11a> + 106: 87e58593 addi a1,a1,-1922 # 980 <malloc+0x120> 10a: 4509 li a0,2 10c: 00000097 auipc ra,0x0 - 110: 664080e7 jalr 1636(ra) # 770 <fprintf> + 110: 66e080e7 jalr 1646(ra) # 77a <fprintf> exit(1); 114: 4505 li a0,1 116: 00000097 auipc ra,0x0 @@ -904,637 +904,647 @@ uname: ret 4c4: 8082 ret -00000000000004c6 <putc>: +00000000000004c6 <times>: +.global times +times: + li a7, SYS_times + 4c6: 09900893 li a7,153 + ecall + 4ca: 00000073 ecall + ret + 4ce: 8082 ret + +00000000000004d0 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 4c6: 1101 addi sp,sp,-32 - 4c8: ec06 sd ra,24(sp) - 4ca: e822 sd s0,16(sp) - 4cc: 1000 addi s0,sp,32 - 4ce: feb407a3 sb a1,-17(s0) + 4d0: 1101 addi sp,sp,-32 + 4d2: ec06 sd ra,24(sp) + 4d4: e822 sd s0,16(sp) + 4d6: 1000 addi s0,sp,32 + 4d8: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 4d2: 4605 li a2,1 - 4d4: fef40593 addi a1,s0,-17 - 4d8: 00000097 auipc ra,0x0 - 4dc: f24080e7 jalr -220(ra) # 3fc <write> + 4dc: 4605 li a2,1 + 4de: fef40593 addi a1,s0,-17 + 4e2: 00000097 auipc ra,0x0 + 4e6: f1a080e7 jalr -230(ra) # 3fc <write> } - 4e0: 60e2 ld ra,24(sp) - 4e2: 6442 ld s0,16(sp) - 4e4: 6105 addi sp,sp,32 - 4e6: 8082 ret + 4ea: 60e2 ld ra,24(sp) + 4ec: 6442 ld s0,16(sp) + 4ee: 6105 addi sp,sp,32 + 4f0: 8082 ret -00000000000004e8 <printint>: +00000000000004f2 <printint>: static void printint(int fd, int xx, int base, int sgn) { - 4e8: 7139 addi sp,sp,-64 - 4ea: fc06 sd ra,56(sp) - 4ec: f822 sd s0,48(sp) - 4ee: f426 sd s1,40(sp) - 4f0: f04a sd s2,32(sp) - 4f2: ec4e sd s3,24(sp) - 4f4: 0080 addi s0,sp,64 - 4f6: 84aa mv s1,a0 + 4f2: 7139 addi sp,sp,-64 + 4f4: fc06 sd ra,56(sp) + 4f6: f822 sd s0,48(sp) + 4f8: f426 sd s1,40(sp) + 4fa: f04a sd s2,32(sp) + 4fc: ec4e sd s3,24(sp) + 4fe: 0080 addi s0,sp,64 + 500: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 4f8: c299 beqz a3,4fe <printint+0x16> - 4fa: 0805c863 bltz a1,58a <printint+0xa2> + 502: c299 beqz a3,508 <printint+0x16> + 504: 0805c863 bltz a1,594 <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 4fe: 2581 sext.w a1,a1 + 508: 2581 sext.w a1,a1 neg = 0; - 500: 4881 li a7,0 + 50a: 4881 li a7,0 } i = 0; - 502: fc040993 addi s3,s0,-64 + 50c: fc040993 addi s3,s0,-64 neg = 0; - 506: 86ce mv a3,s3 + 510: 86ce mv a3,s3 i = 0; - 508: 4701 li a4,0 + 512: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 50a: 2601 sext.w a2,a2 - 50c: 00000517 auipc a0,0x0 - 510: 4dc50513 addi a0,a0,1244 # 9e8 <digits> - 514: 883a mv a6,a4 - 516: 2705 addiw a4,a4,1 - 518: 02c5f7bb remuw a5,a1,a2 - 51c: 1782 slli a5,a5,0x20 - 51e: 9381 srli a5,a5,0x20 - 520: 97aa add a5,a5,a0 - 522: 0007c783 lbu a5,0(a5) - 526: 00f68023 sb a5,0(a3) + 514: 2601 sext.w a2,a2 + 516: 00000517 auipc a0,0x0 + 51a: 4e250513 addi a0,a0,1250 # 9f8 <digits> + 51e: 883a mv a6,a4 + 520: 2705 addiw a4,a4,1 + 522: 02c5f7bb remuw a5,a1,a2 + 526: 1782 slli a5,a5,0x20 + 528: 9381 srli a5,a5,0x20 + 52a: 97aa add a5,a5,a0 + 52c: 0007c783 lbu a5,0(a5) + 530: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 52a: 0005879b sext.w a5,a1 - 52e: 02c5d5bb divuw a1,a1,a2 - 532: 0685 addi a3,a3,1 - 534: fec7f0e3 bgeu a5,a2,514 <printint+0x2c> + 534: 0005879b sext.w a5,a1 + 538: 02c5d5bb divuw a1,a1,a2 + 53c: 0685 addi a3,a3,1 + 53e: fec7f0e3 bgeu a5,a2,51e <printint+0x2c> if(neg) - 538: 00088c63 beqz a7,550 <printint+0x68> + 542: 00088c63 beqz a7,55a <printint+0x68> buf[i++] = '-'; - 53c: fd070793 addi a5,a4,-48 - 540: 00878733 add a4,a5,s0 - 544: 02d00793 li a5,45 - 548: fef70823 sb a5,-16(a4) - 54c: 0028071b addiw a4,a6,2 + 546: fd070793 addi a5,a4,-48 + 54a: 00878733 add a4,a5,s0 + 54e: 02d00793 li a5,45 + 552: fef70823 sb a5,-16(a4) + 556: 0028071b addiw a4,a6,2 while(--i >= 0) - 550: 02e05663 blez a4,57c <printint+0x94> - 554: fc040913 addi s2,s0,-64 - 558: 993a add s2,s2,a4 - 55a: 19fd addi s3,s3,-1 - 55c: 99ba add s3,s3,a4 - 55e: 377d addiw a4,a4,-1 - 560: 1702 slli a4,a4,0x20 - 562: 9301 srli a4,a4,0x20 - 564: 40e989b3 sub s3,s3,a4 + 55a: 02e05663 blez a4,586 <printint+0x94> + 55e: fc040913 addi s2,s0,-64 + 562: 993a add s2,s2,a4 + 564: 19fd addi s3,s3,-1 + 566: 99ba add s3,s3,a4 + 568: 377d addiw a4,a4,-1 + 56a: 1702 slli a4,a4,0x20 + 56c: 9301 srli a4,a4,0x20 + 56e: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 568: fff94583 lbu a1,-1(s2) - 56c: 8526 mv a0,s1 - 56e: 00000097 auipc ra,0x0 - 572: f58080e7 jalr -168(ra) # 4c6 <putc> + 572: fff94583 lbu a1,-1(s2) + 576: 8526 mv a0,s1 + 578: 00000097 auipc ra,0x0 + 57c: f58080e7 jalr -168(ra) # 4d0 <putc> while(--i >= 0) - 576: 197d addi s2,s2,-1 - 578: ff3918e3 bne s2,s3,568 <printint+0x80> + 580: 197d addi s2,s2,-1 + 582: ff3918e3 bne s2,s3,572 <printint+0x80> } - 57c: 70e2 ld ra,56(sp) - 57e: 7442 ld s0,48(sp) - 580: 74a2 ld s1,40(sp) - 582: 7902 ld s2,32(sp) - 584: 69e2 ld s3,24(sp) - 586: 6121 addi sp,sp,64 - 588: 8082 ret + 586: 70e2 ld ra,56(sp) + 588: 7442 ld s0,48(sp) + 58a: 74a2 ld s1,40(sp) + 58c: 7902 ld s2,32(sp) + 58e: 69e2 ld s3,24(sp) + 590: 6121 addi sp,sp,64 + 592: 8082 ret x = -xx; - 58a: 40b005bb negw a1,a1 + 594: 40b005bb negw a1,a1 neg = 1; - 58e: 4885 li a7,1 + 598: 4885 li a7,1 x = -xx; - 590: bf8d j 502 <printint+0x1a> + 59a: bf8d j 50c <printint+0x1a> -0000000000000592 <vprintf>: +000000000000059c <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 592: 7119 addi sp,sp,-128 - 594: fc86 sd ra,120(sp) - 596: f8a2 sd s0,112(sp) - 598: f4a6 sd s1,104(sp) - 59a: f0ca sd s2,96(sp) - 59c: ecce sd s3,88(sp) - 59e: e8d2 sd s4,80(sp) - 5a0: e4d6 sd s5,72(sp) - 5a2: e0da sd s6,64(sp) - 5a4: fc5e sd s7,56(sp) - 5a6: f862 sd s8,48(sp) - 5a8: f466 sd s9,40(sp) - 5aa: f06a sd s10,32(sp) - 5ac: ec6e sd s11,24(sp) - 5ae: 0100 addi s0,sp,128 + 59c: 7119 addi sp,sp,-128 + 59e: fc86 sd ra,120(sp) + 5a0: f8a2 sd s0,112(sp) + 5a2: f4a6 sd s1,104(sp) + 5a4: f0ca sd s2,96(sp) + 5a6: ecce sd s3,88(sp) + 5a8: e8d2 sd s4,80(sp) + 5aa: e4d6 sd s5,72(sp) + 5ac: e0da sd s6,64(sp) + 5ae: fc5e sd s7,56(sp) + 5b0: f862 sd s8,48(sp) + 5b2: f466 sd s9,40(sp) + 5b4: f06a sd s10,32(sp) + 5b6: ec6e sd s11,24(sp) + 5b8: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 5b0: 0005c903 lbu s2,0(a1) - 5b4: 18090f63 beqz s2,752 <vprintf+0x1c0> - 5b8: 8aaa mv s5,a0 - 5ba: 8b32 mv s6,a2 - 5bc: 00158493 addi s1,a1,1 + 5ba: 0005c903 lbu s2,0(a1) + 5be: 18090f63 beqz s2,75c <vprintf+0x1c0> + 5c2: 8aaa mv s5,a0 + 5c4: 8b32 mv s6,a2 + 5c6: 00158493 addi s1,a1,1 state = 0; - 5c0: 4981 li s3,0 + 5ca: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 5c2: 02500a13 li s4,37 - 5c6: 4c55 li s8,21 - 5c8: 00000c97 auipc s9,0x0 - 5cc: 3c8c8c93 addi s9,s9,968 # 990 <malloc+0x13a> + 5cc: 02500a13 li s4,37 + 5d0: 4c55 li s8,21 + 5d2: 00000c97 auipc s9,0x0 + 5d6: 3cec8c93 addi s9,s9,974 # 9a0 <malloc+0x140> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 5d0: 02800d93 li s11,40 + 5da: 02800d93 li s11,40 putc(fd, 'x'); - 5d4: 4d41 li s10,16 + 5de: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 5d6: 00000b97 auipc s7,0x0 - 5da: 412b8b93 addi s7,s7,1042 # 9e8 <digits> - 5de: a839 j 5fc <vprintf+0x6a> + 5e0: 00000b97 auipc s7,0x0 + 5e4: 418b8b93 addi s7,s7,1048 # 9f8 <digits> + 5e8: a839 j 606 <vprintf+0x6a> putc(fd, c); - 5e0: 85ca mv a1,s2 - 5e2: 8556 mv a0,s5 - 5e4: 00000097 auipc ra,0x0 - 5e8: ee2080e7 jalr -286(ra) # 4c6 <putc> - 5ec: a019 j 5f2 <vprintf+0x60> + 5ea: 85ca mv a1,s2 + 5ec: 8556 mv a0,s5 + 5ee: 00000097 auipc ra,0x0 + 5f2: ee2080e7 jalr -286(ra) # 4d0 <putc> + 5f6: a019 j 5fc <vprintf+0x60> } else if(state == '%'){ - 5ee: 01498d63 beq s3,s4,608 <vprintf+0x76> + 5f8: 01498d63 beq s3,s4,612 <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 5f2: 0485 addi s1,s1,1 - 5f4: fff4c903 lbu s2,-1(s1) - 5f8: 14090d63 beqz s2,752 <vprintf+0x1c0> + 5fc: 0485 addi s1,s1,1 + 5fe: fff4c903 lbu s2,-1(s1) + 602: 14090d63 beqz s2,75c <vprintf+0x1c0> if(state == 0){ - 5fc: fe0999e3 bnez s3,5ee <vprintf+0x5c> + 606: fe0999e3 bnez s3,5f8 <vprintf+0x5c> if(c == '%'){ - 600: ff4910e3 bne s2,s4,5e0 <vprintf+0x4e> + 60a: ff4910e3 bne s2,s4,5ea <vprintf+0x4e> state = '%'; - 604: 89d2 mv s3,s4 - 606: b7f5 j 5f2 <vprintf+0x60> + 60e: 89d2 mv s3,s4 + 610: b7f5 j 5fc <vprintf+0x60> if(c == 'd'){ - 608: 11490c63 beq s2,s4,720 <vprintf+0x18e> - 60c: f9d9079b addiw a5,s2,-99 - 610: 0ff7f793 zext.b a5,a5 - 614: 10fc6e63 bltu s8,a5,730 <vprintf+0x19e> - 618: f9d9079b addiw a5,s2,-99 - 61c: 0ff7f713 zext.b a4,a5 - 620: 10ec6863 bltu s8,a4,730 <vprintf+0x19e> - 624: 00271793 slli a5,a4,0x2 - 628: 97e6 add a5,a5,s9 - 62a: 439c lw a5,0(a5) - 62c: 97e6 add a5,a5,s9 - 62e: 8782 jr a5 + 612: 11490c63 beq s2,s4,72a <vprintf+0x18e> + 616: f9d9079b addiw a5,s2,-99 + 61a: 0ff7f793 zext.b a5,a5 + 61e: 10fc6e63 bltu s8,a5,73a <vprintf+0x19e> + 622: f9d9079b addiw a5,s2,-99 + 626: 0ff7f713 zext.b a4,a5 + 62a: 10ec6863 bltu s8,a4,73a <vprintf+0x19e> + 62e: 00271793 slli a5,a4,0x2 + 632: 97e6 add a5,a5,s9 + 634: 439c lw a5,0(a5) + 636: 97e6 add a5,a5,s9 + 638: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 630: 008b0913 addi s2,s6,8 - 634: 4685 li a3,1 - 636: 4629 li a2,10 - 638: 000b2583 lw a1,0(s6) - 63c: 8556 mv a0,s5 - 63e: 00000097 auipc ra,0x0 - 642: eaa080e7 jalr -342(ra) # 4e8 <printint> - 646: 8b4a mv s6,s2 + 63a: 008b0913 addi s2,s6,8 + 63e: 4685 li a3,1 + 640: 4629 li a2,10 + 642: 000b2583 lw a1,0(s6) + 646: 8556 mv a0,s5 + 648: 00000097 auipc ra,0x0 + 64c: eaa080e7 jalr -342(ra) # 4f2 <printint> + 650: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 648: 4981 li s3,0 - 64a: b765 j 5f2 <vprintf+0x60> + 652: 4981 li s3,0 + 654: b765 j 5fc <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 64c: 008b0913 addi s2,s6,8 - 650: 4681 li a3,0 - 652: 4629 li a2,10 - 654: 000b2583 lw a1,0(s6) - 658: 8556 mv a0,s5 - 65a: 00000097 auipc ra,0x0 - 65e: e8e080e7 jalr -370(ra) # 4e8 <printint> - 662: 8b4a mv s6,s2 + 656: 008b0913 addi s2,s6,8 + 65a: 4681 li a3,0 + 65c: 4629 li a2,10 + 65e: 000b2583 lw a1,0(s6) + 662: 8556 mv a0,s5 + 664: 00000097 auipc ra,0x0 + 668: e8e080e7 jalr -370(ra) # 4f2 <printint> + 66c: 8b4a mv s6,s2 state = 0; - 664: 4981 li s3,0 - 666: b771 j 5f2 <vprintf+0x60> + 66e: 4981 li s3,0 + 670: b771 j 5fc <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 668: 008b0913 addi s2,s6,8 - 66c: 4681 li a3,0 - 66e: 866a mv a2,s10 - 670: 000b2583 lw a1,0(s6) - 674: 8556 mv a0,s5 - 676: 00000097 auipc ra,0x0 - 67a: e72080e7 jalr -398(ra) # 4e8 <printint> - 67e: 8b4a mv s6,s2 + 672: 008b0913 addi s2,s6,8 + 676: 4681 li a3,0 + 678: 866a mv a2,s10 + 67a: 000b2583 lw a1,0(s6) + 67e: 8556 mv a0,s5 + 680: 00000097 auipc ra,0x0 + 684: e72080e7 jalr -398(ra) # 4f2 <printint> + 688: 8b4a mv s6,s2 state = 0; - 680: 4981 li s3,0 - 682: bf85 j 5f2 <vprintf+0x60> + 68a: 4981 li s3,0 + 68c: bf85 j 5fc <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 684: 008b0793 addi a5,s6,8 - 688: f8f43423 sd a5,-120(s0) - 68c: 000b3983 ld s3,0(s6) + 68e: 008b0793 addi a5,s6,8 + 692: f8f43423 sd a5,-120(s0) + 696: 000b3983 ld s3,0(s6) putc(fd, '0'); - 690: 03000593 li a1,48 - 694: 8556 mv a0,s5 - 696: 00000097 auipc ra,0x0 - 69a: e30080e7 jalr -464(ra) # 4c6 <putc> + 69a: 03000593 li a1,48 + 69e: 8556 mv a0,s5 + 6a0: 00000097 auipc ra,0x0 + 6a4: e30080e7 jalr -464(ra) # 4d0 <putc> putc(fd, 'x'); - 69e: 07800593 li a1,120 - 6a2: 8556 mv a0,s5 - 6a4: 00000097 auipc ra,0x0 - 6a8: e22080e7 jalr -478(ra) # 4c6 <putc> - 6ac: 896a mv s2,s10 + 6a8: 07800593 li a1,120 + 6ac: 8556 mv a0,s5 + 6ae: 00000097 auipc ra,0x0 + 6b2: e22080e7 jalr -478(ra) # 4d0 <putc> + 6b6: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 6ae: 03c9d793 srli a5,s3,0x3c - 6b2: 97de add a5,a5,s7 - 6b4: 0007c583 lbu a1,0(a5) - 6b8: 8556 mv a0,s5 - 6ba: 00000097 auipc ra,0x0 - 6be: e0c080e7 jalr -500(ra) # 4c6 <putc> + 6b8: 03c9d793 srli a5,s3,0x3c + 6bc: 97de add a5,a5,s7 + 6be: 0007c583 lbu a1,0(a5) + 6c2: 8556 mv a0,s5 + 6c4: 00000097 auipc ra,0x0 + 6c8: e0c080e7 jalr -500(ra) # 4d0 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 6c2: 0992 slli s3,s3,0x4 - 6c4: 397d addiw s2,s2,-1 - 6c6: fe0914e3 bnez s2,6ae <vprintf+0x11c> + 6cc: 0992 slli s3,s3,0x4 + 6ce: 397d addiw s2,s2,-1 + 6d0: fe0914e3 bnez s2,6b8 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 6ca: f8843b03 ld s6,-120(s0) + 6d4: f8843b03 ld s6,-120(s0) state = 0; - 6ce: 4981 li s3,0 - 6d0: b70d j 5f2 <vprintf+0x60> + 6d8: 4981 li s3,0 + 6da: b70d j 5fc <vprintf+0x60> s = va_arg(ap, char*); - 6d2: 008b0913 addi s2,s6,8 - 6d6: 000b3983 ld s3,0(s6) + 6dc: 008b0913 addi s2,s6,8 + 6e0: 000b3983 ld s3,0(s6) if(s == 0) - 6da: 02098163 beqz s3,6fc <vprintf+0x16a> + 6e4: 02098163 beqz s3,706 <vprintf+0x16a> while(*s != 0){ - 6de: 0009c583 lbu a1,0(s3) - 6e2: c5ad beqz a1,74c <vprintf+0x1ba> + 6e8: 0009c583 lbu a1,0(s3) + 6ec: c5ad beqz a1,756 <vprintf+0x1ba> putc(fd, *s); - 6e4: 8556 mv a0,s5 - 6e6: 00000097 auipc ra,0x0 - 6ea: de0080e7 jalr -544(ra) # 4c6 <putc> + 6ee: 8556 mv a0,s5 + 6f0: 00000097 auipc ra,0x0 + 6f4: de0080e7 jalr -544(ra) # 4d0 <putc> s++; - 6ee: 0985 addi s3,s3,1 + 6f8: 0985 addi s3,s3,1 while(*s != 0){ - 6f0: 0009c583 lbu a1,0(s3) - 6f4: f9e5 bnez a1,6e4 <vprintf+0x152> + 6fa: 0009c583 lbu a1,0(s3) + 6fe: f9e5 bnez a1,6ee <vprintf+0x152> s = va_arg(ap, char*); - 6f6: 8b4a mv s6,s2 + 700: 8b4a mv s6,s2 state = 0; - 6f8: 4981 li s3,0 - 6fa: bde5 j 5f2 <vprintf+0x60> + 702: 4981 li s3,0 + 704: bde5 j 5fc <vprintf+0x60> s = "(null)"; - 6fc: 00000997 auipc s3,0x0 - 700: 28c98993 addi s3,s3,652 # 988 <malloc+0x132> + 706: 00000997 auipc s3,0x0 + 70a: 29298993 addi s3,s3,658 # 998 <malloc+0x138> while(*s != 0){ - 704: 85ee mv a1,s11 - 706: bff9 j 6e4 <vprintf+0x152> + 70e: 85ee mv a1,s11 + 710: bff9 j 6ee <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 708: 008b0913 addi s2,s6,8 - 70c: 000b4583 lbu a1,0(s6) - 710: 8556 mv a0,s5 - 712: 00000097 auipc ra,0x0 - 716: db4080e7 jalr -588(ra) # 4c6 <putc> - 71a: 8b4a mv s6,s2 + 712: 008b0913 addi s2,s6,8 + 716: 000b4583 lbu a1,0(s6) + 71a: 8556 mv a0,s5 + 71c: 00000097 auipc ra,0x0 + 720: db4080e7 jalr -588(ra) # 4d0 <putc> + 724: 8b4a mv s6,s2 state = 0; - 71c: 4981 li s3,0 - 71e: bdd1 j 5f2 <vprintf+0x60> + 726: 4981 li s3,0 + 728: bdd1 j 5fc <vprintf+0x60> putc(fd, c); - 720: 85d2 mv a1,s4 - 722: 8556 mv a0,s5 - 724: 00000097 auipc ra,0x0 - 728: da2080e7 jalr -606(ra) # 4c6 <putc> + 72a: 85d2 mv a1,s4 + 72c: 8556 mv a0,s5 + 72e: 00000097 auipc ra,0x0 + 732: da2080e7 jalr -606(ra) # 4d0 <putc> state = 0; - 72c: 4981 li s3,0 - 72e: b5d1 j 5f2 <vprintf+0x60> + 736: 4981 li s3,0 + 738: b5d1 j 5fc <vprintf+0x60> putc(fd, '%'); - 730: 85d2 mv a1,s4 - 732: 8556 mv a0,s5 - 734: 00000097 auipc ra,0x0 - 738: d92080e7 jalr -622(ra) # 4c6 <putc> + 73a: 85d2 mv a1,s4 + 73c: 8556 mv a0,s5 + 73e: 00000097 auipc ra,0x0 + 742: d92080e7 jalr -622(ra) # 4d0 <putc> putc(fd, c); - 73c: 85ca mv a1,s2 - 73e: 8556 mv a0,s5 - 740: 00000097 auipc ra,0x0 - 744: d86080e7 jalr -634(ra) # 4c6 <putc> + 746: 85ca mv a1,s2 + 748: 8556 mv a0,s5 + 74a: 00000097 auipc ra,0x0 + 74e: d86080e7 jalr -634(ra) # 4d0 <putc> state = 0; - 748: 4981 li s3,0 - 74a: b565 j 5f2 <vprintf+0x60> + 752: 4981 li s3,0 + 754: b565 j 5fc <vprintf+0x60> s = va_arg(ap, char*); - 74c: 8b4a mv s6,s2 + 756: 8b4a mv s6,s2 state = 0; - 74e: 4981 li s3,0 - 750: b54d j 5f2 <vprintf+0x60> + 758: 4981 li s3,0 + 75a: b54d j 5fc <vprintf+0x60> } } } - 752: 70e6 ld ra,120(sp) - 754: 7446 ld s0,112(sp) - 756: 74a6 ld s1,104(sp) - 758: 7906 ld s2,96(sp) - 75a: 69e6 ld s3,88(sp) - 75c: 6a46 ld s4,80(sp) - 75e: 6aa6 ld s5,72(sp) - 760: 6b06 ld s6,64(sp) - 762: 7be2 ld s7,56(sp) - 764: 7c42 ld s8,48(sp) - 766: 7ca2 ld s9,40(sp) - 768: 7d02 ld s10,32(sp) - 76a: 6de2 ld s11,24(sp) - 76c: 6109 addi sp,sp,128 - 76e: 8082 ret - -0000000000000770 <fprintf>: + 75c: 70e6 ld ra,120(sp) + 75e: 7446 ld s0,112(sp) + 760: 74a6 ld s1,104(sp) + 762: 7906 ld s2,96(sp) + 764: 69e6 ld s3,88(sp) + 766: 6a46 ld s4,80(sp) + 768: 6aa6 ld s5,72(sp) + 76a: 6b06 ld s6,64(sp) + 76c: 7be2 ld s7,56(sp) + 76e: 7c42 ld s8,48(sp) + 770: 7ca2 ld s9,40(sp) + 772: 7d02 ld s10,32(sp) + 774: 6de2 ld s11,24(sp) + 776: 6109 addi sp,sp,128 + 778: 8082 ret + +000000000000077a <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 770: 715d addi sp,sp,-80 - 772: ec06 sd ra,24(sp) - 774: e822 sd s0,16(sp) - 776: 1000 addi s0,sp,32 - 778: e010 sd a2,0(s0) - 77a: e414 sd a3,8(s0) - 77c: e818 sd a4,16(s0) - 77e: ec1c sd a5,24(s0) - 780: 03043023 sd a6,32(s0) - 784: 03143423 sd a7,40(s0) + 77a: 715d addi sp,sp,-80 + 77c: ec06 sd ra,24(sp) + 77e: e822 sd s0,16(sp) + 780: 1000 addi s0,sp,32 + 782: e010 sd a2,0(s0) + 784: e414 sd a3,8(s0) + 786: e818 sd a4,16(s0) + 788: ec1c sd a5,24(s0) + 78a: 03043023 sd a6,32(s0) + 78e: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 788: 8622 mv a2,s0 - 78a: fe843423 sd s0,-24(s0) + 792: 8622 mv a2,s0 + 794: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 78e: 00000097 auipc ra,0x0 - 792: e04080e7 jalr -508(ra) # 592 <vprintf> + 798: 00000097 auipc ra,0x0 + 79c: e04080e7 jalr -508(ra) # 59c <vprintf> } - 796: 60e2 ld ra,24(sp) - 798: 6442 ld s0,16(sp) - 79a: 6161 addi sp,sp,80 - 79c: 8082 ret + 7a0: 60e2 ld ra,24(sp) + 7a2: 6442 ld s0,16(sp) + 7a4: 6161 addi sp,sp,80 + 7a6: 8082 ret -000000000000079e <printf>: +00000000000007a8 <printf>: void printf(const char *fmt, ...) { - 79e: 711d addi sp,sp,-96 - 7a0: ec06 sd ra,24(sp) - 7a2: e822 sd s0,16(sp) - 7a4: 1000 addi s0,sp,32 - 7a6: e40c sd a1,8(s0) - 7a8: e810 sd a2,16(s0) - 7aa: ec14 sd a3,24(s0) - 7ac: f018 sd a4,32(s0) - 7ae: f41c sd a5,40(s0) - 7b0: 03043823 sd a6,48(s0) - 7b4: 03143c23 sd a7,56(s0) + 7a8: 711d addi sp,sp,-96 + 7aa: ec06 sd ra,24(sp) + 7ac: e822 sd s0,16(sp) + 7ae: 1000 addi s0,sp,32 + 7b0: e40c sd a1,8(s0) + 7b2: e810 sd a2,16(s0) + 7b4: ec14 sd a3,24(s0) + 7b6: f018 sd a4,32(s0) + 7b8: f41c sd a5,40(s0) + 7ba: 03043823 sd a6,48(s0) + 7be: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 7b8: 00840613 addi a2,s0,8 - 7bc: fec43423 sd a2,-24(s0) + 7c2: 00840613 addi a2,s0,8 + 7c6: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 7c0: 85aa mv a1,a0 - 7c2: 4505 li a0,1 - 7c4: 00000097 auipc ra,0x0 - 7c8: dce080e7 jalr -562(ra) # 592 <vprintf> + 7ca: 85aa mv a1,a0 + 7cc: 4505 li a0,1 + 7ce: 00000097 auipc ra,0x0 + 7d2: dce080e7 jalr -562(ra) # 59c <vprintf> } - 7cc: 60e2 ld ra,24(sp) - 7ce: 6442 ld s0,16(sp) - 7d0: 6125 addi sp,sp,96 - 7d2: 8082 ret + 7d6: 60e2 ld ra,24(sp) + 7d8: 6442 ld s0,16(sp) + 7da: 6125 addi sp,sp,96 + 7dc: 8082 ret -00000000000007d4 <free>: +00000000000007de <free>: static Header base; static Header *freep; void free(void *ap) { - 7d4: 1141 addi sp,sp,-16 - 7d6: e422 sd s0,8(sp) - 7d8: 0800 addi s0,sp,16 + 7de: 1141 addi sp,sp,-16 + 7e0: e422 sd s0,8(sp) + 7e2: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 7da: ff050693 addi a3,a0,-16 + 7e4: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 7de: 00000797 auipc a5,0x0 - 7e2: 4227b783 ld a5,1058(a5) # c00 <freep> - 7e6: a02d j 810 <free+0x3c> + 7e8: 00000797 auipc a5,0x0 + 7ec: 4287b783 ld a5,1064(a5) # c10 <freep> + 7f0: a02d j 81a <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 7e8: 4618 lw a4,8(a2) - 7ea: 9f2d addw a4,a4,a1 - 7ec: fee52c23 sw a4,-8(a0) + 7f2: 4618 lw a4,8(a2) + 7f4: 9f2d addw a4,a4,a1 + 7f6: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 7f0: 6398 ld a4,0(a5) - 7f2: 6310 ld a2,0(a4) - 7f4: a83d j 832 <free+0x5e> + 7fa: 6398 ld a4,0(a5) + 7fc: 6310 ld a2,0(a4) + 7fe: a83d j 83c <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 7f6: ff852703 lw a4,-8(a0) - 7fa: 9f31 addw a4,a4,a2 - 7fc: c798 sw a4,8(a5) + 800: ff852703 lw a4,-8(a0) + 804: 9f31 addw a4,a4,a2 + 806: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 7fe: ff053683 ld a3,-16(a0) - 802: a091 j 846 <free+0x72> + 808: ff053683 ld a3,-16(a0) + 80c: a091 j 850 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 804: 6398 ld a4,0(a5) - 806: 00e7e463 bltu a5,a4,80e <free+0x3a> - 80a: 00e6ea63 bltu a3,a4,81e <free+0x4a> + 80e: 6398 ld a4,0(a5) + 810: 00e7e463 bltu a5,a4,818 <free+0x3a> + 814: 00e6ea63 bltu a3,a4,828 <free+0x4a> { - 80e: 87ba mv a5,a4 + 818: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 810: fed7fae3 bgeu a5,a3,804 <free+0x30> - 814: 6398 ld a4,0(a5) - 816: 00e6e463 bltu a3,a4,81e <free+0x4a> + 81a: fed7fae3 bgeu a5,a3,80e <free+0x30> + 81e: 6398 ld a4,0(a5) + 820: 00e6e463 bltu a3,a4,828 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 81a: fee7eae3 bltu a5,a4,80e <free+0x3a> + 824: fee7eae3 bltu a5,a4,818 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 81e: ff852583 lw a1,-8(a0) - 822: 6390 ld a2,0(a5) - 824: 02059813 slli a6,a1,0x20 - 828: 01c85713 srli a4,a6,0x1c - 82c: 9736 add a4,a4,a3 - 82e: fae60de3 beq a2,a4,7e8 <free+0x14> + 828: ff852583 lw a1,-8(a0) + 82c: 6390 ld a2,0(a5) + 82e: 02059813 slli a6,a1,0x20 + 832: 01c85713 srli a4,a6,0x1c + 836: 9736 add a4,a4,a3 + 838: fae60de3 beq a2,a4,7f2 <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 832: fec53823 sd a2,-16(a0) + 83c: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 836: 4790 lw a2,8(a5) - 838: 02061593 slli a1,a2,0x20 - 83c: 01c5d713 srli a4,a1,0x1c - 840: 973e add a4,a4,a5 - 842: fae68ae3 beq a3,a4,7f6 <free+0x22> + 840: 4790 lw a2,8(a5) + 842: 02061593 slli a1,a2,0x20 + 846: 01c5d713 srli a4,a1,0x1c + 84a: 973e add a4,a4,a5 + 84c: fae68ae3 beq a3,a4,800 <free+0x22> p->s.ptr = bp->s.ptr; - 846: e394 sd a3,0(a5) + 850: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 848: 00000717 auipc a4,0x0 - 84c: 3af73c23 sd a5,952(a4) # c00 <freep> + 852: 00000717 auipc a4,0x0 + 856: 3af73f23 sd a5,958(a4) # c10 <freep> } - 850: 6422 ld s0,8(sp) - 852: 0141 addi sp,sp,16 - 854: 8082 ret + 85a: 6422 ld s0,8(sp) + 85c: 0141 addi sp,sp,16 + 85e: 8082 ret -0000000000000856 <malloc>: +0000000000000860 <malloc>: return freep; } void* malloc(uint nbytes) { - 856: 7139 addi sp,sp,-64 - 858: fc06 sd ra,56(sp) - 85a: f822 sd s0,48(sp) - 85c: f426 sd s1,40(sp) - 85e: f04a sd s2,32(sp) - 860: ec4e sd s3,24(sp) - 862: e852 sd s4,16(sp) - 864: e456 sd s5,8(sp) - 866: e05a sd s6,0(sp) - 868: 0080 addi s0,sp,64 + 860: 7139 addi sp,sp,-64 + 862: fc06 sd ra,56(sp) + 864: f822 sd s0,48(sp) + 866: f426 sd s1,40(sp) + 868: f04a sd s2,32(sp) + 86a: ec4e sd s3,24(sp) + 86c: e852 sd s4,16(sp) + 86e: e456 sd s5,8(sp) + 870: e05a sd s6,0(sp) + 872: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 86a: 02051493 slli s1,a0,0x20 - 86e: 9081 srli s1,s1,0x20 - 870: 04bd addi s1,s1,15 - 872: 8091 srli s1,s1,0x4 - 874: 00148a1b addiw s4,s1,1 - 878: 0485 addi s1,s1,1 + 874: 02051493 slli s1,a0,0x20 + 878: 9081 srli s1,s1,0x20 + 87a: 04bd addi s1,s1,15 + 87c: 8091 srli s1,s1,0x4 + 87e: 00148a1b addiw s4,s1,1 + 882: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 87a: 00000517 auipc a0,0x0 - 87e: 38653503 ld a0,902(a0) # c00 <freep> - 882: c515 beqz a0,8ae <malloc+0x58> + 884: 00000517 auipc a0,0x0 + 888: 38c53503 ld a0,908(a0) # c10 <freep> + 88c: c515 beqz a0,8b8 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 884: 611c ld a5,0(a0) + 88e: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 886: 4798 lw a4,8(a5) - 888: 04977163 bgeu a4,s1,8ca <malloc+0x74> - 88c: 89d2 mv s3,s4 - 88e: 000a071b sext.w a4,s4 - 892: 6685 lui a3,0x1 - 894: 00d77363 bgeu a4,a3,89a <malloc+0x44> - 898: 6985 lui s3,0x1 - 89a: 00098b1b sext.w s6,s3 + 890: 4798 lw a4,8(a5) + 892: 04977163 bgeu a4,s1,8d4 <malloc+0x74> + 896: 89d2 mv s3,s4 + 898: 000a071b sext.w a4,s4 + 89c: 6685 lui a3,0x1 + 89e: 00d77363 bgeu a4,a3,8a4 <malloc+0x44> + 8a2: 6985 lui s3,0x1 + 8a4: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 89e: 0049999b slliw s3,s3,0x4 + 8a8: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 8a2: 00000917 auipc s2,0x0 - 8a6: 35e90913 addi s2,s2,862 # c00 <freep> + 8ac: 00000917 auipc s2,0x0 + 8b0: 36490913 addi s2,s2,868 # c10 <freep> if(p == (char*)-1) - 8aa: 5afd li s5,-1 - 8ac: a8a5 j 924 <malloc+0xce> + 8b4: 5afd li s5,-1 + 8b6: a8a5 j 92e <malloc+0xce> base.s.ptr = freep = prevp = &base; - 8ae: 00000797 auipc a5,0x0 - 8b2: 35278793 addi a5,a5,850 # c00 <freep> - 8b6: 00000717 auipc a4,0x0 - 8ba: 35270713 addi a4,a4,850 # c08 <base> - 8be: e398 sd a4,0(a5) - 8c0: e798 sd a4,8(a5) + 8b8: 00000797 auipc a5,0x0 + 8bc: 35878793 addi a5,a5,856 # c10 <freep> + 8c0: 00000717 auipc a4,0x0 + 8c4: 35870713 addi a4,a4,856 # c18 <base> + 8c8: e398 sd a4,0(a5) + 8ca: e798 sd a4,8(a5) base.s.size = 0; - 8c2: 0007a823 sw zero,16(a5) + 8cc: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 8c6: 87ba mv a5,a4 - 8c8: b7d1 j 88c <malloc+0x36> + 8d0: 87ba mv a5,a4 + 8d2: b7d1 j 896 <malloc+0x36> if(p->s.size == nunits) - 8ca: 02e48c63 beq s1,a4,902 <malloc+0xac> + 8d4: 02e48c63 beq s1,a4,90c <malloc+0xac> p->s.size -= nunits; - 8ce: 4147073b subw a4,a4,s4 - 8d2: c798 sw a4,8(a5) + 8d8: 4147073b subw a4,a4,s4 + 8dc: c798 sw a4,8(a5) p += p->s.size; - 8d4: 02071693 slli a3,a4,0x20 - 8d8: 01c6d713 srli a4,a3,0x1c - 8dc: 97ba add a5,a5,a4 + 8de: 02071693 slli a3,a4,0x20 + 8e2: 01c6d713 srli a4,a3,0x1c + 8e6: 97ba add a5,a5,a4 p->s.size = nunits; - 8de: 0147a423 sw s4,8(a5) + 8e8: 0147a423 sw s4,8(a5) freep = prevp; - 8e2: 00000717 auipc a4,0x0 - 8e6: 30a73f23 sd a0,798(a4) # c00 <freep> + 8ec: 00000717 auipc a4,0x0 + 8f0: 32a73223 sd a0,804(a4) # c10 <freep> return (void*)(p + 1); - 8ea: 01078513 addi a0,a5,16 + 8f4: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 8ee: 70e2 ld ra,56(sp) - 8f0: 7442 ld s0,48(sp) - 8f2: 74a2 ld s1,40(sp) - 8f4: 7902 ld s2,32(sp) - 8f6: 69e2 ld s3,24(sp) - 8f8: 6a42 ld s4,16(sp) - 8fa: 6aa2 ld s5,8(sp) - 8fc: 6b02 ld s6,0(sp) - 8fe: 6121 addi sp,sp,64 - 900: 8082 ret + 8f8: 70e2 ld ra,56(sp) + 8fa: 7442 ld s0,48(sp) + 8fc: 74a2 ld s1,40(sp) + 8fe: 7902 ld s2,32(sp) + 900: 69e2 ld s3,24(sp) + 902: 6a42 ld s4,16(sp) + 904: 6aa2 ld s5,8(sp) + 906: 6b02 ld s6,0(sp) + 908: 6121 addi sp,sp,64 + 90a: 8082 ret prevp->s.ptr = p->s.ptr; - 902: 6398 ld a4,0(a5) - 904: e118 sd a4,0(a0) - 906: bff1 j 8e2 <malloc+0x8c> + 90c: 6398 ld a4,0(a5) + 90e: e118 sd a4,0(a0) + 910: bff1 j 8ec <malloc+0x8c> hp->s.size = nu; - 908: 01652423 sw s6,8(a0) + 912: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 90c: 0541 addi a0,a0,16 - 90e: 00000097 auipc ra,0x0 - 912: ec6080e7 jalr -314(ra) # 7d4 <free> + 916: 0541 addi a0,a0,16 + 918: 00000097 auipc ra,0x0 + 91c: ec6080e7 jalr -314(ra) # 7de <free> return freep; - 916: 00093503 ld a0,0(s2) + 920: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 91a: d971 beqz a0,8ee <malloc+0x98> + 924: d971 beqz a0,8f8 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 91c: 611c ld a5,0(a0) + 926: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 91e: 4798 lw a4,8(a5) - 920: fa9775e3 bgeu a4,s1,8ca <malloc+0x74> + 928: 4798 lw a4,8(a5) + 92a: fa9775e3 bgeu a4,s1,8d4 <malloc+0x74> if(p == freep) - 924: 00093703 ld a4,0(s2) - 928: 853e mv a0,a5 - 92a: fef719e3 bne a4,a5,91c <malloc+0xc6> + 92e: 00093703 ld a4,0(s2) + 932: 853e mv a0,a5 + 934: fef719e3 bne a4,a5,926 <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 92e: 854e mv a0,s3 - 930: 00000097 auipc ra,0x0 - 934: b2a080e7 jalr -1238(ra) # 45a <sbrk> + 938: 854e mv a0,s3 + 93a: 00000097 auipc ra,0x0 + 93e: b20080e7 jalr -1248(ra) # 45a <sbrk> if(p == (char*)-1) - 938: fd5518e3 bne a0,s5,908 <malloc+0xb2> + 942: fd5518e3 bne a0,s5,912 <malloc+0xb2> return 0; - 93c: 4501 li a0,0 - 93e: bf45 j 8ee <malloc+0x98> + 946: 4501 li a0,0 + 948: bf45 j 8f8 <malloc+0x98> diff --git a/xv6-user/cat.sym b/xv6-user/cat.sym index f573702..e4d566a 100644 --- a/xv6-user/cat.sym +++ b/xv6-user/cat.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -0000000000000940 .rodata -0000000000000a00 .bss +0000000000000950 .rodata +0000000000000a10 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,24 +16,25 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -00000000000004c6 putc -00000000000004e8 printint -00000000000009e8 digits +00000000000004d0 putc +00000000000004f2 printint +00000000000009f8 digits 0000000000000000 umalloc.c -0000000000000c00 freep -0000000000000c08 base +0000000000000c10 freep +0000000000000c18 base 000000000000011e strcpy -000000000000079e printf -00000000000011f9 __global_pointer$ +00000000000007a8 printf +0000000000001209 __global_pointer$ 000000000000047a dev 0000000000000324 memmove +00000000000004c6 times 000000000000049a trace 0000000000000204 gets -00000000000009f9 __SDATA_BEGIN__ +0000000000000a09 __SDATA_BEGIN__ 0000000000000450 getpid 00000000000003b6 memcpy 0000000000000000 cat -0000000000000856 malloc +0000000000000860 malloc 0000000000000492 remove 0000000000000462 sleep 00000000000004a2 sysinfo @@ -43,32 +44,32 @@ 00000000000004aa rename 00000000000003fc write 000000000000042a fstat -0000000000000770 fprintf +000000000000077a fprintf 0000000000000410 kill 000000000000013a strcat -0000000000000592 vprintf +000000000000059c vprintf 000000000000043e chdir 0000000000000418 exec 00000000000003e0 wait 00000000000003f2 read 000000000000037c memcmp 00000000000003ce fork -0000000000000c18 __BSS_END__ +0000000000000c28 __BSS_END__ 000000000000045a sbrk 0000000000000472 test_proc 000000000000046a uptime -00000000000009f9 __bss_start +0000000000000a09 __bss_start 00000000000001be memset 000000000000008a main 0000000000000168 strcmp 00000000000004b2 shutdown 0000000000000448 dup 000000000000048a getcwd -0000000000000a00 buf -00000000000009f9 __DATA_BEGIN__ +0000000000000a10 buf +0000000000000a09 __DATA_BEGIN__ 000000000000027e stat -00000000000009f9 _edata -0000000000000c18 _end +0000000000000a09 _edata +0000000000000c28 _end 00000000000003d6 exit 00000000000002c4 atoi 0000000000000194 strlen @@ -76,4 +77,4 @@ 00000000000001e0 strchr 0000000000000434 mkdir 0000000000000406 close -00000000000007d4 free +00000000000007de free diff --git a/xv6-user/echo.asm b/xv6-user/echo.asm index 88089c9..4925ebc 100644 --- a/xv6-user/echo.asm +++ b/xv6-user/echo.asm @@ -34,7 +34,7 @@ main(int argc, char *argv[]) if(i + 1 < argc){ write(1, " ", 1); 2a: 00001a17 auipc s4,0x1 - 2e: 87ea0a13 addi s4,s4,-1922 # 8a8 <malloc+0xec> + 2e: 886a0a13 addi s4,s4,-1914 # 8b0 <malloc+0xea> write(1, argv[i], strlen(argv[i])); 32: 0004b903 ld s2,0(s1) 36: 854a mv a0,s2 @@ -60,7 +60,7 @@ main(int argc, char *argv[]) write(1, "\n", 1); 66: 4605 li a2,1 68: 00001597 auipc a1,0x1 - 6c: 84858593 addi a1,a1,-1976 # 8b0 <malloc+0xf4> + 6c: 85058593 addi a1,a1,-1968 # 8b8 <malloc+0xf2> 70: 4505 li a0,1 72: 00000097 auipc ra,0x0 76: 2f0080e7 jalr 752(ra) # 362 <write> @@ -827,637 +827,647 @@ uname: ret 42a: 8082 ret -000000000000042c <putc>: +000000000000042c <times>: +.global times +times: + li a7, SYS_times + 42c: 09900893 li a7,153 + ecall + 430: 00000073 ecall + ret + 434: 8082 ret + +0000000000000436 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 42c: 1101 addi sp,sp,-32 - 42e: ec06 sd ra,24(sp) - 430: e822 sd s0,16(sp) - 432: 1000 addi s0,sp,32 - 434: feb407a3 sb a1,-17(s0) + 436: 1101 addi sp,sp,-32 + 438: ec06 sd ra,24(sp) + 43a: e822 sd s0,16(sp) + 43c: 1000 addi s0,sp,32 + 43e: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 438: 4605 li a2,1 - 43a: fef40593 addi a1,s0,-17 - 43e: 00000097 auipc ra,0x0 - 442: f24080e7 jalr -220(ra) # 362 <write> + 442: 4605 li a2,1 + 444: fef40593 addi a1,s0,-17 + 448: 00000097 auipc ra,0x0 + 44c: f1a080e7 jalr -230(ra) # 362 <write> } - 446: 60e2 ld ra,24(sp) - 448: 6442 ld s0,16(sp) - 44a: 6105 addi sp,sp,32 - 44c: 8082 ret + 450: 60e2 ld ra,24(sp) + 452: 6442 ld s0,16(sp) + 454: 6105 addi sp,sp,32 + 456: 8082 ret -000000000000044e <printint>: +0000000000000458 <printint>: static void printint(int fd, int xx, int base, int sgn) { - 44e: 7139 addi sp,sp,-64 - 450: fc06 sd ra,56(sp) - 452: f822 sd s0,48(sp) - 454: f426 sd s1,40(sp) - 456: f04a sd s2,32(sp) - 458: ec4e sd s3,24(sp) - 45a: 0080 addi s0,sp,64 - 45c: 84aa mv s1,a0 + 458: 7139 addi sp,sp,-64 + 45a: fc06 sd ra,56(sp) + 45c: f822 sd s0,48(sp) + 45e: f426 sd s1,40(sp) + 460: f04a sd s2,32(sp) + 462: ec4e sd s3,24(sp) + 464: 0080 addi s0,sp,64 + 466: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 45e: c299 beqz a3,464 <printint+0x16> - 460: 0805c863 bltz a1,4f0 <printint+0xa2> + 468: c299 beqz a3,46e <printint+0x16> + 46a: 0805c863 bltz a1,4fa <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 464: 2581 sext.w a1,a1 + 46e: 2581 sext.w a1,a1 neg = 0; - 466: 4881 li a7,0 + 470: 4881 li a7,0 } i = 0; - 468: fc040993 addi s3,s0,-64 + 472: fc040993 addi s3,s0,-64 neg = 0; - 46c: 86ce mv a3,s3 + 476: 86ce mv a3,s3 i = 0; - 46e: 4701 li a4,0 + 478: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 470: 2601 sext.w a2,a2 - 472: 00000517 auipc a0,0x0 - 476: 4a650513 addi a0,a0,1190 # 918 <digits> - 47a: 883a mv a6,a4 - 47c: 2705 addiw a4,a4,1 - 47e: 02c5f7bb remuw a5,a1,a2 - 482: 1782 slli a5,a5,0x20 - 484: 9381 srli a5,a5,0x20 - 486: 97aa add a5,a5,a0 - 488: 0007c783 lbu a5,0(a5) - 48c: 00f68023 sb a5,0(a3) + 47a: 2601 sext.w a2,a2 + 47c: 00000517 auipc a0,0x0 + 480: 4a450513 addi a0,a0,1188 # 920 <digits> + 484: 883a mv a6,a4 + 486: 2705 addiw a4,a4,1 + 488: 02c5f7bb remuw a5,a1,a2 + 48c: 1782 slli a5,a5,0x20 + 48e: 9381 srli a5,a5,0x20 + 490: 97aa add a5,a5,a0 + 492: 0007c783 lbu a5,0(a5) + 496: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 490: 0005879b sext.w a5,a1 - 494: 02c5d5bb divuw a1,a1,a2 - 498: 0685 addi a3,a3,1 - 49a: fec7f0e3 bgeu a5,a2,47a <printint+0x2c> + 49a: 0005879b sext.w a5,a1 + 49e: 02c5d5bb divuw a1,a1,a2 + 4a2: 0685 addi a3,a3,1 + 4a4: fec7f0e3 bgeu a5,a2,484 <printint+0x2c> if(neg) - 49e: 00088c63 beqz a7,4b6 <printint+0x68> + 4a8: 00088c63 beqz a7,4c0 <printint+0x68> buf[i++] = '-'; - 4a2: fd070793 addi a5,a4,-48 - 4a6: 00878733 add a4,a5,s0 - 4aa: 02d00793 li a5,45 - 4ae: fef70823 sb a5,-16(a4) - 4b2: 0028071b addiw a4,a6,2 + 4ac: fd070793 addi a5,a4,-48 + 4b0: 00878733 add a4,a5,s0 + 4b4: 02d00793 li a5,45 + 4b8: fef70823 sb a5,-16(a4) + 4bc: 0028071b addiw a4,a6,2 while(--i >= 0) - 4b6: 02e05663 blez a4,4e2 <printint+0x94> - 4ba: fc040913 addi s2,s0,-64 - 4be: 993a add s2,s2,a4 - 4c0: 19fd addi s3,s3,-1 - 4c2: 99ba add s3,s3,a4 - 4c4: 377d addiw a4,a4,-1 - 4c6: 1702 slli a4,a4,0x20 - 4c8: 9301 srli a4,a4,0x20 - 4ca: 40e989b3 sub s3,s3,a4 + 4c0: 02e05663 blez a4,4ec <printint+0x94> + 4c4: fc040913 addi s2,s0,-64 + 4c8: 993a add s2,s2,a4 + 4ca: 19fd addi s3,s3,-1 + 4cc: 99ba add s3,s3,a4 + 4ce: 377d addiw a4,a4,-1 + 4d0: 1702 slli a4,a4,0x20 + 4d2: 9301 srli a4,a4,0x20 + 4d4: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 4ce: fff94583 lbu a1,-1(s2) - 4d2: 8526 mv a0,s1 - 4d4: 00000097 auipc ra,0x0 - 4d8: f58080e7 jalr -168(ra) # 42c <putc> + 4d8: fff94583 lbu a1,-1(s2) + 4dc: 8526 mv a0,s1 + 4de: 00000097 auipc ra,0x0 + 4e2: f58080e7 jalr -168(ra) # 436 <putc> while(--i >= 0) - 4dc: 197d addi s2,s2,-1 - 4de: ff3918e3 bne s2,s3,4ce <printint+0x80> + 4e6: 197d addi s2,s2,-1 + 4e8: ff3918e3 bne s2,s3,4d8 <printint+0x80> } - 4e2: 70e2 ld ra,56(sp) - 4e4: 7442 ld s0,48(sp) - 4e6: 74a2 ld s1,40(sp) - 4e8: 7902 ld s2,32(sp) - 4ea: 69e2 ld s3,24(sp) - 4ec: 6121 addi sp,sp,64 - 4ee: 8082 ret + 4ec: 70e2 ld ra,56(sp) + 4ee: 7442 ld s0,48(sp) + 4f0: 74a2 ld s1,40(sp) + 4f2: 7902 ld s2,32(sp) + 4f4: 69e2 ld s3,24(sp) + 4f6: 6121 addi sp,sp,64 + 4f8: 8082 ret x = -xx; - 4f0: 40b005bb negw a1,a1 + 4fa: 40b005bb negw a1,a1 neg = 1; - 4f4: 4885 li a7,1 + 4fe: 4885 li a7,1 x = -xx; - 4f6: bf8d j 468 <printint+0x1a> + 500: bf8d j 472 <printint+0x1a> -00000000000004f8 <vprintf>: +0000000000000502 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 4f8: 7119 addi sp,sp,-128 - 4fa: fc86 sd ra,120(sp) - 4fc: f8a2 sd s0,112(sp) - 4fe: f4a6 sd s1,104(sp) - 500: f0ca sd s2,96(sp) - 502: ecce sd s3,88(sp) - 504: e8d2 sd s4,80(sp) - 506: e4d6 sd s5,72(sp) - 508: e0da sd s6,64(sp) - 50a: fc5e sd s7,56(sp) - 50c: f862 sd s8,48(sp) - 50e: f466 sd s9,40(sp) - 510: f06a sd s10,32(sp) - 512: ec6e sd s11,24(sp) - 514: 0100 addi s0,sp,128 + 502: 7119 addi sp,sp,-128 + 504: fc86 sd ra,120(sp) + 506: f8a2 sd s0,112(sp) + 508: f4a6 sd s1,104(sp) + 50a: f0ca sd s2,96(sp) + 50c: ecce sd s3,88(sp) + 50e: e8d2 sd s4,80(sp) + 510: e4d6 sd s5,72(sp) + 512: e0da sd s6,64(sp) + 514: fc5e sd s7,56(sp) + 516: f862 sd s8,48(sp) + 518: f466 sd s9,40(sp) + 51a: f06a sd s10,32(sp) + 51c: ec6e sd s11,24(sp) + 51e: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 516: 0005c903 lbu s2,0(a1) - 51a: 18090f63 beqz s2,6b8 <vprintf+0x1c0> - 51e: 8aaa mv s5,a0 - 520: 8b32 mv s6,a2 - 522: 00158493 addi s1,a1,1 + 520: 0005c903 lbu s2,0(a1) + 524: 18090f63 beqz s2,6c2 <vprintf+0x1c0> + 528: 8aaa mv s5,a0 + 52a: 8b32 mv s6,a2 + 52c: 00158493 addi s1,a1,1 state = 0; - 526: 4981 li s3,0 + 530: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 528: 02500a13 li s4,37 - 52c: 4c55 li s8,21 - 52e: 00000c97 auipc s9,0x0 - 532: 392c8c93 addi s9,s9,914 # 8c0 <malloc+0x104> + 532: 02500a13 li s4,37 + 536: 4c55 li s8,21 + 538: 00000c97 auipc s9,0x0 + 53c: 390c8c93 addi s9,s9,912 # 8c8 <malloc+0x102> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 536: 02800d93 li s11,40 + 540: 02800d93 li s11,40 putc(fd, 'x'); - 53a: 4d41 li s10,16 + 544: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 53c: 00000b97 auipc s7,0x0 - 540: 3dcb8b93 addi s7,s7,988 # 918 <digits> - 544: a839 j 562 <vprintf+0x6a> + 546: 00000b97 auipc s7,0x0 + 54a: 3dab8b93 addi s7,s7,986 # 920 <digits> + 54e: a839 j 56c <vprintf+0x6a> putc(fd, c); - 546: 85ca mv a1,s2 - 548: 8556 mv a0,s5 - 54a: 00000097 auipc ra,0x0 - 54e: ee2080e7 jalr -286(ra) # 42c <putc> - 552: a019 j 558 <vprintf+0x60> + 550: 85ca mv a1,s2 + 552: 8556 mv a0,s5 + 554: 00000097 auipc ra,0x0 + 558: ee2080e7 jalr -286(ra) # 436 <putc> + 55c: a019 j 562 <vprintf+0x60> } else if(state == '%'){ - 554: 01498d63 beq s3,s4,56e <vprintf+0x76> + 55e: 01498d63 beq s3,s4,578 <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 558: 0485 addi s1,s1,1 - 55a: fff4c903 lbu s2,-1(s1) - 55e: 14090d63 beqz s2,6b8 <vprintf+0x1c0> + 562: 0485 addi s1,s1,1 + 564: fff4c903 lbu s2,-1(s1) + 568: 14090d63 beqz s2,6c2 <vprintf+0x1c0> if(state == 0){ - 562: fe0999e3 bnez s3,554 <vprintf+0x5c> + 56c: fe0999e3 bnez s3,55e <vprintf+0x5c> if(c == '%'){ - 566: ff4910e3 bne s2,s4,546 <vprintf+0x4e> + 570: ff4910e3 bne s2,s4,550 <vprintf+0x4e> state = '%'; - 56a: 89d2 mv s3,s4 - 56c: b7f5 j 558 <vprintf+0x60> + 574: 89d2 mv s3,s4 + 576: b7f5 j 562 <vprintf+0x60> if(c == 'd'){ - 56e: 11490c63 beq s2,s4,686 <vprintf+0x18e> - 572: f9d9079b addiw a5,s2,-99 - 576: 0ff7f793 zext.b a5,a5 - 57a: 10fc6e63 bltu s8,a5,696 <vprintf+0x19e> - 57e: f9d9079b addiw a5,s2,-99 - 582: 0ff7f713 zext.b a4,a5 - 586: 10ec6863 bltu s8,a4,696 <vprintf+0x19e> - 58a: 00271793 slli a5,a4,0x2 - 58e: 97e6 add a5,a5,s9 - 590: 439c lw a5,0(a5) - 592: 97e6 add a5,a5,s9 - 594: 8782 jr a5 + 578: 11490c63 beq s2,s4,690 <vprintf+0x18e> + 57c: f9d9079b addiw a5,s2,-99 + 580: 0ff7f793 zext.b a5,a5 + 584: 10fc6e63 bltu s8,a5,6a0 <vprintf+0x19e> + 588: f9d9079b addiw a5,s2,-99 + 58c: 0ff7f713 zext.b a4,a5 + 590: 10ec6863 bltu s8,a4,6a0 <vprintf+0x19e> + 594: 00271793 slli a5,a4,0x2 + 598: 97e6 add a5,a5,s9 + 59a: 439c lw a5,0(a5) + 59c: 97e6 add a5,a5,s9 + 59e: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 596: 008b0913 addi s2,s6,8 - 59a: 4685 li a3,1 - 59c: 4629 li a2,10 - 59e: 000b2583 lw a1,0(s6) - 5a2: 8556 mv a0,s5 - 5a4: 00000097 auipc ra,0x0 - 5a8: eaa080e7 jalr -342(ra) # 44e <printint> - 5ac: 8b4a mv s6,s2 + 5a0: 008b0913 addi s2,s6,8 + 5a4: 4685 li a3,1 + 5a6: 4629 li a2,10 + 5a8: 000b2583 lw a1,0(s6) + 5ac: 8556 mv a0,s5 + 5ae: 00000097 auipc ra,0x0 + 5b2: eaa080e7 jalr -342(ra) # 458 <printint> + 5b6: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 5ae: 4981 li s3,0 - 5b0: b765 j 558 <vprintf+0x60> + 5b8: 4981 li s3,0 + 5ba: b765 j 562 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 5b2: 008b0913 addi s2,s6,8 - 5b6: 4681 li a3,0 - 5b8: 4629 li a2,10 - 5ba: 000b2583 lw a1,0(s6) - 5be: 8556 mv a0,s5 - 5c0: 00000097 auipc ra,0x0 - 5c4: e8e080e7 jalr -370(ra) # 44e <printint> - 5c8: 8b4a mv s6,s2 + 5bc: 008b0913 addi s2,s6,8 + 5c0: 4681 li a3,0 + 5c2: 4629 li a2,10 + 5c4: 000b2583 lw a1,0(s6) + 5c8: 8556 mv a0,s5 + 5ca: 00000097 auipc ra,0x0 + 5ce: e8e080e7 jalr -370(ra) # 458 <printint> + 5d2: 8b4a mv s6,s2 state = 0; - 5ca: 4981 li s3,0 - 5cc: b771 j 558 <vprintf+0x60> + 5d4: 4981 li s3,0 + 5d6: b771 j 562 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 5ce: 008b0913 addi s2,s6,8 - 5d2: 4681 li a3,0 - 5d4: 866a mv a2,s10 - 5d6: 000b2583 lw a1,0(s6) - 5da: 8556 mv a0,s5 - 5dc: 00000097 auipc ra,0x0 - 5e0: e72080e7 jalr -398(ra) # 44e <printint> - 5e4: 8b4a mv s6,s2 + 5d8: 008b0913 addi s2,s6,8 + 5dc: 4681 li a3,0 + 5de: 866a mv a2,s10 + 5e0: 000b2583 lw a1,0(s6) + 5e4: 8556 mv a0,s5 + 5e6: 00000097 auipc ra,0x0 + 5ea: e72080e7 jalr -398(ra) # 458 <printint> + 5ee: 8b4a mv s6,s2 state = 0; - 5e6: 4981 li s3,0 - 5e8: bf85 j 558 <vprintf+0x60> + 5f0: 4981 li s3,0 + 5f2: bf85 j 562 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 5ea: 008b0793 addi a5,s6,8 - 5ee: f8f43423 sd a5,-120(s0) - 5f2: 000b3983 ld s3,0(s6) + 5f4: 008b0793 addi a5,s6,8 + 5f8: f8f43423 sd a5,-120(s0) + 5fc: 000b3983 ld s3,0(s6) putc(fd, '0'); - 5f6: 03000593 li a1,48 - 5fa: 8556 mv a0,s5 - 5fc: 00000097 auipc ra,0x0 - 600: e30080e7 jalr -464(ra) # 42c <putc> + 600: 03000593 li a1,48 + 604: 8556 mv a0,s5 + 606: 00000097 auipc ra,0x0 + 60a: e30080e7 jalr -464(ra) # 436 <putc> putc(fd, 'x'); - 604: 07800593 li a1,120 - 608: 8556 mv a0,s5 - 60a: 00000097 auipc ra,0x0 - 60e: e22080e7 jalr -478(ra) # 42c <putc> - 612: 896a mv s2,s10 + 60e: 07800593 li a1,120 + 612: 8556 mv a0,s5 + 614: 00000097 auipc ra,0x0 + 618: e22080e7 jalr -478(ra) # 436 <putc> + 61c: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 614: 03c9d793 srli a5,s3,0x3c - 618: 97de add a5,a5,s7 - 61a: 0007c583 lbu a1,0(a5) - 61e: 8556 mv a0,s5 - 620: 00000097 auipc ra,0x0 - 624: e0c080e7 jalr -500(ra) # 42c <putc> + 61e: 03c9d793 srli a5,s3,0x3c + 622: 97de add a5,a5,s7 + 624: 0007c583 lbu a1,0(a5) + 628: 8556 mv a0,s5 + 62a: 00000097 auipc ra,0x0 + 62e: e0c080e7 jalr -500(ra) # 436 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 628: 0992 slli s3,s3,0x4 - 62a: 397d addiw s2,s2,-1 - 62c: fe0914e3 bnez s2,614 <vprintf+0x11c> + 632: 0992 slli s3,s3,0x4 + 634: 397d addiw s2,s2,-1 + 636: fe0914e3 bnez s2,61e <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 630: f8843b03 ld s6,-120(s0) + 63a: f8843b03 ld s6,-120(s0) state = 0; - 634: 4981 li s3,0 - 636: b70d j 558 <vprintf+0x60> + 63e: 4981 li s3,0 + 640: b70d j 562 <vprintf+0x60> s = va_arg(ap, char*); - 638: 008b0913 addi s2,s6,8 - 63c: 000b3983 ld s3,0(s6) + 642: 008b0913 addi s2,s6,8 + 646: 000b3983 ld s3,0(s6) if(s == 0) - 640: 02098163 beqz s3,662 <vprintf+0x16a> + 64a: 02098163 beqz s3,66c <vprintf+0x16a> while(*s != 0){ - 644: 0009c583 lbu a1,0(s3) - 648: c5ad beqz a1,6b2 <vprintf+0x1ba> + 64e: 0009c583 lbu a1,0(s3) + 652: c5ad beqz a1,6bc <vprintf+0x1ba> putc(fd, *s); - 64a: 8556 mv a0,s5 - 64c: 00000097 auipc ra,0x0 - 650: de0080e7 jalr -544(ra) # 42c <putc> + 654: 8556 mv a0,s5 + 656: 00000097 auipc ra,0x0 + 65a: de0080e7 jalr -544(ra) # 436 <putc> s++; - 654: 0985 addi s3,s3,1 + 65e: 0985 addi s3,s3,1 while(*s != 0){ - 656: 0009c583 lbu a1,0(s3) - 65a: f9e5 bnez a1,64a <vprintf+0x152> + 660: 0009c583 lbu a1,0(s3) + 664: f9e5 bnez a1,654 <vprintf+0x152> s = va_arg(ap, char*); - 65c: 8b4a mv s6,s2 + 666: 8b4a mv s6,s2 state = 0; - 65e: 4981 li s3,0 - 660: bde5 j 558 <vprintf+0x60> + 668: 4981 li s3,0 + 66a: bde5 j 562 <vprintf+0x60> s = "(null)"; - 662: 00000997 auipc s3,0x0 - 666: 25698993 addi s3,s3,598 # 8b8 <malloc+0xfc> + 66c: 00000997 auipc s3,0x0 + 670: 25498993 addi s3,s3,596 # 8c0 <malloc+0xfa> while(*s != 0){ - 66a: 85ee mv a1,s11 - 66c: bff9 j 64a <vprintf+0x152> + 674: 85ee mv a1,s11 + 676: bff9 j 654 <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 66e: 008b0913 addi s2,s6,8 - 672: 000b4583 lbu a1,0(s6) - 676: 8556 mv a0,s5 - 678: 00000097 auipc ra,0x0 - 67c: db4080e7 jalr -588(ra) # 42c <putc> - 680: 8b4a mv s6,s2 + 678: 008b0913 addi s2,s6,8 + 67c: 000b4583 lbu a1,0(s6) + 680: 8556 mv a0,s5 + 682: 00000097 auipc ra,0x0 + 686: db4080e7 jalr -588(ra) # 436 <putc> + 68a: 8b4a mv s6,s2 state = 0; - 682: 4981 li s3,0 - 684: bdd1 j 558 <vprintf+0x60> + 68c: 4981 li s3,0 + 68e: bdd1 j 562 <vprintf+0x60> putc(fd, c); - 686: 85d2 mv a1,s4 - 688: 8556 mv a0,s5 - 68a: 00000097 auipc ra,0x0 - 68e: da2080e7 jalr -606(ra) # 42c <putc> + 690: 85d2 mv a1,s4 + 692: 8556 mv a0,s5 + 694: 00000097 auipc ra,0x0 + 698: da2080e7 jalr -606(ra) # 436 <putc> state = 0; - 692: 4981 li s3,0 - 694: b5d1 j 558 <vprintf+0x60> + 69c: 4981 li s3,0 + 69e: b5d1 j 562 <vprintf+0x60> putc(fd, '%'); - 696: 85d2 mv a1,s4 - 698: 8556 mv a0,s5 - 69a: 00000097 auipc ra,0x0 - 69e: d92080e7 jalr -622(ra) # 42c <putc> + 6a0: 85d2 mv a1,s4 + 6a2: 8556 mv a0,s5 + 6a4: 00000097 auipc ra,0x0 + 6a8: d92080e7 jalr -622(ra) # 436 <putc> putc(fd, c); - 6a2: 85ca mv a1,s2 - 6a4: 8556 mv a0,s5 - 6a6: 00000097 auipc ra,0x0 - 6aa: d86080e7 jalr -634(ra) # 42c <putc> + 6ac: 85ca mv a1,s2 + 6ae: 8556 mv a0,s5 + 6b0: 00000097 auipc ra,0x0 + 6b4: d86080e7 jalr -634(ra) # 436 <putc> state = 0; - 6ae: 4981 li s3,0 - 6b0: b565 j 558 <vprintf+0x60> + 6b8: 4981 li s3,0 + 6ba: b565 j 562 <vprintf+0x60> s = va_arg(ap, char*); - 6b2: 8b4a mv s6,s2 + 6bc: 8b4a mv s6,s2 state = 0; - 6b4: 4981 li s3,0 - 6b6: b54d j 558 <vprintf+0x60> + 6be: 4981 li s3,0 + 6c0: b54d j 562 <vprintf+0x60> } } } - 6b8: 70e6 ld ra,120(sp) - 6ba: 7446 ld s0,112(sp) - 6bc: 74a6 ld s1,104(sp) - 6be: 7906 ld s2,96(sp) - 6c0: 69e6 ld s3,88(sp) - 6c2: 6a46 ld s4,80(sp) - 6c4: 6aa6 ld s5,72(sp) - 6c6: 6b06 ld s6,64(sp) - 6c8: 7be2 ld s7,56(sp) - 6ca: 7c42 ld s8,48(sp) - 6cc: 7ca2 ld s9,40(sp) - 6ce: 7d02 ld s10,32(sp) - 6d0: 6de2 ld s11,24(sp) - 6d2: 6109 addi sp,sp,128 - 6d4: 8082 ret - -00000000000006d6 <fprintf>: + 6c2: 70e6 ld ra,120(sp) + 6c4: 7446 ld s0,112(sp) + 6c6: 74a6 ld s1,104(sp) + 6c8: 7906 ld s2,96(sp) + 6ca: 69e6 ld s3,88(sp) + 6cc: 6a46 ld s4,80(sp) + 6ce: 6aa6 ld s5,72(sp) + 6d0: 6b06 ld s6,64(sp) + 6d2: 7be2 ld s7,56(sp) + 6d4: 7c42 ld s8,48(sp) + 6d6: 7ca2 ld s9,40(sp) + 6d8: 7d02 ld s10,32(sp) + 6da: 6de2 ld s11,24(sp) + 6dc: 6109 addi sp,sp,128 + 6de: 8082 ret + +00000000000006e0 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 6d6: 715d addi sp,sp,-80 - 6d8: ec06 sd ra,24(sp) - 6da: e822 sd s0,16(sp) - 6dc: 1000 addi s0,sp,32 - 6de: e010 sd a2,0(s0) - 6e0: e414 sd a3,8(s0) - 6e2: e818 sd a4,16(s0) - 6e4: ec1c sd a5,24(s0) - 6e6: 03043023 sd a6,32(s0) - 6ea: 03143423 sd a7,40(s0) + 6e0: 715d addi sp,sp,-80 + 6e2: ec06 sd ra,24(sp) + 6e4: e822 sd s0,16(sp) + 6e6: 1000 addi s0,sp,32 + 6e8: e010 sd a2,0(s0) + 6ea: e414 sd a3,8(s0) + 6ec: e818 sd a4,16(s0) + 6ee: ec1c sd a5,24(s0) + 6f0: 03043023 sd a6,32(s0) + 6f4: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 6ee: 8622 mv a2,s0 - 6f0: fe843423 sd s0,-24(s0) + 6f8: 8622 mv a2,s0 + 6fa: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 6f4: 00000097 auipc ra,0x0 - 6f8: e04080e7 jalr -508(ra) # 4f8 <vprintf> + 6fe: 00000097 auipc ra,0x0 + 702: e04080e7 jalr -508(ra) # 502 <vprintf> } - 6fc: 60e2 ld ra,24(sp) - 6fe: 6442 ld s0,16(sp) - 700: 6161 addi sp,sp,80 - 702: 8082 ret + 706: 60e2 ld ra,24(sp) + 708: 6442 ld s0,16(sp) + 70a: 6161 addi sp,sp,80 + 70c: 8082 ret -0000000000000704 <printf>: +000000000000070e <printf>: void printf(const char *fmt, ...) { - 704: 711d addi sp,sp,-96 - 706: ec06 sd ra,24(sp) - 708: e822 sd s0,16(sp) - 70a: 1000 addi s0,sp,32 - 70c: e40c sd a1,8(s0) - 70e: e810 sd a2,16(s0) - 710: ec14 sd a3,24(s0) - 712: f018 sd a4,32(s0) - 714: f41c sd a5,40(s0) - 716: 03043823 sd a6,48(s0) - 71a: 03143c23 sd a7,56(s0) + 70e: 711d addi sp,sp,-96 + 710: ec06 sd ra,24(sp) + 712: e822 sd s0,16(sp) + 714: 1000 addi s0,sp,32 + 716: e40c sd a1,8(s0) + 718: e810 sd a2,16(s0) + 71a: ec14 sd a3,24(s0) + 71c: f018 sd a4,32(s0) + 71e: f41c sd a5,40(s0) + 720: 03043823 sd a6,48(s0) + 724: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 71e: 00840613 addi a2,s0,8 - 722: fec43423 sd a2,-24(s0) + 728: 00840613 addi a2,s0,8 + 72c: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 726: 85aa mv a1,a0 - 728: 4505 li a0,1 - 72a: 00000097 auipc ra,0x0 - 72e: dce080e7 jalr -562(ra) # 4f8 <vprintf> + 730: 85aa mv a1,a0 + 732: 4505 li a0,1 + 734: 00000097 auipc ra,0x0 + 738: dce080e7 jalr -562(ra) # 502 <vprintf> } - 732: 60e2 ld ra,24(sp) - 734: 6442 ld s0,16(sp) - 736: 6125 addi sp,sp,96 - 738: 8082 ret + 73c: 60e2 ld ra,24(sp) + 73e: 6442 ld s0,16(sp) + 740: 6125 addi sp,sp,96 + 742: 8082 ret -000000000000073a <free>: +0000000000000744 <free>: static Header base; static Header *freep; void free(void *ap) { - 73a: 1141 addi sp,sp,-16 - 73c: e422 sd s0,8(sp) - 73e: 0800 addi s0,sp,16 + 744: 1141 addi sp,sp,-16 + 746: e422 sd s0,8(sp) + 748: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 740: ff050693 addi a3,a0,-16 + 74a: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 744: 00000797 auipc a5,0x0 - 748: 1ec7b783 ld a5,492(a5) # 930 <freep> - 74c: a02d j 776 <free+0x3c> + 74e: 00000797 auipc a5,0x0 + 752: 1ea7b783 ld a5,490(a5) # 938 <freep> + 756: a02d j 780 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 74e: 4618 lw a4,8(a2) - 750: 9f2d addw a4,a4,a1 - 752: fee52c23 sw a4,-8(a0) + 758: 4618 lw a4,8(a2) + 75a: 9f2d addw a4,a4,a1 + 75c: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 756: 6398 ld a4,0(a5) - 758: 6310 ld a2,0(a4) - 75a: a83d j 798 <free+0x5e> + 760: 6398 ld a4,0(a5) + 762: 6310 ld a2,0(a4) + 764: a83d j 7a2 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 75c: ff852703 lw a4,-8(a0) - 760: 9f31 addw a4,a4,a2 - 762: c798 sw a4,8(a5) + 766: ff852703 lw a4,-8(a0) + 76a: 9f31 addw a4,a4,a2 + 76c: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 764: ff053683 ld a3,-16(a0) - 768: a091 j 7ac <free+0x72> + 76e: ff053683 ld a3,-16(a0) + 772: a091 j 7b6 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 76a: 6398 ld a4,0(a5) - 76c: 00e7e463 bltu a5,a4,774 <free+0x3a> - 770: 00e6ea63 bltu a3,a4,784 <free+0x4a> + 774: 6398 ld a4,0(a5) + 776: 00e7e463 bltu a5,a4,77e <free+0x3a> + 77a: 00e6ea63 bltu a3,a4,78e <free+0x4a> { - 774: 87ba mv a5,a4 + 77e: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 776: fed7fae3 bgeu a5,a3,76a <free+0x30> - 77a: 6398 ld a4,0(a5) - 77c: 00e6e463 bltu a3,a4,784 <free+0x4a> + 780: fed7fae3 bgeu a5,a3,774 <free+0x30> + 784: 6398 ld a4,0(a5) + 786: 00e6e463 bltu a3,a4,78e <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 780: fee7eae3 bltu a5,a4,774 <free+0x3a> + 78a: fee7eae3 bltu a5,a4,77e <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 784: ff852583 lw a1,-8(a0) - 788: 6390 ld a2,0(a5) - 78a: 02059813 slli a6,a1,0x20 - 78e: 01c85713 srli a4,a6,0x1c - 792: 9736 add a4,a4,a3 - 794: fae60de3 beq a2,a4,74e <free+0x14> + 78e: ff852583 lw a1,-8(a0) + 792: 6390 ld a2,0(a5) + 794: 02059813 slli a6,a1,0x20 + 798: 01c85713 srli a4,a6,0x1c + 79c: 9736 add a4,a4,a3 + 79e: fae60de3 beq a2,a4,758 <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 798: fec53823 sd a2,-16(a0) + 7a2: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 79c: 4790 lw a2,8(a5) - 79e: 02061593 slli a1,a2,0x20 - 7a2: 01c5d713 srli a4,a1,0x1c - 7a6: 973e add a4,a4,a5 - 7a8: fae68ae3 beq a3,a4,75c <free+0x22> + 7a6: 4790 lw a2,8(a5) + 7a8: 02061593 slli a1,a2,0x20 + 7ac: 01c5d713 srli a4,a1,0x1c + 7b0: 973e add a4,a4,a5 + 7b2: fae68ae3 beq a3,a4,766 <free+0x22> p->s.ptr = bp->s.ptr; - 7ac: e394 sd a3,0(a5) + 7b6: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 7ae: 00000717 auipc a4,0x0 - 7b2: 18f73123 sd a5,386(a4) # 930 <freep> + 7b8: 00000717 auipc a4,0x0 + 7bc: 18f73023 sd a5,384(a4) # 938 <freep> } - 7b6: 6422 ld s0,8(sp) - 7b8: 0141 addi sp,sp,16 - 7ba: 8082 ret + 7c0: 6422 ld s0,8(sp) + 7c2: 0141 addi sp,sp,16 + 7c4: 8082 ret -00000000000007bc <malloc>: +00000000000007c6 <malloc>: return freep; } void* malloc(uint nbytes) { - 7bc: 7139 addi sp,sp,-64 - 7be: fc06 sd ra,56(sp) - 7c0: f822 sd s0,48(sp) - 7c2: f426 sd s1,40(sp) - 7c4: f04a sd s2,32(sp) - 7c6: ec4e sd s3,24(sp) - 7c8: e852 sd s4,16(sp) - 7ca: e456 sd s5,8(sp) - 7cc: e05a sd s6,0(sp) - 7ce: 0080 addi s0,sp,64 + 7c6: 7139 addi sp,sp,-64 + 7c8: fc06 sd ra,56(sp) + 7ca: f822 sd s0,48(sp) + 7cc: f426 sd s1,40(sp) + 7ce: f04a sd s2,32(sp) + 7d0: ec4e sd s3,24(sp) + 7d2: e852 sd s4,16(sp) + 7d4: e456 sd s5,8(sp) + 7d6: e05a sd s6,0(sp) + 7d8: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 7d0: 02051493 slli s1,a0,0x20 - 7d4: 9081 srli s1,s1,0x20 - 7d6: 04bd addi s1,s1,15 - 7d8: 8091 srli s1,s1,0x4 - 7da: 00148a1b addiw s4,s1,1 - 7de: 0485 addi s1,s1,1 + 7da: 02051493 slli s1,a0,0x20 + 7de: 9081 srli s1,s1,0x20 + 7e0: 04bd addi s1,s1,15 + 7e2: 8091 srli s1,s1,0x4 + 7e4: 00148a1b addiw s4,s1,1 + 7e8: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 7e0: 00000517 auipc a0,0x0 - 7e4: 15053503 ld a0,336(a0) # 930 <freep> - 7e8: c515 beqz a0,814 <malloc+0x58> + 7ea: 00000517 auipc a0,0x0 + 7ee: 14e53503 ld a0,334(a0) # 938 <freep> + 7f2: c515 beqz a0,81e <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7ea: 611c ld a5,0(a0) + 7f4: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 7ec: 4798 lw a4,8(a5) - 7ee: 04977163 bgeu a4,s1,830 <malloc+0x74> - 7f2: 89d2 mv s3,s4 - 7f4: 000a071b sext.w a4,s4 - 7f8: 6685 lui a3,0x1 - 7fa: 00d77363 bgeu a4,a3,800 <malloc+0x44> - 7fe: 6985 lui s3,0x1 - 800: 00098b1b sext.w s6,s3 + 7f6: 4798 lw a4,8(a5) + 7f8: 04977163 bgeu a4,s1,83a <malloc+0x74> + 7fc: 89d2 mv s3,s4 + 7fe: 000a071b sext.w a4,s4 + 802: 6685 lui a3,0x1 + 804: 00d77363 bgeu a4,a3,80a <malloc+0x44> + 808: 6985 lui s3,0x1 + 80a: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 804: 0049999b slliw s3,s3,0x4 + 80e: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 808: 00000917 auipc s2,0x0 - 80c: 12890913 addi s2,s2,296 # 930 <freep> + 812: 00000917 auipc s2,0x0 + 816: 12690913 addi s2,s2,294 # 938 <freep> if(p == (char*)-1) - 810: 5afd li s5,-1 - 812: a8a5 j 88a <malloc+0xce> + 81a: 5afd li s5,-1 + 81c: a8a5 j 894 <malloc+0xce> base.s.ptr = freep = prevp = &base; - 814: 00000797 auipc a5,0x0 - 818: 11c78793 addi a5,a5,284 # 930 <freep> - 81c: 00000717 auipc a4,0x0 - 820: 11c70713 addi a4,a4,284 # 938 <base> - 824: e398 sd a4,0(a5) - 826: e798 sd a4,8(a5) + 81e: 00000797 auipc a5,0x0 + 822: 11a78793 addi a5,a5,282 # 938 <freep> + 826: 00000717 auipc a4,0x0 + 82a: 11a70713 addi a4,a4,282 # 940 <base> + 82e: e398 sd a4,0(a5) + 830: e798 sd a4,8(a5) base.s.size = 0; - 828: 0007a823 sw zero,16(a5) + 832: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 82c: 87ba mv a5,a4 - 82e: b7d1 j 7f2 <malloc+0x36> + 836: 87ba mv a5,a4 + 838: b7d1 j 7fc <malloc+0x36> if(p->s.size == nunits) - 830: 02e48c63 beq s1,a4,868 <malloc+0xac> + 83a: 02e48c63 beq s1,a4,872 <malloc+0xac> p->s.size -= nunits; - 834: 4147073b subw a4,a4,s4 - 838: c798 sw a4,8(a5) + 83e: 4147073b subw a4,a4,s4 + 842: c798 sw a4,8(a5) p += p->s.size; - 83a: 02071693 slli a3,a4,0x20 - 83e: 01c6d713 srli a4,a3,0x1c - 842: 97ba add a5,a5,a4 + 844: 02071693 slli a3,a4,0x20 + 848: 01c6d713 srli a4,a3,0x1c + 84c: 97ba add a5,a5,a4 p->s.size = nunits; - 844: 0147a423 sw s4,8(a5) + 84e: 0147a423 sw s4,8(a5) freep = prevp; - 848: 00000717 auipc a4,0x0 - 84c: 0ea73423 sd a0,232(a4) # 930 <freep> + 852: 00000717 auipc a4,0x0 + 856: 0ea73323 sd a0,230(a4) # 938 <freep> return (void*)(p + 1); - 850: 01078513 addi a0,a5,16 + 85a: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 854: 70e2 ld ra,56(sp) - 856: 7442 ld s0,48(sp) - 858: 74a2 ld s1,40(sp) - 85a: 7902 ld s2,32(sp) - 85c: 69e2 ld s3,24(sp) - 85e: 6a42 ld s4,16(sp) - 860: 6aa2 ld s5,8(sp) - 862: 6b02 ld s6,0(sp) - 864: 6121 addi sp,sp,64 - 866: 8082 ret + 85e: 70e2 ld ra,56(sp) + 860: 7442 ld s0,48(sp) + 862: 74a2 ld s1,40(sp) + 864: 7902 ld s2,32(sp) + 866: 69e2 ld s3,24(sp) + 868: 6a42 ld s4,16(sp) + 86a: 6aa2 ld s5,8(sp) + 86c: 6b02 ld s6,0(sp) + 86e: 6121 addi sp,sp,64 + 870: 8082 ret prevp->s.ptr = p->s.ptr; - 868: 6398 ld a4,0(a5) - 86a: e118 sd a4,0(a0) - 86c: bff1 j 848 <malloc+0x8c> + 872: 6398 ld a4,0(a5) + 874: e118 sd a4,0(a0) + 876: bff1 j 852 <malloc+0x8c> hp->s.size = nu; - 86e: 01652423 sw s6,8(a0) + 878: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 872: 0541 addi a0,a0,16 - 874: 00000097 auipc ra,0x0 - 878: ec6080e7 jalr -314(ra) # 73a <free> + 87c: 0541 addi a0,a0,16 + 87e: 00000097 auipc ra,0x0 + 882: ec6080e7 jalr -314(ra) # 744 <free> return freep; - 87c: 00093503 ld a0,0(s2) + 886: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 880: d971 beqz a0,854 <malloc+0x98> + 88a: d971 beqz a0,85e <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 882: 611c ld a5,0(a0) + 88c: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 884: 4798 lw a4,8(a5) - 886: fa9775e3 bgeu a4,s1,830 <malloc+0x74> + 88e: 4798 lw a4,8(a5) + 890: fa9775e3 bgeu a4,s1,83a <malloc+0x74> if(p == freep) - 88a: 00093703 ld a4,0(s2) - 88e: 853e mv a0,a5 - 890: fef719e3 bne a4,a5,882 <malloc+0xc6> + 894: 00093703 ld a4,0(s2) + 898: 853e mv a0,a5 + 89a: fef719e3 bne a4,a5,88c <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 894: 854e mv a0,s3 - 896: 00000097 auipc ra,0x0 - 89a: b2a080e7 jalr -1238(ra) # 3c0 <sbrk> + 89e: 854e mv a0,s3 + 8a0: 00000097 auipc ra,0x0 + 8a4: b20080e7 jalr -1248(ra) # 3c0 <sbrk> if(p == (char*)-1) - 89e: fd5518e3 bne a0,s5,86e <malloc+0xb2> + 8a8: fd5518e3 bne a0,s5,878 <malloc+0xb2> return 0; - 8a2: 4501 li a0,0 - 8a4: bf45 j 854 <malloc+0x98> + 8ac: 4501 li a0,0 + 8ae: bf45 j 85e <malloc+0x98> diff --git a/xv6-user/echo.sym b/xv6-user/echo.sym index be7929f..4015076 100644 --- a/xv6-user/echo.sym +++ b/xv6-user/echo.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -00000000000008a8 .rodata -0000000000000930 .bss +00000000000008b0 .rodata +0000000000000938 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,23 +16,24 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -000000000000042c putc -000000000000044e printint -0000000000000918 digits +0000000000000436 putc +0000000000000458 printint +0000000000000920 digits 0000000000000000 umalloc.c -0000000000000930 freep -0000000000000938 base +0000000000000938 freep +0000000000000940 base 0000000000000084 strcpy -0000000000000704 printf -0000000000001129 __global_pointer$ +000000000000070e printf +0000000000001131 __global_pointer$ 00000000000003e0 dev 000000000000028a memmove +000000000000042c times 0000000000000400 trace 000000000000016a gets -0000000000000929 __SDATA_BEGIN__ +0000000000000931 __SDATA_BEGIN__ 00000000000003b6 getpid 000000000000031c memcpy -00000000000007bc malloc +00000000000007c6 malloc 00000000000003f8 remove 00000000000003c8 sleep 0000000000000408 sysinfo @@ -42,31 +43,31 @@ 0000000000000410 rename 0000000000000362 write 0000000000000390 fstat -00000000000006d6 fprintf +00000000000006e0 fprintf 0000000000000376 kill 00000000000000a0 strcat -00000000000004f8 vprintf +0000000000000502 vprintf 00000000000003a4 chdir 000000000000037e exec 0000000000000346 wait 0000000000000358 read 00000000000002e2 memcmp 0000000000000334 fork -0000000000000948 __BSS_END__ +0000000000000950 __BSS_END__ 00000000000003c0 sbrk 00000000000003d8 test_proc 00000000000003d0 uptime -0000000000000929 __bss_start +0000000000000931 __bss_start 0000000000000124 memset 0000000000000000 main 00000000000000ce strcmp 0000000000000418 shutdown 00000000000003ae dup 00000000000003f0 getcwd -0000000000000929 __DATA_BEGIN__ +0000000000000931 __DATA_BEGIN__ 00000000000001e4 stat -0000000000000929 _edata -0000000000000948 _end +0000000000000931 _edata +0000000000000950 _end 000000000000033c exit 000000000000022a atoi 00000000000000fa strlen @@ -74,4 +75,4 @@ 0000000000000146 strchr 000000000000039a mkdir 000000000000036c close -000000000000073a free +0000000000000744 free diff --git a/xv6-user/find.asm b/xv6-user/find.asm index c7ee3a8..de79dac 100644 --- a/xv6-user/find.asm +++ b/xv6-user/find.asm @@ -29,7 +29,7 @@ void find(char *filename) if ((fd = open(path, O_RDONLY)) < 0) { 1a: 4581 li a1,0 1c: 00001517 auipc a0,0x1 - 20: b0450513 addi a0,a0,-1276 # b20 <path> + 20: b1450513 addi a0,a0,-1260 # b30 <path> 24: 00000097 auipc ra,0x0 28: 4e4080e7 jalr 1252(ra) # 508 <open> 2c: 04054163 bltz a0,6e <find+0x6e> @@ -74,22 +74,22 @@ void find(char *filename) 6c: 8082 ret fprintf(2, "find: cannot open %s\n", path); 6e: 00001617 auipc a2,0x1 - 72: ab260613 addi a2,a2,-1358 # b20 <path> + 72: ac260613 addi a2,a2,-1342 # b30 <path> 76: 00001597 auipc a1,0x1 - 7a: 9b258593 addi a1,a1,-1614 # a28 <malloc+0xea> + 7a: 9c258593 addi a1,a1,-1598 # a38 <malloc+0xf0> 7e: 4509 li a0,2 80: 00000097 auipc ra,0x0 - 84: 7d8080e7 jalr 2008(ra) # 858 <fprintf> + 84: 7e2080e7 jalr 2018(ra) # 862 <fprintf> return; 88: b7f9 j 56 <find+0x56> fprintf(2, "find: cannot stat %s\n", path); 8a: 00001617 auipc a2,0x1 - 8e: a9660613 addi a2,a2,-1386 # b20 <path> + 8e: aa660613 addi a2,a2,-1370 # b30 <path> 92: 00001597 auipc a1,0x1 - 96: 9ae58593 addi a1,a1,-1618 # a40 <malloc+0x102> + 96: 9be58593 addi a1,a1,-1602 # a50 <malloc+0x108> 9a: 4509 li a0,2 9c: 00000097 auipc ra,0x0 - a0: 7bc080e7 jalr 1980(ra) # 858 <fprintf> + a0: 7c6080e7 jalr 1990(ra) # 862 <fprintf> close(fd); a4: 8526 mv a0,s1 a6: 00000097 auipc ra,0x0 @@ -98,7 +98,7 @@ void find(char *filename) ae: b765 j 56 <find+0x56> if (strlen(path) + 255 + 2 > sizeof(path)) { b0: 00001517 auipc a0,0x1 - b4: a7050513 addi a0,a0,-1424 # b20 <path> + b4: a8050513 addi a0,a0,-1408 # b30 <path> b8: 00000097 auipc ra,0x0 bc: 1c4080e7 jalr 452(ra) # 27c <strlen> c0: 1015051b addiw a0,a0,257 @@ -106,7 +106,7 @@ void find(char *filename) c8: 0aa7e863 bltu a5,a0,178 <find+0x178> char *p = path + strlen(path) - 1; cc: 00001917 auipc s2,0x1 - d0: a5490913 addi s2,s2,-1452 # b20 <path> + d0: a6490913 addi s2,s2,-1436 # b30 <path> d4: 854a mv a0,s2 d6: 00000097 auipc ra,0x0 da: 1a6080e7 jalr 422(ra) # 27c <strlen> @@ -121,7 +121,7 @@ void find(char *filename) *++p = '/'; f4: 00f900a3 sb a5,1(s2) f8: 00001917 auipc s2,0x1 - fc: a2890913 addi s2,s2,-1496 # b20 <path> + fc: a3890913 addi s2,s2,-1480 # b30 <path> 100: 992a add s2,s2,a0 p++; 102: 0905 addi s2,s2,1 @@ -129,14 +129,14 @@ void find(char *filename) 104: f7840993 addi s3,s0,-136 if (strcmp(p, ".") == 0 || strcmp(p, "..") == 0) { 108: 00001a97 auipc s5,0x1 - 10c: 968a8a93 addi s5,s5,-1688 # a70 <malloc+0x132> + 10c: 978a8a93 addi s5,s5,-1672 # a80 <malloc+0x138> 110: 00001b17 auipc s6,0x1 - 114: 968b0b13 addi s6,s6,-1688 # a78 <malloc+0x13a> + 114: 978b0b13 addi s6,s6,-1672 # a88 <malloc+0x140> fprintf(1, "%s\n", path); 118: 00001c17 auipc s8,0x1 - 11c: a08c0c13 addi s8,s8,-1528 # b20 <path> + 11c: a18c0c13 addi s8,s8,-1512 # b30 <path> 120: 00001b97 auipc s7,0x1 - 124: 960b8b93 addi s7,s7,-1696 # a80 <malloc+0x142> + 124: 970b8b93 addi s7,s7,-1680 # a90 <malloc+0x148> while (readdir(fd, &st)) { 128: 85ce mv a1,s3 12a: 8526 mv a0,s1 @@ -172,10 +172,10 @@ void find(char *filename) 176: bf4d j 128 <find+0x128> fprintf(2, "find: path too long\n"); 178: 00001597 auipc a1,0x1 - 17c: 8e058593 addi a1,a1,-1824 # a58 <malloc+0x11a> + 17c: 8f058593 addi a1,a1,-1808 # a68 <malloc+0x120> 180: 4509 li a0,2 182: 00000097 auipc ra,0x0 - 186: 6d6080e7 jalr 1750(ra) # 858 <fprintf> + 186: 6e0080e7 jalr 1760(ra) # 862 <fprintf> close(fd); 18a: 8526 mv a0,s1 18c: 00000097 auipc ra,0x0 @@ -187,7 +187,7 @@ void find(char *filename) 198: 85de mv a1,s7 19a: 4505 li a0,1 19c: 00000097 auipc ra,0x0 - 1a0: 6bc080e7 jalr 1724(ra) # 858 <fprintf> + 1a0: 6c6080e7 jalr 1734(ra) # 862 <fprintf> 1a4: b7e1 j 16c <find+0x16c> close(fd); 1a6: 8526 mv a0,s1 @@ -211,10 +211,10 @@ int main(int argc, char *argv[]) 1be: 02a7c063 blt a5,a0,1de <main+0x2c> fprintf(2, "Usage: find DIR FILENAME\n"); 1c2: 00001597 auipc a1,0x1 - 1c6: 8c658593 addi a1,a1,-1850 # a88 <malloc+0x14a> + 1c6: 8d658593 addi a1,a1,-1834 # a98 <malloc+0x150> 1ca: 4509 li a0,2 1cc: 00000097 auipc ra,0x0 - 1d0: 68c080e7 jalr 1676(ra) # 858 <fprintf> + 1d0: 696080e7 jalr 1686(ra) # 862 <fprintf> exit(0); 1d4: 4501 li a0,0 1d6: 00000097 auipc ra,0x0 @@ -224,7 +224,7 @@ int main(int argc, char *argv[]) strcpy(path, argv[1]); 1e0: 658c ld a1,8(a1) 1e2: 00001517 auipc a0,0x1 - 1e6: 93e50513 addi a0,a0,-1730 # b20 <path> + 1e6: 94e50513 addi a0,a0,-1714 # b30 <path> 1ea: 00000097 auipc ra,0x0 1ee: 01c080e7 jalr 28(ra) # 206 <strcpy> find(argv[2]); @@ -993,637 +993,647 @@ uname: ret 5ac: 8082 ret -00000000000005ae <putc>: +00000000000005ae <times>: +.global times +times: + li a7, SYS_times + 5ae: 09900893 li a7,153 + ecall + 5b2: 00000073 ecall + ret + 5b6: 8082 ret + +00000000000005b8 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 5ae: 1101 addi sp,sp,-32 - 5b0: ec06 sd ra,24(sp) - 5b2: e822 sd s0,16(sp) - 5b4: 1000 addi s0,sp,32 - 5b6: feb407a3 sb a1,-17(s0) + 5b8: 1101 addi sp,sp,-32 + 5ba: ec06 sd ra,24(sp) + 5bc: e822 sd s0,16(sp) + 5be: 1000 addi s0,sp,32 + 5c0: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 5ba: 4605 li a2,1 - 5bc: fef40593 addi a1,s0,-17 - 5c0: 00000097 auipc ra,0x0 - 5c4: f24080e7 jalr -220(ra) # 4e4 <write> + 5c4: 4605 li a2,1 + 5c6: fef40593 addi a1,s0,-17 + 5ca: 00000097 auipc ra,0x0 + 5ce: f1a080e7 jalr -230(ra) # 4e4 <write> } - 5c8: 60e2 ld ra,24(sp) - 5ca: 6442 ld s0,16(sp) - 5cc: 6105 addi sp,sp,32 - 5ce: 8082 ret + 5d2: 60e2 ld ra,24(sp) + 5d4: 6442 ld s0,16(sp) + 5d6: 6105 addi sp,sp,32 + 5d8: 8082 ret -00000000000005d0 <printint>: +00000000000005da <printint>: static void printint(int fd, int xx, int base, int sgn) { - 5d0: 7139 addi sp,sp,-64 - 5d2: fc06 sd ra,56(sp) - 5d4: f822 sd s0,48(sp) - 5d6: f426 sd s1,40(sp) - 5d8: f04a sd s2,32(sp) - 5da: ec4e sd s3,24(sp) - 5dc: 0080 addi s0,sp,64 - 5de: 84aa mv s1,a0 + 5da: 7139 addi sp,sp,-64 + 5dc: fc06 sd ra,56(sp) + 5de: f822 sd s0,48(sp) + 5e0: f426 sd s1,40(sp) + 5e2: f04a sd s2,32(sp) + 5e4: ec4e sd s3,24(sp) + 5e6: 0080 addi s0,sp,64 + 5e8: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 5e0: c299 beqz a3,5e6 <printint+0x16> - 5e2: 0805c863 bltz a1,672 <printint+0xa2> + 5ea: c299 beqz a3,5f0 <printint+0x16> + 5ec: 0805c863 bltz a1,67c <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 5e6: 2581 sext.w a1,a1 + 5f0: 2581 sext.w a1,a1 neg = 0; - 5e8: 4881 li a7,0 + 5f2: 4881 li a7,0 } i = 0; - 5ea: fc040993 addi s3,s0,-64 + 5f4: fc040993 addi s3,s0,-64 neg = 0; - 5ee: 86ce mv a3,s3 + 5f8: 86ce mv a3,s3 i = 0; - 5f0: 4701 li a4,0 + 5fa: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 5f2: 2601 sext.w a2,a2 - 5f4: 00000517 auipc a0,0x0 - 5f8: 51450513 addi a0,a0,1300 # b08 <digits> - 5fc: 883a mv a6,a4 - 5fe: 2705 addiw a4,a4,1 - 600: 02c5f7bb remuw a5,a1,a2 - 604: 1782 slli a5,a5,0x20 - 606: 9381 srli a5,a5,0x20 - 608: 97aa add a5,a5,a0 - 60a: 0007c783 lbu a5,0(a5) - 60e: 00f68023 sb a5,0(a3) + 5fc: 2601 sext.w a2,a2 + 5fe: 00000517 auipc a0,0x0 + 602: 51a50513 addi a0,a0,1306 # b18 <digits> + 606: 883a mv a6,a4 + 608: 2705 addiw a4,a4,1 + 60a: 02c5f7bb remuw a5,a1,a2 + 60e: 1782 slli a5,a5,0x20 + 610: 9381 srli a5,a5,0x20 + 612: 97aa add a5,a5,a0 + 614: 0007c783 lbu a5,0(a5) + 618: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 612: 0005879b sext.w a5,a1 - 616: 02c5d5bb divuw a1,a1,a2 - 61a: 0685 addi a3,a3,1 - 61c: fec7f0e3 bgeu a5,a2,5fc <printint+0x2c> + 61c: 0005879b sext.w a5,a1 + 620: 02c5d5bb divuw a1,a1,a2 + 624: 0685 addi a3,a3,1 + 626: fec7f0e3 bgeu a5,a2,606 <printint+0x2c> if(neg) - 620: 00088c63 beqz a7,638 <printint+0x68> + 62a: 00088c63 beqz a7,642 <printint+0x68> buf[i++] = '-'; - 624: fd070793 addi a5,a4,-48 - 628: 00878733 add a4,a5,s0 - 62c: 02d00793 li a5,45 - 630: fef70823 sb a5,-16(a4) - 634: 0028071b addiw a4,a6,2 + 62e: fd070793 addi a5,a4,-48 + 632: 00878733 add a4,a5,s0 + 636: 02d00793 li a5,45 + 63a: fef70823 sb a5,-16(a4) + 63e: 0028071b addiw a4,a6,2 while(--i >= 0) - 638: 02e05663 blez a4,664 <printint+0x94> - 63c: fc040913 addi s2,s0,-64 - 640: 993a add s2,s2,a4 - 642: 19fd addi s3,s3,-1 - 644: 99ba add s3,s3,a4 - 646: 377d addiw a4,a4,-1 - 648: 1702 slli a4,a4,0x20 - 64a: 9301 srli a4,a4,0x20 - 64c: 40e989b3 sub s3,s3,a4 + 642: 02e05663 blez a4,66e <printint+0x94> + 646: fc040913 addi s2,s0,-64 + 64a: 993a add s2,s2,a4 + 64c: 19fd addi s3,s3,-1 + 64e: 99ba add s3,s3,a4 + 650: 377d addiw a4,a4,-1 + 652: 1702 slli a4,a4,0x20 + 654: 9301 srli a4,a4,0x20 + 656: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 650: fff94583 lbu a1,-1(s2) - 654: 8526 mv a0,s1 - 656: 00000097 auipc ra,0x0 - 65a: f58080e7 jalr -168(ra) # 5ae <putc> + 65a: fff94583 lbu a1,-1(s2) + 65e: 8526 mv a0,s1 + 660: 00000097 auipc ra,0x0 + 664: f58080e7 jalr -168(ra) # 5b8 <putc> while(--i >= 0) - 65e: 197d addi s2,s2,-1 - 660: ff3918e3 bne s2,s3,650 <printint+0x80> + 668: 197d addi s2,s2,-1 + 66a: ff3918e3 bne s2,s3,65a <printint+0x80> } - 664: 70e2 ld ra,56(sp) - 666: 7442 ld s0,48(sp) - 668: 74a2 ld s1,40(sp) - 66a: 7902 ld s2,32(sp) - 66c: 69e2 ld s3,24(sp) - 66e: 6121 addi sp,sp,64 - 670: 8082 ret + 66e: 70e2 ld ra,56(sp) + 670: 7442 ld s0,48(sp) + 672: 74a2 ld s1,40(sp) + 674: 7902 ld s2,32(sp) + 676: 69e2 ld s3,24(sp) + 678: 6121 addi sp,sp,64 + 67a: 8082 ret x = -xx; - 672: 40b005bb negw a1,a1 + 67c: 40b005bb negw a1,a1 neg = 1; - 676: 4885 li a7,1 + 680: 4885 li a7,1 x = -xx; - 678: bf8d j 5ea <printint+0x1a> + 682: bf8d j 5f4 <printint+0x1a> -000000000000067a <vprintf>: +0000000000000684 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 67a: 7119 addi sp,sp,-128 - 67c: fc86 sd ra,120(sp) - 67e: f8a2 sd s0,112(sp) - 680: f4a6 sd s1,104(sp) - 682: f0ca sd s2,96(sp) - 684: ecce sd s3,88(sp) - 686: e8d2 sd s4,80(sp) - 688: e4d6 sd s5,72(sp) - 68a: e0da sd s6,64(sp) - 68c: fc5e sd s7,56(sp) - 68e: f862 sd s8,48(sp) - 690: f466 sd s9,40(sp) - 692: f06a sd s10,32(sp) - 694: ec6e sd s11,24(sp) - 696: 0100 addi s0,sp,128 + 684: 7119 addi sp,sp,-128 + 686: fc86 sd ra,120(sp) + 688: f8a2 sd s0,112(sp) + 68a: f4a6 sd s1,104(sp) + 68c: f0ca sd s2,96(sp) + 68e: ecce sd s3,88(sp) + 690: e8d2 sd s4,80(sp) + 692: e4d6 sd s5,72(sp) + 694: e0da sd s6,64(sp) + 696: fc5e sd s7,56(sp) + 698: f862 sd s8,48(sp) + 69a: f466 sd s9,40(sp) + 69c: f06a sd s10,32(sp) + 69e: ec6e sd s11,24(sp) + 6a0: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 698: 0005c903 lbu s2,0(a1) - 69c: 18090f63 beqz s2,83a <vprintf+0x1c0> - 6a0: 8aaa mv s5,a0 - 6a2: 8b32 mv s6,a2 - 6a4: 00158493 addi s1,a1,1 + 6a2: 0005c903 lbu s2,0(a1) + 6a6: 18090f63 beqz s2,844 <vprintf+0x1c0> + 6aa: 8aaa mv s5,a0 + 6ac: 8b32 mv s6,a2 + 6ae: 00158493 addi s1,a1,1 state = 0; - 6a8: 4981 li s3,0 + 6b2: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 6aa: 02500a13 li s4,37 - 6ae: 4c55 li s8,21 - 6b0: 00000c97 auipc s9,0x0 - 6b4: 400c8c93 addi s9,s9,1024 # ab0 <malloc+0x172> + 6b4: 02500a13 li s4,37 + 6b8: 4c55 li s8,21 + 6ba: 00000c97 auipc s9,0x0 + 6be: 406c8c93 addi s9,s9,1030 # ac0 <malloc+0x178> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 6b8: 02800d93 li s11,40 + 6c2: 02800d93 li s11,40 putc(fd, 'x'); - 6bc: 4d41 li s10,16 + 6c6: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 6be: 00000b97 auipc s7,0x0 - 6c2: 44ab8b93 addi s7,s7,1098 # b08 <digits> - 6c6: a839 j 6e4 <vprintf+0x6a> + 6c8: 00000b97 auipc s7,0x0 + 6cc: 450b8b93 addi s7,s7,1104 # b18 <digits> + 6d0: a839 j 6ee <vprintf+0x6a> putc(fd, c); - 6c8: 85ca mv a1,s2 - 6ca: 8556 mv a0,s5 - 6cc: 00000097 auipc ra,0x0 - 6d0: ee2080e7 jalr -286(ra) # 5ae <putc> - 6d4: a019 j 6da <vprintf+0x60> + 6d2: 85ca mv a1,s2 + 6d4: 8556 mv a0,s5 + 6d6: 00000097 auipc ra,0x0 + 6da: ee2080e7 jalr -286(ra) # 5b8 <putc> + 6de: a019 j 6e4 <vprintf+0x60> } else if(state == '%'){ - 6d6: 01498d63 beq s3,s4,6f0 <vprintf+0x76> + 6e0: 01498d63 beq s3,s4,6fa <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 6da: 0485 addi s1,s1,1 - 6dc: fff4c903 lbu s2,-1(s1) - 6e0: 14090d63 beqz s2,83a <vprintf+0x1c0> + 6e4: 0485 addi s1,s1,1 + 6e6: fff4c903 lbu s2,-1(s1) + 6ea: 14090d63 beqz s2,844 <vprintf+0x1c0> if(state == 0){ - 6e4: fe0999e3 bnez s3,6d6 <vprintf+0x5c> + 6ee: fe0999e3 bnez s3,6e0 <vprintf+0x5c> if(c == '%'){ - 6e8: ff4910e3 bne s2,s4,6c8 <vprintf+0x4e> + 6f2: ff4910e3 bne s2,s4,6d2 <vprintf+0x4e> state = '%'; - 6ec: 89d2 mv s3,s4 - 6ee: b7f5 j 6da <vprintf+0x60> + 6f6: 89d2 mv s3,s4 + 6f8: b7f5 j 6e4 <vprintf+0x60> if(c == 'd'){ - 6f0: 11490c63 beq s2,s4,808 <vprintf+0x18e> - 6f4: f9d9079b addiw a5,s2,-99 - 6f8: 0ff7f793 zext.b a5,a5 - 6fc: 10fc6e63 bltu s8,a5,818 <vprintf+0x19e> - 700: f9d9079b addiw a5,s2,-99 - 704: 0ff7f713 zext.b a4,a5 - 708: 10ec6863 bltu s8,a4,818 <vprintf+0x19e> - 70c: 00271793 slli a5,a4,0x2 - 710: 97e6 add a5,a5,s9 - 712: 439c lw a5,0(a5) - 714: 97e6 add a5,a5,s9 - 716: 8782 jr a5 + 6fa: 11490c63 beq s2,s4,812 <vprintf+0x18e> + 6fe: f9d9079b addiw a5,s2,-99 + 702: 0ff7f793 zext.b a5,a5 + 706: 10fc6e63 bltu s8,a5,822 <vprintf+0x19e> + 70a: f9d9079b addiw a5,s2,-99 + 70e: 0ff7f713 zext.b a4,a5 + 712: 10ec6863 bltu s8,a4,822 <vprintf+0x19e> + 716: 00271793 slli a5,a4,0x2 + 71a: 97e6 add a5,a5,s9 + 71c: 439c lw a5,0(a5) + 71e: 97e6 add a5,a5,s9 + 720: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 718: 008b0913 addi s2,s6,8 - 71c: 4685 li a3,1 - 71e: 4629 li a2,10 - 720: 000b2583 lw a1,0(s6) - 724: 8556 mv a0,s5 - 726: 00000097 auipc ra,0x0 - 72a: eaa080e7 jalr -342(ra) # 5d0 <printint> - 72e: 8b4a mv s6,s2 + 722: 008b0913 addi s2,s6,8 + 726: 4685 li a3,1 + 728: 4629 li a2,10 + 72a: 000b2583 lw a1,0(s6) + 72e: 8556 mv a0,s5 + 730: 00000097 auipc ra,0x0 + 734: eaa080e7 jalr -342(ra) # 5da <printint> + 738: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 730: 4981 li s3,0 - 732: b765 j 6da <vprintf+0x60> + 73a: 4981 li s3,0 + 73c: b765 j 6e4 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 734: 008b0913 addi s2,s6,8 - 738: 4681 li a3,0 - 73a: 4629 li a2,10 - 73c: 000b2583 lw a1,0(s6) - 740: 8556 mv a0,s5 - 742: 00000097 auipc ra,0x0 - 746: e8e080e7 jalr -370(ra) # 5d0 <printint> - 74a: 8b4a mv s6,s2 + 73e: 008b0913 addi s2,s6,8 + 742: 4681 li a3,0 + 744: 4629 li a2,10 + 746: 000b2583 lw a1,0(s6) + 74a: 8556 mv a0,s5 + 74c: 00000097 auipc ra,0x0 + 750: e8e080e7 jalr -370(ra) # 5da <printint> + 754: 8b4a mv s6,s2 state = 0; - 74c: 4981 li s3,0 - 74e: b771 j 6da <vprintf+0x60> + 756: 4981 li s3,0 + 758: b771 j 6e4 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 750: 008b0913 addi s2,s6,8 - 754: 4681 li a3,0 - 756: 866a mv a2,s10 - 758: 000b2583 lw a1,0(s6) - 75c: 8556 mv a0,s5 - 75e: 00000097 auipc ra,0x0 - 762: e72080e7 jalr -398(ra) # 5d0 <printint> - 766: 8b4a mv s6,s2 + 75a: 008b0913 addi s2,s6,8 + 75e: 4681 li a3,0 + 760: 866a mv a2,s10 + 762: 000b2583 lw a1,0(s6) + 766: 8556 mv a0,s5 + 768: 00000097 auipc ra,0x0 + 76c: e72080e7 jalr -398(ra) # 5da <printint> + 770: 8b4a mv s6,s2 state = 0; - 768: 4981 li s3,0 - 76a: bf85 j 6da <vprintf+0x60> + 772: 4981 li s3,0 + 774: bf85 j 6e4 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 76c: 008b0793 addi a5,s6,8 - 770: f8f43423 sd a5,-120(s0) - 774: 000b3983 ld s3,0(s6) + 776: 008b0793 addi a5,s6,8 + 77a: f8f43423 sd a5,-120(s0) + 77e: 000b3983 ld s3,0(s6) putc(fd, '0'); - 778: 03000593 li a1,48 - 77c: 8556 mv a0,s5 - 77e: 00000097 auipc ra,0x0 - 782: e30080e7 jalr -464(ra) # 5ae <putc> + 782: 03000593 li a1,48 + 786: 8556 mv a0,s5 + 788: 00000097 auipc ra,0x0 + 78c: e30080e7 jalr -464(ra) # 5b8 <putc> putc(fd, 'x'); - 786: 07800593 li a1,120 - 78a: 8556 mv a0,s5 - 78c: 00000097 auipc ra,0x0 - 790: e22080e7 jalr -478(ra) # 5ae <putc> - 794: 896a mv s2,s10 + 790: 07800593 li a1,120 + 794: 8556 mv a0,s5 + 796: 00000097 auipc ra,0x0 + 79a: e22080e7 jalr -478(ra) # 5b8 <putc> + 79e: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 796: 03c9d793 srli a5,s3,0x3c - 79a: 97de add a5,a5,s7 - 79c: 0007c583 lbu a1,0(a5) - 7a0: 8556 mv a0,s5 - 7a2: 00000097 auipc ra,0x0 - 7a6: e0c080e7 jalr -500(ra) # 5ae <putc> + 7a0: 03c9d793 srli a5,s3,0x3c + 7a4: 97de add a5,a5,s7 + 7a6: 0007c583 lbu a1,0(a5) + 7aa: 8556 mv a0,s5 + 7ac: 00000097 auipc ra,0x0 + 7b0: e0c080e7 jalr -500(ra) # 5b8 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 7aa: 0992 slli s3,s3,0x4 - 7ac: 397d addiw s2,s2,-1 - 7ae: fe0914e3 bnez s2,796 <vprintf+0x11c> + 7b4: 0992 slli s3,s3,0x4 + 7b6: 397d addiw s2,s2,-1 + 7b8: fe0914e3 bnez s2,7a0 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 7b2: f8843b03 ld s6,-120(s0) + 7bc: f8843b03 ld s6,-120(s0) state = 0; - 7b6: 4981 li s3,0 - 7b8: b70d j 6da <vprintf+0x60> + 7c0: 4981 li s3,0 + 7c2: b70d j 6e4 <vprintf+0x60> s = va_arg(ap, char*); - 7ba: 008b0913 addi s2,s6,8 - 7be: 000b3983 ld s3,0(s6) + 7c4: 008b0913 addi s2,s6,8 + 7c8: 000b3983 ld s3,0(s6) if(s == 0) - 7c2: 02098163 beqz s3,7e4 <vprintf+0x16a> + 7cc: 02098163 beqz s3,7ee <vprintf+0x16a> while(*s != 0){ - 7c6: 0009c583 lbu a1,0(s3) - 7ca: c5ad beqz a1,834 <vprintf+0x1ba> + 7d0: 0009c583 lbu a1,0(s3) + 7d4: c5ad beqz a1,83e <vprintf+0x1ba> putc(fd, *s); - 7cc: 8556 mv a0,s5 - 7ce: 00000097 auipc ra,0x0 - 7d2: de0080e7 jalr -544(ra) # 5ae <putc> + 7d6: 8556 mv a0,s5 + 7d8: 00000097 auipc ra,0x0 + 7dc: de0080e7 jalr -544(ra) # 5b8 <putc> s++; - 7d6: 0985 addi s3,s3,1 + 7e0: 0985 addi s3,s3,1 while(*s != 0){ - 7d8: 0009c583 lbu a1,0(s3) - 7dc: f9e5 bnez a1,7cc <vprintf+0x152> + 7e2: 0009c583 lbu a1,0(s3) + 7e6: f9e5 bnez a1,7d6 <vprintf+0x152> s = va_arg(ap, char*); - 7de: 8b4a mv s6,s2 + 7e8: 8b4a mv s6,s2 state = 0; - 7e0: 4981 li s3,0 - 7e2: bde5 j 6da <vprintf+0x60> + 7ea: 4981 li s3,0 + 7ec: bde5 j 6e4 <vprintf+0x60> s = "(null)"; - 7e4: 00000997 auipc s3,0x0 - 7e8: 2c498993 addi s3,s3,708 # aa8 <malloc+0x16a> + 7ee: 00000997 auipc s3,0x0 + 7f2: 2ca98993 addi s3,s3,714 # ab8 <malloc+0x170> while(*s != 0){ - 7ec: 85ee mv a1,s11 - 7ee: bff9 j 7cc <vprintf+0x152> + 7f6: 85ee mv a1,s11 + 7f8: bff9 j 7d6 <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 7f0: 008b0913 addi s2,s6,8 - 7f4: 000b4583 lbu a1,0(s6) - 7f8: 8556 mv a0,s5 - 7fa: 00000097 auipc ra,0x0 - 7fe: db4080e7 jalr -588(ra) # 5ae <putc> - 802: 8b4a mv s6,s2 + 7fa: 008b0913 addi s2,s6,8 + 7fe: 000b4583 lbu a1,0(s6) + 802: 8556 mv a0,s5 + 804: 00000097 auipc ra,0x0 + 808: db4080e7 jalr -588(ra) # 5b8 <putc> + 80c: 8b4a mv s6,s2 state = 0; - 804: 4981 li s3,0 - 806: bdd1 j 6da <vprintf+0x60> + 80e: 4981 li s3,0 + 810: bdd1 j 6e4 <vprintf+0x60> putc(fd, c); - 808: 85d2 mv a1,s4 - 80a: 8556 mv a0,s5 - 80c: 00000097 auipc ra,0x0 - 810: da2080e7 jalr -606(ra) # 5ae <putc> + 812: 85d2 mv a1,s4 + 814: 8556 mv a0,s5 + 816: 00000097 auipc ra,0x0 + 81a: da2080e7 jalr -606(ra) # 5b8 <putc> state = 0; - 814: 4981 li s3,0 - 816: b5d1 j 6da <vprintf+0x60> + 81e: 4981 li s3,0 + 820: b5d1 j 6e4 <vprintf+0x60> putc(fd, '%'); - 818: 85d2 mv a1,s4 - 81a: 8556 mv a0,s5 - 81c: 00000097 auipc ra,0x0 - 820: d92080e7 jalr -622(ra) # 5ae <putc> + 822: 85d2 mv a1,s4 + 824: 8556 mv a0,s5 + 826: 00000097 auipc ra,0x0 + 82a: d92080e7 jalr -622(ra) # 5b8 <putc> putc(fd, c); - 824: 85ca mv a1,s2 - 826: 8556 mv a0,s5 - 828: 00000097 auipc ra,0x0 - 82c: d86080e7 jalr -634(ra) # 5ae <putc> + 82e: 85ca mv a1,s2 + 830: 8556 mv a0,s5 + 832: 00000097 auipc ra,0x0 + 836: d86080e7 jalr -634(ra) # 5b8 <putc> state = 0; - 830: 4981 li s3,0 - 832: b565 j 6da <vprintf+0x60> + 83a: 4981 li s3,0 + 83c: b565 j 6e4 <vprintf+0x60> s = va_arg(ap, char*); - 834: 8b4a mv s6,s2 + 83e: 8b4a mv s6,s2 state = 0; - 836: 4981 li s3,0 - 838: b54d j 6da <vprintf+0x60> + 840: 4981 li s3,0 + 842: b54d j 6e4 <vprintf+0x60> } } } - 83a: 70e6 ld ra,120(sp) - 83c: 7446 ld s0,112(sp) - 83e: 74a6 ld s1,104(sp) - 840: 7906 ld s2,96(sp) - 842: 69e6 ld s3,88(sp) - 844: 6a46 ld s4,80(sp) - 846: 6aa6 ld s5,72(sp) - 848: 6b06 ld s6,64(sp) - 84a: 7be2 ld s7,56(sp) - 84c: 7c42 ld s8,48(sp) - 84e: 7ca2 ld s9,40(sp) - 850: 7d02 ld s10,32(sp) - 852: 6de2 ld s11,24(sp) - 854: 6109 addi sp,sp,128 - 856: 8082 ret - -0000000000000858 <fprintf>: + 844: 70e6 ld ra,120(sp) + 846: 7446 ld s0,112(sp) + 848: 74a6 ld s1,104(sp) + 84a: 7906 ld s2,96(sp) + 84c: 69e6 ld s3,88(sp) + 84e: 6a46 ld s4,80(sp) + 850: 6aa6 ld s5,72(sp) + 852: 6b06 ld s6,64(sp) + 854: 7be2 ld s7,56(sp) + 856: 7c42 ld s8,48(sp) + 858: 7ca2 ld s9,40(sp) + 85a: 7d02 ld s10,32(sp) + 85c: 6de2 ld s11,24(sp) + 85e: 6109 addi sp,sp,128 + 860: 8082 ret + +0000000000000862 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 858: 715d addi sp,sp,-80 - 85a: ec06 sd ra,24(sp) - 85c: e822 sd s0,16(sp) - 85e: 1000 addi s0,sp,32 - 860: e010 sd a2,0(s0) - 862: e414 sd a3,8(s0) - 864: e818 sd a4,16(s0) - 866: ec1c sd a5,24(s0) - 868: 03043023 sd a6,32(s0) - 86c: 03143423 sd a7,40(s0) + 862: 715d addi sp,sp,-80 + 864: ec06 sd ra,24(sp) + 866: e822 sd s0,16(sp) + 868: 1000 addi s0,sp,32 + 86a: e010 sd a2,0(s0) + 86c: e414 sd a3,8(s0) + 86e: e818 sd a4,16(s0) + 870: ec1c sd a5,24(s0) + 872: 03043023 sd a6,32(s0) + 876: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 870: 8622 mv a2,s0 - 872: fe843423 sd s0,-24(s0) + 87a: 8622 mv a2,s0 + 87c: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 876: 00000097 auipc ra,0x0 - 87a: e04080e7 jalr -508(ra) # 67a <vprintf> + 880: 00000097 auipc ra,0x0 + 884: e04080e7 jalr -508(ra) # 684 <vprintf> } - 87e: 60e2 ld ra,24(sp) - 880: 6442 ld s0,16(sp) - 882: 6161 addi sp,sp,80 - 884: 8082 ret + 888: 60e2 ld ra,24(sp) + 88a: 6442 ld s0,16(sp) + 88c: 6161 addi sp,sp,80 + 88e: 8082 ret -0000000000000886 <printf>: +0000000000000890 <printf>: void printf(const char *fmt, ...) { - 886: 711d addi sp,sp,-96 - 888: ec06 sd ra,24(sp) - 88a: e822 sd s0,16(sp) - 88c: 1000 addi s0,sp,32 - 88e: e40c sd a1,8(s0) - 890: e810 sd a2,16(s0) - 892: ec14 sd a3,24(s0) - 894: f018 sd a4,32(s0) - 896: f41c sd a5,40(s0) - 898: 03043823 sd a6,48(s0) - 89c: 03143c23 sd a7,56(s0) + 890: 711d addi sp,sp,-96 + 892: ec06 sd ra,24(sp) + 894: e822 sd s0,16(sp) + 896: 1000 addi s0,sp,32 + 898: e40c sd a1,8(s0) + 89a: e810 sd a2,16(s0) + 89c: ec14 sd a3,24(s0) + 89e: f018 sd a4,32(s0) + 8a0: f41c sd a5,40(s0) + 8a2: 03043823 sd a6,48(s0) + 8a6: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 8a0: 00840613 addi a2,s0,8 - 8a4: fec43423 sd a2,-24(s0) + 8aa: 00840613 addi a2,s0,8 + 8ae: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 8a8: 85aa mv a1,a0 - 8aa: 4505 li a0,1 - 8ac: 00000097 auipc ra,0x0 - 8b0: dce080e7 jalr -562(ra) # 67a <vprintf> + 8b2: 85aa mv a1,a0 + 8b4: 4505 li a0,1 + 8b6: 00000097 auipc ra,0x0 + 8ba: dce080e7 jalr -562(ra) # 684 <vprintf> } - 8b4: 60e2 ld ra,24(sp) - 8b6: 6442 ld s0,16(sp) - 8b8: 6125 addi sp,sp,96 - 8ba: 8082 ret + 8be: 60e2 ld ra,24(sp) + 8c0: 6442 ld s0,16(sp) + 8c2: 6125 addi sp,sp,96 + 8c4: 8082 ret -00000000000008bc <free>: +00000000000008c6 <free>: static Header base; static Header *freep; void free(void *ap) { - 8bc: 1141 addi sp,sp,-16 - 8be: e422 sd s0,8(sp) - 8c0: 0800 addi s0,sp,16 + 8c6: 1141 addi sp,sp,-16 + 8c8: e422 sd s0,8(sp) + 8ca: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 8c2: ff050693 addi a3,a0,-16 + 8cc: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 8c6: 00000797 auipc a5,0x0 - 8ca: 45a7b783 ld a5,1114(a5) # d20 <freep> - 8ce: a02d j 8f8 <free+0x3c> + 8d0: 00000797 auipc a5,0x0 + 8d4: 4607b783 ld a5,1120(a5) # d30 <freep> + 8d8: a02d j 902 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 8d0: 4618 lw a4,8(a2) - 8d2: 9f2d addw a4,a4,a1 - 8d4: fee52c23 sw a4,-8(a0) + 8da: 4618 lw a4,8(a2) + 8dc: 9f2d addw a4,a4,a1 + 8de: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 8d8: 6398 ld a4,0(a5) - 8da: 6310 ld a2,0(a4) - 8dc: a83d j 91a <free+0x5e> + 8e2: 6398 ld a4,0(a5) + 8e4: 6310 ld a2,0(a4) + 8e6: a83d j 924 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 8de: ff852703 lw a4,-8(a0) - 8e2: 9f31 addw a4,a4,a2 - 8e4: c798 sw a4,8(a5) + 8e8: ff852703 lw a4,-8(a0) + 8ec: 9f31 addw a4,a4,a2 + 8ee: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 8e6: ff053683 ld a3,-16(a0) - 8ea: a091 j 92e <free+0x72> + 8f0: ff053683 ld a3,-16(a0) + 8f4: a091 j 938 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 8ec: 6398 ld a4,0(a5) - 8ee: 00e7e463 bltu a5,a4,8f6 <free+0x3a> - 8f2: 00e6ea63 bltu a3,a4,906 <free+0x4a> + 8f6: 6398 ld a4,0(a5) + 8f8: 00e7e463 bltu a5,a4,900 <free+0x3a> + 8fc: 00e6ea63 bltu a3,a4,910 <free+0x4a> { - 8f6: 87ba mv a5,a4 + 900: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 8f8: fed7fae3 bgeu a5,a3,8ec <free+0x30> - 8fc: 6398 ld a4,0(a5) - 8fe: 00e6e463 bltu a3,a4,906 <free+0x4a> + 902: fed7fae3 bgeu a5,a3,8f6 <free+0x30> + 906: 6398 ld a4,0(a5) + 908: 00e6e463 bltu a3,a4,910 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 902: fee7eae3 bltu a5,a4,8f6 <free+0x3a> + 90c: fee7eae3 bltu a5,a4,900 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 906: ff852583 lw a1,-8(a0) - 90a: 6390 ld a2,0(a5) - 90c: 02059813 slli a6,a1,0x20 - 910: 01c85713 srli a4,a6,0x1c - 914: 9736 add a4,a4,a3 - 916: fae60de3 beq a2,a4,8d0 <free+0x14> + 910: ff852583 lw a1,-8(a0) + 914: 6390 ld a2,0(a5) + 916: 02059813 slli a6,a1,0x20 + 91a: 01c85713 srli a4,a6,0x1c + 91e: 9736 add a4,a4,a3 + 920: fae60de3 beq a2,a4,8da <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 91a: fec53823 sd a2,-16(a0) + 924: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 91e: 4790 lw a2,8(a5) - 920: 02061593 slli a1,a2,0x20 - 924: 01c5d713 srli a4,a1,0x1c - 928: 973e add a4,a4,a5 - 92a: fae68ae3 beq a3,a4,8de <free+0x22> + 928: 4790 lw a2,8(a5) + 92a: 02061593 slli a1,a2,0x20 + 92e: 01c5d713 srli a4,a1,0x1c + 932: 973e add a4,a4,a5 + 934: fae68ae3 beq a3,a4,8e8 <free+0x22> p->s.ptr = bp->s.ptr; - 92e: e394 sd a3,0(a5) + 938: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 930: 00000717 auipc a4,0x0 - 934: 3ef73823 sd a5,1008(a4) # d20 <freep> + 93a: 00000717 auipc a4,0x0 + 93e: 3ef73b23 sd a5,1014(a4) # d30 <freep> } - 938: 6422 ld s0,8(sp) - 93a: 0141 addi sp,sp,16 - 93c: 8082 ret + 942: 6422 ld s0,8(sp) + 944: 0141 addi sp,sp,16 + 946: 8082 ret -000000000000093e <malloc>: +0000000000000948 <malloc>: return freep; } void* malloc(uint nbytes) { - 93e: 7139 addi sp,sp,-64 - 940: fc06 sd ra,56(sp) - 942: f822 sd s0,48(sp) - 944: f426 sd s1,40(sp) - 946: f04a sd s2,32(sp) - 948: ec4e sd s3,24(sp) - 94a: e852 sd s4,16(sp) - 94c: e456 sd s5,8(sp) - 94e: e05a sd s6,0(sp) - 950: 0080 addi s0,sp,64 + 948: 7139 addi sp,sp,-64 + 94a: fc06 sd ra,56(sp) + 94c: f822 sd s0,48(sp) + 94e: f426 sd s1,40(sp) + 950: f04a sd s2,32(sp) + 952: ec4e sd s3,24(sp) + 954: e852 sd s4,16(sp) + 956: e456 sd s5,8(sp) + 958: e05a sd s6,0(sp) + 95a: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 952: 02051493 slli s1,a0,0x20 - 956: 9081 srli s1,s1,0x20 - 958: 04bd addi s1,s1,15 - 95a: 8091 srli s1,s1,0x4 - 95c: 00148a1b addiw s4,s1,1 - 960: 0485 addi s1,s1,1 + 95c: 02051493 slli s1,a0,0x20 + 960: 9081 srli s1,s1,0x20 + 962: 04bd addi s1,s1,15 + 964: 8091 srli s1,s1,0x4 + 966: 00148a1b addiw s4,s1,1 + 96a: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 962: 00000517 auipc a0,0x0 - 966: 3be53503 ld a0,958(a0) # d20 <freep> - 96a: c515 beqz a0,996 <malloc+0x58> + 96c: 00000517 auipc a0,0x0 + 970: 3c453503 ld a0,964(a0) # d30 <freep> + 974: c515 beqz a0,9a0 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 96c: 611c ld a5,0(a0) + 976: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 96e: 4798 lw a4,8(a5) - 970: 04977163 bgeu a4,s1,9b2 <malloc+0x74> - 974: 89d2 mv s3,s4 - 976: 000a071b sext.w a4,s4 - 97a: 6685 lui a3,0x1 - 97c: 00d77363 bgeu a4,a3,982 <malloc+0x44> - 980: 6985 lui s3,0x1 - 982: 00098b1b sext.w s6,s3 + 978: 4798 lw a4,8(a5) + 97a: 04977163 bgeu a4,s1,9bc <malloc+0x74> + 97e: 89d2 mv s3,s4 + 980: 000a071b sext.w a4,s4 + 984: 6685 lui a3,0x1 + 986: 00d77363 bgeu a4,a3,98c <malloc+0x44> + 98a: 6985 lui s3,0x1 + 98c: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 986: 0049999b slliw s3,s3,0x4 + 990: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 98a: 00000917 auipc s2,0x0 - 98e: 39690913 addi s2,s2,918 # d20 <freep> + 994: 00000917 auipc s2,0x0 + 998: 39c90913 addi s2,s2,924 # d30 <freep> if(p == (char*)-1) - 992: 5afd li s5,-1 - 994: a8a5 j a0c <malloc+0xce> + 99c: 5afd li s5,-1 + 99e: a8a5 j a16 <malloc+0xce> base.s.ptr = freep = prevp = &base; - 996: 00000797 auipc a5,0x0 - 99a: 38a78793 addi a5,a5,906 # d20 <freep> - 99e: 00000717 auipc a4,0x0 - 9a2: 38a70713 addi a4,a4,906 # d28 <base> - 9a6: e398 sd a4,0(a5) - 9a8: e798 sd a4,8(a5) + 9a0: 00000797 auipc a5,0x0 + 9a4: 39078793 addi a5,a5,912 # d30 <freep> + 9a8: 00000717 auipc a4,0x0 + 9ac: 39070713 addi a4,a4,912 # d38 <base> + 9b0: e398 sd a4,0(a5) + 9b2: e798 sd a4,8(a5) base.s.size = 0; - 9aa: 0007a823 sw zero,16(a5) + 9b4: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 9ae: 87ba mv a5,a4 - 9b0: b7d1 j 974 <malloc+0x36> + 9b8: 87ba mv a5,a4 + 9ba: b7d1 j 97e <malloc+0x36> if(p->s.size == nunits) - 9b2: 02e48c63 beq s1,a4,9ea <malloc+0xac> + 9bc: 02e48c63 beq s1,a4,9f4 <malloc+0xac> p->s.size -= nunits; - 9b6: 4147073b subw a4,a4,s4 - 9ba: c798 sw a4,8(a5) + 9c0: 4147073b subw a4,a4,s4 + 9c4: c798 sw a4,8(a5) p += p->s.size; - 9bc: 02071693 slli a3,a4,0x20 - 9c0: 01c6d713 srli a4,a3,0x1c - 9c4: 97ba add a5,a5,a4 + 9c6: 02071693 slli a3,a4,0x20 + 9ca: 01c6d713 srli a4,a3,0x1c + 9ce: 97ba add a5,a5,a4 p->s.size = nunits; - 9c6: 0147a423 sw s4,8(a5) + 9d0: 0147a423 sw s4,8(a5) freep = prevp; - 9ca: 00000717 auipc a4,0x0 - 9ce: 34a73b23 sd a0,854(a4) # d20 <freep> + 9d4: 00000717 auipc a4,0x0 + 9d8: 34a73e23 sd a0,860(a4) # d30 <freep> return (void*)(p + 1); - 9d2: 01078513 addi a0,a5,16 + 9dc: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 9d6: 70e2 ld ra,56(sp) - 9d8: 7442 ld s0,48(sp) - 9da: 74a2 ld s1,40(sp) - 9dc: 7902 ld s2,32(sp) - 9de: 69e2 ld s3,24(sp) - 9e0: 6a42 ld s4,16(sp) - 9e2: 6aa2 ld s5,8(sp) - 9e4: 6b02 ld s6,0(sp) - 9e6: 6121 addi sp,sp,64 - 9e8: 8082 ret + 9e0: 70e2 ld ra,56(sp) + 9e2: 7442 ld s0,48(sp) + 9e4: 74a2 ld s1,40(sp) + 9e6: 7902 ld s2,32(sp) + 9e8: 69e2 ld s3,24(sp) + 9ea: 6a42 ld s4,16(sp) + 9ec: 6aa2 ld s5,8(sp) + 9ee: 6b02 ld s6,0(sp) + 9f0: 6121 addi sp,sp,64 + 9f2: 8082 ret prevp->s.ptr = p->s.ptr; - 9ea: 6398 ld a4,0(a5) - 9ec: e118 sd a4,0(a0) - 9ee: bff1 j 9ca <malloc+0x8c> + 9f4: 6398 ld a4,0(a5) + 9f6: e118 sd a4,0(a0) + 9f8: bff1 j 9d4 <malloc+0x8c> hp->s.size = nu; - 9f0: 01652423 sw s6,8(a0) + 9fa: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 9f4: 0541 addi a0,a0,16 - 9f6: 00000097 auipc ra,0x0 - 9fa: ec6080e7 jalr -314(ra) # 8bc <free> + 9fe: 0541 addi a0,a0,16 + a00: 00000097 auipc ra,0x0 + a04: ec6080e7 jalr -314(ra) # 8c6 <free> return freep; - 9fe: 00093503 ld a0,0(s2) + a08: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - a02: d971 beqz a0,9d6 <malloc+0x98> + a0c: d971 beqz a0,9e0 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - a04: 611c ld a5,0(a0) + a0e: 611c ld a5,0(a0) if(p->s.size >= nunits){ - a06: 4798 lw a4,8(a5) - a08: fa9775e3 bgeu a4,s1,9b2 <malloc+0x74> + a10: 4798 lw a4,8(a5) + a12: fa9775e3 bgeu a4,s1,9bc <malloc+0x74> if(p == freep) - a0c: 00093703 ld a4,0(s2) - a10: 853e mv a0,a5 - a12: fef719e3 bne a4,a5,a04 <malloc+0xc6> + a16: 00093703 ld a4,0(s2) + a1a: 853e mv a0,a5 + a1c: fef719e3 bne a4,a5,a0e <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - a16: 854e mv a0,s3 - a18: 00000097 auipc ra,0x0 - a1c: b2a080e7 jalr -1238(ra) # 542 <sbrk> + a20: 854e mv a0,s3 + a22: 00000097 auipc ra,0x0 + a26: b20080e7 jalr -1248(ra) # 542 <sbrk> if(p == (char*)-1) - a20: fd5518e3 bne a0,s5,9f0 <malloc+0xb2> + a2a: fd5518e3 bne a0,s5,9fa <malloc+0xb2> return 0; - a24: 4501 li a0,0 - a26: bf45 j 9d6 <malloc+0x98> + a2e: 4501 li a0,0 + a30: bf45 j 9e0 <malloc+0x98> diff --git a/xv6-user/find.sym b/xv6-user/find.sym index 03f7269..5c54ee7 100644 --- a/xv6-user/find.sym +++ b/xv6-user/find.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -0000000000000a28 .rodata -0000000000000b20 .bss +0000000000000a38 .rodata +0000000000000b30 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -13,27 +13,28 @@ 0000000000000000 .debug_loclists 0000000000000000 .debug_rnglists 0000000000000000 find.c -0000000000000b20 path +0000000000000b30 path 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -00000000000005ae putc -00000000000005d0 printint -0000000000000b08 digits +00000000000005b8 putc +00000000000005da printint +0000000000000b18 digits 0000000000000000 umalloc.c -0000000000000d20 freep -0000000000000d28 base +0000000000000d30 freep +0000000000000d38 base 0000000000000206 strcpy -0000000000000886 printf -0000000000001319 __global_pointer$ +0000000000000890 printf +0000000000001329 __global_pointer$ 0000000000000562 dev 000000000000040c memmove +00000000000005ae times 0000000000000582 trace 00000000000002ec gets -0000000000000b19 __SDATA_BEGIN__ +0000000000000b29 __SDATA_BEGIN__ 0000000000000538 getpid 000000000000049e memcpy -000000000000093e malloc +0000000000000948 malloc 000000000000057a remove 000000000000054a sleep 000000000000058a sysinfo @@ -43,10 +44,10 @@ 0000000000000592 rename 00000000000004e4 write 0000000000000512 fstat -0000000000000858 fprintf +0000000000000862 fprintf 00000000000004f8 kill 0000000000000222 strcat -000000000000067a vprintf +0000000000000684 vprintf 0000000000000526 chdir 0000000000000500 exec 00000000000004c8 wait @@ -54,21 +55,21 @@ 0000000000000000 find 0000000000000464 memcmp 00000000000004b6 fork -0000000000000d38 __BSS_END__ +0000000000000d48 __BSS_END__ 0000000000000542 sbrk 000000000000055a test_proc 0000000000000552 uptime -0000000000000b19 __bss_start +0000000000000b29 __bss_start 00000000000002a6 memset 00000000000001b2 main 0000000000000250 strcmp 000000000000059a shutdown 0000000000000530 dup 0000000000000572 getcwd -0000000000000b19 __DATA_BEGIN__ +0000000000000b29 __DATA_BEGIN__ 0000000000000366 stat -0000000000000b19 _edata -0000000000000d38 _end +0000000000000b29 _edata +0000000000000d48 _end 00000000000004be exit 00000000000003ac atoi 000000000000027c strlen @@ -76,4 +77,4 @@ 00000000000002c8 strchr 000000000000051c mkdir 00000000000004ee close -00000000000008bc free +00000000000008c6 free diff --git a/xv6-user/grep.asm b/xv6-user/grep.asm index f53acf8..598db84 100644 --- a/xv6-user/grep.asm +++ b/xv6-user/grep.asm @@ -178,7 +178,7 @@ int matchstar(int c, char *re, char *text) while((n = read(fd, buf+m, sizeof(buf)-m-1)) > 0){ 136: 3ff00b93 li s7,1023 13a: 00001a97 auipc s5,0x1 - 13e: a36a8a93 addi s5,s5,-1482 # b70 <buf> + 13e: a46a8a93 addi s5,s5,-1466 # b80 <buf> 142: a0a1 j 18a <grep+0x70> p = q+1; 144: 00148913 addi s2,s1,1 @@ -299,10 +299,10 @@ int matchstar(int c, char *re, char *text) 24a: 310080e7 jalr 784(ra) # 556 <exit> fprintf(2, "usage: grep pattern [file ...]\n"); 24e: 00001597 auipc a1,0x1 - 252: 87258593 addi a1,a1,-1934 # ac0 <malloc+0xea> + 252: 88258593 addi a1,a1,-1918 # ad0 <malloc+0xf0> 256: 4509 li a0,2 258: 00000097 auipc ra,0x0 - 25c: 698080e7 jalr 1688(ra) # 8f0 <fprintf> + 25c: 6a2080e7 jalr 1698(ra) # 8fa <fprintf> exit(1); 260: 4505 li a0,1 262: 00000097 auipc ra,0x0 @@ -319,9 +319,9 @@ int matchstar(int c, char *re, char *text) printf("grep: cannot open %s\n", argv[i]); 280: 00093583 ld a1,0(s2) 284: 00001517 auipc a0,0x1 - 288: 85c50513 addi a0,a0,-1956 # ae0 <malloc+0x10a> + 288: 86c50513 addi a0,a0,-1940 # af0 <malloc+0x110> 28c: 00000097 auipc ra,0x0 - 290: 692080e7 jalr 1682(ra) # 91e <printf> + 290: 69c080e7 jalr 1692(ra) # 928 <printf> exit(1); 294: 4505 li a0,1 296: 00000097 auipc ra,0x0 @@ -1083,637 +1083,647 @@ uname: ret 644: 8082 ret -0000000000000646 <putc>: +0000000000000646 <times>: +.global times +times: + li a7, SYS_times + 646: 09900893 li a7,153 + ecall + 64a: 00000073 ecall + ret + 64e: 8082 ret + +0000000000000650 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 646: 1101 addi sp,sp,-32 - 648: ec06 sd ra,24(sp) - 64a: e822 sd s0,16(sp) - 64c: 1000 addi s0,sp,32 - 64e: feb407a3 sb a1,-17(s0) + 650: 1101 addi sp,sp,-32 + 652: ec06 sd ra,24(sp) + 654: e822 sd s0,16(sp) + 656: 1000 addi s0,sp,32 + 658: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 652: 4605 li a2,1 - 654: fef40593 addi a1,s0,-17 - 658: 00000097 auipc ra,0x0 - 65c: f24080e7 jalr -220(ra) # 57c <write> + 65c: 4605 li a2,1 + 65e: fef40593 addi a1,s0,-17 + 662: 00000097 auipc ra,0x0 + 666: f1a080e7 jalr -230(ra) # 57c <write> } - 660: 60e2 ld ra,24(sp) - 662: 6442 ld s0,16(sp) - 664: 6105 addi sp,sp,32 - 666: 8082 ret + 66a: 60e2 ld ra,24(sp) + 66c: 6442 ld s0,16(sp) + 66e: 6105 addi sp,sp,32 + 670: 8082 ret -0000000000000668 <printint>: +0000000000000672 <printint>: static void printint(int fd, int xx, int base, int sgn) { - 668: 7139 addi sp,sp,-64 - 66a: fc06 sd ra,56(sp) - 66c: f822 sd s0,48(sp) - 66e: f426 sd s1,40(sp) - 670: f04a sd s2,32(sp) - 672: ec4e sd s3,24(sp) - 674: 0080 addi s0,sp,64 - 676: 84aa mv s1,a0 + 672: 7139 addi sp,sp,-64 + 674: fc06 sd ra,56(sp) + 676: f822 sd s0,48(sp) + 678: f426 sd s1,40(sp) + 67a: f04a sd s2,32(sp) + 67c: ec4e sd s3,24(sp) + 67e: 0080 addi s0,sp,64 + 680: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 678: c299 beqz a3,67e <printint+0x16> - 67a: 0805c863 bltz a1,70a <printint+0xa2> + 682: c299 beqz a3,688 <printint+0x16> + 684: 0805c863 bltz a1,714 <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 67e: 2581 sext.w a1,a1 + 688: 2581 sext.w a1,a1 neg = 0; - 680: 4881 li a7,0 + 68a: 4881 li a7,0 } i = 0; - 682: fc040993 addi s3,s0,-64 + 68c: fc040993 addi s3,s0,-64 neg = 0; - 686: 86ce mv a3,s3 + 690: 86ce mv a3,s3 i = 0; - 688: 4701 li a4,0 + 692: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 68a: 2601 sext.w a2,a2 - 68c: 00000517 auipc a0,0x0 - 690: 4cc50513 addi a0,a0,1228 # b58 <digits> - 694: 883a mv a6,a4 - 696: 2705 addiw a4,a4,1 - 698: 02c5f7bb remuw a5,a1,a2 - 69c: 1782 slli a5,a5,0x20 - 69e: 9381 srli a5,a5,0x20 - 6a0: 97aa add a5,a5,a0 - 6a2: 0007c783 lbu a5,0(a5) - 6a6: 00f68023 sb a5,0(a3) + 694: 2601 sext.w a2,a2 + 696: 00000517 auipc a0,0x0 + 69a: 4d250513 addi a0,a0,1234 # b68 <digits> + 69e: 883a mv a6,a4 + 6a0: 2705 addiw a4,a4,1 + 6a2: 02c5f7bb remuw a5,a1,a2 + 6a6: 1782 slli a5,a5,0x20 + 6a8: 9381 srli a5,a5,0x20 + 6aa: 97aa add a5,a5,a0 + 6ac: 0007c783 lbu a5,0(a5) + 6b0: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 6aa: 0005879b sext.w a5,a1 - 6ae: 02c5d5bb divuw a1,a1,a2 - 6b2: 0685 addi a3,a3,1 - 6b4: fec7f0e3 bgeu a5,a2,694 <printint+0x2c> + 6b4: 0005879b sext.w a5,a1 + 6b8: 02c5d5bb divuw a1,a1,a2 + 6bc: 0685 addi a3,a3,1 + 6be: fec7f0e3 bgeu a5,a2,69e <printint+0x2c> if(neg) - 6b8: 00088c63 beqz a7,6d0 <printint+0x68> + 6c2: 00088c63 beqz a7,6da <printint+0x68> buf[i++] = '-'; - 6bc: fd070793 addi a5,a4,-48 - 6c0: 00878733 add a4,a5,s0 - 6c4: 02d00793 li a5,45 - 6c8: fef70823 sb a5,-16(a4) - 6cc: 0028071b addiw a4,a6,2 + 6c6: fd070793 addi a5,a4,-48 + 6ca: 00878733 add a4,a5,s0 + 6ce: 02d00793 li a5,45 + 6d2: fef70823 sb a5,-16(a4) + 6d6: 0028071b addiw a4,a6,2 while(--i >= 0) - 6d0: 02e05663 blez a4,6fc <printint+0x94> - 6d4: fc040913 addi s2,s0,-64 - 6d8: 993a add s2,s2,a4 - 6da: 19fd addi s3,s3,-1 - 6dc: 99ba add s3,s3,a4 - 6de: 377d addiw a4,a4,-1 - 6e0: 1702 slli a4,a4,0x20 - 6e2: 9301 srli a4,a4,0x20 - 6e4: 40e989b3 sub s3,s3,a4 + 6da: 02e05663 blez a4,706 <printint+0x94> + 6de: fc040913 addi s2,s0,-64 + 6e2: 993a add s2,s2,a4 + 6e4: 19fd addi s3,s3,-1 + 6e6: 99ba add s3,s3,a4 + 6e8: 377d addiw a4,a4,-1 + 6ea: 1702 slli a4,a4,0x20 + 6ec: 9301 srli a4,a4,0x20 + 6ee: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 6e8: fff94583 lbu a1,-1(s2) - 6ec: 8526 mv a0,s1 - 6ee: 00000097 auipc ra,0x0 - 6f2: f58080e7 jalr -168(ra) # 646 <putc> + 6f2: fff94583 lbu a1,-1(s2) + 6f6: 8526 mv a0,s1 + 6f8: 00000097 auipc ra,0x0 + 6fc: f58080e7 jalr -168(ra) # 650 <putc> while(--i >= 0) - 6f6: 197d addi s2,s2,-1 - 6f8: ff3918e3 bne s2,s3,6e8 <printint+0x80> + 700: 197d addi s2,s2,-1 + 702: ff3918e3 bne s2,s3,6f2 <printint+0x80> } - 6fc: 70e2 ld ra,56(sp) - 6fe: 7442 ld s0,48(sp) - 700: 74a2 ld s1,40(sp) - 702: 7902 ld s2,32(sp) - 704: 69e2 ld s3,24(sp) - 706: 6121 addi sp,sp,64 - 708: 8082 ret + 706: 70e2 ld ra,56(sp) + 708: 7442 ld s0,48(sp) + 70a: 74a2 ld s1,40(sp) + 70c: 7902 ld s2,32(sp) + 70e: 69e2 ld s3,24(sp) + 710: 6121 addi sp,sp,64 + 712: 8082 ret x = -xx; - 70a: 40b005bb negw a1,a1 + 714: 40b005bb negw a1,a1 neg = 1; - 70e: 4885 li a7,1 + 718: 4885 li a7,1 x = -xx; - 710: bf8d j 682 <printint+0x1a> + 71a: bf8d j 68c <printint+0x1a> -0000000000000712 <vprintf>: +000000000000071c <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 712: 7119 addi sp,sp,-128 - 714: fc86 sd ra,120(sp) - 716: f8a2 sd s0,112(sp) - 718: f4a6 sd s1,104(sp) - 71a: f0ca sd s2,96(sp) - 71c: ecce sd s3,88(sp) - 71e: e8d2 sd s4,80(sp) - 720: e4d6 sd s5,72(sp) - 722: e0da sd s6,64(sp) - 724: fc5e sd s7,56(sp) - 726: f862 sd s8,48(sp) - 728: f466 sd s9,40(sp) - 72a: f06a sd s10,32(sp) - 72c: ec6e sd s11,24(sp) - 72e: 0100 addi s0,sp,128 + 71c: 7119 addi sp,sp,-128 + 71e: fc86 sd ra,120(sp) + 720: f8a2 sd s0,112(sp) + 722: f4a6 sd s1,104(sp) + 724: f0ca sd s2,96(sp) + 726: ecce sd s3,88(sp) + 728: e8d2 sd s4,80(sp) + 72a: e4d6 sd s5,72(sp) + 72c: e0da sd s6,64(sp) + 72e: fc5e sd s7,56(sp) + 730: f862 sd s8,48(sp) + 732: f466 sd s9,40(sp) + 734: f06a sd s10,32(sp) + 736: ec6e sd s11,24(sp) + 738: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 730: 0005c903 lbu s2,0(a1) - 734: 18090f63 beqz s2,8d2 <vprintf+0x1c0> - 738: 8aaa mv s5,a0 - 73a: 8b32 mv s6,a2 - 73c: 00158493 addi s1,a1,1 + 73a: 0005c903 lbu s2,0(a1) + 73e: 18090f63 beqz s2,8dc <vprintf+0x1c0> + 742: 8aaa mv s5,a0 + 744: 8b32 mv s6,a2 + 746: 00158493 addi s1,a1,1 state = 0; - 740: 4981 li s3,0 + 74a: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 742: 02500a13 li s4,37 - 746: 4c55 li s8,21 - 748: 00000c97 auipc s9,0x0 - 74c: 3b8c8c93 addi s9,s9,952 # b00 <malloc+0x12a> + 74c: 02500a13 li s4,37 + 750: 4c55 li s8,21 + 752: 00000c97 auipc s9,0x0 + 756: 3bec8c93 addi s9,s9,958 # b10 <malloc+0x130> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 750: 02800d93 li s11,40 + 75a: 02800d93 li s11,40 putc(fd, 'x'); - 754: 4d41 li s10,16 + 75e: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 756: 00000b97 auipc s7,0x0 - 75a: 402b8b93 addi s7,s7,1026 # b58 <digits> - 75e: a839 j 77c <vprintf+0x6a> + 760: 00000b97 auipc s7,0x0 + 764: 408b8b93 addi s7,s7,1032 # b68 <digits> + 768: a839 j 786 <vprintf+0x6a> putc(fd, c); - 760: 85ca mv a1,s2 - 762: 8556 mv a0,s5 - 764: 00000097 auipc ra,0x0 - 768: ee2080e7 jalr -286(ra) # 646 <putc> - 76c: a019 j 772 <vprintf+0x60> + 76a: 85ca mv a1,s2 + 76c: 8556 mv a0,s5 + 76e: 00000097 auipc ra,0x0 + 772: ee2080e7 jalr -286(ra) # 650 <putc> + 776: a019 j 77c <vprintf+0x60> } else if(state == '%'){ - 76e: 01498d63 beq s3,s4,788 <vprintf+0x76> + 778: 01498d63 beq s3,s4,792 <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 772: 0485 addi s1,s1,1 - 774: fff4c903 lbu s2,-1(s1) - 778: 14090d63 beqz s2,8d2 <vprintf+0x1c0> + 77c: 0485 addi s1,s1,1 + 77e: fff4c903 lbu s2,-1(s1) + 782: 14090d63 beqz s2,8dc <vprintf+0x1c0> if(state == 0){ - 77c: fe0999e3 bnez s3,76e <vprintf+0x5c> + 786: fe0999e3 bnez s3,778 <vprintf+0x5c> if(c == '%'){ - 780: ff4910e3 bne s2,s4,760 <vprintf+0x4e> + 78a: ff4910e3 bne s2,s4,76a <vprintf+0x4e> state = '%'; - 784: 89d2 mv s3,s4 - 786: b7f5 j 772 <vprintf+0x60> + 78e: 89d2 mv s3,s4 + 790: b7f5 j 77c <vprintf+0x60> if(c == 'd'){ - 788: 11490c63 beq s2,s4,8a0 <vprintf+0x18e> - 78c: f9d9079b addiw a5,s2,-99 - 790: 0ff7f793 zext.b a5,a5 - 794: 10fc6e63 bltu s8,a5,8b0 <vprintf+0x19e> - 798: f9d9079b addiw a5,s2,-99 - 79c: 0ff7f713 zext.b a4,a5 - 7a0: 10ec6863 bltu s8,a4,8b0 <vprintf+0x19e> - 7a4: 00271793 slli a5,a4,0x2 - 7a8: 97e6 add a5,a5,s9 - 7aa: 439c lw a5,0(a5) - 7ac: 97e6 add a5,a5,s9 - 7ae: 8782 jr a5 + 792: 11490c63 beq s2,s4,8aa <vprintf+0x18e> + 796: f9d9079b addiw a5,s2,-99 + 79a: 0ff7f793 zext.b a5,a5 + 79e: 10fc6e63 bltu s8,a5,8ba <vprintf+0x19e> + 7a2: f9d9079b addiw a5,s2,-99 + 7a6: 0ff7f713 zext.b a4,a5 + 7aa: 10ec6863 bltu s8,a4,8ba <vprintf+0x19e> + 7ae: 00271793 slli a5,a4,0x2 + 7b2: 97e6 add a5,a5,s9 + 7b4: 439c lw a5,0(a5) + 7b6: 97e6 add a5,a5,s9 + 7b8: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 7b0: 008b0913 addi s2,s6,8 - 7b4: 4685 li a3,1 - 7b6: 4629 li a2,10 - 7b8: 000b2583 lw a1,0(s6) - 7bc: 8556 mv a0,s5 - 7be: 00000097 auipc ra,0x0 - 7c2: eaa080e7 jalr -342(ra) # 668 <printint> - 7c6: 8b4a mv s6,s2 + 7ba: 008b0913 addi s2,s6,8 + 7be: 4685 li a3,1 + 7c0: 4629 li a2,10 + 7c2: 000b2583 lw a1,0(s6) + 7c6: 8556 mv a0,s5 + 7c8: 00000097 auipc ra,0x0 + 7cc: eaa080e7 jalr -342(ra) # 672 <printint> + 7d0: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 7c8: 4981 li s3,0 - 7ca: b765 j 772 <vprintf+0x60> + 7d2: 4981 li s3,0 + 7d4: b765 j 77c <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 7cc: 008b0913 addi s2,s6,8 - 7d0: 4681 li a3,0 - 7d2: 4629 li a2,10 - 7d4: 000b2583 lw a1,0(s6) - 7d8: 8556 mv a0,s5 - 7da: 00000097 auipc ra,0x0 - 7de: e8e080e7 jalr -370(ra) # 668 <printint> - 7e2: 8b4a mv s6,s2 + 7d6: 008b0913 addi s2,s6,8 + 7da: 4681 li a3,0 + 7dc: 4629 li a2,10 + 7de: 000b2583 lw a1,0(s6) + 7e2: 8556 mv a0,s5 + 7e4: 00000097 auipc ra,0x0 + 7e8: e8e080e7 jalr -370(ra) # 672 <printint> + 7ec: 8b4a mv s6,s2 state = 0; - 7e4: 4981 li s3,0 - 7e6: b771 j 772 <vprintf+0x60> + 7ee: 4981 li s3,0 + 7f0: b771 j 77c <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 7e8: 008b0913 addi s2,s6,8 - 7ec: 4681 li a3,0 - 7ee: 866a mv a2,s10 - 7f0: 000b2583 lw a1,0(s6) - 7f4: 8556 mv a0,s5 - 7f6: 00000097 auipc ra,0x0 - 7fa: e72080e7 jalr -398(ra) # 668 <printint> - 7fe: 8b4a mv s6,s2 + 7f2: 008b0913 addi s2,s6,8 + 7f6: 4681 li a3,0 + 7f8: 866a mv a2,s10 + 7fa: 000b2583 lw a1,0(s6) + 7fe: 8556 mv a0,s5 + 800: 00000097 auipc ra,0x0 + 804: e72080e7 jalr -398(ra) # 672 <printint> + 808: 8b4a mv s6,s2 state = 0; - 800: 4981 li s3,0 - 802: bf85 j 772 <vprintf+0x60> + 80a: 4981 li s3,0 + 80c: bf85 j 77c <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 804: 008b0793 addi a5,s6,8 - 808: f8f43423 sd a5,-120(s0) - 80c: 000b3983 ld s3,0(s6) + 80e: 008b0793 addi a5,s6,8 + 812: f8f43423 sd a5,-120(s0) + 816: 000b3983 ld s3,0(s6) putc(fd, '0'); - 810: 03000593 li a1,48 - 814: 8556 mv a0,s5 - 816: 00000097 auipc ra,0x0 - 81a: e30080e7 jalr -464(ra) # 646 <putc> + 81a: 03000593 li a1,48 + 81e: 8556 mv a0,s5 + 820: 00000097 auipc ra,0x0 + 824: e30080e7 jalr -464(ra) # 650 <putc> putc(fd, 'x'); - 81e: 07800593 li a1,120 - 822: 8556 mv a0,s5 - 824: 00000097 auipc ra,0x0 - 828: e22080e7 jalr -478(ra) # 646 <putc> - 82c: 896a mv s2,s10 + 828: 07800593 li a1,120 + 82c: 8556 mv a0,s5 + 82e: 00000097 auipc ra,0x0 + 832: e22080e7 jalr -478(ra) # 650 <putc> + 836: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 82e: 03c9d793 srli a5,s3,0x3c - 832: 97de add a5,a5,s7 - 834: 0007c583 lbu a1,0(a5) - 838: 8556 mv a0,s5 - 83a: 00000097 auipc ra,0x0 - 83e: e0c080e7 jalr -500(ra) # 646 <putc> + 838: 03c9d793 srli a5,s3,0x3c + 83c: 97de add a5,a5,s7 + 83e: 0007c583 lbu a1,0(a5) + 842: 8556 mv a0,s5 + 844: 00000097 auipc ra,0x0 + 848: e0c080e7 jalr -500(ra) # 650 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 842: 0992 slli s3,s3,0x4 - 844: 397d addiw s2,s2,-1 - 846: fe0914e3 bnez s2,82e <vprintf+0x11c> + 84c: 0992 slli s3,s3,0x4 + 84e: 397d addiw s2,s2,-1 + 850: fe0914e3 bnez s2,838 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 84a: f8843b03 ld s6,-120(s0) + 854: f8843b03 ld s6,-120(s0) state = 0; - 84e: 4981 li s3,0 - 850: b70d j 772 <vprintf+0x60> + 858: 4981 li s3,0 + 85a: b70d j 77c <vprintf+0x60> s = va_arg(ap, char*); - 852: 008b0913 addi s2,s6,8 - 856: 000b3983 ld s3,0(s6) + 85c: 008b0913 addi s2,s6,8 + 860: 000b3983 ld s3,0(s6) if(s == 0) - 85a: 02098163 beqz s3,87c <vprintf+0x16a> + 864: 02098163 beqz s3,886 <vprintf+0x16a> while(*s != 0){ - 85e: 0009c583 lbu a1,0(s3) - 862: c5ad beqz a1,8cc <vprintf+0x1ba> + 868: 0009c583 lbu a1,0(s3) + 86c: c5ad beqz a1,8d6 <vprintf+0x1ba> putc(fd, *s); - 864: 8556 mv a0,s5 - 866: 00000097 auipc ra,0x0 - 86a: de0080e7 jalr -544(ra) # 646 <putc> + 86e: 8556 mv a0,s5 + 870: 00000097 auipc ra,0x0 + 874: de0080e7 jalr -544(ra) # 650 <putc> s++; - 86e: 0985 addi s3,s3,1 + 878: 0985 addi s3,s3,1 while(*s != 0){ - 870: 0009c583 lbu a1,0(s3) - 874: f9e5 bnez a1,864 <vprintf+0x152> + 87a: 0009c583 lbu a1,0(s3) + 87e: f9e5 bnez a1,86e <vprintf+0x152> s = va_arg(ap, char*); - 876: 8b4a mv s6,s2 + 880: 8b4a mv s6,s2 state = 0; - 878: 4981 li s3,0 - 87a: bde5 j 772 <vprintf+0x60> + 882: 4981 li s3,0 + 884: bde5 j 77c <vprintf+0x60> s = "(null)"; - 87c: 00000997 auipc s3,0x0 - 880: 27c98993 addi s3,s3,636 # af8 <malloc+0x122> + 886: 00000997 auipc s3,0x0 + 88a: 28298993 addi s3,s3,642 # b08 <malloc+0x128> while(*s != 0){ - 884: 85ee mv a1,s11 - 886: bff9 j 864 <vprintf+0x152> + 88e: 85ee mv a1,s11 + 890: bff9 j 86e <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 888: 008b0913 addi s2,s6,8 - 88c: 000b4583 lbu a1,0(s6) - 890: 8556 mv a0,s5 - 892: 00000097 auipc ra,0x0 - 896: db4080e7 jalr -588(ra) # 646 <putc> - 89a: 8b4a mv s6,s2 + 892: 008b0913 addi s2,s6,8 + 896: 000b4583 lbu a1,0(s6) + 89a: 8556 mv a0,s5 + 89c: 00000097 auipc ra,0x0 + 8a0: db4080e7 jalr -588(ra) # 650 <putc> + 8a4: 8b4a mv s6,s2 state = 0; - 89c: 4981 li s3,0 - 89e: bdd1 j 772 <vprintf+0x60> + 8a6: 4981 li s3,0 + 8a8: bdd1 j 77c <vprintf+0x60> putc(fd, c); - 8a0: 85d2 mv a1,s4 - 8a2: 8556 mv a0,s5 - 8a4: 00000097 auipc ra,0x0 - 8a8: da2080e7 jalr -606(ra) # 646 <putc> + 8aa: 85d2 mv a1,s4 + 8ac: 8556 mv a0,s5 + 8ae: 00000097 auipc ra,0x0 + 8b2: da2080e7 jalr -606(ra) # 650 <putc> state = 0; - 8ac: 4981 li s3,0 - 8ae: b5d1 j 772 <vprintf+0x60> + 8b6: 4981 li s3,0 + 8b8: b5d1 j 77c <vprintf+0x60> putc(fd, '%'); - 8b0: 85d2 mv a1,s4 - 8b2: 8556 mv a0,s5 - 8b4: 00000097 auipc ra,0x0 - 8b8: d92080e7 jalr -622(ra) # 646 <putc> + 8ba: 85d2 mv a1,s4 + 8bc: 8556 mv a0,s5 + 8be: 00000097 auipc ra,0x0 + 8c2: d92080e7 jalr -622(ra) # 650 <putc> putc(fd, c); - 8bc: 85ca mv a1,s2 - 8be: 8556 mv a0,s5 - 8c0: 00000097 auipc ra,0x0 - 8c4: d86080e7 jalr -634(ra) # 646 <putc> + 8c6: 85ca mv a1,s2 + 8c8: 8556 mv a0,s5 + 8ca: 00000097 auipc ra,0x0 + 8ce: d86080e7 jalr -634(ra) # 650 <putc> state = 0; - 8c8: 4981 li s3,0 - 8ca: b565 j 772 <vprintf+0x60> + 8d2: 4981 li s3,0 + 8d4: b565 j 77c <vprintf+0x60> s = va_arg(ap, char*); - 8cc: 8b4a mv s6,s2 + 8d6: 8b4a mv s6,s2 state = 0; - 8ce: 4981 li s3,0 - 8d0: b54d j 772 <vprintf+0x60> + 8d8: 4981 li s3,0 + 8da: b54d j 77c <vprintf+0x60> } } } - 8d2: 70e6 ld ra,120(sp) - 8d4: 7446 ld s0,112(sp) - 8d6: 74a6 ld s1,104(sp) - 8d8: 7906 ld s2,96(sp) - 8da: 69e6 ld s3,88(sp) - 8dc: 6a46 ld s4,80(sp) - 8de: 6aa6 ld s5,72(sp) - 8e0: 6b06 ld s6,64(sp) - 8e2: 7be2 ld s7,56(sp) - 8e4: 7c42 ld s8,48(sp) - 8e6: 7ca2 ld s9,40(sp) - 8e8: 7d02 ld s10,32(sp) - 8ea: 6de2 ld s11,24(sp) - 8ec: 6109 addi sp,sp,128 - 8ee: 8082 ret - -00000000000008f0 <fprintf>: + 8dc: 70e6 ld ra,120(sp) + 8de: 7446 ld s0,112(sp) + 8e0: 74a6 ld s1,104(sp) + 8e2: 7906 ld s2,96(sp) + 8e4: 69e6 ld s3,88(sp) + 8e6: 6a46 ld s4,80(sp) + 8e8: 6aa6 ld s5,72(sp) + 8ea: 6b06 ld s6,64(sp) + 8ec: 7be2 ld s7,56(sp) + 8ee: 7c42 ld s8,48(sp) + 8f0: 7ca2 ld s9,40(sp) + 8f2: 7d02 ld s10,32(sp) + 8f4: 6de2 ld s11,24(sp) + 8f6: 6109 addi sp,sp,128 + 8f8: 8082 ret + +00000000000008fa <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 8f0: 715d addi sp,sp,-80 - 8f2: ec06 sd ra,24(sp) - 8f4: e822 sd s0,16(sp) - 8f6: 1000 addi s0,sp,32 - 8f8: e010 sd a2,0(s0) - 8fa: e414 sd a3,8(s0) - 8fc: e818 sd a4,16(s0) - 8fe: ec1c sd a5,24(s0) - 900: 03043023 sd a6,32(s0) - 904: 03143423 sd a7,40(s0) + 8fa: 715d addi sp,sp,-80 + 8fc: ec06 sd ra,24(sp) + 8fe: e822 sd s0,16(sp) + 900: 1000 addi s0,sp,32 + 902: e010 sd a2,0(s0) + 904: e414 sd a3,8(s0) + 906: e818 sd a4,16(s0) + 908: ec1c sd a5,24(s0) + 90a: 03043023 sd a6,32(s0) + 90e: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 908: 8622 mv a2,s0 - 90a: fe843423 sd s0,-24(s0) + 912: 8622 mv a2,s0 + 914: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 90e: 00000097 auipc ra,0x0 - 912: e04080e7 jalr -508(ra) # 712 <vprintf> + 918: 00000097 auipc ra,0x0 + 91c: e04080e7 jalr -508(ra) # 71c <vprintf> } - 916: 60e2 ld ra,24(sp) - 918: 6442 ld s0,16(sp) - 91a: 6161 addi sp,sp,80 - 91c: 8082 ret + 920: 60e2 ld ra,24(sp) + 922: 6442 ld s0,16(sp) + 924: 6161 addi sp,sp,80 + 926: 8082 ret -000000000000091e <printf>: +0000000000000928 <printf>: void printf(const char *fmt, ...) { - 91e: 711d addi sp,sp,-96 - 920: ec06 sd ra,24(sp) - 922: e822 sd s0,16(sp) - 924: 1000 addi s0,sp,32 - 926: e40c sd a1,8(s0) - 928: e810 sd a2,16(s0) - 92a: ec14 sd a3,24(s0) - 92c: f018 sd a4,32(s0) - 92e: f41c sd a5,40(s0) - 930: 03043823 sd a6,48(s0) - 934: 03143c23 sd a7,56(s0) + 928: 711d addi sp,sp,-96 + 92a: ec06 sd ra,24(sp) + 92c: e822 sd s0,16(sp) + 92e: 1000 addi s0,sp,32 + 930: e40c sd a1,8(s0) + 932: e810 sd a2,16(s0) + 934: ec14 sd a3,24(s0) + 936: f018 sd a4,32(s0) + 938: f41c sd a5,40(s0) + 93a: 03043823 sd a6,48(s0) + 93e: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 938: 00840613 addi a2,s0,8 - 93c: fec43423 sd a2,-24(s0) + 942: 00840613 addi a2,s0,8 + 946: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 940: 85aa mv a1,a0 - 942: 4505 li a0,1 - 944: 00000097 auipc ra,0x0 - 948: dce080e7 jalr -562(ra) # 712 <vprintf> + 94a: 85aa mv a1,a0 + 94c: 4505 li a0,1 + 94e: 00000097 auipc ra,0x0 + 952: dce080e7 jalr -562(ra) # 71c <vprintf> } - 94c: 60e2 ld ra,24(sp) - 94e: 6442 ld s0,16(sp) - 950: 6125 addi sp,sp,96 - 952: 8082 ret + 956: 60e2 ld ra,24(sp) + 958: 6442 ld s0,16(sp) + 95a: 6125 addi sp,sp,96 + 95c: 8082 ret -0000000000000954 <free>: +000000000000095e <free>: static Header base; static Header *freep; void free(void *ap) { - 954: 1141 addi sp,sp,-16 - 956: e422 sd s0,8(sp) - 958: 0800 addi s0,sp,16 + 95e: 1141 addi sp,sp,-16 + 960: e422 sd s0,8(sp) + 962: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 95a: ff050693 addi a3,a0,-16 + 964: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 95e: 00000797 auipc a5,0x0 - 962: 6127b783 ld a5,1554(a5) # f70 <freep> - 966: a02d j 990 <free+0x3c> + 968: 00000797 auipc a5,0x0 + 96c: 6187b783 ld a5,1560(a5) # f80 <freep> + 970: a02d j 99a <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 968: 4618 lw a4,8(a2) - 96a: 9f2d addw a4,a4,a1 - 96c: fee52c23 sw a4,-8(a0) + 972: 4618 lw a4,8(a2) + 974: 9f2d addw a4,a4,a1 + 976: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 970: 6398 ld a4,0(a5) - 972: 6310 ld a2,0(a4) - 974: a83d j 9b2 <free+0x5e> + 97a: 6398 ld a4,0(a5) + 97c: 6310 ld a2,0(a4) + 97e: a83d j 9bc <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 976: ff852703 lw a4,-8(a0) - 97a: 9f31 addw a4,a4,a2 - 97c: c798 sw a4,8(a5) + 980: ff852703 lw a4,-8(a0) + 984: 9f31 addw a4,a4,a2 + 986: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 97e: ff053683 ld a3,-16(a0) - 982: a091 j 9c6 <free+0x72> + 988: ff053683 ld a3,-16(a0) + 98c: a091 j 9d0 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 984: 6398 ld a4,0(a5) - 986: 00e7e463 bltu a5,a4,98e <free+0x3a> - 98a: 00e6ea63 bltu a3,a4,99e <free+0x4a> + 98e: 6398 ld a4,0(a5) + 990: 00e7e463 bltu a5,a4,998 <free+0x3a> + 994: 00e6ea63 bltu a3,a4,9a8 <free+0x4a> { - 98e: 87ba mv a5,a4 + 998: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 990: fed7fae3 bgeu a5,a3,984 <free+0x30> - 994: 6398 ld a4,0(a5) - 996: 00e6e463 bltu a3,a4,99e <free+0x4a> + 99a: fed7fae3 bgeu a5,a3,98e <free+0x30> + 99e: 6398 ld a4,0(a5) + 9a0: 00e6e463 bltu a3,a4,9a8 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 99a: fee7eae3 bltu a5,a4,98e <free+0x3a> + 9a4: fee7eae3 bltu a5,a4,998 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 99e: ff852583 lw a1,-8(a0) - 9a2: 6390 ld a2,0(a5) - 9a4: 02059813 slli a6,a1,0x20 - 9a8: 01c85713 srli a4,a6,0x1c - 9ac: 9736 add a4,a4,a3 - 9ae: fae60de3 beq a2,a4,968 <free+0x14> + 9a8: ff852583 lw a1,-8(a0) + 9ac: 6390 ld a2,0(a5) + 9ae: 02059813 slli a6,a1,0x20 + 9b2: 01c85713 srli a4,a6,0x1c + 9b6: 9736 add a4,a4,a3 + 9b8: fae60de3 beq a2,a4,972 <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 9b2: fec53823 sd a2,-16(a0) + 9bc: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 9b6: 4790 lw a2,8(a5) - 9b8: 02061593 slli a1,a2,0x20 - 9bc: 01c5d713 srli a4,a1,0x1c - 9c0: 973e add a4,a4,a5 - 9c2: fae68ae3 beq a3,a4,976 <free+0x22> + 9c0: 4790 lw a2,8(a5) + 9c2: 02061593 slli a1,a2,0x20 + 9c6: 01c5d713 srli a4,a1,0x1c + 9ca: 973e add a4,a4,a5 + 9cc: fae68ae3 beq a3,a4,980 <free+0x22> p->s.ptr = bp->s.ptr; - 9c6: e394 sd a3,0(a5) + 9d0: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 9c8: 00000717 auipc a4,0x0 - 9cc: 5af73423 sd a5,1448(a4) # f70 <freep> + 9d2: 00000717 auipc a4,0x0 + 9d6: 5af73723 sd a5,1454(a4) # f80 <freep> } - 9d0: 6422 ld s0,8(sp) - 9d2: 0141 addi sp,sp,16 - 9d4: 8082 ret + 9da: 6422 ld s0,8(sp) + 9dc: 0141 addi sp,sp,16 + 9de: 8082 ret -00000000000009d6 <malloc>: +00000000000009e0 <malloc>: return freep; } void* malloc(uint nbytes) { - 9d6: 7139 addi sp,sp,-64 - 9d8: fc06 sd ra,56(sp) - 9da: f822 sd s0,48(sp) - 9dc: f426 sd s1,40(sp) - 9de: f04a sd s2,32(sp) - 9e0: ec4e sd s3,24(sp) - 9e2: e852 sd s4,16(sp) - 9e4: e456 sd s5,8(sp) - 9e6: e05a sd s6,0(sp) - 9e8: 0080 addi s0,sp,64 + 9e0: 7139 addi sp,sp,-64 + 9e2: fc06 sd ra,56(sp) + 9e4: f822 sd s0,48(sp) + 9e6: f426 sd s1,40(sp) + 9e8: f04a sd s2,32(sp) + 9ea: ec4e sd s3,24(sp) + 9ec: e852 sd s4,16(sp) + 9ee: e456 sd s5,8(sp) + 9f0: e05a sd s6,0(sp) + 9f2: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 9ea: 02051493 slli s1,a0,0x20 - 9ee: 9081 srli s1,s1,0x20 - 9f0: 04bd addi s1,s1,15 - 9f2: 8091 srli s1,s1,0x4 - 9f4: 00148a1b addiw s4,s1,1 - 9f8: 0485 addi s1,s1,1 + 9f4: 02051493 slli s1,a0,0x20 + 9f8: 9081 srli s1,s1,0x20 + 9fa: 04bd addi s1,s1,15 + 9fc: 8091 srli s1,s1,0x4 + 9fe: 00148a1b addiw s4,s1,1 + a02: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 9fa: 00000517 auipc a0,0x0 - 9fe: 57653503 ld a0,1398(a0) # f70 <freep> - a02: c515 beqz a0,a2e <malloc+0x58> + a04: 00000517 auipc a0,0x0 + a08: 57c53503 ld a0,1404(a0) # f80 <freep> + a0c: c515 beqz a0,a38 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - a04: 611c ld a5,0(a0) + a0e: 611c ld a5,0(a0) if(p->s.size >= nunits){ - a06: 4798 lw a4,8(a5) - a08: 04977163 bgeu a4,s1,a4a <malloc+0x74> - a0c: 89d2 mv s3,s4 - a0e: 000a071b sext.w a4,s4 - a12: 6685 lui a3,0x1 - a14: 00d77363 bgeu a4,a3,a1a <malloc+0x44> - a18: 6985 lui s3,0x1 - a1a: 00098b1b sext.w s6,s3 + a10: 4798 lw a4,8(a5) + a12: 04977163 bgeu a4,s1,a54 <malloc+0x74> + a16: 89d2 mv s3,s4 + a18: 000a071b sext.w a4,s4 + a1c: 6685 lui a3,0x1 + a1e: 00d77363 bgeu a4,a3,a24 <malloc+0x44> + a22: 6985 lui s3,0x1 + a24: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - a1e: 0049999b slliw s3,s3,0x4 + a28: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - a22: 00000917 auipc s2,0x0 - a26: 54e90913 addi s2,s2,1358 # f70 <freep> + a2c: 00000917 auipc s2,0x0 + a30: 55490913 addi s2,s2,1364 # f80 <freep> if(p == (char*)-1) - a2a: 5afd li s5,-1 - a2c: a8a5 j aa4 <malloc+0xce> + a34: 5afd li s5,-1 + a36: a8a5 j aae <malloc+0xce> base.s.ptr = freep = prevp = &base; - a2e: 00000797 auipc a5,0x0 - a32: 54278793 addi a5,a5,1346 # f70 <freep> - a36: 00000717 auipc a4,0x0 - a3a: 54270713 addi a4,a4,1346 # f78 <base> - a3e: e398 sd a4,0(a5) - a40: e798 sd a4,8(a5) + a38: 00000797 auipc a5,0x0 + a3c: 54878793 addi a5,a5,1352 # f80 <freep> + a40: 00000717 auipc a4,0x0 + a44: 54870713 addi a4,a4,1352 # f88 <base> + a48: e398 sd a4,0(a5) + a4a: e798 sd a4,8(a5) base.s.size = 0; - a42: 0007a823 sw zero,16(a5) + a4c: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - a46: 87ba mv a5,a4 - a48: b7d1 j a0c <malloc+0x36> + a50: 87ba mv a5,a4 + a52: b7d1 j a16 <malloc+0x36> if(p->s.size == nunits) - a4a: 02e48c63 beq s1,a4,a82 <malloc+0xac> + a54: 02e48c63 beq s1,a4,a8c <malloc+0xac> p->s.size -= nunits; - a4e: 4147073b subw a4,a4,s4 - a52: c798 sw a4,8(a5) + a58: 4147073b subw a4,a4,s4 + a5c: c798 sw a4,8(a5) p += p->s.size; - a54: 02071693 slli a3,a4,0x20 - a58: 01c6d713 srli a4,a3,0x1c - a5c: 97ba add a5,a5,a4 + a5e: 02071693 slli a3,a4,0x20 + a62: 01c6d713 srli a4,a3,0x1c + a66: 97ba add a5,a5,a4 p->s.size = nunits; - a5e: 0147a423 sw s4,8(a5) + a68: 0147a423 sw s4,8(a5) freep = prevp; - a62: 00000717 auipc a4,0x0 - a66: 50a73723 sd a0,1294(a4) # f70 <freep> + a6c: 00000717 auipc a4,0x0 + a70: 50a73a23 sd a0,1300(a4) # f80 <freep> return (void*)(p + 1); - a6a: 01078513 addi a0,a5,16 + a74: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - a6e: 70e2 ld ra,56(sp) - a70: 7442 ld s0,48(sp) - a72: 74a2 ld s1,40(sp) - a74: 7902 ld s2,32(sp) - a76: 69e2 ld s3,24(sp) - a78: 6a42 ld s4,16(sp) - a7a: 6aa2 ld s5,8(sp) - a7c: 6b02 ld s6,0(sp) - a7e: 6121 addi sp,sp,64 - a80: 8082 ret + a78: 70e2 ld ra,56(sp) + a7a: 7442 ld s0,48(sp) + a7c: 74a2 ld s1,40(sp) + a7e: 7902 ld s2,32(sp) + a80: 69e2 ld s3,24(sp) + a82: 6a42 ld s4,16(sp) + a84: 6aa2 ld s5,8(sp) + a86: 6b02 ld s6,0(sp) + a88: 6121 addi sp,sp,64 + a8a: 8082 ret prevp->s.ptr = p->s.ptr; - a82: 6398 ld a4,0(a5) - a84: e118 sd a4,0(a0) - a86: bff1 j a62 <malloc+0x8c> + a8c: 6398 ld a4,0(a5) + a8e: e118 sd a4,0(a0) + a90: bff1 j a6c <malloc+0x8c> hp->s.size = nu; - a88: 01652423 sw s6,8(a0) + a92: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - a8c: 0541 addi a0,a0,16 - a8e: 00000097 auipc ra,0x0 - a92: ec6080e7 jalr -314(ra) # 954 <free> + a96: 0541 addi a0,a0,16 + a98: 00000097 auipc ra,0x0 + a9c: ec6080e7 jalr -314(ra) # 95e <free> return freep; - a96: 00093503 ld a0,0(s2) + aa0: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - a9a: d971 beqz a0,a6e <malloc+0x98> + aa4: d971 beqz a0,a78 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - a9c: 611c ld a5,0(a0) + aa6: 611c ld a5,0(a0) if(p->s.size >= nunits){ - a9e: 4798 lw a4,8(a5) - aa0: fa9775e3 bgeu a4,s1,a4a <malloc+0x74> + aa8: 4798 lw a4,8(a5) + aaa: fa9775e3 bgeu a4,s1,a54 <malloc+0x74> if(p == freep) - aa4: 00093703 ld a4,0(s2) - aa8: 853e mv a0,a5 - aaa: fef719e3 bne a4,a5,a9c <malloc+0xc6> + aae: 00093703 ld a4,0(s2) + ab2: 853e mv a0,a5 + ab4: fef719e3 bne a4,a5,aa6 <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - aae: 854e mv a0,s3 - ab0: 00000097 auipc ra,0x0 - ab4: b2a080e7 jalr -1238(ra) # 5da <sbrk> + ab8: 854e mv a0,s3 + aba: 00000097 auipc ra,0x0 + abe: b20080e7 jalr -1248(ra) # 5da <sbrk> if(p == (char*)-1) - ab8: fd5518e3 bne a0,s5,a88 <malloc+0xb2> + ac2: fd5518e3 bne a0,s5,a92 <malloc+0xb2> return 0; - abc: 4501 li a0,0 - abe: bf45 j a6e <malloc+0x98> + ac6: 4501 li a0,0 + ac8: bf45 j a78 <malloc+0x98> diff --git a/xv6-user/grep.sym b/xv6-user/grep.sym index 482f171..69fa118 100644 --- a/xv6-user/grep.sym +++ b/xv6-user/grep.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -0000000000000ac0 .rodata -0000000000000b70 .bss +0000000000000ad0 .rodata +0000000000000b80 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,25 +16,26 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -0000000000000646 putc -0000000000000668 printint -0000000000000b58 digits +0000000000000650 putc +0000000000000672 printint +0000000000000b68 digits 0000000000000000 umalloc.c -0000000000000f70 freep -0000000000000f78 base +0000000000000f80 freep +0000000000000f88 base 000000000000029e strcpy -000000000000091e printf -0000000000001369 __global_pointer$ +0000000000000928 printf +0000000000001379 __global_pointer$ 00000000000005fa dev 00000000000004a4 memmove 000000000000004e matchhere +0000000000000646 times 000000000000061a trace 0000000000000384 gets -0000000000000b69 __SDATA_BEGIN__ +0000000000000b79 __SDATA_BEGIN__ 00000000000005d0 getpid 0000000000000536 memcpy 000000000000011a grep -00000000000009d6 malloc +00000000000009e0 malloc 0000000000000612 remove 00000000000005e2 sleep 0000000000000622 sysinfo @@ -44,21 +45,21 @@ 000000000000062a rename 000000000000057c write 00000000000005aa fstat -00000000000008f0 fprintf +00000000000008fa fprintf 0000000000000590 kill 00000000000002ba strcat -0000000000000712 vprintf +000000000000071c vprintf 00000000000005be chdir 0000000000000598 exec 0000000000000560 wait 0000000000000572 read 00000000000004fc memcmp 000000000000054e fork -0000000000000f88 __BSS_END__ +0000000000000f98 __BSS_END__ 00000000000005da sbrk 00000000000005f2 test_proc 00000000000005ea uptime -0000000000000b69 __bss_start +0000000000000b79 __bss_start 000000000000033e memset 00000000000001de main 0000000000000000 matchstar @@ -66,11 +67,11 @@ 0000000000000632 shutdown 00000000000005c8 dup 000000000000060a getcwd -0000000000000b70 buf -0000000000000b69 __DATA_BEGIN__ +0000000000000b80 buf +0000000000000b79 __DATA_BEGIN__ 00000000000003fe stat -0000000000000b69 _edata -0000000000000f88 _end +0000000000000b79 _edata +0000000000000f98 _end 00000000000000cc match 0000000000000556 exit 0000000000000444 atoi @@ -79,4 +80,4 @@ 0000000000000360 strchr 00000000000005b4 mkdir 0000000000000586 close -0000000000000954 free +000000000000095e free diff --git a/xv6-user/init.asm b/xv6-user/init.asm index 380b940..1e8b91d 100644 --- a/xv6-user/init.asm +++ b/xv6-user/init.asm @@ -36,25 +36,25 @@ int main(void) 2e: 40e080e7 jalr 1038(ra) # 438 <dup> for (int i = 0; i < counts; i++) 32: 00001797 auipc a5,0x1 - 36: a867a783 lw a5,-1402(a5) # ab8 <counts> + 36: a9e7a783 lw a5,-1378(a5) # ad0 <counts> 3a: 0af05d63 blez a5,f4 <main+0xf4> 3e: 4901 li s2,0 { printf("init: starting sh\n"); 40: 00001a17 auipc s4,0x1 - 44: 8f0a0a13 addi s4,s4,-1808 # 930 <malloc+0xea> + 44: 900a0a13 addi s4,s4,-1792 # 940 <malloc+0xf0> for (int i = 0; i < counts; i++) 48: 00001997 auipc s3,0x1 - 4c: a7098993 addi s3,s3,-1424 # ab8 <counts> + 4c: a8898993 addi s3,s3,-1400 # ad0 <counts> 50: a8b9 j ae <main+0xae> pid = fork(); if (pid < 0) { printf("init: fork failed\n"); 52: 00001517 auipc a0,0x1 - 56: 8f650513 addi a0,a0,-1802 # 948 <malloc+0x102> + 56: 90650513 addi a0,a0,-1786 # 958 <malloc+0x108> 5a: 00000097 auipc ra,0x0 - 5e: 734080e7 jalr 1844(ra) # 78e <printf> + 5e: 73e080e7 jalr 1854(ra) # 798 <printf> exit(1); 62: 4505 li a0,1 64: 00000097 auipc ra,0x0 @@ -65,18 +65,18 @@ int main(void) exec(tests[i], argv); 6c: 090e slli s2,s2,0x3 6e: 00001797 auipc a5,0x1 - 72: a5278793 addi a5,a5,-1454 # ac0 <tests> + 72: a6a78793 addi a5,a5,-1430 # ad8 <tests> 76: 97ca add a5,a5,s2 78: 00001597 auipc a1,0x1 - 7c: ae858593 addi a1,a1,-1304 # b60 <argv> + 7c: b0858593 addi a1,a1,-1272 # b80 <argv> 80: 6388 ld a0,0(a5) 82: 00000097 auipc ra,0x0 86: 386080e7 jalr 902(ra) # 408 <exec> printf("init: exec sh failed\n"); 8a: 00001517 auipc a0,0x1 - 8e: 8d650513 addi a0,a0,-1834 # 960 <malloc+0x11a> + 8e: 8e650513 addi a0,a0,-1818 # 970 <malloc+0x120> 92: 00000097 auipc ra,0x0 - 96: 6fc080e7 jalr 1788(ra) # 78e <printf> + 96: 706080e7 jalr 1798(ra) # 798 <printf> exit(1); 9a: 4505 li a0,1 9c: 00000097 auipc ra,0x0 @@ -88,7 +88,7 @@ int main(void) printf("init: starting sh\n"); ae: 8552 mv a0,s4 b0: 00000097 auipc ra,0x0 - b4: 6de080e7 jalr 1758(ra) # 78e <printf> + b4: 6e8080e7 jalr 1768(ra) # 798 <printf> pid = fork(); b8: 00000097 auipc ra,0x0 bc: 306080e7 jalr 774(ra) # 3be <fork> @@ -114,9 +114,9 @@ int main(void) { printf("init: wait returned an error\n"); da: 00001517 auipc a0,0x1 - de: 89e50513 addi a0,a0,-1890 # 978 <malloc+0x132> + de: 8ae50513 addi a0,a0,-1874 # 988 <malloc+0x138> e2: 00000097 auipc ra,0x0 - e6: 6ac080e7 jalr 1708(ra) # 78e <printf> + e6: 6b6080e7 jalr 1718(ra) # 798 <printf> exit(1); ea: 4505 li a0,1 ec: 00000097 auipc ra,0x0 @@ -897,637 +897,647 @@ uname: ret 4b4: 8082 ret -00000000000004b6 <putc>: +00000000000004b6 <times>: +.global times +times: + li a7, SYS_times + 4b6: 09900893 li a7,153 + ecall + 4ba: 00000073 ecall + ret + 4be: 8082 ret + +00000000000004c0 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 4b6: 1101 addi sp,sp,-32 - 4b8: ec06 sd ra,24(sp) - 4ba: e822 sd s0,16(sp) - 4bc: 1000 addi s0,sp,32 - 4be: feb407a3 sb a1,-17(s0) + 4c0: 1101 addi sp,sp,-32 + 4c2: ec06 sd ra,24(sp) + 4c4: e822 sd s0,16(sp) + 4c6: 1000 addi s0,sp,32 + 4c8: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 4c2: 4605 li a2,1 - 4c4: fef40593 addi a1,s0,-17 - 4c8: 00000097 auipc ra,0x0 - 4cc: f24080e7 jalr -220(ra) # 3ec <write> + 4cc: 4605 li a2,1 + 4ce: fef40593 addi a1,s0,-17 + 4d2: 00000097 auipc ra,0x0 + 4d6: f1a080e7 jalr -230(ra) # 3ec <write> } - 4d0: 60e2 ld ra,24(sp) - 4d2: 6442 ld s0,16(sp) - 4d4: 6105 addi sp,sp,32 - 4d6: 8082 ret + 4da: 60e2 ld ra,24(sp) + 4dc: 6442 ld s0,16(sp) + 4de: 6105 addi sp,sp,32 + 4e0: 8082 ret -00000000000004d8 <printint>: +00000000000004e2 <printint>: static void printint(int fd, int xx, int base, int sgn) { - 4d8: 7139 addi sp,sp,-64 - 4da: fc06 sd ra,56(sp) - 4dc: f822 sd s0,48(sp) - 4de: f426 sd s1,40(sp) - 4e0: f04a sd s2,32(sp) - 4e2: ec4e sd s3,24(sp) - 4e4: 0080 addi s0,sp,64 - 4e6: 84aa mv s1,a0 + 4e2: 7139 addi sp,sp,-64 + 4e4: fc06 sd ra,56(sp) + 4e6: f822 sd s0,48(sp) + 4e8: f426 sd s1,40(sp) + 4ea: f04a sd s2,32(sp) + 4ec: ec4e sd s3,24(sp) + 4ee: 0080 addi s0,sp,64 + 4f0: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 4e8: c299 beqz a3,4ee <printint+0x16> - 4ea: 0805c863 bltz a1,57a <printint+0xa2> + 4f2: c299 beqz a3,4f8 <printint+0x16> + 4f4: 0805c863 bltz a1,584 <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 4ee: 2581 sext.w a1,a1 + 4f8: 2581 sext.w a1,a1 neg = 0; - 4f0: 4881 li a7,0 + 4fa: 4881 li a7,0 } i = 0; - 4f2: fc040993 addi s3,s0,-64 + 4fc: fc040993 addi s3,s0,-64 neg = 0; - 4f6: 86ce mv a3,s3 + 500: 86ce mv a3,s3 i = 0; - 4f8: 4701 li a4,0 + 502: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 4fa: 2601 sext.w a2,a2 - 4fc: 00000517 auipc a0,0x0 - 500: 5a450513 addi a0,a0,1444 # aa0 <digits> - 504: 883a mv a6,a4 - 506: 2705 addiw a4,a4,1 - 508: 02c5f7bb remuw a5,a1,a2 - 50c: 1782 slli a5,a5,0x20 - 50e: 9381 srli a5,a5,0x20 - 510: 97aa add a5,a5,a0 - 512: 0007c783 lbu a5,0(a5) - 516: 00f68023 sb a5,0(a3) + 504: 2601 sext.w a2,a2 + 506: 00000517 auipc a0,0x0 + 50a: 5b250513 addi a0,a0,1458 # ab8 <digits> + 50e: 883a mv a6,a4 + 510: 2705 addiw a4,a4,1 + 512: 02c5f7bb remuw a5,a1,a2 + 516: 1782 slli a5,a5,0x20 + 518: 9381 srli a5,a5,0x20 + 51a: 97aa add a5,a5,a0 + 51c: 0007c783 lbu a5,0(a5) + 520: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 51a: 0005879b sext.w a5,a1 - 51e: 02c5d5bb divuw a1,a1,a2 - 522: 0685 addi a3,a3,1 - 524: fec7f0e3 bgeu a5,a2,504 <printint+0x2c> + 524: 0005879b sext.w a5,a1 + 528: 02c5d5bb divuw a1,a1,a2 + 52c: 0685 addi a3,a3,1 + 52e: fec7f0e3 bgeu a5,a2,50e <printint+0x2c> if(neg) - 528: 00088c63 beqz a7,540 <printint+0x68> + 532: 00088c63 beqz a7,54a <printint+0x68> buf[i++] = '-'; - 52c: fd070793 addi a5,a4,-48 - 530: 00878733 add a4,a5,s0 - 534: 02d00793 li a5,45 - 538: fef70823 sb a5,-16(a4) - 53c: 0028071b addiw a4,a6,2 + 536: fd070793 addi a5,a4,-48 + 53a: 00878733 add a4,a5,s0 + 53e: 02d00793 li a5,45 + 542: fef70823 sb a5,-16(a4) + 546: 0028071b addiw a4,a6,2 while(--i >= 0) - 540: 02e05663 blez a4,56c <printint+0x94> - 544: fc040913 addi s2,s0,-64 - 548: 993a add s2,s2,a4 - 54a: 19fd addi s3,s3,-1 - 54c: 99ba add s3,s3,a4 - 54e: 377d addiw a4,a4,-1 - 550: 1702 slli a4,a4,0x20 - 552: 9301 srli a4,a4,0x20 - 554: 40e989b3 sub s3,s3,a4 + 54a: 02e05663 blez a4,576 <printint+0x94> + 54e: fc040913 addi s2,s0,-64 + 552: 993a add s2,s2,a4 + 554: 19fd addi s3,s3,-1 + 556: 99ba add s3,s3,a4 + 558: 377d addiw a4,a4,-1 + 55a: 1702 slli a4,a4,0x20 + 55c: 9301 srli a4,a4,0x20 + 55e: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 558: fff94583 lbu a1,-1(s2) - 55c: 8526 mv a0,s1 - 55e: 00000097 auipc ra,0x0 - 562: f58080e7 jalr -168(ra) # 4b6 <putc> + 562: fff94583 lbu a1,-1(s2) + 566: 8526 mv a0,s1 + 568: 00000097 auipc ra,0x0 + 56c: f58080e7 jalr -168(ra) # 4c0 <putc> while(--i >= 0) - 566: 197d addi s2,s2,-1 - 568: ff3918e3 bne s2,s3,558 <printint+0x80> + 570: 197d addi s2,s2,-1 + 572: ff3918e3 bne s2,s3,562 <printint+0x80> } - 56c: 70e2 ld ra,56(sp) - 56e: 7442 ld s0,48(sp) - 570: 74a2 ld s1,40(sp) - 572: 7902 ld s2,32(sp) - 574: 69e2 ld s3,24(sp) - 576: 6121 addi sp,sp,64 - 578: 8082 ret + 576: 70e2 ld ra,56(sp) + 578: 7442 ld s0,48(sp) + 57a: 74a2 ld s1,40(sp) + 57c: 7902 ld s2,32(sp) + 57e: 69e2 ld s3,24(sp) + 580: 6121 addi sp,sp,64 + 582: 8082 ret x = -xx; - 57a: 40b005bb negw a1,a1 + 584: 40b005bb negw a1,a1 neg = 1; - 57e: 4885 li a7,1 + 588: 4885 li a7,1 x = -xx; - 580: bf8d j 4f2 <printint+0x1a> + 58a: bf8d j 4fc <printint+0x1a> -0000000000000582 <vprintf>: +000000000000058c <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 582: 7119 addi sp,sp,-128 - 584: fc86 sd ra,120(sp) - 586: f8a2 sd s0,112(sp) - 588: f4a6 sd s1,104(sp) - 58a: f0ca sd s2,96(sp) - 58c: ecce sd s3,88(sp) - 58e: e8d2 sd s4,80(sp) - 590: e4d6 sd s5,72(sp) - 592: e0da sd s6,64(sp) - 594: fc5e sd s7,56(sp) - 596: f862 sd s8,48(sp) - 598: f466 sd s9,40(sp) - 59a: f06a sd s10,32(sp) - 59c: ec6e sd s11,24(sp) - 59e: 0100 addi s0,sp,128 + 58c: 7119 addi sp,sp,-128 + 58e: fc86 sd ra,120(sp) + 590: f8a2 sd s0,112(sp) + 592: f4a6 sd s1,104(sp) + 594: f0ca sd s2,96(sp) + 596: ecce sd s3,88(sp) + 598: e8d2 sd s4,80(sp) + 59a: e4d6 sd s5,72(sp) + 59c: e0da sd s6,64(sp) + 59e: fc5e sd s7,56(sp) + 5a0: f862 sd s8,48(sp) + 5a2: f466 sd s9,40(sp) + 5a4: f06a sd s10,32(sp) + 5a6: ec6e sd s11,24(sp) + 5a8: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 5a0: 0005c903 lbu s2,0(a1) - 5a4: 18090f63 beqz s2,742 <vprintf+0x1c0> - 5a8: 8aaa mv s5,a0 - 5aa: 8b32 mv s6,a2 - 5ac: 00158493 addi s1,a1,1 + 5aa: 0005c903 lbu s2,0(a1) + 5ae: 18090f63 beqz s2,74c <vprintf+0x1c0> + 5b2: 8aaa mv s5,a0 + 5b4: 8b32 mv s6,a2 + 5b6: 00158493 addi s1,a1,1 state = 0; - 5b0: 4981 li s3,0 + 5ba: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 5b2: 02500a13 li s4,37 - 5b6: 4c55 li s8,21 - 5b8: 00000c97 auipc s9,0x0 - 5bc: 490c8c93 addi s9,s9,1168 # a48 <malloc+0x202> + 5bc: 02500a13 li s4,37 + 5c0: 4c55 li s8,21 + 5c2: 00000c97 auipc s9,0x0 + 5c6: 49ec8c93 addi s9,s9,1182 # a60 <malloc+0x210> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 5c0: 02800d93 li s11,40 + 5ca: 02800d93 li s11,40 putc(fd, 'x'); - 5c4: 4d41 li s10,16 + 5ce: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 5c6: 00000b97 auipc s7,0x0 - 5ca: 4dab8b93 addi s7,s7,1242 # aa0 <digits> - 5ce: a839 j 5ec <vprintf+0x6a> + 5d0: 00000b97 auipc s7,0x0 + 5d4: 4e8b8b93 addi s7,s7,1256 # ab8 <digits> + 5d8: a839 j 5f6 <vprintf+0x6a> putc(fd, c); - 5d0: 85ca mv a1,s2 - 5d2: 8556 mv a0,s5 - 5d4: 00000097 auipc ra,0x0 - 5d8: ee2080e7 jalr -286(ra) # 4b6 <putc> - 5dc: a019 j 5e2 <vprintf+0x60> + 5da: 85ca mv a1,s2 + 5dc: 8556 mv a0,s5 + 5de: 00000097 auipc ra,0x0 + 5e2: ee2080e7 jalr -286(ra) # 4c0 <putc> + 5e6: a019 j 5ec <vprintf+0x60> } else if(state == '%'){ - 5de: 01498d63 beq s3,s4,5f8 <vprintf+0x76> + 5e8: 01498d63 beq s3,s4,602 <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 5e2: 0485 addi s1,s1,1 - 5e4: fff4c903 lbu s2,-1(s1) - 5e8: 14090d63 beqz s2,742 <vprintf+0x1c0> + 5ec: 0485 addi s1,s1,1 + 5ee: fff4c903 lbu s2,-1(s1) + 5f2: 14090d63 beqz s2,74c <vprintf+0x1c0> if(state == 0){ - 5ec: fe0999e3 bnez s3,5de <vprintf+0x5c> + 5f6: fe0999e3 bnez s3,5e8 <vprintf+0x5c> if(c == '%'){ - 5f0: ff4910e3 bne s2,s4,5d0 <vprintf+0x4e> + 5fa: ff4910e3 bne s2,s4,5da <vprintf+0x4e> state = '%'; - 5f4: 89d2 mv s3,s4 - 5f6: b7f5 j 5e2 <vprintf+0x60> + 5fe: 89d2 mv s3,s4 + 600: b7f5 j 5ec <vprintf+0x60> if(c == 'd'){ - 5f8: 11490c63 beq s2,s4,710 <vprintf+0x18e> - 5fc: f9d9079b addiw a5,s2,-99 - 600: 0ff7f793 zext.b a5,a5 - 604: 10fc6e63 bltu s8,a5,720 <vprintf+0x19e> - 608: f9d9079b addiw a5,s2,-99 - 60c: 0ff7f713 zext.b a4,a5 - 610: 10ec6863 bltu s8,a4,720 <vprintf+0x19e> - 614: 00271793 slli a5,a4,0x2 - 618: 97e6 add a5,a5,s9 - 61a: 439c lw a5,0(a5) - 61c: 97e6 add a5,a5,s9 - 61e: 8782 jr a5 + 602: 11490c63 beq s2,s4,71a <vprintf+0x18e> + 606: f9d9079b addiw a5,s2,-99 + 60a: 0ff7f793 zext.b a5,a5 + 60e: 10fc6e63 bltu s8,a5,72a <vprintf+0x19e> + 612: f9d9079b addiw a5,s2,-99 + 616: 0ff7f713 zext.b a4,a5 + 61a: 10ec6863 bltu s8,a4,72a <vprintf+0x19e> + 61e: 00271793 slli a5,a4,0x2 + 622: 97e6 add a5,a5,s9 + 624: 439c lw a5,0(a5) + 626: 97e6 add a5,a5,s9 + 628: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 620: 008b0913 addi s2,s6,8 - 624: 4685 li a3,1 - 626: 4629 li a2,10 - 628: 000b2583 lw a1,0(s6) - 62c: 8556 mv a0,s5 - 62e: 00000097 auipc ra,0x0 - 632: eaa080e7 jalr -342(ra) # 4d8 <printint> - 636: 8b4a mv s6,s2 + 62a: 008b0913 addi s2,s6,8 + 62e: 4685 li a3,1 + 630: 4629 li a2,10 + 632: 000b2583 lw a1,0(s6) + 636: 8556 mv a0,s5 + 638: 00000097 auipc ra,0x0 + 63c: eaa080e7 jalr -342(ra) # 4e2 <printint> + 640: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 638: 4981 li s3,0 - 63a: b765 j 5e2 <vprintf+0x60> + 642: 4981 li s3,0 + 644: b765 j 5ec <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 63c: 008b0913 addi s2,s6,8 - 640: 4681 li a3,0 - 642: 4629 li a2,10 - 644: 000b2583 lw a1,0(s6) - 648: 8556 mv a0,s5 - 64a: 00000097 auipc ra,0x0 - 64e: e8e080e7 jalr -370(ra) # 4d8 <printint> - 652: 8b4a mv s6,s2 + 646: 008b0913 addi s2,s6,8 + 64a: 4681 li a3,0 + 64c: 4629 li a2,10 + 64e: 000b2583 lw a1,0(s6) + 652: 8556 mv a0,s5 + 654: 00000097 auipc ra,0x0 + 658: e8e080e7 jalr -370(ra) # 4e2 <printint> + 65c: 8b4a mv s6,s2 state = 0; - 654: 4981 li s3,0 - 656: b771 j 5e2 <vprintf+0x60> + 65e: 4981 li s3,0 + 660: b771 j 5ec <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 658: 008b0913 addi s2,s6,8 - 65c: 4681 li a3,0 - 65e: 866a mv a2,s10 - 660: 000b2583 lw a1,0(s6) - 664: 8556 mv a0,s5 - 666: 00000097 auipc ra,0x0 - 66a: e72080e7 jalr -398(ra) # 4d8 <printint> - 66e: 8b4a mv s6,s2 + 662: 008b0913 addi s2,s6,8 + 666: 4681 li a3,0 + 668: 866a mv a2,s10 + 66a: 000b2583 lw a1,0(s6) + 66e: 8556 mv a0,s5 + 670: 00000097 auipc ra,0x0 + 674: e72080e7 jalr -398(ra) # 4e2 <printint> + 678: 8b4a mv s6,s2 state = 0; - 670: 4981 li s3,0 - 672: bf85 j 5e2 <vprintf+0x60> + 67a: 4981 li s3,0 + 67c: bf85 j 5ec <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 674: 008b0793 addi a5,s6,8 - 678: f8f43423 sd a5,-120(s0) - 67c: 000b3983 ld s3,0(s6) + 67e: 008b0793 addi a5,s6,8 + 682: f8f43423 sd a5,-120(s0) + 686: 000b3983 ld s3,0(s6) putc(fd, '0'); - 680: 03000593 li a1,48 - 684: 8556 mv a0,s5 - 686: 00000097 auipc ra,0x0 - 68a: e30080e7 jalr -464(ra) # 4b6 <putc> + 68a: 03000593 li a1,48 + 68e: 8556 mv a0,s5 + 690: 00000097 auipc ra,0x0 + 694: e30080e7 jalr -464(ra) # 4c0 <putc> putc(fd, 'x'); - 68e: 07800593 li a1,120 - 692: 8556 mv a0,s5 - 694: 00000097 auipc ra,0x0 - 698: e22080e7 jalr -478(ra) # 4b6 <putc> - 69c: 896a mv s2,s10 + 698: 07800593 li a1,120 + 69c: 8556 mv a0,s5 + 69e: 00000097 auipc ra,0x0 + 6a2: e22080e7 jalr -478(ra) # 4c0 <putc> + 6a6: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 69e: 03c9d793 srli a5,s3,0x3c - 6a2: 97de add a5,a5,s7 - 6a4: 0007c583 lbu a1,0(a5) - 6a8: 8556 mv a0,s5 - 6aa: 00000097 auipc ra,0x0 - 6ae: e0c080e7 jalr -500(ra) # 4b6 <putc> + 6a8: 03c9d793 srli a5,s3,0x3c + 6ac: 97de add a5,a5,s7 + 6ae: 0007c583 lbu a1,0(a5) + 6b2: 8556 mv a0,s5 + 6b4: 00000097 auipc ra,0x0 + 6b8: e0c080e7 jalr -500(ra) # 4c0 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 6b2: 0992 slli s3,s3,0x4 - 6b4: 397d addiw s2,s2,-1 - 6b6: fe0914e3 bnez s2,69e <vprintf+0x11c> + 6bc: 0992 slli s3,s3,0x4 + 6be: 397d addiw s2,s2,-1 + 6c0: fe0914e3 bnez s2,6a8 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 6ba: f8843b03 ld s6,-120(s0) + 6c4: f8843b03 ld s6,-120(s0) state = 0; - 6be: 4981 li s3,0 - 6c0: b70d j 5e2 <vprintf+0x60> + 6c8: 4981 li s3,0 + 6ca: b70d j 5ec <vprintf+0x60> s = va_arg(ap, char*); - 6c2: 008b0913 addi s2,s6,8 - 6c6: 000b3983 ld s3,0(s6) + 6cc: 008b0913 addi s2,s6,8 + 6d0: 000b3983 ld s3,0(s6) if(s == 0) - 6ca: 02098163 beqz s3,6ec <vprintf+0x16a> + 6d4: 02098163 beqz s3,6f6 <vprintf+0x16a> while(*s != 0){ - 6ce: 0009c583 lbu a1,0(s3) - 6d2: c5ad beqz a1,73c <vprintf+0x1ba> + 6d8: 0009c583 lbu a1,0(s3) + 6dc: c5ad beqz a1,746 <vprintf+0x1ba> putc(fd, *s); - 6d4: 8556 mv a0,s5 - 6d6: 00000097 auipc ra,0x0 - 6da: de0080e7 jalr -544(ra) # 4b6 <putc> + 6de: 8556 mv a0,s5 + 6e0: 00000097 auipc ra,0x0 + 6e4: de0080e7 jalr -544(ra) # 4c0 <putc> s++; - 6de: 0985 addi s3,s3,1 + 6e8: 0985 addi s3,s3,1 while(*s != 0){ - 6e0: 0009c583 lbu a1,0(s3) - 6e4: f9e5 bnez a1,6d4 <vprintf+0x152> + 6ea: 0009c583 lbu a1,0(s3) + 6ee: f9e5 bnez a1,6de <vprintf+0x152> s = va_arg(ap, char*); - 6e6: 8b4a mv s6,s2 + 6f0: 8b4a mv s6,s2 state = 0; - 6e8: 4981 li s3,0 - 6ea: bde5 j 5e2 <vprintf+0x60> + 6f2: 4981 li s3,0 + 6f4: bde5 j 5ec <vprintf+0x60> s = "(null)"; - 6ec: 00000997 auipc s3,0x0 - 6f0: 35498993 addi s3,s3,852 # a40 <malloc+0x1fa> + 6f6: 00000997 auipc s3,0x0 + 6fa: 36298993 addi s3,s3,866 # a58 <malloc+0x208> while(*s != 0){ - 6f4: 85ee mv a1,s11 - 6f6: bff9 j 6d4 <vprintf+0x152> + 6fe: 85ee mv a1,s11 + 700: bff9 j 6de <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 6f8: 008b0913 addi s2,s6,8 - 6fc: 000b4583 lbu a1,0(s6) - 700: 8556 mv a0,s5 - 702: 00000097 auipc ra,0x0 - 706: db4080e7 jalr -588(ra) # 4b6 <putc> - 70a: 8b4a mv s6,s2 + 702: 008b0913 addi s2,s6,8 + 706: 000b4583 lbu a1,0(s6) + 70a: 8556 mv a0,s5 + 70c: 00000097 auipc ra,0x0 + 710: db4080e7 jalr -588(ra) # 4c0 <putc> + 714: 8b4a mv s6,s2 state = 0; - 70c: 4981 li s3,0 - 70e: bdd1 j 5e2 <vprintf+0x60> + 716: 4981 li s3,0 + 718: bdd1 j 5ec <vprintf+0x60> putc(fd, c); - 710: 85d2 mv a1,s4 - 712: 8556 mv a0,s5 - 714: 00000097 auipc ra,0x0 - 718: da2080e7 jalr -606(ra) # 4b6 <putc> + 71a: 85d2 mv a1,s4 + 71c: 8556 mv a0,s5 + 71e: 00000097 auipc ra,0x0 + 722: da2080e7 jalr -606(ra) # 4c0 <putc> state = 0; - 71c: 4981 li s3,0 - 71e: b5d1 j 5e2 <vprintf+0x60> + 726: 4981 li s3,0 + 728: b5d1 j 5ec <vprintf+0x60> putc(fd, '%'); - 720: 85d2 mv a1,s4 - 722: 8556 mv a0,s5 - 724: 00000097 auipc ra,0x0 - 728: d92080e7 jalr -622(ra) # 4b6 <putc> + 72a: 85d2 mv a1,s4 + 72c: 8556 mv a0,s5 + 72e: 00000097 auipc ra,0x0 + 732: d92080e7 jalr -622(ra) # 4c0 <putc> putc(fd, c); - 72c: 85ca mv a1,s2 - 72e: 8556 mv a0,s5 - 730: 00000097 auipc ra,0x0 - 734: d86080e7 jalr -634(ra) # 4b6 <putc> + 736: 85ca mv a1,s2 + 738: 8556 mv a0,s5 + 73a: 00000097 auipc ra,0x0 + 73e: d86080e7 jalr -634(ra) # 4c0 <putc> state = 0; - 738: 4981 li s3,0 - 73a: b565 j 5e2 <vprintf+0x60> + 742: 4981 li s3,0 + 744: b565 j 5ec <vprintf+0x60> s = va_arg(ap, char*); - 73c: 8b4a mv s6,s2 + 746: 8b4a mv s6,s2 state = 0; - 73e: 4981 li s3,0 - 740: b54d j 5e2 <vprintf+0x60> + 748: 4981 li s3,0 + 74a: b54d j 5ec <vprintf+0x60> } } } - 742: 70e6 ld ra,120(sp) - 744: 7446 ld s0,112(sp) - 746: 74a6 ld s1,104(sp) - 748: 7906 ld s2,96(sp) - 74a: 69e6 ld s3,88(sp) - 74c: 6a46 ld s4,80(sp) - 74e: 6aa6 ld s5,72(sp) - 750: 6b06 ld s6,64(sp) - 752: 7be2 ld s7,56(sp) - 754: 7c42 ld s8,48(sp) - 756: 7ca2 ld s9,40(sp) - 758: 7d02 ld s10,32(sp) - 75a: 6de2 ld s11,24(sp) - 75c: 6109 addi sp,sp,128 - 75e: 8082 ret - -0000000000000760 <fprintf>: + 74c: 70e6 ld ra,120(sp) + 74e: 7446 ld s0,112(sp) + 750: 74a6 ld s1,104(sp) + 752: 7906 ld s2,96(sp) + 754: 69e6 ld s3,88(sp) + 756: 6a46 ld s4,80(sp) + 758: 6aa6 ld s5,72(sp) + 75a: 6b06 ld s6,64(sp) + 75c: 7be2 ld s7,56(sp) + 75e: 7c42 ld s8,48(sp) + 760: 7ca2 ld s9,40(sp) + 762: 7d02 ld s10,32(sp) + 764: 6de2 ld s11,24(sp) + 766: 6109 addi sp,sp,128 + 768: 8082 ret + +000000000000076a <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 760: 715d addi sp,sp,-80 - 762: ec06 sd ra,24(sp) - 764: e822 sd s0,16(sp) - 766: 1000 addi s0,sp,32 - 768: e010 sd a2,0(s0) - 76a: e414 sd a3,8(s0) - 76c: e818 sd a4,16(s0) - 76e: ec1c sd a5,24(s0) - 770: 03043023 sd a6,32(s0) - 774: 03143423 sd a7,40(s0) + 76a: 715d addi sp,sp,-80 + 76c: ec06 sd ra,24(sp) + 76e: e822 sd s0,16(sp) + 770: 1000 addi s0,sp,32 + 772: e010 sd a2,0(s0) + 774: e414 sd a3,8(s0) + 776: e818 sd a4,16(s0) + 778: ec1c sd a5,24(s0) + 77a: 03043023 sd a6,32(s0) + 77e: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 778: 8622 mv a2,s0 - 77a: fe843423 sd s0,-24(s0) + 782: 8622 mv a2,s0 + 784: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 77e: 00000097 auipc ra,0x0 - 782: e04080e7 jalr -508(ra) # 582 <vprintf> + 788: 00000097 auipc ra,0x0 + 78c: e04080e7 jalr -508(ra) # 58c <vprintf> } - 786: 60e2 ld ra,24(sp) - 788: 6442 ld s0,16(sp) - 78a: 6161 addi sp,sp,80 - 78c: 8082 ret + 790: 60e2 ld ra,24(sp) + 792: 6442 ld s0,16(sp) + 794: 6161 addi sp,sp,80 + 796: 8082 ret -000000000000078e <printf>: +0000000000000798 <printf>: void printf(const char *fmt, ...) { - 78e: 711d addi sp,sp,-96 - 790: ec06 sd ra,24(sp) - 792: e822 sd s0,16(sp) - 794: 1000 addi s0,sp,32 - 796: e40c sd a1,8(s0) - 798: e810 sd a2,16(s0) - 79a: ec14 sd a3,24(s0) - 79c: f018 sd a4,32(s0) - 79e: f41c sd a5,40(s0) - 7a0: 03043823 sd a6,48(s0) - 7a4: 03143c23 sd a7,56(s0) + 798: 711d addi sp,sp,-96 + 79a: ec06 sd ra,24(sp) + 79c: e822 sd s0,16(sp) + 79e: 1000 addi s0,sp,32 + 7a0: e40c sd a1,8(s0) + 7a2: e810 sd a2,16(s0) + 7a4: ec14 sd a3,24(s0) + 7a6: f018 sd a4,32(s0) + 7a8: f41c sd a5,40(s0) + 7aa: 03043823 sd a6,48(s0) + 7ae: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 7a8: 00840613 addi a2,s0,8 - 7ac: fec43423 sd a2,-24(s0) + 7b2: 00840613 addi a2,s0,8 + 7b6: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 7b0: 85aa mv a1,a0 - 7b2: 4505 li a0,1 - 7b4: 00000097 auipc ra,0x0 - 7b8: dce080e7 jalr -562(ra) # 582 <vprintf> + 7ba: 85aa mv a1,a0 + 7bc: 4505 li a0,1 + 7be: 00000097 auipc ra,0x0 + 7c2: dce080e7 jalr -562(ra) # 58c <vprintf> } - 7bc: 60e2 ld ra,24(sp) - 7be: 6442 ld s0,16(sp) - 7c0: 6125 addi sp,sp,96 - 7c2: 8082 ret + 7c6: 60e2 ld ra,24(sp) + 7c8: 6442 ld s0,16(sp) + 7ca: 6125 addi sp,sp,96 + 7cc: 8082 ret -00000000000007c4 <free>: +00000000000007ce <free>: static Header base; static Header *freep; void free(void *ap) { - 7c4: 1141 addi sp,sp,-16 - 7c6: e422 sd s0,8(sp) - 7c8: 0800 addi s0,sp,16 + 7ce: 1141 addi sp,sp,-16 + 7d0: e422 sd s0,8(sp) + 7d2: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 7ca: ff050693 addi a3,a0,-16 + 7d4: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 7ce: 00000797 auipc a5,0x0 - 7d2: 39a7b783 ld a5,922(a5) # b68 <freep> - 7d6: a02d j 800 <free+0x3c> + 7d8: 00000797 auipc a5,0x0 + 7dc: 3b07b783 ld a5,944(a5) # b88 <freep> + 7e0: a02d j 80a <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 7d8: 4618 lw a4,8(a2) - 7da: 9f2d addw a4,a4,a1 - 7dc: fee52c23 sw a4,-8(a0) + 7e2: 4618 lw a4,8(a2) + 7e4: 9f2d addw a4,a4,a1 + 7e6: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 7e0: 6398 ld a4,0(a5) - 7e2: 6310 ld a2,0(a4) - 7e4: a83d j 822 <free+0x5e> + 7ea: 6398 ld a4,0(a5) + 7ec: 6310 ld a2,0(a4) + 7ee: a83d j 82c <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 7e6: ff852703 lw a4,-8(a0) - 7ea: 9f31 addw a4,a4,a2 - 7ec: c798 sw a4,8(a5) + 7f0: ff852703 lw a4,-8(a0) + 7f4: 9f31 addw a4,a4,a2 + 7f6: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 7ee: ff053683 ld a3,-16(a0) - 7f2: a091 j 836 <free+0x72> + 7f8: ff053683 ld a3,-16(a0) + 7fc: a091 j 840 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 7f4: 6398 ld a4,0(a5) - 7f6: 00e7e463 bltu a5,a4,7fe <free+0x3a> - 7fa: 00e6ea63 bltu a3,a4,80e <free+0x4a> + 7fe: 6398 ld a4,0(a5) + 800: 00e7e463 bltu a5,a4,808 <free+0x3a> + 804: 00e6ea63 bltu a3,a4,818 <free+0x4a> { - 7fe: 87ba mv a5,a4 + 808: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 800: fed7fae3 bgeu a5,a3,7f4 <free+0x30> - 804: 6398 ld a4,0(a5) - 806: 00e6e463 bltu a3,a4,80e <free+0x4a> + 80a: fed7fae3 bgeu a5,a3,7fe <free+0x30> + 80e: 6398 ld a4,0(a5) + 810: 00e6e463 bltu a3,a4,818 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 80a: fee7eae3 bltu a5,a4,7fe <free+0x3a> + 814: fee7eae3 bltu a5,a4,808 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 80e: ff852583 lw a1,-8(a0) - 812: 6390 ld a2,0(a5) - 814: 02059813 slli a6,a1,0x20 - 818: 01c85713 srli a4,a6,0x1c - 81c: 9736 add a4,a4,a3 - 81e: fae60de3 beq a2,a4,7d8 <free+0x14> + 818: ff852583 lw a1,-8(a0) + 81c: 6390 ld a2,0(a5) + 81e: 02059813 slli a6,a1,0x20 + 822: 01c85713 srli a4,a6,0x1c + 826: 9736 add a4,a4,a3 + 828: fae60de3 beq a2,a4,7e2 <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 822: fec53823 sd a2,-16(a0) + 82c: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 826: 4790 lw a2,8(a5) - 828: 02061593 slli a1,a2,0x20 - 82c: 01c5d713 srli a4,a1,0x1c - 830: 973e add a4,a4,a5 - 832: fae68ae3 beq a3,a4,7e6 <free+0x22> + 830: 4790 lw a2,8(a5) + 832: 02061593 slli a1,a2,0x20 + 836: 01c5d713 srli a4,a1,0x1c + 83a: 973e add a4,a4,a5 + 83c: fae68ae3 beq a3,a4,7f0 <free+0x22> p->s.ptr = bp->s.ptr; - 836: e394 sd a3,0(a5) + 840: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 838: 00000717 auipc a4,0x0 - 83c: 32f73823 sd a5,816(a4) # b68 <freep> + 842: 00000717 auipc a4,0x0 + 846: 34f73323 sd a5,838(a4) # b88 <freep> } - 840: 6422 ld s0,8(sp) - 842: 0141 addi sp,sp,16 - 844: 8082 ret + 84a: 6422 ld s0,8(sp) + 84c: 0141 addi sp,sp,16 + 84e: 8082 ret -0000000000000846 <malloc>: +0000000000000850 <malloc>: return freep; } void* malloc(uint nbytes) { - 846: 7139 addi sp,sp,-64 - 848: fc06 sd ra,56(sp) - 84a: f822 sd s0,48(sp) - 84c: f426 sd s1,40(sp) - 84e: f04a sd s2,32(sp) - 850: ec4e sd s3,24(sp) - 852: e852 sd s4,16(sp) - 854: e456 sd s5,8(sp) - 856: e05a sd s6,0(sp) - 858: 0080 addi s0,sp,64 + 850: 7139 addi sp,sp,-64 + 852: fc06 sd ra,56(sp) + 854: f822 sd s0,48(sp) + 856: f426 sd s1,40(sp) + 858: f04a sd s2,32(sp) + 85a: ec4e sd s3,24(sp) + 85c: e852 sd s4,16(sp) + 85e: e456 sd s5,8(sp) + 860: e05a sd s6,0(sp) + 862: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 85a: 02051493 slli s1,a0,0x20 - 85e: 9081 srli s1,s1,0x20 - 860: 04bd addi s1,s1,15 - 862: 8091 srli s1,s1,0x4 - 864: 00148a1b addiw s4,s1,1 - 868: 0485 addi s1,s1,1 + 864: 02051493 slli s1,a0,0x20 + 868: 9081 srli s1,s1,0x20 + 86a: 04bd addi s1,s1,15 + 86c: 8091 srli s1,s1,0x4 + 86e: 00148a1b addiw s4,s1,1 + 872: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 86a: 00000517 auipc a0,0x0 - 86e: 2fe53503 ld a0,766(a0) # b68 <freep> - 872: c515 beqz a0,89e <malloc+0x58> + 874: 00000517 auipc a0,0x0 + 878: 31453503 ld a0,788(a0) # b88 <freep> + 87c: c515 beqz a0,8a8 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 874: 611c ld a5,0(a0) + 87e: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 876: 4798 lw a4,8(a5) - 878: 04977163 bgeu a4,s1,8ba <malloc+0x74> - 87c: 89d2 mv s3,s4 - 87e: 000a071b sext.w a4,s4 - 882: 6685 lui a3,0x1 - 884: 00d77363 bgeu a4,a3,88a <malloc+0x44> - 888: 6985 lui s3,0x1 - 88a: 00098b1b sext.w s6,s3 + 880: 4798 lw a4,8(a5) + 882: 04977163 bgeu a4,s1,8c4 <malloc+0x74> + 886: 89d2 mv s3,s4 + 888: 000a071b sext.w a4,s4 + 88c: 6685 lui a3,0x1 + 88e: 00d77363 bgeu a4,a3,894 <malloc+0x44> + 892: 6985 lui s3,0x1 + 894: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 88e: 0049999b slliw s3,s3,0x4 + 898: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 892: 00000917 auipc s2,0x0 - 896: 2d690913 addi s2,s2,726 # b68 <freep> + 89c: 00000917 auipc s2,0x0 + 8a0: 2ec90913 addi s2,s2,748 # b88 <freep> if(p == (char*)-1) - 89a: 5afd li s5,-1 - 89c: a8a5 j 914 <malloc+0xce> + 8a4: 5afd li s5,-1 + 8a6: a8a5 j 91e <malloc+0xce> base.s.ptr = freep = prevp = &base; - 89e: 00000797 auipc a5,0x0 - 8a2: 2ca78793 addi a5,a5,714 # b68 <freep> - 8a6: 00000717 auipc a4,0x0 - 8aa: 2ca70713 addi a4,a4,714 # b70 <base> - 8ae: e398 sd a4,0(a5) - 8b0: e798 sd a4,8(a5) + 8a8: 00000797 auipc a5,0x0 + 8ac: 2e078793 addi a5,a5,736 # b88 <freep> + 8b0: 00000717 auipc a4,0x0 + 8b4: 2e070713 addi a4,a4,736 # b90 <base> + 8b8: e398 sd a4,0(a5) + 8ba: e798 sd a4,8(a5) base.s.size = 0; - 8b2: 0007a823 sw zero,16(a5) + 8bc: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 8b6: 87ba mv a5,a4 - 8b8: b7d1 j 87c <malloc+0x36> + 8c0: 87ba mv a5,a4 + 8c2: b7d1 j 886 <malloc+0x36> if(p->s.size == nunits) - 8ba: 02e48c63 beq s1,a4,8f2 <malloc+0xac> + 8c4: 02e48c63 beq s1,a4,8fc <malloc+0xac> p->s.size -= nunits; - 8be: 4147073b subw a4,a4,s4 - 8c2: c798 sw a4,8(a5) + 8c8: 4147073b subw a4,a4,s4 + 8cc: c798 sw a4,8(a5) p += p->s.size; - 8c4: 02071693 slli a3,a4,0x20 - 8c8: 01c6d713 srli a4,a3,0x1c - 8cc: 97ba add a5,a5,a4 + 8ce: 02071693 slli a3,a4,0x20 + 8d2: 01c6d713 srli a4,a3,0x1c + 8d6: 97ba add a5,a5,a4 p->s.size = nunits; - 8ce: 0147a423 sw s4,8(a5) + 8d8: 0147a423 sw s4,8(a5) freep = prevp; - 8d2: 00000717 auipc a4,0x0 - 8d6: 28a73b23 sd a0,662(a4) # b68 <freep> + 8dc: 00000717 auipc a4,0x0 + 8e0: 2aa73623 sd a0,684(a4) # b88 <freep> return (void*)(p + 1); - 8da: 01078513 addi a0,a5,16 + 8e4: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 8de: 70e2 ld ra,56(sp) - 8e0: 7442 ld s0,48(sp) - 8e2: 74a2 ld s1,40(sp) - 8e4: 7902 ld s2,32(sp) - 8e6: 69e2 ld s3,24(sp) - 8e8: 6a42 ld s4,16(sp) - 8ea: 6aa2 ld s5,8(sp) - 8ec: 6b02 ld s6,0(sp) - 8ee: 6121 addi sp,sp,64 - 8f0: 8082 ret + 8e8: 70e2 ld ra,56(sp) + 8ea: 7442 ld s0,48(sp) + 8ec: 74a2 ld s1,40(sp) + 8ee: 7902 ld s2,32(sp) + 8f0: 69e2 ld s3,24(sp) + 8f2: 6a42 ld s4,16(sp) + 8f4: 6aa2 ld s5,8(sp) + 8f6: 6b02 ld s6,0(sp) + 8f8: 6121 addi sp,sp,64 + 8fa: 8082 ret prevp->s.ptr = p->s.ptr; - 8f2: 6398 ld a4,0(a5) - 8f4: e118 sd a4,0(a0) - 8f6: bff1 j 8d2 <malloc+0x8c> + 8fc: 6398 ld a4,0(a5) + 8fe: e118 sd a4,0(a0) + 900: bff1 j 8dc <malloc+0x8c> hp->s.size = nu; - 8f8: 01652423 sw s6,8(a0) + 902: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 8fc: 0541 addi a0,a0,16 - 8fe: 00000097 auipc ra,0x0 - 902: ec6080e7 jalr -314(ra) # 7c4 <free> + 906: 0541 addi a0,a0,16 + 908: 00000097 auipc ra,0x0 + 90c: ec6080e7 jalr -314(ra) # 7ce <free> return freep; - 906: 00093503 ld a0,0(s2) + 910: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 90a: d971 beqz a0,8de <malloc+0x98> + 914: d971 beqz a0,8e8 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 90c: 611c ld a5,0(a0) + 916: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 90e: 4798 lw a4,8(a5) - 910: fa9775e3 bgeu a4,s1,8ba <malloc+0x74> + 918: 4798 lw a4,8(a5) + 91a: fa9775e3 bgeu a4,s1,8c4 <malloc+0x74> if(p == freep) - 914: 00093703 ld a4,0(s2) - 918: 853e mv a0,a5 - 91a: fef719e3 bne a4,a5,90c <malloc+0xc6> + 91e: 00093703 ld a4,0(s2) + 922: 853e mv a0,a5 + 924: fef719e3 bne a4,a5,916 <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 91e: 854e mv a0,s3 - 920: 00000097 auipc ra,0x0 - 924: b2a080e7 jalr -1238(ra) # 44a <sbrk> + 928: 854e mv a0,s3 + 92a: 00000097 auipc ra,0x0 + 92e: b20080e7 jalr -1248(ra) # 44a <sbrk> if(p == (char*)-1) - 928: fd5518e3 bne a0,s5,8f8 <malloc+0xb2> + 932: fd5518e3 bne a0,s5,902 <malloc+0xb2> return 0; - 92c: 4501 li a0,0 - 92e: bf45 j 8de <malloc+0x98> + 936: 4501 li a0,0 + 938: bf45 j 8e8 <malloc+0x98> diff --git a/xv6-user/init.c b/xv6-user/init.c index 6c4ea00..d7820c0 100644 --- a/xv6-user/init.c +++ b/xv6-user/init.c @@ -33,6 +33,7 @@ char *tests[] = { "fstat", "getcwd", "getpid", + "times", "gettimeofday", "mkdir_", "openat", diff --git a/xv6-user/init.o b/xv6-user/init.o index 9d9ba88413e3d022501596b50ef9c5f699f28408..fa3d628296a4c0817a743c98b975aaafed5ba9b0 100644 GIT binary patch delta 2155 zcmZ9NZERCj7{~8vyV1&N+y%SSyBF76yR}_W>9RK%P=Ul3B60P@q92HsXyTOWrpuTw z1dBwr0n3(u1Y){K<22K3u%#x>1a$l4Oooxf7!pOPF^Xm*F7jcKnfTn>Gr8XT;d!3> z|2@zDoZg<>&L14^8;-E{>1dcSACm0T(w@%rv#%)mQip@#O@|w9XSVt-rBtD-V%-o$ zkJG4)%M|07bIv*&N;=T(*yv|j-qrbx(zvdp*rNE1%o=gtrL)%jW!JLP)xb)eSaAFE zKf3pDHiM{dX=8~}#^i)d-$E@H+Arpvs+9a6DvQ`j^e<E0U}K8%H>SB@4kZ18tw)YJ zHPc;HR&2ciTqYWpbjn8W0~11Pl2o<ra2w)8cS~CAx^1urDWXY9@3752i4meHNpIX9 zGpkO_5$%@L29;N_Of(~D$mTo%-7nDYcdPcf)5i1AM$P{93b)}gWQa~k`k;;GF-@-5 z{H6F#+rYj+f$qvQx4Pffw*XZWc!0>Dja<P_O=v%v{!AIO(O=O`bV<@#8@-8~CiGj9 z{$ZmIhaoWKCYCj!-fg3If>j7?u5hajHd2W=k*A3~ZX*$-hzt`sVk3<hsSsM5Tyfq; zcVUj`Ba;4XqwQEG+9BzOHo6ab<x}hhWGV&g!ZgJmGxnMBuo;h<alnj2W`q&rS@Kks z|K3Z*CB5G_b@Mefm2s(mgn_ExoVyzu^XcmE8O@a=RU=pcnSelF4abQ9$8gOm-q1PD zP+diNDsX^(jB5QMLuFa0x<J1kGJ9r-^B~7J`ZhKJZ}6bmvuO5=2RWNGejM`i!7I#r zR_?)g49_FoEa)>&h6H{HaqrrjY<$saTn!1|i?Z8D6|#0fuN4T?y0k6}4azz~`6X<p zjsvya8<(o#_%hO@W=Tz0)E<nIx<Kk)i`t7zq^{O-_8Rm$0e2nuT7MnhLz2{1QqRjN zBYlDlsn6AM?VLsZO4i06UdKu5xIlA@7WEJ=lDbH0z&zu|X;zfOSR%D5%)LDpHG}G~ z(2mGyBOQ}8MD<(PYol4q>`@#F3rvt>@jWlD^EM`F=9tCtGmB$CuG;9=7RLd2BZ3X0 zHgdoBxW&PPkq8~7NC*oNj`2u{4dD_gs}b()HNJYfj5LgYNZl0W>|G?I^hBc}2JEBi zM3j4PSUTUqNm4J6S|ty<0Z-#1sf#r4gIX`JLe+8HdygQ$YPx^4p0hS|Q}skW_Zoj+ zYu97Qk=jq{$eKiXKUhp)hSXCQwHF0i<$66gR~kf|di*i2S^Y+3zp<;c*iIc2<g#{V z3>8SngfD0DEnAzxH1$u#Tt4fG_DdQu&U^k^Y}Uj2kZbyqm7}w{#nUAp&Ny=1htHdX zo<D=di52|b+`|0OTN3O#QWSR~NAVO2EeS_iJ%X(}SQ4q$1e-;UVg`lQgd?yC!7V%3 zEu^+2SQBy-`%s`b27POSjUz>I204l=C~QsmHp~BzGxBq2wEPEXYKwX1tBN~0ht9SZ K_Aqj7;eP?4<Y<Nf delta 2234 zcmZ9NZETZO6vunpjdk!8Hs*GF_mZ`9FYP)q$As>cx=7R@CM+gsR18E+V6bIFBOpvx zW(JBQlfO759hRVk1!vMUL`*=3U*rQMB41_#hQ%mrWW+^H{4f*Gy}eDZ&rP0l&i((+ zIrl#AWBab}9SbmbB3Q@RBj{#dohxuMcwMoIBF7R3jncg1Wb<7zmP3h;;g)OK)s(v# z1I{8Zi&_0Uw>z5iHm6e@#nQ88e4FEE;pA-2f-9$q<+^ak?M*&(Z?M=jT8rn4mg@AZ z`x)IOT>Pelm5$sjP|-Z1C7k_*YZhmV*tU|3TqeN^Tb{#FgjwoSs%W9(2OIaJkaH2x z^cx#(L>JMunue6mrgUO}=z2|m$pRHUi?c+Z*R;%5`!a43eNEFpZMD0=yj;AYY5L5v zDF@I*bXe0=7O3bLws|?Wdfm8OQozRXA?2RYxh2YH3(n&j(J7@e$LcIlQ4$N(=@0Lc zqGgU=8=Hn-aQK9~aJP-zKsS+1L{8htPlyUG?&;Mo+vt5Hh(6TxM;rYcvqIi!+7WZ1 zu#}^q)Lj^`WvxILktc{O+DJJDi1ZVA$wmS=OC(O@I~!SpTcuodIHk-SU)t!CU}aov z(6rA+H=(JF=e?k)o8F9KY%g0cUZ?p=>XjMGb=ZSzWt{aXyGPmm%D$uQu(C&$9aZ*Y zM9aCDpl*ffmryl~>$c~RD8HXPQ!&G8O0-l&{&O8m=hLy&&tsyJv-8PIm3a)YN(<M0 z7Ov27&$k<2_$|EX?~po+A>re=?5|c?b3``!trJxp>>@g=_NtTzDrKh1LI)iOo$lm6 zRWl58)t2bdOG@X_u{`}<@YHZvHI^r{S*iA-vxXO&SG7vlRHK{nhiY<!N$ZV{{g|MP z7<Fth)IGRK>J3t#GSoNmFR6>9ZZ*`mu&S1$q1Iv}h*Gqp*7EGrT)K-$kb0`t68jBx zTF3IHPvL4U7jGN%wvOf59l$)*KcKEl<&=hWgQ%$ED6g|T^@e%~&yl*3)I(a8{i7JH z<KnO^)#He!@|}ocis*0#kw0s6d>41A;~nalFglLF6X4>AQS-IYaRi-2j~ev0QTrZx z1C7`nuy7$@v17OtXk;JY*Fd8fH7Z_}8>b=NajXi`6%JaSVM86m7E)gcS{MpeixVn4 zZEhM_z*Wk+LbbX2S0v#{%#-?n)XdW*)p1nR(>1NPJic@zwfg(m@+cRdXhphagPz79 z)f}Xnrww%!Q}tZLv?5*ROCr}9!(FP0g)C3zsZ8(56XIgrs5z|T^xis&o-yc2gN~w? z=%)s~V9*#Qh?-YO{fsF?-j+CShW`Kdcy(<xW<&JtY{+4K$>N6F`Ro~_)_l*FBe6D| zzeDbdMjQ(?o32XF?x86hW^U{ZM_3$_WLG0ab_Btei1T_7JuT~47baUGY#&l&2M}zH zIA=oWX<f&D$7E}S)gVQ72ZC)8=SR!vdsu>@wg5YY$+igVM~dtmg6)xFpOs#8s37eH cxz8}z9?FlGr<Dsxw1@K@kEdr#un?~N536TiNB{r; diff --git a/xv6-user/init.sym b/xv6-user/init.sym index a639105..9d72670 100644 --- a/xv6-user/init.sym +++ b/xv6-user/init.sym @@ -1,7 +1,7 @@ 0000000000000000 .text -0000000000000930 .rodata -0000000000000ab8 .data -0000000000000b60 .bss +0000000000000940 .rodata +0000000000000ad0 .data +0000000000000b80 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -17,24 +17,25 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -00000000000004b6 putc -00000000000004d8 printint -0000000000000aa0 digits +00000000000004c0 putc +00000000000004e2 printint +0000000000000ab8 digits 0000000000000000 umalloc.c -0000000000000b68 freep -0000000000000b70 base +0000000000000b88 freep +0000000000000b90 base 000000000000010e strcpy -000000000000078e printf -00000000000012b8 __global_pointer$ +0000000000000798 printf +00000000000012d0 __global_pointer$ 000000000000046a dev -0000000000000b60 argv +0000000000000b80 argv 0000000000000314 memmove +00000000000004b6 times 000000000000048a trace 00000000000001f4 gets -0000000000000b60 __SDATA_BEGIN__ +0000000000000b80 __SDATA_BEGIN__ 0000000000000440 getpid 00000000000003a6 memcpy -0000000000000846 malloc +0000000000000850 malloc 0000000000000482 remove 0000000000000452 sleep 0000000000000492 sysinfo @@ -44,38 +45,38 @@ 000000000000049a rename 00000000000003ec write 000000000000041a fstat -0000000000000760 fprintf +000000000000076a fprintf 0000000000000400 kill 000000000000012a strcat -0000000000000582 vprintf +000000000000058c vprintf 000000000000042e chdir 0000000000000408 exec 00000000000003d0 wait 00000000000003e2 read 000000000000036c memcmp 00000000000003be fork -0000000000000b80 __BSS_END__ +0000000000000ba0 __BSS_END__ 000000000000044a sbrk 0000000000000462 test_proc 000000000000045a uptime -0000000000000b60 __bss_start +0000000000000b80 __bss_start 00000000000001ae memset 0000000000000000 main -0000000000000ac0 tests +0000000000000ad8 tests 0000000000000158 strcmp 00000000000004a2 shutdown 0000000000000438 dup 000000000000047a getcwd -0000000000000ab8 __DATA_BEGIN__ +0000000000000ad0 __DATA_BEGIN__ 000000000000026e stat -0000000000000b60 _edata -0000000000000b80 _end +0000000000000b80 _edata +0000000000000ba0 _end 00000000000003c6 exit 00000000000002b4 atoi 0000000000000184 strlen 0000000000000410 open 00000000000001d0 strchr -0000000000000ab8 counts +0000000000000ad0 counts 0000000000000424 mkdir 00000000000003f6 close -00000000000007c4 free +00000000000007ce free diff --git a/xv6-user/kill.asm b/xv6-user/kill.asm index 82db598..7bc204d 100644 --- a/xv6-user/kill.asm +++ b/xv6-user/kill.asm @@ -47,10 +47,10 @@ main(int argc, char **argv) 44: 2dc080e7 jalr 732(ra) # 31c <exit> fprintf(2, "usage: kill pid...\n"); 48: 00001597 auipc a1,0x1 - 4c: 84058593 addi a1,a1,-1984 # 888 <malloc+0xec> + 4c: 84858593 addi a1,a1,-1976 # 890 <malloc+0xea> 50: 4509 li a0,2 52: 00000097 auipc ra,0x0 - 56: 664080e7 jalr 1636(ra) # 6b6 <fprintf> + 56: 66e080e7 jalr 1646(ra) # 6c0 <fprintf> exit(1); 5a: 4505 li a0,1 5c: 00000097 auipc ra,0x0 @@ -812,637 +812,647 @@ uname: ret 40a: 8082 ret -000000000000040c <putc>: +000000000000040c <times>: +.global times +times: + li a7, SYS_times + 40c: 09900893 li a7,153 + ecall + 410: 00000073 ecall + ret + 414: 8082 ret + +0000000000000416 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 40c: 1101 addi sp,sp,-32 - 40e: ec06 sd ra,24(sp) - 410: e822 sd s0,16(sp) - 412: 1000 addi s0,sp,32 - 414: feb407a3 sb a1,-17(s0) + 416: 1101 addi sp,sp,-32 + 418: ec06 sd ra,24(sp) + 41a: e822 sd s0,16(sp) + 41c: 1000 addi s0,sp,32 + 41e: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 418: 4605 li a2,1 - 41a: fef40593 addi a1,s0,-17 - 41e: 00000097 auipc ra,0x0 - 422: f24080e7 jalr -220(ra) # 342 <write> + 422: 4605 li a2,1 + 424: fef40593 addi a1,s0,-17 + 428: 00000097 auipc ra,0x0 + 42c: f1a080e7 jalr -230(ra) # 342 <write> } - 426: 60e2 ld ra,24(sp) - 428: 6442 ld s0,16(sp) - 42a: 6105 addi sp,sp,32 - 42c: 8082 ret + 430: 60e2 ld ra,24(sp) + 432: 6442 ld s0,16(sp) + 434: 6105 addi sp,sp,32 + 436: 8082 ret -000000000000042e <printint>: +0000000000000438 <printint>: static void printint(int fd, int xx, int base, int sgn) { - 42e: 7139 addi sp,sp,-64 - 430: fc06 sd ra,56(sp) - 432: f822 sd s0,48(sp) - 434: f426 sd s1,40(sp) - 436: f04a sd s2,32(sp) - 438: ec4e sd s3,24(sp) - 43a: 0080 addi s0,sp,64 - 43c: 84aa mv s1,a0 + 438: 7139 addi sp,sp,-64 + 43a: fc06 sd ra,56(sp) + 43c: f822 sd s0,48(sp) + 43e: f426 sd s1,40(sp) + 440: f04a sd s2,32(sp) + 442: ec4e sd s3,24(sp) + 444: 0080 addi s0,sp,64 + 446: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 43e: c299 beqz a3,444 <printint+0x16> - 440: 0805c863 bltz a1,4d0 <printint+0xa2> + 448: c299 beqz a3,44e <printint+0x16> + 44a: 0805c863 bltz a1,4da <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 444: 2581 sext.w a1,a1 + 44e: 2581 sext.w a1,a1 neg = 0; - 446: 4881 li a7,0 + 450: 4881 li a7,0 } i = 0; - 448: fc040993 addi s3,s0,-64 + 452: fc040993 addi s3,s0,-64 neg = 0; - 44c: 86ce mv a3,s3 + 456: 86ce mv a3,s3 i = 0; - 44e: 4701 li a4,0 + 458: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 450: 2601 sext.w a2,a2 - 452: 00000517 auipc a0,0x0 - 456: 4ae50513 addi a0,a0,1198 # 900 <digits> - 45a: 883a mv a6,a4 - 45c: 2705 addiw a4,a4,1 - 45e: 02c5f7bb remuw a5,a1,a2 - 462: 1782 slli a5,a5,0x20 - 464: 9381 srli a5,a5,0x20 - 466: 97aa add a5,a5,a0 - 468: 0007c783 lbu a5,0(a5) - 46c: 00f68023 sb a5,0(a3) + 45a: 2601 sext.w a2,a2 + 45c: 00000517 auipc a0,0x0 + 460: 4ac50513 addi a0,a0,1196 # 908 <digits> + 464: 883a mv a6,a4 + 466: 2705 addiw a4,a4,1 + 468: 02c5f7bb remuw a5,a1,a2 + 46c: 1782 slli a5,a5,0x20 + 46e: 9381 srli a5,a5,0x20 + 470: 97aa add a5,a5,a0 + 472: 0007c783 lbu a5,0(a5) + 476: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 470: 0005879b sext.w a5,a1 - 474: 02c5d5bb divuw a1,a1,a2 - 478: 0685 addi a3,a3,1 - 47a: fec7f0e3 bgeu a5,a2,45a <printint+0x2c> + 47a: 0005879b sext.w a5,a1 + 47e: 02c5d5bb divuw a1,a1,a2 + 482: 0685 addi a3,a3,1 + 484: fec7f0e3 bgeu a5,a2,464 <printint+0x2c> if(neg) - 47e: 00088c63 beqz a7,496 <printint+0x68> + 488: 00088c63 beqz a7,4a0 <printint+0x68> buf[i++] = '-'; - 482: fd070793 addi a5,a4,-48 - 486: 00878733 add a4,a5,s0 - 48a: 02d00793 li a5,45 - 48e: fef70823 sb a5,-16(a4) - 492: 0028071b addiw a4,a6,2 + 48c: fd070793 addi a5,a4,-48 + 490: 00878733 add a4,a5,s0 + 494: 02d00793 li a5,45 + 498: fef70823 sb a5,-16(a4) + 49c: 0028071b addiw a4,a6,2 while(--i >= 0) - 496: 02e05663 blez a4,4c2 <printint+0x94> - 49a: fc040913 addi s2,s0,-64 - 49e: 993a add s2,s2,a4 - 4a0: 19fd addi s3,s3,-1 - 4a2: 99ba add s3,s3,a4 - 4a4: 377d addiw a4,a4,-1 - 4a6: 1702 slli a4,a4,0x20 - 4a8: 9301 srli a4,a4,0x20 - 4aa: 40e989b3 sub s3,s3,a4 + 4a0: 02e05663 blez a4,4cc <printint+0x94> + 4a4: fc040913 addi s2,s0,-64 + 4a8: 993a add s2,s2,a4 + 4aa: 19fd addi s3,s3,-1 + 4ac: 99ba add s3,s3,a4 + 4ae: 377d addiw a4,a4,-1 + 4b0: 1702 slli a4,a4,0x20 + 4b2: 9301 srli a4,a4,0x20 + 4b4: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 4ae: fff94583 lbu a1,-1(s2) - 4b2: 8526 mv a0,s1 - 4b4: 00000097 auipc ra,0x0 - 4b8: f58080e7 jalr -168(ra) # 40c <putc> + 4b8: fff94583 lbu a1,-1(s2) + 4bc: 8526 mv a0,s1 + 4be: 00000097 auipc ra,0x0 + 4c2: f58080e7 jalr -168(ra) # 416 <putc> while(--i >= 0) - 4bc: 197d addi s2,s2,-1 - 4be: ff3918e3 bne s2,s3,4ae <printint+0x80> + 4c6: 197d addi s2,s2,-1 + 4c8: ff3918e3 bne s2,s3,4b8 <printint+0x80> } - 4c2: 70e2 ld ra,56(sp) - 4c4: 7442 ld s0,48(sp) - 4c6: 74a2 ld s1,40(sp) - 4c8: 7902 ld s2,32(sp) - 4ca: 69e2 ld s3,24(sp) - 4cc: 6121 addi sp,sp,64 - 4ce: 8082 ret + 4cc: 70e2 ld ra,56(sp) + 4ce: 7442 ld s0,48(sp) + 4d0: 74a2 ld s1,40(sp) + 4d2: 7902 ld s2,32(sp) + 4d4: 69e2 ld s3,24(sp) + 4d6: 6121 addi sp,sp,64 + 4d8: 8082 ret x = -xx; - 4d0: 40b005bb negw a1,a1 + 4da: 40b005bb negw a1,a1 neg = 1; - 4d4: 4885 li a7,1 + 4de: 4885 li a7,1 x = -xx; - 4d6: bf8d j 448 <printint+0x1a> + 4e0: bf8d j 452 <printint+0x1a> -00000000000004d8 <vprintf>: +00000000000004e2 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 4d8: 7119 addi sp,sp,-128 - 4da: fc86 sd ra,120(sp) - 4dc: f8a2 sd s0,112(sp) - 4de: f4a6 sd s1,104(sp) - 4e0: f0ca sd s2,96(sp) - 4e2: ecce sd s3,88(sp) - 4e4: e8d2 sd s4,80(sp) - 4e6: e4d6 sd s5,72(sp) - 4e8: e0da sd s6,64(sp) - 4ea: fc5e sd s7,56(sp) - 4ec: f862 sd s8,48(sp) - 4ee: f466 sd s9,40(sp) - 4f0: f06a sd s10,32(sp) - 4f2: ec6e sd s11,24(sp) - 4f4: 0100 addi s0,sp,128 + 4e2: 7119 addi sp,sp,-128 + 4e4: fc86 sd ra,120(sp) + 4e6: f8a2 sd s0,112(sp) + 4e8: f4a6 sd s1,104(sp) + 4ea: f0ca sd s2,96(sp) + 4ec: ecce sd s3,88(sp) + 4ee: e8d2 sd s4,80(sp) + 4f0: e4d6 sd s5,72(sp) + 4f2: e0da sd s6,64(sp) + 4f4: fc5e sd s7,56(sp) + 4f6: f862 sd s8,48(sp) + 4f8: f466 sd s9,40(sp) + 4fa: f06a sd s10,32(sp) + 4fc: ec6e sd s11,24(sp) + 4fe: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 4f6: 0005c903 lbu s2,0(a1) - 4fa: 18090f63 beqz s2,698 <vprintf+0x1c0> - 4fe: 8aaa mv s5,a0 - 500: 8b32 mv s6,a2 - 502: 00158493 addi s1,a1,1 + 500: 0005c903 lbu s2,0(a1) + 504: 18090f63 beqz s2,6a2 <vprintf+0x1c0> + 508: 8aaa mv s5,a0 + 50a: 8b32 mv s6,a2 + 50c: 00158493 addi s1,a1,1 state = 0; - 506: 4981 li s3,0 + 510: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 508: 02500a13 li s4,37 - 50c: 4c55 li s8,21 - 50e: 00000c97 auipc s9,0x0 - 512: 39ac8c93 addi s9,s9,922 # 8a8 <malloc+0x10c> + 512: 02500a13 li s4,37 + 516: 4c55 li s8,21 + 518: 00000c97 auipc s9,0x0 + 51c: 398c8c93 addi s9,s9,920 # 8b0 <malloc+0x10a> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 516: 02800d93 li s11,40 + 520: 02800d93 li s11,40 putc(fd, 'x'); - 51a: 4d41 li s10,16 + 524: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 51c: 00000b97 auipc s7,0x0 - 520: 3e4b8b93 addi s7,s7,996 # 900 <digits> - 524: a839 j 542 <vprintf+0x6a> + 526: 00000b97 auipc s7,0x0 + 52a: 3e2b8b93 addi s7,s7,994 # 908 <digits> + 52e: a839 j 54c <vprintf+0x6a> putc(fd, c); - 526: 85ca mv a1,s2 - 528: 8556 mv a0,s5 - 52a: 00000097 auipc ra,0x0 - 52e: ee2080e7 jalr -286(ra) # 40c <putc> - 532: a019 j 538 <vprintf+0x60> + 530: 85ca mv a1,s2 + 532: 8556 mv a0,s5 + 534: 00000097 auipc ra,0x0 + 538: ee2080e7 jalr -286(ra) # 416 <putc> + 53c: a019 j 542 <vprintf+0x60> } else if(state == '%'){ - 534: 01498d63 beq s3,s4,54e <vprintf+0x76> + 53e: 01498d63 beq s3,s4,558 <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 538: 0485 addi s1,s1,1 - 53a: fff4c903 lbu s2,-1(s1) - 53e: 14090d63 beqz s2,698 <vprintf+0x1c0> + 542: 0485 addi s1,s1,1 + 544: fff4c903 lbu s2,-1(s1) + 548: 14090d63 beqz s2,6a2 <vprintf+0x1c0> if(state == 0){ - 542: fe0999e3 bnez s3,534 <vprintf+0x5c> + 54c: fe0999e3 bnez s3,53e <vprintf+0x5c> if(c == '%'){ - 546: ff4910e3 bne s2,s4,526 <vprintf+0x4e> + 550: ff4910e3 bne s2,s4,530 <vprintf+0x4e> state = '%'; - 54a: 89d2 mv s3,s4 - 54c: b7f5 j 538 <vprintf+0x60> + 554: 89d2 mv s3,s4 + 556: b7f5 j 542 <vprintf+0x60> if(c == 'd'){ - 54e: 11490c63 beq s2,s4,666 <vprintf+0x18e> - 552: f9d9079b addiw a5,s2,-99 - 556: 0ff7f793 zext.b a5,a5 - 55a: 10fc6e63 bltu s8,a5,676 <vprintf+0x19e> - 55e: f9d9079b addiw a5,s2,-99 - 562: 0ff7f713 zext.b a4,a5 - 566: 10ec6863 bltu s8,a4,676 <vprintf+0x19e> - 56a: 00271793 slli a5,a4,0x2 - 56e: 97e6 add a5,a5,s9 - 570: 439c lw a5,0(a5) - 572: 97e6 add a5,a5,s9 - 574: 8782 jr a5 + 558: 11490c63 beq s2,s4,670 <vprintf+0x18e> + 55c: f9d9079b addiw a5,s2,-99 + 560: 0ff7f793 zext.b a5,a5 + 564: 10fc6e63 bltu s8,a5,680 <vprintf+0x19e> + 568: f9d9079b addiw a5,s2,-99 + 56c: 0ff7f713 zext.b a4,a5 + 570: 10ec6863 bltu s8,a4,680 <vprintf+0x19e> + 574: 00271793 slli a5,a4,0x2 + 578: 97e6 add a5,a5,s9 + 57a: 439c lw a5,0(a5) + 57c: 97e6 add a5,a5,s9 + 57e: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 576: 008b0913 addi s2,s6,8 - 57a: 4685 li a3,1 - 57c: 4629 li a2,10 - 57e: 000b2583 lw a1,0(s6) - 582: 8556 mv a0,s5 - 584: 00000097 auipc ra,0x0 - 588: eaa080e7 jalr -342(ra) # 42e <printint> - 58c: 8b4a mv s6,s2 + 580: 008b0913 addi s2,s6,8 + 584: 4685 li a3,1 + 586: 4629 li a2,10 + 588: 000b2583 lw a1,0(s6) + 58c: 8556 mv a0,s5 + 58e: 00000097 auipc ra,0x0 + 592: eaa080e7 jalr -342(ra) # 438 <printint> + 596: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 58e: 4981 li s3,0 - 590: b765 j 538 <vprintf+0x60> + 598: 4981 li s3,0 + 59a: b765 j 542 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 592: 008b0913 addi s2,s6,8 - 596: 4681 li a3,0 - 598: 4629 li a2,10 - 59a: 000b2583 lw a1,0(s6) - 59e: 8556 mv a0,s5 - 5a0: 00000097 auipc ra,0x0 - 5a4: e8e080e7 jalr -370(ra) # 42e <printint> - 5a8: 8b4a mv s6,s2 + 59c: 008b0913 addi s2,s6,8 + 5a0: 4681 li a3,0 + 5a2: 4629 li a2,10 + 5a4: 000b2583 lw a1,0(s6) + 5a8: 8556 mv a0,s5 + 5aa: 00000097 auipc ra,0x0 + 5ae: e8e080e7 jalr -370(ra) # 438 <printint> + 5b2: 8b4a mv s6,s2 state = 0; - 5aa: 4981 li s3,0 - 5ac: b771 j 538 <vprintf+0x60> + 5b4: 4981 li s3,0 + 5b6: b771 j 542 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 5ae: 008b0913 addi s2,s6,8 - 5b2: 4681 li a3,0 - 5b4: 866a mv a2,s10 - 5b6: 000b2583 lw a1,0(s6) - 5ba: 8556 mv a0,s5 - 5bc: 00000097 auipc ra,0x0 - 5c0: e72080e7 jalr -398(ra) # 42e <printint> - 5c4: 8b4a mv s6,s2 + 5b8: 008b0913 addi s2,s6,8 + 5bc: 4681 li a3,0 + 5be: 866a mv a2,s10 + 5c0: 000b2583 lw a1,0(s6) + 5c4: 8556 mv a0,s5 + 5c6: 00000097 auipc ra,0x0 + 5ca: e72080e7 jalr -398(ra) # 438 <printint> + 5ce: 8b4a mv s6,s2 state = 0; - 5c6: 4981 li s3,0 - 5c8: bf85 j 538 <vprintf+0x60> + 5d0: 4981 li s3,0 + 5d2: bf85 j 542 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 5ca: 008b0793 addi a5,s6,8 - 5ce: f8f43423 sd a5,-120(s0) - 5d2: 000b3983 ld s3,0(s6) + 5d4: 008b0793 addi a5,s6,8 + 5d8: f8f43423 sd a5,-120(s0) + 5dc: 000b3983 ld s3,0(s6) putc(fd, '0'); - 5d6: 03000593 li a1,48 - 5da: 8556 mv a0,s5 - 5dc: 00000097 auipc ra,0x0 - 5e0: e30080e7 jalr -464(ra) # 40c <putc> + 5e0: 03000593 li a1,48 + 5e4: 8556 mv a0,s5 + 5e6: 00000097 auipc ra,0x0 + 5ea: e30080e7 jalr -464(ra) # 416 <putc> putc(fd, 'x'); - 5e4: 07800593 li a1,120 - 5e8: 8556 mv a0,s5 - 5ea: 00000097 auipc ra,0x0 - 5ee: e22080e7 jalr -478(ra) # 40c <putc> - 5f2: 896a mv s2,s10 + 5ee: 07800593 li a1,120 + 5f2: 8556 mv a0,s5 + 5f4: 00000097 auipc ra,0x0 + 5f8: e22080e7 jalr -478(ra) # 416 <putc> + 5fc: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 5f4: 03c9d793 srli a5,s3,0x3c - 5f8: 97de add a5,a5,s7 - 5fa: 0007c583 lbu a1,0(a5) - 5fe: 8556 mv a0,s5 - 600: 00000097 auipc ra,0x0 - 604: e0c080e7 jalr -500(ra) # 40c <putc> + 5fe: 03c9d793 srli a5,s3,0x3c + 602: 97de add a5,a5,s7 + 604: 0007c583 lbu a1,0(a5) + 608: 8556 mv a0,s5 + 60a: 00000097 auipc ra,0x0 + 60e: e0c080e7 jalr -500(ra) # 416 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 608: 0992 slli s3,s3,0x4 - 60a: 397d addiw s2,s2,-1 - 60c: fe0914e3 bnez s2,5f4 <vprintf+0x11c> + 612: 0992 slli s3,s3,0x4 + 614: 397d addiw s2,s2,-1 + 616: fe0914e3 bnez s2,5fe <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 610: f8843b03 ld s6,-120(s0) + 61a: f8843b03 ld s6,-120(s0) state = 0; - 614: 4981 li s3,0 - 616: b70d j 538 <vprintf+0x60> + 61e: 4981 li s3,0 + 620: b70d j 542 <vprintf+0x60> s = va_arg(ap, char*); - 618: 008b0913 addi s2,s6,8 - 61c: 000b3983 ld s3,0(s6) + 622: 008b0913 addi s2,s6,8 + 626: 000b3983 ld s3,0(s6) if(s == 0) - 620: 02098163 beqz s3,642 <vprintf+0x16a> + 62a: 02098163 beqz s3,64c <vprintf+0x16a> while(*s != 0){ - 624: 0009c583 lbu a1,0(s3) - 628: c5ad beqz a1,692 <vprintf+0x1ba> + 62e: 0009c583 lbu a1,0(s3) + 632: c5ad beqz a1,69c <vprintf+0x1ba> putc(fd, *s); - 62a: 8556 mv a0,s5 - 62c: 00000097 auipc ra,0x0 - 630: de0080e7 jalr -544(ra) # 40c <putc> + 634: 8556 mv a0,s5 + 636: 00000097 auipc ra,0x0 + 63a: de0080e7 jalr -544(ra) # 416 <putc> s++; - 634: 0985 addi s3,s3,1 + 63e: 0985 addi s3,s3,1 while(*s != 0){ - 636: 0009c583 lbu a1,0(s3) - 63a: f9e5 bnez a1,62a <vprintf+0x152> + 640: 0009c583 lbu a1,0(s3) + 644: f9e5 bnez a1,634 <vprintf+0x152> s = va_arg(ap, char*); - 63c: 8b4a mv s6,s2 + 646: 8b4a mv s6,s2 state = 0; - 63e: 4981 li s3,0 - 640: bde5 j 538 <vprintf+0x60> + 648: 4981 li s3,0 + 64a: bde5 j 542 <vprintf+0x60> s = "(null)"; - 642: 00000997 auipc s3,0x0 - 646: 25e98993 addi s3,s3,606 # 8a0 <malloc+0x104> + 64c: 00000997 auipc s3,0x0 + 650: 25c98993 addi s3,s3,604 # 8a8 <malloc+0x102> while(*s != 0){ - 64a: 85ee mv a1,s11 - 64c: bff9 j 62a <vprintf+0x152> + 654: 85ee mv a1,s11 + 656: bff9 j 634 <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 64e: 008b0913 addi s2,s6,8 - 652: 000b4583 lbu a1,0(s6) - 656: 8556 mv a0,s5 - 658: 00000097 auipc ra,0x0 - 65c: db4080e7 jalr -588(ra) # 40c <putc> - 660: 8b4a mv s6,s2 + 658: 008b0913 addi s2,s6,8 + 65c: 000b4583 lbu a1,0(s6) + 660: 8556 mv a0,s5 + 662: 00000097 auipc ra,0x0 + 666: db4080e7 jalr -588(ra) # 416 <putc> + 66a: 8b4a mv s6,s2 state = 0; - 662: 4981 li s3,0 - 664: bdd1 j 538 <vprintf+0x60> + 66c: 4981 li s3,0 + 66e: bdd1 j 542 <vprintf+0x60> putc(fd, c); - 666: 85d2 mv a1,s4 - 668: 8556 mv a0,s5 - 66a: 00000097 auipc ra,0x0 - 66e: da2080e7 jalr -606(ra) # 40c <putc> + 670: 85d2 mv a1,s4 + 672: 8556 mv a0,s5 + 674: 00000097 auipc ra,0x0 + 678: da2080e7 jalr -606(ra) # 416 <putc> state = 0; - 672: 4981 li s3,0 - 674: b5d1 j 538 <vprintf+0x60> + 67c: 4981 li s3,0 + 67e: b5d1 j 542 <vprintf+0x60> putc(fd, '%'); - 676: 85d2 mv a1,s4 - 678: 8556 mv a0,s5 - 67a: 00000097 auipc ra,0x0 - 67e: d92080e7 jalr -622(ra) # 40c <putc> + 680: 85d2 mv a1,s4 + 682: 8556 mv a0,s5 + 684: 00000097 auipc ra,0x0 + 688: d92080e7 jalr -622(ra) # 416 <putc> putc(fd, c); - 682: 85ca mv a1,s2 - 684: 8556 mv a0,s5 - 686: 00000097 auipc ra,0x0 - 68a: d86080e7 jalr -634(ra) # 40c <putc> + 68c: 85ca mv a1,s2 + 68e: 8556 mv a0,s5 + 690: 00000097 auipc ra,0x0 + 694: d86080e7 jalr -634(ra) # 416 <putc> state = 0; - 68e: 4981 li s3,0 - 690: b565 j 538 <vprintf+0x60> + 698: 4981 li s3,0 + 69a: b565 j 542 <vprintf+0x60> s = va_arg(ap, char*); - 692: 8b4a mv s6,s2 + 69c: 8b4a mv s6,s2 state = 0; - 694: 4981 li s3,0 - 696: b54d j 538 <vprintf+0x60> + 69e: 4981 li s3,0 + 6a0: b54d j 542 <vprintf+0x60> } } } - 698: 70e6 ld ra,120(sp) - 69a: 7446 ld s0,112(sp) - 69c: 74a6 ld s1,104(sp) - 69e: 7906 ld s2,96(sp) - 6a0: 69e6 ld s3,88(sp) - 6a2: 6a46 ld s4,80(sp) - 6a4: 6aa6 ld s5,72(sp) - 6a6: 6b06 ld s6,64(sp) - 6a8: 7be2 ld s7,56(sp) - 6aa: 7c42 ld s8,48(sp) - 6ac: 7ca2 ld s9,40(sp) - 6ae: 7d02 ld s10,32(sp) - 6b0: 6de2 ld s11,24(sp) - 6b2: 6109 addi sp,sp,128 - 6b4: 8082 ret - -00000000000006b6 <fprintf>: + 6a2: 70e6 ld ra,120(sp) + 6a4: 7446 ld s0,112(sp) + 6a6: 74a6 ld s1,104(sp) + 6a8: 7906 ld s2,96(sp) + 6aa: 69e6 ld s3,88(sp) + 6ac: 6a46 ld s4,80(sp) + 6ae: 6aa6 ld s5,72(sp) + 6b0: 6b06 ld s6,64(sp) + 6b2: 7be2 ld s7,56(sp) + 6b4: 7c42 ld s8,48(sp) + 6b6: 7ca2 ld s9,40(sp) + 6b8: 7d02 ld s10,32(sp) + 6ba: 6de2 ld s11,24(sp) + 6bc: 6109 addi sp,sp,128 + 6be: 8082 ret + +00000000000006c0 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 6b6: 715d addi sp,sp,-80 - 6b8: ec06 sd ra,24(sp) - 6ba: e822 sd s0,16(sp) - 6bc: 1000 addi s0,sp,32 - 6be: e010 sd a2,0(s0) - 6c0: e414 sd a3,8(s0) - 6c2: e818 sd a4,16(s0) - 6c4: ec1c sd a5,24(s0) - 6c6: 03043023 sd a6,32(s0) - 6ca: 03143423 sd a7,40(s0) + 6c0: 715d addi sp,sp,-80 + 6c2: ec06 sd ra,24(sp) + 6c4: e822 sd s0,16(sp) + 6c6: 1000 addi s0,sp,32 + 6c8: e010 sd a2,0(s0) + 6ca: e414 sd a3,8(s0) + 6cc: e818 sd a4,16(s0) + 6ce: ec1c sd a5,24(s0) + 6d0: 03043023 sd a6,32(s0) + 6d4: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 6ce: 8622 mv a2,s0 - 6d0: fe843423 sd s0,-24(s0) + 6d8: 8622 mv a2,s0 + 6da: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 6d4: 00000097 auipc ra,0x0 - 6d8: e04080e7 jalr -508(ra) # 4d8 <vprintf> + 6de: 00000097 auipc ra,0x0 + 6e2: e04080e7 jalr -508(ra) # 4e2 <vprintf> } - 6dc: 60e2 ld ra,24(sp) - 6de: 6442 ld s0,16(sp) - 6e0: 6161 addi sp,sp,80 - 6e2: 8082 ret + 6e6: 60e2 ld ra,24(sp) + 6e8: 6442 ld s0,16(sp) + 6ea: 6161 addi sp,sp,80 + 6ec: 8082 ret -00000000000006e4 <printf>: +00000000000006ee <printf>: void printf(const char *fmt, ...) { - 6e4: 711d addi sp,sp,-96 - 6e6: ec06 sd ra,24(sp) - 6e8: e822 sd s0,16(sp) - 6ea: 1000 addi s0,sp,32 - 6ec: e40c sd a1,8(s0) - 6ee: e810 sd a2,16(s0) - 6f0: ec14 sd a3,24(s0) - 6f2: f018 sd a4,32(s0) - 6f4: f41c sd a5,40(s0) - 6f6: 03043823 sd a6,48(s0) - 6fa: 03143c23 sd a7,56(s0) + 6ee: 711d addi sp,sp,-96 + 6f0: ec06 sd ra,24(sp) + 6f2: e822 sd s0,16(sp) + 6f4: 1000 addi s0,sp,32 + 6f6: e40c sd a1,8(s0) + 6f8: e810 sd a2,16(s0) + 6fa: ec14 sd a3,24(s0) + 6fc: f018 sd a4,32(s0) + 6fe: f41c sd a5,40(s0) + 700: 03043823 sd a6,48(s0) + 704: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 6fe: 00840613 addi a2,s0,8 - 702: fec43423 sd a2,-24(s0) + 708: 00840613 addi a2,s0,8 + 70c: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 706: 85aa mv a1,a0 - 708: 4505 li a0,1 - 70a: 00000097 auipc ra,0x0 - 70e: dce080e7 jalr -562(ra) # 4d8 <vprintf> + 710: 85aa mv a1,a0 + 712: 4505 li a0,1 + 714: 00000097 auipc ra,0x0 + 718: dce080e7 jalr -562(ra) # 4e2 <vprintf> } - 712: 60e2 ld ra,24(sp) - 714: 6442 ld s0,16(sp) - 716: 6125 addi sp,sp,96 - 718: 8082 ret + 71c: 60e2 ld ra,24(sp) + 71e: 6442 ld s0,16(sp) + 720: 6125 addi sp,sp,96 + 722: 8082 ret -000000000000071a <free>: +0000000000000724 <free>: static Header base; static Header *freep; void free(void *ap) { - 71a: 1141 addi sp,sp,-16 - 71c: e422 sd s0,8(sp) - 71e: 0800 addi s0,sp,16 + 724: 1141 addi sp,sp,-16 + 726: e422 sd s0,8(sp) + 728: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 720: ff050693 addi a3,a0,-16 + 72a: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 724: 00000797 auipc a5,0x0 - 728: 1f47b783 ld a5,500(a5) # 918 <freep> - 72c: a02d j 756 <free+0x3c> + 72e: 00000797 auipc a5,0x0 + 732: 1f27b783 ld a5,498(a5) # 920 <freep> + 736: a02d j 760 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 72e: 4618 lw a4,8(a2) - 730: 9f2d addw a4,a4,a1 - 732: fee52c23 sw a4,-8(a0) + 738: 4618 lw a4,8(a2) + 73a: 9f2d addw a4,a4,a1 + 73c: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 736: 6398 ld a4,0(a5) - 738: 6310 ld a2,0(a4) - 73a: a83d j 778 <free+0x5e> + 740: 6398 ld a4,0(a5) + 742: 6310 ld a2,0(a4) + 744: a83d j 782 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 73c: ff852703 lw a4,-8(a0) - 740: 9f31 addw a4,a4,a2 - 742: c798 sw a4,8(a5) + 746: ff852703 lw a4,-8(a0) + 74a: 9f31 addw a4,a4,a2 + 74c: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 744: ff053683 ld a3,-16(a0) - 748: a091 j 78c <free+0x72> + 74e: ff053683 ld a3,-16(a0) + 752: a091 j 796 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 74a: 6398 ld a4,0(a5) - 74c: 00e7e463 bltu a5,a4,754 <free+0x3a> - 750: 00e6ea63 bltu a3,a4,764 <free+0x4a> + 754: 6398 ld a4,0(a5) + 756: 00e7e463 bltu a5,a4,75e <free+0x3a> + 75a: 00e6ea63 bltu a3,a4,76e <free+0x4a> { - 754: 87ba mv a5,a4 + 75e: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 756: fed7fae3 bgeu a5,a3,74a <free+0x30> - 75a: 6398 ld a4,0(a5) - 75c: 00e6e463 bltu a3,a4,764 <free+0x4a> + 760: fed7fae3 bgeu a5,a3,754 <free+0x30> + 764: 6398 ld a4,0(a5) + 766: 00e6e463 bltu a3,a4,76e <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 760: fee7eae3 bltu a5,a4,754 <free+0x3a> + 76a: fee7eae3 bltu a5,a4,75e <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 764: ff852583 lw a1,-8(a0) - 768: 6390 ld a2,0(a5) - 76a: 02059813 slli a6,a1,0x20 - 76e: 01c85713 srli a4,a6,0x1c - 772: 9736 add a4,a4,a3 - 774: fae60de3 beq a2,a4,72e <free+0x14> + 76e: ff852583 lw a1,-8(a0) + 772: 6390 ld a2,0(a5) + 774: 02059813 slli a6,a1,0x20 + 778: 01c85713 srli a4,a6,0x1c + 77c: 9736 add a4,a4,a3 + 77e: fae60de3 beq a2,a4,738 <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 778: fec53823 sd a2,-16(a0) + 782: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 77c: 4790 lw a2,8(a5) - 77e: 02061593 slli a1,a2,0x20 - 782: 01c5d713 srli a4,a1,0x1c - 786: 973e add a4,a4,a5 - 788: fae68ae3 beq a3,a4,73c <free+0x22> + 786: 4790 lw a2,8(a5) + 788: 02061593 slli a1,a2,0x20 + 78c: 01c5d713 srli a4,a1,0x1c + 790: 973e add a4,a4,a5 + 792: fae68ae3 beq a3,a4,746 <free+0x22> p->s.ptr = bp->s.ptr; - 78c: e394 sd a3,0(a5) + 796: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 78e: 00000717 auipc a4,0x0 - 792: 18f73523 sd a5,394(a4) # 918 <freep> + 798: 00000717 auipc a4,0x0 + 79c: 18f73423 sd a5,392(a4) # 920 <freep> } - 796: 6422 ld s0,8(sp) - 798: 0141 addi sp,sp,16 - 79a: 8082 ret + 7a0: 6422 ld s0,8(sp) + 7a2: 0141 addi sp,sp,16 + 7a4: 8082 ret -000000000000079c <malloc>: +00000000000007a6 <malloc>: return freep; } void* malloc(uint nbytes) { - 79c: 7139 addi sp,sp,-64 - 79e: fc06 sd ra,56(sp) - 7a0: f822 sd s0,48(sp) - 7a2: f426 sd s1,40(sp) - 7a4: f04a sd s2,32(sp) - 7a6: ec4e sd s3,24(sp) - 7a8: e852 sd s4,16(sp) - 7aa: e456 sd s5,8(sp) - 7ac: e05a sd s6,0(sp) - 7ae: 0080 addi s0,sp,64 + 7a6: 7139 addi sp,sp,-64 + 7a8: fc06 sd ra,56(sp) + 7aa: f822 sd s0,48(sp) + 7ac: f426 sd s1,40(sp) + 7ae: f04a sd s2,32(sp) + 7b0: ec4e sd s3,24(sp) + 7b2: e852 sd s4,16(sp) + 7b4: e456 sd s5,8(sp) + 7b6: e05a sd s6,0(sp) + 7b8: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 7b0: 02051493 slli s1,a0,0x20 - 7b4: 9081 srli s1,s1,0x20 - 7b6: 04bd addi s1,s1,15 - 7b8: 8091 srli s1,s1,0x4 - 7ba: 00148a1b addiw s4,s1,1 - 7be: 0485 addi s1,s1,1 + 7ba: 02051493 slli s1,a0,0x20 + 7be: 9081 srli s1,s1,0x20 + 7c0: 04bd addi s1,s1,15 + 7c2: 8091 srli s1,s1,0x4 + 7c4: 00148a1b addiw s4,s1,1 + 7c8: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 7c0: 00000517 auipc a0,0x0 - 7c4: 15853503 ld a0,344(a0) # 918 <freep> - 7c8: c515 beqz a0,7f4 <malloc+0x58> + 7ca: 00000517 auipc a0,0x0 + 7ce: 15653503 ld a0,342(a0) # 920 <freep> + 7d2: c515 beqz a0,7fe <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7ca: 611c ld a5,0(a0) + 7d4: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 7cc: 4798 lw a4,8(a5) - 7ce: 04977163 bgeu a4,s1,810 <malloc+0x74> - 7d2: 89d2 mv s3,s4 - 7d4: 000a071b sext.w a4,s4 - 7d8: 6685 lui a3,0x1 - 7da: 00d77363 bgeu a4,a3,7e0 <malloc+0x44> - 7de: 6985 lui s3,0x1 - 7e0: 00098b1b sext.w s6,s3 + 7d6: 4798 lw a4,8(a5) + 7d8: 04977163 bgeu a4,s1,81a <malloc+0x74> + 7dc: 89d2 mv s3,s4 + 7de: 000a071b sext.w a4,s4 + 7e2: 6685 lui a3,0x1 + 7e4: 00d77363 bgeu a4,a3,7ea <malloc+0x44> + 7e8: 6985 lui s3,0x1 + 7ea: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 7e4: 0049999b slliw s3,s3,0x4 + 7ee: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 7e8: 00000917 auipc s2,0x0 - 7ec: 13090913 addi s2,s2,304 # 918 <freep> + 7f2: 00000917 auipc s2,0x0 + 7f6: 12e90913 addi s2,s2,302 # 920 <freep> if(p == (char*)-1) - 7f0: 5afd li s5,-1 - 7f2: a8a5 j 86a <malloc+0xce> + 7fa: 5afd li s5,-1 + 7fc: a8a5 j 874 <malloc+0xce> base.s.ptr = freep = prevp = &base; - 7f4: 00000797 auipc a5,0x0 - 7f8: 12478793 addi a5,a5,292 # 918 <freep> - 7fc: 00000717 auipc a4,0x0 - 800: 12470713 addi a4,a4,292 # 920 <base> - 804: e398 sd a4,0(a5) - 806: e798 sd a4,8(a5) + 7fe: 00000797 auipc a5,0x0 + 802: 12278793 addi a5,a5,290 # 920 <freep> + 806: 00000717 auipc a4,0x0 + 80a: 12270713 addi a4,a4,290 # 928 <base> + 80e: e398 sd a4,0(a5) + 810: e798 sd a4,8(a5) base.s.size = 0; - 808: 0007a823 sw zero,16(a5) + 812: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 80c: 87ba mv a5,a4 - 80e: b7d1 j 7d2 <malloc+0x36> + 816: 87ba mv a5,a4 + 818: b7d1 j 7dc <malloc+0x36> if(p->s.size == nunits) - 810: 02e48c63 beq s1,a4,848 <malloc+0xac> + 81a: 02e48c63 beq s1,a4,852 <malloc+0xac> p->s.size -= nunits; - 814: 4147073b subw a4,a4,s4 - 818: c798 sw a4,8(a5) + 81e: 4147073b subw a4,a4,s4 + 822: c798 sw a4,8(a5) p += p->s.size; - 81a: 02071693 slli a3,a4,0x20 - 81e: 01c6d713 srli a4,a3,0x1c - 822: 97ba add a5,a5,a4 + 824: 02071693 slli a3,a4,0x20 + 828: 01c6d713 srli a4,a3,0x1c + 82c: 97ba add a5,a5,a4 p->s.size = nunits; - 824: 0147a423 sw s4,8(a5) + 82e: 0147a423 sw s4,8(a5) freep = prevp; - 828: 00000717 auipc a4,0x0 - 82c: 0ea73823 sd a0,240(a4) # 918 <freep> + 832: 00000717 auipc a4,0x0 + 836: 0ea73723 sd a0,238(a4) # 920 <freep> return (void*)(p + 1); - 830: 01078513 addi a0,a5,16 + 83a: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 834: 70e2 ld ra,56(sp) - 836: 7442 ld s0,48(sp) - 838: 74a2 ld s1,40(sp) - 83a: 7902 ld s2,32(sp) - 83c: 69e2 ld s3,24(sp) - 83e: 6a42 ld s4,16(sp) - 840: 6aa2 ld s5,8(sp) - 842: 6b02 ld s6,0(sp) - 844: 6121 addi sp,sp,64 - 846: 8082 ret + 83e: 70e2 ld ra,56(sp) + 840: 7442 ld s0,48(sp) + 842: 74a2 ld s1,40(sp) + 844: 7902 ld s2,32(sp) + 846: 69e2 ld s3,24(sp) + 848: 6a42 ld s4,16(sp) + 84a: 6aa2 ld s5,8(sp) + 84c: 6b02 ld s6,0(sp) + 84e: 6121 addi sp,sp,64 + 850: 8082 ret prevp->s.ptr = p->s.ptr; - 848: 6398 ld a4,0(a5) - 84a: e118 sd a4,0(a0) - 84c: bff1 j 828 <malloc+0x8c> + 852: 6398 ld a4,0(a5) + 854: e118 sd a4,0(a0) + 856: bff1 j 832 <malloc+0x8c> hp->s.size = nu; - 84e: 01652423 sw s6,8(a0) + 858: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 852: 0541 addi a0,a0,16 - 854: 00000097 auipc ra,0x0 - 858: ec6080e7 jalr -314(ra) # 71a <free> + 85c: 0541 addi a0,a0,16 + 85e: 00000097 auipc ra,0x0 + 862: ec6080e7 jalr -314(ra) # 724 <free> return freep; - 85c: 00093503 ld a0,0(s2) + 866: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 860: d971 beqz a0,834 <malloc+0x98> + 86a: d971 beqz a0,83e <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 862: 611c ld a5,0(a0) + 86c: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 864: 4798 lw a4,8(a5) - 866: fa9775e3 bgeu a4,s1,810 <malloc+0x74> + 86e: 4798 lw a4,8(a5) + 870: fa9775e3 bgeu a4,s1,81a <malloc+0x74> if(p == freep) - 86a: 00093703 ld a4,0(s2) - 86e: 853e mv a0,a5 - 870: fef719e3 bne a4,a5,862 <malloc+0xc6> + 874: 00093703 ld a4,0(s2) + 878: 853e mv a0,a5 + 87a: fef719e3 bne a4,a5,86c <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 874: 854e mv a0,s3 - 876: 00000097 auipc ra,0x0 - 87a: b2a080e7 jalr -1238(ra) # 3a0 <sbrk> + 87e: 854e mv a0,s3 + 880: 00000097 auipc ra,0x0 + 884: b20080e7 jalr -1248(ra) # 3a0 <sbrk> if(p == (char*)-1) - 87e: fd5518e3 bne a0,s5,84e <malloc+0xb2> + 888: fd5518e3 bne a0,s5,858 <malloc+0xb2> return 0; - 882: 4501 li a0,0 - 884: bf45 j 834 <malloc+0x98> + 88c: 4501 li a0,0 + 88e: bf45 j 83e <malloc+0x98> diff --git a/xv6-user/kill.sym b/xv6-user/kill.sym index 07117e8..a1dcac9 100644 --- a/xv6-user/kill.sym +++ b/xv6-user/kill.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -0000000000000888 .rodata -0000000000000918 .bss +0000000000000890 .rodata +0000000000000920 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,23 +16,24 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -000000000000040c putc -000000000000042e printint -0000000000000900 digits +0000000000000416 putc +0000000000000438 printint +0000000000000908 digits 0000000000000000 umalloc.c -0000000000000918 freep -0000000000000920 base +0000000000000920 freep +0000000000000928 base 0000000000000064 strcpy -00000000000006e4 printf -0000000000001111 __global_pointer$ +00000000000006ee printf +0000000000001119 __global_pointer$ 00000000000003c0 dev 000000000000026a memmove +000000000000040c times 00000000000003e0 trace 000000000000014a gets -0000000000000911 __SDATA_BEGIN__ +0000000000000919 __SDATA_BEGIN__ 0000000000000396 getpid 00000000000002fc memcpy -000000000000079c malloc +00000000000007a6 malloc 00000000000003d8 remove 00000000000003a8 sleep 00000000000003e8 sysinfo @@ -42,31 +43,31 @@ 00000000000003f0 rename 0000000000000342 write 0000000000000370 fstat -00000000000006b6 fprintf +00000000000006c0 fprintf 0000000000000356 kill 0000000000000080 strcat -00000000000004d8 vprintf +00000000000004e2 vprintf 0000000000000384 chdir 000000000000035e exec 0000000000000326 wait 0000000000000338 read 00000000000002c2 memcmp 0000000000000314 fork -0000000000000930 __BSS_END__ +0000000000000938 __BSS_END__ 00000000000003a0 sbrk 00000000000003b8 test_proc 00000000000003b0 uptime -0000000000000911 __bss_start +0000000000000919 __bss_start 0000000000000104 memset 0000000000000000 main 00000000000000ae strcmp 00000000000003f8 shutdown 000000000000038e dup 00000000000003d0 getcwd -0000000000000911 __DATA_BEGIN__ +0000000000000919 __DATA_BEGIN__ 00000000000001c4 stat -0000000000000911 _edata -0000000000000930 _end +0000000000000919 _edata +0000000000000938 _end 000000000000031c exit 000000000000020a atoi 00000000000000da strlen @@ -74,4 +75,4 @@ 0000000000000126 strchr 000000000000037a mkdir 000000000000034c close -000000000000071a free +0000000000000724 free diff --git a/xv6-user/ls.asm b/xv6-user/ls.asm index 935ec83..70cbb55 100644 --- a/xv6-user/ls.asm +++ b/xv6-user/ls.asm @@ -45,7 +45,7 @@ fmtname(char *name) 30: 8082 ret memmove(buf, name, len); 32: 00001997 auipc s3,0x1 - 36: ab698993 addi s3,s3,-1354 # ae8 <buf.0> + 36: ac698993 addi s3,s3,-1338 # af8 <buf.0> 3a: 8626 mv a2,s1 3c: 85ca mv a1,s2 3e: 854e mv a0,s3 @@ -83,10 +83,10 @@ ls(char *path) char *types[] = { 78: f8043023 sd zero,-128(s0) 7c: 00001797 auipc a5,0x1 - 80: 98c78793 addi a5,a5,-1652 # a08 <malloc+0xea> + 80: 99c78793 addi a5,a5,-1636 # a18 <malloc+0xf0> 84: f8f43423 sd a5,-120(s0) 88: 00001797 auipc a5,0x1 - 8c: 98878793 addi a5,a5,-1656 # a10 <malloc+0xf2> + 8c: 99878793 addi a5,a5,-1640 # a20 <malloc+0xf8> 90: f8f43823 sd a5,-112(s0) [T_DIR] "DIR ", [T_FILE] "FILE", @@ -121,24 +121,24 @@ ls(char *path) c2: 4985 li s3,1 printf("%s %s\t%d\n", fmtname(st.name), types[st.type], st.size); c4: 00001a17 auipc s4,0x1 - c8: 984a0a13 addi s4,s4,-1660 # a48 <malloc+0x12a> + c8: 994a0a13 addi s4,s4,-1644 # a58 <malloc+0x130> cc: a08d j 12e <ls+0xc8> fprintf(2, "ls: cannot open %s\n", path); ce: 864a mv a2,s2 d0: 00001597 auipc a1,0x1 - d4: 94858593 addi a1,a1,-1720 # a18 <malloc+0xfa> + d4: 95858593 addi a1,a1,-1704 # a28 <malloc+0x100> d8: 4509 li a0,2 da: 00000097 auipc ra,0x0 - de: 75e080e7 jalr 1886(ra) # 838 <fprintf> + de: 768080e7 jalr 1896(ra) # 842 <fprintf> return; e2: a09d j 148 <ls+0xe2> fprintf(2, "ls: cannot stat %s\n", path); e4: 864a mv a2,s2 e6: 00001597 auipc a1,0x1 - ea: 94a58593 addi a1,a1,-1718 # a30 <malloc+0x112> + ea: 95a58593 addi a1,a1,-1702 # a40 <malloc+0x118> ee: 4509 li a0,2 f0: 00000097 auipc ra,0x0 - f4: 748080e7 jalr 1864(ra) # 838 <fprintf> + f4: 752080e7 jalr 1874(ra) # 842 <fprintf> close(fd); f8: 8526 mv a0,s1 fa: 00000097 auipc ra,0x0 @@ -158,7 +158,7 @@ ls(char *path) 120: fb07b603 ld a2,-80(a5) 124: 8552 mv a0,s4 126: 00000097 auipc ra,0x0 - 12a: 740080e7 jalr 1856(ra) # 866 <printf> + 12a: 74a080e7 jalr 1866(ra) # 870 <printf> while(readdir(fd, &st) == 1){ 12e: 85ca mv a1,s2 130: 8526 mv a0,s1 @@ -194,9 +194,9 @@ ls(char *path) 172: fc843683 ld a3,-56(s0) 176: fb07b603 ld a2,-80(a5) 17a: 00001517 auipc a0,0x1 - 17e: 8de50513 addi a0,a0,-1826 # a58 <malloc+0x13a> + 17e: 8ee50513 addi a0,a0,-1810 # a68 <malloc+0x140> 182: 00000097 auipc ra,0x0 - 186: 6e4080e7 jalr 1764(ra) # 866 <printf> + 186: 6ee080e7 jalr 1774(ra) # 870 <printf> 18a: bf55 j 13e <ls+0xd8> 000000000000018c <main>: @@ -238,7 +238,7 @@ main(int argc, char *argv[]) 1c8: 2da080e7 jalr 730(ra) # 49e <exit> ls("."); 1cc: 00001517 auipc a0,0x1 - 1d0: 89c50513 addi a0,a0,-1892 # a68 <malloc+0x14a> + 1d0: 8ac50513 addi a0,a0,-1876 # a78 <malloc+0x150> 1d4: 00000097 auipc ra,0x0 1d8: e92080e7 jalr -366(ra) # 66 <ls> exit(0); @@ -1002,637 +1002,647 @@ uname: ret 58c: 8082 ret -000000000000058e <putc>: +000000000000058e <times>: +.global times +times: + li a7, SYS_times + 58e: 09900893 li a7,153 + ecall + 592: 00000073 ecall + ret + 596: 8082 ret + +0000000000000598 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 58e: 1101 addi sp,sp,-32 - 590: ec06 sd ra,24(sp) - 592: e822 sd s0,16(sp) - 594: 1000 addi s0,sp,32 - 596: feb407a3 sb a1,-17(s0) + 598: 1101 addi sp,sp,-32 + 59a: ec06 sd ra,24(sp) + 59c: e822 sd s0,16(sp) + 59e: 1000 addi s0,sp,32 + 5a0: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 59a: 4605 li a2,1 - 59c: fef40593 addi a1,s0,-17 - 5a0: 00000097 auipc ra,0x0 - 5a4: f24080e7 jalr -220(ra) # 4c4 <write> + 5a4: 4605 li a2,1 + 5a6: fef40593 addi a1,s0,-17 + 5aa: 00000097 auipc ra,0x0 + 5ae: f1a080e7 jalr -230(ra) # 4c4 <write> } - 5a8: 60e2 ld ra,24(sp) - 5aa: 6442 ld s0,16(sp) - 5ac: 6105 addi sp,sp,32 - 5ae: 8082 ret + 5b2: 60e2 ld ra,24(sp) + 5b4: 6442 ld s0,16(sp) + 5b6: 6105 addi sp,sp,32 + 5b8: 8082 ret -00000000000005b0 <printint>: +00000000000005ba <printint>: static void printint(int fd, int xx, int base, int sgn) { - 5b0: 7139 addi sp,sp,-64 - 5b2: fc06 sd ra,56(sp) - 5b4: f822 sd s0,48(sp) - 5b6: f426 sd s1,40(sp) - 5b8: f04a sd s2,32(sp) - 5ba: ec4e sd s3,24(sp) - 5bc: 0080 addi s0,sp,64 - 5be: 84aa mv s1,a0 + 5ba: 7139 addi sp,sp,-64 + 5bc: fc06 sd ra,56(sp) + 5be: f822 sd s0,48(sp) + 5c0: f426 sd s1,40(sp) + 5c2: f04a sd s2,32(sp) + 5c4: ec4e sd s3,24(sp) + 5c6: 0080 addi s0,sp,64 + 5c8: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 5c0: c299 beqz a3,5c6 <printint+0x16> - 5c2: 0805c863 bltz a1,652 <printint+0xa2> + 5ca: c299 beqz a3,5d0 <printint+0x16> + 5cc: 0805c863 bltz a1,65c <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 5c6: 2581 sext.w a1,a1 + 5d0: 2581 sext.w a1,a1 neg = 0; - 5c8: 4881 li a7,0 + 5d2: 4881 li a7,0 } i = 0; - 5ca: fc040993 addi s3,s0,-64 + 5d4: fc040993 addi s3,s0,-64 neg = 0; - 5ce: 86ce mv a3,s3 + 5d8: 86ce mv a3,s3 i = 0; - 5d0: 4701 li a4,0 + 5da: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 5d2: 2601 sext.w a2,a2 - 5d4: 00000517 auipc a0,0x0 - 5d8: 4fc50513 addi a0,a0,1276 # ad0 <digits> - 5dc: 883a mv a6,a4 - 5de: 2705 addiw a4,a4,1 - 5e0: 02c5f7bb remuw a5,a1,a2 - 5e4: 1782 slli a5,a5,0x20 - 5e6: 9381 srli a5,a5,0x20 - 5e8: 97aa add a5,a5,a0 - 5ea: 0007c783 lbu a5,0(a5) - 5ee: 00f68023 sb a5,0(a3) + 5dc: 2601 sext.w a2,a2 + 5de: 00000517 auipc a0,0x0 + 5e2: 50250513 addi a0,a0,1282 # ae0 <digits> + 5e6: 883a mv a6,a4 + 5e8: 2705 addiw a4,a4,1 + 5ea: 02c5f7bb remuw a5,a1,a2 + 5ee: 1782 slli a5,a5,0x20 + 5f0: 9381 srli a5,a5,0x20 + 5f2: 97aa add a5,a5,a0 + 5f4: 0007c783 lbu a5,0(a5) + 5f8: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 5f2: 0005879b sext.w a5,a1 - 5f6: 02c5d5bb divuw a1,a1,a2 - 5fa: 0685 addi a3,a3,1 - 5fc: fec7f0e3 bgeu a5,a2,5dc <printint+0x2c> + 5fc: 0005879b sext.w a5,a1 + 600: 02c5d5bb divuw a1,a1,a2 + 604: 0685 addi a3,a3,1 + 606: fec7f0e3 bgeu a5,a2,5e6 <printint+0x2c> if(neg) - 600: 00088c63 beqz a7,618 <printint+0x68> + 60a: 00088c63 beqz a7,622 <printint+0x68> buf[i++] = '-'; - 604: fd070793 addi a5,a4,-48 - 608: 00878733 add a4,a5,s0 - 60c: 02d00793 li a5,45 - 610: fef70823 sb a5,-16(a4) - 614: 0028071b addiw a4,a6,2 + 60e: fd070793 addi a5,a4,-48 + 612: 00878733 add a4,a5,s0 + 616: 02d00793 li a5,45 + 61a: fef70823 sb a5,-16(a4) + 61e: 0028071b addiw a4,a6,2 while(--i >= 0) - 618: 02e05663 blez a4,644 <printint+0x94> - 61c: fc040913 addi s2,s0,-64 - 620: 993a add s2,s2,a4 - 622: 19fd addi s3,s3,-1 - 624: 99ba add s3,s3,a4 - 626: 377d addiw a4,a4,-1 - 628: 1702 slli a4,a4,0x20 - 62a: 9301 srli a4,a4,0x20 - 62c: 40e989b3 sub s3,s3,a4 + 622: 02e05663 blez a4,64e <printint+0x94> + 626: fc040913 addi s2,s0,-64 + 62a: 993a add s2,s2,a4 + 62c: 19fd addi s3,s3,-1 + 62e: 99ba add s3,s3,a4 + 630: 377d addiw a4,a4,-1 + 632: 1702 slli a4,a4,0x20 + 634: 9301 srli a4,a4,0x20 + 636: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 630: fff94583 lbu a1,-1(s2) - 634: 8526 mv a0,s1 - 636: 00000097 auipc ra,0x0 - 63a: f58080e7 jalr -168(ra) # 58e <putc> + 63a: fff94583 lbu a1,-1(s2) + 63e: 8526 mv a0,s1 + 640: 00000097 auipc ra,0x0 + 644: f58080e7 jalr -168(ra) # 598 <putc> while(--i >= 0) - 63e: 197d addi s2,s2,-1 - 640: ff3918e3 bne s2,s3,630 <printint+0x80> + 648: 197d addi s2,s2,-1 + 64a: ff3918e3 bne s2,s3,63a <printint+0x80> } - 644: 70e2 ld ra,56(sp) - 646: 7442 ld s0,48(sp) - 648: 74a2 ld s1,40(sp) - 64a: 7902 ld s2,32(sp) - 64c: 69e2 ld s3,24(sp) - 64e: 6121 addi sp,sp,64 - 650: 8082 ret + 64e: 70e2 ld ra,56(sp) + 650: 7442 ld s0,48(sp) + 652: 74a2 ld s1,40(sp) + 654: 7902 ld s2,32(sp) + 656: 69e2 ld s3,24(sp) + 658: 6121 addi sp,sp,64 + 65a: 8082 ret x = -xx; - 652: 40b005bb negw a1,a1 + 65c: 40b005bb negw a1,a1 neg = 1; - 656: 4885 li a7,1 + 660: 4885 li a7,1 x = -xx; - 658: bf8d j 5ca <printint+0x1a> + 662: bf8d j 5d4 <printint+0x1a> -000000000000065a <vprintf>: +0000000000000664 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 65a: 7119 addi sp,sp,-128 - 65c: fc86 sd ra,120(sp) - 65e: f8a2 sd s0,112(sp) - 660: f4a6 sd s1,104(sp) - 662: f0ca sd s2,96(sp) - 664: ecce sd s3,88(sp) - 666: e8d2 sd s4,80(sp) - 668: e4d6 sd s5,72(sp) - 66a: e0da sd s6,64(sp) - 66c: fc5e sd s7,56(sp) - 66e: f862 sd s8,48(sp) - 670: f466 sd s9,40(sp) - 672: f06a sd s10,32(sp) - 674: ec6e sd s11,24(sp) - 676: 0100 addi s0,sp,128 + 664: 7119 addi sp,sp,-128 + 666: fc86 sd ra,120(sp) + 668: f8a2 sd s0,112(sp) + 66a: f4a6 sd s1,104(sp) + 66c: f0ca sd s2,96(sp) + 66e: ecce sd s3,88(sp) + 670: e8d2 sd s4,80(sp) + 672: e4d6 sd s5,72(sp) + 674: e0da sd s6,64(sp) + 676: fc5e sd s7,56(sp) + 678: f862 sd s8,48(sp) + 67a: f466 sd s9,40(sp) + 67c: f06a sd s10,32(sp) + 67e: ec6e sd s11,24(sp) + 680: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 678: 0005c903 lbu s2,0(a1) - 67c: 18090f63 beqz s2,81a <vprintf+0x1c0> - 680: 8aaa mv s5,a0 - 682: 8b32 mv s6,a2 - 684: 00158493 addi s1,a1,1 + 682: 0005c903 lbu s2,0(a1) + 686: 18090f63 beqz s2,824 <vprintf+0x1c0> + 68a: 8aaa mv s5,a0 + 68c: 8b32 mv s6,a2 + 68e: 00158493 addi s1,a1,1 state = 0; - 688: 4981 li s3,0 + 692: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 68a: 02500a13 li s4,37 - 68e: 4c55 li s8,21 - 690: 00000c97 auipc s9,0x0 - 694: 3e8c8c93 addi s9,s9,1000 # a78 <malloc+0x15a> + 694: 02500a13 li s4,37 + 698: 4c55 li s8,21 + 69a: 00000c97 auipc s9,0x0 + 69e: 3eec8c93 addi s9,s9,1006 # a88 <malloc+0x160> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 698: 02800d93 li s11,40 + 6a2: 02800d93 li s11,40 putc(fd, 'x'); - 69c: 4d41 li s10,16 + 6a6: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 69e: 00000b97 auipc s7,0x0 - 6a2: 432b8b93 addi s7,s7,1074 # ad0 <digits> - 6a6: a839 j 6c4 <vprintf+0x6a> + 6a8: 00000b97 auipc s7,0x0 + 6ac: 438b8b93 addi s7,s7,1080 # ae0 <digits> + 6b0: a839 j 6ce <vprintf+0x6a> putc(fd, c); - 6a8: 85ca mv a1,s2 - 6aa: 8556 mv a0,s5 - 6ac: 00000097 auipc ra,0x0 - 6b0: ee2080e7 jalr -286(ra) # 58e <putc> - 6b4: a019 j 6ba <vprintf+0x60> + 6b2: 85ca mv a1,s2 + 6b4: 8556 mv a0,s5 + 6b6: 00000097 auipc ra,0x0 + 6ba: ee2080e7 jalr -286(ra) # 598 <putc> + 6be: a019 j 6c4 <vprintf+0x60> } else if(state == '%'){ - 6b6: 01498d63 beq s3,s4,6d0 <vprintf+0x76> + 6c0: 01498d63 beq s3,s4,6da <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 6ba: 0485 addi s1,s1,1 - 6bc: fff4c903 lbu s2,-1(s1) - 6c0: 14090d63 beqz s2,81a <vprintf+0x1c0> + 6c4: 0485 addi s1,s1,1 + 6c6: fff4c903 lbu s2,-1(s1) + 6ca: 14090d63 beqz s2,824 <vprintf+0x1c0> if(state == 0){ - 6c4: fe0999e3 bnez s3,6b6 <vprintf+0x5c> + 6ce: fe0999e3 bnez s3,6c0 <vprintf+0x5c> if(c == '%'){ - 6c8: ff4910e3 bne s2,s4,6a8 <vprintf+0x4e> + 6d2: ff4910e3 bne s2,s4,6b2 <vprintf+0x4e> state = '%'; - 6cc: 89d2 mv s3,s4 - 6ce: b7f5 j 6ba <vprintf+0x60> + 6d6: 89d2 mv s3,s4 + 6d8: b7f5 j 6c4 <vprintf+0x60> if(c == 'd'){ - 6d0: 11490c63 beq s2,s4,7e8 <vprintf+0x18e> - 6d4: f9d9079b addiw a5,s2,-99 - 6d8: 0ff7f793 zext.b a5,a5 - 6dc: 10fc6e63 bltu s8,a5,7f8 <vprintf+0x19e> - 6e0: f9d9079b addiw a5,s2,-99 - 6e4: 0ff7f713 zext.b a4,a5 - 6e8: 10ec6863 bltu s8,a4,7f8 <vprintf+0x19e> - 6ec: 00271793 slli a5,a4,0x2 - 6f0: 97e6 add a5,a5,s9 - 6f2: 439c lw a5,0(a5) - 6f4: 97e6 add a5,a5,s9 - 6f6: 8782 jr a5 + 6da: 11490c63 beq s2,s4,7f2 <vprintf+0x18e> + 6de: f9d9079b addiw a5,s2,-99 + 6e2: 0ff7f793 zext.b a5,a5 + 6e6: 10fc6e63 bltu s8,a5,802 <vprintf+0x19e> + 6ea: f9d9079b addiw a5,s2,-99 + 6ee: 0ff7f713 zext.b a4,a5 + 6f2: 10ec6863 bltu s8,a4,802 <vprintf+0x19e> + 6f6: 00271793 slli a5,a4,0x2 + 6fa: 97e6 add a5,a5,s9 + 6fc: 439c lw a5,0(a5) + 6fe: 97e6 add a5,a5,s9 + 700: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 6f8: 008b0913 addi s2,s6,8 - 6fc: 4685 li a3,1 - 6fe: 4629 li a2,10 - 700: 000b2583 lw a1,0(s6) - 704: 8556 mv a0,s5 - 706: 00000097 auipc ra,0x0 - 70a: eaa080e7 jalr -342(ra) # 5b0 <printint> - 70e: 8b4a mv s6,s2 + 702: 008b0913 addi s2,s6,8 + 706: 4685 li a3,1 + 708: 4629 li a2,10 + 70a: 000b2583 lw a1,0(s6) + 70e: 8556 mv a0,s5 + 710: 00000097 auipc ra,0x0 + 714: eaa080e7 jalr -342(ra) # 5ba <printint> + 718: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 710: 4981 li s3,0 - 712: b765 j 6ba <vprintf+0x60> + 71a: 4981 li s3,0 + 71c: b765 j 6c4 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 714: 008b0913 addi s2,s6,8 - 718: 4681 li a3,0 - 71a: 4629 li a2,10 - 71c: 000b2583 lw a1,0(s6) - 720: 8556 mv a0,s5 - 722: 00000097 auipc ra,0x0 - 726: e8e080e7 jalr -370(ra) # 5b0 <printint> - 72a: 8b4a mv s6,s2 + 71e: 008b0913 addi s2,s6,8 + 722: 4681 li a3,0 + 724: 4629 li a2,10 + 726: 000b2583 lw a1,0(s6) + 72a: 8556 mv a0,s5 + 72c: 00000097 auipc ra,0x0 + 730: e8e080e7 jalr -370(ra) # 5ba <printint> + 734: 8b4a mv s6,s2 state = 0; - 72c: 4981 li s3,0 - 72e: b771 j 6ba <vprintf+0x60> + 736: 4981 li s3,0 + 738: b771 j 6c4 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 730: 008b0913 addi s2,s6,8 - 734: 4681 li a3,0 - 736: 866a mv a2,s10 - 738: 000b2583 lw a1,0(s6) - 73c: 8556 mv a0,s5 - 73e: 00000097 auipc ra,0x0 - 742: e72080e7 jalr -398(ra) # 5b0 <printint> - 746: 8b4a mv s6,s2 + 73a: 008b0913 addi s2,s6,8 + 73e: 4681 li a3,0 + 740: 866a mv a2,s10 + 742: 000b2583 lw a1,0(s6) + 746: 8556 mv a0,s5 + 748: 00000097 auipc ra,0x0 + 74c: e72080e7 jalr -398(ra) # 5ba <printint> + 750: 8b4a mv s6,s2 state = 0; - 748: 4981 li s3,0 - 74a: bf85 j 6ba <vprintf+0x60> + 752: 4981 li s3,0 + 754: bf85 j 6c4 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 74c: 008b0793 addi a5,s6,8 - 750: f8f43423 sd a5,-120(s0) - 754: 000b3983 ld s3,0(s6) + 756: 008b0793 addi a5,s6,8 + 75a: f8f43423 sd a5,-120(s0) + 75e: 000b3983 ld s3,0(s6) putc(fd, '0'); - 758: 03000593 li a1,48 - 75c: 8556 mv a0,s5 - 75e: 00000097 auipc ra,0x0 - 762: e30080e7 jalr -464(ra) # 58e <putc> + 762: 03000593 li a1,48 + 766: 8556 mv a0,s5 + 768: 00000097 auipc ra,0x0 + 76c: e30080e7 jalr -464(ra) # 598 <putc> putc(fd, 'x'); - 766: 07800593 li a1,120 - 76a: 8556 mv a0,s5 - 76c: 00000097 auipc ra,0x0 - 770: e22080e7 jalr -478(ra) # 58e <putc> - 774: 896a mv s2,s10 + 770: 07800593 li a1,120 + 774: 8556 mv a0,s5 + 776: 00000097 auipc ra,0x0 + 77a: e22080e7 jalr -478(ra) # 598 <putc> + 77e: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 776: 03c9d793 srli a5,s3,0x3c - 77a: 97de add a5,a5,s7 - 77c: 0007c583 lbu a1,0(a5) - 780: 8556 mv a0,s5 - 782: 00000097 auipc ra,0x0 - 786: e0c080e7 jalr -500(ra) # 58e <putc> + 780: 03c9d793 srli a5,s3,0x3c + 784: 97de add a5,a5,s7 + 786: 0007c583 lbu a1,0(a5) + 78a: 8556 mv a0,s5 + 78c: 00000097 auipc ra,0x0 + 790: e0c080e7 jalr -500(ra) # 598 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 78a: 0992 slli s3,s3,0x4 - 78c: 397d addiw s2,s2,-1 - 78e: fe0914e3 bnez s2,776 <vprintf+0x11c> + 794: 0992 slli s3,s3,0x4 + 796: 397d addiw s2,s2,-1 + 798: fe0914e3 bnez s2,780 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 792: f8843b03 ld s6,-120(s0) + 79c: f8843b03 ld s6,-120(s0) state = 0; - 796: 4981 li s3,0 - 798: b70d j 6ba <vprintf+0x60> + 7a0: 4981 li s3,0 + 7a2: b70d j 6c4 <vprintf+0x60> s = va_arg(ap, char*); - 79a: 008b0913 addi s2,s6,8 - 79e: 000b3983 ld s3,0(s6) + 7a4: 008b0913 addi s2,s6,8 + 7a8: 000b3983 ld s3,0(s6) if(s == 0) - 7a2: 02098163 beqz s3,7c4 <vprintf+0x16a> + 7ac: 02098163 beqz s3,7ce <vprintf+0x16a> while(*s != 0){ - 7a6: 0009c583 lbu a1,0(s3) - 7aa: c5ad beqz a1,814 <vprintf+0x1ba> + 7b0: 0009c583 lbu a1,0(s3) + 7b4: c5ad beqz a1,81e <vprintf+0x1ba> putc(fd, *s); - 7ac: 8556 mv a0,s5 - 7ae: 00000097 auipc ra,0x0 - 7b2: de0080e7 jalr -544(ra) # 58e <putc> + 7b6: 8556 mv a0,s5 + 7b8: 00000097 auipc ra,0x0 + 7bc: de0080e7 jalr -544(ra) # 598 <putc> s++; - 7b6: 0985 addi s3,s3,1 + 7c0: 0985 addi s3,s3,1 while(*s != 0){ - 7b8: 0009c583 lbu a1,0(s3) - 7bc: f9e5 bnez a1,7ac <vprintf+0x152> + 7c2: 0009c583 lbu a1,0(s3) + 7c6: f9e5 bnez a1,7b6 <vprintf+0x152> s = va_arg(ap, char*); - 7be: 8b4a mv s6,s2 + 7c8: 8b4a mv s6,s2 state = 0; - 7c0: 4981 li s3,0 - 7c2: bde5 j 6ba <vprintf+0x60> + 7ca: 4981 li s3,0 + 7cc: bde5 j 6c4 <vprintf+0x60> s = "(null)"; - 7c4: 00000997 auipc s3,0x0 - 7c8: 2ac98993 addi s3,s3,684 # a70 <malloc+0x152> + 7ce: 00000997 auipc s3,0x0 + 7d2: 2b298993 addi s3,s3,690 # a80 <malloc+0x158> while(*s != 0){ - 7cc: 85ee mv a1,s11 - 7ce: bff9 j 7ac <vprintf+0x152> + 7d6: 85ee mv a1,s11 + 7d8: bff9 j 7b6 <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 7d0: 008b0913 addi s2,s6,8 - 7d4: 000b4583 lbu a1,0(s6) - 7d8: 8556 mv a0,s5 - 7da: 00000097 auipc ra,0x0 - 7de: db4080e7 jalr -588(ra) # 58e <putc> - 7e2: 8b4a mv s6,s2 + 7da: 008b0913 addi s2,s6,8 + 7de: 000b4583 lbu a1,0(s6) + 7e2: 8556 mv a0,s5 + 7e4: 00000097 auipc ra,0x0 + 7e8: db4080e7 jalr -588(ra) # 598 <putc> + 7ec: 8b4a mv s6,s2 state = 0; - 7e4: 4981 li s3,0 - 7e6: bdd1 j 6ba <vprintf+0x60> + 7ee: 4981 li s3,0 + 7f0: bdd1 j 6c4 <vprintf+0x60> putc(fd, c); - 7e8: 85d2 mv a1,s4 - 7ea: 8556 mv a0,s5 - 7ec: 00000097 auipc ra,0x0 - 7f0: da2080e7 jalr -606(ra) # 58e <putc> + 7f2: 85d2 mv a1,s4 + 7f4: 8556 mv a0,s5 + 7f6: 00000097 auipc ra,0x0 + 7fa: da2080e7 jalr -606(ra) # 598 <putc> state = 0; - 7f4: 4981 li s3,0 - 7f6: b5d1 j 6ba <vprintf+0x60> + 7fe: 4981 li s3,0 + 800: b5d1 j 6c4 <vprintf+0x60> putc(fd, '%'); - 7f8: 85d2 mv a1,s4 - 7fa: 8556 mv a0,s5 - 7fc: 00000097 auipc ra,0x0 - 800: d92080e7 jalr -622(ra) # 58e <putc> + 802: 85d2 mv a1,s4 + 804: 8556 mv a0,s5 + 806: 00000097 auipc ra,0x0 + 80a: d92080e7 jalr -622(ra) # 598 <putc> putc(fd, c); - 804: 85ca mv a1,s2 - 806: 8556 mv a0,s5 - 808: 00000097 auipc ra,0x0 - 80c: d86080e7 jalr -634(ra) # 58e <putc> + 80e: 85ca mv a1,s2 + 810: 8556 mv a0,s5 + 812: 00000097 auipc ra,0x0 + 816: d86080e7 jalr -634(ra) # 598 <putc> state = 0; - 810: 4981 li s3,0 - 812: b565 j 6ba <vprintf+0x60> + 81a: 4981 li s3,0 + 81c: b565 j 6c4 <vprintf+0x60> s = va_arg(ap, char*); - 814: 8b4a mv s6,s2 + 81e: 8b4a mv s6,s2 state = 0; - 816: 4981 li s3,0 - 818: b54d j 6ba <vprintf+0x60> + 820: 4981 li s3,0 + 822: b54d j 6c4 <vprintf+0x60> } } } - 81a: 70e6 ld ra,120(sp) - 81c: 7446 ld s0,112(sp) - 81e: 74a6 ld s1,104(sp) - 820: 7906 ld s2,96(sp) - 822: 69e6 ld s3,88(sp) - 824: 6a46 ld s4,80(sp) - 826: 6aa6 ld s5,72(sp) - 828: 6b06 ld s6,64(sp) - 82a: 7be2 ld s7,56(sp) - 82c: 7c42 ld s8,48(sp) - 82e: 7ca2 ld s9,40(sp) - 830: 7d02 ld s10,32(sp) - 832: 6de2 ld s11,24(sp) - 834: 6109 addi sp,sp,128 - 836: 8082 ret - -0000000000000838 <fprintf>: + 824: 70e6 ld ra,120(sp) + 826: 7446 ld s0,112(sp) + 828: 74a6 ld s1,104(sp) + 82a: 7906 ld s2,96(sp) + 82c: 69e6 ld s3,88(sp) + 82e: 6a46 ld s4,80(sp) + 830: 6aa6 ld s5,72(sp) + 832: 6b06 ld s6,64(sp) + 834: 7be2 ld s7,56(sp) + 836: 7c42 ld s8,48(sp) + 838: 7ca2 ld s9,40(sp) + 83a: 7d02 ld s10,32(sp) + 83c: 6de2 ld s11,24(sp) + 83e: 6109 addi sp,sp,128 + 840: 8082 ret + +0000000000000842 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 838: 715d addi sp,sp,-80 - 83a: ec06 sd ra,24(sp) - 83c: e822 sd s0,16(sp) - 83e: 1000 addi s0,sp,32 - 840: e010 sd a2,0(s0) - 842: e414 sd a3,8(s0) - 844: e818 sd a4,16(s0) - 846: ec1c sd a5,24(s0) - 848: 03043023 sd a6,32(s0) - 84c: 03143423 sd a7,40(s0) + 842: 715d addi sp,sp,-80 + 844: ec06 sd ra,24(sp) + 846: e822 sd s0,16(sp) + 848: 1000 addi s0,sp,32 + 84a: e010 sd a2,0(s0) + 84c: e414 sd a3,8(s0) + 84e: e818 sd a4,16(s0) + 850: ec1c sd a5,24(s0) + 852: 03043023 sd a6,32(s0) + 856: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 850: 8622 mv a2,s0 - 852: fe843423 sd s0,-24(s0) + 85a: 8622 mv a2,s0 + 85c: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 856: 00000097 auipc ra,0x0 - 85a: e04080e7 jalr -508(ra) # 65a <vprintf> + 860: 00000097 auipc ra,0x0 + 864: e04080e7 jalr -508(ra) # 664 <vprintf> } - 85e: 60e2 ld ra,24(sp) - 860: 6442 ld s0,16(sp) - 862: 6161 addi sp,sp,80 - 864: 8082 ret + 868: 60e2 ld ra,24(sp) + 86a: 6442 ld s0,16(sp) + 86c: 6161 addi sp,sp,80 + 86e: 8082 ret -0000000000000866 <printf>: +0000000000000870 <printf>: void printf(const char *fmt, ...) { - 866: 711d addi sp,sp,-96 - 868: ec06 sd ra,24(sp) - 86a: e822 sd s0,16(sp) - 86c: 1000 addi s0,sp,32 - 86e: e40c sd a1,8(s0) - 870: e810 sd a2,16(s0) - 872: ec14 sd a3,24(s0) - 874: f018 sd a4,32(s0) - 876: f41c sd a5,40(s0) - 878: 03043823 sd a6,48(s0) - 87c: 03143c23 sd a7,56(s0) + 870: 711d addi sp,sp,-96 + 872: ec06 sd ra,24(sp) + 874: e822 sd s0,16(sp) + 876: 1000 addi s0,sp,32 + 878: e40c sd a1,8(s0) + 87a: e810 sd a2,16(s0) + 87c: ec14 sd a3,24(s0) + 87e: f018 sd a4,32(s0) + 880: f41c sd a5,40(s0) + 882: 03043823 sd a6,48(s0) + 886: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 880: 00840613 addi a2,s0,8 - 884: fec43423 sd a2,-24(s0) + 88a: 00840613 addi a2,s0,8 + 88e: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 888: 85aa mv a1,a0 - 88a: 4505 li a0,1 - 88c: 00000097 auipc ra,0x0 - 890: dce080e7 jalr -562(ra) # 65a <vprintf> + 892: 85aa mv a1,a0 + 894: 4505 li a0,1 + 896: 00000097 auipc ra,0x0 + 89a: dce080e7 jalr -562(ra) # 664 <vprintf> } - 894: 60e2 ld ra,24(sp) - 896: 6442 ld s0,16(sp) - 898: 6125 addi sp,sp,96 - 89a: 8082 ret + 89e: 60e2 ld ra,24(sp) + 8a0: 6442 ld s0,16(sp) + 8a2: 6125 addi sp,sp,96 + 8a4: 8082 ret -000000000000089c <free>: +00000000000008a6 <free>: static Header base; static Header *freep; void free(void *ap) { - 89c: 1141 addi sp,sp,-16 - 89e: e422 sd s0,8(sp) - 8a0: 0800 addi s0,sp,16 + 8a6: 1141 addi sp,sp,-16 + 8a8: e422 sd s0,8(sp) + 8aa: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 8a2: ff050693 addi a3,a0,-16 + 8ac: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 8a6: 00000797 auipc a5,0x0 - 8aa: 26a7b783 ld a5,618(a5) # b10 <freep> - 8ae: a02d j 8d8 <free+0x3c> + 8b0: 00000797 auipc a5,0x0 + 8b4: 2707b783 ld a5,624(a5) # b20 <freep> + 8b8: a02d j 8e2 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 8b0: 4618 lw a4,8(a2) - 8b2: 9f2d addw a4,a4,a1 - 8b4: fee52c23 sw a4,-8(a0) + 8ba: 4618 lw a4,8(a2) + 8bc: 9f2d addw a4,a4,a1 + 8be: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 8b8: 6398 ld a4,0(a5) - 8ba: 6310 ld a2,0(a4) - 8bc: a83d j 8fa <free+0x5e> + 8c2: 6398 ld a4,0(a5) + 8c4: 6310 ld a2,0(a4) + 8c6: a83d j 904 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 8be: ff852703 lw a4,-8(a0) - 8c2: 9f31 addw a4,a4,a2 - 8c4: c798 sw a4,8(a5) + 8c8: ff852703 lw a4,-8(a0) + 8cc: 9f31 addw a4,a4,a2 + 8ce: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 8c6: ff053683 ld a3,-16(a0) - 8ca: a091 j 90e <free+0x72> + 8d0: ff053683 ld a3,-16(a0) + 8d4: a091 j 918 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 8cc: 6398 ld a4,0(a5) - 8ce: 00e7e463 bltu a5,a4,8d6 <free+0x3a> - 8d2: 00e6ea63 bltu a3,a4,8e6 <free+0x4a> + 8d6: 6398 ld a4,0(a5) + 8d8: 00e7e463 bltu a5,a4,8e0 <free+0x3a> + 8dc: 00e6ea63 bltu a3,a4,8f0 <free+0x4a> { - 8d6: 87ba mv a5,a4 + 8e0: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 8d8: fed7fae3 bgeu a5,a3,8cc <free+0x30> - 8dc: 6398 ld a4,0(a5) - 8de: 00e6e463 bltu a3,a4,8e6 <free+0x4a> + 8e2: fed7fae3 bgeu a5,a3,8d6 <free+0x30> + 8e6: 6398 ld a4,0(a5) + 8e8: 00e6e463 bltu a3,a4,8f0 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 8e2: fee7eae3 bltu a5,a4,8d6 <free+0x3a> + 8ec: fee7eae3 bltu a5,a4,8e0 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 8e6: ff852583 lw a1,-8(a0) - 8ea: 6390 ld a2,0(a5) - 8ec: 02059813 slli a6,a1,0x20 - 8f0: 01c85713 srli a4,a6,0x1c - 8f4: 9736 add a4,a4,a3 - 8f6: fae60de3 beq a2,a4,8b0 <free+0x14> + 8f0: ff852583 lw a1,-8(a0) + 8f4: 6390 ld a2,0(a5) + 8f6: 02059813 slli a6,a1,0x20 + 8fa: 01c85713 srli a4,a6,0x1c + 8fe: 9736 add a4,a4,a3 + 900: fae60de3 beq a2,a4,8ba <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 8fa: fec53823 sd a2,-16(a0) + 904: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 8fe: 4790 lw a2,8(a5) - 900: 02061593 slli a1,a2,0x20 - 904: 01c5d713 srli a4,a1,0x1c - 908: 973e add a4,a4,a5 - 90a: fae68ae3 beq a3,a4,8be <free+0x22> + 908: 4790 lw a2,8(a5) + 90a: 02061593 slli a1,a2,0x20 + 90e: 01c5d713 srli a4,a1,0x1c + 912: 973e add a4,a4,a5 + 914: fae68ae3 beq a3,a4,8c8 <free+0x22> p->s.ptr = bp->s.ptr; - 90e: e394 sd a3,0(a5) + 918: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 910: 00000717 auipc a4,0x0 - 914: 20f73023 sd a5,512(a4) # b10 <freep> + 91a: 00000717 auipc a4,0x0 + 91e: 20f73323 sd a5,518(a4) # b20 <freep> } - 918: 6422 ld s0,8(sp) - 91a: 0141 addi sp,sp,16 - 91c: 8082 ret + 922: 6422 ld s0,8(sp) + 924: 0141 addi sp,sp,16 + 926: 8082 ret -000000000000091e <malloc>: +0000000000000928 <malloc>: return freep; } void* malloc(uint nbytes) { - 91e: 7139 addi sp,sp,-64 - 920: fc06 sd ra,56(sp) - 922: f822 sd s0,48(sp) - 924: f426 sd s1,40(sp) - 926: f04a sd s2,32(sp) - 928: ec4e sd s3,24(sp) - 92a: e852 sd s4,16(sp) - 92c: e456 sd s5,8(sp) - 92e: e05a sd s6,0(sp) - 930: 0080 addi s0,sp,64 + 928: 7139 addi sp,sp,-64 + 92a: fc06 sd ra,56(sp) + 92c: f822 sd s0,48(sp) + 92e: f426 sd s1,40(sp) + 930: f04a sd s2,32(sp) + 932: ec4e sd s3,24(sp) + 934: e852 sd s4,16(sp) + 936: e456 sd s5,8(sp) + 938: e05a sd s6,0(sp) + 93a: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 932: 02051493 slli s1,a0,0x20 - 936: 9081 srli s1,s1,0x20 - 938: 04bd addi s1,s1,15 - 93a: 8091 srli s1,s1,0x4 - 93c: 00148a1b addiw s4,s1,1 - 940: 0485 addi s1,s1,1 + 93c: 02051493 slli s1,a0,0x20 + 940: 9081 srli s1,s1,0x20 + 942: 04bd addi s1,s1,15 + 944: 8091 srli s1,s1,0x4 + 946: 00148a1b addiw s4,s1,1 + 94a: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 942: 00000517 auipc a0,0x0 - 946: 1ce53503 ld a0,462(a0) # b10 <freep> - 94a: c515 beqz a0,976 <malloc+0x58> + 94c: 00000517 auipc a0,0x0 + 950: 1d453503 ld a0,468(a0) # b20 <freep> + 954: c515 beqz a0,980 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 94c: 611c ld a5,0(a0) + 956: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 94e: 4798 lw a4,8(a5) - 950: 04977163 bgeu a4,s1,992 <malloc+0x74> - 954: 89d2 mv s3,s4 - 956: 000a071b sext.w a4,s4 - 95a: 6685 lui a3,0x1 - 95c: 00d77363 bgeu a4,a3,962 <malloc+0x44> - 960: 6985 lui s3,0x1 - 962: 00098b1b sext.w s6,s3 + 958: 4798 lw a4,8(a5) + 95a: 04977163 bgeu a4,s1,99c <malloc+0x74> + 95e: 89d2 mv s3,s4 + 960: 000a071b sext.w a4,s4 + 964: 6685 lui a3,0x1 + 966: 00d77363 bgeu a4,a3,96c <malloc+0x44> + 96a: 6985 lui s3,0x1 + 96c: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 966: 0049999b slliw s3,s3,0x4 + 970: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 96a: 00000917 auipc s2,0x0 - 96e: 1a690913 addi s2,s2,422 # b10 <freep> + 974: 00000917 auipc s2,0x0 + 978: 1ac90913 addi s2,s2,428 # b20 <freep> if(p == (char*)-1) - 972: 5afd li s5,-1 - 974: a8a5 j 9ec <malloc+0xce> + 97c: 5afd li s5,-1 + 97e: a8a5 j 9f6 <malloc+0xce> base.s.ptr = freep = prevp = &base; - 976: 00000797 auipc a5,0x0 - 97a: 19a78793 addi a5,a5,410 # b10 <freep> - 97e: 00000717 auipc a4,0x0 - 982: 19a70713 addi a4,a4,410 # b18 <base> - 986: e398 sd a4,0(a5) - 988: e798 sd a4,8(a5) + 980: 00000797 auipc a5,0x0 + 984: 1a078793 addi a5,a5,416 # b20 <freep> + 988: 00000717 auipc a4,0x0 + 98c: 1a070713 addi a4,a4,416 # b28 <base> + 990: e398 sd a4,0(a5) + 992: e798 sd a4,8(a5) base.s.size = 0; - 98a: 0007a823 sw zero,16(a5) + 994: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 98e: 87ba mv a5,a4 - 990: b7d1 j 954 <malloc+0x36> + 998: 87ba mv a5,a4 + 99a: b7d1 j 95e <malloc+0x36> if(p->s.size == nunits) - 992: 02e48c63 beq s1,a4,9ca <malloc+0xac> + 99c: 02e48c63 beq s1,a4,9d4 <malloc+0xac> p->s.size -= nunits; - 996: 4147073b subw a4,a4,s4 - 99a: c798 sw a4,8(a5) + 9a0: 4147073b subw a4,a4,s4 + 9a4: c798 sw a4,8(a5) p += p->s.size; - 99c: 02071693 slli a3,a4,0x20 - 9a0: 01c6d713 srli a4,a3,0x1c - 9a4: 97ba add a5,a5,a4 + 9a6: 02071693 slli a3,a4,0x20 + 9aa: 01c6d713 srli a4,a3,0x1c + 9ae: 97ba add a5,a5,a4 p->s.size = nunits; - 9a6: 0147a423 sw s4,8(a5) + 9b0: 0147a423 sw s4,8(a5) freep = prevp; - 9aa: 00000717 auipc a4,0x0 - 9ae: 16a73323 sd a0,358(a4) # b10 <freep> + 9b4: 00000717 auipc a4,0x0 + 9b8: 16a73623 sd a0,364(a4) # b20 <freep> return (void*)(p + 1); - 9b2: 01078513 addi a0,a5,16 + 9bc: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 9b6: 70e2 ld ra,56(sp) - 9b8: 7442 ld s0,48(sp) - 9ba: 74a2 ld s1,40(sp) - 9bc: 7902 ld s2,32(sp) - 9be: 69e2 ld s3,24(sp) - 9c0: 6a42 ld s4,16(sp) - 9c2: 6aa2 ld s5,8(sp) - 9c4: 6b02 ld s6,0(sp) - 9c6: 6121 addi sp,sp,64 - 9c8: 8082 ret + 9c0: 70e2 ld ra,56(sp) + 9c2: 7442 ld s0,48(sp) + 9c4: 74a2 ld s1,40(sp) + 9c6: 7902 ld s2,32(sp) + 9c8: 69e2 ld s3,24(sp) + 9ca: 6a42 ld s4,16(sp) + 9cc: 6aa2 ld s5,8(sp) + 9ce: 6b02 ld s6,0(sp) + 9d0: 6121 addi sp,sp,64 + 9d2: 8082 ret prevp->s.ptr = p->s.ptr; - 9ca: 6398 ld a4,0(a5) - 9cc: e118 sd a4,0(a0) - 9ce: bff1 j 9aa <malloc+0x8c> + 9d4: 6398 ld a4,0(a5) + 9d6: e118 sd a4,0(a0) + 9d8: bff1 j 9b4 <malloc+0x8c> hp->s.size = nu; - 9d0: 01652423 sw s6,8(a0) + 9da: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 9d4: 0541 addi a0,a0,16 - 9d6: 00000097 auipc ra,0x0 - 9da: ec6080e7 jalr -314(ra) # 89c <free> + 9de: 0541 addi a0,a0,16 + 9e0: 00000097 auipc ra,0x0 + 9e4: ec6080e7 jalr -314(ra) # 8a6 <free> return freep; - 9de: 00093503 ld a0,0(s2) + 9e8: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 9e2: d971 beqz a0,9b6 <malloc+0x98> + 9ec: d971 beqz a0,9c0 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 9e4: 611c ld a5,0(a0) + 9ee: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 9e6: 4798 lw a4,8(a5) - 9e8: fa9775e3 bgeu a4,s1,992 <malloc+0x74> + 9f0: 4798 lw a4,8(a5) + 9f2: fa9775e3 bgeu a4,s1,99c <malloc+0x74> if(p == freep) - 9ec: 00093703 ld a4,0(s2) - 9f0: 853e mv a0,a5 - 9f2: fef719e3 bne a4,a5,9e4 <malloc+0xc6> + 9f6: 00093703 ld a4,0(s2) + 9fa: 853e mv a0,a5 + 9fc: fef719e3 bne a4,a5,9ee <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 9f6: 854e mv a0,s3 - 9f8: 00000097 auipc ra,0x0 - 9fc: b2a080e7 jalr -1238(ra) # 522 <sbrk> + a00: 854e mv a0,s3 + a02: 00000097 auipc ra,0x0 + a06: b20080e7 jalr -1248(ra) # 522 <sbrk> if(p == (char*)-1) - a00: fd5518e3 bne a0,s5,9d0 <malloc+0xb2> + a0a: fd5518e3 bne a0,s5,9da <malloc+0xb2> return 0; - a04: 4501 li a0,0 - a06: bf45 j 9b6 <malloc+0x98> + a0e: 4501 li a0,0 + a10: bf45 j 9c0 <malloc+0x98> diff --git a/xv6-user/ls.sym b/xv6-user/ls.sym index a2e3fa9..ad46930 100644 --- a/xv6-user/ls.sym +++ b/xv6-user/ls.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -0000000000000a08 .rodata -0000000000000ae8 .bss +0000000000000a18 .rodata +0000000000000af8 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -13,28 +13,29 @@ 0000000000000000 .debug_loclists 0000000000000000 .debug_rnglists 0000000000000000 ls.c -0000000000000ae8 buf.0 +0000000000000af8 buf.0 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -000000000000058e putc -00000000000005b0 printint -0000000000000ad0 digits +0000000000000598 putc +00000000000005ba printint +0000000000000ae0 digits 0000000000000000 umalloc.c -0000000000000b10 freep -0000000000000b18 base +0000000000000b20 freep +0000000000000b28 base 00000000000001e6 strcpy 0000000000000000 fmtname -0000000000000866 printf -00000000000012e1 __global_pointer$ +0000000000000870 printf +00000000000012f1 __global_pointer$ 0000000000000542 dev 00000000000003ec memmove +000000000000058e times 0000000000000562 trace 00000000000002cc gets -0000000000000ae1 __SDATA_BEGIN__ +0000000000000af1 __SDATA_BEGIN__ 0000000000000518 getpid 000000000000047e memcpy -000000000000091e malloc +0000000000000928 malloc 000000000000055a remove 000000000000052a sleep 000000000000056a sysinfo @@ -44,31 +45,31 @@ 0000000000000572 rename 00000000000004c4 write 00000000000004f2 fstat -0000000000000838 fprintf +0000000000000842 fprintf 00000000000004d8 kill 0000000000000202 strcat -000000000000065a vprintf +0000000000000664 vprintf 0000000000000506 chdir 00000000000004e0 exec 00000000000004a8 wait 00000000000004ba read 0000000000000444 memcmp 0000000000000496 fork -0000000000000b28 __BSS_END__ +0000000000000b38 __BSS_END__ 0000000000000522 sbrk 000000000000053a test_proc 0000000000000532 uptime -0000000000000ae1 __bss_start +0000000000000af1 __bss_start 0000000000000286 memset 000000000000018c main 0000000000000230 strcmp 000000000000057a shutdown 0000000000000510 dup 0000000000000552 getcwd -0000000000000ae1 __DATA_BEGIN__ +0000000000000af1 __DATA_BEGIN__ 0000000000000346 stat -0000000000000ae1 _edata -0000000000000b28 _end +0000000000000af1 _edata +0000000000000b38 _end 0000000000000066 ls 000000000000049e exit 000000000000038c atoi @@ -77,4 +78,4 @@ 00000000000002a8 strchr 00000000000004fc mkdir 00000000000004ce close -000000000000089c free +00000000000008a6 free diff --git a/xv6-user/mkdir.asm b/xv6-user/mkdir.asm index 17744ba..6e676cb 100644 --- a/xv6-user/mkdir.asm +++ b/xv6-user/mkdir.asm @@ -45,10 +45,10 @@ main(int argc, char *argv[]) 3c: a80d j 6e <main+0x6e> fprintf(2, "Usage: mkdir files...\n"); 3e: 00001597 auipc a1,0x1 - 42: 86258593 addi a1,a1,-1950 # 8a0 <malloc+0xf0> + 42: 86a58593 addi a1,a1,-1942 # 8a8 <malloc+0xee> 46: 4509 li a0,2 48: 00000097 auipc ra,0x0 - 4c: 682080e7 jalr 1666(ra) # 6ca <fprintf> + 4c: 68c080e7 jalr 1676(ra) # 6d4 <fprintf> exit(1); 50: 4505 li a0,1 52: 00000097 auipc ra,0x0 @@ -56,10 +56,10 @@ main(int argc, char *argv[]) fprintf(2, "mkdir: %s failed to create\n", argv[i]); 5a: 6090 ld a2,0(s1) 5c: 00001597 auipc a1,0x1 - 60: 85c58593 addi a1,a1,-1956 # 8b8 <malloc+0x108> + 60: 86458593 addi a1,a1,-1948 # 8c0 <malloc+0x106> 64: 4509 li a0,2 66: 00000097 auipc ra,0x0 - 6a: 664080e7 jalr 1636(ra) # 6ca <fprintf> + 6a: 66e080e7 jalr 1646(ra) # 6d4 <fprintf> break; } } @@ -825,637 +825,647 @@ uname: ret 41e: 8082 ret -0000000000000420 <putc>: +0000000000000420 <times>: +.global times +times: + li a7, SYS_times + 420: 09900893 li a7,153 + ecall + 424: 00000073 ecall + ret + 428: 8082 ret + +000000000000042a <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 420: 1101 addi sp,sp,-32 - 422: ec06 sd ra,24(sp) - 424: e822 sd s0,16(sp) - 426: 1000 addi s0,sp,32 - 428: feb407a3 sb a1,-17(s0) + 42a: 1101 addi sp,sp,-32 + 42c: ec06 sd ra,24(sp) + 42e: e822 sd s0,16(sp) + 430: 1000 addi s0,sp,32 + 432: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 42c: 4605 li a2,1 - 42e: fef40593 addi a1,s0,-17 - 432: 00000097 auipc ra,0x0 - 436: f24080e7 jalr -220(ra) # 356 <write> + 436: 4605 li a2,1 + 438: fef40593 addi a1,s0,-17 + 43c: 00000097 auipc ra,0x0 + 440: f1a080e7 jalr -230(ra) # 356 <write> } - 43a: 60e2 ld ra,24(sp) - 43c: 6442 ld s0,16(sp) - 43e: 6105 addi sp,sp,32 - 440: 8082 ret + 444: 60e2 ld ra,24(sp) + 446: 6442 ld s0,16(sp) + 448: 6105 addi sp,sp,32 + 44a: 8082 ret -0000000000000442 <printint>: +000000000000044c <printint>: static void printint(int fd, int xx, int base, int sgn) { - 442: 7139 addi sp,sp,-64 - 444: fc06 sd ra,56(sp) - 446: f822 sd s0,48(sp) - 448: f426 sd s1,40(sp) - 44a: f04a sd s2,32(sp) - 44c: ec4e sd s3,24(sp) - 44e: 0080 addi s0,sp,64 - 450: 84aa mv s1,a0 + 44c: 7139 addi sp,sp,-64 + 44e: fc06 sd ra,56(sp) + 450: f822 sd s0,48(sp) + 452: f426 sd s1,40(sp) + 454: f04a sd s2,32(sp) + 456: ec4e sd s3,24(sp) + 458: 0080 addi s0,sp,64 + 45a: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 452: c299 beqz a3,458 <printint+0x16> - 454: 0805c863 bltz a1,4e4 <printint+0xa2> + 45c: c299 beqz a3,462 <printint+0x16> + 45e: 0805c863 bltz a1,4ee <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 458: 2581 sext.w a1,a1 + 462: 2581 sext.w a1,a1 neg = 0; - 45a: 4881 li a7,0 + 464: 4881 li a7,0 } i = 0; - 45c: fc040993 addi s3,s0,-64 + 466: fc040993 addi s3,s0,-64 neg = 0; - 460: 86ce mv a3,s3 + 46a: 86ce mv a3,s3 i = 0; - 462: 4701 li a4,0 + 46c: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 464: 2601 sext.w a2,a2 - 466: 00000517 auipc a0,0x0 - 46a: 4d250513 addi a0,a0,1234 # 938 <digits> - 46e: 883a mv a6,a4 - 470: 2705 addiw a4,a4,1 - 472: 02c5f7bb remuw a5,a1,a2 - 476: 1782 slli a5,a5,0x20 - 478: 9381 srli a5,a5,0x20 - 47a: 97aa add a5,a5,a0 - 47c: 0007c783 lbu a5,0(a5) - 480: 00f68023 sb a5,0(a3) + 46e: 2601 sext.w a2,a2 + 470: 00000517 auipc a0,0x0 + 474: 4d050513 addi a0,a0,1232 # 940 <digits> + 478: 883a mv a6,a4 + 47a: 2705 addiw a4,a4,1 + 47c: 02c5f7bb remuw a5,a1,a2 + 480: 1782 slli a5,a5,0x20 + 482: 9381 srli a5,a5,0x20 + 484: 97aa add a5,a5,a0 + 486: 0007c783 lbu a5,0(a5) + 48a: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 484: 0005879b sext.w a5,a1 - 488: 02c5d5bb divuw a1,a1,a2 - 48c: 0685 addi a3,a3,1 - 48e: fec7f0e3 bgeu a5,a2,46e <printint+0x2c> + 48e: 0005879b sext.w a5,a1 + 492: 02c5d5bb divuw a1,a1,a2 + 496: 0685 addi a3,a3,1 + 498: fec7f0e3 bgeu a5,a2,478 <printint+0x2c> if(neg) - 492: 00088c63 beqz a7,4aa <printint+0x68> + 49c: 00088c63 beqz a7,4b4 <printint+0x68> buf[i++] = '-'; - 496: fd070793 addi a5,a4,-48 - 49a: 00878733 add a4,a5,s0 - 49e: 02d00793 li a5,45 - 4a2: fef70823 sb a5,-16(a4) - 4a6: 0028071b addiw a4,a6,2 + 4a0: fd070793 addi a5,a4,-48 + 4a4: 00878733 add a4,a5,s0 + 4a8: 02d00793 li a5,45 + 4ac: fef70823 sb a5,-16(a4) + 4b0: 0028071b addiw a4,a6,2 while(--i >= 0) - 4aa: 02e05663 blez a4,4d6 <printint+0x94> - 4ae: fc040913 addi s2,s0,-64 - 4b2: 993a add s2,s2,a4 - 4b4: 19fd addi s3,s3,-1 - 4b6: 99ba add s3,s3,a4 - 4b8: 377d addiw a4,a4,-1 - 4ba: 1702 slli a4,a4,0x20 - 4bc: 9301 srli a4,a4,0x20 - 4be: 40e989b3 sub s3,s3,a4 + 4b4: 02e05663 blez a4,4e0 <printint+0x94> + 4b8: fc040913 addi s2,s0,-64 + 4bc: 993a add s2,s2,a4 + 4be: 19fd addi s3,s3,-1 + 4c0: 99ba add s3,s3,a4 + 4c2: 377d addiw a4,a4,-1 + 4c4: 1702 slli a4,a4,0x20 + 4c6: 9301 srli a4,a4,0x20 + 4c8: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 4c2: fff94583 lbu a1,-1(s2) - 4c6: 8526 mv a0,s1 - 4c8: 00000097 auipc ra,0x0 - 4cc: f58080e7 jalr -168(ra) # 420 <putc> + 4cc: fff94583 lbu a1,-1(s2) + 4d0: 8526 mv a0,s1 + 4d2: 00000097 auipc ra,0x0 + 4d6: f58080e7 jalr -168(ra) # 42a <putc> while(--i >= 0) - 4d0: 197d addi s2,s2,-1 - 4d2: ff3918e3 bne s2,s3,4c2 <printint+0x80> + 4da: 197d addi s2,s2,-1 + 4dc: ff3918e3 bne s2,s3,4cc <printint+0x80> } - 4d6: 70e2 ld ra,56(sp) - 4d8: 7442 ld s0,48(sp) - 4da: 74a2 ld s1,40(sp) - 4dc: 7902 ld s2,32(sp) - 4de: 69e2 ld s3,24(sp) - 4e0: 6121 addi sp,sp,64 - 4e2: 8082 ret + 4e0: 70e2 ld ra,56(sp) + 4e2: 7442 ld s0,48(sp) + 4e4: 74a2 ld s1,40(sp) + 4e6: 7902 ld s2,32(sp) + 4e8: 69e2 ld s3,24(sp) + 4ea: 6121 addi sp,sp,64 + 4ec: 8082 ret x = -xx; - 4e4: 40b005bb negw a1,a1 + 4ee: 40b005bb negw a1,a1 neg = 1; - 4e8: 4885 li a7,1 + 4f2: 4885 li a7,1 x = -xx; - 4ea: bf8d j 45c <printint+0x1a> + 4f4: bf8d j 466 <printint+0x1a> -00000000000004ec <vprintf>: +00000000000004f6 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 4ec: 7119 addi sp,sp,-128 - 4ee: fc86 sd ra,120(sp) - 4f0: f8a2 sd s0,112(sp) - 4f2: f4a6 sd s1,104(sp) - 4f4: f0ca sd s2,96(sp) - 4f6: ecce sd s3,88(sp) - 4f8: e8d2 sd s4,80(sp) - 4fa: e4d6 sd s5,72(sp) - 4fc: e0da sd s6,64(sp) - 4fe: fc5e sd s7,56(sp) - 500: f862 sd s8,48(sp) - 502: f466 sd s9,40(sp) - 504: f06a sd s10,32(sp) - 506: ec6e sd s11,24(sp) - 508: 0100 addi s0,sp,128 + 4f6: 7119 addi sp,sp,-128 + 4f8: fc86 sd ra,120(sp) + 4fa: f8a2 sd s0,112(sp) + 4fc: f4a6 sd s1,104(sp) + 4fe: f0ca sd s2,96(sp) + 500: ecce sd s3,88(sp) + 502: e8d2 sd s4,80(sp) + 504: e4d6 sd s5,72(sp) + 506: e0da sd s6,64(sp) + 508: fc5e sd s7,56(sp) + 50a: f862 sd s8,48(sp) + 50c: f466 sd s9,40(sp) + 50e: f06a sd s10,32(sp) + 510: ec6e sd s11,24(sp) + 512: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 50a: 0005c903 lbu s2,0(a1) - 50e: 18090f63 beqz s2,6ac <vprintf+0x1c0> - 512: 8aaa mv s5,a0 - 514: 8b32 mv s6,a2 - 516: 00158493 addi s1,a1,1 + 514: 0005c903 lbu s2,0(a1) + 518: 18090f63 beqz s2,6b6 <vprintf+0x1c0> + 51c: 8aaa mv s5,a0 + 51e: 8b32 mv s6,a2 + 520: 00158493 addi s1,a1,1 state = 0; - 51a: 4981 li s3,0 + 524: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 51c: 02500a13 li s4,37 - 520: 4c55 li s8,21 - 522: 00000c97 auipc s9,0x0 - 526: 3bec8c93 addi s9,s9,958 # 8e0 <malloc+0x130> + 526: 02500a13 li s4,37 + 52a: 4c55 li s8,21 + 52c: 00000c97 auipc s9,0x0 + 530: 3bcc8c93 addi s9,s9,956 # 8e8 <malloc+0x12e> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 52a: 02800d93 li s11,40 + 534: 02800d93 li s11,40 putc(fd, 'x'); - 52e: 4d41 li s10,16 + 538: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 530: 00000b97 auipc s7,0x0 - 534: 408b8b93 addi s7,s7,1032 # 938 <digits> - 538: a839 j 556 <vprintf+0x6a> + 53a: 00000b97 auipc s7,0x0 + 53e: 406b8b93 addi s7,s7,1030 # 940 <digits> + 542: a839 j 560 <vprintf+0x6a> putc(fd, c); - 53a: 85ca mv a1,s2 - 53c: 8556 mv a0,s5 - 53e: 00000097 auipc ra,0x0 - 542: ee2080e7 jalr -286(ra) # 420 <putc> - 546: a019 j 54c <vprintf+0x60> + 544: 85ca mv a1,s2 + 546: 8556 mv a0,s5 + 548: 00000097 auipc ra,0x0 + 54c: ee2080e7 jalr -286(ra) # 42a <putc> + 550: a019 j 556 <vprintf+0x60> } else if(state == '%'){ - 548: 01498d63 beq s3,s4,562 <vprintf+0x76> + 552: 01498d63 beq s3,s4,56c <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 54c: 0485 addi s1,s1,1 - 54e: fff4c903 lbu s2,-1(s1) - 552: 14090d63 beqz s2,6ac <vprintf+0x1c0> + 556: 0485 addi s1,s1,1 + 558: fff4c903 lbu s2,-1(s1) + 55c: 14090d63 beqz s2,6b6 <vprintf+0x1c0> if(state == 0){ - 556: fe0999e3 bnez s3,548 <vprintf+0x5c> + 560: fe0999e3 bnez s3,552 <vprintf+0x5c> if(c == '%'){ - 55a: ff4910e3 bne s2,s4,53a <vprintf+0x4e> + 564: ff4910e3 bne s2,s4,544 <vprintf+0x4e> state = '%'; - 55e: 89d2 mv s3,s4 - 560: b7f5 j 54c <vprintf+0x60> + 568: 89d2 mv s3,s4 + 56a: b7f5 j 556 <vprintf+0x60> if(c == 'd'){ - 562: 11490c63 beq s2,s4,67a <vprintf+0x18e> - 566: f9d9079b addiw a5,s2,-99 - 56a: 0ff7f793 zext.b a5,a5 - 56e: 10fc6e63 bltu s8,a5,68a <vprintf+0x19e> - 572: f9d9079b addiw a5,s2,-99 - 576: 0ff7f713 zext.b a4,a5 - 57a: 10ec6863 bltu s8,a4,68a <vprintf+0x19e> - 57e: 00271793 slli a5,a4,0x2 - 582: 97e6 add a5,a5,s9 - 584: 439c lw a5,0(a5) - 586: 97e6 add a5,a5,s9 - 588: 8782 jr a5 + 56c: 11490c63 beq s2,s4,684 <vprintf+0x18e> + 570: f9d9079b addiw a5,s2,-99 + 574: 0ff7f793 zext.b a5,a5 + 578: 10fc6e63 bltu s8,a5,694 <vprintf+0x19e> + 57c: f9d9079b addiw a5,s2,-99 + 580: 0ff7f713 zext.b a4,a5 + 584: 10ec6863 bltu s8,a4,694 <vprintf+0x19e> + 588: 00271793 slli a5,a4,0x2 + 58c: 97e6 add a5,a5,s9 + 58e: 439c lw a5,0(a5) + 590: 97e6 add a5,a5,s9 + 592: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 58a: 008b0913 addi s2,s6,8 - 58e: 4685 li a3,1 - 590: 4629 li a2,10 - 592: 000b2583 lw a1,0(s6) - 596: 8556 mv a0,s5 - 598: 00000097 auipc ra,0x0 - 59c: eaa080e7 jalr -342(ra) # 442 <printint> - 5a0: 8b4a mv s6,s2 + 594: 008b0913 addi s2,s6,8 + 598: 4685 li a3,1 + 59a: 4629 li a2,10 + 59c: 000b2583 lw a1,0(s6) + 5a0: 8556 mv a0,s5 + 5a2: 00000097 auipc ra,0x0 + 5a6: eaa080e7 jalr -342(ra) # 44c <printint> + 5aa: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 5a2: 4981 li s3,0 - 5a4: b765 j 54c <vprintf+0x60> + 5ac: 4981 li s3,0 + 5ae: b765 j 556 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 5a6: 008b0913 addi s2,s6,8 - 5aa: 4681 li a3,0 - 5ac: 4629 li a2,10 - 5ae: 000b2583 lw a1,0(s6) - 5b2: 8556 mv a0,s5 - 5b4: 00000097 auipc ra,0x0 - 5b8: e8e080e7 jalr -370(ra) # 442 <printint> - 5bc: 8b4a mv s6,s2 + 5b0: 008b0913 addi s2,s6,8 + 5b4: 4681 li a3,0 + 5b6: 4629 li a2,10 + 5b8: 000b2583 lw a1,0(s6) + 5bc: 8556 mv a0,s5 + 5be: 00000097 auipc ra,0x0 + 5c2: e8e080e7 jalr -370(ra) # 44c <printint> + 5c6: 8b4a mv s6,s2 state = 0; - 5be: 4981 li s3,0 - 5c0: b771 j 54c <vprintf+0x60> + 5c8: 4981 li s3,0 + 5ca: b771 j 556 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 5c2: 008b0913 addi s2,s6,8 - 5c6: 4681 li a3,0 - 5c8: 866a mv a2,s10 - 5ca: 000b2583 lw a1,0(s6) - 5ce: 8556 mv a0,s5 - 5d0: 00000097 auipc ra,0x0 - 5d4: e72080e7 jalr -398(ra) # 442 <printint> - 5d8: 8b4a mv s6,s2 + 5cc: 008b0913 addi s2,s6,8 + 5d0: 4681 li a3,0 + 5d2: 866a mv a2,s10 + 5d4: 000b2583 lw a1,0(s6) + 5d8: 8556 mv a0,s5 + 5da: 00000097 auipc ra,0x0 + 5de: e72080e7 jalr -398(ra) # 44c <printint> + 5e2: 8b4a mv s6,s2 state = 0; - 5da: 4981 li s3,0 - 5dc: bf85 j 54c <vprintf+0x60> + 5e4: 4981 li s3,0 + 5e6: bf85 j 556 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 5de: 008b0793 addi a5,s6,8 - 5e2: f8f43423 sd a5,-120(s0) - 5e6: 000b3983 ld s3,0(s6) + 5e8: 008b0793 addi a5,s6,8 + 5ec: f8f43423 sd a5,-120(s0) + 5f0: 000b3983 ld s3,0(s6) putc(fd, '0'); - 5ea: 03000593 li a1,48 - 5ee: 8556 mv a0,s5 - 5f0: 00000097 auipc ra,0x0 - 5f4: e30080e7 jalr -464(ra) # 420 <putc> + 5f4: 03000593 li a1,48 + 5f8: 8556 mv a0,s5 + 5fa: 00000097 auipc ra,0x0 + 5fe: e30080e7 jalr -464(ra) # 42a <putc> putc(fd, 'x'); - 5f8: 07800593 li a1,120 - 5fc: 8556 mv a0,s5 - 5fe: 00000097 auipc ra,0x0 - 602: e22080e7 jalr -478(ra) # 420 <putc> - 606: 896a mv s2,s10 + 602: 07800593 li a1,120 + 606: 8556 mv a0,s5 + 608: 00000097 auipc ra,0x0 + 60c: e22080e7 jalr -478(ra) # 42a <putc> + 610: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 608: 03c9d793 srli a5,s3,0x3c - 60c: 97de add a5,a5,s7 - 60e: 0007c583 lbu a1,0(a5) - 612: 8556 mv a0,s5 - 614: 00000097 auipc ra,0x0 - 618: e0c080e7 jalr -500(ra) # 420 <putc> + 612: 03c9d793 srli a5,s3,0x3c + 616: 97de add a5,a5,s7 + 618: 0007c583 lbu a1,0(a5) + 61c: 8556 mv a0,s5 + 61e: 00000097 auipc ra,0x0 + 622: e0c080e7 jalr -500(ra) # 42a <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 61c: 0992 slli s3,s3,0x4 - 61e: 397d addiw s2,s2,-1 - 620: fe0914e3 bnez s2,608 <vprintf+0x11c> + 626: 0992 slli s3,s3,0x4 + 628: 397d addiw s2,s2,-1 + 62a: fe0914e3 bnez s2,612 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 624: f8843b03 ld s6,-120(s0) + 62e: f8843b03 ld s6,-120(s0) state = 0; - 628: 4981 li s3,0 - 62a: b70d j 54c <vprintf+0x60> + 632: 4981 li s3,0 + 634: b70d j 556 <vprintf+0x60> s = va_arg(ap, char*); - 62c: 008b0913 addi s2,s6,8 - 630: 000b3983 ld s3,0(s6) + 636: 008b0913 addi s2,s6,8 + 63a: 000b3983 ld s3,0(s6) if(s == 0) - 634: 02098163 beqz s3,656 <vprintf+0x16a> + 63e: 02098163 beqz s3,660 <vprintf+0x16a> while(*s != 0){ - 638: 0009c583 lbu a1,0(s3) - 63c: c5ad beqz a1,6a6 <vprintf+0x1ba> + 642: 0009c583 lbu a1,0(s3) + 646: c5ad beqz a1,6b0 <vprintf+0x1ba> putc(fd, *s); - 63e: 8556 mv a0,s5 - 640: 00000097 auipc ra,0x0 - 644: de0080e7 jalr -544(ra) # 420 <putc> + 648: 8556 mv a0,s5 + 64a: 00000097 auipc ra,0x0 + 64e: de0080e7 jalr -544(ra) # 42a <putc> s++; - 648: 0985 addi s3,s3,1 + 652: 0985 addi s3,s3,1 while(*s != 0){ - 64a: 0009c583 lbu a1,0(s3) - 64e: f9e5 bnez a1,63e <vprintf+0x152> + 654: 0009c583 lbu a1,0(s3) + 658: f9e5 bnez a1,648 <vprintf+0x152> s = va_arg(ap, char*); - 650: 8b4a mv s6,s2 + 65a: 8b4a mv s6,s2 state = 0; - 652: 4981 li s3,0 - 654: bde5 j 54c <vprintf+0x60> + 65c: 4981 li s3,0 + 65e: bde5 j 556 <vprintf+0x60> s = "(null)"; - 656: 00000997 auipc s3,0x0 - 65a: 28298993 addi s3,s3,642 # 8d8 <malloc+0x128> + 660: 00000997 auipc s3,0x0 + 664: 28098993 addi s3,s3,640 # 8e0 <malloc+0x126> while(*s != 0){ - 65e: 85ee mv a1,s11 - 660: bff9 j 63e <vprintf+0x152> + 668: 85ee mv a1,s11 + 66a: bff9 j 648 <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 662: 008b0913 addi s2,s6,8 - 666: 000b4583 lbu a1,0(s6) - 66a: 8556 mv a0,s5 - 66c: 00000097 auipc ra,0x0 - 670: db4080e7 jalr -588(ra) # 420 <putc> - 674: 8b4a mv s6,s2 + 66c: 008b0913 addi s2,s6,8 + 670: 000b4583 lbu a1,0(s6) + 674: 8556 mv a0,s5 + 676: 00000097 auipc ra,0x0 + 67a: db4080e7 jalr -588(ra) # 42a <putc> + 67e: 8b4a mv s6,s2 state = 0; - 676: 4981 li s3,0 - 678: bdd1 j 54c <vprintf+0x60> + 680: 4981 li s3,0 + 682: bdd1 j 556 <vprintf+0x60> putc(fd, c); - 67a: 85d2 mv a1,s4 - 67c: 8556 mv a0,s5 - 67e: 00000097 auipc ra,0x0 - 682: da2080e7 jalr -606(ra) # 420 <putc> + 684: 85d2 mv a1,s4 + 686: 8556 mv a0,s5 + 688: 00000097 auipc ra,0x0 + 68c: da2080e7 jalr -606(ra) # 42a <putc> state = 0; - 686: 4981 li s3,0 - 688: b5d1 j 54c <vprintf+0x60> + 690: 4981 li s3,0 + 692: b5d1 j 556 <vprintf+0x60> putc(fd, '%'); - 68a: 85d2 mv a1,s4 - 68c: 8556 mv a0,s5 - 68e: 00000097 auipc ra,0x0 - 692: d92080e7 jalr -622(ra) # 420 <putc> + 694: 85d2 mv a1,s4 + 696: 8556 mv a0,s5 + 698: 00000097 auipc ra,0x0 + 69c: d92080e7 jalr -622(ra) # 42a <putc> putc(fd, c); - 696: 85ca mv a1,s2 - 698: 8556 mv a0,s5 - 69a: 00000097 auipc ra,0x0 - 69e: d86080e7 jalr -634(ra) # 420 <putc> + 6a0: 85ca mv a1,s2 + 6a2: 8556 mv a0,s5 + 6a4: 00000097 auipc ra,0x0 + 6a8: d86080e7 jalr -634(ra) # 42a <putc> state = 0; - 6a2: 4981 li s3,0 - 6a4: b565 j 54c <vprintf+0x60> + 6ac: 4981 li s3,0 + 6ae: b565 j 556 <vprintf+0x60> s = va_arg(ap, char*); - 6a6: 8b4a mv s6,s2 + 6b0: 8b4a mv s6,s2 state = 0; - 6a8: 4981 li s3,0 - 6aa: b54d j 54c <vprintf+0x60> + 6b2: 4981 li s3,0 + 6b4: b54d j 556 <vprintf+0x60> } } } - 6ac: 70e6 ld ra,120(sp) - 6ae: 7446 ld s0,112(sp) - 6b0: 74a6 ld s1,104(sp) - 6b2: 7906 ld s2,96(sp) - 6b4: 69e6 ld s3,88(sp) - 6b6: 6a46 ld s4,80(sp) - 6b8: 6aa6 ld s5,72(sp) - 6ba: 6b06 ld s6,64(sp) - 6bc: 7be2 ld s7,56(sp) - 6be: 7c42 ld s8,48(sp) - 6c0: 7ca2 ld s9,40(sp) - 6c2: 7d02 ld s10,32(sp) - 6c4: 6de2 ld s11,24(sp) - 6c6: 6109 addi sp,sp,128 - 6c8: 8082 ret - -00000000000006ca <fprintf>: + 6b6: 70e6 ld ra,120(sp) + 6b8: 7446 ld s0,112(sp) + 6ba: 74a6 ld s1,104(sp) + 6bc: 7906 ld s2,96(sp) + 6be: 69e6 ld s3,88(sp) + 6c0: 6a46 ld s4,80(sp) + 6c2: 6aa6 ld s5,72(sp) + 6c4: 6b06 ld s6,64(sp) + 6c6: 7be2 ld s7,56(sp) + 6c8: 7c42 ld s8,48(sp) + 6ca: 7ca2 ld s9,40(sp) + 6cc: 7d02 ld s10,32(sp) + 6ce: 6de2 ld s11,24(sp) + 6d0: 6109 addi sp,sp,128 + 6d2: 8082 ret + +00000000000006d4 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 6ca: 715d addi sp,sp,-80 - 6cc: ec06 sd ra,24(sp) - 6ce: e822 sd s0,16(sp) - 6d0: 1000 addi s0,sp,32 - 6d2: e010 sd a2,0(s0) - 6d4: e414 sd a3,8(s0) - 6d6: e818 sd a4,16(s0) - 6d8: ec1c sd a5,24(s0) - 6da: 03043023 sd a6,32(s0) - 6de: 03143423 sd a7,40(s0) + 6d4: 715d addi sp,sp,-80 + 6d6: ec06 sd ra,24(sp) + 6d8: e822 sd s0,16(sp) + 6da: 1000 addi s0,sp,32 + 6dc: e010 sd a2,0(s0) + 6de: e414 sd a3,8(s0) + 6e0: e818 sd a4,16(s0) + 6e2: ec1c sd a5,24(s0) + 6e4: 03043023 sd a6,32(s0) + 6e8: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 6e2: 8622 mv a2,s0 - 6e4: fe843423 sd s0,-24(s0) + 6ec: 8622 mv a2,s0 + 6ee: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 6e8: 00000097 auipc ra,0x0 - 6ec: e04080e7 jalr -508(ra) # 4ec <vprintf> + 6f2: 00000097 auipc ra,0x0 + 6f6: e04080e7 jalr -508(ra) # 4f6 <vprintf> } - 6f0: 60e2 ld ra,24(sp) - 6f2: 6442 ld s0,16(sp) - 6f4: 6161 addi sp,sp,80 - 6f6: 8082 ret + 6fa: 60e2 ld ra,24(sp) + 6fc: 6442 ld s0,16(sp) + 6fe: 6161 addi sp,sp,80 + 700: 8082 ret -00000000000006f8 <printf>: +0000000000000702 <printf>: void printf(const char *fmt, ...) { - 6f8: 711d addi sp,sp,-96 - 6fa: ec06 sd ra,24(sp) - 6fc: e822 sd s0,16(sp) - 6fe: 1000 addi s0,sp,32 - 700: e40c sd a1,8(s0) - 702: e810 sd a2,16(s0) - 704: ec14 sd a3,24(s0) - 706: f018 sd a4,32(s0) - 708: f41c sd a5,40(s0) - 70a: 03043823 sd a6,48(s0) - 70e: 03143c23 sd a7,56(s0) + 702: 711d addi sp,sp,-96 + 704: ec06 sd ra,24(sp) + 706: e822 sd s0,16(sp) + 708: 1000 addi s0,sp,32 + 70a: e40c sd a1,8(s0) + 70c: e810 sd a2,16(s0) + 70e: ec14 sd a3,24(s0) + 710: f018 sd a4,32(s0) + 712: f41c sd a5,40(s0) + 714: 03043823 sd a6,48(s0) + 718: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 712: 00840613 addi a2,s0,8 - 716: fec43423 sd a2,-24(s0) + 71c: 00840613 addi a2,s0,8 + 720: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 71a: 85aa mv a1,a0 - 71c: 4505 li a0,1 - 71e: 00000097 auipc ra,0x0 - 722: dce080e7 jalr -562(ra) # 4ec <vprintf> + 724: 85aa mv a1,a0 + 726: 4505 li a0,1 + 728: 00000097 auipc ra,0x0 + 72c: dce080e7 jalr -562(ra) # 4f6 <vprintf> } - 726: 60e2 ld ra,24(sp) - 728: 6442 ld s0,16(sp) - 72a: 6125 addi sp,sp,96 - 72c: 8082 ret + 730: 60e2 ld ra,24(sp) + 732: 6442 ld s0,16(sp) + 734: 6125 addi sp,sp,96 + 736: 8082 ret -000000000000072e <free>: +0000000000000738 <free>: static Header base; static Header *freep; void free(void *ap) { - 72e: 1141 addi sp,sp,-16 - 730: e422 sd s0,8(sp) - 732: 0800 addi s0,sp,16 + 738: 1141 addi sp,sp,-16 + 73a: e422 sd s0,8(sp) + 73c: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 734: ff050693 addi a3,a0,-16 + 73e: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 738: 00000797 auipc a5,0x0 - 73c: 2187b783 ld a5,536(a5) # 950 <freep> - 740: a02d j 76a <free+0x3c> + 742: 00000797 auipc a5,0x0 + 746: 2167b783 ld a5,534(a5) # 958 <freep> + 74a: a02d j 774 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 742: 4618 lw a4,8(a2) - 744: 9f2d addw a4,a4,a1 - 746: fee52c23 sw a4,-8(a0) + 74c: 4618 lw a4,8(a2) + 74e: 9f2d addw a4,a4,a1 + 750: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 74a: 6398 ld a4,0(a5) - 74c: 6310 ld a2,0(a4) - 74e: a83d j 78c <free+0x5e> + 754: 6398 ld a4,0(a5) + 756: 6310 ld a2,0(a4) + 758: a83d j 796 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 750: ff852703 lw a4,-8(a0) - 754: 9f31 addw a4,a4,a2 - 756: c798 sw a4,8(a5) + 75a: ff852703 lw a4,-8(a0) + 75e: 9f31 addw a4,a4,a2 + 760: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 758: ff053683 ld a3,-16(a0) - 75c: a091 j 7a0 <free+0x72> + 762: ff053683 ld a3,-16(a0) + 766: a091 j 7aa <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 75e: 6398 ld a4,0(a5) - 760: 00e7e463 bltu a5,a4,768 <free+0x3a> - 764: 00e6ea63 bltu a3,a4,778 <free+0x4a> + 768: 6398 ld a4,0(a5) + 76a: 00e7e463 bltu a5,a4,772 <free+0x3a> + 76e: 00e6ea63 bltu a3,a4,782 <free+0x4a> { - 768: 87ba mv a5,a4 + 772: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 76a: fed7fae3 bgeu a5,a3,75e <free+0x30> - 76e: 6398 ld a4,0(a5) - 770: 00e6e463 bltu a3,a4,778 <free+0x4a> + 774: fed7fae3 bgeu a5,a3,768 <free+0x30> + 778: 6398 ld a4,0(a5) + 77a: 00e6e463 bltu a3,a4,782 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 774: fee7eae3 bltu a5,a4,768 <free+0x3a> + 77e: fee7eae3 bltu a5,a4,772 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 778: ff852583 lw a1,-8(a0) - 77c: 6390 ld a2,0(a5) - 77e: 02059813 slli a6,a1,0x20 - 782: 01c85713 srli a4,a6,0x1c - 786: 9736 add a4,a4,a3 - 788: fae60de3 beq a2,a4,742 <free+0x14> + 782: ff852583 lw a1,-8(a0) + 786: 6390 ld a2,0(a5) + 788: 02059813 slli a6,a1,0x20 + 78c: 01c85713 srli a4,a6,0x1c + 790: 9736 add a4,a4,a3 + 792: fae60de3 beq a2,a4,74c <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 78c: fec53823 sd a2,-16(a0) + 796: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 790: 4790 lw a2,8(a5) - 792: 02061593 slli a1,a2,0x20 - 796: 01c5d713 srli a4,a1,0x1c - 79a: 973e add a4,a4,a5 - 79c: fae68ae3 beq a3,a4,750 <free+0x22> + 79a: 4790 lw a2,8(a5) + 79c: 02061593 slli a1,a2,0x20 + 7a0: 01c5d713 srli a4,a1,0x1c + 7a4: 973e add a4,a4,a5 + 7a6: fae68ae3 beq a3,a4,75a <free+0x22> p->s.ptr = bp->s.ptr; - 7a0: e394 sd a3,0(a5) + 7aa: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 7a2: 00000717 auipc a4,0x0 - 7a6: 1af73723 sd a5,430(a4) # 950 <freep> + 7ac: 00000717 auipc a4,0x0 + 7b0: 1af73623 sd a5,428(a4) # 958 <freep> } - 7aa: 6422 ld s0,8(sp) - 7ac: 0141 addi sp,sp,16 - 7ae: 8082 ret + 7b4: 6422 ld s0,8(sp) + 7b6: 0141 addi sp,sp,16 + 7b8: 8082 ret -00000000000007b0 <malloc>: +00000000000007ba <malloc>: return freep; } void* malloc(uint nbytes) { - 7b0: 7139 addi sp,sp,-64 - 7b2: fc06 sd ra,56(sp) - 7b4: f822 sd s0,48(sp) - 7b6: f426 sd s1,40(sp) - 7b8: f04a sd s2,32(sp) - 7ba: ec4e sd s3,24(sp) - 7bc: e852 sd s4,16(sp) - 7be: e456 sd s5,8(sp) - 7c0: e05a sd s6,0(sp) - 7c2: 0080 addi s0,sp,64 + 7ba: 7139 addi sp,sp,-64 + 7bc: fc06 sd ra,56(sp) + 7be: f822 sd s0,48(sp) + 7c0: f426 sd s1,40(sp) + 7c2: f04a sd s2,32(sp) + 7c4: ec4e sd s3,24(sp) + 7c6: e852 sd s4,16(sp) + 7c8: e456 sd s5,8(sp) + 7ca: e05a sd s6,0(sp) + 7cc: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 7c4: 02051493 slli s1,a0,0x20 - 7c8: 9081 srli s1,s1,0x20 - 7ca: 04bd addi s1,s1,15 - 7cc: 8091 srli s1,s1,0x4 - 7ce: 00148a1b addiw s4,s1,1 - 7d2: 0485 addi s1,s1,1 + 7ce: 02051493 slli s1,a0,0x20 + 7d2: 9081 srli s1,s1,0x20 + 7d4: 04bd addi s1,s1,15 + 7d6: 8091 srli s1,s1,0x4 + 7d8: 00148a1b addiw s4,s1,1 + 7dc: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 7d4: 00000517 auipc a0,0x0 - 7d8: 17c53503 ld a0,380(a0) # 950 <freep> - 7dc: c515 beqz a0,808 <malloc+0x58> + 7de: 00000517 auipc a0,0x0 + 7e2: 17a53503 ld a0,378(a0) # 958 <freep> + 7e6: c515 beqz a0,812 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7de: 611c ld a5,0(a0) + 7e8: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 7e0: 4798 lw a4,8(a5) - 7e2: 04977163 bgeu a4,s1,824 <malloc+0x74> - 7e6: 89d2 mv s3,s4 - 7e8: 000a071b sext.w a4,s4 - 7ec: 6685 lui a3,0x1 - 7ee: 00d77363 bgeu a4,a3,7f4 <malloc+0x44> - 7f2: 6985 lui s3,0x1 - 7f4: 00098b1b sext.w s6,s3 + 7ea: 4798 lw a4,8(a5) + 7ec: 04977163 bgeu a4,s1,82e <malloc+0x74> + 7f0: 89d2 mv s3,s4 + 7f2: 000a071b sext.w a4,s4 + 7f6: 6685 lui a3,0x1 + 7f8: 00d77363 bgeu a4,a3,7fe <malloc+0x44> + 7fc: 6985 lui s3,0x1 + 7fe: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 7f8: 0049999b slliw s3,s3,0x4 + 802: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 7fc: 00000917 auipc s2,0x0 - 800: 15490913 addi s2,s2,340 # 950 <freep> + 806: 00000917 auipc s2,0x0 + 80a: 15290913 addi s2,s2,338 # 958 <freep> if(p == (char*)-1) - 804: 5afd li s5,-1 - 806: a8a5 j 87e <malloc+0xce> + 80e: 5afd li s5,-1 + 810: a8a5 j 888 <malloc+0xce> base.s.ptr = freep = prevp = &base; - 808: 00000797 auipc a5,0x0 - 80c: 14878793 addi a5,a5,328 # 950 <freep> - 810: 00000717 auipc a4,0x0 - 814: 14870713 addi a4,a4,328 # 958 <base> - 818: e398 sd a4,0(a5) - 81a: e798 sd a4,8(a5) + 812: 00000797 auipc a5,0x0 + 816: 14678793 addi a5,a5,326 # 958 <freep> + 81a: 00000717 auipc a4,0x0 + 81e: 14670713 addi a4,a4,326 # 960 <base> + 822: e398 sd a4,0(a5) + 824: e798 sd a4,8(a5) base.s.size = 0; - 81c: 0007a823 sw zero,16(a5) + 826: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 820: 87ba mv a5,a4 - 822: b7d1 j 7e6 <malloc+0x36> + 82a: 87ba mv a5,a4 + 82c: b7d1 j 7f0 <malloc+0x36> if(p->s.size == nunits) - 824: 02e48c63 beq s1,a4,85c <malloc+0xac> + 82e: 02e48c63 beq s1,a4,866 <malloc+0xac> p->s.size -= nunits; - 828: 4147073b subw a4,a4,s4 - 82c: c798 sw a4,8(a5) + 832: 4147073b subw a4,a4,s4 + 836: c798 sw a4,8(a5) p += p->s.size; - 82e: 02071693 slli a3,a4,0x20 - 832: 01c6d713 srli a4,a3,0x1c - 836: 97ba add a5,a5,a4 + 838: 02071693 slli a3,a4,0x20 + 83c: 01c6d713 srli a4,a3,0x1c + 840: 97ba add a5,a5,a4 p->s.size = nunits; - 838: 0147a423 sw s4,8(a5) + 842: 0147a423 sw s4,8(a5) freep = prevp; - 83c: 00000717 auipc a4,0x0 - 840: 10a73a23 sd a0,276(a4) # 950 <freep> + 846: 00000717 auipc a4,0x0 + 84a: 10a73923 sd a0,274(a4) # 958 <freep> return (void*)(p + 1); - 844: 01078513 addi a0,a5,16 + 84e: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 848: 70e2 ld ra,56(sp) - 84a: 7442 ld s0,48(sp) - 84c: 74a2 ld s1,40(sp) - 84e: 7902 ld s2,32(sp) - 850: 69e2 ld s3,24(sp) - 852: 6a42 ld s4,16(sp) - 854: 6aa2 ld s5,8(sp) - 856: 6b02 ld s6,0(sp) - 858: 6121 addi sp,sp,64 - 85a: 8082 ret + 852: 70e2 ld ra,56(sp) + 854: 7442 ld s0,48(sp) + 856: 74a2 ld s1,40(sp) + 858: 7902 ld s2,32(sp) + 85a: 69e2 ld s3,24(sp) + 85c: 6a42 ld s4,16(sp) + 85e: 6aa2 ld s5,8(sp) + 860: 6b02 ld s6,0(sp) + 862: 6121 addi sp,sp,64 + 864: 8082 ret prevp->s.ptr = p->s.ptr; - 85c: 6398 ld a4,0(a5) - 85e: e118 sd a4,0(a0) - 860: bff1 j 83c <malloc+0x8c> + 866: 6398 ld a4,0(a5) + 868: e118 sd a4,0(a0) + 86a: bff1 j 846 <malloc+0x8c> hp->s.size = nu; - 862: 01652423 sw s6,8(a0) + 86c: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 866: 0541 addi a0,a0,16 - 868: 00000097 auipc ra,0x0 - 86c: ec6080e7 jalr -314(ra) # 72e <free> + 870: 0541 addi a0,a0,16 + 872: 00000097 auipc ra,0x0 + 876: ec6080e7 jalr -314(ra) # 738 <free> return freep; - 870: 00093503 ld a0,0(s2) + 87a: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 874: d971 beqz a0,848 <malloc+0x98> + 87e: d971 beqz a0,852 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 876: 611c ld a5,0(a0) + 880: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 878: 4798 lw a4,8(a5) - 87a: fa9775e3 bgeu a4,s1,824 <malloc+0x74> + 882: 4798 lw a4,8(a5) + 884: fa9775e3 bgeu a4,s1,82e <malloc+0x74> if(p == freep) - 87e: 00093703 ld a4,0(s2) - 882: 853e mv a0,a5 - 884: fef719e3 bne a4,a5,876 <malloc+0xc6> + 888: 00093703 ld a4,0(s2) + 88c: 853e mv a0,a5 + 88e: fef719e3 bne a4,a5,880 <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 888: 854e mv a0,s3 - 88a: 00000097 auipc ra,0x0 - 88e: b2a080e7 jalr -1238(ra) # 3b4 <sbrk> + 892: 854e mv a0,s3 + 894: 00000097 auipc ra,0x0 + 898: b20080e7 jalr -1248(ra) # 3b4 <sbrk> if(p == (char*)-1) - 892: fd5518e3 bne a0,s5,862 <malloc+0xb2> + 89c: fd5518e3 bne a0,s5,86c <malloc+0xb2> return 0; - 896: 4501 li a0,0 - 898: bf45 j 848 <malloc+0x98> + 8a0: 4501 li a0,0 + 8a2: bf45 j 852 <malloc+0x98> diff --git a/xv6-user/mkdir.sym b/xv6-user/mkdir.sym index 4f766ff..0109c7d 100644 --- a/xv6-user/mkdir.sym +++ b/xv6-user/mkdir.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -00000000000008a0 .rodata -0000000000000950 .bss +00000000000008a8 .rodata +0000000000000958 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,23 +16,24 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -0000000000000420 putc -0000000000000442 printint -0000000000000938 digits +000000000000042a putc +000000000000044c printint +0000000000000940 digits 0000000000000000 umalloc.c -0000000000000950 freep -0000000000000958 base +0000000000000958 freep +0000000000000960 base 0000000000000078 strcpy -00000000000006f8 printf -0000000000001149 __global_pointer$ +0000000000000702 printf +0000000000001151 __global_pointer$ 00000000000003d4 dev 000000000000027e memmove +0000000000000420 times 00000000000003f4 trace 000000000000015e gets -0000000000000949 __SDATA_BEGIN__ +0000000000000951 __SDATA_BEGIN__ 00000000000003aa getpid 0000000000000310 memcpy -00000000000007b0 malloc +00000000000007ba malloc 00000000000003ec remove 00000000000003bc sleep 00000000000003fc sysinfo @@ -42,31 +43,31 @@ 0000000000000404 rename 0000000000000356 write 0000000000000384 fstat -00000000000006ca fprintf +00000000000006d4 fprintf 000000000000036a kill 0000000000000094 strcat -00000000000004ec vprintf +00000000000004f6 vprintf 0000000000000398 chdir 0000000000000372 exec 000000000000033a wait 000000000000034c read 00000000000002d6 memcmp 0000000000000328 fork -0000000000000968 __BSS_END__ +0000000000000970 __BSS_END__ 00000000000003b4 sbrk 00000000000003cc test_proc 00000000000003c4 uptime -0000000000000949 __bss_start +0000000000000951 __bss_start 0000000000000118 memset 0000000000000000 main 00000000000000c2 strcmp 000000000000040c shutdown 00000000000003a2 dup 00000000000003e4 getcwd -0000000000000949 __DATA_BEGIN__ +0000000000000951 __DATA_BEGIN__ 00000000000001d8 stat -0000000000000949 _edata -0000000000000968 _end +0000000000000951 _edata +0000000000000970 _end 0000000000000330 exit 000000000000021e atoi 00000000000000ee strlen @@ -74,4 +75,4 @@ 000000000000013a strchr 000000000000038e mkdir 0000000000000360 close -000000000000072e free +0000000000000738 free diff --git a/xv6-user/mv.asm b/xv6-user/mv.asm index e197b11..f90a3e6 100644 --- a/xv6-user/mv.asm +++ b/xv6-user/mv.asm @@ -22,10 +22,10 @@ int main(int argc, char *argv[]) 18: 02a7c063 blt a5,a0,38 <main+0x38> fprintf(2, "Usage: mv old_name new_name\n"); 1c: 00001597 auipc a1,0x1 - 20: 9b458593 addi a1,a1,-1612 # 9d0 <malloc+0xee> + 20: 9bc58593 addi a1,a1,-1604 # 9d8 <malloc+0xec> 24: 4509 li a0,2 26: 00000097 auipc ra,0x0 - 2a: 7d6080e7 jalr 2006(ra) # 7fc <fprintf> + 2a: 7e0080e7 jalr 2016(ra) # 806 <fprintf> exit(1); 2e: 4505 li a0,1 30: 00000097 auipc ra,0x0 @@ -75,10 +75,10 @@ int main(int argc, char *argv[]) fprintf(2, "mv: fail! %s exists!\n", dst); 8a: dd040613 addi a2,s0,-560 8e: 00001597 auipc a1,0x1 - 92: 99a58593 addi a1,a1,-1638 # a28 <malloc+0x146> + 92: 9a258593 addi a1,a1,-1630 # a30 <malloc+0x144> 96: 4509 li a0,2 98: 00000097 auipc ra,0x0 - 9c: 764080e7 jalr 1892(ra) # 7fc <fprintf> + 9c: 76e080e7 jalr 1902(ra) # 806 <fprintf> exit(-1); a0: 557d li a0,-1 a2: 00000097 auipc ra,0x0 @@ -142,10 +142,10 @@ int main(int argc, char *argv[]) fprintf(2, "mv: fail! final dst path too long (exceed MAX=%d)!\n", MAXPATH); 134: 10400613 li a2,260 138: 00001597 auipc a1,0x1 - 13c: 8b858593 addi a1,a1,-1864 # 9f0 <malloc+0x10e> + 13c: 8c058593 addi a1,a1,-1856 # 9f8 <malloc+0x10c> 140: 4509 li a0,2 142: 00000097 auipc ra,0x0 - 146: 6ba080e7 jalr 1722(ra) # 7fc <fprintf> + 146: 6c4080e7 jalr 1732(ra) # 806 <fprintf> exit(-1); 14a: 557d li a0,-1 14c: 00000097 auipc ra,0x0 @@ -158,9 +158,9 @@ int main(int argc, char *argv[]) 15a: ed840493 addi s1,s0,-296 15e: 85a6 mv a1,s1 160: 00001517 auipc a0,0x1 - 164: 8e050513 addi a0,a0,-1824 # a40 <malloc+0x15e> + 164: 8e850513 addi a0,a0,-1816 # a48 <malloc+0x15c> 168: 00000097 auipc ra,0x0 - 16c: 6c2080e7 jalr 1730(ra) # 82a <printf> + 16c: 6cc080e7 jalr 1740(ra) # 834 <printf> if (rename(src, dst) < 0) { 170: 85ca mv a1,s2 172: 8526 mv a0,s1 @@ -178,10 +178,10 @@ int main(int argc, char *argv[]) 18a: 86ca mv a3,s2 18c: 8626 mv a2,s1 18e: 00001597 auipc a1,0x1 - 192: 8ca58593 addi a1,a1,-1846 # a58 <malloc+0x176> + 192: 8d258593 addi a1,a1,-1838 # a60 <malloc+0x174> 196: 4509 li a0,2 198: 00000097 auipc ra,0x0 - 19c: 664080e7 jalr 1636(ra) # 7fc <fprintf> + 19c: 66e080e7 jalr 1646(ra) # 806 <fprintf> exit(-1); 1a0: 557d li a0,-1 1a2: 00000097 auipc ra,0x0 @@ -943,637 +943,647 @@ uname: ret 550: 8082 ret -0000000000000552 <putc>: +0000000000000552 <times>: +.global times +times: + li a7, SYS_times + 552: 09900893 li a7,153 + ecall + 556: 00000073 ecall + ret + 55a: 8082 ret + +000000000000055c <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 552: 1101 addi sp,sp,-32 - 554: ec06 sd ra,24(sp) - 556: e822 sd s0,16(sp) - 558: 1000 addi s0,sp,32 - 55a: feb407a3 sb a1,-17(s0) + 55c: 1101 addi sp,sp,-32 + 55e: ec06 sd ra,24(sp) + 560: e822 sd s0,16(sp) + 562: 1000 addi s0,sp,32 + 564: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 55e: 4605 li a2,1 - 560: fef40593 addi a1,s0,-17 - 564: 00000097 auipc ra,0x0 - 568: f24080e7 jalr -220(ra) # 488 <write> + 568: 4605 li a2,1 + 56a: fef40593 addi a1,s0,-17 + 56e: 00000097 auipc ra,0x0 + 572: f1a080e7 jalr -230(ra) # 488 <write> } - 56c: 60e2 ld ra,24(sp) - 56e: 6442 ld s0,16(sp) - 570: 6105 addi sp,sp,32 - 572: 8082 ret + 576: 60e2 ld ra,24(sp) + 578: 6442 ld s0,16(sp) + 57a: 6105 addi sp,sp,32 + 57c: 8082 ret -0000000000000574 <printint>: +000000000000057e <printint>: static void printint(int fd, int xx, int base, int sgn) { - 574: 7139 addi sp,sp,-64 - 576: fc06 sd ra,56(sp) - 578: f822 sd s0,48(sp) - 57a: f426 sd s1,40(sp) - 57c: f04a sd s2,32(sp) - 57e: ec4e sd s3,24(sp) - 580: 0080 addi s0,sp,64 - 582: 84aa mv s1,a0 + 57e: 7139 addi sp,sp,-64 + 580: fc06 sd ra,56(sp) + 582: f822 sd s0,48(sp) + 584: f426 sd s1,40(sp) + 586: f04a sd s2,32(sp) + 588: ec4e sd s3,24(sp) + 58a: 0080 addi s0,sp,64 + 58c: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 584: c299 beqz a3,58a <printint+0x16> - 586: 0805c863 bltz a1,616 <printint+0xa2> + 58e: c299 beqz a3,594 <printint+0x16> + 590: 0805c863 bltz a1,620 <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 58a: 2581 sext.w a1,a1 + 594: 2581 sext.w a1,a1 neg = 0; - 58c: 4881 li a7,0 + 596: 4881 li a7,0 } i = 0; - 58e: fc040993 addi s3,s0,-64 + 598: fc040993 addi s3,s0,-64 neg = 0; - 592: 86ce mv a3,s3 + 59c: 86ce mv a3,s3 i = 0; - 594: 4701 li a4,0 + 59e: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 596: 2601 sext.w a2,a2 - 598: 00000517 auipc a0,0x0 - 59c: 54050513 addi a0,a0,1344 # ad8 <digits> - 5a0: 883a mv a6,a4 - 5a2: 2705 addiw a4,a4,1 - 5a4: 02c5f7bb remuw a5,a1,a2 - 5a8: 1782 slli a5,a5,0x20 - 5aa: 9381 srli a5,a5,0x20 - 5ac: 97aa add a5,a5,a0 - 5ae: 0007c783 lbu a5,0(a5) - 5b2: 00f68023 sb a5,0(a3) + 5a0: 2601 sext.w a2,a2 + 5a2: 00000517 auipc a0,0x0 + 5a6: 53e50513 addi a0,a0,1342 # ae0 <digits> + 5aa: 883a mv a6,a4 + 5ac: 2705 addiw a4,a4,1 + 5ae: 02c5f7bb remuw a5,a1,a2 + 5b2: 1782 slli a5,a5,0x20 + 5b4: 9381 srli a5,a5,0x20 + 5b6: 97aa add a5,a5,a0 + 5b8: 0007c783 lbu a5,0(a5) + 5bc: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 5b6: 0005879b sext.w a5,a1 - 5ba: 02c5d5bb divuw a1,a1,a2 - 5be: 0685 addi a3,a3,1 - 5c0: fec7f0e3 bgeu a5,a2,5a0 <printint+0x2c> + 5c0: 0005879b sext.w a5,a1 + 5c4: 02c5d5bb divuw a1,a1,a2 + 5c8: 0685 addi a3,a3,1 + 5ca: fec7f0e3 bgeu a5,a2,5aa <printint+0x2c> if(neg) - 5c4: 00088c63 beqz a7,5dc <printint+0x68> + 5ce: 00088c63 beqz a7,5e6 <printint+0x68> buf[i++] = '-'; - 5c8: fd070793 addi a5,a4,-48 - 5cc: 00878733 add a4,a5,s0 - 5d0: 02d00793 li a5,45 - 5d4: fef70823 sb a5,-16(a4) - 5d8: 0028071b addiw a4,a6,2 + 5d2: fd070793 addi a5,a4,-48 + 5d6: 00878733 add a4,a5,s0 + 5da: 02d00793 li a5,45 + 5de: fef70823 sb a5,-16(a4) + 5e2: 0028071b addiw a4,a6,2 while(--i >= 0) - 5dc: 02e05663 blez a4,608 <printint+0x94> - 5e0: fc040913 addi s2,s0,-64 - 5e4: 993a add s2,s2,a4 - 5e6: 19fd addi s3,s3,-1 - 5e8: 99ba add s3,s3,a4 - 5ea: 377d addiw a4,a4,-1 - 5ec: 1702 slli a4,a4,0x20 - 5ee: 9301 srli a4,a4,0x20 - 5f0: 40e989b3 sub s3,s3,a4 + 5e6: 02e05663 blez a4,612 <printint+0x94> + 5ea: fc040913 addi s2,s0,-64 + 5ee: 993a add s2,s2,a4 + 5f0: 19fd addi s3,s3,-1 + 5f2: 99ba add s3,s3,a4 + 5f4: 377d addiw a4,a4,-1 + 5f6: 1702 slli a4,a4,0x20 + 5f8: 9301 srli a4,a4,0x20 + 5fa: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 5f4: fff94583 lbu a1,-1(s2) - 5f8: 8526 mv a0,s1 - 5fa: 00000097 auipc ra,0x0 - 5fe: f58080e7 jalr -168(ra) # 552 <putc> + 5fe: fff94583 lbu a1,-1(s2) + 602: 8526 mv a0,s1 + 604: 00000097 auipc ra,0x0 + 608: f58080e7 jalr -168(ra) # 55c <putc> while(--i >= 0) - 602: 197d addi s2,s2,-1 - 604: ff3918e3 bne s2,s3,5f4 <printint+0x80> + 60c: 197d addi s2,s2,-1 + 60e: ff3918e3 bne s2,s3,5fe <printint+0x80> } - 608: 70e2 ld ra,56(sp) - 60a: 7442 ld s0,48(sp) - 60c: 74a2 ld s1,40(sp) - 60e: 7902 ld s2,32(sp) - 610: 69e2 ld s3,24(sp) - 612: 6121 addi sp,sp,64 - 614: 8082 ret + 612: 70e2 ld ra,56(sp) + 614: 7442 ld s0,48(sp) + 616: 74a2 ld s1,40(sp) + 618: 7902 ld s2,32(sp) + 61a: 69e2 ld s3,24(sp) + 61c: 6121 addi sp,sp,64 + 61e: 8082 ret x = -xx; - 616: 40b005bb negw a1,a1 + 620: 40b005bb negw a1,a1 neg = 1; - 61a: 4885 li a7,1 + 624: 4885 li a7,1 x = -xx; - 61c: bf8d j 58e <printint+0x1a> + 626: bf8d j 598 <printint+0x1a> -000000000000061e <vprintf>: +0000000000000628 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 61e: 7119 addi sp,sp,-128 - 620: fc86 sd ra,120(sp) - 622: f8a2 sd s0,112(sp) - 624: f4a6 sd s1,104(sp) - 626: f0ca sd s2,96(sp) - 628: ecce sd s3,88(sp) - 62a: e8d2 sd s4,80(sp) - 62c: e4d6 sd s5,72(sp) - 62e: e0da sd s6,64(sp) - 630: fc5e sd s7,56(sp) - 632: f862 sd s8,48(sp) - 634: f466 sd s9,40(sp) - 636: f06a sd s10,32(sp) - 638: ec6e sd s11,24(sp) - 63a: 0100 addi s0,sp,128 + 628: 7119 addi sp,sp,-128 + 62a: fc86 sd ra,120(sp) + 62c: f8a2 sd s0,112(sp) + 62e: f4a6 sd s1,104(sp) + 630: f0ca sd s2,96(sp) + 632: ecce sd s3,88(sp) + 634: e8d2 sd s4,80(sp) + 636: e4d6 sd s5,72(sp) + 638: e0da sd s6,64(sp) + 63a: fc5e sd s7,56(sp) + 63c: f862 sd s8,48(sp) + 63e: f466 sd s9,40(sp) + 640: f06a sd s10,32(sp) + 642: ec6e sd s11,24(sp) + 644: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 63c: 0005c903 lbu s2,0(a1) - 640: 18090f63 beqz s2,7de <vprintf+0x1c0> - 644: 8aaa mv s5,a0 - 646: 8b32 mv s6,a2 - 648: 00158493 addi s1,a1,1 + 646: 0005c903 lbu s2,0(a1) + 64a: 18090f63 beqz s2,7e8 <vprintf+0x1c0> + 64e: 8aaa mv s5,a0 + 650: 8b32 mv s6,a2 + 652: 00158493 addi s1,a1,1 state = 0; - 64c: 4981 li s3,0 + 656: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 64e: 02500a13 li s4,37 - 652: 4c55 li s8,21 - 654: 00000c97 auipc s9,0x0 - 658: 42cc8c93 addi s9,s9,1068 # a80 <malloc+0x19e> + 658: 02500a13 li s4,37 + 65c: 4c55 li s8,21 + 65e: 00000c97 auipc s9,0x0 + 662: 42ac8c93 addi s9,s9,1066 # a88 <malloc+0x19c> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 65c: 02800d93 li s11,40 + 666: 02800d93 li s11,40 putc(fd, 'x'); - 660: 4d41 li s10,16 + 66a: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 662: 00000b97 auipc s7,0x0 - 666: 476b8b93 addi s7,s7,1142 # ad8 <digits> - 66a: a839 j 688 <vprintf+0x6a> + 66c: 00000b97 auipc s7,0x0 + 670: 474b8b93 addi s7,s7,1140 # ae0 <digits> + 674: a839 j 692 <vprintf+0x6a> putc(fd, c); - 66c: 85ca mv a1,s2 - 66e: 8556 mv a0,s5 - 670: 00000097 auipc ra,0x0 - 674: ee2080e7 jalr -286(ra) # 552 <putc> - 678: a019 j 67e <vprintf+0x60> + 676: 85ca mv a1,s2 + 678: 8556 mv a0,s5 + 67a: 00000097 auipc ra,0x0 + 67e: ee2080e7 jalr -286(ra) # 55c <putc> + 682: a019 j 688 <vprintf+0x60> } else if(state == '%'){ - 67a: 01498d63 beq s3,s4,694 <vprintf+0x76> + 684: 01498d63 beq s3,s4,69e <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 67e: 0485 addi s1,s1,1 - 680: fff4c903 lbu s2,-1(s1) - 684: 14090d63 beqz s2,7de <vprintf+0x1c0> + 688: 0485 addi s1,s1,1 + 68a: fff4c903 lbu s2,-1(s1) + 68e: 14090d63 beqz s2,7e8 <vprintf+0x1c0> if(state == 0){ - 688: fe0999e3 bnez s3,67a <vprintf+0x5c> + 692: fe0999e3 bnez s3,684 <vprintf+0x5c> if(c == '%'){ - 68c: ff4910e3 bne s2,s4,66c <vprintf+0x4e> + 696: ff4910e3 bne s2,s4,676 <vprintf+0x4e> state = '%'; - 690: 89d2 mv s3,s4 - 692: b7f5 j 67e <vprintf+0x60> + 69a: 89d2 mv s3,s4 + 69c: b7f5 j 688 <vprintf+0x60> if(c == 'd'){ - 694: 11490c63 beq s2,s4,7ac <vprintf+0x18e> - 698: f9d9079b addiw a5,s2,-99 - 69c: 0ff7f793 zext.b a5,a5 - 6a0: 10fc6e63 bltu s8,a5,7bc <vprintf+0x19e> - 6a4: f9d9079b addiw a5,s2,-99 - 6a8: 0ff7f713 zext.b a4,a5 - 6ac: 10ec6863 bltu s8,a4,7bc <vprintf+0x19e> - 6b0: 00271793 slli a5,a4,0x2 - 6b4: 97e6 add a5,a5,s9 - 6b6: 439c lw a5,0(a5) - 6b8: 97e6 add a5,a5,s9 - 6ba: 8782 jr a5 + 69e: 11490c63 beq s2,s4,7b6 <vprintf+0x18e> + 6a2: f9d9079b addiw a5,s2,-99 + 6a6: 0ff7f793 zext.b a5,a5 + 6aa: 10fc6e63 bltu s8,a5,7c6 <vprintf+0x19e> + 6ae: f9d9079b addiw a5,s2,-99 + 6b2: 0ff7f713 zext.b a4,a5 + 6b6: 10ec6863 bltu s8,a4,7c6 <vprintf+0x19e> + 6ba: 00271793 slli a5,a4,0x2 + 6be: 97e6 add a5,a5,s9 + 6c0: 439c lw a5,0(a5) + 6c2: 97e6 add a5,a5,s9 + 6c4: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 6bc: 008b0913 addi s2,s6,8 - 6c0: 4685 li a3,1 - 6c2: 4629 li a2,10 - 6c4: 000b2583 lw a1,0(s6) - 6c8: 8556 mv a0,s5 - 6ca: 00000097 auipc ra,0x0 - 6ce: eaa080e7 jalr -342(ra) # 574 <printint> - 6d2: 8b4a mv s6,s2 + 6c6: 008b0913 addi s2,s6,8 + 6ca: 4685 li a3,1 + 6cc: 4629 li a2,10 + 6ce: 000b2583 lw a1,0(s6) + 6d2: 8556 mv a0,s5 + 6d4: 00000097 auipc ra,0x0 + 6d8: eaa080e7 jalr -342(ra) # 57e <printint> + 6dc: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 6d4: 4981 li s3,0 - 6d6: b765 j 67e <vprintf+0x60> + 6de: 4981 li s3,0 + 6e0: b765 j 688 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 6d8: 008b0913 addi s2,s6,8 - 6dc: 4681 li a3,0 - 6de: 4629 li a2,10 - 6e0: 000b2583 lw a1,0(s6) - 6e4: 8556 mv a0,s5 - 6e6: 00000097 auipc ra,0x0 - 6ea: e8e080e7 jalr -370(ra) # 574 <printint> - 6ee: 8b4a mv s6,s2 + 6e2: 008b0913 addi s2,s6,8 + 6e6: 4681 li a3,0 + 6e8: 4629 li a2,10 + 6ea: 000b2583 lw a1,0(s6) + 6ee: 8556 mv a0,s5 + 6f0: 00000097 auipc ra,0x0 + 6f4: e8e080e7 jalr -370(ra) # 57e <printint> + 6f8: 8b4a mv s6,s2 state = 0; - 6f0: 4981 li s3,0 - 6f2: b771 j 67e <vprintf+0x60> + 6fa: 4981 li s3,0 + 6fc: b771 j 688 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 6f4: 008b0913 addi s2,s6,8 - 6f8: 4681 li a3,0 - 6fa: 866a mv a2,s10 - 6fc: 000b2583 lw a1,0(s6) - 700: 8556 mv a0,s5 - 702: 00000097 auipc ra,0x0 - 706: e72080e7 jalr -398(ra) # 574 <printint> - 70a: 8b4a mv s6,s2 + 6fe: 008b0913 addi s2,s6,8 + 702: 4681 li a3,0 + 704: 866a mv a2,s10 + 706: 000b2583 lw a1,0(s6) + 70a: 8556 mv a0,s5 + 70c: 00000097 auipc ra,0x0 + 710: e72080e7 jalr -398(ra) # 57e <printint> + 714: 8b4a mv s6,s2 state = 0; - 70c: 4981 li s3,0 - 70e: bf85 j 67e <vprintf+0x60> + 716: 4981 li s3,0 + 718: bf85 j 688 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 710: 008b0793 addi a5,s6,8 - 714: f8f43423 sd a5,-120(s0) - 718: 000b3983 ld s3,0(s6) + 71a: 008b0793 addi a5,s6,8 + 71e: f8f43423 sd a5,-120(s0) + 722: 000b3983 ld s3,0(s6) putc(fd, '0'); - 71c: 03000593 li a1,48 - 720: 8556 mv a0,s5 - 722: 00000097 auipc ra,0x0 - 726: e30080e7 jalr -464(ra) # 552 <putc> + 726: 03000593 li a1,48 + 72a: 8556 mv a0,s5 + 72c: 00000097 auipc ra,0x0 + 730: e30080e7 jalr -464(ra) # 55c <putc> putc(fd, 'x'); - 72a: 07800593 li a1,120 - 72e: 8556 mv a0,s5 - 730: 00000097 auipc ra,0x0 - 734: e22080e7 jalr -478(ra) # 552 <putc> - 738: 896a mv s2,s10 + 734: 07800593 li a1,120 + 738: 8556 mv a0,s5 + 73a: 00000097 auipc ra,0x0 + 73e: e22080e7 jalr -478(ra) # 55c <putc> + 742: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 73a: 03c9d793 srli a5,s3,0x3c - 73e: 97de add a5,a5,s7 - 740: 0007c583 lbu a1,0(a5) - 744: 8556 mv a0,s5 - 746: 00000097 auipc ra,0x0 - 74a: e0c080e7 jalr -500(ra) # 552 <putc> + 744: 03c9d793 srli a5,s3,0x3c + 748: 97de add a5,a5,s7 + 74a: 0007c583 lbu a1,0(a5) + 74e: 8556 mv a0,s5 + 750: 00000097 auipc ra,0x0 + 754: e0c080e7 jalr -500(ra) # 55c <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 74e: 0992 slli s3,s3,0x4 - 750: 397d addiw s2,s2,-1 - 752: fe0914e3 bnez s2,73a <vprintf+0x11c> + 758: 0992 slli s3,s3,0x4 + 75a: 397d addiw s2,s2,-1 + 75c: fe0914e3 bnez s2,744 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 756: f8843b03 ld s6,-120(s0) + 760: f8843b03 ld s6,-120(s0) state = 0; - 75a: 4981 li s3,0 - 75c: b70d j 67e <vprintf+0x60> + 764: 4981 li s3,0 + 766: b70d j 688 <vprintf+0x60> s = va_arg(ap, char*); - 75e: 008b0913 addi s2,s6,8 - 762: 000b3983 ld s3,0(s6) + 768: 008b0913 addi s2,s6,8 + 76c: 000b3983 ld s3,0(s6) if(s == 0) - 766: 02098163 beqz s3,788 <vprintf+0x16a> + 770: 02098163 beqz s3,792 <vprintf+0x16a> while(*s != 0){ - 76a: 0009c583 lbu a1,0(s3) - 76e: c5ad beqz a1,7d8 <vprintf+0x1ba> + 774: 0009c583 lbu a1,0(s3) + 778: c5ad beqz a1,7e2 <vprintf+0x1ba> putc(fd, *s); - 770: 8556 mv a0,s5 - 772: 00000097 auipc ra,0x0 - 776: de0080e7 jalr -544(ra) # 552 <putc> + 77a: 8556 mv a0,s5 + 77c: 00000097 auipc ra,0x0 + 780: de0080e7 jalr -544(ra) # 55c <putc> s++; - 77a: 0985 addi s3,s3,1 + 784: 0985 addi s3,s3,1 while(*s != 0){ - 77c: 0009c583 lbu a1,0(s3) - 780: f9e5 bnez a1,770 <vprintf+0x152> + 786: 0009c583 lbu a1,0(s3) + 78a: f9e5 bnez a1,77a <vprintf+0x152> s = va_arg(ap, char*); - 782: 8b4a mv s6,s2 + 78c: 8b4a mv s6,s2 state = 0; - 784: 4981 li s3,0 - 786: bde5 j 67e <vprintf+0x60> + 78e: 4981 li s3,0 + 790: bde5 j 688 <vprintf+0x60> s = "(null)"; - 788: 00000997 auipc s3,0x0 - 78c: 2f098993 addi s3,s3,752 # a78 <malloc+0x196> + 792: 00000997 auipc s3,0x0 + 796: 2ee98993 addi s3,s3,750 # a80 <malloc+0x194> while(*s != 0){ - 790: 85ee mv a1,s11 - 792: bff9 j 770 <vprintf+0x152> + 79a: 85ee mv a1,s11 + 79c: bff9 j 77a <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 794: 008b0913 addi s2,s6,8 - 798: 000b4583 lbu a1,0(s6) - 79c: 8556 mv a0,s5 - 79e: 00000097 auipc ra,0x0 - 7a2: db4080e7 jalr -588(ra) # 552 <putc> - 7a6: 8b4a mv s6,s2 + 79e: 008b0913 addi s2,s6,8 + 7a2: 000b4583 lbu a1,0(s6) + 7a6: 8556 mv a0,s5 + 7a8: 00000097 auipc ra,0x0 + 7ac: db4080e7 jalr -588(ra) # 55c <putc> + 7b0: 8b4a mv s6,s2 state = 0; - 7a8: 4981 li s3,0 - 7aa: bdd1 j 67e <vprintf+0x60> + 7b2: 4981 li s3,0 + 7b4: bdd1 j 688 <vprintf+0x60> putc(fd, c); - 7ac: 85d2 mv a1,s4 - 7ae: 8556 mv a0,s5 - 7b0: 00000097 auipc ra,0x0 - 7b4: da2080e7 jalr -606(ra) # 552 <putc> + 7b6: 85d2 mv a1,s4 + 7b8: 8556 mv a0,s5 + 7ba: 00000097 auipc ra,0x0 + 7be: da2080e7 jalr -606(ra) # 55c <putc> state = 0; - 7b8: 4981 li s3,0 - 7ba: b5d1 j 67e <vprintf+0x60> + 7c2: 4981 li s3,0 + 7c4: b5d1 j 688 <vprintf+0x60> putc(fd, '%'); - 7bc: 85d2 mv a1,s4 - 7be: 8556 mv a0,s5 - 7c0: 00000097 auipc ra,0x0 - 7c4: d92080e7 jalr -622(ra) # 552 <putc> + 7c6: 85d2 mv a1,s4 + 7c8: 8556 mv a0,s5 + 7ca: 00000097 auipc ra,0x0 + 7ce: d92080e7 jalr -622(ra) # 55c <putc> putc(fd, c); - 7c8: 85ca mv a1,s2 - 7ca: 8556 mv a0,s5 - 7cc: 00000097 auipc ra,0x0 - 7d0: d86080e7 jalr -634(ra) # 552 <putc> + 7d2: 85ca mv a1,s2 + 7d4: 8556 mv a0,s5 + 7d6: 00000097 auipc ra,0x0 + 7da: d86080e7 jalr -634(ra) # 55c <putc> state = 0; - 7d4: 4981 li s3,0 - 7d6: b565 j 67e <vprintf+0x60> + 7de: 4981 li s3,0 + 7e0: b565 j 688 <vprintf+0x60> s = va_arg(ap, char*); - 7d8: 8b4a mv s6,s2 + 7e2: 8b4a mv s6,s2 state = 0; - 7da: 4981 li s3,0 - 7dc: b54d j 67e <vprintf+0x60> + 7e4: 4981 li s3,0 + 7e6: b54d j 688 <vprintf+0x60> } } } - 7de: 70e6 ld ra,120(sp) - 7e0: 7446 ld s0,112(sp) - 7e2: 74a6 ld s1,104(sp) - 7e4: 7906 ld s2,96(sp) - 7e6: 69e6 ld s3,88(sp) - 7e8: 6a46 ld s4,80(sp) - 7ea: 6aa6 ld s5,72(sp) - 7ec: 6b06 ld s6,64(sp) - 7ee: 7be2 ld s7,56(sp) - 7f0: 7c42 ld s8,48(sp) - 7f2: 7ca2 ld s9,40(sp) - 7f4: 7d02 ld s10,32(sp) - 7f6: 6de2 ld s11,24(sp) - 7f8: 6109 addi sp,sp,128 - 7fa: 8082 ret - -00000000000007fc <fprintf>: + 7e8: 70e6 ld ra,120(sp) + 7ea: 7446 ld s0,112(sp) + 7ec: 74a6 ld s1,104(sp) + 7ee: 7906 ld s2,96(sp) + 7f0: 69e6 ld s3,88(sp) + 7f2: 6a46 ld s4,80(sp) + 7f4: 6aa6 ld s5,72(sp) + 7f6: 6b06 ld s6,64(sp) + 7f8: 7be2 ld s7,56(sp) + 7fa: 7c42 ld s8,48(sp) + 7fc: 7ca2 ld s9,40(sp) + 7fe: 7d02 ld s10,32(sp) + 800: 6de2 ld s11,24(sp) + 802: 6109 addi sp,sp,128 + 804: 8082 ret + +0000000000000806 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 7fc: 715d addi sp,sp,-80 - 7fe: ec06 sd ra,24(sp) - 800: e822 sd s0,16(sp) - 802: 1000 addi s0,sp,32 - 804: e010 sd a2,0(s0) - 806: e414 sd a3,8(s0) - 808: e818 sd a4,16(s0) - 80a: ec1c sd a5,24(s0) - 80c: 03043023 sd a6,32(s0) - 810: 03143423 sd a7,40(s0) + 806: 715d addi sp,sp,-80 + 808: ec06 sd ra,24(sp) + 80a: e822 sd s0,16(sp) + 80c: 1000 addi s0,sp,32 + 80e: e010 sd a2,0(s0) + 810: e414 sd a3,8(s0) + 812: e818 sd a4,16(s0) + 814: ec1c sd a5,24(s0) + 816: 03043023 sd a6,32(s0) + 81a: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 814: 8622 mv a2,s0 - 816: fe843423 sd s0,-24(s0) + 81e: 8622 mv a2,s0 + 820: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 81a: 00000097 auipc ra,0x0 - 81e: e04080e7 jalr -508(ra) # 61e <vprintf> + 824: 00000097 auipc ra,0x0 + 828: e04080e7 jalr -508(ra) # 628 <vprintf> } - 822: 60e2 ld ra,24(sp) - 824: 6442 ld s0,16(sp) - 826: 6161 addi sp,sp,80 - 828: 8082 ret + 82c: 60e2 ld ra,24(sp) + 82e: 6442 ld s0,16(sp) + 830: 6161 addi sp,sp,80 + 832: 8082 ret -000000000000082a <printf>: +0000000000000834 <printf>: void printf(const char *fmt, ...) { - 82a: 711d addi sp,sp,-96 - 82c: ec06 sd ra,24(sp) - 82e: e822 sd s0,16(sp) - 830: 1000 addi s0,sp,32 - 832: e40c sd a1,8(s0) - 834: e810 sd a2,16(s0) - 836: ec14 sd a3,24(s0) - 838: f018 sd a4,32(s0) - 83a: f41c sd a5,40(s0) - 83c: 03043823 sd a6,48(s0) - 840: 03143c23 sd a7,56(s0) + 834: 711d addi sp,sp,-96 + 836: ec06 sd ra,24(sp) + 838: e822 sd s0,16(sp) + 83a: 1000 addi s0,sp,32 + 83c: e40c sd a1,8(s0) + 83e: e810 sd a2,16(s0) + 840: ec14 sd a3,24(s0) + 842: f018 sd a4,32(s0) + 844: f41c sd a5,40(s0) + 846: 03043823 sd a6,48(s0) + 84a: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 844: 00840613 addi a2,s0,8 - 848: fec43423 sd a2,-24(s0) + 84e: 00840613 addi a2,s0,8 + 852: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 84c: 85aa mv a1,a0 - 84e: 4505 li a0,1 - 850: 00000097 auipc ra,0x0 - 854: dce080e7 jalr -562(ra) # 61e <vprintf> + 856: 85aa mv a1,a0 + 858: 4505 li a0,1 + 85a: 00000097 auipc ra,0x0 + 85e: dce080e7 jalr -562(ra) # 628 <vprintf> } - 858: 60e2 ld ra,24(sp) - 85a: 6442 ld s0,16(sp) - 85c: 6125 addi sp,sp,96 - 85e: 8082 ret + 862: 60e2 ld ra,24(sp) + 864: 6442 ld s0,16(sp) + 866: 6125 addi sp,sp,96 + 868: 8082 ret -0000000000000860 <free>: +000000000000086a <free>: static Header base; static Header *freep; void free(void *ap) { - 860: 1141 addi sp,sp,-16 - 862: e422 sd s0,8(sp) - 864: 0800 addi s0,sp,16 + 86a: 1141 addi sp,sp,-16 + 86c: e422 sd s0,8(sp) + 86e: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 866: ff050693 addi a3,a0,-16 + 870: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 86a: 00000797 auipc a5,0x0 - 86e: 2867b783 ld a5,646(a5) # af0 <freep> - 872: a02d j 89c <free+0x3c> + 874: 00000797 auipc a5,0x0 + 878: 2847b783 ld a5,644(a5) # af8 <freep> + 87c: a02d j 8a6 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 874: 4618 lw a4,8(a2) - 876: 9f2d addw a4,a4,a1 - 878: fee52c23 sw a4,-8(a0) + 87e: 4618 lw a4,8(a2) + 880: 9f2d addw a4,a4,a1 + 882: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 87c: 6398 ld a4,0(a5) - 87e: 6310 ld a2,0(a4) - 880: a83d j 8be <free+0x5e> + 886: 6398 ld a4,0(a5) + 888: 6310 ld a2,0(a4) + 88a: a83d j 8c8 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 882: ff852703 lw a4,-8(a0) - 886: 9f31 addw a4,a4,a2 - 888: c798 sw a4,8(a5) + 88c: ff852703 lw a4,-8(a0) + 890: 9f31 addw a4,a4,a2 + 892: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 88a: ff053683 ld a3,-16(a0) - 88e: a091 j 8d2 <free+0x72> + 894: ff053683 ld a3,-16(a0) + 898: a091 j 8dc <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 890: 6398 ld a4,0(a5) - 892: 00e7e463 bltu a5,a4,89a <free+0x3a> - 896: 00e6ea63 bltu a3,a4,8aa <free+0x4a> + 89a: 6398 ld a4,0(a5) + 89c: 00e7e463 bltu a5,a4,8a4 <free+0x3a> + 8a0: 00e6ea63 bltu a3,a4,8b4 <free+0x4a> { - 89a: 87ba mv a5,a4 + 8a4: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 89c: fed7fae3 bgeu a5,a3,890 <free+0x30> - 8a0: 6398 ld a4,0(a5) - 8a2: 00e6e463 bltu a3,a4,8aa <free+0x4a> + 8a6: fed7fae3 bgeu a5,a3,89a <free+0x30> + 8aa: 6398 ld a4,0(a5) + 8ac: 00e6e463 bltu a3,a4,8b4 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 8a6: fee7eae3 bltu a5,a4,89a <free+0x3a> + 8b0: fee7eae3 bltu a5,a4,8a4 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 8aa: ff852583 lw a1,-8(a0) - 8ae: 6390 ld a2,0(a5) - 8b0: 02059813 slli a6,a1,0x20 - 8b4: 01c85713 srli a4,a6,0x1c - 8b8: 9736 add a4,a4,a3 - 8ba: fae60de3 beq a2,a4,874 <free+0x14> + 8b4: ff852583 lw a1,-8(a0) + 8b8: 6390 ld a2,0(a5) + 8ba: 02059813 slli a6,a1,0x20 + 8be: 01c85713 srli a4,a6,0x1c + 8c2: 9736 add a4,a4,a3 + 8c4: fae60de3 beq a2,a4,87e <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 8be: fec53823 sd a2,-16(a0) + 8c8: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 8c2: 4790 lw a2,8(a5) - 8c4: 02061593 slli a1,a2,0x20 - 8c8: 01c5d713 srli a4,a1,0x1c - 8cc: 973e add a4,a4,a5 - 8ce: fae68ae3 beq a3,a4,882 <free+0x22> + 8cc: 4790 lw a2,8(a5) + 8ce: 02061593 slli a1,a2,0x20 + 8d2: 01c5d713 srli a4,a1,0x1c + 8d6: 973e add a4,a4,a5 + 8d8: fae68ae3 beq a3,a4,88c <free+0x22> p->s.ptr = bp->s.ptr; - 8d2: e394 sd a3,0(a5) + 8dc: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 8d4: 00000717 auipc a4,0x0 - 8d8: 20f73e23 sd a5,540(a4) # af0 <freep> + 8de: 00000717 auipc a4,0x0 + 8e2: 20f73d23 sd a5,538(a4) # af8 <freep> } - 8dc: 6422 ld s0,8(sp) - 8de: 0141 addi sp,sp,16 - 8e0: 8082 ret + 8e6: 6422 ld s0,8(sp) + 8e8: 0141 addi sp,sp,16 + 8ea: 8082 ret -00000000000008e2 <malloc>: +00000000000008ec <malloc>: return freep; } void* malloc(uint nbytes) { - 8e2: 7139 addi sp,sp,-64 - 8e4: fc06 sd ra,56(sp) - 8e6: f822 sd s0,48(sp) - 8e8: f426 sd s1,40(sp) - 8ea: f04a sd s2,32(sp) - 8ec: ec4e sd s3,24(sp) - 8ee: e852 sd s4,16(sp) - 8f0: e456 sd s5,8(sp) - 8f2: e05a sd s6,0(sp) - 8f4: 0080 addi s0,sp,64 + 8ec: 7139 addi sp,sp,-64 + 8ee: fc06 sd ra,56(sp) + 8f0: f822 sd s0,48(sp) + 8f2: f426 sd s1,40(sp) + 8f4: f04a sd s2,32(sp) + 8f6: ec4e sd s3,24(sp) + 8f8: e852 sd s4,16(sp) + 8fa: e456 sd s5,8(sp) + 8fc: e05a sd s6,0(sp) + 8fe: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 8f6: 02051493 slli s1,a0,0x20 - 8fa: 9081 srli s1,s1,0x20 - 8fc: 04bd addi s1,s1,15 - 8fe: 8091 srli s1,s1,0x4 - 900: 00148a1b addiw s4,s1,1 - 904: 0485 addi s1,s1,1 + 900: 02051493 slli s1,a0,0x20 + 904: 9081 srli s1,s1,0x20 + 906: 04bd addi s1,s1,15 + 908: 8091 srli s1,s1,0x4 + 90a: 00148a1b addiw s4,s1,1 + 90e: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 906: 00000517 auipc a0,0x0 - 90a: 1ea53503 ld a0,490(a0) # af0 <freep> - 90e: c515 beqz a0,93a <malloc+0x58> + 910: 00000517 auipc a0,0x0 + 914: 1e853503 ld a0,488(a0) # af8 <freep> + 918: c515 beqz a0,944 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 910: 611c ld a5,0(a0) + 91a: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 912: 4798 lw a4,8(a5) - 914: 04977163 bgeu a4,s1,956 <malloc+0x74> - 918: 89d2 mv s3,s4 - 91a: 000a071b sext.w a4,s4 - 91e: 6685 lui a3,0x1 - 920: 00d77363 bgeu a4,a3,926 <malloc+0x44> - 924: 6985 lui s3,0x1 - 926: 00098b1b sext.w s6,s3 + 91c: 4798 lw a4,8(a5) + 91e: 04977163 bgeu a4,s1,960 <malloc+0x74> + 922: 89d2 mv s3,s4 + 924: 000a071b sext.w a4,s4 + 928: 6685 lui a3,0x1 + 92a: 00d77363 bgeu a4,a3,930 <malloc+0x44> + 92e: 6985 lui s3,0x1 + 930: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 92a: 0049999b slliw s3,s3,0x4 + 934: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 92e: 00000917 auipc s2,0x0 - 932: 1c290913 addi s2,s2,450 # af0 <freep> + 938: 00000917 auipc s2,0x0 + 93c: 1c090913 addi s2,s2,448 # af8 <freep> if(p == (char*)-1) - 936: 5afd li s5,-1 - 938: a8a5 j 9b0 <malloc+0xce> + 940: 5afd li s5,-1 + 942: a8a5 j 9ba <malloc+0xce> base.s.ptr = freep = prevp = &base; - 93a: 00000797 auipc a5,0x0 - 93e: 1b678793 addi a5,a5,438 # af0 <freep> - 942: 00000717 auipc a4,0x0 - 946: 1b670713 addi a4,a4,438 # af8 <base> - 94a: e398 sd a4,0(a5) - 94c: e798 sd a4,8(a5) + 944: 00000797 auipc a5,0x0 + 948: 1b478793 addi a5,a5,436 # af8 <freep> + 94c: 00000717 auipc a4,0x0 + 950: 1b470713 addi a4,a4,436 # b00 <base> + 954: e398 sd a4,0(a5) + 956: e798 sd a4,8(a5) base.s.size = 0; - 94e: 0007a823 sw zero,16(a5) + 958: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 952: 87ba mv a5,a4 - 954: b7d1 j 918 <malloc+0x36> + 95c: 87ba mv a5,a4 + 95e: b7d1 j 922 <malloc+0x36> if(p->s.size == nunits) - 956: 02e48c63 beq s1,a4,98e <malloc+0xac> + 960: 02e48c63 beq s1,a4,998 <malloc+0xac> p->s.size -= nunits; - 95a: 4147073b subw a4,a4,s4 - 95e: c798 sw a4,8(a5) + 964: 4147073b subw a4,a4,s4 + 968: c798 sw a4,8(a5) p += p->s.size; - 960: 02071693 slli a3,a4,0x20 - 964: 01c6d713 srli a4,a3,0x1c - 968: 97ba add a5,a5,a4 + 96a: 02071693 slli a3,a4,0x20 + 96e: 01c6d713 srli a4,a3,0x1c + 972: 97ba add a5,a5,a4 p->s.size = nunits; - 96a: 0147a423 sw s4,8(a5) + 974: 0147a423 sw s4,8(a5) freep = prevp; - 96e: 00000717 auipc a4,0x0 - 972: 18a73123 sd a0,386(a4) # af0 <freep> + 978: 00000717 auipc a4,0x0 + 97c: 18a73023 sd a0,384(a4) # af8 <freep> return (void*)(p + 1); - 976: 01078513 addi a0,a5,16 + 980: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 97a: 70e2 ld ra,56(sp) - 97c: 7442 ld s0,48(sp) - 97e: 74a2 ld s1,40(sp) - 980: 7902 ld s2,32(sp) - 982: 69e2 ld s3,24(sp) - 984: 6a42 ld s4,16(sp) - 986: 6aa2 ld s5,8(sp) - 988: 6b02 ld s6,0(sp) - 98a: 6121 addi sp,sp,64 - 98c: 8082 ret + 984: 70e2 ld ra,56(sp) + 986: 7442 ld s0,48(sp) + 988: 74a2 ld s1,40(sp) + 98a: 7902 ld s2,32(sp) + 98c: 69e2 ld s3,24(sp) + 98e: 6a42 ld s4,16(sp) + 990: 6aa2 ld s5,8(sp) + 992: 6b02 ld s6,0(sp) + 994: 6121 addi sp,sp,64 + 996: 8082 ret prevp->s.ptr = p->s.ptr; - 98e: 6398 ld a4,0(a5) - 990: e118 sd a4,0(a0) - 992: bff1 j 96e <malloc+0x8c> + 998: 6398 ld a4,0(a5) + 99a: e118 sd a4,0(a0) + 99c: bff1 j 978 <malloc+0x8c> hp->s.size = nu; - 994: 01652423 sw s6,8(a0) + 99e: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 998: 0541 addi a0,a0,16 - 99a: 00000097 auipc ra,0x0 - 99e: ec6080e7 jalr -314(ra) # 860 <free> + 9a2: 0541 addi a0,a0,16 + 9a4: 00000097 auipc ra,0x0 + 9a8: ec6080e7 jalr -314(ra) # 86a <free> return freep; - 9a2: 00093503 ld a0,0(s2) + 9ac: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 9a6: d971 beqz a0,97a <malloc+0x98> + 9b0: d971 beqz a0,984 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 9a8: 611c ld a5,0(a0) + 9b2: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 9aa: 4798 lw a4,8(a5) - 9ac: fa9775e3 bgeu a4,s1,956 <malloc+0x74> + 9b4: 4798 lw a4,8(a5) + 9b6: fa9775e3 bgeu a4,s1,960 <malloc+0x74> if(p == freep) - 9b0: 00093703 ld a4,0(s2) - 9b4: 853e mv a0,a5 - 9b6: fef719e3 bne a4,a5,9a8 <malloc+0xc6> + 9ba: 00093703 ld a4,0(s2) + 9be: 853e mv a0,a5 + 9c0: fef719e3 bne a4,a5,9b2 <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 9ba: 854e mv a0,s3 - 9bc: 00000097 auipc ra,0x0 - 9c0: b2a080e7 jalr -1238(ra) # 4e6 <sbrk> + 9c4: 854e mv a0,s3 + 9c6: 00000097 auipc ra,0x0 + 9ca: b20080e7 jalr -1248(ra) # 4e6 <sbrk> if(p == (char*)-1) - 9c4: fd5518e3 bne a0,s5,994 <malloc+0xb2> + 9ce: fd5518e3 bne a0,s5,99e <malloc+0xb2> return 0; - 9c8: 4501 li a0,0 - 9ca: bf45 j 97a <malloc+0x98> + 9d2: 4501 li a0,0 + 9d4: bf45 j 984 <malloc+0x98> diff --git a/xv6-user/mv.sym b/xv6-user/mv.sym index 92532f9..54de9c3 100644 --- a/xv6-user/mv.sym +++ b/xv6-user/mv.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -00000000000009d0 .rodata -0000000000000af0 .bss +00000000000009d8 .rodata +0000000000000af8 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,23 +16,24 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -0000000000000552 putc -0000000000000574 printint -0000000000000ad8 digits +000000000000055c putc +000000000000057e printint +0000000000000ae0 digits 0000000000000000 umalloc.c -0000000000000af0 freep -0000000000000af8 base +0000000000000af8 freep +0000000000000b00 base 00000000000001aa strcpy -000000000000082a printf -00000000000012e9 __global_pointer$ +0000000000000834 printf +00000000000012f1 __global_pointer$ 0000000000000506 dev 00000000000003b0 memmove +0000000000000552 times 0000000000000526 trace 0000000000000290 gets -0000000000000ae9 __SDATA_BEGIN__ +0000000000000af1 __SDATA_BEGIN__ 00000000000004dc getpid 0000000000000442 memcpy -00000000000008e2 malloc +00000000000008ec malloc 000000000000051e remove 00000000000004ee sleep 000000000000052e sysinfo @@ -42,31 +43,31 @@ 0000000000000536 rename 0000000000000488 write 00000000000004b6 fstat -00000000000007fc fprintf +0000000000000806 fprintf 000000000000049c kill 00000000000001c6 strcat -000000000000061e vprintf +0000000000000628 vprintf 00000000000004ca chdir 00000000000004a4 exec 000000000000046c wait 000000000000047e read 0000000000000408 memcmp 000000000000045a fork -0000000000000b08 __BSS_END__ +0000000000000b10 __BSS_END__ 00000000000004e6 sbrk 00000000000004fe test_proc 00000000000004f6 uptime -0000000000000ae9 __bss_start +0000000000000af1 __bss_start 000000000000024a memset 0000000000000000 main 00000000000001f4 strcmp 000000000000053e shutdown 00000000000004d4 dup 0000000000000516 getcwd -0000000000000ae9 __DATA_BEGIN__ +0000000000000af1 __DATA_BEGIN__ 000000000000030a stat -0000000000000ae9 _edata -0000000000000b08 _end +0000000000000af1 _edata +0000000000000b10 _end 0000000000000462 exit 0000000000000350 atoi 0000000000000220 strlen @@ -74,4 +75,4 @@ 000000000000026c strchr 00000000000004c0 mkdir 0000000000000492 close -0000000000000860 free +000000000000086a free diff --git a/xv6-user/rm.asm b/xv6-user/rm.asm index 00d8e9e..248fc6b 100644 --- a/xv6-user/rm.asm +++ b/xv6-user/rm.asm @@ -36,14 +36,14 @@ main(int argc, char *argv[]) if(remove(argv[i]) < 0){ fprintf(2, "rm: %s failed to delete\n", argv[i]); 28: 00001997 auipc s3,0x1 - 2c: 89098993 addi s3,s3,-1904 # 8b8 <malloc+0x104> + 2c: 89898993 addi s3,s3,-1896 # 8c0 <malloc+0x102> 30: a015 j 54 <main+0x54> fprintf(2, "Usage: rm files...\n"); 32: 00001597 auipc a1,0x1 - 36: 86e58593 addi a1,a1,-1938 # 8a0 <malloc+0xec> + 36: 87658593 addi a1,a1,-1930 # 8a8 <malloc+0xea> 3a: 4509 li a0,2 3c: 00000097 auipc ra,0x0 - 40: 692080e7 jalr 1682(ra) # 6ce <fprintf> + 40: 69c080e7 jalr 1692(ra) # 6d8 <fprintf> exit(1); 44: 4505 li a0,1 46: 00000097 auipc ra,0x0 @@ -61,7 +61,7 @@ main(int argc, char *argv[]) 64: 85ce mv a1,s3 66: 4509 li a0,2 68: 00000097 auipc ra,0x0 - 6c: 666080e7 jalr 1638(ra) # 6ce <fprintf> + 6c: 670080e7 jalr 1648(ra) # 6d8 <fprintf> 70: bff9 j 4e <main+0x4e> } } @@ -827,637 +827,647 @@ uname: ret 422: 8082 ret -0000000000000424 <putc>: +0000000000000424 <times>: +.global times +times: + li a7, SYS_times + 424: 09900893 li a7,153 + ecall + 428: 00000073 ecall + ret + 42c: 8082 ret + +000000000000042e <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 424: 1101 addi sp,sp,-32 - 426: ec06 sd ra,24(sp) - 428: e822 sd s0,16(sp) - 42a: 1000 addi s0,sp,32 - 42c: feb407a3 sb a1,-17(s0) + 42e: 1101 addi sp,sp,-32 + 430: ec06 sd ra,24(sp) + 432: e822 sd s0,16(sp) + 434: 1000 addi s0,sp,32 + 436: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 430: 4605 li a2,1 - 432: fef40593 addi a1,s0,-17 - 436: 00000097 auipc ra,0x0 - 43a: f24080e7 jalr -220(ra) # 35a <write> + 43a: 4605 li a2,1 + 43c: fef40593 addi a1,s0,-17 + 440: 00000097 auipc ra,0x0 + 444: f1a080e7 jalr -230(ra) # 35a <write> } - 43e: 60e2 ld ra,24(sp) - 440: 6442 ld s0,16(sp) - 442: 6105 addi sp,sp,32 - 444: 8082 ret + 448: 60e2 ld ra,24(sp) + 44a: 6442 ld s0,16(sp) + 44c: 6105 addi sp,sp,32 + 44e: 8082 ret -0000000000000446 <printint>: +0000000000000450 <printint>: static void printint(int fd, int xx, int base, int sgn) { - 446: 7139 addi sp,sp,-64 - 448: fc06 sd ra,56(sp) - 44a: f822 sd s0,48(sp) - 44c: f426 sd s1,40(sp) - 44e: f04a sd s2,32(sp) - 450: ec4e sd s3,24(sp) - 452: 0080 addi s0,sp,64 - 454: 84aa mv s1,a0 + 450: 7139 addi sp,sp,-64 + 452: fc06 sd ra,56(sp) + 454: f822 sd s0,48(sp) + 456: f426 sd s1,40(sp) + 458: f04a sd s2,32(sp) + 45a: ec4e sd s3,24(sp) + 45c: 0080 addi s0,sp,64 + 45e: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 456: c299 beqz a3,45c <printint+0x16> - 458: 0805c863 bltz a1,4e8 <printint+0xa2> + 460: c299 beqz a3,466 <printint+0x16> + 462: 0805c863 bltz a1,4f2 <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 45c: 2581 sext.w a1,a1 + 466: 2581 sext.w a1,a1 neg = 0; - 45e: 4881 li a7,0 + 468: 4881 li a7,0 } i = 0; - 460: fc040993 addi s3,s0,-64 + 46a: fc040993 addi s3,s0,-64 neg = 0; - 464: 86ce mv a3,s3 + 46e: 86ce mv a3,s3 i = 0; - 466: 4701 li a4,0 + 470: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 468: 2601 sext.w a2,a2 - 46a: 00000517 auipc a0,0x0 - 46e: 4ce50513 addi a0,a0,1230 # 938 <digits> - 472: 883a mv a6,a4 - 474: 2705 addiw a4,a4,1 - 476: 02c5f7bb remuw a5,a1,a2 - 47a: 1782 slli a5,a5,0x20 - 47c: 9381 srli a5,a5,0x20 - 47e: 97aa add a5,a5,a0 - 480: 0007c783 lbu a5,0(a5) - 484: 00f68023 sb a5,0(a3) + 472: 2601 sext.w a2,a2 + 474: 00000517 auipc a0,0x0 + 478: 4cc50513 addi a0,a0,1228 # 940 <digits> + 47c: 883a mv a6,a4 + 47e: 2705 addiw a4,a4,1 + 480: 02c5f7bb remuw a5,a1,a2 + 484: 1782 slli a5,a5,0x20 + 486: 9381 srli a5,a5,0x20 + 488: 97aa add a5,a5,a0 + 48a: 0007c783 lbu a5,0(a5) + 48e: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 488: 0005879b sext.w a5,a1 - 48c: 02c5d5bb divuw a1,a1,a2 - 490: 0685 addi a3,a3,1 - 492: fec7f0e3 bgeu a5,a2,472 <printint+0x2c> + 492: 0005879b sext.w a5,a1 + 496: 02c5d5bb divuw a1,a1,a2 + 49a: 0685 addi a3,a3,1 + 49c: fec7f0e3 bgeu a5,a2,47c <printint+0x2c> if(neg) - 496: 00088c63 beqz a7,4ae <printint+0x68> + 4a0: 00088c63 beqz a7,4b8 <printint+0x68> buf[i++] = '-'; - 49a: fd070793 addi a5,a4,-48 - 49e: 00878733 add a4,a5,s0 - 4a2: 02d00793 li a5,45 - 4a6: fef70823 sb a5,-16(a4) - 4aa: 0028071b addiw a4,a6,2 + 4a4: fd070793 addi a5,a4,-48 + 4a8: 00878733 add a4,a5,s0 + 4ac: 02d00793 li a5,45 + 4b0: fef70823 sb a5,-16(a4) + 4b4: 0028071b addiw a4,a6,2 while(--i >= 0) - 4ae: 02e05663 blez a4,4da <printint+0x94> - 4b2: fc040913 addi s2,s0,-64 - 4b6: 993a add s2,s2,a4 - 4b8: 19fd addi s3,s3,-1 - 4ba: 99ba add s3,s3,a4 - 4bc: 377d addiw a4,a4,-1 - 4be: 1702 slli a4,a4,0x20 - 4c0: 9301 srli a4,a4,0x20 - 4c2: 40e989b3 sub s3,s3,a4 + 4b8: 02e05663 blez a4,4e4 <printint+0x94> + 4bc: fc040913 addi s2,s0,-64 + 4c0: 993a add s2,s2,a4 + 4c2: 19fd addi s3,s3,-1 + 4c4: 99ba add s3,s3,a4 + 4c6: 377d addiw a4,a4,-1 + 4c8: 1702 slli a4,a4,0x20 + 4ca: 9301 srli a4,a4,0x20 + 4cc: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 4c6: fff94583 lbu a1,-1(s2) - 4ca: 8526 mv a0,s1 - 4cc: 00000097 auipc ra,0x0 - 4d0: f58080e7 jalr -168(ra) # 424 <putc> + 4d0: fff94583 lbu a1,-1(s2) + 4d4: 8526 mv a0,s1 + 4d6: 00000097 auipc ra,0x0 + 4da: f58080e7 jalr -168(ra) # 42e <putc> while(--i >= 0) - 4d4: 197d addi s2,s2,-1 - 4d6: ff3918e3 bne s2,s3,4c6 <printint+0x80> + 4de: 197d addi s2,s2,-1 + 4e0: ff3918e3 bne s2,s3,4d0 <printint+0x80> } - 4da: 70e2 ld ra,56(sp) - 4dc: 7442 ld s0,48(sp) - 4de: 74a2 ld s1,40(sp) - 4e0: 7902 ld s2,32(sp) - 4e2: 69e2 ld s3,24(sp) - 4e4: 6121 addi sp,sp,64 - 4e6: 8082 ret + 4e4: 70e2 ld ra,56(sp) + 4e6: 7442 ld s0,48(sp) + 4e8: 74a2 ld s1,40(sp) + 4ea: 7902 ld s2,32(sp) + 4ec: 69e2 ld s3,24(sp) + 4ee: 6121 addi sp,sp,64 + 4f0: 8082 ret x = -xx; - 4e8: 40b005bb negw a1,a1 + 4f2: 40b005bb negw a1,a1 neg = 1; - 4ec: 4885 li a7,1 + 4f6: 4885 li a7,1 x = -xx; - 4ee: bf8d j 460 <printint+0x1a> + 4f8: bf8d j 46a <printint+0x1a> -00000000000004f0 <vprintf>: +00000000000004fa <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 4f0: 7119 addi sp,sp,-128 - 4f2: fc86 sd ra,120(sp) - 4f4: f8a2 sd s0,112(sp) - 4f6: f4a6 sd s1,104(sp) - 4f8: f0ca sd s2,96(sp) - 4fa: ecce sd s3,88(sp) - 4fc: e8d2 sd s4,80(sp) - 4fe: e4d6 sd s5,72(sp) - 500: e0da sd s6,64(sp) - 502: fc5e sd s7,56(sp) - 504: f862 sd s8,48(sp) - 506: f466 sd s9,40(sp) - 508: f06a sd s10,32(sp) - 50a: ec6e sd s11,24(sp) - 50c: 0100 addi s0,sp,128 + 4fa: 7119 addi sp,sp,-128 + 4fc: fc86 sd ra,120(sp) + 4fe: f8a2 sd s0,112(sp) + 500: f4a6 sd s1,104(sp) + 502: f0ca sd s2,96(sp) + 504: ecce sd s3,88(sp) + 506: e8d2 sd s4,80(sp) + 508: e4d6 sd s5,72(sp) + 50a: e0da sd s6,64(sp) + 50c: fc5e sd s7,56(sp) + 50e: f862 sd s8,48(sp) + 510: f466 sd s9,40(sp) + 512: f06a sd s10,32(sp) + 514: ec6e sd s11,24(sp) + 516: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 50e: 0005c903 lbu s2,0(a1) - 512: 18090f63 beqz s2,6b0 <vprintf+0x1c0> - 516: 8aaa mv s5,a0 - 518: 8b32 mv s6,a2 - 51a: 00158493 addi s1,a1,1 + 518: 0005c903 lbu s2,0(a1) + 51c: 18090f63 beqz s2,6ba <vprintf+0x1c0> + 520: 8aaa mv s5,a0 + 522: 8b32 mv s6,a2 + 524: 00158493 addi s1,a1,1 state = 0; - 51e: 4981 li s3,0 + 528: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 520: 02500a13 li s4,37 - 524: 4c55 li s8,21 - 526: 00000c97 auipc s9,0x0 - 52a: 3bac8c93 addi s9,s9,954 # 8e0 <malloc+0x12c> + 52a: 02500a13 li s4,37 + 52e: 4c55 li s8,21 + 530: 00000c97 auipc s9,0x0 + 534: 3b8c8c93 addi s9,s9,952 # 8e8 <malloc+0x12a> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 52e: 02800d93 li s11,40 + 538: 02800d93 li s11,40 putc(fd, 'x'); - 532: 4d41 li s10,16 + 53c: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 534: 00000b97 auipc s7,0x0 - 538: 404b8b93 addi s7,s7,1028 # 938 <digits> - 53c: a839 j 55a <vprintf+0x6a> + 53e: 00000b97 auipc s7,0x0 + 542: 402b8b93 addi s7,s7,1026 # 940 <digits> + 546: a839 j 564 <vprintf+0x6a> putc(fd, c); - 53e: 85ca mv a1,s2 - 540: 8556 mv a0,s5 - 542: 00000097 auipc ra,0x0 - 546: ee2080e7 jalr -286(ra) # 424 <putc> - 54a: a019 j 550 <vprintf+0x60> + 548: 85ca mv a1,s2 + 54a: 8556 mv a0,s5 + 54c: 00000097 auipc ra,0x0 + 550: ee2080e7 jalr -286(ra) # 42e <putc> + 554: a019 j 55a <vprintf+0x60> } else if(state == '%'){ - 54c: 01498d63 beq s3,s4,566 <vprintf+0x76> + 556: 01498d63 beq s3,s4,570 <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 550: 0485 addi s1,s1,1 - 552: fff4c903 lbu s2,-1(s1) - 556: 14090d63 beqz s2,6b0 <vprintf+0x1c0> + 55a: 0485 addi s1,s1,1 + 55c: fff4c903 lbu s2,-1(s1) + 560: 14090d63 beqz s2,6ba <vprintf+0x1c0> if(state == 0){ - 55a: fe0999e3 bnez s3,54c <vprintf+0x5c> + 564: fe0999e3 bnez s3,556 <vprintf+0x5c> if(c == '%'){ - 55e: ff4910e3 bne s2,s4,53e <vprintf+0x4e> + 568: ff4910e3 bne s2,s4,548 <vprintf+0x4e> state = '%'; - 562: 89d2 mv s3,s4 - 564: b7f5 j 550 <vprintf+0x60> + 56c: 89d2 mv s3,s4 + 56e: b7f5 j 55a <vprintf+0x60> if(c == 'd'){ - 566: 11490c63 beq s2,s4,67e <vprintf+0x18e> - 56a: f9d9079b addiw a5,s2,-99 - 56e: 0ff7f793 zext.b a5,a5 - 572: 10fc6e63 bltu s8,a5,68e <vprintf+0x19e> - 576: f9d9079b addiw a5,s2,-99 - 57a: 0ff7f713 zext.b a4,a5 - 57e: 10ec6863 bltu s8,a4,68e <vprintf+0x19e> - 582: 00271793 slli a5,a4,0x2 - 586: 97e6 add a5,a5,s9 - 588: 439c lw a5,0(a5) - 58a: 97e6 add a5,a5,s9 - 58c: 8782 jr a5 + 570: 11490c63 beq s2,s4,688 <vprintf+0x18e> + 574: f9d9079b addiw a5,s2,-99 + 578: 0ff7f793 zext.b a5,a5 + 57c: 10fc6e63 bltu s8,a5,698 <vprintf+0x19e> + 580: f9d9079b addiw a5,s2,-99 + 584: 0ff7f713 zext.b a4,a5 + 588: 10ec6863 bltu s8,a4,698 <vprintf+0x19e> + 58c: 00271793 slli a5,a4,0x2 + 590: 97e6 add a5,a5,s9 + 592: 439c lw a5,0(a5) + 594: 97e6 add a5,a5,s9 + 596: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 58e: 008b0913 addi s2,s6,8 - 592: 4685 li a3,1 - 594: 4629 li a2,10 - 596: 000b2583 lw a1,0(s6) - 59a: 8556 mv a0,s5 - 59c: 00000097 auipc ra,0x0 - 5a0: eaa080e7 jalr -342(ra) # 446 <printint> - 5a4: 8b4a mv s6,s2 + 598: 008b0913 addi s2,s6,8 + 59c: 4685 li a3,1 + 59e: 4629 li a2,10 + 5a0: 000b2583 lw a1,0(s6) + 5a4: 8556 mv a0,s5 + 5a6: 00000097 auipc ra,0x0 + 5aa: eaa080e7 jalr -342(ra) # 450 <printint> + 5ae: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 5a6: 4981 li s3,0 - 5a8: b765 j 550 <vprintf+0x60> + 5b0: 4981 li s3,0 + 5b2: b765 j 55a <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 5aa: 008b0913 addi s2,s6,8 - 5ae: 4681 li a3,0 - 5b0: 4629 li a2,10 - 5b2: 000b2583 lw a1,0(s6) - 5b6: 8556 mv a0,s5 - 5b8: 00000097 auipc ra,0x0 - 5bc: e8e080e7 jalr -370(ra) # 446 <printint> - 5c0: 8b4a mv s6,s2 + 5b4: 008b0913 addi s2,s6,8 + 5b8: 4681 li a3,0 + 5ba: 4629 li a2,10 + 5bc: 000b2583 lw a1,0(s6) + 5c0: 8556 mv a0,s5 + 5c2: 00000097 auipc ra,0x0 + 5c6: e8e080e7 jalr -370(ra) # 450 <printint> + 5ca: 8b4a mv s6,s2 state = 0; - 5c2: 4981 li s3,0 - 5c4: b771 j 550 <vprintf+0x60> + 5cc: 4981 li s3,0 + 5ce: b771 j 55a <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 5c6: 008b0913 addi s2,s6,8 - 5ca: 4681 li a3,0 - 5cc: 866a mv a2,s10 - 5ce: 000b2583 lw a1,0(s6) - 5d2: 8556 mv a0,s5 - 5d4: 00000097 auipc ra,0x0 - 5d8: e72080e7 jalr -398(ra) # 446 <printint> - 5dc: 8b4a mv s6,s2 + 5d0: 008b0913 addi s2,s6,8 + 5d4: 4681 li a3,0 + 5d6: 866a mv a2,s10 + 5d8: 000b2583 lw a1,0(s6) + 5dc: 8556 mv a0,s5 + 5de: 00000097 auipc ra,0x0 + 5e2: e72080e7 jalr -398(ra) # 450 <printint> + 5e6: 8b4a mv s6,s2 state = 0; - 5de: 4981 li s3,0 - 5e0: bf85 j 550 <vprintf+0x60> + 5e8: 4981 li s3,0 + 5ea: bf85 j 55a <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 5e2: 008b0793 addi a5,s6,8 - 5e6: f8f43423 sd a5,-120(s0) - 5ea: 000b3983 ld s3,0(s6) + 5ec: 008b0793 addi a5,s6,8 + 5f0: f8f43423 sd a5,-120(s0) + 5f4: 000b3983 ld s3,0(s6) putc(fd, '0'); - 5ee: 03000593 li a1,48 - 5f2: 8556 mv a0,s5 - 5f4: 00000097 auipc ra,0x0 - 5f8: e30080e7 jalr -464(ra) # 424 <putc> + 5f8: 03000593 li a1,48 + 5fc: 8556 mv a0,s5 + 5fe: 00000097 auipc ra,0x0 + 602: e30080e7 jalr -464(ra) # 42e <putc> putc(fd, 'x'); - 5fc: 07800593 li a1,120 - 600: 8556 mv a0,s5 - 602: 00000097 auipc ra,0x0 - 606: e22080e7 jalr -478(ra) # 424 <putc> - 60a: 896a mv s2,s10 + 606: 07800593 li a1,120 + 60a: 8556 mv a0,s5 + 60c: 00000097 auipc ra,0x0 + 610: e22080e7 jalr -478(ra) # 42e <putc> + 614: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 60c: 03c9d793 srli a5,s3,0x3c - 610: 97de add a5,a5,s7 - 612: 0007c583 lbu a1,0(a5) - 616: 8556 mv a0,s5 - 618: 00000097 auipc ra,0x0 - 61c: e0c080e7 jalr -500(ra) # 424 <putc> + 616: 03c9d793 srli a5,s3,0x3c + 61a: 97de add a5,a5,s7 + 61c: 0007c583 lbu a1,0(a5) + 620: 8556 mv a0,s5 + 622: 00000097 auipc ra,0x0 + 626: e0c080e7 jalr -500(ra) # 42e <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 620: 0992 slli s3,s3,0x4 - 622: 397d addiw s2,s2,-1 - 624: fe0914e3 bnez s2,60c <vprintf+0x11c> + 62a: 0992 slli s3,s3,0x4 + 62c: 397d addiw s2,s2,-1 + 62e: fe0914e3 bnez s2,616 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 628: f8843b03 ld s6,-120(s0) + 632: f8843b03 ld s6,-120(s0) state = 0; - 62c: 4981 li s3,0 - 62e: b70d j 550 <vprintf+0x60> + 636: 4981 li s3,0 + 638: b70d j 55a <vprintf+0x60> s = va_arg(ap, char*); - 630: 008b0913 addi s2,s6,8 - 634: 000b3983 ld s3,0(s6) + 63a: 008b0913 addi s2,s6,8 + 63e: 000b3983 ld s3,0(s6) if(s == 0) - 638: 02098163 beqz s3,65a <vprintf+0x16a> + 642: 02098163 beqz s3,664 <vprintf+0x16a> while(*s != 0){ - 63c: 0009c583 lbu a1,0(s3) - 640: c5ad beqz a1,6aa <vprintf+0x1ba> + 646: 0009c583 lbu a1,0(s3) + 64a: c5ad beqz a1,6b4 <vprintf+0x1ba> putc(fd, *s); - 642: 8556 mv a0,s5 - 644: 00000097 auipc ra,0x0 - 648: de0080e7 jalr -544(ra) # 424 <putc> + 64c: 8556 mv a0,s5 + 64e: 00000097 auipc ra,0x0 + 652: de0080e7 jalr -544(ra) # 42e <putc> s++; - 64c: 0985 addi s3,s3,1 + 656: 0985 addi s3,s3,1 while(*s != 0){ - 64e: 0009c583 lbu a1,0(s3) - 652: f9e5 bnez a1,642 <vprintf+0x152> + 658: 0009c583 lbu a1,0(s3) + 65c: f9e5 bnez a1,64c <vprintf+0x152> s = va_arg(ap, char*); - 654: 8b4a mv s6,s2 + 65e: 8b4a mv s6,s2 state = 0; - 656: 4981 li s3,0 - 658: bde5 j 550 <vprintf+0x60> + 660: 4981 li s3,0 + 662: bde5 j 55a <vprintf+0x60> s = "(null)"; - 65a: 00000997 auipc s3,0x0 - 65e: 27e98993 addi s3,s3,638 # 8d8 <malloc+0x124> + 664: 00000997 auipc s3,0x0 + 668: 27c98993 addi s3,s3,636 # 8e0 <malloc+0x122> while(*s != 0){ - 662: 85ee mv a1,s11 - 664: bff9 j 642 <vprintf+0x152> + 66c: 85ee mv a1,s11 + 66e: bff9 j 64c <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 666: 008b0913 addi s2,s6,8 - 66a: 000b4583 lbu a1,0(s6) - 66e: 8556 mv a0,s5 - 670: 00000097 auipc ra,0x0 - 674: db4080e7 jalr -588(ra) # 424 <putc> - 678: 8b4a mv s6,s2 + 670: 008b0913 addi s2,s6,8 + 674: 000b4583 lbu a1,0(s6) + 678: 8556 mv a0,s5 + 67a: 00000097 auipc ra,0x0 + 67e: db4080e7 jalr -588(ra) # 42e <putc> + 682: 8b4a mv s6,s2 state = 0; - 67a: 4981 li s3,0 - 67c: bdd1 j 550 <vprintf+0x60> + 684: 4981 li s3,0 + 686: bdd1 j 55a <vprintf+0x60> putc(fd, c); - 67e: 85d2 mv a1,s4 - 680: 8556 mv a0,s5 - 682: 00000097 auipc ra,0x0 - 686: da2080e7 jalr -606(ra) # 424 <putc> + 688: 85d2 mv a1,s4 + 68a: 8556 mv a0,s5 + 68c: 00000097 auipc ra,0x0 + 690: da2080e7 jalr -606(ra) # 42e <putc> state = 0; - 68a: 4981 li s3,0 - 68c: b5d1 j 550 <vprintf+0x60> + 694: 4981 li s3,0 + 696: b5d1 j 55a <vprintf+0x60> putc(fd, '%'); - 68e: 85d2 mv a1,s4 - 690: 8556 mv a0,s5 - 692: 00000097 auipc ra,0x0 - 696: d92080e7 jalr -622(ra) # 424 <putc> + 698: 85d2 mv a1,s4 + 69a: 8556 mv a0,s5 + 69c: 00000097 auipc ra,0x0 + 6a0: d92080e7 jalr -622(ra) # 42e <putc> putc(fd, c); - 69a: 85ca mv a1,s2 - 69c: 8556 mv a0,s5 - 69e: 00000097 auipc ra,0x0 - 6a2: d86080e7 jalr -634(ra) # 424 <putc> + 6a4: 85ca mv a1,s2 + 6a6: 8556 mv a0,s5 + 6a8: 00000097 auipc ra,0x0 + 6ac: d86080e7 jalr -634(ra) # 42e <putc> state = 0; - 6a6: 4981 li s3,0 - 6a8: b565 j 550 <vprintf+0x60> + 6b0: 4981 li s3,0 + 6b2: b565 j 55a <vprintf+0x60> s = va_arg(ap, char*); - 6aa: 8b4a mv s6,s2 + 6b4: 8b4a mv s6,s2 state = 0; - 6ac: 4981 li s3,0 - 6ae: b54d j 550 <vprintf+0x60> + 6b6: 4981 li s3,0 + 6b8: b54d j 55a <vprintf+0x60> } } } - 6b0: 70e6 ld ra,120(sp) - 6b2: 7446 ld s0,112(sp) - 6b4: 74a6 ld s1,104(sp) - 6b6: 7906 ld s2,96(sp) - 6b8: 69e6 ld s3,88(sp) - 6ba: 6a46 ld s4,80(sp) - 6bc: 6aa6 ld s5,72(sp) - 6be: 6b06 ld s6,64(sp) - 6c0: 7be2 ld s7,56(sp) - 6c2: 7c42 ld s8,48(sp) - 6c4: 7ca2 ld s9,40(sp) - 6c6: 7d02 ld s10,32(sp) - 6c8: 6de2 ld s11,24(sp) - 6ca: 6109 addi sp,sp,128 - 6cc: 8082 ret - -00000000000006ce <fprintf>: + 6ba: 70e6 ld ra,120(sp) + 6bc: 7446 ld s0,112(sp) + 6be: 74a6 ld s1,104(sp) + 6c0: 7906 ld s2,96(sp) + 6c2: 69e6 ld s3,88(sp) + 6c4: 6a46 ld s4,80(sp) + 6c6: 6aa6 ld s5,72(sp) + 6c8: 6b06 ld s6,64(sp) + 6ca: 7be2 ld s7,56(sp) + 6cc: 7c42 ld s8,48(sp) + 6ce: 7ca2 ld s9,40(sp) + 6d0: 7d02 ld s10,32(sp) + 6d2: 6de2 ld s11,24(sp) + 6d4: 6109 addi sp,sp,128 + 6d6: 8082 ret + +00000000000006d8 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 6ce: 715d addi sp,sp,-80 - 6d0: ec06 sd ra,24(sp) - 6d2: e822 sd s0,16(sp) - 6d4: 1000 addi s0,sp,32 - 6d6: e010 sd a2,0(s0) - 6d8: e414 sd a3,8(s0) - 6da: e818 sd a4,16(s0) - 6dc: ec1c sd a5,24(s0) - 6de: 03043023 sd a6,32(s0) - 6e2: 03143423 sd a7,40(s0) + 6d8: 715d addi sp,sp,-80 + 6da: ec06 sd ra,24(sp) + 6dc: e822 sd s0,16(sp) + 6de: 1000 addi s0,sp,32 + 6e0: e010 sd a2,0(s0) + 6e2: e414 sd a3,8(s0) + 6e4: e818 sd a4,16(s0) + 6e6: ec1c sd a5,24(s0) + 6e8: 03043023 sd a6,32(s0) + 6ec: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 6e6: 8622 mv a2,s0 - 6e8: fe843423 sd s0,-24(s0) + 6f0: 8622 mv a2,s0 + 6f2: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 6ec: 00000097 auipc ra,0x0 - 6f0: e04080e7 jalr -508(ra) # 4f0 <vprintf> + 6f6: 00000097 auipc ra,0x0 + 6fa: e04080e7 jalr -508(ra) # 4fa <vprintf> } - 6f4: 60e2 ld ra,24(sp) - 6f6: 6442 ld s0,16(sp) - 6f8: 6161 addi sp,sp,80 - 6fa: 8082 ret + 6fe: 60e2 ld ra,24(sp) + 700: 6442 ld s0,16(sp) + 702: 6161 addi sp,sp,80 + 704: 8082 ret -00000000000006fc <printf>: +0000000000000706 <printf>: void printf(const char *fmt, ...) { - 6fc: 711d addi sp,sp,-96 - 6fe: ec06 sd ra,24(sp) - 700: e822 sd s0,16(sp) - 702: 1000 addi s0,sp,32 - 704: e40c sd a1,8(s0) - 706: e810 sd a2,16(s0) - 708: ec14 sd a3,24(s0) - 70a: f018 sd a4,32(s0) - 70c: f41c sd a5,40(s0) - 70e: 03043823 sd a6,48(s0) - 712: 03143c23 sd a7,56(s0) + 706: 711d addi sp,sp,-96 + 708: ec06 sd ra,24(sp) + 70a: e822 sd s0,16(sp) + 70c: 1000 addi s0,sp,32 + 70e: e40c sd a1,8(s0) + 710: e810 sd a2,16(s0) + 712: ec14 sd a3,24(s0) + 714: f018 sd a4,32(s0) + 716: f41c sd a5,40(s0) + 718: 03043823 sd a6,48(s0) + 71c: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 716: 00840613 addi a2,s0,8 - 71a: fec43423 sd a2,-24(s0) + 720: 00840613 addi a2,s0,8 + 724: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 71e: 85aa mv a1,a0 - 720: 4505 li a0,1 - 722: 00000097 auipc ra,0x0 - 726: dce080e7 jalr -562(ra) # 4f0 <vprintf> + 728: 85aa mv a1,a0 + 72a: 4505 li a0,1 + 72c: 00000097 auipc ra,0x0 + 730: dce080e7 jalr -562(ra) # 4fa <vprintf> } - 72a: 60e2 ld ra,24(sp) - 72c: 6442 ld s0,16(sp) - 72e: 6125 addi sp,sp,96 - 730: 8082 ret + 734: 60e2 ld ra,24(sp) + 736: 6442 ld s0,16(sp) + 738: 6125 addi sp,sp,96 + 73a: 8082 ret -0000000000000732 <free>: +000000000000073c <free>: static Header base; static Header *freep; void free(void *ap) { - 732: 1141 addi sp,sp,-16 - 734: e422 sd s0,8(sp) - 736: 0800 addi s0,sp,16 + 73c: 1141 addi sp,sp,-16 + 73e: e422 sd s0,8(sp) + 740: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 738: ff050693 addi a3,a0,-16 + 742: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 73c: 00000797 auipc a5,0x0 - 740: 2147b783 ld a5,532(a5) # 950 <freep> - 744: a02d j 76e <free+0x3c> + 746: 00000797 auipc a5,0x0 + 74a: 2127b783 ld a5,530(a5) # 958 <freep> + 74e: a02d j 778 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 746: 4618 lw a4,8(a2) - 748: 9f2d addw a4,a4,a1 - 74a: fee52c23 sw a4,-8(a0) + 750: 4618 lw a4,8(a2) + 752: 9f2d addw a4,a4,a1 + 754: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 74e: 6398 ld a4,0(a5) - 750: 6310 ld a2,0(a4) - 752: a83d j 790 <free+0x5e> + 758: 6398 ld a4,0(a5) + 75a: 6310 ld a2,0(a4) + 75c: a83d j 79a <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 754: ff852703 lw a4,-8(a0) - 758: 9f31 addw a4,a4,a2 - 75a: c798 sw a4,8(a5) + 75e: ff852703 lw a4,-8(a0) + 762: 9f31 addw a4,a4,a2 + 764: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 75c: ff053683 ld a3,-16(a0) - 760: a091 j 7a4 <free+0x72> + 766: ff053683 ld a3,-16(a0) + 76a: a091 j 7ae <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 762: 6398 ld a4,0(a5) - 764: 00e7e463 bltu a5,a4,76c <free+0x3a> - 768: 00e6ea63 bltu a3,a4,77c <free+0x4a> + 76c: 6398 ld a4,0(a5) + 76e: 00e7e463 bltu a5,a4,776 <free+0x3a> + 772: 00e6ea63 bltu a3,a4,786 <free+0x4a> { - 76c: 87ba mv a5,a4 + 776: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 76e: fed7fae3 bgeu a5,a3,762 <free+0x30> - 772: 6398 ld a4,0(a5) - 774: 00e6e463 bltu a3,a4,77c <free+0x4a> + 778: fed7fae3 bgeu a5,a3,76c <free+0x30> + 77c: 6398 ld a4,0(a5) + 77e: 00e6e463 bltu a3,a4,786 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 778: fee7eae3 bltu a5,a4,76c <free+0x3a> + 782: fee7eae3 bltu a5,a4,776 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 77c: ff852583 lw a1,-8(a0) - 780: 6390 ld a2,0(a5) - 782: 02059813 slli a6,a1,0x20 - 786: 01c85713 srli a4,a6,0x1c - 78a: 9736 add a4,a4,a3 - 78c: fae60de3 beq a2,a4,746 <free+0x14> + 786: ff852583 lw a1,-8(a0) + 78a: 6390 ld a2,0(a5) + 78c: 02059813 slli a6,a1,0x20 + 790: 01c85713 srli a4,a6,0x1c + 794: 9736 add a4,a4,a3 + 796: fae60de3 beq a2,a4,750 <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 790: fec53823 sd a2,-16(a0) + 79a: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 794: 4790 lw a2,8(a5) - 796: 02061593 slli a1,a2,0x20 - 79a: 01c5d713 srli a4,a1,0x1c - 79e: 973e add a4,a4,a5 - 7a0: fae68ae3 beq a3,a4,754 <free+0x22> + 79e: 4790 lw a2,8(a5) + 7a0: 02061593 slli a1,a2,0x20 + 7a4: 01c5d713 srli a4,a1,0x1c + 7a8: 973e add a4,a4,a5 + 7aa: fae68ae3 beq a3,a4,75e <free+0x22> p->s.ptr = bp->s.ptr; - 7a4: e394 sd a3,0(a5) + 7ae: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 7a6: 00000717 auipc a4,0x0 - 7aa: 1af73523 sd a5,426(a4) # 950 <freep> + 7b0: 00000717 auipc a4,0x0 + 7b4: 1af73423 sd a5,424(a4) # 958 <freep> } - 7ae: 6422 ld s0,8(sp) - 7b0: 0141 addi sp,sp,16 - 7b2: 8082 ret + 7b8: 6422 ld s0,8(sp) + 7ba: 0141 addi sp,sp,16 + 7bc: 8082 ret -00000000000007b4 <malloc>: +00000000000007be <malloc>: return freep; } void* malloc(uint nbytes) { - 7b4: 7139 addi sp,sp,-64 - 7b6: fc06 sd ra,56(sp) - 7b8: f822 sd s0,48(sp) - 7ba: f426 sd s1,40(sp) - 7bc: f04a sd s2,32(sp) - 7be: ec4e sd s3,24(sp) - 7c0: e852 sd s4,16(sp) - 7c2: e456 sd s5,8(sp) - 7c4: e05a sd s6,0(sp) - 7c6: 0080 addi s0,sp,64 + 7be: 7139 addi sp,sp,-64 + 7c0: fc06 sd ra,56(sp) + 7c2: f822 sd s0,48(sp) + 7c4: f426 sd s1,40(sp) + 7c6: f04a sd s2,32(sp) + 7c8: ec4e sd s3,24(sp) + 7ca: e852 sd s4,16(sp) + 7cc: e456 sd s5,8(sp) + 7ce: e05a sd s6,0(sp) + 7d0: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 7c8: 02051493 slli s1,a0,0x20 - 7cc: 9081 srli s1,s1,0x20 - 7ce: 04bd addi s1,s1,15 - 7d0: 8091 srli s1,s1,0x4 - 7d2: 00148a1b addiw s4,s1,1 - 7d6: 0485 addi s1,s1,1 + 7d2: 02051493 slli s1,a0,0x20 + 7d6: 9081 srli s1,s1,0x20 + 7d8: 04bd addi s1,s1,15 + 7da: 8091 srli s1,s1,0x4 + 7dc: 00148a1b addiw s4,s1,1 + 7e0: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 7d8: 00000517 auipc a0,0x0 - 7dc: 17853503 ld a0,376(a0) # 950 <freep> - 7e0: c515 beqz a0,80c <malloc+0x58> + 7e2: 00000517 auipc a0,0x0 + 7e6: 17653503 ld a0,374(a0) # 958 <freep> + 7ea: c515 beqz a0,816 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7e2: 611c ld a5,0(a0) + 7ec: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 7e4: 4798 lw a4,8(a5) - 7e6: 04977163 bgeu a4,s1,828 <malloc+0x74> - 7ea: 89d2 mv s3,s4 - 7ec: 000a071b sext.w a4,s4 - 7f0: 6685 lui a3,0x1 - 7f2: 00d77363 bgeu a4,a3,7f8 <malloc+0x44> - 7f6: 6985 lui s3,0x1 - 7f8: 00098b1b sext.w s6,s3 + 7ee: 4798 lw a4,8(a5) + 7f0: 04977163 bgeu a4,s1,832 <malloc+0x74> + 7f4: 89d2 mv s3,s4 + 7f6: 000a071b sext.w a4,s4 + 7fa: 6685 lui a3,0x1 + 7fc: 00d77363 bgeu a4,a3,802 <malloc+0x44> + 800: 6985 lui s3,0x1 + 802: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 7fc: 0049999b slliw s3,s3,0x4 + 806: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 800: 00000917 auipc s2,0x0 - 804: 15090913 addi s2,s2,336 # 950 <freep> + 80a: 00000917 auipc s2,0x0 + 80e: 14e90913 addi s2,s2,334 # 958 <freep> if(p == (char*)-1) - 808: 5afd li s5,-1 - 80a: a8a5 j 882 <malloc+0xce> + 812: 5afd li s5,-1 + 814: a8a5 j 88c <malloc+0xce> base.s.ptr = freep = prevp = &base; - 80c: 00000797 auipc a5,0x0 - 810: 14478793 addi a5,a5,324 # 950 <freep> - 814: 00000717 auipc a4,0x0 - 818: 14470713 addi a4,a4,324 # 958 <base> - 81c: e398 sd a4,0(a5) - 81e: e798 sd a4,8(a5) + 816: 00000797 auipc a5,0x0 + 81a: 14278793 addi a5,a5,322 # 958 <freep> + 81e: 00000717 auipc a4,0x0 + 822: 14270713 addi a4,a4,322 # 960 <base> + 826: e398 sd a4,0(a5) + 828: e798 sd a4,8(a5) base.s.size = 0; - 820: 0007a823 sw zero,16(a5) + 82a: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 824: 87ba mv a5,a4 - 826: b7d1 j 7ea <malloc+0x36> + 82e: 87ba mv a5,a4 + 830: b7d1 j 7f4 <malloc+0x36> if(p->s.size == nunits) - 828: 02e48c63 beq s1,a4,860 <malloc+0xac> + 832: 02e48c63 beq s1,a4,86a <malloc+0xac> p->s.size -= nunits; - 82c: 4147073b subw a4,a4,s4 - 830: c798 sw a4,8(a5) + 836: 4147073b subw a4,a4,s4 + 83a: c798 sw a4,8(a5) p += p->s.size; - 832: 02071693 slli a3,a4,0x20 - 836: 01c6d713 srli a4,a3,0x1c - 83a: 97ba add a5,a5,a4 + 83c: 02071693 slli a3,a4,0x20 + 840: 01c6d713 srli a4,a3,0x1c + 844: 97ba add a5,a5,a4 p->s.size = nunits; - 83c: 0147a423 sw s4,8(a5) + 846: 0147a423 sw s4,8(a5) freep = prevp; - 840: 00000717 auipc a4,0x0 - 844: 10a73823 sd a0,272(a4) # 950 <freep> + 84a: 00000717 auipc a4,0x0 + 84e: 10a73723 sd a0,270(a4) # 958 <freep> return (void*)(p + 1); - 848: 01078513 addi a0,a5,16 + 852: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 84c: 70e2 ld ra,56(sp) - 84e: 7442 ld s0,48(sp) - 850: 74a2 ld s1,40(sp) - 852: 7902 ld s2,32(sp) - 854: 69e2 ld s3,24(sp) - 856: 6a42 ld s4,16(sp) - 858: 6aa2 ld s5,8(sp) - 85a: 6b02 ld s6,0(sp) - 85c: 6121 addi sp,sp,64 - 85e: 8082 ret + 856: 70e2 ld ra,56(sp) + 858: 7442 ld s0,48(sp) + 85a: 74a2 ld s1,40(sp) + 85c: 7902 ld s2,32(sp) + 85e: 69e2 ld s3,24(sp) + 860: 6a42 ld s4,16(sp) + 862: 6aa2 ld s5,8(sp) + 864: 6b02 ld s6,0(sp) + 866: 6121 addi sp,sp,64 + 868: 8082 ret prevp->s.ptr = p->s.ptr; - 860: 6398 ld a4,0(a5) - 862: e118 sd a4,0(a0) - 864: bff1 j 840 <malloc+0x8c> + 86a: 6398 ld a4,0(a5) + 86c: e118 sd a4,0(a0) + 86e: bff1 j 84a <malloc+0x8c> hp->s.size = nu; - 866: 01652423 sw s6,8(a0) + 870: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 86a: 0541 addi a0,a0,16 - 86c: 00000097 auipc ra,0x0 - 870: ec6080e7 jalr -314(ra) # 732 <free> + 874: 0541 addi a0,a0,16 + 876: 00000097 auipc ra,0x0 + 87a: ec6080e7 jalr -314(ra) # 73c <free> return freep; - 874: 00093503 ld a0,0(s2) + 87e: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 878: d971 beqz a0,84c <malloc+0x98> + 882: d971 beqz a0,856 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 87a: 611c ld a5,0(a0) + 884: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 87c: 4798 lw a4,8(a5) - 87e: fa9775e3 bgeu a4,s1,828 <malloc+0x74> + 886: 4798 lw a4,8(a5) + 888: fa9775e3 bgeu a4,s1,832 <malloc+0x74> if(p == freep) - 882: 00093703 ld a4,0(s2) - 886: 853e mv a0,a5 - 888: fef719e3 bne a4,a5,87a <malloc+0xc6> + 88c: 00093703 ld a4,0(s2) + 890: 853e mv a0,a5 + 892: fef719e3 bne a4,a5,884 <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 88c: 854e mv a0,s3 - 88e: 00000097 auipc ra,0x0 - 892: b2a080e7 jalr -1238(ra) # 3b8 <sbrk> + 896: 854e mv a0,s3 + 898: 00000097 auipc ra,0x0 + 89c: b20080e7 jalr -1248(ra) # 3b8 <sbrk> if(p == (char*)-1) - 896: fd5518e3 bne a0,s5,866 <malloc+0xb2> + 8a0: fd5518e3 bne a0,s5,870 <malloc+0xb2> return 0; - 89a: 4501 li a0,0 - 89c: bf45 j 84c <malloc+0x98> + 8a4: 4501 li a0,0 + 8a6: bf45 j 856 <malloc+0x98> diff --git a/xv6-user/rm.sym b/xv6-user/rm.sym index 4172940..175525f 100644 --- a/xv6-user/rm.sym +++ b/xv6-user/rm.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -00000000000008a0 .rodata -0000000000000950 .bss +00000000000008a8 .rodata +0000000000000958 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,23 +16,24 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -0000000000000424 putc -0000000000000446 printint -0000000000000938 digits +000000000000042e putc +0000000000000450 printint +0000000000000940 digits 0000000000000000 umalloc.c -0000000000000950 freep -0000000000000958 base +0000000000000958 freep +0000000000000960 base 000000000000007c strcpy -00000000000006fc printf -0000000000001149 __global_pointer$ +0000000000000706 printf +0000000000001151 __global_pointer$ 00000000000003d8 dev 0000000000000282 memmove +0000000000000424 times 00000000000003f8 trace 0000000000000162 gets -0000000000000949 __SDATA_BEGIN__ +0000000000000951 __SDATA_BEGIN__ 00000000000003ae getpid 0000000000000314 memcpy -00000000000007b4 malloc +00000000000007be malloc 00000000000003f0 remove 00000000000003c0 sleep 0000000000000400 sysinfo @@ -42,31 +43,31 @@ 0000000000000408 rename 000000000000035a write 0000000000000388 fstat -00000000000006ce fprintf +00000000000006d8 fprintf 000000000000036e kill 0000000000000098 strcat -00000000000004f0 vprintf +00000000000004fa vprintf 000000000000039c chdir 0000000000000376 exec 000000000000033e wait 0000000000000350 read 00000000000002da memcmp 000000000000032c fork -0000000000000968 __BSS_END__ +0000000000000970 __BSS_END__ 00000000000003b8 sbrk 00000000000003d0 test_proc 00000000000003c8 uptime -0000000000000949 __bss_start +0000000000000951 __bss_start 000000000000011c memset 0000000000000000 main 00000000000000c6 strcmp 0000000000000410 shutdown 00000000000003a6 dup 00000000000003e8 getcwd -0000000000000949 __DATA_BEGIN__ +0000000000000951 __DATA_BEGIN__ 00000000000001dc stat -0000000000000949 _edata -0000000000000968 _end +0000000000000951 _edata +0000000000000970 _end 0000000000000334 exit 0000000000000222 atoi 00000000000000f2 strlen @@ -74,4 +75,4 @@ 000000000000013e strchr 0000000000000392 mkdir 0000000000000364 close -0000000000000732 free +000000000000073c free diff --git a/xv6-user/sh.asm b/xv6-user/sh.asm index 584fccd..f30f0dd 100644 --- a/xv6-user/sh.asm +++ b/xv6-user/sh.asm @@ -84,7 +84,7 @@ export(char *argv[]) 7a: 84aa mv s1,a0 if(!strcmp(argv[1], "-p")) 7c: 00001597 auipc a1,0x1 - 80: 7e458593 addi a1,a1,2020 # 1860 <malloc+0xf0> + 80: 7ec58593 addi a1,a1,2028 # 1868 <malloc+0xee> 84: 6508 ld a0,8(a0) 86: 00001097 auipc ra,0x1 8a: ffc080e7 jalr -4(ra) # 1082 <strcmp> @@ -93,7 +93,7 @@ export(char *argv[]) { // print all the env vars if(!nenv) 92: 00002b17 auipc s6,0x2 - 96: a36b2b03 lw s6,-1482(s6) # 1ac8 <nenv> + 96: a3eb2b03 lw s6,-1474(s6) # 1ad0 <nenv> 9a: 040b0163 beqz s6,dc <export+0x76> { printf("NO env var exported\n"); @@ -101,21 +101,21 @@ export(char *argv[]) } for(int i=0; i<nenv; i++) 9e: 00002497 auipc s1,0x2 - a2: b1a48493 addi s1,s1,-1254 # 1bb8 <envs> + a2: b2248493 addi s1,s1,-1246 # 1bc0 <envs> a6: 892a mv s2,a0 printf("export %s=%s\n", envs[i].name, envs[i].value); a8: 00001a97 auipc s5,0x1 - ac: 7d8a8a93 addi s5,s5,2008 # 1880 <malloc+0x110> + ac: 7e0a8a93 addi s5,s5,2016 # 1888 <malloc+0x10e> for(int i=0; i<nenv; i++) b0: 00002a17 auipc s4,0x2 - b4: a18a0a13 addi s4,s4,-1512 # 1ac8 <nenv> + b4: a20a0a13 addi s4,s4,-1504 # 1ad0 <nenv> b8: 0f605c63 blez s6,1b0 <export+0x14a> printf("export %s=%s\n", envs[i].name, envs[i].value); bc: 02048613 addi a2,s1,32 c0: 85a6 mv a1,s1 c2: 8556 mv a0,s5 c4: 00001097 auipc ra,0x1 - c8: 5f4080e7 jalr 1524(ra) # 16b8 <printf> + c8: 5fe080e7 jalr 1534(ra) # 16c2 <printf> for(int i=0; i<nenv; i++) cc: 2905 addiw s2,s2,1 ce: 08048493 addi s1,s1,128 @@ -124,9 +124,9 @@ export(char *argv[]) da: a8d9 j 1b0 <export+0x14a> printf("NO env var exported\n"); dc: 00001517 auipc a0,0x1 - e0: 78c50513 addi a0,a0,1932 # 1868 <malloc+0xf8> + e0: 79450513 addi a0,a0,1940 # 1870 <malloc+0xf6> e4: 00001097 auipc ra,0x1 - e8: 5d4080e7 jalr 1492(ra) # 16b8 <printf> + e8: 5de080e7 jalr 1502(ra) # 16c2 <printf> return 0; ec: 89da mv s3,s6 ee: a0c9 j 1b0 <export+0x14a> @@ -134,7 +134,7 @@ export(char *argv[]) } else if(nenv == NENVS) f0: 00002997 auipc s3,0x2 - f4: 9d89a983 lw s3,-1576(s3) # 1ac8 <nenv> + f4: 9e09a983 lw s3,-1568(s3) # 1ad0 <nenv> f8: 47c1 li a5,16 fa: 0cf98663 beq s3,a5,1c6 <export+0x160> { @@ -193,14 +193,14 @@ export(char *argv[]) strcpy(envs[nenv].name, name); 170: 00799513 slli a0,s3,0x7 174: 00002917 auipc s2,0x2 - 178: a4490913 addi s2,s2,-1468 # 1bb8 <envs> + 178: a4c90913 addi s2,s2,-1460 # 1bc0 <envs> 17c: fa040593 addi a1,s0,-96 180: 954a add a0,a0,s2 182: 00001097 auipc ra,0x1 186: eb6080e7 jalr -330(ra) # 1038 <strcpy> strcpy(envs[nenv].value, value); 18a: 00002497 auipc s1,0x2 - 18e: 93e48493 addi s1,s1,-1730 # 1ac8 <nenv> + 18e: 94648493 addi s1,s1,-1722 # 1ad0 <nenv> 192: 4088 lw a0,0(s1) 194: 051e slli a0,a0,0x7 196: 02050513 addi a0,a0,32 @@ -228,10 +228,10 @@ export(char *argv[]) 1c4: 8082 ret fprintf(2, "too many env vars\n"); 1c6: 00001597 auipc a1,0x1 - 1ca: 6ca58593 addi a1,a1,1738 # 1890 <malloc+0x120> + 1ca: 6d258593 addi a1,a1,1746 # 1898 <malloc+0x11e> 1ce: 4509 li a0,2 1d0: 00001097 auipc ra,0x1 - 1d4: 4ba080e7 jalr 1210(ra) # 168a <fprintf> + 1d4: 4c4080e7 jalr 1220(ra) # 1694 <fprintf> return -1; 1d8: 59fd li s3,-1 1da: bfd9 j 1b0 <export+0x14a> @@ -240,10 +240,10 @@ export(char *argv[]) 1e0: b7b9 j 12e <export+0xc8> fprintf(2, "Invalid NAME!\n"); 1e2: 00001597 auipc a1,0x1 - 1e6: 6c658593 addi a1,a1,1734 # 18a8 <malloc+0x138> + 1e6: 6ce58593 addi a1,a1,1742 # 18b0 <malloc+0x136> 1ea: 4509 li a0,2 1ec: 00001097 auipc ra,0x1 - 1f0: 49e080e7 jalr 1182(ra) # 168a <fprintf> + 1f0: 4a8080e7 jalr 1192(ra) # 1694 <fprintf> return -1; 1f4: 59fd li s3,-1 1f6: bf6d j 1b0 <export+0x14a> @@ -302,7 +302,7 @@ replace(char *buf) *tmp = 0; for(int i=0; i<nenv; i++) 248: 00002b17 auipc s6,0x2 - 24c: 880b0b13 addi s6,s6,-1920 # 1ac8 <nenv> + 24c: 888b0b13 addi s6,s6,-1912 # 1ad0 <nenv> if(!strcmp(name, envs[i].name)) 250: f0840b93 addi s7,s0,-248 254: a03d j 282 <replace+0x84> @@ -358,7 +358,7 @@ replace(char *buf) 2ce: 000b2783 lw a5,0(s6) 2d2: 04f05563 blez a5,31c <replace+0x11e> 2d6: 00002d17 auipc s10,0x2 - 2da: 902d0d13 addi s10,s10,-1790 # 1bd8 <envs+0x20> + 2da: 90ad0d13 addi s10,s10,-1782 # 1be0 <envs+0x20> 2de: 4d81 li s11,0 2e0: a801 j 2f0 <replace+0xf2> 2e2: 2d85 addiw s11,s11,1 @@ -425,12 +425,12 @@ getcmd(char *buf, int nbuf) 350: 892e mv s2,a1 fprintf(2, "-> %s $ ", mycwd); 352: 00001617 auipc a2,0x1 - 356: 77e60613 addi a2,a2,1918 # 1ad0 <mycwd> + 356: 78660613 addi a2,a2,1926 # 1ad8 <mycwd> 35a: 00001597 auipc a1,0x1 - 35e: 55e58593 addi a1,a1,1374 # 18b8 <malloc+0x148> + 35e: 56658593 addi a1,a1,1382 # 18c0 <malloc+0x146> 362: 4509 li a0,2 364: 00001097 auipc ra,0x1 - 368: 326080e7 jalr 806(ra) # 168a <fprintf> + 368: 330080e7 jalr 816(ra) # 1694 <fprintf> memset(buf, 0, nbuf); 36c: 864a mv a2,s2 36e: 4581 li a1,0 @@ -470,10 +470,10 @@ panic(char *s) 3a6: 862a mv a2,a0 fprintf(2, "%s\n", s); 3a8: 00001597 auipc a1,0x1 - 3ac: 52058593 addi a1,a1,1312 # 18c8 <malloc+0x158> + 3ac: 52858593 addi a1,a1,1320 # 18d0 <malloc+0x156> 3b0: 4509 li a0,2 3b2: 00001097 auipc ra,0x1 - 3b6: 2d8080e7 jalr 728(ra) # 168a <fprintf> + 3b6: 2e2080e7 jalr 738(ra) # 1694 <fprintf> exit(1); 3ba: 4505 li a0,1 3bc: 00001097 auipc ra,0x1 @@ -506,7 +506,7 @@ fork1(void) 3e0: 8082 ret panic("fork"); 3e2: 00001517 auipc a0,0x1 - 3e6: 4ee50513 addi a0,a0,1262 # 18d0 <malloc+0x160> + 3e6: 4f650513 addi a0,a0,1270 # 18d8 <malloc+0x15e> 3ea: 00000097 auipc ra,0x0 3ee: fb4080e7 jalr -76(ra) # 39e <panic> @@ -533,7 +533,7 @@ fork1(void) 414: 00056783 lwu a5,0(a0) 418: 078a slli a5,a5,0x2 41a: 00001717 auipc a4,0x1 - 41e: 5f670713 addi a4,a4,1526 # 1a10 <malloc+0x2a0> + 41e: 5fe70713 addi a4,a4,1534 # 1a18 <malloc+0x29e> 422: 97ba add a5,a5,a4 424: 439c lw a5,0(a5) 426: 97ba add a5,a5,a4 @@ -544,7 +544,7 @@ fork1(void) 430: ec4080e7 jalr -316(ra) # 12f0 <exit> panic("runcmd"); 434: 00001517 auipc a0,0x1 - 438: 4a450513 addi a0,a0,1188 # 18d8 <malloc+0x168> + 438: 4ac50513 addi a0,a0,1196 # 18e0 <malloc+0x166> 43c: 00000097 auipc ra,0x0 440: f62080e7 jalr -158(ra) # 39e <panic> if(ecmd->argv[0] == 0) @@ -557,10 +557,10 @@ fork1(void) 452: ee4080e7 jalr -284(ra) # 1332 <exec> for(i=0; i<nenv; i++) 456: 00001797 auipc a5,0x1 - 45a: 6727a783 lw a5,1650(a5) # 1ac8 <nenv> + 45a: 67a7a783 lw a5,1658(a5) # 1ad0 <nenv> 45e: 06f05763 blez a5,4cc <runcmd+0xda> 462: 00001917 auipc s2,0x1 - 466: 77790913 addi s2,s2,1911 # 1bd9 <envs+0x21> + 466: 77f90913 addi s2,s2,1919 # 1be1 <envs+0x21> 46a: 4981 li s3,0 *s_tmp++ = '/'; 46c: 02f00b93 li s7,47 @@ -568,7 +568,7 @@ fork1(void) 470: f6840b13 addi s6,s0,-152 for(i=0; i<nenv; i++) 474: 00001a97 auipc s5,0x1 - 478: 654a8a93 addi s5,s5,1620 # 1ac8 <nenv> + 478: 65ca8a93 addi s5,s5,1628 # 1ad0 <nenv> while((*s_tmp = *d_tmp++)) 47c: 874a mv a4,s2 47e: fff94783 lbu a5,-1(s2) @@ -607,10 +607,10 @@ fork1(void) fprintf(2, "exec %s failed\n", ecmd->argv[0]); 4cc: 6490 ld a2,8(s1) 4ce: 00001597 auipc a1,0x1 - 4d2: 41258593 addi a1,a1,1042 # 18e0 <malloc+0x170> + 4d2: 41a58593 addi a1,a1,1050 # 18e8 <malloc+0x16e> 4d6: 4509 li a0,2 4d8: 00001097 auipc ra,0x1 - 4dc: 1b2080e7 jalr 434(ra) # 168a <fprintf> + 4dc: 1bc080e7 jalr 444(ra) # 1694 <fprintf> exit(0); 4e0: 4501 li a0,0 4e2: 00001097 auipc ra,0x1 @@ -639,10 +639,10 @@ fork1(void) fprintf(2, "open %s failed\n", rcmd->file); 51e: 6890 ld a2,16(s1) 520: 00001597 auipc a1,0x1 - 524: 3d058593 addi a1,a1,976 # 18f0 <malloc+0x180> + 524: 3d858593 addi a1,a1,984 # 18f8 <malloc+0x17e> 528: 4509 li a0,2 52a: 00001097 auipc ra,0x1 - 52e: 160080e7 jalr 352(ra) # 168a <fprintf> + 52e: 16a080e7 jalr 362(ra) # 1694 <fprintf> exit(1); 532: 4505 li a0,1 534: 00001097 auipc ra,0x1 @@ -696,7 +696,7 @@ fork1(void) 5b4: b735 j 4e0 <runcmd+0xee> panic("pipe"); 5b6: 00001517 auipc a0,0x1 - 5ba: 34a50513 addi a0,a0,842 # 1900 <malloc+0x190> + 5ba: 35250513 addi a0,a0,850 # 1908 <malloc+0x18e> 5be: 00000097 auipc ra,0x0 5c2: de0080e7 jalr -544(ra) # 39e <panic> close(1); @@ -764,7 +764,7 @@ execcmd(void) cmd = malloc(sizeof(*cmd)); 654: 0a800513 li a0,168 658: 00001097 auipc ra,0x1 - 65c: 118080e7 jalr 280(ra) # 1770 <malloc> + 65c: 122080e7 jalr 290(ra) # 177a <malloc> 660: 84aa mv s1,a0 memset(cmd, 0, sizeof(*cmd)); 662: 0a800613 li a2,168 @@ -808,7 +808,7 @@ redircmd(struct cmd *subcmd, char *file, char *efile, int mode, int fd) cmd = malloc(sizeof(*cmd)); 69e: 02800513 li a0,40 6a2: 00001097 auipc ra,0x1 - 6a6: 0ce080e7 jalr 206(ra) # 1770 <malloc> + 6a6: 0d8080e7 jalr 216(ra) # 177a <malloc> 6aa: 84aa mv s1,a0 memset(cmd, 0, sizeof(*cmd)); 6ac: 02800613 li a2,40 @@ -861,7 +861,7 @@ pipecmd(struct cmd *left, struct cmd *right) cmd = malloc(sizeof(*cmd)); 6fa: 4561 li a0,24 6fc: 00001097 auipc ra,0x1 - 700: 074080e7 jalr 116(ra) # 1770 <malloc> + 700: 07e080e7 jalr 126(ra) # 177a <malloc> 704: 84aa mv s1,a0 memset(cmd, 0, sizeof(*cmd)); 706: 4661 li a2,24 @@ -905,7 +905,7 @@ listcmd(struct cmd *left, struct cmd *right) cmd = malloc(sizeof(*cmd)); 740: 4561 li a0,24 742: 00001097 auipc ra,0x1 - 746: 02e080e7 jalr 46(ra) # 1770 <malloc> + 746: 038080e7 jalr 56(ra) # 177a <malloc> 74a: 84aa mv s1,a0 memset(cmd, 0, sizeof(*cmd)); 74c: 4661 li a2,24 @@ -947,7 +947,7 @@ backcmd(struct cmd *subcmd) cmd = malloc(sizeof(*cmd)); 782: 4541 li a0,16 784: 00001097 auipc ra,0x1 - 788: fec080e7 jalr -20(ra) # 1770 <malloc> + 788: ff6080e7 jalr -10(ra) # 177a <malloc> 78c: 84aa mv s1,a0 memset(cmd, 0, sizeof(*cmd)); 78e: 4641 li a2,16 @@ -997,7 +997,7 @@ gettoken(char **ps, char *es, char **q, char **eq) 7cc: 6104 ld s1,0(a0) while(s < es && strchr(whitespace, *s)) 7ce: 00001997 auipc s3,0x1 - 7d2: 2ea98993 addi s3,s3,746 # 1ab8 <whitespace> + 7d2: 2f298993 addi s3,s3,754 # 1ac0 <whitespace> 7d6: 00b4fe63 bgeu s1,a1,7f2 <gettoken+0x42> 7da: 0004c583 lbu a1,0(s1) 7de: 854e mv a0,s3 @@ -1048,7 +1048,7 @@ gettoken(char **ps, char *es, char **q, char **eq) while(s < es && strchr(whitespace, *s)) 834: 00001997 auipc s3,0x1 - 838: 28498993 addi s3,s3,644 # 1ab8 <whitespace> + 838: 28c98993 addi s3,s3,652 # 1ac0 <whitespace> 83c: 0124fe63 bgeu s1,s2,858 <gettoken+0xa8> 840: 0004c583 lbu a1,0(s1) 844: 854e mv a0,s3 @@ -1100,9 +1100,9 @@ gettoken(char **ps, char *es, char **q, char **eq) 89c: f8e787e3 beq a5,a4,82a <gettoken+0x7a> while(s < es && !strchr(whitespace, *s) && !strchr(symbols, *s)) 8a0: 00001997 auipc s3,0x1 - 8a4: 21898993 addi s3,s3,536 # 1ab8 <whitespace> + 8a4: 22098993 addi s3,s3,544 # 1ac0 <whitespace> 8a8: 00001a97 auipc s5,0x1 - 8ac: 218a8a93 addi s5,s5,536 # 1ac0 <symbols> + 8ac: 220a8a93 addi s5,s5,544 # 1ac8 <symbols> 8b0: 0324f663 bgeu s1,s2,8dc <gettoken+0x12c> 8b4: 0004c583 lbu a1,0(s1) 8b8: 854e mv a0,s3 @@ -1153,7 +1153,7 @@ peek(char **ps, char *es, char *toks) 90a: 6104 ld s1,0(a0) while(s < es && strchr(whitespace, *s)) 90c: 00001997 auipc s3,0x1 - 910: 1ac98993 addi s3,s3,428 # 1ab8 <whitespace> + 910: 1b498993 addi s3,s3,436 # 1ac0 <whitespace> 914: 00b4fe63 bgeu s1,a1,930 <peek+0x3e> 918: 0004c583 lbu a1,0(s1) 91c: 854e mv a0,s3 @@ -1219,7 +1219,7 @@ parseredirs(struct cmd *cmd, char **ps, char *es) while(peek(ps, es, "<>")){ 982: 00001b97 auipc s7,0x1 - 986: fa6b8b93 addi s7,s7,-90 # 1928 <malloc+0x1b8> + 986: faeb8b93 addi s7,s7,-82 # 1930 <malloc+0x1b6> tok = gettoken(ps, es, 0, 0); if(gettoken(ps, es, &q, &eq) != 'a') 98a: f8040d13 addi s10,s0,-128 @@ -1232,7 +1232,7 @@ parseredirs(struct cmd *cmd, char **ps, char *es) 99a: a02d j 9c4 <parseredirs+0x66> panic("missing file for redirection"); 99c: 00001517 auipc a0,0x1 - 9a0: f6c50513 addi a0,a0,-148 # 1908 <malloc+0x198> + 9a0: f7450513 addi a0,a0,-140 # 1910 <malloc+0x196> 9a4: 00000097 auipc ra,0x0 9a8: 9fa080e7 jalr -1542(ra) # 39e <panic> case '<': @@ -1354,7 +1354,7 @@ parseexec(char **ps, char *es) if(peek(ps, es, "(")) a88: 00001617 auipc a2,0x1 - a8c: ea860613 addi a2,a2,-344 # 1930 <malloc+0x1c0> + a8c: eb060613 addi a2,a2,-336 # 1938 <malloc+0x1be> a90: 00000097 auipc ra,0x0 a94: e62080e7 jalr -414(ra) # 8f2 <peek> a98: ed05 bnez a0,ad0 <parseexec+0x6a> @@ -1377,7 +1377,7 @@ parseexec(char **ps, char *es) while(!peek(ps, es, "|)&;")){ ab4: 008d8913 addi s2,s11,8 ab8: 00001b17 auipc s6,0x1 - abc: e98b0b13 addi s6,s6,-360 # 1950 <malloc+0x1e0> + abc: ea0b0b13 addi s6,s6,-352 # 1958 <malloc+0x1de> if((tok=gettoken(ps, es, &q, &eq)) == 0) ac0: f8040c13 addi s8,s0,-128 ac4: f8840b93 addi s7,s0,-120 @@ -1422,7 +1422,7 @@ parseexec(char **ps, char *es) afc: 8082 ret panic("syntax"); afe: 00001517 auipc a0,0x1 - b02: e3a50513 addi a0,a0,-454 # 1938 <malloc+0x1c8> + b02: e4250513 addi a0,a0,-446 # 1940 <malloc+0x1c6> b06: 00000097 auipc ra,0x0 b0a: 898080e7 jalr -1896(ra) # 39e <panic> ret = parseredirs(ret, ps, es); @@ -1462,7 +1462,7 @@ parseexec(char **ps, char *es) b58: fb999be3 bne s3,s9,b0e <parseexec+0xa8> panic("too many args"); b5c: 00001517 auipc a0,0x1 - b60: de450513 addi a0,a0,-540 # 1940 <malloc+0x1d0> + b60: dec50513 addi a0,a0,-532 # 1948 <malloc+0x1ce> b64: 00000097 auipc ra,0x0 b68: 83a080e7 jalr -1990(ra) # 39e <panic> cmd->argv[argc] = 0; @@ -1491,7 +1491,7 @@ parseexec(char **ps, char *es) b94: 84aa mv s1,a0 if(peek(ps, es, "|")){ b96: 00001617 auipc a2,0x1 - b9a: dc260613 addi a2,a2,-574 # 1958 <malloc+0x1e8> + b9a: dca60613 addi a2,a2,-566 # 1960 <malloc+0x1e6> b9e: 85ce mv a1,s3 ba0: 854a mv a0,s2 ba2: 00000097 auipc ra,0x0 @@ -1544,7 +1544,7 @@ parseexec(char **ps, char *es) c04: 84aa mv s1,a0 while(peek(ps, es, "&")){ c06: 00001a17 auipc s4,0x1 - c0a: d5aa0a13 addi s4,s4,-678 # 1960 <malloc+0x1f0> + c0a: d62a0a13 addi s4,s4,-670 # 1968 <malloc+0x1ee> c0e: a839 j c2c <parseline+0x44> gettoken(ps, es, 0, 0); c10: 4681 li a3,0 @@ -1567,7 +1567,7 @@ parseexec(char **ps, char *es) c3a: f979 bnez a0,c10 <parseline+0x28> if(peek(ps, es, ";")){ c3c: 00001617 auipc a2,0x1 - c40: d2c60613 addi a2,a2,-724 # 1968 <malloc+0x1f8> + c40: d3460613 addi a2,a2,-716 # 1970 <malloc+0x1f6> c44: 85ce mv a1,s3 c46: 854a mv a0,s2 c48: 00000097 auipc ra,0x0 @@ -1616,7 +1616,7 @@ parseexec(char **ps, char *es) ca0: 892e mv s2,a1 if(!peek(ps, es, "(")) ca2: 00001617 auipc a2,0x1 - ca6: c8e60613 addi a2,a2,-882 # 1930 <malloc+0x1c0> + ca6: c9660613 addi a2,a2,-874 # 1938 <malloc+0x1be> caa: 00000097 auipc ra,0x0 cae: c48080e7 jalr -952(ra) # 8f2 <peek> cb2: c12d beqz a0,d14 <parseblock+0x84> @@ -1635,7 +1635,7 @@ parseexec(char **ps, char *es) cd0: 89aa mv s3,a0 if(!peek(ps, es, ")")) cd2: 00001617 auipc a2,0x1 - cd6: cae60613 addi a2,a2,-850 # 1980 <malloc+0x210> + cd6: cb660613 addi a2,a2,-842 # 1988 <malloc+0x20e> cda: 85ca mv a1,s2 cdc: 8526 mv a0,s1 cde: 00000097 auipc ra,0x0 @@ -1664,12 +1664,12 @@ parseexec(char **ps, char *es) d12: 8082 ret panic("parseblock"); d14: 00001517 auipc a0,0x1 - d18: c5c50513 addi a0,a0,-932 # 1970 <malloc+0x200> + d18: c6450513 addi a0,a0,-924 # 1978 <malloc+0x1fe> d1c: fffff097 auipc ra,0xfffff d20: 682080e7 jalr 1666(ra) # 39e <panic> panic("syntax - missing )"); d24: 00001517 auipc a0,0x1 - d28: c6450513 addi a0,a0,-924 # 1988 <malloc+0x218> + d28: c6c50513 addi a0,a0,-916 # 1990 <malloc+0x216> d2c: fffff097 auipc ra,0xfffff d30: 672080e7 jalr 1650(ra) # 39e <panic> @@ -1701,7 +1701,7 @@ nulterminate(struct cmd *cmd) d4a: 00056783 lwu a5,0(a0) d4e: 078a slli a5,a5,0x2 d50: 00001717 auipc a4,0x1 - d54: cd870713 addi a4,a4,-808 # 1a28 <malloc+0x2b8> + d54: ce070713 addi a4,a4,-800 # 1a30 <malloc+0x2b6> d58: 97ba add a5,a5,a4 d5a: 439c lw a5,0(a5) d5c: 97ba add a5,a5,a4 @@ -1795,7 +1795,7 @@ nulterminate(struct cmd *cmd) dfe: 89aa mv s3,a0 peek(&s, es, ""); e00: 00001617 auipc a2,0x1 - e04: bf860613 addi a2,a2,-1032 # 19f8 <malloc+0x288> + e04: c0060613 addi a2,a2,-1024 # 1a00 <malloc+0x286> e08: 85a6 mv a1,s1 e0a: 854a mv a0,s2 e0c: 00000097 auipc ra,0x0 @@ -1818,13 +1818,13 @@ nulterminate(struct cmd *cmd) e34: 8082 ret fprintf(2, "leftovers: %s\n", s); e36: 00001597 auipc a1,0x1 - e3a: b6a58593 addi a1,a1,-1174 # 19a0 <malloc+0x230> + e3a: b7258593 addi a1,a1,-1166 # 19a8 <malloc+0x22e> e3e: 4509 li a0,2 e40: 00001097 auipc ra,0x1 - e44: 84a080e7 jalr -1974(ra) # 168a <fprintf> + e44: 854080e7 jalr -1964(ra) # 1694 <fprintf> panic("syntax"); e48: 00001517 auipc a0,0x1 - e4c: af050513 addi a0,a0,-1296 # 1938 <malloc+0x1c8> + e4c: af850513 addi a0,a0,-1288 # 1940 <malloc+0x1c6> e50: fffff097 auipc ra,0xfffff e54: 54e080e7 jalr 1358(ra) # 39e <panic> @@ -1858,13 +1858,13 @@ nulterminate(struct cmd *cmd) e8e: 496080e7 jalr 1174(ra) # 1320 <close> strcpy(envs[nenv].name, "SHELL"); e92: 00001497 auipc s1,0x1 - e96: c3648493 addi s1,s1,-970 # 1ac8 <nenv> + e96: c3e48493 addi s1,s1,-962 # 1ad0 <nenv> e9a: 4088 lw a0,0(s1) e9c: 051e slli a0,a0,0x7 e9e: 00001917 auipc s2,0x1 - ea2: d1a90913 addi s2,s2,-742 # 1bb8 <envs> + ea2: d2290913 addi s2,s2,-734 # 1bc0 <envs> ea6: 00001597 auipc a1,0x1 - eaa: b0a58593 addi a1,a1,-1270 # 19b0 <malloc+0x240> + eaa: b1258593 addi a1,a1,-1262 # 19b8 <malloc+0x23e> eae: 954a add a0,a0,s2 eb0: 00000097 auipc ra,0x0 eb4: 188080e7 jalr 392(ra) # 1038 <strcpy> @@ -1873,7 +1873,7 @@ nulterminate(struct cmd *cmd) eba: 051e slli a0,a0,0x7 ebc: 02050513 addi a0,a0,32 ec0: 00001597 auipc a1,0x1 - ec4: af858593 addi a1,a1,-1288 # 19b8 <malloc+0x248> + ec4: b0058593 addi a1,a1,-1280 # 19c0 <malloc+0x246> ec8: 954a add a0,a0,s2 eca: 00000097 auipc ra,0x0 ece: 16e080e7 jalr 366(ra) # 1038 <strcpy> @@ -1883,31 +1883,31 @@ nulterminate(struct cmd *cmd) ed6: c09c sw a5,0(s1) getcwd(mycwd); ed8: 00001517 auipc a0,0x1 - edc: bf850513 addi a0,a0,-1032 # 1ad0 <mycwd> + edc: c0050513 addi a0,a0,-1024 # 1ad8 <mycwd> ee0: 00000097 auipc ra,0x0 ee4: 4c4080e7 jalr 1220(ra) # 13a4 <getcwd> while(getcmd(buf, sizeof(buf)) >= 0){ ee8: 00001917 auipc s2,0x1 - eec: c6890913 addi s2,s2,-920 # 1b50 <buf.0> + eec: c7090913 addi s2,s2,-912 # 1b58 <buf.0> replace(buf); ef0: 89a6 mv s3,s1 if(buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' '){ ef2: 06300a13 li s4,99 else if(!strcmp(ecmd->argv[0], "export")) ef6: 00001a97 auipc s5,0x1 - efa: adaa8a93 addi s5,s5,-1318 # 19d0 <malloc+0x260> + efa: ae2a8a93 addi s5,s5,-1310 # 19d8 <malloc+0x25e> fprintf(2, "export failed\n"); efe: 00001b97 auipc s7,0x1 - f02: b02b8b93 addi s7,s7,-1278 # 1a00 <malloc+0x290> + f02: b0ab8b93 addi s7,s7,-1270 # 1a08 <malloc+0x28e> fprintf(2, "Usage: export [-p] [NAME=VALUE]\n"); f06: 00001b17 auipc s6,0x1 - f0a: ad2b0b13 addi s6,s6,-1326 # 19d8 <malloc+0x268> + f0a: adab0b13 addi s6,s6,-1318 # 19e0 <malloc+0x266> if(chdir(buf+3) < 0) f0e: 00001c17 auipc s8,0x1 - f12: c45c0c13 addi s8,s8,-955 # 1b53 <buf.0+0x3> + f12: c4dc0c13 addi s8,s8,-947 # 1b5b <buf.0+0x3> getcwd(mycwd); f16: 00001c97 auipc s9,0x1 - f1a: bbac8c93 addi s9,s9,-1094 # 1ad0 <mycwd> + f1a: bc2c8c93 addi s9,s9,-1086 # 1ad8 <mycwd> while(getcmd(buf, sizeof(buf)) >= 0){ f1e: a8a5 j f96 <main+0x13e> if(buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' '){ @@ -1936,26 +1936,26 @@ nulterminate(struct cmd *cmd) fprintf(2, "cannot cd %s\n", buf+3); f5e: 8662 mv a2,s8 f60: 00001597 auipc a1,0x1 - f64: a6058593 addi a1,a1,-1440 # 19c0 <malloc+0x250> + f64: a6858593 addi a1,a1,-1432 # 19c8 <malloc+0x24e> f68: 4509 li a0,2 f6a: 00000097 auipc ra,0x0 - f6e: 720080e7 jalr 1824(ra) # 168a <fprintf> + f6e: 72a080e7 jalr 1834(ra) # 1694 <fprintf> f72: b7c5 j f52 <main+0xfa> free(cmd); f74: 8526 mv a0,s1 f76: 00000097 auipc ra,0x0 - f7a: 778080e7 jalr 1912(ra) # 16ee <free> + f7a: 782080e7 jalr 1922(ra) # 16f8 <free> continue; f7e: a821 j f96 <main+0x13e> fprintf(2, "Usage: export [-p] [NAME=VALUE]\n"); f80: 85da mv a1,s6 f82: 4509 li a0,2 f84: 00000097 auipc ra,0x0 - f88: 706080e7 jalr 1798(ra) # 168a <fprintf> + f88: 710080e7 jalr 1808(ra) # 1694 <fprintf> free(cmd); f8c: 8526 mv a0,s1 f8e: 00000097 auipc ra,0x0 - f92: 760080e7 jalr 1888(ra) # 16ee <free> + f92: 76a080e7 jalr 1898(ra) # 16f8 <free> while(getcmd(buf, sizeof(buf)) >= 0){ f96: 06400593 li a1,100 f9a: 854a mv a0,s2 @@ -1997,7 +1997,7 @@ nulterminate(struct cmd *cmd) ff6: 85de mv a1,s7 ff8: 4509 li a0,2 ffa: 00000097 auipc ra,0x0 - ffe: 690080e7 jalr 1680(ra) # 168a <fprintf> + ffe: 69a080e7 jalr 1690(ra) # 1694 <fprintf> 1002: b769 j f8c <main+0x134> else if(fork1() == 0) 1004: fffff097 auipc ra,0xfffff @@ -2010,7 +2010,7 @@ nulterminate(struct cmd *cmd) free(cmd); 1018: 8526 mv a0,s1 101a: 00000097 auipc ra,0x0 - 101e: 6d4080e7 jalr 1748(ra) # 16ee <free> + 101e: 6de080e7 jalr 1758(ra) # 16f8 <free> 1022: bf95 j f96 <main+0x13e> runcmd(cmd); 1024: 8526 mv a0,s1 @@ -2777,637 +2777,647 @@ uname: ret 13de: 8082 ret -00000000000013e0 <putc>: +00000000000013e0 <times>: +.global times +times: + li a7, SYS_times + 13e0: 09900893 li a7,153 + ecall + 13e4: 00000073 ecall + ret + 13e8: 8082 ret + +00000000000013ea <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 13e0: 1101 addi sp,sp,-32 - 13e2: ec06 sd ra,24(sp) - 13e4: e822 sd s0,16(sp) - 13e6: 1000 addi s0,sp,32 - 13e8: feb407a3 sb a1,-17(s0) + 13ea: 1101 addi sp,sp,-32 + 13ec: ec06 sd ra,24(sp) + 13ee: e822 sd s0,16(sp) + 13f0: 1000 addi s0,sp,32 + 13f2: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 13ec: 4605 li a2,1 - 13ee: fef40593 addi a1,s0,-17 - 13f2: 00000097 auipc ra,0x0 - 13f6: f24080e7 jalr -220(ra) # 1316 <write> + 13f6: 4605 li a2,1 + 13f8: fef40593 addi a1,s0,-17 + 13fc: 00000097 auipc ra,0x0 + 1400: f1a080e7 jalr -230(ra) # 1316 <write> } - 13fa: 60e2 ld ra,24(sp) - 13fc: 6442 ld s0,16(sp) - 13fe: 6105 addi sp,sp,32 - 1400: 8082 ret + 1404: 60e2 ld ra,24(sp) + 1406: 6442 ld s0,16(sp) + 1408: 6105 addi sp,sp,32 + 140a: 8082 ret -0000000000001402 <printint>: +000000000000140c <printint>: static void printint(int fd, int xx, int base, int sgn) { - 1402: 7139 addi sp,sp,-64 - 1404: fc06 sd ra,56(sp) - 1406: f822 sd s0,48(sp) - 1408: f426 sd s1,40(sp) - 140a: f04a sd s2,32(sp) - 140c: ec4e sd s3,24(sp) - 140e: 0080 addi s0,sp,64 - 1410: 84aa mv s1,a0 + 140c: 7139 addi sp,sp,-64 + 140e: fc06 sd ra,56(sp) + 1410: f822 sd s0,48(sp) + 1412: f426 sd s1,40(sp) + 1414: f04a sd s2,32(sp) + 1416: ec4e sd s3,24(sp) + 1418: 0080 addi s0,sp,64 + 141a: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 1412: c299 beqz a3,1418 <printint+0x16> - 1414: 0805c863 bltz a1,14a4 <printint+0xa2> + 141c: c299 beqz a3,1422 <printint+0x16> + 141e: 0805c863 bltz a1,14ae <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 1418: 2581 sext.w a1,a1 + 1422: 2581 sext.w a1,a1 neg = 0; - 141a: 4881 li a7,0 + 1424: 4881 li a7,0 } i = 0; - 141c: fc040993 addi s3,s0,-64 + 1426: fc040993 addi s3,s0,-64 neg = 0; - 1420: 86ce mv a3,s3 + 142a: 86ce mv a3,s3 i = 0; - 1422: 4701 li a4,0 + 142c: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 1424: 2601 sext.w a2,a2 - 1426: 00000517 auipc a0,0x0 - 142a: 67a50513 addi a0,a0,1658 # 1aa0 <digits> - 142e: 883a mv a6,a4 - 1430: 2705 addiw a4,a4,1 - 1432: 02c5f7bb remuw a5,a1,a2 - 1436: 1782 slli a5,a5,0x20 - 1438: 9381 srli a5,a5,0x20 - 143a: 97aa add a5,a5,a0 - 143c: 0007c783 lbu a5,0(a5) - 1440: 00f68023 sb a5,0(a3) + 142e: 2601 sext.w a2,a2 + 1430: 00000517 auipc a0,0x0 + 1434: 67850513 addi a0,a0,1656 # 1aa8 <digits> + 1438: 883a mv a6,a4 + 143a: 2705 addiw a4,a4,1 + 143c: 02c5f7bb remuw a5,a1,a2 + 1440: 1782 slli a5,a5,0x20 + 1442: 9381 srli a5,a5,0x20 + 1444: 97aa add a5,a5,a0 + 1446: 0007c783 lbu a5,0(a5) + 144a: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 1444: 0005879b sext.w a5,a1 - 1448: 02c5d5bb divuw a1,a1,a2 - 144c: 0685 addi a3,a3,1 - 144e: fec7f0e3 bgeu a5,a2,142e <printint+0x2c> + 144e: 0005879b sext.w a5,a1 + 1452: 02c5d5bb divuw a1,a1,a2 + 1456: 0685 addi a3,a3,1 + 1458: fec7f0e3 bgeu a5,a2,1438 <printint+0x2c> if(neg) - 1452: 00088c63 beqz a7,146a <printint+0x68> + 145c: 00088c63 beqz a7,1474 <printint+0x68> buf[i++] = '-'; - 1456: fd070793 addi a5,a4,-48 - 145a: 00878733 add a4,a5,s0 - 145e: 02d00793 li a5,45 - 1462: fef70823 sb a5,-16(a4) - 1466: 0028071b addiw a4,a6,2 + 1460: fd070793 addi a5,a4,-48 + 1464: 00878733 add a4,a5,s0 + 1468: 02d00793 li a5,45 + 146c: fef70823 sb a5,-16(a4) + 1470: 0028071b addiw a4,a6,2 while(--i >= 0) - 146a: 02e05663 blez a4,1496 <printint+0x94> - 146e: fc040913 addi s2,s0,-64 - 1472: 993a add s2,s2,a4 - 1474: 19fd addi s3,s3,-1 - 1476: 99ba add s3,s3,a4 - 1478: 377d addiw a4,a4,-1 - 147a: 1702 slli a4,a4,0x20 - 147c: 9301 srli a4,a4,0x20 - 147e: 40e989b3 sub s3,s3,a4 + 1474: 02e05663 blez a4,14a0 <printint+0x94> + 1478: fc040913 addi s2,s0,-64 + 147c: 993a add s2,s2,a4 + 147e: 19fd addi s3,s3,-1 + 1480: 99ba add s3,s3,a4 + 1482: 377d addiw a4,a4,-1 + 1484: 1702 slli a4,a4,0x20 + 1486: 9301 srli a4,a4,0x20 + 1488: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 1482: fff94583 lbu a1,-1(s2) - 1486: 8526 mv a0,s1 - 1488: 00000097 auipc ra,0x0 - 148c: f58080e7 jalr -168(ra) # 13e0 <putc> + 148c: fff94583 lbu a1,-1(s2) + 1490: 8526 mv a0,s1 + 1492: 00000097 auipc ra,0x0 + 1496: f58080e7 jalr -168(ra) # 13ea <putc> while(--i >= 0) - 1490: 197d addi s2,s2,-1 - 1492: ff3918e3 bne s2,s3,1482 <printint+0x80> + 149a: 197d addi s2,s2,-1 + 149c: ff3918e3 bne s2,s3,148c <printint+0x80> } - 1496: 70e2 ld ra,56(sp) - 1498: 7442 ld s0,48(sp) - 149a: 74a2 ld s1,40(sp) - 149c: 7902 ld s2,32(sp) - 149e: 69e2 ld s3,24(sp) - 14a0: 6121 addi sp,sp,64 - 14a2: 8082 ret + 14a0: 70e2 ld ra,56(sp) + 14a2: 7442 ld s0,48(sp) + 14a4: 74a2 ld s1,40(sp) + 14a6: 7902 ld s2,32(sp) + 14a8: 69e2 ld s3,24(sp) + 14aa: 6121 addi sp,sp,64 + 14ac: 8082 ret x = -xx; - 14a4: 40b005bb negw a1,a1 + 14ae: 40b005bb negw a1,a1 neg = 1; - 14a8: 4885 li a7,1 + 14b2: 4885 li a7,1 x = -xx; - 14aa: bf8d j 141c <printint+0x1a> + 14b4: bf8d j 1426 <printint+0x1a> -00000000000014ac <vprintf>: +00000000000014b6 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 14ac: 7119 addi sp,sp,-128 - 14ae: fc86 sd ra,120(sp) - 14b0: f8a2 sd s0,112(sp) - 14b2: f4a6 sd s1,104(sp) - 14b4: f0ca sd s2,96(sp) - 14b6: ecce sd s3,88(sp) - 14b8: e8d2 sd s4,80(sp) - 14ba: e4d6 sd s5,72(sp) - 14bc: e0da sd s6,64(sp) - 14be: fc5e sd s7,56(sp) - 14c0: f862 sd s8,48(sp) - 14c2: f466 sd s9,40(sp) - 14c4: f06a sd s10,32(sp) - 14c6: ec6e sd s11,24(sp) - 14c8: 0100 addi s0,sp,128 + 14b6: 7119 addi sp,sp,-128 + 14b8: fc86 sd ra,120(sp) + 14ba: f8a2 sd s0,112(sp) + 14bc: f4a6 sd s1,104(sp) + 14be: f0ca sd s2,96(sp) + 14c0: ecce sd s3,88(sp) + 14c2: e8d2 sd s4,80(sp) + 14c4: e4d6 sd s5,72(sp) + 14c6: e0da sd s6,64(sp) + 14c8: fc5e sd s7,56(sp) + 14ca: f862 sd s8,48(sp) + 14cc: f466 sd s9,40(sp) + 14ce: f06a sd s10,32(sp) + 14d0: ec6e sd s11,24(sp) + 14d2: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 14ca: 0005c903 lbu s2,0(a1) - 14ce: 18090f63 beqz s2,166c <vprintf+0x1c0> - 14d2: 8aaa mv s5,a0 - 14d4: 8b32 mv s6,a2 - 14d6: 00158493 addi s1,a1,1 + 14d4: 0005c903 lbu s2,0(a1) + 14d8: 18090f63 beqz s2,1676 <vprintf+0x1c0> + 14dc: 8aaa mv s5,a0 + 14de: 8b32 mv s6,a2 + 14e0: 00158493 addi s1,a1,1 state = 0; - 14da: 4981 li s3,0 + 14e4: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 14dc: 02500a13 li s4,37 - 14e0: 4c55 li s8,21 - 14e2: 00000c97 auipc s9,0x0 - 14e6: 566c8c93 addi s9,s9,1382 # 1a48 <malloc+0x2d8> + 14e6: 02500a13 li s4,37 + 14ea: 4c55 li s8,21 + 14ec: 00000c97 auipc s9,0x0 + 14f0: 564c8c93 addi s9,s9,1380 # 1a50 <malloc+0x2d6> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 14ea: 02800d93 li s11,40 + 14f4: 02800d93 li s11,40 putc(fd, 'x'); - 14ee: 4d41 li s10,16 + 14f8: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 14f0: 00000b97 auipc s7,0x0 - 14f4: 5b0b8b93 addi s7,s7,1456 # 1aa0 <digits> - 14f8: a839 j 1516 <vprintf+0x6a> + 14fa: 00000b97 auipc s7,0x0 + 14fe: 5aeb8b93 addi s7,s7,1454 # 1aa8 <digits> + 1502: a839 j 1520 <vprintf+0x6a> putc(fd, c); - 14fa: 85ca mv a1,s2 - 14fc: 8556 mv a0,s5 - 14fe: 00000097 auipc ra,0x0 - 1502: ee2080e7 jalr -286(ra) # 13e0 <putc> - 1506: a019 j 150c <vprintf+0x60> + 1504: 85ca mv a1,s2 + 1506: 8556 mv a0,s5 + 1508: 00000097 auipc ra,0x0 + 150c: ee2080e7 jalr -286(ra) # 13ea <putc> + 1510: a019 j 1516 <vprintf+0x60> } else if(state == '%'){ - 1508: 01498d63 beq s3,s4,1522 <vprintf+0x76> + 1512: 01498d63 beq s3,s4,152c <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 150c: 0485 addi s1,s1,1 - 150e: fff4c903 lbu s2,-1(s1) - 1512: 14090d63 beqz s2,166c <vprintf+0x1c0> + 1516: 0485 addi s1,s1,1 + 1518: fff4c903 lbu s2,-1(s1) + 151c: 14090d63 beqz s2,1676 <vprintf+0x1c0> if(state == 0){ - 1516: fe0999e3 bnez s3,1508 <vprintf+0x5c> + 1520: fe0999e3 bnez s3,1512 <vprintf+0x5c> if(c == '%'){ - 151a: ff4910e3 bne s2,s4,14fa <vprintf+0x4e> + 1524: ff4910e3 bne s2,s4,1504 <vprintf+0x4e> state = '%'; - 151e: 89d2 mv s3,s4 - 1520: b7f5 j 150c <vprintf+0x60> + 1528: 89d2 mv s3,s4 + 152a: b7f5 j 1516 <vprintf+0x60> if(c == 'd'){ - 1522: 11490c63 beq s2,s4,163a <vprintf+0x18e> - 1526: f9d9079b addiw a5,s2,-99 - 152a: 0ff7f793 zext.b a5,a5 - 152e: 10fc6e63 bltu s8,a5,164a <vprintf+0x19e> - 1532: f9d9079b addiw a5,s2,-99 - 1536: 0ff7f713 zext.b a4,a5 - 153a: 10ec6863 bltu s8,a4,164a <vprintf+0x19e> - 153e: 00271793 slli a5,a4,0x2 - 1542: 97e6 add a5,a5,s9 - 1544: 439c lw a5,0(a5) - 1546: 97e6 add a5,a5,s9 - 1548: 8782 jr a5 + 152c: 11490c63 beq s2,s4,1644 <vprintf+0x18e> + 1530: f9d9079b addiw a5,s2,-99 + 1534: 0ff7f793 zext.b a5,a5 + 1538: 10fc6e63 bltu s8,a5,1654 <vprintf+0x19e> + 153c: f9d9079b addiw a5,s2,-99 + 1540: 0ff7f713 zext.b a4,a5 + 1544: 10ec6863 bltu s8,a4,1654 <vprintf+0x19e> + 1548: 00271793 slli a5,a4,0x2 + 154c: 97e6 add a5,a5,s9 + 154e: 439c lw a5,0(a5) + 1550: 97e6 add a5,a5,s9 + 1552: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 154a: 008b0913 addi s2,s6,8 - 154e: 4685 li a3,1 - 1550: 4629 li a2,10 - 1552: 000b2583 lw a1,0(s6) - 1556: 8556 mv a0,s5 - 1558: 00000097 auipc ra,0x0 - 155c: eaa080e7 jalr -342(ra) # 1402 <printint> - 1560: 8b4a mv s6,s2 + 1554: 008b0913 addi s2,s6,8 + 1558: 4685 li a3,1 + 155a: 4629 li a2,10 + 155c: 000b2583 lw a1,0(s6) + 1560: 8556 mv a0,s5 + 1562: 00000097 auipc ra,0x0 + 1566: eaa080e7 jalr -342(ra) # 140c <printint> + 156a: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 1562: 4981 li s3,0 - 1564: b765 j 150c <vprintf+0x60> + 156c: 4981 li s3,0 + 156e: b765 j 1516 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 1566: 008b0913 addi s2,s6,8 - 156a: 4681 li a3,0 - 156c: 4629 li a2,10 - 156e: 000b2583 lw a1,0(s6) - 1572: 8556 mv a0,s5 - 1574: 00000097 auipc ra,0x0 - 1578: e8e080e7 jalr -370(ra) # 1402 <printint> - 157c: 8b4a mv s6,s2 + 1570: 008b0913 addi s2,s6,8 + 1574: 4681 li a3,0 + 1576: 4629 li a2,10 + 1578: 000b2583 lw a1,0(s6) + 157c: 8556 mv a0,s5 + 157e: 00000097 auipc ra,0x0 + 1582: e8e080e7 jalr -370(ra) # 140c <printint> + 1586: 8b4a mv s6,s2 state = 0; - 157e: 4981 li s3,0 - 1580: b771 j 150c <vprintf+0x60> + 1588: 4981 li s3,0 + 158a: b771 j 1516 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 1582: 008b0913 addi s2,s6,8 - 1586: 4681 li a3,0 - 1588: 866a mv a2,s10 - 158a: 000b2583 lw a1,0(s6) - 158e: 8556 mv a0,s5 - 1590: 00000097 auipc ra,0x0 - 1594: e72080e7 jalr -398(ra) # 1402 <printint> - 1598: 8b4a mv s6,s2 + 158c: 008b0913 addi s2,s6,8 + 1590: 4681 li a3,0 + 1592: 866a mv a2,s10 + 1594: 000b2583 lw a1,0(s6) + 1598: 8556 mv a0,s5 + 159a: 00000097 auipc ra,0x0 + 159e: e72080e7 jalr -398(ra) # 140c <printint> + 15a2: 8b4a mv s6,s2 state = 0; - 159a: 4981 li s3,0 - 159c: bf85 j 150c <vprintf+0x60> + 15a4: 4981 li s3,0 + 15a6: bf85 j 1516 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 159e: 008b0793 addi a5,s6,8 - 15a2: f8f43423 sd a5,-120(s0) - 15a6: 000b3983 ld s3,0(s6) + 15a8: 008b0793 addi a5,s6,8 + 15ac: f8f43423 sd a5,-120(s0) + 15b0: 000b3983 ld s3,0(s6) putc(fd, '0'); - 15aa: 03000593 li a1,48 - 15ae: 8556 mv a0,s5 - 15b0: 00000097 auipc ra,0x0 - 15b4: e30080e7 jalr -464(ra) # 13e0 <putc> + 15b4: 03000593 li a1,48 + 15b8: 8556 mv a0,s5 + 15ba: 00000097 auipc ra,0x0 + 15be: e30080e7 jalr -464(ra) # 13ea <putc> putc(fd, 'x'); - 15b8: 07800593 li a1,120 - 15bc: 8556 mv a0,s5 - 15be: 00000097 auipc ra,0x0 - 15c2: e22080e7 jalr -478(ra) # 13e0 <putc> - 15c6: 896a mv s2,s10 + 15c2: 07800593 li a1,120 + 15c6: 8556 mv a0,s5 + 15c8: 00000097 auipc ra,0x0 + 15cc: e22080e7 jalr -478(ra) # 13ea <putc> + 15d0: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 15c8: 03c9d793 srli a5,s3,0x3c - 15cc: 97de add a5,a5,s7 - 15ce: 0007c583 lbu a1,0(a5) - 15d2: 8556 mv a0,s5 - 15d4: 00000097 auipc ra,0x0 - 15d8: e0c080e7 jalr -500(ra) # 13e0 <putc> + 15d2: 03c9d793 srli a5,s3,0x3c + 15d6: 97de add a5,a5,s7 + 15d8: 0007c583 lbu a1,0(a5) + 15dc: 8556 mv a0,s5 + 15de: 00000097 auipc ra,0x0 + 15e2: e0c080e7 jalr -500(ra) # 13ea <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 15dc: 0992 slli s3,s3,0x4 - 15de: 397d addiw s2,s2,-1 - 15e0: fe0914e3 bnez s2,15c8 <vprintf+0x11c> + 15e6: 0992 slli s3,s3,0x4 + 15e8: 397d addiw s2,s2,-1 + 15ea: fe0914e3 bnez s2,15d2 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 15e4: f8843b03 ld s6,-120(s0) + 15ee: f8843b03 ld s6,-120(s0) state = 0; - 15e8: 4981 li s3,0 - 15ea: b70d j 150c <vprintf+0x60> + 15f2: 4981 li s3,0 + 15f4: b70d j 1516 <vprintf+0x60> s = va_arg(ap, char*); - 15ec: 008b0913 addi s2,s6,8 - 15f0: 000b3983 ld s3,0(s6) + 15f6: 008b0913 addi s2,s6,8 + 15fa: 000b3983 ld s3,0(s6) if(s == 0) - 15f4: 02098163 beqz s3,1616 <vprintf+0x16a> + 15fe: 02098163 beqz s3,1620 <vprintf+0x16a> while(*s != 0){ - 15f8: 0009c583 lbu a1,0(s3) - 15fc: c5ad beqz a1,1666 <vprintf+0x1ba> + 1602: 0009c583 lbu a1,0(s3) + 1606: c5ad beqz a1,1670 <vprintf+0x1ba> putc(fd, *s); - 15fe: 8556 mv a0,s5 - 1600: 00000097 auipc ra,0x0 - 1604: de0080e7 jalr -544(ra) # 13e0 <putc> + 1608: 8556 mv a0,s5 + 160a: 00000097 auipc ra,0x0 + 160e: de0080e7 jalr -544(ra) # 13ea <putc> s++; - 1608: 0985 addi s3,s3,1 + 1612: 0985 addi s3,s3,1 while(*s != 0){ - 160a: 0009c583 lbu a1,0(s3) - 160e: f9e5 bnez a1,15fe <vprintf+0x152> + 1614: 0009c583 lbu a1,0(s3) + 1618: f9e5 bnez a1,1608 <vprintf+0x152> s = va_arg(ap, char*); - 1610: 8b4a mv s6,s2 + 161a: 8b4a mv s6,s2 state = 0; - 1612: 4981 li s3,0 - 1614: bde5 j 150c <vprintf+0x60> + 161c: 4981 li s3,0 + 161e: bde5 j 1516 <vprintf+0x60> s = "(null)"; - 1616: 00000997 auipc s3,0x0 - 161a: 42a98993 addi s3,s3,1066 # 1a40 <malloc+0x2d0> + 1620: 00000997 auipc s3,0x0 + 1624: 42898993 addi s3,s3,1064 # 1a48 <malloc+0x2ce> while(*s != 0){ - 161e: 85ee mv a1,s11 - 1620: bff9 j 15fe <vprintf+0x152> + 1628: 85ee mv a1,s11 + 162a: bff9 j 1608 <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 1622: 008b0913 addi s2,s6,8 - 1626: 000b4583 lbu a1,0(s6) - 162a: 8556 mv a0,s5 - 162c: 00000097 auipc ra,0x0 - 1630: db4080e7 jalr -588(ra) # 13e0 <putc> - 1634: 8b4a mv s6,s2 + 162c: 008b0913 addi s2,s6,8 + 1630: 000b4583 lbu a1,0(s6) + 1634: 8556 mv a0,s5 + 1636: 00000097 auipc ra,0x0 + 163a: db4080e7 jalr -588(ra) # 13ea <putc> + 163e: 8b4a mv s6,s2 state = 0; - 1636: 4981 li s3,0 - 1638: bdd1 j 150c <vprintf+0x60> + 1640: 4981 li s3,0 + 1642: bdd1 j 1516 <vprintf+0x60> putc(fd, c); - 163a: 85d2 mv a1,s4 - 163c: 8556 mv a0,s5 - 163e: 00000097 auipc ra,0x0 - 1642: da2080e7 jalr -606(ra) # 13e0 <putc> + 1644: 85d2 mv a1,s4 + 1646: 8556 mv a0,s5 + 1648: 00000097 auipc ra,0x0 + 164c: da2080e7 jalr -606(ra) # 13ea <putc> state = 0; - 1646: 4981 li s3,0 - 1648: b5d1 j 150c <vprintf+0x60> + 1650: 4981 li s3,0 + 1652: b5d1 j 1516 <vprintf+0x60> putc(fd, '%'); - 164a: 85d2 mv a1,s4 - 164c: 8556 mv a0,s5 - 164e: 00000097 auipc ra,0x0 - 1652: d92080e7 jalr -622(ra) # 13e0 <putc> + 1654: 85d2 mv a1,s4 + 1656: 8556 mv a0,s5 + 1658: 00000097 auipc ra,0x0 + 165c: d92080e7 jalr -622(ra) # 13ea <putc> putc(fd, c); - 1656: 85ca mv a1,s2 - 1658: 8556 mv a0,s5 - 165a: 00000097 auipc ra,0x0 - 165e: d86080e7 jalr -634(ra) # 13e0 <putc> + 1660: 85ca mv a1,s2 + 1662: 8556 mv a0,s5 + 1664: 00000097 auipc ra,0x0 + 1668: d86080e7 jalr -634(ra) # 13ea <putc> state = 0; - 1662: 4981 li s3,0 - 1664: b565 j 150c <vprintf+0x60> + 166c: 4981 li s3,0 + 166e: b565 j 1516 <vprintf+0x60> s = va_arg(ap, char*); - 1666: 8b4a mv s6,s2 + 1670: 8b4a mv s6,s2 state = 0; - 1668: 4981 li s3,0 - 166a: b54d j 150c <vprintf+0x60> + 1672: 4981 li s3,0 + 1674: b54d j 1516 <vprintf+0x60> } } } - 166c: 70e6 ld ra,120(sp) - 166e: 7446 ld s0,112(sp) - 1670: 74a6 ld s1,104(sp) - 1672: 7906 ld s2,96(sp) - 1674: 69e6 ld s3,88(sp) - 1676: 6a46 ld s4,80(sp) - 1678: 6aa6 ld s5,72(sp) - 167a: 6b06 ld s6,64(sp) - 167c: 7be2 ld s7,56(sp) - 167e: 7c42 ld s8,48(sp) - 1680: 7ca2 ld s9,40(sp) - 1682: 7d02 ld s10,32(sp) - 1684: 6de2 ld s11,24(sp) - 1686: 6109 addi sp,sp,128 - 1688: 8082 ret - -000000000000168a <fprintf>: + 1676: 70e6 ld ra,120(sp) + 1678: 7446 ld s0,112(sp) + 167a: 74a6 ld s1,104(sp) + 167c: 7906 ld s2,96(sp) + 167e: 69e6 ld s3,88(sp) + 1680: 6a46 ld s4,80(sp) + 1682: 6aa6 ld s5,72(sp) + 1684: 6b06 ld s6,64(sp) + 1686: 7be2 ld s7,56(sp) + 1688: 7c42 ld s8,48(sp) + 168a: 7ca2 ld s9,40(sp) + 168c: 7d02 ld s10,32(sp) + 168e: 6de2 ld s11,24(sp) + 1690: 6109 addi sp,sp,128 + 1692: 8082 ret + +0000000000001694 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 168a: 715d addi sp,sp,-80 - 168c: ec06 sd ra,24(sp) - 168e: e822 sd s0,16(sp) - 1690: 1000 addi s0,sp,32 - 1692: e010 sd a2,0(s0) - 1694: e414 sd a3,8(s0) - 1696: e818 sd a4,16(s0) - 1698: ec1c sd a5,24(s0) - 169a: 03043023 sd a6,32(s0) - 169e: 03143423 sd a7,40(s0) + 1694: 715d addi sp,sp,-80 + 1696: ec06 sd ra,24(sp) + 1698: e822 sd s0,16(sp) + 169a: 1000 addi s0,sp,32 + 169c: e010 sd a2,0(s0) + 169e: e414 sd a3,8(s0) + 16a0: e818 sd a4,16(s0) + 16a2: ec1c sd a5,24(s0) + 16a4: 03043023 sd a6,32(s0) + 16a8: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 16a2: 8622 mv a2,s0 - 16a4: fe843423 sd s0,-24(s0) + 16ac: 8622 mv a2,s0 + 16ae: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 16a8: 00000097 auipc ra,0x0 - 16ac: e04080e7 jalr -508(ra) # 14ac <vprintf> + 16b2: 00000097 auipc ra,0x0 + 16b6: e04080e7 jalr -508(ra) # 14b6 <vprintf> } - 16b0: 60e2 ld ra,24(sp) - 16b2: 6442 ld s0,16(sp) - 16b4: 6161 addi sp,sp,80 - 16b6: 8082 ret + 16ba: 60e2 ld ra,24(sp) + 16bc: 6442 ld s0,16(sp) + 16be: 6161 addi sp,sp,80 + 16c0: 8082 ret -00000000000016b8 <printf>: +00000000000016c2 <printf>: void printf(const char *fmt, ...) { - 16b8: 711d addi sp,sp,-96 - 16ba: ec06 sd ra,24(sp) - 16bc: e822 sd s0,16(sp) - 16be: 1000 addi s0,sp,32 - 16c0: e40c sd a1,8(s0) - 16c2: e810 sd a2,16(s0) - 16c4: ec14 sd a3,24(s0) - 16c6: f018 sd a4,32(s0) - 16c8: f41c sd a5,40(s0) - 16ca: 03043823 sd a6,48(s0) - 16ce: 03143c23 sd a7,56(s0) + 16c2: 711d addi sp,sp,-96 + 16c4: ec06 sd ra,24(sp) + 16c6: e822 sd s0,16(sp) + 16c8: 1000 addi s0,sp,32 + 16ca: e40c sd a1,8(s0) + 16cc: e810 sd a2,16(s0) + 16ce: ec14 sd a3,24(s0) + 16d0: f018 sd a4,32(s0) + 16d2: f41c sd a5,40(s0) + 16d4: 03043823 sd a6,48(s0) + 16d8: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 16d2: 00840613 addi a2,s0,8 - 16d6: fec43423 sd a2,-24(s0) + 16dc: 00840613 addi a2,s0,8 + 16e0: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 16da: 85aa mv a1,a0 - 16dc: 4505 li a0,1 - 16de: 00000097 auipc ra,0x0 - 16e2: dce080e7 jalr -562(ra) # 14ac <vprintf> + 16e4: 85aa mv a1,a0 + 16e6: 4505 li a0,1 + 16e8: 00000097 auipc ra,0x0 + 16ec: dce080e7 jalr -562(ra) # 14b6 <vprintf> } - 16e6: 60e2 ld ra,24(sp) - 16e8: 6442 ld s0,16(sp) - 16ea: 6125 addi sp,sp,96 - 16ec: 8082 ret + 16f0: 60e2 ld ra,24(sp) + 16f2: 6442 ld s0,16(sp) + 16f4: 6125 addi sp,sp,96 + 16f6: 8082 ret -00000000000016ee <free>: +00000000000016f8 <free>: static Header base; static Header *freep; void free(void *ap) { - 16ee: 1141 addi sp,sp,-16 - 16f0: e422 sd s0,8(sp) - 16f2: 0800 addi s0,sp,16 + 16f8: 1141 addi sp,sp,-16 + 16fa: e422 sd s0,8(sp) + 16fc: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 16f4: ff050693 addi a3,a0,-16 + 16fe: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 16f8: 00001797 auipc a5,0x1 - 16fc: cc07b783 ld a5,-832(a5) # 23b8 <freep> - 1700: a02d j 172a <free+0x3c> + 1702: 00001797 auipc a5,0x1 + 1706: cbe7b783 ld a5,-834(a5) # 23c0 <freep> + 170a: a02d j 1734 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 1702: 4618 lw a4,8(a2) - 1704: 9f2d addw a4,a4,a1 - 1706: fee52c23 sw a4,-8(a0) + 170c: 4618 lw a4,8(a2) + 170e: 9f2d addw a4,a4,a1 + 1710: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 170a: 6398 ld a4,0(a5) - 170c: 6310 ld a2,0(a4) - 170e: a83d j 174c <free+0x5e> + 1714: 6398 ld a4,0(a5) + 1716: 6310 ld a2,0(a4) + 1718: a83d j 1756 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 1710: ff852703 lw a4,-8(a0) - 1714: 9f31 addw a4,a4,a2 - 1716: c798 sw a4,8(a5) + 171a: ff852703 lw a4,-8(a0) + 171e: 9f31 addw a4,a4,a2 + 1720: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 1718: ff053683 ld a3,-16(a0) - 171c: a091 j 1760 <free+0x72> + 1722: ff053683 ld a3,-16(a0) + 1726: a091 j 176a <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 171e: 6398 ld a4,0(a5) - 1720: 00e7e463 bltu a5,a4,1728 <free+0x3a> - 1724: 00e6ea63 bltu a3,a4,1738 <free+0x4a> + 1728: 6398 ld a4,0(a5) + 172a: 00e7e463 bltu a5,a4,1732 <free+0x3a> + 172e: 00e6ea63 bltu a3,a4,1742 <free+0x4a> { - 1728: 87ba mv a5,a4 + 1732: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 172a: fed7fae3 bgeu a5,a3,171e <free+0x30> - 172e: 6398 ld a4,0(a5) - 1730: 00e6e463 bltu a3,a4,1738 <free+0x4a> + 1734: fed7fae3 bgeu a5,a3,1728 <free+0x30> + 1738: 6398 ld a4,0(a5) + 173a: 00e6e463 bltu a3,a4,1742 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 1734: fee7eae3 bltu a5,a4,1728 <free+0x3a> + 173e: fee7eae3 bltu a5,a4,1732 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 1738: ff852583 lw a1,-8(a0) - 173c: 6390 ld a2,0(a5) - 173e: 02059813 slli a6,a1,0x20 - 1742: 01c85713 srli a4,a6,0x1c - 1746: 9736 add a4,a4,a3 - 1748: fae60de3 beq a2,a4,1702 <free+0x14> + 1742: ff852583 lw a1,-8(a0) + 1746: 6390 ld a2,0(a5) + 1748: 02059813 slli a6,a1,0x20 + 174c: 01c85713 srli a4,a6,0x1c + 1750: 9736 add a4,a4,a3 + 1752: fae60de3 beq a2,a4,170c <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 174c: fec53823 sd a2,-16(a0) + 1756: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 1750: 4790 lw a2,8(a5) - 1752: 02061593 slli a1,a2,0x20 - 1756: 01c5d713 srli a4,a1,0x1c - 175a: 973e add a4,a4,a5 - 175c: fae68ae3 beq a3,a4,1710 <free+0x22> + 175a: 4790 lw a2,8(a5) + 175c: 02061593 slli a1,a2,0x20 + 1760: 01c5d713 srli a4,a1,0x1c + 1764: 973e add a4,a4,a5 + 1766: fae68ae3 beq a3,a4,171a <free+0x22> p->s.ptr = bp->s.ptr; - 1760: e394 sd a3,0(a5) + 176a: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 1762: 00001717 auipc a4,0x1 - 1766: c4f73b23 sd a5,-938(a4) # 23b8 <freep> + 176c: 00001717 auipc a4,0x1 + 1770: c4f73a23 sd a5,-940(a4) # 23c0 <freep> } - 176a: 6422 ld s0,8(sp) - 176c: 0141 addi sp,sp,16 - 176e: 8082 ret + 1774: 6422 ld s0,8(sp) + 1776: 0141 addi sp,sp,16 + 1778: 8082 ret -0000000000001770 <malloc>: +000000000000177a <malloc>: return freep; } void* malloc(uint nbytes) { - 1770: 7139 addi sp,sp,-64 - 1772: fc06 sd ra,56(sp) - 1774: f822 sd s0,48(sp) - 1776: f426 sd s1,40(sp) - 1778: f04a sd s2,32(sp) - 177a: ec4e sd s3,24(sp) - 177c: e852 sd s4,16(sp) - 177e: e456 sd s5,8(sp) - 1780: e05a sd s6,0(sp) - 1782: 0080 addi s0,sp,64 + 177a: 7139 addi sp,sp,-64 + 177c: fc06 sd ra,56(sp) + 177e: f822 sd s0,48(sp) + 1780: f426 sd s1,40(sp) + 1782: f04a sd s2,32(sp) + 1784: ec4e sd s3,24(sp) + 1786: e852 sd s4,16(sp) + 1788: e456 sd s5,8(sp) + 178a: e05a sd s6,0(sp) + 178c: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 1784: 02051493 slli s1,a0,0x20 - 1788: 9081 srli s1,s1,0x20 - 178a: 04bd addi s1,s1,15 - 178c: 8091 srli s1,s1,0x4 - 178e: 00148a1b addiw s4,s1,1 - 1792: 0485 addi s1,s1,1 + 178e: 02051493 slli s1,a0,0x20 + 1792: 9081 srli s1,s1,0x20 + 1794: 04bd addi s1,s1,15 + 1796: 8091 srli s1,s1,0x4 + 1798: 00148a1b addiw s4,s1,1 + 179c: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 1794: 00001517 auipc a0,0x1 - 1798: c2453503 ld a0,-988(a0) # 23b8 <freep> - 179c: c515 beqz a0,17c8 <malloc+0x58> + 179e: 00001517 auipc a0,0x1 + 17a2: c2253503 ld a0,-990(a0) # 23c0 <freep> + 17a6: c515 beqz a0,17d2 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 179e: 611c ld a5,0(a0) + 17a8: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 17a0: 4798 lw a4,8(a5) - 17a2: 04977163 bgeu a4,s1,17e4 <malloc+0x74> - 17a6: 89d2 mv s3,s4 - 17a8: 000a071b sext.w a4,s4 - 17ac: 6685 lui a3,0x1 - 17ae: 00d77363 bgeu a4,a3,17b4 <malloc+0x44> - 17b2: 6985 lui s3,0x1 - 17b4: 00098b1b sext.w s6,s3 + 17aa: 4798 lw a4,8(a5) + 17ac: 04977163 bgeu a4,s1,17ee <malloc+0x74> + 17b0: 89d2 mv s3,s4 + 17b2: 000a071b sext.w a4,s4 + 17b6: 6685 lui a3,0x1 + 17b8: 00d77363 bgeu a4,a3,17be <malloc+0x44> + 17bc: 6985 lui s3,0x1 + 17be: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 17b8: 0049999b slliw s3,s3,0x4 + 17c2: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 17bc: 00001917 auipc s2,0x1 - 17c0: bfc90913 addi s2,s2,-1028 # 23b8 <freep> + 17c6: 00001917 auipc s2,0x1 + 17ca: bfa90913 addi s2,s2,-1030 # 23c0 <freep> if(p == (char*)-1) - 17c4: 5afd li s5,-1 - 17c6: a8a5 j 183e <malloc+0xce> + 17ce: 5afd li s5,-1 + 17d0: a8a5 j 1848 <malloc+0xce> base.s.ptr = freep = prevp = &base; - 17c8: 00001797 auipc a5,0x1 - 17cc: bf078793 addi a5,a5,-1040 # 23b8 <freep> - 17d0: 00001717 auipc a4,0x1 - 17d4: bf070713 addi a4,a4,-1040 # 23c0 <base> - 17d8: e398 sd a4,0(a5) - 17da: e798 sd a4,8(a5) + 17d2: 00001797 auipc a5,0x1 + 17d6: bee78793 addi a5,a5,-1042 # 23c0 <freep> + 17da: 00001717 auipc a4,0x1 + 17de: bee70713 addi a4,a4,-1042 # 23c8 <base> + 17e2: e398 sd a4,0(a5) + 17e4: e798 sd a4,8(a5) base.s.size = 0; - 17dc: 0007a823 sw zero,16(a5) + 17e6: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 17e0: 87ba mv a5,a4 - 17e2: b7d1 j 17a6 <malloc+0x36> + 17ea: 87ba mv a5,a4 + 17ec: b7d1 j 17b0 <malloc+0x36> if(p->s.size == nunits) - 17e4: 02e48c63 beq s1,a4,181c <malloc+0xac> + 17ee: 02e48c63 beq s1,a4,1826 <malloc+0xac> p->s.size -= nunits; - 17e8: 4147073b subw a4,a4,s4 - 17ec: c798 sw a4,8(a5) + 17f2: 4147073b subw a4,a4,s4 + 17f6: c798 sw a4,8(a5) p += p->s.size; - 17ee: 02071693 slli a3,a4,0x20 - 17f2: 01c6d713 srli a4,a3,0x1c - 17f6: 97ba add a5,a5,a4 + 17f8: 02071693 slli a3,a4,0x20 + 17fc: 01c6d713 srli a4,a3,0x1c + 1800: 97ba add a5,a5,a4 p->s.size = nunits; - 17f8: 0147a423 sw s4,8(a5) + 1802: 0147a423 sw s4,8(a5) freep = prevp; - 17fc: 00001717 auipc a4,0x1 - 1800: baa73e23 sd a0,-1092(a4) # 23b8 <freep> + 1806: 00001717 auipc a4,0x1 + 180a: baa73d23 sd a0,-1094(a4) # 23c0 <freep> return (void*)(p + 1); - 1804: 01078513 addi a0,a5,16 + 180e: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 1808: 70e2 ld ra,56(sp) - 180a: 7442 ld s0,48(sp) - 180c: 74a2 ld s1,40(sp) - 180e: 7902 ld s2,32(sp) - 1810: 69e2 ld s3,24(sp) - 1812: 6a42 ld s4,16(sp) - 1814: 6aa2 ld s5,8(sp) - 1816: 6b02 ld s6,0(sp) - 1818: 6121 addi sp,sp,64 - 181a: 8082 ret + 1812: 70e2 ld ra,56(sp) + 1814: 7442 ld s0,48(sp) + 1816: 74a2 ld s1,40(sp) + 1818: 7902 ld s2,32(sp) + 181a: 69e2 ld s3,24(sp) + 181c: 6a42 ld s4,16(sp) + 181e: 6aa2 ld s5,8(sp) + 1820: 6b02 ld s6,0(sp) + 1822: 6121 addi sp,sp,64 + 1824: 8082 ret prevp->s.ptr = p->s.ptr; - 181c: 6398 ld a4,0(a5) - 181e: e118 sd a4,0(a0) - 1820: bff1 j 17fc <malloc+0x8c> + 1826: 6398 ld a4,0(a5) + 1828: e118 sd a4,0(a0) + 182a: bff1 j 1806 <malloc+0x8c> hp->s.size = nu; - 1822: 01652423 sw s6,8(a0) + 182c: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 1826: 0541 addi a0,a0,16 - 1828: 00000097 auipc ra,0x0 - 182c: ec6080e7 jalr -314(ra) # 16ee <free> + 1830: 0541 addi a0,a0,16 + 1832: 00000097 auipc ra,0x0 + 1836: ec6080e7 jalr -314(ra) # 16f8 <free> return freep; - 1830: 00093503 ld a0,0(s2) + 183a: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 1834: d971 beqz a0,1808 <malloc+0x98> + 183e: d971 beqz a0,1812 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 1836: 611c ld a5,0(a0) + 1840: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 1838: 4798 lw a4,8(a5) - 183a: fa9775e3 bgeu a4,s1,17e4 <malloc+0x74> + 1842: 4798 lw a4,8(a5) + 1844: fa9775e3 bgeu a4,s1,17ee <malloc+0x74> if(p == freep) - 183e: 00093703 ld a4,0(s2) - 1842: 853e mv a0,a5 - 1844: fef719e3 bne a4,a5,1836 <malloc+0xc6> + 1848: 00093703 ld a4,0(s2) + 184c: 853e mv a0,a5 + 184e: fef719e3 bne a4,a5,1840 <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 1848: 854e mv a0,s3 - 184a: 00000097 auipc ra,0x0 - 184e: b2a080e7 jalr -1238(ra) # 1374 <sbrk> + 1852: 854e mv a0,s3 + 1854: 00000097 auipc ra,0x0 + 1858: b20080e7 jalr -1248(ra) # 1374 <sbrk> if(p == (char*)-1) - 1852: fd5518e3 bne a0,s5,1822 <malloc+0xb2> + 185c: fd5518e3 bne a0,s5,182c <malloc+0xb2> return 0; - 1856: 4501 li a0,0 - 1858: bf45 j 1808 <malloc+0x98> + 1860: 4501 li a0,0 + 1862: bf45 j 1812 <malloc+0x98> diff --git a/xv6-user/sh.sym b/xv6-user/sh.sym index 83113ba..ae0d9cc 100644 --- a/xv6-user/sh.sym +++ b/xv6-user/sh.sym @@ -1,7 +1,7 @@ 0000000000000000 .text -0000000000001860 .rodata -0000000000001ab8 .data -0000000000001ac8 .bss +0000000000001868 .rodata +0000000000001ac0 .data +0000000000001ad0 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -14,40 +14,41 @@ 0000000000000000 .debug_loclists 0000000000000000 .debug_rnglists 0000000000000000 sh.c -0000000000001b50 buf.0 +0000000000001b58 buf.0 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -00000000000013e0 putc -0000000000001402 printint -0000000000001aa0 digits +00000000000013ea putc +000000000000140c printint +0000000000001aa8 digits 0000000000000000 umalloc.c -00000000000023b8 freep -00000000000023c0 base +00000000000023c0 freep +00000000000023c8 base 0000000000001038 strcpy -00000000000016b8 printf -00000000000022b8 __global_pointer$ +00000000000016c2 printf +00000000000022c0 __global_pointer$ 0000000000001394 dev 000000000000123e memmove 000000000000064a execcmd +00000000000013e0 times 00000000000013b4 trace 000000000000111e gets -0000000000001ac8 __SDATA_BEGIN__ +0000000000001ad0 __SDATA_BEGIN__ 000000000000136a getpid 0000000000000b7a parsepipe 0000000000000dcc parsecmd 00000000000012d0 memcpy 0000000000000774 backcmd 00000000000008f2 peek -0000000000001ad0 mycwd +0000000000001ad8 mycwd 000000000000095e parseredirs 00000000000007b0 gettoken -0000000000001770 malloc +000000000000177a malloc 00000000000013ac remove 000000000000137c sleep 00000000000013bc sysinfo -0000000000001ab8 whitespace -0000000000001bb8 envs +0000000000001ac0 whitespace +0000000000001bc0 envs 000000000000139c readdir 00000000000003c4 fork1 0000000000000d34 nulterminate @@ -58,27 +59,27 @@ 0000000000001316 write 00000000000001fe replace 0000000000001344 fstat -000000000000168a fprintf +0000000000001694 fprintf 000000000000132a kill 0000000000001054 strcat -00000000000014ac vprintf +00000000000014b6 vprintf 0000000000001358 chdir 0000000000000be8 parseline 00000000000003f2 runcmd 0000000000000c90 parseblock 0000000000001332 exec 00000000000012fa wait -0000000000001ac0 symbols +0000000000001ac8 symbols 000000000000130c read 0000000000000a66 parseexec 000000000000039e panic 0000000000001296 memcmp 00000000000012e8 fork -00000000000023d0 __BSS_END__ +00000000000023d8 __BSS_END__ 0000000000001374 sbrk 000000000000138c test_proc 0000000000001384 uptime -0000000000001ac8 __bss_start +0000000000001ad0 __bss_start 00000000000010d8 memset 0000000000000e58 main 0000000000000000 checkenvname @@ -89,10 +90,10 @@ 00000000000006e8 pipecmd 0000000000000066 export 0000000000000680 redircmd -0000000000001ab8 __DATA_BEGIN__ +0000000000001ac0 __DATA_BEGIN__ 0000000000001198 stat -0000000000001ac8 _edata -00000000000023d0 _end +0000000000001ad0 _edata +00000000000023d8 _end 00000000000012f0 exit 00000000000011de atoi 00000000000010ae strlen @@ -100,6 +101,6 @@ 00000000000010fa strchr 000000000000134e mkdir 0000000000001320 close -0000000000001ac8 nenv +0000000000001ad0 nenv 000000000000072e listcmd -00000000000016ee free +00000000000016f8 free diff --git a/xv6-user/sleep.asm b/xv6-user/sleep.asm index f0ae422..ccc9700 100644 --- a/xv6-user/sleep.asm +++ b/xv6-user/sleep.asm @@ -29,20 +29,20 @@ main(int argc, char *argv[]) 18: ed0d bnez a0,52 <main+0x52> fprintf(2, "Usage: sleep TIME\nTIME should be an integer larger than 0.\n"); 1a: 00001597 auipc a1,0x1 - 1e: 88658593 addi a1,a1,-1914 # 8a0 <malloc+0x104> + 1e: 88e58593 addi a1,a1,-1906 # 8a8 <malloc+0x102> 22: 4509 li a0,2 24: 00000097 auipc ra,0x0 - 28: 692080e7 jalr 1682(ra) # 6b6 <fprintf> + 28: 69c080e7 jalr 1692(ra) # 6c0 <fprintf> exit(1); 2c: 4505 li a0,1 2e: 00000097 auipc ra,0x0 32: 2ee080e7 jalr 750(ra) # 31c <exit> fprintf(2, "Usage: sleep TIME\n"); 36: 00001597 auipc a1,0x1 - 3a: 85258593 addi a1,a1,-1966 # 888 <malloc+0xec> + 3a: 85a58593 addi a1,a1,-1958 # 890 <malloc+0xea> 3e: 4509 li a0,2 40: 00000097 auipc ra,0x0 - 44: 676080e7 jalr 1654(ra) # 6b6 <fprintf> + 44: 680080e7 jalr 1664(ra) # 6c0 <fprintf> exit(1); 48: 4505 li a0,1 4a: 00000097 auipc ra,0x0 @@ -812,637 +812,647 @@ uname: ret 40a: 8082 ret -000000000000040c <putc>: +000000000000040c <times>: +.global times +times: + li a7, SYS_times + 40c: 09900893 li a7,153 + ecall + 410: 00000073 ecall + ret + 414: 8082 ret + +0000000000000416 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 40c: 1101 addi sp,sp,-32 - 40e: ec06 sd ra,24(sp) - 410: e822 sd s0,16(sp) - 412: 1000 addi s0,sp,32 - 414: feb407a3 sb a1,-17(s0) + 416: 1101 addi sp,sp,-32 + 418: ec06 sd ra,24(sp) + 41a: e822 sd s0,16(sp) + 41c: 1000 addi s0,sp,32 + 41e: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 418: 4605 li a2,1 - 41a: fef40593 addi a1,s0,-17 - 41e: 00000097 auipc ra,0x0 - 422: f24080e7 jalr -220(ra) # 342 <write> + 422: 4605 li a2,1 + 424: fef40593 addi a1,s0,-17 + 428: 00000097 auipc ra,0x0 + 42c: f1a080e7 jalr -230(ra) # 342 <write> } - 426: 60e2 ld ra,24(sp) - 428: 6442 ld s0,16(sp) - 42a: 6105 addi sp,sp,32 - 42c: 8082 ret + 430: 60e2 ld ra,24(sp) + 432: 6442 ld s0,16(sp) + 434: 6105 addi sp,sp,32 + 436: 8082 ret -000000000000042e <printint>: +0000000000000438 <printint>: static void printint(int fd, int xx, int base, int sgn) { - 42e: 7139 addi sp,sp,-64 - 430: fc06 sd ra,56(sp) - 432: f822 sd s0,48(sp) - 434: f426 sd s1,40(sp) - 436: f04a sd s2,32(sp) - 438: ec4e sd s3,24(sp) - 43a: 0080 addi s0,sp,64 - 43c: 84aa mv s1,a0 + 438: 7139 addi sp,sp,-64 + 43a: fc06 sd ra,56(sp) + 43c: f822 sd s0,48(sp) + 43e: f426 sd s1,40(sp) + 440: f04a sd s2,32(sp) + 442: ec4e sd s3,24(sp) + 444: 0080 addi s0,sp,64 + 446: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 43e: c299 beqz a3,444 <printint+0x16> - 440: 0805c863 bltz a1,4d0 <printint+0xa2> + 448: c299 beqz a3,44e <printint+0x16> + 44a: 0805c863 bltz a1,4da <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 444: 2581 sext.w a1,a1 + 44e: 2581 sext.w a1,a1 neg = 0; - 446: 4881 li a7,0 + 450: 4881 li a7,0 } i = 0; - 448: fc040993 addi s3,s0,-64 + 452: fc040993 addi s3,s0,-64 neg = 0; - 44c: 86ce mv a3,s3 + 456: 86ce mv a3,s3 i = 0; - 44e: 4701 li a4,0 + 458: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 450: 2601 sext.w a2,a2 - 452: 00000517 auipc a0,0x0 - 456: 4ee50513 addi a0,a0,1262 # 940 <digits> - 45a: 883a mv a6,a4 - 45c: 2705 addiw a4,a4,1 - 45e: 02c5f7bb remuw a5,a1,a2 - 462: 1782 slli a5,a5,0x20 - 464: 9381 srli a5,a5,0x20 - 466: 97aa add a5,a5,a0 - 468: 0007c783 lbu a5,0(a5) - 46c: 00f68023 sb a5,0(a3) + 45a: 2601 sext.w a2,a2 + 45c: 00000517 auipc a0,0x0 + 460: 4ec50513 addi a0,a0,1260 # 948 <digits> + 464: 883a mv a6,a4 + 466: 2705 addiw a4,a4,1 + 468: 02c5f7bb remuw a5,a1,a2 + 46c: 1782 slli a5,a5,0x20 + 46e: 9381 srli a5,a5,0x20 + 470: 97aa add a5,a5,a0 + 472: 0007c783 lbu a5,0(a5) + 476: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 470: 0005879b sext.w a5,a1 - 474: 02c5d5bb divuw a1,a1,a2 - 478: 0685 addi a3,a3,1 - 47a: fec7f0e3 bgeu a5,a2,45a <printint+0x2c> + 47a: 0005879b sext.w a5,a1 + 47e: 02c5d5bb divuw a1,a1,a2 + 482: 0685 addi a3,a3,1 + 484: fec7f0e3 bgeu a5,a2,464 <printint+0x2c> if(neg) - 47e: 00088c63 beqz a7,496 <printint+0x68> + 488: 00088c63 beqz a7,4a0 <printint+0x68> buf[i++] = '-'; - 482: fd070793 addi a5,a4,-48 - 486: 00878733 add a4,a5,s0 - 48a: 02d00793 li a5,45 - 48e: fef70823 sb a5,-16(a4) - 492: 0028071b addiw a4,a6,2 + 48c: fd070793 addi a5,a4,-48 + 490: 00878733 add a4,a5,s0 + 494: 02d00793 li a5,45 + 498: fef70823 sb a5,-16(a4) + 49c: 0028071b addiw a4,a6,2 while(--i >= 0) - 496: 02e05663 blez a4,4c2 <printint+0x94> - 49a: fc040913 addi s2,s0,-64 - 49e: 993a add s2,s2,a4 - 4a0: 19fd addi s3,s3,-1 - 4a2: 99ba add s3,s3,a4 - 4a4: 377d addiw a4,a4,-1 - 4a6: 1702 slli a4,a4,0x20 - 4a8: 9301 srli a4,a4,0x20 - 4aa: 40e989b3 sub s3,s3,a4 + 4a0: 02e05663 blez a4,4cc <printint+0x94> + 4a4: fc040913 addi s2,s0,-64 + 4a8: 993a add s2,s2,a4 + 4aa: 19fd addi s3,s3,-1 + 4ac: 99ba add s3,s3,a4 + 4ae: 377d addiw a4,a4,-1 + 4b0: 1702 slli a4,a4,0x20 + 4b2: 9301 srli a4,a4,0x20 + 4b4: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 4ae: fff94583 lbu a1,-1(s2) - 4b2: 8526 mv a0,s1 - 4b4: 00000097 auipc ra,0x0 - 4b8: f58080e7 jalr -168(ra) # 40c <putc> + 4b8: fff94583 lbu a1,-1(s2) + 4bc: 8526 mv a0,s1 + 4be: 00000097 auipc ra,0x0 + 4c2: f58080e7 jalr -168(ra) # 416 <putc> while(--i >= 0) - 4bc: 197d addi s2,s2,-1 - 4be: ff3918e3 bne s2,s3,4ae <printint+0x80> + 4c6: 197d addi s2,s2,-1 + 4c8: ff3918e3 bne s2,s3,4b8 <printint+0x80> } - 4c2: 70e2 ld ra,56(sp) - 4c4: 7442 ld s0,48(sp) - 4c6: 74a2 ld s1,40(sp) - 4c8: 7902 ld s2,32(sp) - 4ca: 69e2 ld s3,24(sp) - 4cc: 6121 addi sp,sp,64 - 4ce: 8082 ret + 4cc: 70e2 ld ra,56(sp) + 4ce: 7442 ld s0,48(sp) + 4d0: 74a2 ld s1,40(sp) + 4d2: 7902 ld s2,32(sp) + 4d4: 69e2 ld s3,24(sp) + 4d6: 6121 addi sp,sp,64 + 4d8: 8082 ret x = -xx; - 4d0: 40b005bb negw a1,a1 + 4da: 40b005bb negw a1,a1 neg = 1; - 4d4: 4885 li a7,1 + 4de: 4885 li a7,1 x = -xx; - 4d6: bf8d j 448 <printint+0x1a> + 4e0: bf8d j 452 <printint+0x1a> -00000000000004d8 <vprintf>: +00000000000004e2 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 4d8: 7119 addi sp,sp,-128 - 4da: fc86 sd ra,120(sp) - 4dc: f8a2 sd s0,112(sp) - 4de: f4a6 sd s1,104(sp) - 4e0: f0ca sd s2,96(sp) - 4e2: ecce sd s3,88(sp) - 4e4: e8d2 sd s4,80(sp) - 4e6: e4d6 sd s5,72(sp) - 4e8: e0da sd s6,64(sp) - 4ea: fc5e sd s7,56(sp) - 4ec: f862 sd s8,48(sp) - 4ee: f466 sd s9,40(sp) - 4f0: f06a sd s10,32(sp) - 4f2: ec6e sd s11,24(sp) - 4f4: 0100 addi s0,sp,128 + 4e2: 7119 addi sp,sp,-128 + 4e4: fc86 sd ra,120(sp) + 4e6: f8a2 sd s0,112(sp) + 4e8: f4a6 sd s1,104(sp) + 4ea: f0ca sd s2,96(sp) + 4ec: ecce sd s3,88(sp) + 4ee: e8d2 sd s4,80(sp) + 4f0: e4d6 sd s5,72(sp) + 4f2: e0da sd s6,64(sp) + 4f4: fc5e sd s7,56(sp) + 4f6: f862 sd s8,48(sp) + 4f8: f466 sd s9,40(sp) + 4fa: f06a sd s10,32(sp) + 4fc: ec6e sd s11,24(sp) + 4fe: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 4f6: 0005c903 lbu s2,0(a1) - 4fa: 18090f63 beqz s2,698 <vprintf+0x1c0> - 4fe: 8aaa mv s5,a0 - 500: 8b32 mv s6,a2 - 502: 00158493 addi s1,a1,1 + 500: 0005c903 lbu s2,0(a1) + 504: 18090f63 beqz s2,6a2 <vprintf+0x1c0> + 508: 8aaa mv s5,a0 + 50a: 8b32 mv s6,a2 + 50c: 00158493 addi s1,a1,1 state = 0; - 506: 4981 li s3,0 + 510: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 508: 02500a13 li s4,37 - 50c: 4c55 li s8,21 - 50e: 00000c97 auipc s9,0x0 - 512: 3dac8c93 addi s9,s9,986 # 8e8 <malloc+0x14c> + 512: 02500a13 li s4,37 + 516: 4c55 li s8,21 + 518: 00000c97 auipc s9,0x0 + 51c: 3d8c8c93 addi s9,s9,984 # 8f0 <malloc+0x14a> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 516: 02800d93 li s11,40 + 520: 02800d93 li s11,40 putc(fd, 'x'); - 51a: 4d41 li s10,16 + 524: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 51c: 00000b97 auipc s7,0x0 - 520: 424b8b93 addi s7,s7,1060 # 940 <digits> - 524: a839 j 542 <vprintf+0x6a> + 526: 00000b97 auipc s7,0x0 + 52a: 422b8b93 addi s7,s7,1058 # 948 <digits> + 52e: a839 j 54c <vprintf+0x6a> putc(fd, c); - 526: 85ca mv a1,s2 - 528: 8556 mv a0,s5 - 52a: 00000097 auipc ra,0x0 - 52e: ee2080e7 jalr -286(ra) # 40c <putc> - 532: a019 j 538 <vprintf+0x60> + 530: 85ca mv a1,s2 + 532: 8556 mv a0,s5 + 534: 00000097 auipc ra,0x0 + 538: ee2080e7 jalr -286(ra) # 416 <putc> + 53c: a019 j 542 <vprintf+0x60> } else if(state == '%'){ - 534: 01498d63 beq s3,s4,54e <vprintf+0x76> + 53e: 01498d63 beq s3,s4,558 <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 538: 0485 addi s1,s1,1 - 53a: fff4c903 lbu s2,-1(s1) - 53e: 14090d63 beqz s2,698 <vprintf+0x1c0> + 542: 0485 addi s1,s1,1 + 544: fff4c903 lbu s2,-1(s1) + 548: 14090d63 beqz s2,6a2 <vprintf+0x1c0> if(state == 0){ - 542: fe0999e3 bnez s3,534 <vprintf+0x5c> + 54c: fe0999e3 bnez s3,53e <vprintf+0x5c> if(c == '%'){ - 546: ff4910e3 bne s2,s4,526 <vprintf+0x4e> + 550: ff4910e3 bne s2,s4,530 <vprintf+0x4e> state = '%'; - 54a: 89d2 mv s3,s4 - 54c: b7f5 j 538 <vprintf+0x60> + 554: 89d2 mv s3,s4 + 556: b7f5 j 542 <vprintf+0x60> if(c == 'd'){ - 54e: 11490c63 beq s2,s4,666 <vprintf+0x18e> - 552: f9d9079b addiw a5,s2,-99 - 556: 0ff7f793 zext.b a5,a5 - 55a: 10fc6e63 bltu s8,a5,676 <vprintf+0x19e> - 55e: f9d9079b addiw a5,s2,-99 - 562: 0ff7f713 zext.b a4,a5 - 566: 10ec6863 bltu s8,a4,676 <vprintf+0x19e> - 56a: 00271793 slli a5,a4,0x2 - 56e: 97e6 add a5,a5,s9 - 570: 439c lw a5,0(a5) - 572: 97e6 add a5,a5,s9 - 574: 8782 jr a5 + 558: 11490c63 beq s2,s4,670 <vprintf+0x18e> + 55c: f9d9079b addiw a5,s2,-99 + 560: 0ff7f793 zext.b a5,a5 + 564: 10fc6e63 bltu s8,a5,680 <vprintf+0x19e> + 568: f9d9079b addiw a5,s2,-99 + 56c: 0ff7f713 zext.b a4,a5 + 570: 10ec6863 bltu s8,a4,680 <vprintf+0x19e> + 574: 00271793 slli a5,a4,0x2 + 578: 97e6 add a5,a5,s9 + 57a: 439c lw a5,0(a5) + 57c: 97e6 add a5,a5,s9 + 57e: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 576: 008b0913 addi s2,s6,8 - 57a: 4685 li a3,1 - 57c: 4629 li a2,10 - 57e: 000b2583 lw a1,0(s6) - 582: 8556 mv a0,s5 - 584: 00000097 auipc ra,0x0 - 588: eaa080e7 jalr -342(ra) # 42e <printint> - 58c: 8b4a mv s6,s2 + 580: 008b0913 addi s2,s6,8 + 584: 4685 li a3,1 + 586: 4629 li a2,10 + 588: 000b2583 lw a1,0(s6) + 58c: 8556 mv a0,s5 + 58e: 00000097 auipc ra,0x0 + 592: eaa080e7 jalr -342(ra) # 438 <printint> + 596: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 58e: 4981 li s3,0 - 590: b765 j 538 <vprintf+0x60> + 598: 4981 li s3,0 + 59a: b765 j 542 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 592: 008b0913 addi s2,s6,8 - 596: 4681 li a3,0 - 598: 4629 li a2,10 - 59a: 000b2583 lw a1,0(s6) - 59e: 8556 mv a0,s5 - 5a0: 00000097 auipc ra,0x0 - 5a4: e8e080e7 jalr -370(ra) # 42e <printint> - 5a8: 8b4a mv s6,s2 + 59c: 008b0913 addi s2,s6,8 + 5a0: 4681 li a3,0 + 5a2: 4629 li a2,10 + 5a4: 000b2583 lw a1,0(s6) + 5a8: 8556 mv a0,s5 + 5aa: 00000097 auipc ra,0x0 + 5ae: e8e080e7 jalr -370(ra) # 438 <printint> + 5b2: 8b4a mv s6,s2 state = 0; - 5aa: 4981 li s3,0 - 5ac: b771 j 538 <vprintf+0x60> + 5b4: 4981 li s3,0 + 5b6: b771 j 542 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 5ae: 008b0913 addi s2,s6,8 - 5b2: 4681 li a3,0 - 5b4: 866a mv a2,s10 - 5b6: 000b2583 lw a1,0(s6) - 5ba: 8556 mv a0,s5 - 5bc: 00000097 auipc ra,0x0 - 5c0: e72080e7 jalr -398(ra) # 42e <printint> - 5c4: 8b4a mv s6,s2 + 5b8: 008b0913 addi s2,s6,8 + 5bc: 4681 li a3,0 + 5be: 866a mv a2,s10 + 5c0: 000b2583 lw a1,0(s6) + 5c4: 8556 mv a0,s5 + 5c6: 00000097 auipc ra,0x0 + 5ca: e72080e7 jalr -398(ra) # 438 <printint> + 5ce: 8b4a mv s6,s2 state = 0; - 5c6: 4981 li s3,0 - 5c8: bf85 j 538 <vprintf+0x60> + 5d0: 4981 li s3,0 + 5d2: bf85 j 542 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 5ca: 008b0793 addi a5,s6,8 - 5ce: f8f43423 sd a5,-120(s0) - 5d2: 000b3983 ld s3,0(s6) + 5d4: 008b0793 addi a5,s6,8 + 5d8: f8f43423 sd a5,-120(s0) + 5dc: 000b3983 ld s3,0(s6) putc(fd, '0'); - 5d6: 03000593 li a1,48 - 5da: 8556 mv a0,s5 - 5dc: 00000097 auipc ra,0x0 - 5e0: e30080e7 jalr -464(ra) # 40c <putc> + 5e0: 03000593 li a1,48 + 5e4: 8556 mv a0,s5 + 5e6: 00000097 auipc ra,0x0 + 5ea: e30080e7 jalr -464(ra) # 416 <putc> putc(fd, 'x'); - 5e4: 07800593 li a1,120 - 5e8: 8556 mv a0,s5 - 5ea: 00000097 auipc ra,0x0 - 5ee: e22080e7 jalr -478(ra) # 40c <putc> - 5f2: 896a mv s2,s10 + 5ee: 07800593 li a1,120 + 5f2: 8556 mv a0,s5 + 5f4: 00000097 auipc ra,0x0 + 5f8: e22080e7 jalr -478(ra) # 416 <putc> + 5fc: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 5f4: 03c9d793 srli a5,s3,0x3c - 5f8: 97de add a5,a5,s7 - 5fa: 0007c583 lbu a1,0(a5) - 5fe: 8556 mv a0,s5 - 600: 00000097 auipc ra,0x0 - 604: e0c080e7 jalr -500(ra) # 40c <putc> + 5fe: 03c9d793 srli a5,s3,0x3c + 602: 97de add a5,a5,s7 + 604: 0007c583 lbu a1,0(a5) + 608: 8556 mv a0,s5 + 60a: 00000097 auipc ra,0x0 + 60e: e0c080e7 jalr -500(ra) # 416 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 608: 0992 slli s3,s3,0x4 - 60a: 397d addiw s2,s2,-1 - 60c: fe0914e3 bnez s2,5f4 <vprintf+0x11c> + 612: 0992 slli s3,s3,0x4 + 614: 397d addiw s2,s2,-1 + 616: fe0914e3 bnez s2,5fe <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 610: f8843b03 ld s6,-120(s0) + 61a: f8843b03 ld s6,-120(s0) state = 0; - 614: 4981 li s3,0 - 616: b70d j 538 <vprintf+0x60> + 61e: 4981 li s3,0 + 620: b70d j 542 <vprintf+0x60> s = va_arg(ap, char*); - 618: 008b0913 addi s2,s6,8 - 61c: 000b3983 ld s3,0(s6) + 622: 008b0913 addi s2,s6,8 + 626: 000b3983 ld s3,0(s6) if(s == 0) - 620: 02098163 beqz s3,642 <vprintf+0x16a> + 62a: 02098163 beqz s3,64c <vprintf+0x16a> while(*s != 0){ - 624: 0009c583 lbu a1,0(s3) - 628: c5ad beqz a1,692 <vprintf+0x1ba> + 62e: 0009c583 lbu a1,0(s3) + 632: c5ad beqz a1,69c <vprintf+0x1ba> putc(fd, *s); - 62a: 8556 mv a0,s5 - 62c: 00000097 auipc ra,0x0 - 630: de0080e7 jalr -544(ra) # 40c <putc> + 634: 8556 mv a0,s5 + 636: 00000097 auipc ra,0x0 + 63a: de0080e7 jalr -544(ra) # 416 <putc> s++; - 634: 0985 addi s3,s3,1 + 63e: 0985 addi s3,s3,1 while(*s != 0){ - 636: 0009c583 lbu a1,0(s3) - 63a: f9e5 bnez a1,62a <vprintf+0x152> + 640: 0009c583 lbu a1,0(s3) + 644: f9e5 bnez a1,634 <vprintf+0x152> s = va_arg(ap, char*); - 63c: 8b4a mv s6,s2 + 646: 8b4a mv s6,s2 state = 0; - 63e: 4981 li s3,0 - 640: bde5 j 538 <vprintf+0x60> + 648: 4981 li s3,0 + 64a: bde5 j 542 <vprintf+0x60> s = "(null)"; - 642: 00000997 auipc s3,0x0 - 646: 29e98993 addi s3,s3,670 # 8e0 <malloc+0x144> + 64c: 00000997 auipc s3,0x0 + 650: 29c98993 addi s3,s3,668 # 8e8 <malloc+0x142> while(*s != 0){ - 64a: 85ee mv a1,s11 - 64c: bff9 j 62a <vprintf+0x152> + 654: 85ee mv a1,s11 + 656: bff9 j 634 <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 64e: 008b0913 addi s2,s6,8 - 652: 000b4583 lbu a1,0(s6) - 656: 8556 mv a0,s5 - 658: 00000097 auipc ra,0x0 - 65c: db4080e7 jalr -588(ra) # 40c <putc> - 660: 8b4a mv s6,s2 + 658: 008b0913 addi s2,s6,8 + 65c: 000b4583 lbu a1,0(s6) + 660: 8556 mv a0,s5 + 662: 00000097 auipc ra,0x0 + 666: db4080e7 jalr -588(ra) # 416 <putc> + 66a: 8b4a mv s6,s2 state = 0; - 662: 4981 li s3,0 - 664: bdd1 j 538 <vprintf+0x60> + 66c: 4981 li s3,0 + 66e: bdd1 j 542 <vprintf+0x60> putc(fd, c); - 666: 85d2 mv a1,s4 - 668: 8556 mv a0,s5 - 66a: 00000097 auipc ra,0x0 - 66e: da2080e7 jalr -606(ra) # 40c <putc> + 670: 85d2 mv a1,s4 + 672: 8556 mv a0,s5 + 674: 00000097 auipc ra,0x0 + 678: da2080e7 jalr -606(ra) # 416 <putc> state = 0; - 672: 4981 li s3,0 - 674: b5d1 j 538 <vprintf+0x60> + 67c: 4981 li s3,0 + 67e: b5d1 j 542 <vprintf+0x60> putc(fd, '%'); - 676: 85d2 mv a1,s4 - 678: 8556 mv a0,s5 - 67a: 00000097 auipc ra,0x0 - 67e: d92080e7 jalr -622(ra) # 40c <putc> + 680: 85d2 mv a1,s4 + 682: 8556 mv a0,s5 + 684: 00000097 auipc ra,0x0 + 688: d92080e7 jalr -622(ra) # 416 <putc> putc(fd, c); - 682: 85ca mv a1,s2 - 684: 8556 mv a0,s5 - 686: 00000097 auipc ra,0x0 - 68a: d86080e7 jalr -634(ra) # 40c <putc> + 68c: 85ca mv a1,s2 + 68e: 8556 mv a0,s5 + 690: 00000097 auipc ra,0x0 + 694: d86080e7 jalr -634(ra) # 416 <putc> state = 0; - 68e: 4981 li s3,0 - 690: b565 j 538 <vprintf+0x60> + 698: 4981 li s3,0 + 69a: b565 j 542 <vprintf+0x60> s = va_arg(ap, char*); - 692: 8b4a mv s6,s2 + 69c: 8b4a mv s6,s2 state = 0; - 694: 4981 li s3,0 - 696: b54d j 538 <vprintf+0x60> + 69e: 4981 li s3,0 + 6a0: b54d j 542 <vprintf+0x60> } } } - 698: 70e6 ld ra,120(sp) - 69a: 7446 ld s0,112(sp) - 69c: 74a6 ld s1,104(sp) - 69e: 7906 ld s2,96(sp) - 6a0: 69e6 ld s3,88(sp) - 6a2: 6a46 ld s4,80(sp) - 6a4: 6aa6 ld s5,72(sp) - 6a6: 6b06 ld s6,64(sp) - 6a8: 7be2 ld s7,56(sp) - 6aa: 7c42 ld s8,48(sp) - 6ac: 7ca2 ld s9,40(sp) - 6ae: 7d02 ld s10,32(sp) - 6b0: 6de2 ld s11,24(sp) - 6b2: 6109 addi sp,sp,128 - 6b4: 8082 ret - -00000000000006b6 <fprintf>: + 6a2: 70e6 ld ra,120(sp) + 6a4: 7446 ld s0,112(sp) + 6a6: 74a6 ld s1,104(sp) + 6a8: 7906 ld s2,96(sp) + 6aa: 69e6 ld s3,88(sp) + 6ac: 6a46 ld s4,80(sp) + 6ae: 6aa6 ld s5,72(sp) + 6b0: 6b06 ld s6,64(sp) + 6b2: 7be2 ld s7,56(sp) + 6b4: 7c42 ld s8,48(sp) + 6b6: 7ca2 ld s9,40(sp) + 6b8: 7d02 ld s10,32(sp) + 6ba: 6de2 ld s11,24(sp) + 6bc: 6109 addi sp,sp,128 + 6be: 8082 ret + +00000000000006c0 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 6b6: 715d addi sp,sp,-80 - 6b8: ec06 sd ra,24(sp) - 6ba: e822 sd s0,16(sp) - 6bc: 1000 addi s0,sp,32 - 6be: e010 sd a2,0(s0) - 6c0: e414 sd a3,8(s0) - 6c2: e818 sd a4,16(s0) - 6c4: ec1c sd a5,24(s0) - 6c6: 03043023 sd a6,32(s0) - 6ca: 03143423 sd a7,40(s0) + 6c0: 715d addi sp,sp,-80 + 6c2: ec06 sd ra,24(sp) + 6c4: e822 sd s0,16(sp) + 6c6: 1000 addi s0,sp,32 + 6c8: e010 sd a2,0(s0) + 6ca: e414 sd a3,8(s0) + 6cc: e818 sd a4,16(s0) + 6ce: ec1c sd a5,24(s0) + 6d0: 03043023 sd a6,32(s0) + 6d4: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 6ce: 8622 mv a2,s0 - 6d0: fe843423 sd s0,-24(s0) + 6d8: 8622 mv a2,s0 + 6da: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 6d4: 00000097 auipc ra,0x0 - 6d8: e04080e7 jalr -508(ra) # 4d8 <vprintf> + 6de: 00000097 auipc ra,0x0 + 6e2: e04080e7 jalr -508(ra) # 4e2 <vprintf> } - 6dc: 60e2 ld ra,24(sp) - 6de: 6442 ld s0,16(sp) - 6e0: 6161 addi sp,sp,80 - 6e2: 8082 ret + 6e6: 60e2 ld ra,24(sp) + 6e8: 6442 ld s0,16(sp) + 6ea: 6161 addi sp,sp,80 + 6ec: 8082 ret -00000000000006e4 <printf>: +00000000000006ee <printf>: void printf(const char *fmt, ...) { - 6e4: 711d addi sp,sp,-96 - 6e6: ec06 sd ra,24(sp) - 6e8: e822 sd s0,16(sp) - 6ea: 1000 addi s0,sp,32 - 6ec: e40c sd a1,8(s0) - 6ee: e810 sd a2,16(s0) - 6f0: ec14 sd a3,24(s0) - 6f2: f018 sd a4,32(s0) - 6f4: f41c sd a5,40(s0) - 6f6: 03043823 sd a6,48(s0) - 6fa: 03143c23 sd a7,56(s0) + 6ee: 711d addi sp,sp,-96 + 6f0: ec06 sd ra,24(sp) + 6f2: e822 sd s0,16(sp) + 6f4: 1000 addi s0,sp,32 + 6f6: e40c sd a1,8(s0) + 6f8: e810 sd a2,16(s0) + 6fa: ec14 sd a3,24(s0) + 6fc: f018 sd a4,32(s0) + 6fe: f41c sd a5,40(s0) + 700: 03043823 sd a6,48(s0) + 704: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 6fe: 00840613 addi a2,s0,8 - 702: fec43423 sd a2,-24(s0) + 708: 00840613 addi a2,s0,8 + 70c: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 706: 85aa mv a1,a0 - 708: 4505 li a0,1 - 70a: 00000097 auipc ra,0x0 - 70e: dce080e7 jalr -562(ra) # 4d8 <vprintf> + 710: 85aa mv a1,a0 + 712: 4505 li a0,1 + 714: 00000097 auipc ra,0x0 + 718: dce080e7 jalr -562(ra) # 4e2 <vprintf> } - 712: 60e2 ld ra,24(sp) - 714: 6442 ld s0,16(sp) - 716: 6125 addi sp,sp,96 - 718: 8082 ret + 71c: 60e2 ld ra,24(sp) + 71e: 6442 ld s0,16(sp) + 720: 6125 addi sp,sp,96 + 722: 8082 ret -000000000000071a <free>: +0000000000000724 <free>: static Header base; static Header *freep; void free(void *ap) { - 71a: 1141 addi sp,sp,-16 - 71c: e422 sd s0,8(sp) - 71e: 0800 addi s0,sp,16 + 724: 1141 addi sp,sp,-16 + 726: e422 sd s0,8(sp) + 728: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 720: ff050693 addi a3,a0,-16 + 72a: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 724: 00000797 auipc a5,0x0 - 728: 2347b783 ld a5,564(a5) # 958 <freep> - 72c: a02d j 756 <free+0x3c> + 72e: 00000797 auipc a5,0x0 + 732: 2327b783 ld a5,562(a5) # 960 <freep> + 736: a02d j 760 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 72e: 4618 lw a4,8(a2) - 730: 9f2d addw a4,a4,a1 - 732: fee52c23 sw a4,-8(a0) + 738: 4618 lw a4,8(a2) + 73a: 9f2d addw a4,a4,a1 + 73c: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 736: 6398 ld a4,0(a5) - 738: 6310 ld a2,0(a4) - 73a: a83d j 778 <free+0x5e> + 740: 6398 ld a4,0(a5) + 742: 6310 ld a2,0(a4) + 744: a83d j 782 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 73c: ff852703 lw a4,-8(a0) - 740: 9f31 addw a4,a4,a2 - 742: c798 sw a4,8(a5) + 746: ff852703 lw a4,-8(a0) + 74a: 9f31 addw a4,a4,a2 + 74c: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 744: ff053683 ld a3,-16(a0) - 748: a091 j 78c <free+0x72> + 74e: ff053683 ld a3,-16(a0) + 752: a091 j 796 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 74a: 6398 ld a4,0(a5) - 74c: 00e7e463 bltu a5,a4,754 <free+0x3a> - 750: 00e6ea63 bltu a3,a4,764 <free+0x4a> + 754: 6398 ld a4,0(a5) + 756: 00e7e463 bltu a5,a4,75e <free+0x3a> + 75a: 00e6ea63 bltu a3,a4,76e <free+0x4a> { - 754: 87ba mv a5,a4 + 75e: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 756: fed7fae3 bgeu a5,a3,74a <free+0x30> - 75a: 6398 ld a4,0(a5) - 75c: 00e6e463 bltu a3,a4,764 <free+0x4a> + 760: fed7fae3 bgeu a5,a3,754 <free+0x30> + 764: 6398 ld a4,0(a5) + 766: 00e6e463 bltu a3,a4,76e <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 760: fee7eae3 bltu a5,a4,754 <free+0x3a> + 76a: fee7eae3 bltu a5,a4,75e <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 764: ff852583 lw a1,-8(a0) - 768: 6390 ld a2,0(a5) - 76a: 02059813 slli a6,a1,0x20 - 76e: 01c85713 srli a4,a6,0x1c - 772: 9736 add a4,a4,a3 - 774: fae60de3 beq a2,a4,72e <free+0x14> + 76e: ff852583 lw a1,-8(a0) + 772: 6390 ld a2,0(a5) + 774: 02059813 slli a6,a1,0x20 + 778: 01c85713 srli a4,a6,0x1c + 77c: 9736 add a4,a4,a3 + 77e: fae60de3 beq a2,a4,738 <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 778: fec53823 sd a2,-16(a0) + 782: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 77c: 4790 lw a2,8(a5) - 77e: 02061593 slli a1,a2,0x20 - 782: 01c5d713 srli a4,a1,0x1c - 786: 973e add a4,a4,a5 - 788: fae68ae3 beq a3,a4,73c <free+0x22> + 786: 4790 lw a2,8(a5) + 788: 02061593 slli a1,a2,0x20 + 78c: 01c5d713 srli a4,a1,0x1c + 790: 973e add a4,a4,a5 + 792: fae68ae3 beq a3,a4,746 <free+0x22> p->s.ptr = bp->s.ptr; - 78c: e394 sd a3,0(a5) + 796: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 78e: 00000717 auipc a4,0x0 - 792: 1cf73523 sd a5,458(a4) # 958 <freep> + 798: 00000717 auipc a4,0x0 + 79c: 1cf73423 sd a5,456(a4) # 960 <freep> } - 796: 6422 ld s0,8(sp) - 798: 0141 addi sp,sp,16 - 79a: 8082 ret + 7a0: 6422 ld s0,8(sp) + 7a2: 0141 addi sp,sp,16 + 7a4: 8082 ret -000000000000079c <malloc>: +00000000000007a6 <malloc>: return freep; } void* malloc(uint nbytes) { - 79c: 7139 addi sp,sp,-64 - 79e: fc06 sd ra,56(sp) - 7a0: f822 sd s0,48(sp) - 7a2: f426 sd s1,40(sp) - 7a4: f04a sd s2,32(sp) - 7a6: ec4e sd s3,24(sp) - 7a8: e852 sd s4,16(sp) - 7aa: e456 sd s5,8(sp) - 7ac: e05a sd s6,0(sp) - 7ae: 0080 addi s0,sp,64 + 7a6: 7139 addi sp,sp,-64 + 7a8: fc06 sd ra,56(sp) + 7aa: f822 sd s0,48(sp) + 7ac: f426 sd s1,40(sp) + 7ae: f04a sd s2,32(sp) + 7b0: ec4e sd s3,24(sp) + 7b2: e852 sd s4,16(sp) + 7b4: e456 sd s5,8(sp) + 7b6: e05a sd s6,0(sp) + 7b8: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 7b0: 02051493 slli s1,a0,0x20 - 7b4: 9081 srli s1,s1,0x20 - 7b6: 04bd addi s1,s1,15 - 7b8: 8091 srli s1,s1,0x4 - 7ba: 00148a1b addiw s4,s1,1 - 7be: 0485 addi s1,s1,1 + 7ba: 02051493 slli s1,a0,0x20 + 7be: 9081 srli s1,s1,0x20 + 7c0: 04bd addi s1,s1,15 + 7c2: 8091 srli s1,s1,0x4 + 7c4: 00148a1b addiw s4,s1,1 + 7c8: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 7c0: 00000517 auipc a0,0x0 - 7c4: 19853503 ld a0,408(a0) # 958 <freep> - 7c8: c515 beqz a0,7f4 <malloc+0x58> + 7ca: 00000517 auipc a0,0x0 + 7ce: 19653503 ld a0,406(a0) # 960 <freep> + 7d2: c515 beqz a0,7fe <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7ca: 611c ld a5,0(a0) + 7d4: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 7cc: 4798 lw a4,8(a5) - 7ce: 04977163 bgeu a4,s1,810 <malloc+0x74> - 7d2: 89d2 mv s3,s4 - 7d4: 000a071b sext.w a4,s4 - 7d8: 6685 lui a3,0x1 - 7da: 00d77363 bgeu a4,a3,7e0 <malloc+0x44> - 7de: 6985 lui s3,0x1 - 7e0: 00098b1b sext.w s6,s3 + 7d6: 4798 lw a4,8(a5) + 7d8: 04977163 bgeu a4,s1,81a <malloc+0x74> + 7dc: 89d2 mv s3,s4 + 7de: 000a071b sext.w a4,s4 + 7e2: 6685 lui a3,0x1 + 7e4: 00d77363 bgeu a4,a3,7ea <malloc+0x44> + 7e8: 6985 lui s3,0x1 + 7ea: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 7e4: 0049999b slliw s3,s3,0x4 + 7ee: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 7e8: 00000917 auipc s2,0x0 - 7ec: 17090913 addi s2,s2,368 # 958 <freep> + 7f2: 00000917 auipc s2,0x0 + 7f6: 16e90913 addi s2,s2,366 # 960 <freep> if(p == (char*)-1) - 7f0: 5afd li s5,-1 - 7f2: a8a5 j 86a <malloc+0xce> + 7fa: 5afd li s5,-1 + 7fc: a8a5 j 874 <malloc+0xce> base.s.ptr = freep = prevp = &base; - 7f4: 00000797 auipc a5,0x0 - 7f8: 16478793 addi a5,a5,356 # 958 <freep> - 7fc: 00000717 auipc a4,0x0 - 800: 16470713 addi a4,a4,356 # 960 <base> - 804: e398 sd a4,0(a5) - 806: e798 sd a4,8(a5) + 7fe: 00000797 auipc a5,0x0 + 802: 16278793 addi a5,a5,354 # 960 <freep> + 806: 00000717 auipc a4,0x0 + 80a: 16270713 addi a4,a4,354 # 968 <base> + 80e: e398 sd a4,0(a5) + 810: e798 sd a4,8(a5) base.s.size = 0; - 808: 0007a823 sw zero,16(a5) + 812: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 80c: 87ba mv a5,a4 - 80e: b7d1 j 7d2 <malloc+0x36> + 816: 87ba mv a5,a4 + 818: b7d1 j 7dc <malloc+0x36> if(p->s.size == nunits) - 810: 02e48c63 beq s1,a4,848 <malloc+0xac> + 81a: 02e48c63 beq s1,a4,852 <malloc+0xac> p->s.size -= nunits; - 814: 4147073b subw a4,a4,s4 - 818: c798 sw a4,8(a5) + 81e: 4147073b subw a4,a4,s4 + 822: c798 sw a4,8(a5) p += p->s.size; - 81a: 02071693 slli a3,a4,0x20 - 81e: 01c6d713 srli a4,a3,0x1c - 822: 97ba add a5,a5,a4 + 824: 02071693 slli a3,a4,0x20 + 828: 01c6d713 srli a4,a3,0x1c + 82c: 97ba add a5,a5,a4 p->s.size = nunits; - 824: 0147a423 sw s4,8(a5) + 82e: 0147a423 sw s4,8(a5) freep = prevp; - 828: 00000717 auipc a4,0x0 - 82c: 12a73823 sd a0,304(a4) # 958 <freep> + 832: 00000717 auipc a4,0x0 + 836: 12a73723 sd a0,302(a4) # 960 <freep> return (void*)(p + 1); - 830: 01078513 addi a0,a5,16 + 83a: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 834: 70e2 ld ra,56(sp) - 836: 7442 ld s0,48(sp) - 838: 74a2 ld s1,40(sp) - 83a: 7902 ld s2,32(sp) - 83c: 69e2 ld s3,24(sp) - 83e: 6a42 ld s4,16(sp) - 840: 6aa2 ld s5,8(sp) - 842: 6b02 ld s6,0(sp) - 844: 6121 addi sp,sp,64 - 846: 8082 ret + 83e: 70e2 ld ra,56(sp) + 840: 7442 ld s0,48(sp) + 842: 74a2 ld s1,40(sp) + 844: 7902 ld s2,32(sp) + 846: 69e2 ld s3,24(sp) + 848: 6a42 ld s4,16(sp) + 84a: 6aa2 ld s5,8(sp) + 84c: 6b02 ld s6,0(sp) + 84e: 6121 addi sp,sp,64 + 850: 8082 ret prevp->s.ptr = p->s.ptr; - 848: 6398 ld a4,0(a5) - 84a: e118 sd a4,0(a0) - 84c: bff1 j 828 <malloc+0x8c> + 852: 6398 ld a4,0(a5) + 854: e118 sd a4,0(a0) + 856: bff1 j 832 <malloc+0x8c> hp->s.size = nu; - 84e: 01652423 sw s6,8(a0) + 858: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 852: 0541 addi a0,a0,16 - 854: 00000097 auipc ra,0x0 - 858: ec6080e7 jalr -314(ra) # 71a <free> + 85c: 0541 addi a0,a0,16 + 85e: 00000097 auipc ra,0x0 + 862: ec6080e7 jalr -314(ra) # 724 <free> return freep; - 85c: 00093503 ld a0,0(s2) + 866: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 860: d971 beqz a0,834 <malloc+0x98> + 86a: d971 beqz a0,83e <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 862: 611c ld a5,0(a0) + 86c: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 864: 4798 lw a4,8(a5) - 866: fa9775e3 bgeu a4,s1,810 <malloc+0x74> + 86e: 4798 lw a4,8(a5) + 870: fa9775e3 bgeu a4,s1,81a <malloc+0x74> if(p == freep) - 86a: 00093703 ld a4,0(s2) - 86e: 853e mv a0,a5 - 870: fef719e3 bne a4,a5,862 <malloc+0xc6> + 874: 00093703 ld a4,0(s2) + 878: 853e mv a0,a5 + 87a: fef719e3 bne a4,a5,86c <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 874: 854e mv a0,s3 - 876: 00000097 auipc ra,0x0 - 87a: b2a080e7 jalr -1238(ra) # 3a0 <sbrk> + 87e: 854e mv a0,s3 + 880: 00000097 auipc ra,0x0 + 884: b20080e7 jalr -1248(ra) # 3a0 <sbrk> if(p == (char*)-1) - 87e: fd5518e3 bne a0,s5,84e <malloc+0xb2> + 888: fd5518e3 bne a0,s5,858 <malloc+0xb2> return 0; - 882: 4501 li a0,0 - 884: bf45 j 834 <malloc+0x98> + 88c: 4501 li a0,0 + 88e: bf45 j 83e <malloc+0x98> diff --git a/xv6-user/sleep.sym b/xv6-user/sleep.sym index 4ddb398..2ca22b0 100644 --- a/xv6-user/sleep.sym +++ b/xv6-user/sleep.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -0000000000000888 .rodata -0000000000000958 .bss +0000000000000890 .rodata +0000000000000960 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,23 +16,24 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -000000000000040c putc -000000000000042e printint -0000000000000940 digits +0000000000000416 putc +0000000000000438 printint +0000000000000948 digits 0000000000000000 umalloc.c -0000000000000958 freep -0000000000000960 base +0000000000000960 freep +0000000000000968 base 0000000000000064 strcpy -00000000000006e4 printf -0000000000001151 __global_pointer$ +00000000000006ee printf +0000000000001159 __global_pointer$ 00000000000003c0 dev 000000000000026a memmove +000000000000040c times 00000000000003e0 trace 000000000000014a gets -0000000000000951 __SDATA_BEGIN__ +0000000000000959 __SDATA_BEGIN__ 0000000000000396 getpid 00000000000002fc memcpy -000000000000079c malloc +00000000000007a6 malloc 00000000000003d8 remove 00000000000003a8 sleep 00000000000003e8 sysinfo @@ -42,31 +43,31 @@ 00000000000003f0 rename 0000000000000342 write 0000000000000370 fstat -00000000000006b6 fprintf +00000000000006c0 fprintf 0000000000000356 kill 0000000000000080 strcat -00000000000004d8 vprintf +00000000000004e2 vprintf 0000000000000384 chdir 000000000000035e exec 0000000000000326 wait 0000000000000338 read 00000000000002c2 memcmp 0000000000000314 fork -0000000000000970 __BSS_END__ +0000000000000978 __BSS_END__ 00000000000003a0 sbrk 00000000000003b8 test_proc 00000000000003b0 uptime -0000000000000951 __bss_start +0000000000000959 __bss_start 0000000000000104 memset 0000000000000000 main 00000000000000ae strcmp 00000000000003f8 shutdown 000000000000038e dup 00000000000003d0 getcwd -0000000000000951 __DATA_BEGIN__ +0000000000000959 __DATA_BEGIN__ 00000000000001c4 stat -0000000000000951 _edata -0000000000000970 _end +0000000000000959 _edata +0000000000000978 _end 000000000000031c exit 000000000000020a atoi 00000000000000da strlen @@ -74,4 +75,4 @@ 0000000000000126 strchr 000000000000037a mkdir 000000000000034c close -000000000000071a free +0000000000000724 free diff --git a/xv6-user/strace.asm b/xv6-user/strace.asm index ce82d8d..1067d09 100644 --- a/xv6-user/strace.asm +++ b/xv6-user/strace.asm @@ -27,10 +27,10 @@ main(int argc, char *argv[]) fprintf(2, "usage: %s MASK COMMAND\n", argv[0]); 14: 6190 ld a2,0(a1) 16: 00001597 auipc a1,0x1 - 1a: 8d258593 addi a1,a1,-1838 # 8e8 <malloc+0xee> + 1a: 8da58593 addi a1,a1,-1830 # 8f0 <malloc+0xec> 1e: 4509 li a0,2 20: 00000097 auipc ra,0x0 - 24: 6f4080e7 jalr 1780(ra) # 714 <fprintf> + 24: 6fe080e7 jalr 1790(ra) # 71e <fprintf> exit(1); 28: 4505 li a0,1 2a: 00000097 auipc ra,0x0 @@ -74,9 +74,9 @@ main(int argc, char *argv[]) printf("strace: exec %s fail\n", nargv[0]); 84: ee043583 ld a1,-288(s0) 88: 00001517 auipc a0,0x1 - 8c: 89050513 addi a0,a0,-1904 # 918 <malloc+0x11e> + 8c: 89850513 addi a0,a0,-1896 # 920 <malloc+0x11c> 90: 00000097 auipc ra,0x0 - 94: 6b2080e7 jalr 1714(ra) # 742 <printf> + 94: 6bc080e7 jalr 1724(ra) # 74c <printf> exit(0); 98: 4501 li a0,0 9a: 00000097 auipc ra,0x0 @@ -84,10 +84,10 @@ main(int argc, char *argv[]) fprintf(2, "%s: strace failed\n", argv[0]); a2: 00093603 ld a2,0(s2) a6: 00001597 auipc a1,0x1 - aa: 85a58593 addi a1,a1,-1958 # 900 <malloc+0x106> + aa: 86258593 addi a1,a1,-1950 # 908 <malloc+0x104> ae: 4509 li a0,2 b0: 00000097 auipc ra,0x0 - b4: 664080e7 jalr 1636(ra) # 714 <fprintf> + b4: 66e080e7 jalr 1646(ra) # 71e <fprintf> exit(1); b8: 4505 li a0,1 ba: 00000097 auipc ra,0x0 @@ -849,637 +849,647 @@ uname: ret 468: 8082 ret -000000000000046a <putc>: +000000000000046a <times>: +.global times +times: + li a7, SYS_times + 46a: 09900893 li a7,153 + ecall + 46e: 00000073 ecall + ret + 472: 8082 ret + +0000000000000474 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 46a: 1101 addi sp,sp,-32 - 46c: ec06 sd ra,24(sp) - 46e: e822 sd s0,16(sp) - 470: 1000 addi s0,sp,32 - 472: feb407a3 sb a1,-17(s0) + 474: 1101 addi sp,sp,-32 + 476: ec06 sd ra,24(sp) + 478: e822 sd s0,16(sp) + 47a: 1000 addi s0,sp,32 + 47c: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 476: 4605 li a2,1 - 478: fef40593 addi a1,s0,-17 - 47c: 00000097 auipc ra,0x0 - 480: f24080e7 jalr -220(ra) # 3a0 <write> + 480: 4605 li a2,1 + 482: fef40593 addi a1,s0,-17 + 486: 00000097 auipc ra,0x0 + 48a: f1a080e7 jalr -230(ra) # 3a0 <write> } - 484: 60e2 ld ra,24(sp) - 486: 6442 ld s0,16(sp) - 488: 6105 addi sp,sp,32 - 48a: 8082 ret + 48e: 60e2 ld ra,24(sp) + 490: 6442 ld s0,16(sp) + 492: 6105 addi sp,sp,32 + 494: 8082 ret -000000000000048c <printint>: +0000000000000496 <printint>: static void printint(int fd, int xx, int base, int sgn) { - 48c: 7139 addi sp,sp,-64 - 48e: fc06 sd ra,56(sp) - 490: f822 sd s0,48(sp) - 492: f426 sd s1,40(sp) - 494: f04a sd s2,32(sp) - 496: ec4e sd s3,24(sp) - 498: 0080 addi s0,sp,64 - 49a: 84aa mv s1,a0 + 496: 7139 addi sp,sp,-64 + 498: fc06 sd ra,56(sp) + 49a: f822 sd s0,48(sp) + 49c: f426 sd s1,40(sp) + 49e: f04a sd s2,32(sp) + 4a0: ec4e sd s3,24(sp) + 4a2: 0080 addi s0,sp,64 + 4a4: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 49c: c299 beqz a3,4a2 <printint+0x16> - 49e: 0805c863 bltz a1,52e <printint+0xa2> + 4a6: c299 beqz a3,4ac <printint+0x16> + 4a8: 0805c863 bltz a1,538 <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 4a2: 2581 sext.w a1,a1 + 4ac: 2581 sext.w a1,a1 neg = 0; - 4a4: 4881 li a7,0 + 4ae: 4881 li a7,0 } i = 0; - 4a6: fc040993 addi s3,s0,-64 + 4b0: fc040993 addi s3,s0,-64 neg = 0; - 4aa: 86ce mv a3,s3 + 4b4: 86ce mv a3,s3 i = 0; - 4ac: 4701 li a4,0 + 4b6: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 4ae: 2601 sext.w a2,a2 - 4b0: 00000517 auipc a0,0x0 - 4b4: 4e050513 addi a0,a0,1248 # 990 <digits> - 4b8: 883a mv a6,a4 - 4ba: 2705 addiw a4,a4,1 - 4bc: 02c5f7bb remuw a5,a1,a2 - 4c0: 1782 slli a5,a5,0x20 - 4c2: 9381 srli a5,a5,0x20 - 4c4: 97aa add a5,a5,a0 - 4c6: 0007c783 lbu a5,0(a5) - 4ca: 00f68023 sb a5,0(a3) + 4b8: 2601 sext.w a2,a2 + 4ba: 00000517 auipc a0,0x0 + 4be: 4de50513 addi a0,a0,1246 # 998 <digits> + 4c2: 883a mv a6,a4 + 4c4: 2705 addiw a4,a4,1 + 4c6: 02c5f7bb remuw a5,a1,a2 + 4ca: 1782 slli a5,a5,0x20 + 4cc: 9381 srli a5,a5,0x20 + 4ce: 97aa add a5,a5,a0 + 4d0: 0007c783 lbu a5,0(a5) + 4d4: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 4ce: 0005879b sext.w a5,a1 - 4d2: 02c5d5bb divuw a1,a1,a2 - 4d6: 0685 addi a3,a3,1 - 4d8: fec7f0e3 bgeu a5,a2,4b8 <printint+0x2c> + 4d8: 0005879b sext.w a5,a1 + 4dc: 02c5d5bb divuw a1,a1,a2 + 4e0: 0685 addi a3,a3,1 + 4e2: fec7f0e3 bgeu a5,a2,4c2 <printint+0x2c> if(neg) - 4dc: 00088c63 beqz a7,4f4 <printint+0x68> + 4e6: 00088c63 beqz a7,4fe <printint+0x68> buf[i++] = '-'; - 4e0: fd070793 addi a5,a4,-48 - 4e4: 00878733 add a4,a5,s0 - 4e8: 02d00793 li a5,45 - 4ec: fef70823 sb a5,-16(a4) - 4f0: 0028071b addiw a4,a6,2 + 4ea: fd070793 addi a5,a4,-48 + 4ee: 00878733 add a4,a5,s0 + 4f2: 02d00793 li a5,45 + 4f6: fef70823 sb a5,-16(a4) + 4fa: 0028071b addiw a4,a6,2 while(--i >= 0) - 4f4: 02e05663 blez a4,520 <printint+0x94> - 4f8: fc040913 addi s2,s0,-64 - 4fc: 993a add s2,s2,a4 - 4fe: 19fd addi s3,s3,-1 - 500: 99ba add s3,s3,a4 - 502: 377d addiw a4,a4,-1 - 504: 1702 slli a4,a4,0x20 - 506: 9301 srli a4,a4,0x20 - 508: 40e989b3 sub s3,s3,a4 + 4fe: 02e05663 blez a4,52a <printint+0x94> + 502: fc040913 addi s2,s0,-64 + 506: 993a add s2,s2,a4 + 508: 19fd addi s3,s3,-1 + 50a: 99ba add s3,s3,a4 + 50c: 377d addiw a4,a4,-1 + 50e: 1702 slli a4,a4,0x20 + 510: 9301 srli a4,a4,0x20 + 512: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 50c: fff94583 lbu a1,-1(s2) - 510: 8526 mv a0,s1 - 512: 00000097 auipc ra,0x0 - 516: f58080e7 jalr -168(ra) # 46a <putc> + 516: fff94583 lbu a1,-1(s2) + 51a: 8526 mv a0,s1 + 51c: 00000097 auipc ra,0x0 + 520: f58080e7 jalr -168(ra) # 474 <putc> while(--i >= 0) - 51a: 197d addi s2,s2,-1 - 51c: ff3918e3 bne s2,s3,50c <printint+0x80> + 524: 197d addi s2,s2,-1 + 526: ff3918e3 bne s2,s3,516 <printint+0x80> } - 520: 70e2 ld ra,56(sp) - 522: 7442 ld s0,48(sp) - 524: 74a2 ld s1,40(sp) - 526: 7902 ld s2,32(sp) - 528: 69e2 ld s3,24(sp) - 52a: 6121 addi sp,sp,64 - 52c: 8082 ret + 52a: 70e2 ld ra,56(sp) + 52c: 7442 ld s0,48(sp) + 52e: 74a2 ld s1,40(sp) + 530: 7902 ld s2,32(sp) + 532: 69e2 ld s3,24(sp) + 534: 6121 addi sp,sp,64 + 536: 8082 ret x = -xx; - 52e: 40b005bb negw a1,a1 + 538: 40b005bb negw a1,a1 neg = 1; - 532: 4885 li a7,1 + 53c: 4885 li a7,1 x = -xx; - 534: bf8d j 4a6 <printint+0x1a> + 53e: bf8d j 4b0 <printint+0x1a> -0000000000000536 <vprintf>: +0000000000000540 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 536: 7119 addi sp,sp,-128 - 538: fc86 sd ra,120(sp) - 53a: f8a2 sd s0,112(sp) - 53c: f4a6 sd s1,104(sp) - 53e: f0ca sd s2,96(sp) - 540: ecce sd s3,88(sp) - 542: e8d2 sd s4,80(sp) - 544: e4d6 sd s5,72(sp) - 546: e0da sd s6,64(sp) - 548: fc5e sd s7,56(sp) - 54a: f862 sd s8,48(sp) - 54c: f466 sd s9,40(sp) - 54e: f06a sd s10,32(sp) - 550: ec6e sd s11,24(sp) - 552: 0100 addi s0,sp,128 + 540: 7119 addi sp,sp,-128 + 542: fc86 sd ra,120(sp) + 544: f8a2 sd s0,112(sp) + 546: f4a6 sd s1,104(sp) + 548: f0ca sd s2,96(sp) + 54a: ecce sd s3,88(sp) + 54c: e8d2 sd s4,80(sp) + 54e: e4d6 sd s5,72(sp) + 550: e0da sd s6,64(sp) + 552: fc5e sd s7,56(sp) + 554: f862 sd s8,48(sp) + 556: f466 sd s9,40(sp) + 558: f06a sd s10,32(sp) + 55a: ec6e sd s11,24(sp) + 55c: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 554: 0005c903 lbu s2,0(a1) - 558: 18090f63 beqz s2,6f6 <vprintf+0x1c0> - 55c: 8aaa mv s5,a0 - 55e: 8b32 mv s6,a2 - 560: 00158493 addi s1,a1,1 + 55e: 0005c903 lbu s2,0(a1) + 562: 18090f63 beqz s2,700 <vprintf+0x1c0> + 566: 8aaa mv s5,a0 + 568: 8b32 mv s6,a2 + 56a: 00158493 addi s1,a1,1 state = 0; - 564: 4981 li s3,0 + 56e: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 566: 02500a13 li s4,37 - 56a: 4c55 li s8,21 - 56c: 00000c97 auipc s9,0x0 - 570: 3ccc8c93 addi s9,s9,972 # 938 <malloc+0x13e> + 570: 02500a13 li s4,37 + 574: 4c55 li s8,21 + 576: 00000c97 auipc s9,0x0 + 57a: 3cac8c93 addi s9,s9,970 # 940 <malloc+0x13c> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 574: 02800d93 li s11,40 + 57e: 02800d93 li s11,40 putc(fd, 'x'); - 578: 4d41 li s10,16 + 582: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 57a: 00000b97 auipc s7,0x0 - 57e: 416b8b93 addi s7,s7,1046 # 990 <digits> - 582: a839 j 5a0 <vprintf+0x6a> + 584: 00000b97 auipc s7,0x0 + 588: 414b8b93 addi s7,s7,1044 # 998 <digits> + 58c: a839 j 5aa <vprintf+0x6a> putc(fd, c); - 584: 85ca mv a1,s2 - 586: 8556 mv a0,s5 - 588: 00000097 auipc ra,0x0 - 58c: ee2080e7 jalr -286(ra) # 46a <putc> - 590: a019 j 596 <vprintf+0x60> + 58e: 85ca mv a1,s2 + 590: 8556 mv a0,s5 + 592: 00000097 auipc ra,0x0 + 596: ee2080e7 jalr -286(ra) # 474 <putc> + 59a: a019 j 5a0 <vprintf+0x60> } else if(state == '%'){ - 592: 01498d63 beq s3,s4,5ac <vprintf+0x76> + 59c: 01498d63 beq s3,s4,5b6 <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 596: 0485 addi s1,s1,1 - 598: fff4c903 lbu s2,-1(s1) - 59c: 14090d63 beqz s2,6f6 <vprintf+0x1c0> + 5a0: 0485 addi s1,s1,1 + 5a2: fff4c903 lbu s2,-1(s1) + 5a6: 14090d63 beqz s2,700 <vprintf+0x1c0> if(state == 0){ - 5a0: fe0999e3 bnez s3,592 <vprintf+0x5c> + 5aa: fe0999e3 bnez s3,59c <vprintf+0x5c> if(c == '%'){ - 5a4: ff4910e3 bne s2,s4,584 <vprintf+0x4e> + 5ae: ff4910e3 bne s2,s4,58e <vprintf+0x4e> state = '%'; - 5a8: 89d2 mv s3,s4 - 5aa: b7f5 j 596 <vprintf+0x60> + 5b2: 89d2 mv s3,s4 + 5b4: b7f5 j 5a0 <vprintf+0x60> if(c == 'd'){ - 5ac: 11490c63 beq s2,s4,6c4 <vprintf+0x18e> - 5b0: f9d9079b addiw a5,s2,-99 - 5b4: 0ff7f793 zext.b a5,a5 - 5b8: 10fc6e63 bltu s8,a5,6d4 <vprintf+0x19e> - 5bc: f9d9079b addiw a5,s2,-99 - 5c0: 0ff7f713 zext.b a4,a5 - 5c4: 10ec6863 bltu s8,a4,6d4 <vprintf+0x19e> - 5c8: 00271793 slli a5,a4,0x2 - 5cc: 97e6 add a5,a5,s9 - 5ce: 439c lw a5,0(a5) - 5d0: 97e6 add a5,a5,s9 - 5d2: 8782 jr a5 + 5b6: 11490c63 beq s2,s4,6ce <vprintf+0x18e> + 5ba: f9d9079b addiw a5,s2,-99 + 5be: 0ff7f793 zext.b a5,a5 + 5c2: 10fc6e63 bltu s8,a5,6de <vprintf+0x19e> + 5c6: f9d9079b addiw a5,s2,-99 + 5ca: 0ff7f713 zext.b a4,a5 + 5ce: 10ec6863 bltu s8,a4,6de <vprintf+0x19e> + 5d2: 00271793 slli a5,a4,0x2 + 5d6: 97e6 add a5,a5,s9 + 5d8: 439c lw a5,0(a5) + 5da: 97e6 add a5,a5,s9 + 5dc: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 5d4: 008b0913 addi s2,s6,8 - 5d8: 4685 li a3,1 - 5da: 4629 li a2,10 - 5dc: 000b2583 lw a1,0(s6) - 5e0: 8556 mv a0,s5 - 5e2: 00000097 auipc ra,0x0 - 5e6: eaa080e7 jalr -342(ra) # 48c <printint> - 5ea: 8b4a mv s6,s2 + 5de: 008b0913 addi s2,s6,8 + 5e2: 4685 li a3,1 + 5e4: 4629 li a2,10 + 5e6: 000b2583 lw a1,0(s6) + 5ea: 8556 mv a0,s5 + 5ec: 00000097 auipc ra,0x0 + 5f0: eaa080e7 jalr -342(ra) # 496 <printint> + 5f4: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 5ec: 4981 li s3,0 - 5ee: b765 j 596 <vprintf+0x60> + 5f6: 4981 li s3,0 + 5f8: b765 j 5a0 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 5f0: 008b0913 addi s2,s6,8 - 5f4: 4681 li a3,0 - 5f6: 4629 li a2,10 - 5f8: 000b2583 lw a1,0(s6) - 5fc: 8556 mv a0,s5 - 5fe: 00000097 auipc ra,0x0 - 602: e8e080e7 jalr -370(ra) # 48c <printint> - 606: 8b4a mv s6,s2 + 5fa: 008b0913 addi s2,s6,8 + 5fe: 4681 li a3,0 + 600: 4629 li a2,10 + 602: 000b2583 lw a1,0(s6) + 606: 8556 mv a0,s5 + 608: 00000097 auipc ra,0x0 + 60c: e8e080e7 jalr -370(ra) # 496 <printint> + 610: 8b4a mv s6,s2 state = 0; - 608: 4981 li s3,0 - 60a: b771 j 596 <vprintf+0x60> + 612: 4981 li s3,0 + 614: b771 j 5a0 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 60c: 008b0913 addi s2,s6,8 - 610: 4681 li a3,0 - 612: 866a mv a2,s10 - 614: 000b2583 lw a1,0(s6) - 618: 8556 mv a0,s5 - 61a: 00000097 auipc ra,0x0 - 61e: e72080e7 jalr -398(ra) # 48c <printint> - 622: 8b4a mv s6,s2 + 616: 008b0913 addi s2,s6,8 + 61a: 4681 li a3,0 + 61c: 866a mv a2,s10 + 61e: 000b2583 lw a1,0(s6) + 622: 8556 mv a0,s5 + 624: 00000097 auipc ra,0x0 + 628: e72080e7 jalr -398(ra) # 496 <printint> + 62c: 8b4a mv s6,s2 state = 0; - 624: 4981 li s3,0 - 626: bf85 j 596 <vprintf+0x60> + 62e: 4981 li s3,0 + 630: bf85 j 5a0 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 628: 008b0793 addi a5,s6,8 - 62c: f8f43423 sd a5,-120(s0) - 630: 000b3983 ld s3,0(s6) + 632: 008b0793 addi a5,s6,8 + 636: f8f43423 sd a5,-120(s0) + 63a: 000b3983 ld s3,0(s6) putc(fd, '0'); - 634: 03000593 li a1,48 - 638: 8556 mv a0,s5 - 63a: 00000097 auipc ra,0x0 - 63e: e30080e7 jalr -464(ra) # 46a <putc> + 63e: 03000593 li a1,48 + 642: 8556 mv a0,s5 + 644: 00000097 auipc ra,0x0 + 648: e30080e7 jalr -464(ra) # 474 <putc> putc(fd, 'x'); - 642: 07800593 li a1,120 - 646: 8556 mv a0,s5 - 648: 00000097 auipc ra,0x0 - 64c: e22080e7 jalr -478(ra) # 46a <putc> - 650: 896a mv s2,s10 + 64c: 07800593 li a1,120 + 650: 8556 mv a0,s5 + 652: 00000097 auipc ra,0x0 + 656: e22080e7 jalr -478(ra) # 474 <putc> + 65a: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 652: 03c9d793 srli a5,s3,0x3c - 656: 97de add a5,a5,s7 - 658: 0007c583 lbu a1,0(a5) - 65c: 8556 mv a0,s5 - 65e: 00000097 auipc ra,0x0 - 662: e0c080e7 jalr -500(ra) # 46a <putc> + 65c: 03c9d793 srli a5,s3,0x3c + 660: 97de add a5,a5,s7 + 662: 0007c583 lbu a1,0(a5) + 666: 8556 mv a0,s5 + 668: 00000097 auipc ra,0x0 + 66c: e0c080e7 jalr -500(ra) # 474 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 666: 0992 slli s3,s3,0x4 - 668: 397d addiw s2,s2,-1 - 66a: fe0914e3 bnez s2,652 <vprintf+0x11c> + 670: 0992 slli s3,s3,0x4 + 672: 397d addiw s2,s2,-1 + 674: fe0914e3 bnez s2,65c <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 66e: f8843b03 ld s6,-120(s0) + 678: f8843b03 ld s6,-120(s0) state = 0; - 672: 4981 li s3,0 - 674: b70d j 596 <vprintf+0x60> + 67c: 4981 li s3,0 + 67e: b70d j 5a0 <vprintf+0x60> s = va_arg(ap, char*); - 676: 008b0913 addi s2,s6,8 - 67a: 000b3983 ld s3,0(s6) + 680: 008b0913 addi s2,s6,8 + 684: 000b3983 ld s3,0(s6) if(s == 0) - 67e: 02098163 beqz s3,6a0 <vprintf+0x16a> + 688: 02098163 beqz s3,6aa <vprintf+0x16a> while(*s != 0){ - 682: 0009c583 lbu a1,0(s3) - 686: c5ad beqz a1,6f0 <vprintf+0x1ba> + 68c: 0009c583 lbu a1,0(s3) + 690: c5ad beqz a1,6fa <vprintf+0x1ba> putc(fd, *s); - 688: 8556 mv a0,s5 - 68a: 00000097 auipc ra,0x0 - 68e: de0080e7 jalr -544(ra) # 46a <putc> + 692: 8556 mv a0,s5 + 694: 00000097 auipc ra,0x0 + 698: de0080e7 jalr -544(ra) # 474 <putc> s++; - 692: 0985 addi s3,s3,1 + 69c: 0985 addi s3,s3,1 while(*s != 0){ - 694: 0009c583 lbu a1,0(s3) - 698: f9e5 bnez a1,688 <vprintf+0x152> + 69e: 0009c583 lbu a1,0(s3) + 6a2: f9e5 bnez a1,692 <vprintf+0x152> s = va_arg(ap, char*); - 69a: 8b4a mv s6,s2 + 6a4: 8b4a mv s6,s2 state = 0; - 69c: 4981 li s3,0 - 69e: bde5 j 596 <vprintf+0x60> + 6a6: 4981 li s3,0 + 6a8: bde5 j 5a0 <vprintf+0x60> s = "(null)"; - 6a0: 00000997 auipc s3,0x0 - 6a4: 29098993 addi s3,s3,656 # 930 <malloc+0x136> + 6aa: 00000997 auipc s3,0x0 + 6ae: 28e98993 addi s3,s3,654 # 938 <malloc+0x134> while(*s != 0){ - 6a8: 85ee mv a1,s11 - 6aa: bff9 j 688 <vprintf+0x152> + 6b2: 85ee mv a1,s11 + 6b4: bff9 j 692 <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 6ac: 008b0913 addi s2,s6,8 - 6b0: 000b4583 lbu a1,0(s6) - 6b4: 8556 mv a0,s5 - 6b6: 00000097 auipc ra,0x0 - 6ba: db4080e7 jalr -588(ra) # 46a <putc> - 6be: 8b4a mv s6,s2 + 6b6: 008b0913 addi s2,s6,8 + 6ba: 000b4583 lbu a1,0(s6) + 6be: 8556 mv a0,s5 + 6c0: 00000097 auipc ra,0x0 + 6c4: db4080e7 jalr -588(ra) # 474 <putc> + 6c8: 8b4a mv s6,s2 state = 0; - 6c0: 4981 li s3,0 - 6c2: bdd1 j 596 <vprintf+0x60> + 6ca: 4981 li s3,0 + 6cc: bdd1 j 5a0 <vprintf+0x60> putc(fd, c); - 6c4: 85d2 mv a1,s4 - 6c6: 8556 mv a0,s5 - 6c8: 00000097 auipc ra,0x0 - 6cc: da2080e7 jalr -606(ra) # 46a <putc> + 6ce: 85d2 mv a1,s4 + 6d0: 8556 mv a0,s5 + 6d2: 00000097 auipc ra,0x0 + 6d6: da2080e7 jalr -606(ra) # 474 <putc> state = 0; - 6d0: 4981 li s3,0 - 6d2: b5d1 j 596 <vprintf+0x60> + 6da: 4981 li s3,0 + 6dc: b5d1 j 5a0 <vprintf+0x60> putc(fd, '%'); - 6d4: 85d2 mv a1,s4 - 6d6: 8556 mv a0,s5 - 6d8: 00000097 auipc ra,0x0 - 6dc: d92080e7 jalr -622(ra) # 46a <putc> + 6de: 85d2 mv a1,s4 + 6e0: 8556 mv a0,s5 + 6e2: 00000097 auipc ra,0x0 + 6e6: d92080e7 jalr -622(ra) # 474 <putc> putc(fd, c); - 6e0: 85ca mv a1,s2 - 6e2: 8556 mv a0,s5 - 6e4: 00000097 auipc ra,0x0 - 6e8: d86080e7 jalr -634(ra) # 46a <putc> + 6ea: 85ca mv a1,s2 + 6ec: 8556 mv a0,s5 + 6ee: 00000097 auipc ra,0x0 + 6f2: d86080e7 jalr -634(ra) # 474 <putc> state = 0; - 6ec: 4981 li s3,0 - 6ee: b565 j 596 <vprintf+0x60> + 6f6: 4981 li s3,0 + 6f8: b565 j 5a0 <vprintf+0x60> s = va_arg(ap, char*); - 6f0: 8b4a mv s6,s2 + 6fa: 8b4a mv s6,s2 state = 0; - 6f2: 4981 li s3,0 - 6f4: b54d j 596 <vprintf+0x60> + 6fc: 4981 li s3,0 + 6fe: b54d j 5a0 <vprintf+0x60> } } } - 6f6: 70e6 ld ra,120(sp) - 6f8: 7446 ld s0,112(sp) - 6fa: 74a6 ld s1,104(sp) - 6fc: 7906 ld s2,96(sp) - 6fe: 69e6 ld s3,88(sp) - 700: 6a46 ld s4,80(sp) - 702: 6aa6 ld s5,72(sp) - 704: 6b06 ld s6,64(sp) - 706: 7be2 ld s7,56(sp) - 708: 7c42 ld s8,48(sp) - 70a: 7ca2 ld s9,40(sp) - 70c: 7d02 ld s10,32(sp) - 70e: 6de2 ld s11,24(sp) - 710: 6109 addi sp,sp,128 - 712: 8082 ret - -0000000000000714 <fprintf>: + 700: 70e6 ld ra,120(sp) + 702: 7446 ld s0,112(sp) + 704: 74a6 ld s1,104(sp) + 706: 7906 ld s2,96(sp) + 708: 69e6 ld s3,88(sp) + 70a: 6a46 ld s4,80(sp) + 70c: 6aa6 ld s5,72(sp) + 70e: 6b06 ld s6,64(sp) + 710: 7be2 ld s7,56(sp) + 712: 7c42 ld s8,48(sp) + 714: 7ca2 ld s9,40(sp) + 716: 7d02 ld s10,32(sp) + 718: 6de2 ld s11,24(sp) + 71a: 6109 addi sp,sp,128 + 71c: 8082 ret + +000000000000071e <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 714: 715d addi sp,sp,-80 - 716: ec06 sd ra,24(sp) - 718: e822 sd s0,16(sp) - 71a: 1000 addi s0,sp,32 - 71c: e010 sd a2,0(s0) - 71e: e414 sd a3,8(s0) - 720: e818 sd a4,16(s0) - 722: ec1c sd a5,24(s0) - 724: 03043023 sd a6,32(s0) - 728: 03143423 sd a7,40(s0) + 71e: 715d addi sp,sp,-80 + 720: ec06 sd ra,24(sp) + 722: e822 sd s0,16(sp) + 724: 1000 addi s0,sp,32 + 726: e010 sd a2,0(s0) + 728: e414 sd a3,8(s0) + 72a: e818 sd a4,16(s0) + 72c: ec1c sd a5,24(s0) + 72e: 03043023 sd a6,32(s0) + 732: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 72c: 8622 mv a2,s0 - 72e: fe843423 sd s0,-24(s0) + 736: 8622 mv a2,s0 + 738: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 732: 00000097 auipc ra,0x0 - 736: e04080e7 jalr -508(ra) # 536 <vprintf> + 73c: 00000097 auipc ra,0x0 + 740: e04080e7 jalr -508(ra) # 540 <vprintf> } - 73a: 60e2 ld ra,24(sp) - 73c: 6442 ld s0,16(sp) - 73e: 6161 addi sp,sp,80 - 740: 8082 ret + 744: 60e2 ld ra,24(sp) + 746: 6442 ld s0,16(sp) + 748: 6161 addi sp,sp,80 + 74a: 8082 ret -0000000000000742 <printf>: +000000000000074c <printf>: void printf(const char *fmt, ...) { - 742: 711d addi sp,sp,-96 - 744: ec06 sd ra,24(sp) - 746: e822 sd s0,16(sp) - 748: 1000 addi s0,sp,32 - 74a: e40c sd a1,8(s0) - 74c: e810 sd a2,16(s0) - 74e: ec14 sd a3,24(s0) - 750: f018 sd a4,32(s0) - 752: f41c sd a5,40(s0) - 754: 03043823 sd a6,48(s0) - 758: 03143c23 sd a7,56(s0) + 74c: 711d addi sp,sp,-96 + 74e: ec06 sd ra,24(sp) + 750: e822 sd s0,16(sp) + 752: 1000 addi s0,sp,32 + 754: e40c sd a1,8(s0) + 756: e810 sd a2,16(s0) + 758: ec14 sd a3,24(s0) + 75a: f018 sd a4,32(s0) + 75c: f41c sd a5,40(s0) + 75e: 03043823 sd a6,48(s0) + 762: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 75c: 00840613 addi a2,s0,8 - 760: fec43423 sd a2,-24(s0) + 766: 00840613 addi a2,s0,8 + 76a: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 764: 85aa mv a1,a0 - 766: 4505 li a0,1 - 768: 00000097 auipc ra,0x0 - 76c: dce080e7 jalr -562(ra) # 536 <vprintf> + 76e: 85aa mv a1,a0 + 770: 4505 li a0,1 + 772: 00000097 auipc ra,0x0 + 776: dce080e7 jalr -562(ra) # 540 <vprintf> } - 770: 60e2 ld ra,24(sp) - 772: 6442 ld s0,16(sp) - 774: 6125 addi sp,sp,96 - 776: 8082 ret + 77a: 60e2 ld ra,24(sp) + 77c: 6442 ld s0,16(sp) + 77e: 6125 addi sp,sp,96 + 780: 8082 ret -0000000000000778 <free>: +0000000000000782 <free>: static Header base; static Header *freep; void free(void *ap) { - 778: 1141 addi sp,sp,-16 - 77a: e422 sd s0,8(sp) - 77c: 0800 addi s0,sp,16 + 782: 1141 addi sp,sp,-16 + 784: e422 sd s0,8(sp) + 786: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 77e: ff050693 addi a3,a0,-16 + 788: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 782: 00000797 auipc a5,0x0 - 786: 2267b783 ld a5,550(a5) # 9a8 <freep> - 78a: a02d j 7b4 <free+0x3c> + 78c: 00000797 auipc a5,0x0 + 790: 2247b783 ld a5,548(a5) # 9b0 <freep> + 794: a02d j 7be <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 78c: 4618 lw a4,8(a2) - 78e: 9f2d addw a4,a4,a1 - 790: fee52c23 sw a4,-8(a0) + 796: 4618 lw a4,8(a2) + 798: 9f2d addw a4,a4,a1 + 79a: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 794: 6398 ld a4,0(a5) - 796: 6310 ld a2,0(a4) - 798: a83d j 7d6 <free+0x5e> + 79e: 6398 ld a4,0(a5) + 7a0: 6310 ld a2,0(a4) + 7a2: a83d j 7e0 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 79a: ff852703 lw a4,-8(a0) - 79e: 9f31 addw a4,a4,a2 - 7a0: c798 sw a4,8(a5) + 7a4: ff852703 lw a4,-8(a0) + 7a8: 9f31 addw a4,a4,a2 + 7aa: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 7a2: ff053683 ld a3,-16(a0) - 7a6: a091 j 7ea <free+0x72> + 7ac: ff053683 ld a3,-16(a0) + 7b0: a091 j 7f4 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 7a8: 6398 ld a4,0(a5) - 7aa: 00e7e463 bltu a5,a4,7b2 <free+0x3a> - 7ae: 00e6ea63 bltu a3,a4,7c2 <free+0x4a> + 7b2: 6398 ld a4,0(a5) + 7b4: 00e7e463 bltu a5,a4,7bc <free+0x3a> + 7b8: 00e6ea63 bltu a3,a4,7cc <free+0x4a> { - 7b2: 87ba mv a5,a4 + 7bc: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 7b4: fed7fae3 bgeu a5,a3,7a8 <free+0x30> - 7b8: 6398 ld a4,0(a5) - 7ba: 00e6e463 bltu a3,a4,7c2 <free+0x4a> + 7be: fed7fae3 bgeu a5,a3,7b2 <free+0x30> + 7c2: 6398 ld a4,0(a5) + 7c4: 00e6e463 bltu a3,a4,7cc <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 7be: fee7eae3 bltu a5,a4,7b2 <free+0x3a> + 7c8: fee7eae3 bltu a5,a4,7bc <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 7c2: ff852583 lw a1,-8(a0) - 7c6: 6390 ld a2,0(a5) - 7c8: 02059813 slli a6,a1,0x20 - 7cc: 01c85713 srli a4,a6,0x1c - 7d0: 9736 add a4,a4,a3 - 7d2: fae60de3 beq a2,a4,78c <free+0x14> + 7cc: ff852583 lw a1,-8(a0) + 7d0: 6390 ld a2,0(a5) + 7d2: 02059813 slli a6,a1,0x20 + 7d6: 01c85713 srli a4,a6,0x1c + 7da: 9736 add a4,a4,a3 + 7dc: fae60de3 beq a2,a4,796 <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 7d6: fec53823 sd a2,-16(a0) + 7e0: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 7da: 4790 lw a2,8(a5) - 7dc: 02061593 slli a1,a2,0x20 - 7e0: 01c5d713 srli a4,a1,0x1c - 7e4: 973e add a4,a4,a5 - 7e6: fae68ae3 beq a3,a4,79a <free+0x22> + 7e4: 4790 lw a2,8(a5) + 7e6: 02061593 slli a1,a2,0x20 + 7ea: 01c5d713 srli a4,a1,0x1c + 7ee: 973e add a4,a4,a5 + 7f0: fae68ae3 beq a3,a4,7a4 <free+0x22> p->s.ptr = bp->s.ptr; - 7ea: e394 sd a3,0(a5) + 7f4: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 7ec: 00000717 auipc a4,0x0 - 7f0: 1af73e23 sd a5,444(a4) # 9a8 <freep> + 7f6: 00000717 auipc a4,0x0 + 7fa: 1af73d23 sd a5,442(a4) # 9b0 <freep> } - 7f4: 6422 ld s0,8(sp) - 7f6: 0141 addi sp,sp,16 - 7f8: 8082 ret + 7fe: 6422 ld s0,8(sp) + 800: 0141 addi sp,sp,16 + 802: 8082 ret -00000000000007fa <malloc>: +0000000000000804 <malloc>: return freep; } void* malloc(uint nbytes) { - 7fa: 7139 addi sp,sp,-64 - 7fc: fc06 sd ra,56(sp) - 7fe: f822 sd s0,48(sp) - 800: f426 sd s1,40(sp) - 802: f04a sd s2,32(sp) - 804: ec4e sd s3,24(sp) - 806: e852 sd s4,16(sp) - 808: e456 sd s5,8(sp) - 80a: e05a sd s6,0(sp) - 80c: 0080 addi s0,sp,64 + 804: 7139 addi sp,sp,-64 + 806: fc06 sd ra,56(sp) + 808: f822 sd s0,48(sp) + 80a: f426 sd s1,40(sp) + 80c: f04a sd s2,32(sp) + 80e: ec4e sd s3,24(sp) + 810: e852 sd s4,16(sp) + 812: e456 sd s5,8(sp) + 814: e05a sd s6,0(sp) + 816: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 80e: 02051493 slli s1,a0,0x20 - 812: 9081 srli s1,s1,0x20 - 814: 04bd addi s1,s1,15 - 816: 8091 srli s1,s1,0x4 - 818: 00148a1b addiw s4,s1,1 - 81c: 0485 addi s1,s1,1 + 818: 02051493 slli s1,a0,0x20 + 81c: 9081 srli s1,s1,0x20 + 81e: 04bd addi s1,s1,15 + 820: 8091 srli s1,s1,0x4 + 822: 00148a1b addiw s4,s1,1 + 826: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 81e: 00000517 auipc a0,0x0 - 822: 18a53503 ld a0,394(a0) # 9a8 <freep> - 826: c515 beqz a0,852 <malloc+0x58> + 828: 00000517 auipc a0,0x0 + 82c: 18853503 ld a0,392(a0) # 9b0 <freep> + 830: c515 beqz a0,85c <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 828: 611c ld a5,0(a0) + 832: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 82a: 4798 lw a4,8(a5) - 82c: 04977163 bgeu a4,s1,86e <malloc+0x74> - 830: 89d2 mv s3,s4 - 832: 000a071b sext.w a4,s4 - 836: 6685 lui a3,0x1 - 838: 00d77363 bgeu a4,a3,83e <malloc+0x44> - 83c: 6985 lui s3,0x1 - 83e: 00098b1b sext.w s6,s3 + 834: 4798 lw a4,8(a5) + 836: 04977163 bgeu a4,s1,878 <malloc+0x74> + 83a: 89d2 mv s3,s4 + 83c: 000a071b sext.w a4,s4 + 840: 6685 lui a3,0x1 + 842: 00d77363 bgeu a4,a3,848 <malloc+0x44> + 846: 6985 lui s3,0x1 + 848: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 842: 0049999b slliw s3,s3,0x4 + 84c: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 846: 00000917 auipc s2,0x0 - 84a: 16290913 addi s2,s2,354 # 9a8 <freep> + 850: 00000917 auipc s2,0x0 + 854: 16090913 addi s2,s2,352 # 9b0 <freep> if(p == (char*)-1) - 84e: 5afd li s5,-1 - 850: a8a5 j 8c8 <malloc+0xce> + 858: 5afd li s5,-1 + 85a: a8a5 j 8d2 <malloc+0xce> base.s.ptr = freep = prevp = &base; - 852: 00000797 auipc a5,0x0 - 856: 15678793 addi a5,a5,342 # 9a8 <freep> - 85a: 00000717 auipc a4,0x0 - 85e: 15670713 addi a4,a4,342 # 9b0 <base> - 862: e398 sd a4,0(a5) - 864: e798 sd a4,8(a5) + 85c: 00000797 auipc a5,0x0 + 860: 15478793 addi a5,a5,340 # 9b0 <freep> + 864: 00000717 auipc a4,0x0 + 868: 15470713 addi a4,a4,340 # 9b8 <base> + 86c: e398 sd a4,0(a5) + 86e: e798 sd a4,8(a5) base.s.size = 0; - 866: 0007a823 sw zero,16(a5) + 870: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 86a: 87ba mv a5,a4 - 86c: b7d1 j 830 <malloc+0x36> + 874: 87ba mv a5,a4 + 876: b7d1 j 83a <malloc+0x36> if(p->s.size == nunits) - 86e: 02e48c63 beq s1,a4,8a6 <malloc+0xac> + 878: 02e48c63 beq s1,a4,8b0 <malloc+0xac> p->s.size -= nunits; - 872: 4147073b subw a4,a4,s4 - 876: c798 sw a4,8(a5) + 87c: 4147073b subw a4,a4,s4 + 880: c798 sw a4,8(a5) p += p->s.size; - 878: 02071693 slli a3,a4,0x20 - 87c: 01c6d713 srli a4,a3,0x1c - 880: 97ba add a5,a5,a4 + 882: 02071693 slli a3,a4,0x20 + 886: 01c6d713 srli a4,a3,0x1c + 88a: 97ba add a5,a5,a4 p->s.size = nunits; - 882: 0147a423 sw s4,8(a5) + 88c: 0147a423 sw s4,8(a5) freep = prevp; - 886: 00000717 auipc a4,0x0 - 88a: 12a73123 sd a0,290(a4) # 9a8 <freep> + 890: 00000717 auipc a4,0x0 + 894: 12a73023 sd a0,288(a4) # 9b0 <freep> return (void*)(p + 1); - 88e: 01078513 addi a0,a5,16 + 898: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 892: 70e2 ld ra,56(sp) - 894: 7442 ld s0,48(sp) - 896: 74a2 ld s1,40(sp) - 898: 7902 ld s2,32(sp) - 89a: 69e2 ld s3,24(sp) - 89c: 6a42 ld s4,16(sp) - 89e: 6aa2 ld s5,8(sp) - 8a0: 6b02 ld s6,0(sp) - 8a2: 6121 addi sp,sp,64 - 8a4: 8082 ret + 89c: 70e2 ld ra,56(sp) + 89e: 7442 ld s0,48(sp) + 8a0: 74a2 ld s1,40(sp) + 8a2: 7902 ld s2,32(sp) + 8a4: 69e2 ld s3,24(sp) + 8a6: 6a42 ld s4,16(sp) + 8a8: 6aa2 ld s5,8(sp) + 8aa: 6b02 ld s6,0(sp) + 8ac: 6121 addi sp,sp,64 + 8ae: 8082 ret prevp->s.ptr = p->s.ptr; - 8a6: 6398 ld a4,0(a5) - 8a8: e118 sd a4,0(a0) - 8aa: bff1 j 886 <malloc+0x8c> + 8b0: 6398 ld a4,0(a5) + 8b2: e118 sd a4,0(a0) + 8b4: bff1 j 890 <malloc+0x8c> hp->s.size = nu; - 8ac: 01652423 sw s6,8(a0) + 8b6: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 8b0: 0541 addi a0,a0,16 - 8b2: 00000097 auipc ra,0x0 - 8b6: ec6080e7 jalr -314(ra) # 778 <free> + 8ba: 0541 addi a0,a0,16 + 8bc: 00000097 auipc ra,0x0 + 8c0: ec6080e7 jalr -314(ra) # 782 <free> return freep; - 8ba: 00093503 ld a0,0(s2) + 8c4: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 8be: d971 beqz a0,892 <malloc+0x98> + 8c8: d971 beqz a0,89c <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 8c0: 611c ld a5,0(a0) + 8ca: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 8c2: 4798 lw a4,8(a5) - 8c4: fa9775e3 bgeu a4,s1,86e <malloc+0x74> + 8cc: 4798 lw a4,8(a5) + 8ce: fa9775e3 bgeu a4,s1,878 <malloc+0x74> if(p == freep) - 8c8: 00093703 ld a4,0(s2) - 8cc: 853e mv a0,a5 - 8ce: fef719e3 bne a4,a5,8c0 <malloc+0xc6> + 8d2: 00093703 ld a4,0(s2) + 8d6: 853e mv a0,a5 + 8d8: fef719e3 bne a4,a5,8ca <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 8d2: 854e mv a0,s3 - 8d4: 00000097 auipc ra,0x0 - 8d8: b2a080e7 jalr -1238(ra) # 3fe <sbrk> + 8dc: 854e mv a0,s3 + 8de: 00000097 auipc ra,0x0 + 8e2: b20080e7 jalr -1248(ra) # 3fe <sbrk> if(p == (char*)-1) - 8dc: fd5518e3 bne a0,s5,8ac <malloc+0xb2> + 8e6: fd5518e3 bne a0,s5,8b6 <malloc+0xb2> return 0; - 8e0: 4501 li a0,0 - 8e2: bf45 j 892 <malloc+0x98> + 8ea: 4501 li a0,0 + 8ec: bf45 j 89c <malloc+0x98> diff --git a/xv6-user/strace.sym b/xv6-user/strace.sym index 239210a..63649e1 100644 --- a/xv6-user/strace.sym +++ b/xv6-user/strace.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -00000000000008e8 .rodata -00000000000009a8 .bss +00000000000008f0 .rodata +00000000000009b0 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,23 +16,24 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -000000000000046a putc -000000000000048c printint -0000000000000990 digits +0000000000000474 putc +0000000000000496 printint +0000000000000998 digits 0000000000000000 umalloc.c -00000000000009a8 freep -00000000000009b0 base +00000000000009b0 freep +00000000000009b8 base 00000000000000c2 strcpy -0000000000000742 printf -00000000000011a1 __global_pointer$ +000000000000074c printf +00000000000011a9 __global_pointer$ 000000000000041e dev 00000000000002c8 memmove +000000000000046a times 000000000000043e trace 00000000000001a8 gets -00000000000009a1 __SDATA_BEGIN__ +00000000000009a9 __SDATA_BEGIN__ 00000000000003f4 getpid 000000000000035a memcpy -00000000000007fa malloc +0000000000000804 malloc 0000000000000436 remove 0000000000000406 sleep 0000000000000446 sysinfo @@ -42,31 +43,31 @@ 000000000000044e rename 00000000000003a0 write 00000000000003ce fstat -0000000000000714 fprintf +000000000000071e fprintf 00000000000003b4 kill 00000000000000de strcat -0000000000000536 vprintf +0000000000000540 vprintf 00000000000003e2 chdir 00000000000003bc exec 0000000000000384 wait 0000000000000396 read 0000000000000320 memcmp 0000000000000372 fork -00000000000009c0 __BSS_END__ +00000000000009c8 __BSS_END__ 00000000000003fe sbrk 0000000000000416 test_proc 000000000000040e uptime -00000000000009a1 __bss_start +00000000000009a9 __bss_start 0000000000000162 memset 0000000000000000 main 000000000000010c strcmp 0000000000000456 shutdown 00000000000003ec dup 000000000000042e getcwd -00000000000009a1 __DATA_BEGIN__ +00000000000009a9 __DATA_BEGIN__ 0000000000000222 stat -00000000000009a1 _edata -00000000000009c0 _end +00000000000009a9 _edata +00000000000009c8 _end 000000000000037a exit 0000000000000268 atoi 0000000000000138 strlen @@ -74,4 +75,4 @@ 0000000000000184 strchr 00000000000003d8 mkdir 00000000000003aa close -0000000000000778 free +0000000000000782 free diff --git a/xv6-user/test.asm b/xv6-user/test.asm index 5e60710..1931862 100644 --- a/xv6-user/test.asm +++ b/xv6-user/test.asm @@ -27,15 +27,15 @@ int main() 18: fe043583 ld a1,-32(s0) 1c: 81a9 srli a1,a1,0xa 1e: 00001517 auipc a0,0x1 - 22: 87250513 addi a0,a0,-1934 # 890 <malloc+0xfa> + 22: 88250513 addi a0,a0,-1918 # 8a0 <malloc+0x100> 26: 00000097 auipc ra,0x0 - 2a: 6b8080e7 jalr 1720(ra) # 6de <printf> + 2a: 6c2080e7 jalr 1730(ra) # 6e8 <printf> printf("process amount: %d\n", info.nproc); 2e: fe843583 ld a1,-24(s0) 32: 00001517 auipc a0,0x1 - 36: 87650513 addi a0,a0,-1930 # 8a8 <malloc+0x112> + 36: 88650513 addi a0,a0,-1914 # 8b8 <malloc+0x118> 3a: 00000097 auipc ra,0x0 - 3e: 6a4080e7 jalr 1700(ra) # 6de <printf> + 3e: 6ae080e7 jalr 1710(ra) # 6e8 <printf> } exit(0); 42: 4501 li a0,0 @@ -43,9 +43,9 @@ int main() 48: 2d2080e7 jalr 722(ra) # 316 <exit> printf("sysinfo fail!\n"); 4c: 00001517 auipc a0,0x1 - 50: 83450513 addi a0,a0,-1996 # 880 <malloc+0xea> + 50: 84450513 addi a0,a0,-1980 # 890 <malloc+0xf0> 54: 00000097 auipc ra,0x0 - 58: 68a080e7 jalr 1674(ra) # 6de <printf> + 58: 694080e7 jalr 1684(ra) # 6e8 <printf> 5c: b7dd j 42 <main+0x42> 000000000000005e <strcpy>: @@ -804,637 +804,647 @@ uname: ret 404: 8082 ret -0000000000000406 <putc>: +0000000000000406 <times>: +.global times +times: + li a7, SYS_times + 406: 09900893 li a7,153 + ecall + 40a: 00000073 ecall + ret + 40e: 8082 ret + +0000000000000410 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 406: 1101 addi sp,sp,-32 - 408: ec06 sd ra,24(sp) - 40a: e822 sd s0,16(sp) - 40c: 1000 addi s0,sp,32 - 40e: feb407a3 sb a1,-17(s0) + 410: 1101 addi sp,sp,-32 + 412: ec06 sd ra,24(sp) + 414: e822 sd s0,16(sp) + 416: 1000 addi s0,sp,32 + 418: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 412: 4605 li a2,1 - 414: fef40593 addi a1,s0,-17 - 418: 00000097 auipc ra,0x0 - 41c: f24080e7 jalr -220(ra) # 33c <write> + 41c: 4605 li a2,1 + 41e: fef40593 addi a1,s0,-17 + 422: 00000097 auipc ra,0x0 + 426: f1a080e7 jalr -230(ra) # 33c <write> } - 420: 60e2 ld ra,24(sp) - 422: 6442 ld s0,16(sp) - 424: 6105 addi sp,sp,32 - 426: 8082 ret + 42a: 60e2 ld ra,24(sp) + 42c: 6442 ld s0,16(sp) + 42e: 6105 addi sp,sp,32 + 430: 8082 ret -0000000000000428 <printint>: +0000000000000432 <printint>: static void printint(int fd, int xx, int base, int sgn) { - 428: 7139 addi sp,sp,-64 - 42a: fc06 sd ra,56(sp) - 42c: f822 sd s0,48(sp) - 42e: f426 sd s1,40(sp) - 430: f04a sd s2,32(sp) - 432: ec4e sd s3,24(sp) - 434: 0080 addi s0,sp,64 - 436: 84aa mv s1,a0 + 432: 7139 addi sp,sp,-64 + 434: fc06 sd ra,56(sp) + 436: f822 sd s0,48(sp) + 438: f426 sd s1,40(sp) + 43a: f04a sd s2,32(sp) + 43c: ec4e sd s3,24(sp) + 43e: 0080 addi s0,sp,64 + 440: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 438: c299 beqz a3,43e <printint+0x16> - 43a: 0805c863 bltz a1,4ca <printint+0xa2> + 442: c299 beqz a3,448 <printint+0x16> + 444: 0805c863 bltz a1,4d4 <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 43e: 2581 sext.w a1,a1 + 448: 2581 sext.w a1,a1 neg = 0; - 440: 4881 li a7,0 + 44a: 4881 li a7,0 } i = 0; - 442: fc040993 addi s3,s0,-64 + 44c: fc040993 addi s3,s0,-64 neg = 0; - 446: 86ce mv a3,s3 + 450: 86ce mv a3,s3 i = 0; - 448: 4701 li a4,0 + 452: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 44a: 2601 sext.w a2,a2 - 44c: 00000517 auipc a0,0x0 - 450: 4d450513 addi a0,a0,1236 # 920 <digits> - 454: 883a mv a6,a4 - 456: 2705 addiw a4,a4,1 - 458: 02c5f7bb remuw a5,a1,a2 - 45c: 1782 slli a5,a5,0x20 - 45e: 9381 srli a5,a5,0x20 - 460: 97aa add a5,a5,a0 - 462: 0007c783 lbu a5,0(a5) - 466: 00f68023 sb a5,0(a3) + 454: 2601 sext.w a2,a2 + 456: 00000517 auipc a0,0x0 + 45a: 4da50513 addi a0,a0,1242 # 930 <digits> + 45e: 883a mv a6,a4 + 460: 2705 addiw a4,a4,1 + 462: 02c5f7bb remuw a5,a1,a2 + 466: 1782 slli a5,a5,0x20 + 468: 9381 srli a5,a5,0x20 + 46a: 97aa add a5,a5,a0 + 46c: 0007c783 lbu a5,0(a5) + 470: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 46a: 0005879b sext.w a5,a1 - 46e: 02c5d5bb divuw a1,a1,a2 - 472: 0685 addi a3,a3,1 - 474: fec7f0e3 bgeu a5,a2,454 <printint+0x2c> + 474: 0005879b sext.w a5,a1 + 478: 02c5d5bb divuw a1,a1,a2 + 47c: 0685 addi a3,a3,1 + 47e: fec7f0e3 bgeu a5,a2,45e <printint+0x2c> if(neg) - 478: 00088c63 beqz a7,490 <printint+0x68> + 482: 00088c63 beqz a7,49a <printint+0x68> buf[i++] = '-'; - 47c: fd070793 addi a5,a4,-48 - 480: 00878733 add a4,a5,s0 - 484: 02d00793 li a5,45 - 488: fef70823 sb a5,-16(a4) - 48c: 0028071b addiw a4,a6,2 + 486: fd070793 addi a5,a4,-48 + 48a: 00878733 add a4,a5,s0 + 48e: 02d00793 li a5,45 + 492: fef70823 sb a5,-16(a4) + 496: 0028071b addiw a4,a6,2 while(--i >= 0) - 490: 02e05663 blez a4,4bc <printint+0x94> - 494: fc040913 addi s2,s0,-64 - 498: 993a add s2,s2,a4 - 49a: 19fd addi s3,s3,-1 - 49c: 99ba add s3,s3,a4 - 49e: 377d addiw a4,a4,-1 - 4a0: 1702 slli a4,a4,0x20 - 4a2: 9301 srli a4,a4,0x20 - 4a4: 40e989b3 sub s3,s3,a4 + 49a: 02e05663 blez a4,4c6 <printint+0x94> + 49e: fc040913 addi s2,s0,-64 + 4a2: 993a add s2,s2,a4 + 4a4: 19fd addi s3,s3,-1 + 4a6: 99ba add s3,s3,a4 + 4a8: 377d addiw a4,a4,-1 + 4aa: 1702 slli a4,a4,0x20 + 4ac: 9301 srli a4,a4,0x20 + 4ae: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 4a8: fff94583 lbu a1,-1(s2) - 4ac: 8526 mv a0,s1 - 4ae: 00000097 auipc ra,0x0 - 4b2: f58080e7 jalr -168(ra) # 406 <putc> + 4b2: fff94583 lbu a1,-1(s2) + 4b6: 8526 mv a0,s1 + 4b8: 00000097 auipc ra,0x0 + 4bc: f58080e7 jalr -168(ra) # 410 <putc> while(--i >= 0) - 4b6: 197d addi s2,s2,-1 - 4b8: ff3918e3 bne s2,s3,4a8 <printint+0x80> + 4c0: 197d addi s2,s2,-1 + 4c2: ff3918e3 bne s2,s3,4b2 <printint+0x80> } - 4bc: 70e2 ld ra,56(sp) - 4be: 7442 ld s0,48(sp) - 4c0: 74a2 ld s1,40(sp) - 4c2: 7902 ld s2,32(sp) - 4c4: 69e2 ld s3,24(sp) - 4c6: 6121 addi sp,sp,64 - 4c8: 8082 ret + 4c6: 70e2 ld ra,56(sp) + 4c8: 7442 ld s0,48(sp) + 4ca: 74a2 ld s1,40(sp) + 4cc: 7902 ld s2,32(sp) + 4ce: 69e2 ld s3,24(sp) + 4d0: 6121 addi sp,sp,64 + 4d2: 8082 ret x = -xx; - 4ca: 40b005bb negw a1,a1 + 4d4: 40b005bb negw a1,a1 neg = 1; - 4ce: 4885 li a7,1 + 4d8: 4885 li a7,1 x = -xx; - 4d0: bf8d j 442 <printint+0x1a> + 4da: bf8d j 44c <printint+0x1a> -00000000000004d2 <vprintf>: +00000000000004dc <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 4d2: 7119 addi sp,sp,-128 - 4d4: fc86 sd ra,120(sp) - 4d6: f8a2 sd s0,112(sp) - 4d8: f4a6 sd s1,104(sp) - 4da: f0ca sd s2,96(sp) - 4dc: ecce sd s3,88(sp) - 4de: e8d2 sd s4,80(sp) - 4e0: e4d6 sd s5,72(sp) - 4e2: e0da sd s6,64(sp) - 4e4: fc5e sd s7,56(sp) - 4e6: f862 sd s8,48(sp) - 4e8: f466 sd s9,40(sp) - 4ea: f06a sd s10,32(sp) - 4ec: ec6e sd s11,24(sp) - 4ee: 0100 addi s0,sp,128 + 4dc: 7119 addi sp,sp,-128 + 4de: fc86 sd ra,120(sp) + 4e0: f8a2 sd s0,112(sp) + 4e2: f4a6 sd s1,104(sp) + 4e4: f0ca sd s2,96(sp) + 4e6: ecce sd s3,88(sp) + 4e8: e8d2 sd s4,80(sp) + 4ea: e4d6 sd s5,72(sp) + 4ec: e0da sd s6,64(sp) + 4ee: fc5e sd s7,56(sp) + 4f0: f862 sd s8,48(sp) + 4f2: f466 sd s9,40(sp) + 4f4: f06a sd s10,32(sp) + 4f6: ec6e sd s11,24(sp) + 4f8: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 4f0: 0005c903 lbu s2,0(a1) - 4f4: 18090f63 beqz s2,692 <vprintf+0x1c0> - 4f8: 8aaa mv s5,a0 - 4fa: 8b32 mv s6,a2 - 4fc: 00158493 addi s1,a1,1 + 4fa: 0005c903 lbu s2,0(a1) + 4fe: 18090f63 beqz s2,69c <vprintf+0x1c0> + 502: 8aaa mv s5,a0 + 504: 8b32 mv s6,a2 + 506: 00158493 addi s1,a1,1 state = 0; - 500: 4981 li s3,0 + 50a: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 502: 02500a13 li s4,37 - 506: 4c55 li s8,21 - 508: 00000c97 auipc s9,0x0 - 50c: 3c0c8c93 addi s9,s9,960 # 8c8 <malloc+0x132> + 50c: 02500a13 li s4,37 + 510: 4c55 li s8,21 + 512: 00000c97 auipc s9,0x0 + 516: 3c6c8c93 addi s9,s9,966 # 8d8 <malloc+0x138> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 510: 02800d93 li s11,40 + 51a: 02800d93 li s11,40 putc(fd, 'x'); - 514: 4d41 li s10,16 + 51e: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 516: 00000b97 auipc s7,0x0 - 51a: 40ab8b93 addi s7,s7,1034 # 920 <digits> - 51e: a839 j 53c <vprintf+0x6a> + 520: 00000b97 auipc s7,0x0 + 524: 410b8b93 addi s7,s7,1040 # 930 <digits> + 528: a839 j 546 <vprintf+0x6a> putc(fd, c); - 520: 85ca mv a1,s2 - 522: 8556 mv a0,s5 - 524: 00000097 auipc ra,0x0 - 528: ee2080e7 jalr -286(ra) # 406 <putc> - 52c: a019 j 532 <vprintf+0x60> + 52a: 85ca mv a1,s2 + 52c: 8556 mv a0,s5 + 52e: 00000097 auipc ra,0x0 + 532: ee2080e7 jalr -286(ra) # 410 <putc> + 536: a019 j 53c <vprintf+0x60> } else if(state == '%'){ - 52e: 01498d63 beq s3,s4,548 <vprintf+0x76> + 538: 01498d63 beq s3,s4,552 <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 532: 0485 addi s1,s1,1 - 534: fff4c903 lbu s2,-1(s1) - 538: 14090d63 beqz s2,692 <vprintf+0x1c0> + 53c: 0485 addi s1,s1,1 + 53e: fff4c903 lbu s2,-1(s1) + 542: 14090d63 beqz s2,69c <vprintf+0x1c0> if(state == 0){ - 53c: fe0999e3 bnez s3,52e <vprintf+0x5c> + 546: fe0999e3 bnez s3,538 <vprintf+0x5c> if(c == '%'){ - 540: ff4910e3 bne s2,s4,520 <vprintf+0x4e> + 54a: ff4910e3 bne s2,s4,52a <vprintf+0x4e> state = '%'; - 544: 89d2 mv s3,s4 - 546: b7f5 j 532 <vprintf+0x60> + 54e: 89d2 mv s3,s4 + 550: b7f5 j 53c <vprintf+0x60> if(c == 'd'){ - 548: 11490c63 beq s2,s4,660 <vprintf+0x18e> - 54c: f9d9079b addiw a5,s2,-99 - 550: 0ff7f793 zext.b a5,a5 - 554: 10fc6e63 bltu s8,a5,670 <vprintf+0x19e> - 558: f9d9079b addiw a5,s2,-99 - 55c: 0ff7f713 zext.b a4,a5 - 560: 10ec6863 bltu s8,a4,670 <vprintf+0x19e> - 564: 00271793 slli a5,a4,0x2 - 568: 97e6 add a5,a5,s9 - 56a: 439c lw a5,0(a5) - 56c: 97e6 add a5,a5,s9 - 56e: 8782 jr a5 + 552: 11490c63 beq s2,s4,66a <vprintf+0x18e> + 556: f9d9079b addiw a5,s2,-99 + 55a: 0ff7f793 zext.b a5,a5 + 55e: 10fc6e63 bltu s8,a5,67a <vprintf+0x19e> + 562: f9d9079b addiw a5,s2,-99 + 566: 0ff7f713 zext.b a4,a5 + 56a: 10ec6863 bltu s8,a4,67a <vprintf+0x19e> + 56e: 00271793 slli a5,a4,0x2 + 572: 97e6 add a5,a5,s9 + 574: 439c lw a5,0(a5) + 576: 97e6 add a5,a5,s9 + 578: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 570: 008b0913 addi s2,s6,8 - 574: 4685 li a3,1 - 576: 4629 li a2,10 - 578: 000b2583 lw a1,0(s6) - 57c: 8556 mv a0,s5 - 57e: 00000097 auipc ra,0x0 - 582: eaa080e7 jalr -342(ra) # 428 <printint> - 586: 8b4a mv s6,s2 + 57a: 008b0913 addi s2,s6,8 + 57e: 4685 li a3,1 + 580: 4629 li a2,10 + 582: 000b2583 lw a1,0(s6) + 586: 8556 mv a0,s5 + 588: 00000097 auipc ra,0x0 + 58c: eaa080e7 jalr -342(ra) # 432 <printint> + 590: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 588: 4981 li s3,0 - 58a: b765 j 532 <vprintf+0x60> + 592: 4981 li s3,0 + 594: b765 j 53c <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 58c: 008b0913 addi s2,s6,8 - 590: 4681 li a3,0 - 592: 4629 li a2,10 - 594: 000b2583 lw a1,0(s6) - 598: 8556 mv a0,s5 - 59a: 00000097 auipc ra,0x0 - 59e: e8e080e7 jalr -370(ra) # 428 <printint> - 5a2: 8b4a mv s6,s2 + 596: 008b0913 addi s2,s6,8 + 59a: 4681 li a3,0 + 59c: 4629 li a2,10 + 59e: 000b2583 lw a1,0(s6) + 5a2: 8556 mv a0,s5 + 5a4: 00000097 auipc ra,0x0 + 5a8: e8e080e7 jalr -370(ra) # 432 <printint> + 5ac: 8b4a mv s6,s2 state = 0; - 5a4: 4981 li s3,0 - 5a6: b771 j 532 <vprintf+0x60> + 5ae: 4981 li s3,0 + 5b0: b771 j 53c <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 5a8: 008b0913 addi s2,s6,8 - 5ac: 4681 li a3,0 - 5ae: 866a mv a2,s10 - 5b0: 000b2583 lw a1,0(s6) - 5b4: 8556 mv a0,s5 - 5b6: 00000097 auipc ra,0x0 - 5ba: e72080e7 jalr -398(ra) # 428 <printint> - 5be: 8b4a mv s6,s2 + 5b2: 008b0913 addi s2,s6,8 + 5b6: 4681 li a3,0 + 5b8: 866a mv a2,s10 + 5ba: 000b2583 lw a1,0(s6) + 5be: 8556 mv a0,s5 + 5c0: 00000097 auipc ra,0x0 + 5c4: e72080e7 jalr -398(ra) # 432 <printint> + 5c8: 8b4a mv s6,s2 state = 0; - 5c0: 4981 li s3,0 - 5c2: bf85 j 532 <vprintf+0x60> + 5ca: 4981 li s3,0 + 5cc: bf85 j 53c <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 5c4: 008b0793 addi a5,s6,8 - 5c8: f8f43423 sd a5,-120(s0) - 5cc: 000b3983 ld s3,0(s6) + 5ce: 008b0793 addi a5,s6,8 + 5d2: f8f43423 sd a5,-120(s0) + 5d6: 000b3983 ld s3,0(s6) putc(fd, '0'); - 5d0: 03000593 li a1,48 - 5d4: 8556 mv a0,s5 - 5d6: 00000097 auipc ra,0x0 - 5da: e30080e7 jalr -464(ra) # 406 <putc> + 5da: 03000593 li a1,48 + 5de: 8556 mv a0,s5 + 5e0: 00000097 auipc ra,0x0 + 5e4: e30080e7 jalr -464(ra) # 410 <putc> putc(fd, 'x'); - 5de: 07800593 li a1,120 - 5e2: 8556 mv a0,s5 - 5e4: 00000097 auipc ra,0x0 - 5e8: e22080e7 jalr -478(ra) # 406 <putc> - 5ec: 896a mv s2,s10 + 5e8: 07800593 li a1,120 + 5ec: 8556 mv a0,s5 + 5ee: 00000097 auipc ra,0x0 + 5f2: e22080e7 jalr -478(ra) # 410 <putc> + 5f6: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 5ee: 03c9d793 srli a5,s3,0x3c - 5f2: 97de add a5,a5,s7 - 5f4: 0007c583 lbu a1,0(a5) - 5f8: 8556 mv a0,s5 - 5fa: 00000097 auipc ra,0x0 - 5fe: e0c080e7 jalr -500(ra) # 406 <putc> + 5f8: 03c9d793 srli a5,s3,0x3c + 5fc: 97de add a5,a5,s7 + 5fe: 0007c583 lbu a1,0(a5) + 602: 8556 mv a0,s5 + 604: 00000097 auipc ra,0x0 + 608: e0c080e7 jalr -500(ra) # 410 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 602: 0992 slli s3,s3,0x4 - 604: 397d addiw s2,s2,-1 - 606: fe0914e3 bnez s2,5ee <vprintf+0x11c> + 60c: 0992 slli s3,s3,0x4 + 60e: 397d addiw s2,s2,-1 + 610: fe0914e3 bnez s2,5f8 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 60a: f8843b03 ld s6,-120(s0) + 614: f8843b03 ld s6,-120(s0) state = 0; - 60e: 4981 li s3,0 - 610: b70d j 532 <vprintf+0x60> + 618: 4981 li s3,0 + 61a: b70d j 53c <vprintf+0x60> s = va_arg(ap, char*); - 612: 008b0913 addi s2,s6,8 - 616: 000b3983 ld s3,0(s6) + 61c: 008b0913 addi s2,s6,8 + 620: 000b3983 ld s3,0(s6) if(s == 0) - 61a: 02098163 beqz s3,63c <vprintf+0x16a> + 624: 02098163 beqz s3,646 <vprintf+0x16a> while(*s != 0){ - 61e: 0009c583 lbu a1,0(s3) - 622: c5ad beqz a1,68c <vprintf+0x1ba> + 628: 0009c583 lbu a1,0(s3) + 62c: c5ad beqz a1,696 <vprintf+0x1ba> putc(fd, *s); - 624: 8556 mv a0,s5 - 626: 00000097 auipc ra,0x0 - 62a: de0080e7 jalr -544(ra) # 406 <putc> + 62e: 8556 mv a0,s5 + 630: 00000097 auipc ra,0x0 + 634: de0080e7 jalr -544(ra) # 410 <putc> s++; - 62e: 0985 addi s3,s3,1 + 638: 0985 addi s3,s3,1 while(*s != 0){ - 630: 0009c583 lbu a1,0(s3) - 634: f9e5 bnez a1,624 <vprintf+0x152> + 63a: 0009c583 lbu a1,0(s3) + 63e: f9e5 bnez a1,62e <vprintf+0x152> s = va_arg(ap, char*); - 636: 8b4a mv s6,s2 + 640: 8b4a mv s6,s2 state = 0; - 638: 4981 li s3,0 - 63a: bde5 j 532 <vprintf+0x60> + 642: 4981 li s3,0 + 644: bde5 j 53c <vprintf+0x60> s = "(null)"; - 63c: 00000997 auipc s3,0x0 - 640: 28498993 addi s3,s3,644 # 8c0 <malloc+0x12a> + 646: 00000997 auipc s3,0x0 + 64a: 28a98993 addi s3,s3,650 # 8d0 <malloc+0x130> while(*s != 0){ - 644: 85ee mv a1,s11 - 646: bff9 j 624 <vprintf+0x152> + 64e: 85ee mv a1,s11 + 650: bff9 j 62e <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 648: 008b0913 addi s2,s6,8 - 64c: 000b4583 lbu a1,0(s6) - 650: 8556 mv a0,s5 - 652: 00000097 auipc ra,0x0 - 656: db4080e7 jalr -588(ra) # 406 <putc> - 65a: 8b4a mv s6,s2 + 652: 008b0913 addi s2,s6,8 + 656: 000b4583 lbu a1,0(s6) + 65a: 8556 mv a0,s5 + 65c: 00000097 auipc ra,0x0 + 660: db4080e7 jalr -588(ra) # 410 <putc> + 664: 8b4a mv s6,s2 state = 0; - 65c: 4981 li s3,0 - 65e: bdd1 j 532 <vprintf+0x60> + 666: 4981 li s3,0 + 668: bdd1 j 53c <vprintf+0x60> putc(fd, c); - 660: 85d2 mv a1,s4 - 662: 8556 mv a0,s5 - 664: 00000097 auipc ra,0x0 - 668: da2080e7 jalr -606(ra) # 406 <putc> + 66a: 85d2 mv a1,s4 + 66c: 8556 mv a0,s5 + 66e: 00000097 auipc ra,0x0 + 672: da2080e7 jalr -606(ra) # 410 <putc> state = 0; - 66c: 4981 li s3,0 - 66e: b5d1 j 532 <vprintf+0x60> + 676: 4981 li s3,0 + 678: b5d1 j 53c <vprintf+0x60> putc(fd, '%'); - 670: 85d2 mv a1,s4 - 672: 8556 mv a0,s5 - 674: 00000097 auipc ra,0x0 - 678: d92080e7 jalr -622(ra) # 406 <putc> + 67a: 85d2 mv a1,s4 + 67c: 8556 mv a0,s5 + 67e: 00000097 auipc ra,0x0 + 682: d92080e7 jalr -622(ra) # 410 <putc> putc(fd, c); - 67c: 85ca mv a1,s2 - 67e: 8556 mv a0,s5 - 680: 00000097 auipc ra,0x0 - 684: d86080e7 jalr -634(ra) # 406 <putc> + 686: 85ca mv a1,s2 + 688: 8556 mv a0,s5 + 68a: 00000097 auipc ra,0x0 + 68e: d86080e7 jalr -634(ra) # 410 <putc> state = 0; - 688: 4981 li s3,0 - 68a: b565 j 532 <vprintf+0x60> + 692: 4981 li s3,0 + 694: b565 j 53c <vprintf+0x60> s = va_arg(ap, char*); - 68c: 8b4a mv s6,s2 + 696: 8b4a mv s6,s2 state = 0; - 68e: 4981 li s3,0 - 690: b54d j 532 <vprintf+0x60> + 698: 4981 li s3,0 + 69a: b54d j 53c <vprintf+0x60> } } } - 692: 70e6 ld ra,120(sp) - 694: 7446 ld s0,112(sp) - 696: 74a6 ld s1,104(sp) - 698: 7906 ld s2,96(sp) - 69a: 69e6 ld s3,88(sp) - 69c: 6a46 ld s4,80(sp) - 69e: 6aa6 ld s5,72(sp) - 6a0: 6b06 ld s6,64(sp) - 6a2: 7be2 ld s7,56(sp) - 6a4: 7c42 ld s8,48(sp) - 6a6: 7ca2 ld s9,40(sp) - 6a8: 7d02 ld s10,32(sp) - 6aa: 6de2 ld s11,24(sp) - 6ac: 6109 addi sp,sp,128 - 6ae: 8082 ret - -00000000000006b0 <fprintf>: + 69c: 70e6 ld ra,120(sp) + 69e: 7446 ld s0,112(sp) + 6a0: 74a6 ld s1,104(sp) + 6a2: 7906 ld s2,96(sp) + 6a4: 69e6 ld s3,88(sp) + 6a6: 6a46 ld s4,80(sp) + 6a8: 6aa6 ld s5,72(sp) + 6aa: 6b06 ld s6,64(sp) + 6ac: 7be2 ld s7,56(sp) + 6ae: 7c42 ld s8,48(sp) + 6b0: 7ca2 ld s9,40(sp) + 6b2: 7d02 ld s10,32(sp) + 6b4: 6de2 ld s11,24(sp) + 6b6: 6109 addi sp,sp,128 + 6b8: 8082 ret + +00000000000006ba <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 6b0: 715d addi sp,sp,-80 - 6b2: ec06 sd ra,24(sp) - 6b4: e822 sd s0,16(sp) - 6b6: 1000 addi s0,sp,32 - 6b8: e010 sd a2,0(s0) - 6ba: e414 sd a3,8(s0) - 6bc: e818 sd a4,16(s0) - 6be: ec1c sd a5,24(s0) - 6c0: 03043023 sd a6,32(s0) - 6c4: 03143423 sd a7,40(s0) + 6ba: 715d addi sp,sp,-80 + 6bc: ec06 sd ra,24(sp) + 6be: e822 sd s0,16(sp) + 6c0: 1000 addi s0,sp,32 + 6c2: e010 sd a2,0(s0) + 6c4: e414 sd a3,8(s0) + 6c6: e818 sd a4,16(s0) + 6c8: ec1c sd a5,24(s0) + 6ca: 03043023 sd a6,32(s0) + 6ce: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 6c8: 8622 mv a2,s0 - 6ca: fe843423 sd s0,-24(s0) + 6d2: 8622 mv a2,s0 + 6d4: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 6ce: 00000097 auipc ra,0x0 - 6d2: e04080e7 jalr -508(ra) # 4d2 <vprintf> + 6d8: 00000097 auipc ra,0x0 + 6dc: e04080e7 jalr -508(ra) # 4dc <vprintf> } - 6d6: 60e2 ld ra,24(sp) - 6d8: 6442 ld s0,16(sp) - 6da: 6161 addi sp,sp,80 - 6dc: 8082 ret + 6e0: 60e2 ld ra,24(sp) + 6e2: 6442 ld s0,16(sp) + 6e4: 6161 addi sp,sp,80 + 6e6: 8082 ret -00000000000006de <printf>: +00000000000006e8 <printf>: void printf(const char *fmt, ...) { - 6de: 711d addi sp,sp,-96 - 6e0: ec06 sd ra,24(sp) - 6e2: e822 sd s0,16(sp) - 6e4: 1000 addi s0,sp,32 - 6e6: e40c sd a1,8(s0) - 6e8: e810 sd a2,16(s0) - 6ea: ec14 sd a3,24(s0) - 6ec: f018 sd a4,32(s0) - 6ee: f41c sd a5,40(s0) - 6f0: 03043823 sd a6,48(s0) - 6f4: 03143c23 sd a7,56(s0) + 6e8: 711d addi sp,sp,-96 + 6ea: ec06 sd ra,24(sp) + 6ec: e822 sd s0,16(sp) + 6ee: 1000 addi s0,sp,32 + 6f0: e40c sd a1,8(s0) + 6f2: e810 sd a2,16(s0) + 6f4: ec14 sd a3,24(s0) + 6f6: f018 sd a4,32(s0) + 6f8: f41c sd a5,40(s0) + 6fa: 03043823 sd a6,48(s0) + 6fe: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 6f8: 00840613 addi a2,s0,8 - 6fc: fec43423 sd a2,-24(s0) + 702: 00840613 addi a2,s0,8 + 706: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 700: 85aa mv a1,a0 - 702: 4505 li a0,1 - 704: 00000097 auipc ra,0x0 - 708: dce080e7 jalr -562(ra) # 4d2 <vprintf> + 70a: 85aa mv a1,a0 + 70c: 4505 li a0,1 + 70e: 00000097 auipc ra,0x0 + 712: dce080e7 jalr -562(ra) # 4dc <vprintf> } - 70c: 60e2 ld ra,24(sp) - 70e: 6442 ld s0,16(sp) - 710: 6125 addi sp,sp,96 - 712: 8082 ret + 716: 60e2 ld ra,24(sp) + 718: 6442 ld s0,16(sp) + 71a: 6125 addi sp,sp,96 + 71c: 8082 ret -0000000000000714 <free>: +000000000000071e <free>: static Header base; static Header *freep; void free(void *ap) { - 714: 1141 addi sp,sp,-16 - 716: e422 sd s0,8(sp) - 718: 0800 addi s0,sp,16 + 71e: 1141 addi sp,sp,-16 + 720: e422 sd s0,8(sp) + 722: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 71a: ff050693 addi a3,a0,-16 + 724: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 71e: 00000797 auipc a5,0x0 - 722: 21a7b783 ld a5,538(a5) # 938 <freep> - 726: a02d j 750 <free+0x3c> + 728: 00000797 auipc a5,0x0 + 72c: 2207b783 ld a5,544(a5) # 948 <freep> + 730: a02d j 75a <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 728: 4618 lw a4,8(a2) - 72a: 9f2d addw a4,a4,a1 - 72c: fee52c23 sw a4,-8(a0) + 732: 4618 lw a4,8(a2) + 734: 9f2d addw a4,a4,a1 + 736: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 730: 6398 ld a4,0(a5) - 732: 6310 ld a2,0(a4) - 734: a83d j 772 <free+0x5e> + 73a: 6398 ld a4,0(a5) + 73c: 6310 ld a2,0(a4) + 73e: a83d j 77c <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 736: ff852703 lw a4,-8(a0) - 73a: 9f31 addw a4,a4,a2 - 73c: c798 sw a4,8(a5) + 740: ff852703 lw a4,-8(a0) + 744: 9f31 addw a4,a4,a2 + 746: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 73e: ff053683 ld a3,-16(a0) - 742: a091 j 786 <free+0x72> + 748: ff053683 ld a3,-16(a0) + 74c: a091 j 790 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 744: 6398 ld a4,0(a5) - 746: 00e7e463 bltu a5,a4,74e <free+0x3a> - 74a: 00e6ea63 bltu a3,a4,75e <free+0x4a> + 74e: 6398 ld a4,0(a5) + 750: 00e7e463 bltu a5,a4,758 <free+0x3a> + 754: 00e6ea63 bltu a3,a4,768 <free+0x4a> { - 74e: 87ba mv a5,a4 + 758: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 750: fed7fae3 bgeu a5,a3,744 <free+0x30> - 754: 6398 ld a4,0(a5) - 756: 00e6e463 bltu a3,a4,75e <free+0x4a> + 75a: fed7fae3 bgeu a5,a3,74e <free+0x30> + 75e: 6398 ld a4,0(a5) + 760: 00e6e463 bltu a3,a4,768 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 75a: fee7eae3 bltu a5,a4,74e <free+0x3a> + 764: fee7eae3 bltu a5,a4,758 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 75e: ff852583 lw a1,-8(a0) - 762: 6390 ld a2,0(a5) - 764: 02059813 slli a6,a1,0x20 - 768: 01c85713 srli a4,a6,0x1c - 76c: 9736 add a4,a4,a3 - 76e: fae60de3 beq a2,a4,728 <free+0x14> + 768: ff852583 lw a1,-8(a0) + 76c: 6390 ld a2,0(a5) + 76e: 02059813 slli a6,a1,0x20 + 772: 01c85713 srli a4,a6,0x1c + 776: 9736 add a4,a4,a3 + 778: fae60de3 beq a2,a4,732 <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 772: fec53823 sd a2,-16(a0) + 77c: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 776: 4790 lw a2,8(a5) - 778: 02061593 slli a1,a2,0x20 - 77c: 01c5d713 srli a4,a1,0x1c - 780: 973e add a4,a4,a5 - 782: fae68ae3 beq a3,a4,736 <free+0x22> + 780: 4790 lw a2,8(a5) + 782: 02061593 slli a1,a2,0x20 + 786: 01c5d713 srli a4,a1,0x1c + 78a: 973e add a4,a4,a5 + 78c: fae68ae3 beq a3,a4,740 <free+0x22> p->s.ptr = bp->s.ptr; - 786: e394 sd a3,0(a5) + 790: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 788: 00000717 auipc a4,0x0 - 78c: 1af73823 sd a5,432(a4) # 938 <freep> + 792: 00000717 auipc a4,0x0 + 796: 1af73b23 sd a5,438(a4) # 948 <freep> } - 790: 6422 ld s0,8(sp) - 792: 0141 addi sp,sp,16 - 794: 8082 ret + 79a: 6422 ld s0,8(sp) + 79c: 0141 addi sp,sp,16 + 79e: 8082 ret -0000000000000796 <malloc>: +00000000000007a0 <malloc>: return freep; } void* malloc(uint nbytes) { - 796: 7139 addi sp,sp,-64 - 798: fc06 sd ra,56(sp) - 79a: f822 sd s0,48(sp) - 79c: f426 sd s1,40(sp) - 79e: f04a sd s2,32(sp) - 7a0: ec4e sd s3,24(sp) - 7a2: e852 sd s4,16(sp) - 7a4: e456 sd s5,8(sp) - 7a6: e05a sd s6,0(sp) - 7a8: 0080 addi s0,sp,64 + 7a0: 7139 addi sp,sp,-64 + 7a2: fc06 sd ra,56(sp) + 7a4: f822 sd s0,48(sp) + 7a6: f426 sd s1,40(sp) + 7a8: f04a sd s2,32(sp) + 7aa: ec4e sd s3,24(sp) + 7ac: e852 sd s4,16(sp) + 7ae: e456 sd s5,8(sp) + 7b0: e05a sd s6,0(sp) + 7b2: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 7aa: 02051493 slli s1,a0,0x20 - 7ae: 9081 srli s1,s1,0x20 - 7b0: 04bd addi s1,s1,15 - 7b2: 8091 srli s1,s1,0x4 - 7b4: 00148a1b addiw s4,s1,1 - 7b8: 0485 addi s1,s1,1 + 7b4: 02051493 slli s1,a0,0x20 + 7b8: 9081 srli s1,s1,0x20 + 7ba: 04bd addi s1,s1,15 + 7bc: 8091 srli s1,s1,0x4 + 7be: 00148a1b addiw s4,s1,1 + 7c2: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 7ba: 00000517 auipc a0,0x0 - 7be: 17e53503 ld a0,382(a0) # 938 <freep> - 7c2: c515 beqz a0,7ee <malloc+0x58> + 7c4: 00000517 auipc a0,0x0 + 7c8: 18453503 ld a0,388(a0) # 948 <freep> + 7cc: c515 beqz a0,7f8 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 7c4: 611c ld a5,0(a0) + 7ce: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 7c6: 4798 lw a4,8(a5) - 7c8: 04977163 bgeu a4,s1,80a <malloc+0x74> - 7cc: 89d2 mv s3,s4 - 7ce: 000a071b sext.w a4,s4 - 7d2: 6685 lui a3,0x1 - 7d4: 00d77363 bgeu a4,a3,7da <malloc+0x44> - 7d8: 6985 lui s3,0x1 - 7da: 00098b1b sext.w s6,s3 + 7d0: 4798 lw a4,8(a5) + 7d2: 04977163 bgeu a4,s1,814 <malloc+0x74> + 7d6: 89d2 mv s3,s4 + 7d8: 000a071b sext.w a4,s4 + 7dc: 6685 lui a3,0x1 + 7de: 00d77363 bgeu a4,a3,7e4 <malloc+0x44> + 7e2: 6985 lui s3,0x1 + 7e4: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 7de: 0049999b slliw s3,s3,0x4 + 7e8: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 7e2: 00000917 auipc s2,0x0 - 7e6: 15690913 addi s2,s2,342 # 938 <freep> + 7ec: 00000917 auipc s2,0x0 + 7f0: 15c90913 addi s2,s2,348 # 948 <freep> if(p == (char*)-1) - 7ea: 5afd li s5,-1 - 7ec: a8a5 j 864 <malloc+0xce> + 7f4: 5afd li s5,-1 + 7f6: a8a5 j 86e <malloc+0xce> base.s.ptr = freep = prevp = &base; - 7ee: 00000797 auipc a5,0x0 - 7f2: 14a78793 addi a5,a5,330 # 938 <freep> - 7f6: 00000717 auipc a4,0x0 - 7fa: 14a70713 addi a4,a4,330 # 940 <base> - 7fe: e398 sd a4,0(a5) - 800: e798 sd a4,8(a5) + 7f8: 00000797 auipc a5,0x0 + 7fc: 15078793 addi a5,a5,336 # 948 <freep> + 800: 00000717 auipc a4,0x0 + 804: 15070713 addi a4,a4,336 # 950 <base> + 808: e398 sd a4,0(a5) + 80a: e798 sd a4,8(a5) base.s.size = 0; - 802: 0007a823 sw zero,16(a5) + 80c: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 806: 87ba mv a5,a4 - 808: b7d1 j 7cc <malloc+0x36> + 810: 87ba mv a5,a4 + 812: b7d1 j 7d6 <malloc+0x36> if(p->s.size == nunits) - 80a: 02e48c63 beq s1,a4,842 <malloc+0xac> + 814: 02e48c63 beq s1,a4,84c <malloc+0xac> p->s.size -= nunits; - 80e: 4147073b subw a4,a4,s4 - 812: c798 sw a4,8(a5) + 818: 4147073b subw a4,a4,s4 + 81c: c798 sw a4,8(a5) p += p->s.size; - 814: 02071693 slli a3,a4,0x20 - 818: 01c6d713 srli a4,a3,0x1c - 81c: 97ba add a5,a5,a4 + 81e: 02071693 slli a3,a4,0x20 + 822: 01c6d713 srli a4,a3,0x1c + 826: 97ba add a5,a5,a4 p->s.size = nunits; - 81e: 0147a423 sw s4,8(a5) + 828: 0147a423 sw s4,8(a5) freep = prevp; - 822: 00000717 auipc a4,0x0 - 826: 10a73b23 sd a0,278(a4) # 938 <freep> + 82c: 00000717 auipc a4,0x0 + 830: 10a73e23 sd a0,284(a4) # 948 <freep> return (void*)(p + 1); - 82a: 01078513 addi a0,a5,16 + 834: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 82e: 70e2 ld ra,56(sp) - 830: 7442 ld s0,48(sp) - 832: 74a2 ld s1,40(sp) - 834: 7902 ld s2,32(sp) - 836: 69e2 ld s3,24(sp) - 838: 6a42 ld s4,16(sp) - 83a: 6aa2 ld s5,8(sp) - 83c: 6b02 ld s6,0(sp) - 83e: 6121 addi sp,sp,64 - 840: 8082 ret + 838: 70e2 ld ra,56(sp) + 83a: 7442 ld s0,48(sp) + 83c: 74a2 ld s1,40(sp) + 83e: 7902 ld s2,32(sp) + 840: 69e2 ld s3,24(sp) + 842: 6a42 ld s4,16(sp) + 844: 6aa2 ld s5,8(sp) + 846: 6b02 ld s6,0(sp) + 848: 6121 addi sp,sp,64 + 84a: 8082 ret prevp->s.ptr = p->s.ptr; - 842: 6398 ld a4,0(a5) - 844: e118 sd a4,0(a0) - 846: bff1 j 822 <malloc+0x8c> + 84c: 6398 ld a4,0(a5) + 84e: e118 sd a4,0(a0) + 850: bff1 j 82c <malloc+0x8c> hp->s.size = nu; - 848: 01652423 sw s6,8(a0) + 852: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 84c: 0541 addi a0,a0,16 - 84e: 00000097 auipc ra,0x0 - 852: ec6080e7 jalr -314(ra) # 714 <free> + 856: 0541 addi a0,a0,16 + 858: 00000097 auipc ra,0x0 + 85c: ec6080e7 jalr -314(ra) # 71e <free> return freep; - 856: 00093503 ld a0,0(s2) + 860: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 85a: d971 beqz a0,82e <malloc+0x98> + 864: d971 beqz a0,838 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 85c: 611c ld a5,0(a0) + 866: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 85e: 4798 lw a4,8(a5) - 860: fa9775e3 bgeu a4,s1,80a <malloc+0x74> + 868: 4798 lw a4,8(a5) + 86a: fa9775e3 bgeu a4,s1,814 <malloc+0x74> if(p == freep) - 864: 00093703 ld a4,0(s2) - 868: 853e mv a0,a5 - 86a: fef719e3 bne a4,a5,85c <malloc+0xc6> + 86e: 00093703 ld a4,0(s2) + 872: 853e mv a0,a5 + 874: fef719e3 bne a4,a5,866 <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 86e: 854e mv a0,s3 - 870: 00000097 auipc ra,0x0 - 874: b2a080e7 jalr -1238(ra) # 39a <sbrk> + 878: 854e mv a0,s3 + 87a: 00000097 auipc ra,0x0 + 87e: b20080e7 jalr -1248(ra) # 39a <sbrk> if(p == (char*)-1) - 878: fd5518e3 bne a0,s5,848 <malloc+0xb2> + 882: fd5518e3 bne a0,s5,852 <malloc+0xb2> return 0; - 87c: 4501 li a0,0 - 87e: bf45 j 82e <malloc+0x98> + 886: 4501 li a0,0 + 888: bf45 j 838 <malloc+0x98> diff --git a/xv6-user/test.sym b/xv6-user/test.sym index 095dc9b..0ad96fb 100644 --- a/xv6-user/test.sym +++ b/xv6-user/test.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -0000000000000880 .rodata -0000000000000938 .bss +0000000000000890 .rodata +0000000000000948 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,23 +16,24 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -0000000000000406 putc -0000000000000428 printint -0000000000000920 digits +0000000000000410 putc +0000000000000432 printint +0000000000000930 digits 0000000000000000 umalloc.c -0000000000000938 freep -0000000000000940 base +0000000000000948 freep +0000000000000950 base 000000000000005e strcpy -00000000000006de printf -0000000000001131 __global_pointer$ +00000000000006e8 printf +0000000000001141 __global_pointer$ 00000000000003ba dev 0000000000000264 memmove +0000000000000406 times 00000000000003da trace 0000000000000144 gets -0000000000000931 __SDATA_BEGIN__ +0000000000000941 __SDATA_BEGIN__ 0000000000000390 getpid 00000000000002f6 memcpy -0000000000000796 malloc +00000000000007a0 malloc 00000000000003d2 remove 00000000000003a2 sleep 00000000000003e2 sysinfo @@ -42,31 +43,31 @@ 00000000000003ea rename 000000000000033c write 000000000000036a fstat -00000000000006b0 fprintf +00000000000006ba fprintf 0000000000000350 kill 000000000000007a strcat -00000000000004d2 vprintf +00000000000004dc vprintf 000000000000037e chdir 0000000000000358 exec 0000000000000320 wait 0000000000000332 read 00000000000002bc memcmp 000000000000030e fork -0000000000000950 __BSS_END__ +0000000000000960 __BSS_END__ 000000000000039a sbrk 00000000000003b2 test_proc 00000000000003aa uptime -0000000000000931 __bss_start +0000000000000941 __bss_start 00000000000000fe memset 0000000000000000 main 00000000000000a8 strcmp 00000000000003f2 shutdown 0000000000000388 dup 00000000000003ca getcwd -0000000000000931 __DATA_BEGIN__ +0000000000000941 __DATA_BEGIN__ 00000000000001be stat -0000000000000931 _edata -0000000000000950 _end +0000000000000941 _edata +0000000000000960 _end 0000000000000316 exit 0000000000000204 atoi 00000000000000d4 strlen @@ -74,4 +75,4 @@ 0000000000000120 strchr 0000000000000374 mkdir 0000000000000346 close -0000000000000714 free +000000000000071e free diff --git a/xv6-user/usertests.asm b/xv6-user/usertests.asm index 9f89f9a..e6572a7 100644 --- a/xv6-user/usertests.asm +++ b/xv6-user/usertests.asm @@ -52,9 +52,9 @@ copyinstr1(char *s) printf("open(%p) returned %d, not -1\n", addr, fd); 3c: 862a mv a2,a0 3e: 00005517 auipc a0,0x5 - 42: e3250513 addi a0,a0,-462 # 4e70 <malloc+0xec> + 42: e3a50513 addi a0,a0,-454 # 4e78 <malloc+0xea> 46: 00005097 auipc ra,0x5 - 4a: c86080e7 jalr -890(ra) # 4ccc <printf> + 4a: c90080e7 jalr -880(ra) # 4cd6 <printf> exit(1); 4e: 4505 li a0,1 50: 00005097 auipc ra,0x5 @@ -118,15 +118,15 @@ validatetest(char *s) printf("%s: link should not succeed\n", s); a2: 85da mv a1,s6 a4: 00005517 auipc a0,0x5 - a8: dec50513 addi a0,a0,-532 # 4e90 <malloc+0x10c> + a8: df450513 addi a0,a0,-524 # 4e98 <malloc+0x10a> ac: 00005097 auipc ra,0x5 - b0: c20080e7 jalr -992(ra) # 4ccc <printf> + b0: c2a080e7 jalr -982(ra) # 4cd6 <printf> printf("bad string:[%s]\n", (char*)p); b4: 85a6 mv a1,s1 b6: 00005517 auipc a0,0x5 - ba: dfa50513 addi a0,a0,-518 # 4eb0 <malloc+0x12c> + ba: e0250513 addi a0,a0,-510 # 4eb8 <malloc+0x12a> be: 00005097 auipc ra,0x5 - c2: c0e080e7 jalr -1010(ra) # 4ccc <printf> + c2: c18080e7 jalr -1000(ra) # 4cd6 <printf> exit(1); c6: 4505 li a0,1 c8: 00005097 auipc ra,0x5 @@ -140,9 +140,9 @@ bsstest(char *s) for(i = 0; i < sizeof(uninit); i++){ d0: 00008797 auipc a5,0x8 - d4: 0b878793 addi a5,a5,184 # 8188 <uninit> + d4: 0c078793 addi a5,a5,192 # 8190 <uninit> d8: 0000a697 auipc a3,0xa - dc: 7c068693 addi a3,a3,1984 # a898 <buf> + dc: 7c868693 addi a3,a3,1992 # a8a0 <buf> if(uninit[i] != '\0'){ e0: 0007c703 lbu a4,0(a5) e4: e709 bnez a4,ee <bsstest+0x1e> @@ -158,9 +158,9 @@ bsstest(char *s) printf("%s: bss test failed\n", s); f6: 85aa mv a1,a0 f8: 00005517 auipc a0,0x5 - fc: dd050513 addi a0,a0,-560 # 4ec8 <malloc+0x144> + fc: dd850513 addi a0,a0,-552 # 4ed0 <malloc+0x142> 100: 00005097 auipc ra,0x5 - 104: bcc080e7 jalr -1076(ra) # 4ccc <printf> + 104: bd6080e7 jalr -1066(ra) # 4cd6 <printf> exit(1); 108: 4505 li a0,1 10a: 00004097 auipc ra,0x4 @@ -177,7 +177,7 @@ bsstest(char *s) fd = open("echo", 0); 11e: 4581 li a1,0 120: 00005517 auipc a0,0x5 - 124: dc050513 addi a0,a0,-576 # 4ee0 <malloc+0x15c> + 124: dc850513 addi a0,a0,-568 # 4ee8 <malloc+0x15a> 128: 00005097 auipc ra,0x5 12c: 826080e7 jalr -2010(ra) # 494e <open> if(fd < 0){ @@ -188,7 +188,7 @@ bsstest(char *s) fd = open("doesnotexist", 0); 13c: 4581 li a1,0 13e: 00005517 auipc a0,0x5 - 142: dc250513 addi a0,a0,-574 # 4f00 <malloc+0x17c> + 142: dca50513 addi a0,a0,-566 # 4f08 <malloc+0x17a> 146: 00005097 auipc ra,0x5 14a: 808080e7 jalr -2040(ra) # 494e <open> if(fd >= 0){ @@ -202,9 +202,9 @@ bsstest(char *s) printf("%s: open echo failed!\n", s); 15c: 85a6 mv a1,s1 15e: 00005517 auipc a0,0x5 - 162: d8a50513 addi a0,a0,-630 # 4ee8 <malloc+0x164> + 162: d9250513 addi a0,a0,-622 # 4ef0 <malloc+0x162> 166: 00005097 auipc ra,0x5 - 16a: b66080e7 jalr -1178(ra) # 4ccc <printf> + 16a: b70080e7 jalr -1168(ra) # 4cd6 <printf> exit(1); 16e: 4505 li a0,1 170: 00004097 auipc ra,0x4 @@ -212,9 +212,9 @@ bsstest(char *s) printf("%s: open doesnotexist succeeded!\n", s); 178: 85a6 mv a1,s1 17a: 00005517 auipc a0,0x5 - 17e: d9650513 addi a0,a0,-618 # 4f10 <malloc+0x18c> + 17e: d9e50513 addi a0,a0,-610 # 4f18 <malloc+0x18a> 182: 00005097 auipc ra,0x5 - 186: b4a080e7 jalr -1206(ra) # 4ccc <printf> + 186: b54080e7 jalr -1196(ra) # 4cd6 <printf> exit(1); 18a: 4505 li a0,1 18c: 00004097 auipc ra,0x4 @@ -232,33 +232,33 @@ bsstest(char *s) 1a2: 89aa mv s3,a0 remove("truncfile"); 1a4: 00005517 auipc a0,0x5 - 1a8: d9450513 addi a0,a0,-620 # 4f38 <malloc+0x1b4> + 1a8: d9c50513 addi a0,a0,-612 # 4f40 <malloc+0x1b2> 1ac: 00005097 auipc ra,0x5 1b0: 814080e7 jalr -2028(ra) # 49c0 <remove> int fd1 = open("truncfile", O_CREATE|O_TRUNC|O_WRONLY); 1b4: 60100593 li a1,1537 1b8: 00005517 auipc a0,0x5 - 1bc: d8050513 addi a0,a0,-640 # 4f38 <malloc+0x1b4> + 1bc: d8850513 addi a0,a0,-632 # 4f40 <malloc+0x1b2> 1c0: 00004097 auipc ra,0x4 1c4: 78e080e7 jalr 1934(ra) # 494e <open> 1c8: 84aa mv s1,a0 write(fd1, "abcd", 4); 1ca: 4611 li a2,4 1cc: 00005597 auipc a1,0x5 - 1d0: d7c58593 addi a1,a1,-644 # 4f48 <malloc+0x1c4> + 1d0: d8458593 addi a1,a1,-636 # 4f50 <malloc+0x1c2> 1d4: 00004097 auipc ra,0x4 1d8: 756080e7 jalr 1878(ra) # 492a <write> int fd2 = open("truncfile", O_TRUNC|O_WRONLY); 1dc: 40100593 li a1,1025 1e0: 00005517 auipc a0,0x5 - 1e4: d5850513 addi a0,a0,-680 # 4f38 <malloc+0x1b4> + 1e4: d6050513 addi a0,a0,-672 # 4f40 <malloc+0x1b2> 1e8: 00004097 auipc ra,0x4 1ec: 766080e7 jalr 1894(ra) # 494e <open> 1f0: 892a mv s2,a0 int n = write(fd1, "x", 1); 1f2: 4605 li a2,1 1f4: 00005597 auipc a1,0x5 - 1f8: d5c58593 addi a1,a1,-676 # 4f50 <malloc+0x1cc> + 1f8: d6458593 addi a1,a1,-668 # 4f58 <malloc+0x1ca> 1fc: 8526 mv a0,s1 1fe: 00004097 auipc ra,0x4 202: 72c080e7 jalr 1836(ra) # 492a <write> @@ -267,7 +267,7 @@ bsstest(char *s) 208: 02f51b63 bne a0,a5,23e <truncate2+0xaa> remove("truncfile"); 20c: 00005517 auipc a0,0x5 - 210: d2c50513 addi a0,a0,-724 # 4f38 <malloc+0x1b4> + 210: d3450513 addi a0,a0,-716 # 4f40 <malloc+0x1b2> 214: 00004097 auipc ra,0x4 218: 7ac080e7 jalr 1964(ra) # 49c0 <remove> close(fd1); @@ -290,9 +290,9 @@ bsstest(char *s) 23e: 862a mv a2,a0 240: 85ce mv a1,s3 242: 00005517 auipc a0,0x5 - 246: d1650513 addi a0,a0,-746 # 4f58 <malloc+0x1d4> + 246: d1e50513 addi a0,a0,-738 # 4f60 <malloc+0x1d2> 24a: 00005097 auipc ra,0x5 - 24e: a82080e7 jalr -1406(ra) # 4ccc <printf> + 24e: a8c080e7 jalr -1396(ra) # 4cd6 <printf> exit(1); 252: 4505 li a0,1 254: 00004097 auipc ra,0x4 @@ -309,7 +309,7 @@ bsstest(char *s) 268: 1800 addi s0,sp,48 name[0] = 'a'; 26a: 00007797 auipc a5,0x7 - 26e: e0e78793 addi a5,a5,-498 # 7078 <name> + 26e: e1678793 addi a5,a5,-490 # 7080 <name> 272: 06100713 li a4,97 276: 00e78023 sb a4,0(a5) name[2] = '\0'; @@ -335,7 +335,7 @@ bsstest(char *s) 2a8: ff3490e3 bne s1,s3,288 <createtest+0x2c> name[0] = 'a'; 2ac: 00007797 auipc a5,0x7 - 2b0: dcc78793 addi a5,a5,-564 # 7078 <name> + 2b0: dd478793 addi a5,a5,-556 # 7080 <name> 2b4: 06100713 li a4,97 2b8: 00e78023 sb a4,0(a5) name[2] = '\0'; @@ -380,17 +380,17 @@ bsstest(char *s) 306: 8baa mv s7,a0 remove("bigwrite"); 308: 00005517 auipc a0,0x5 - 30c: c7850513 addi a0,a0,-904 # 4f80 <malloc+0x1fc> + 30c: c8050513 addi a0,a0,-896 # 4f88 <malloc+0x1fa> 310: 00004097 auipc ra,0x4 314: 6b0080e7 jalr 1712(ra) # 49c0 <remove> for(sz = 499; sz < (MAXOPBLOCKS+2)*BSIZE; sz += 471){ 318: 1f300493 li s1,499 fd = open("bigwrite", O_CREATE | O_RDWR); 31c: 00005a97 auipc s5,0x5 - 320: c64a8a93 addi s5,s5,-924 # 4f80 <malloc+0x1fc> + 320: c6ca8a93 addi s5,s5,-916 # 4f88 <malloc+0x1fa> int cc = write(fd, buf, sz); 324: 0000aa17 auipc s4,0xa - 328: 574a0a13 addi s4,s4,1396 # a898 <buf> + 328: 57ca0a13 addi s4,s4,1404 # a8a0 <buf> for(sz = 499; sz < (MAXOPBLOCKS+2)*BSIZE; sz += 471){ 32c: 6b09 lui s6,0x2 32e: 807b0b13 addi s6,s6,-2041 # 1807 <forkfork+0x49> @@ -444,9 +444,9 @@ bsstest(char *s) printf("%s: cannot create bigwrite\n", s); 39c: 85de mv a1,s7 39e: 00005517 auipc a0,0x5 - 3a2: bf250513 addi a0,a0,-1038 # 4f90 <malloc+0x20c> + 3a2: bfa50513 addi a0,a0,-1030 # 4f98 <malloc+0x20a> 3a6: 00005097 auipc ra,0x5 - 3aa: 926080e7 jalr -1754(ra) # 4ccc <printf> + 3aa: 930080e7 jalr -1744(ra) # 4cd6 <printf> exit(1); 3ae: 4505 li a0,1 3b0: 00004097 auipc ra,0x4 @@ -458,9 +458,9 @@ bsstest(char *s) 3bc: 864e mv a2,s3 3be: 85de mv a1,s7 3c0: 00005517 auipc a0,0x5 - 3c4: bf050513 addi a0,a0,-1040 # 4fb0 <malloc+0x22c> + 3c4: bf850513 addi a0,a0,-1032 # 4fb8 <malloc+0x22a> 3c8: 00005097 auipc ra,0x5 - 3cc: 904080e7 jalr -1788(ra) # 4ccc <printf> + 3cc: 90e080e7 jalr -1778(ra) # 4cd6 <printf> exit(1); 3d0: 4505 li a0,1 3d2: 00004097 auipc ra,0x4 @@ -485,14 +485,14 @@ badwrite(char *s) remove("junk"); 3ea: 00005517 auipc a0,0x5 - 3ee: bde50513 addi a0,a0,-1058 # 4fc8 <malloc+0x244> + 3ee: be650513 addi a0,a0,-1050 # 4fd0 <malloc+0x242> 3f2: 00004097 auipc ra,0x4 3f6: 5ce080e7 jalr 1486(ra) # 49c0 <remove> 3fa: 25800913 li s2,600 for(int i = 0; i < assumed_free; i++){ int fd = open("junk", O_CREATE|O_WRONLY); 3fe: 00005997 auipc s3,0x5 - 402: bca98993 addi s3,s3,-1078 # 4fc8 <malloc+0x244> + 402: bd298993 addi s3,s3,-1070 # 4fd0 <malloc+0x242> if(fd < 0){ printf("open junk failed\n"); exit(1); @@ -529,7 +529,7 @@ badwrite(char *s) int fd = open("junk", O_CREATE|O_WRONLY); 446: 20100593 li a1,513 44a: 00005517 auipc a0,0x5 - 44e: b7e50513 addi a0,a0,-1154 # 4fc8 <malloc+0x244> + 44e: b8650513 addi a0,a0,-1146 # 4fd0 <malloc+0x242> 452: 00004097 auipc ra,0x4 456: 4fc080e7 jalr 1276(ra) # 494e <open> 45a: 84aa mv s1,a0 @@ -541,34 +541,34 @@ badwrite(char *s) if(write(fd, "x", 1) != 1){ 460: 4605 li a2,1 462: 00005597 auipc a1,0x5 - 466: aee58593 addi a1,a1,-1298 # 4f50 <malloc+0x1cc> + 466: af658593 addi a1,a1,-1290 # 4f58 <malloc+0x1ca> 46a: 00004097 auipc ra,0x4 46e: 4c0080e7 jalr 1216(ra) # 492a <write> 472: 4785 li a5,1 474: 04f50963 beq a0,a5,4c6 <badwrite+0xec> printf("write failed\n"); 478: 00005517 auipc a0,0x5 - 47c: b7050513 addi a0,a0,-1168 # 4fe8 <malloc+0x264> + 47c: b7850513 addi a0,a0,-1160 # 4ff0 <malloc+0x262> 480: 00005097 auipc ra,0x5 - 484: 84c080e7 jalr -1972(ra) # 4ccc <printf> + 484: 856080e7 jalr -1962(ra) # 4cd6 <printf> exit(1); 488: 4505 li a0,1 48a: 00004097 auipc ra,0x4 48e: 47a080e7 jalr 1146(ra) # 4904 <exit> printf("open junk failed\n"); 492: 00005517 auipc a0,0x5 - 496: b3e50513 addi a0,a0,-1218 # 4fd0 <malloc+0x24c> + 496: b4650513 addi a0,a0,-1210 # 4fd8 <malloc+0x24a> 49a: 00005097 auipc ra,0x5 - 49e: 832080e7 jalr -1998(ra) # 4ccc <printf> + 49e: 83c080e7 jalr -1988(ra) # 4cd6 <printf> exit(1); 4a2: 4505 li a0,1 4a4: 00004097 auipc ra,0x4 4a8: 460080e7 jalr 1120(ra) # 4904 <exit> printf("open junk failed\n"); 4ac: 00005517 auipc a0,0x5 - 4b0: b2450513 addi a0,a0,-1244 # 4fd0 <malloc+0x24c> + 4b0: b2c50513 addi a0,a0,-1236 # 4fd8 <malloc+0x24a> 4b4: 00005097 auipc ra,0x5 - 4b8: 818080e7 jalr -2024(ra) # 4ccc <printf> + 4b8: 822080e7 jalr -2014(ra) # 4cd6 <printf> exit(1); 4bc: 4505 li a0,1 4be: 00004097 auipc ra,0x4 @@ -580,7 +580,7 @@ badwrite(char *s) 4cc: 46c080e7 jalr 1132(ra) # 4934 <close> remove("junk"); 4d0: 00005517 auipc a0,0x5 - 4d4: af850513 addi a0,a0,-1288 # 4fc8 <malloc+0x244> + 4d4: b0050513 addi a0,a0,-1280 # 4fd0 <malloc+0x242> 4d8: 00004097 auipc ra,0x4 4dc: 4e8080e7 jalr 1256(ra) # 49c0 <remove> @@ -612,7 +612,7 @@ badwrite(char *s) 512: f8f43c23 sd a5,-104(s0) int fd = open("copyin1", O_CREATE|O_WRONLY); 516: 00005a17 auipc s4,0x5 - 51a: ae2a0a13 addi s4,s4,-1310 # 4ff8 <malloc+0x274> + 51a: aeaa0a13 addi s4,s4,-1302 # 5000 <malloc+0x272> if(pipe(fds) < 0){ 51e: fa840a93 addi s5,s0,-88 uint64 addr = addrs[ai]; @@ -685,9 +685,9 @@ badwrite(char *s) 5c4: 8082 ret printf("open(copyin1) failed\n"); 5c6: 00005517 auipc a0,0x5 - 5ca: a3a50513 addi a0,a0,-1478 # 5000 <malloc+0x27c> + 5ca: a4250513 addi a0,a0,-1470 # 5008 <malloc+0x27a> 5ce: 00004097 auipc ra,0x4 - 5d2: 6fe080e7 jalr 1790(ra) # 4ccc <printf> + 5d2: 708080e7 jalr 1800(ra) # 4cd6 <printf> exit(1); 5d6: 4505 li a0,1 5d8: 00004097 auipc ra,0x4 @@ -696,9 +696,9 @@ badwrite(char *s) 5e0: 862a mv a2,a0 5e2: 85ce mv a1,s3 5e4: 00005517 auipc a0,0x5 - 5e8: a3450513 addi a0,a0,-1484 # 5018 <malloc+0x294> + 5e8: a3c50513 addi a0,a0,-1476 # 5020 <malloc+0x292> 5ec: 00004097 auipc ra,0x4 - 5f0: 6e0080e7 jalr 1760(ra) # 4ccc <printf> + 5f0: 6ea080e7 jalr 1770(ra) # 4cd6 <printf> exit(1); 5f4: 4505 li a0,1 5f6: 00004097 auipc ra,0x4 @@ -707,18 +707,18 @@ badwrite(char *s) 5fe: 862a mv a2,a0 600: 85ce mv a1,s3 602: 00005517 auipc a0,0x5 - 606: a4650513 addi a0,a0,-1466 # 5048 <malloc+0x2c4> + 606: a4e50513 addi a0,a0,-1458 # 5050 <malloc+0x2c2> 60a: 00004097 auipc ra,0x4 - 60e: 6c2080e7 jalr 1730(ra) # 4ccc <printf> + 60e: 6cc080e7 jalr 1740(ra) # 4cd6 <printf> exit(1); 612: 4505 li a0,1 614: 00004097 auipc ra,0x4 618: 2f0080e7 jalr 752(ra) # 4904 <exit> printf("pipe() failed\n"); 61c: 00005517 auipc a0,0x5 - 620: a5c50513 addi a0,a0,-1444 # 5078 <malloc+0x2f4> + 620: a6450513 addi a0,a0,-1436 # 5080 <malloc+0x2f2> 624: 00004097 auipc ra,0x4 - 628: 6a8080e7 jalr 1704(ra) # 4ccc <printf> + 628: 6b2080e7 jalr 1714(ra) # 4cd6 <printf> exit(1); 62c: 4505 li a0,1 62e: 00004097 auipc ra,0x4 @@ -727,9 +727,9 @@ badwrite(char *s) 636: 862a mv a2,a0 638: 85ce mv a1,s3 63a: 00005517 auipc a0,0x5 - 63e: a4e50513 addi a0,a0,-1458 # 5088 <malloc+0x304> + 63e: a5650513 addi a0,a0,-1450 # 5090 <malloc+0x302> 642: 00004097 auipc ra,0x4 - 646: 68a080e7 jalr 1674(ra) # 4ccc <printf> + 646: 694080e7 jalr 1684(ra) # 4cd6 <printf> exit(1); 64a: 4505 li a0,1 64c: 00004097 auipc ra,0x4 @@ -759,12 +759,12 @@ badwrite(char *s) 67e: f8f43c23 sd a5,-104(s0) int fd = open("README", 0); 682: 00005a97 auipc s5,0x5 - 686: a36a8a93 addi s5,s5,-1482 # 50b8 <malloc+0x334> + 686: a3ea8a93 addi s5,s5,-1474 # 50c0 <malloc+0x332> if(pipe(fds) < 0){ 68a: fa840a13 addi s4,s0,-88 n = write(fds[1], "x", 1); 68e: 00005b17 auipc s6,0x5 - 692: 8c2b0b13 addi s6,s6,-1854 # 4f50 <malloc+0x1cc> + 692: 8cab0b13 addi s6,s6,-1846 # 4f58 <malloc+0x1ca> uint64 addr = addrs[ai]; 696: 00093983 ld s3,0(s2) int fd = open("README", 0); @@ -833,9 +833,9 @@ badwrite(char *s) 732: 8082 ret printf("open(README) failed\n"); 734: 00005517 auipc a0,0x5 - 738: 98c50513 addi a0,a0,-1652 # 50c0 <malloc+0x33c> + 738: 99450513 addi a0,a0,-1644 # 50c8 <malloc+0x33a> 73c: 00004097 auipc ra,0x4 - 740: 590080e7 jalr 1424(ra) # 4ccc <printf> + 740: 59a080e7 jalr 1434(ra) # 4cd6 <printf> exit(1); 744: 4505 li a0,1 746: 00004097 auipc ra,0x4 @@ -844,27 +844,27 @@ badwrite(char *s) 74e: 862a mv a2,a0 750: 85ce mv a1,s3 752: 00005517 auipc a0,0x5 - 756: 98650513 addi a0,a0,-1658 # 50d8 <malloc+0x354> + 756: 98e50513 addi a0,a0,-1650 # 50e0 <malloc+0x352> 75a: 00004097 auipc ra,0x4 - 75e: 572080e7 jalr 1394(ra) # 4ccc <printf> + 75e: 57c080e7 jalr 1404(ra) # 4cd6 <printf> exit(1); 762: 4505 li a0,1 764: 00004097 auipc ra,0x4 768: 1a0080e7 jalr 416(ra) # 4904 <exit> printf("pipe() failed\n"); 76c: 00005517 auipc a0,0x5 - 770: 90c50513 addi a0,a0,-1780 # 5078 <malloc+0x2f4> + 770: 91450513 addi a0,a0,-1772 # 5080 <malloc+0x2f2> 774: 00004097 auipc ra,0x4 - 778: 558080e7 jalr 1368(ra) # 4ccc <printf> + 778: 562080e7 jalr 1378(ra) # 4cd6 <printf> exit(1); 77c: 4505 li a0,1 77e: 00004097 auipc ra,0x4 782: 186080e7 jalr 390(ra) # 4904 <exit> printf("pipe write failed\n"); 786: 00005517 auipc a0,0x5 - 78a: 98250513 addi a0,a0,-1662 # 5108 <malloc+0x384> + 78a: 98a50513 addi a0,a0,-1654 # 5110 <malloc+0x382> 78e: 00004097 auipc ra,0x4 - 792: 53e080e7 jalr 1342(ra) # 4ccc <printf> + 792: 548080e7 jalr 1352(ra) # 4cd6 <printf> exit(1); 796: 4505 li a0,1 798: 00004097 auipc ra,0x4 @@ -873,9 +873,9 @@ badwrite(char *s) 7a0: 862a mv a2,a0 7a2: 85ce mv a1,s3 7a4: 00005517 auipc a0,0x5 - 7a8: 97c50513 addi a0,a0,-1668 # 5120 <malloc+0x39c> + 7a8: 98450513 addi a0,a0,-1660 # 5128 <malloc+0x39a> 7ac: 00004097 auipc ra,0x4 - 7b0: 520080e7 jalr 1312(ra) # 4ccc <printf> + 7b0: 52a080e7 jalr 1322(ra) # 4cd6 <printf> exit(1); 7b4: 4505 li a0,1 7b6: 00004097 auipc ra,0x4 @@ -895,20 +895,20 @@ badwrite(char *s) 7d0: 8aaa mv s5,a0 remove("truncfile"); 7d2: 00004517 auipc a0,0x4 - 7d6: 76650513 addi a0,a0,1894 # 4f38 <malloc+0x1b4> + 7d6: 76e50513 addi a0,a0,1902 # 4f40 <malloc+0x1b2> 7da: 00004097 auipc ra,0x4 7de: 1e6080e7 jalr 486(ra) # 49c0 <remove> int fd1 = open("truncfile", O_CREATE|O_WRONLY|O_TRUNC); 7e2: 60100593 li a1,1537 7e6: 00004517 auipc a0,0x4 - 7ea: 75250513 addi a0,a0,1874 # 4f38 <malloc+0x1b4> + 7ea: 75a50513 addi a0,a0,1882 # 4f40 <malloc+0x1b2> 7ee: 00004097 auipc ra,0x4 7f2: 160080e7 jalr 352(ra) # 494e <open> 7f6: 84aa mv s1,a0 write(fd1, "abcd", 4); 7f8: 4611 li a2,4 7fa: 00004597 auipc a1,0x4 - 7fe: 74e58593 addi a1,a1,1870 # 4f48 <malloc+0x1c4> + 7fe: 75658593 addi a1,a1,1878 # 4f50 <malloc+0x1c2> 802: 00004097 auipc ra,0x4 806: 128080e7 jalr 296(ra) # 492a <write> close(fd1); @@ -918,7 +918,7 @@ badwrite(char *s) int fd2 = open("truncfile", O_RDONLY); 814: 4581 li a1,0 816: 00004517 auipc a0,0x4 - 81a: 72250513 addi a0,a0,1826 # 4f38 <malloc+0x1b4> + 81a: 72a50513 addi a0,a0,1834 # 4f40 <malloc+0x1b2> 81e: 00004097 auipc ra,0x4 822: 130080e7 jalr 304(ra) # 494e <open> 826: 84aa mv s1,a0 @@ -933,14 +933,14 @@ badwrite(char *s) fd1 = open("truncfile", O_WRONLY|O_TRUNC); 83e: 40100593 li a1,1025 842: 00004517 auipc a0,0x4 - 846: 6f650513 addi a0,a0,1782 # 4f38 <malloc+0x1b4> + 846: 6fe50513 addi a0,a0,1790 # 4f40 <malloc+0x1b2> 84a: 00004097 auipc ra,0x4 84e: 104080e7 jalr 260(ra) # 494e <open> 852: 89aa mv s3,a0 int fd3 = open("truncfile", O_RDONLY); 854: 4581 li a1,0 856: 00004517 auipc a0,0x4 - 85a: 6e250513 addi a0,a0,1762 # 4f38 <malloc+0x1b4> + 85a: 6ea50513 addi a0,a0,1770 # 4f40 <malloc+0x1b2> 85e: 00004097 auipc ra,0x4 862: 0f0080e7 jalr 240(ra) # 494e <open> 866: 892a mv s2,a0 @@ -964,7 +964,7 @@ badwrite(char *s) write(fd1, "abcdef", 6); 892: 4619 li a2,6 894: 00005597 auipc a1,0x5 - 898: 91c58593 addi a1,a1,-1764 # 51b0 <malloc+0x42c> + 898: 92458593 addi a1,a1,-1756 # 51b8 <malloc+0x42a> 89c: 854e mv a0,s3 89e: 00004097 auipc ra,0x4 8a2: 08c080e7 jalr 140(ra) # 492a <write> @@ -988,7 +988,7 @@ badwrite(char *s) 8d2: 0ef51063 bne a0,a5,9b2 <truncate1+0x1f4> remove("truncfile"); 8d6: 00004517 auipc a0,0x4 - 8da: 66250513 addi a0,a0,1634 # 4f38 <malloc+0x1b4> + 8da: 66a50513 addi a0,a0,1642 # 4f40 <malloc+0x1b2> 8de: 00004097 auipc ra,0x4 8e2: 0e2080e7 jalr 226(ra) # 49c0 <remove> close(fd1); @@ -1017,9 +1017,9 @@ badwrite(char *s) 916: 862a mv a2,a0 918: 85d6 mv a1,s5 91a: 00005517 auipc a0,0x5 - 91e: 83650513 addi a0,a0,-1994 # 5150 <malloc+0x3cc> + 91e: 83e50513 addi a0,a0,-1986 # 5158 <malloc+0x3ca> 922: 00004097 auipc ra,0x4 - 926: 3aa080e7 jalr 938(ra) # 4ccc <printf> + 926: 3b4080e7 jalr 948(ra) # 4cd6 <printf> exit(1); 92a: 4505 li a0,1 92c: 00004097 auipc ra,0x4 @@ -1027,16 +1027,16 @@ badwrite(char *s) printf("aaa fd3=%d\n", fd3); 934: 85ca mv a1,s2 936: 00005517 auipc a0,0x5 - 93a: 83a50513 addi a0,a0,-1990 # 5170 <malloc+0x3ec> + 93a: 84250513 addi a0,a0,-1982 # 5178 <malloc+0x3ea> 93e: 00004097 auipc ra,0x4 - 942: 38e080e7 jalr 910(ra) # 4ccc <printf> + 942: 398080e7 jalr 920(ra) # 4cd6 <printf> printf("%s: read %d bytes, wanted 0\n", s, n); 946: 8652 mv a2,s4 948: 85d6 mv a1,s5 94a: 00005517 auipc a0,0x5 - 94e: 83650513 addi a0,a0,-1994 # 5180 <malloc+0x3fc> + 94e: 83e50513 addi a0,a0,-1986 # 5188 <malloc+0x3fa> 952: 00004097 auipc ra,0x4 - 956: 37a080e7 jalr 890(ra) # 4ccc <printf> + 956: 384080e7 jalr 900(ra) # 4cd6 <printf> exit(1); 95a: 4505 li a0,1 95c: 00004097 auipc ra,0x4 @@ -1044,16 +1044,16 @@ badwrite(char *s) printf("bbb fd2=%d\n", fd2); 964: 85a6 mv a1,s1 966: 00005517 auipc a0,0x5 - 96a: 83a50513 addi a0,a0,-1990 # 51a0 <malloc+0x41c> + 96a: 84250513 addi a0,a0,-1982 # 51a8 <malloc+0x41a> 96e: 00004097 auipc ra,0x4 - 972: 35e080e7 jalr 862(ra) # 4ccc <printf> + 972: 368080e7 jalr 872(ra) # 4cd6 <printf> printf("%s: read %d bytes, wanted 0\n", s, n); 976: 8652 mv a2,s4 978: 85d6 mv a1,s5 97a: 00005517 auipc a0,0x5 - 97e: 80650513 addi a0,a0,-2042 # 5180 <malloc+0x3fc> + 97e: 80e50513 addi a0,a0,-2034 # 5188 <malloc+0x3fa> 982: 00004097 auipc ra,0x4 - 986: 34a080e7 jalr 842(ra) # 4ccc <printf> + 986: 354080e7 jalr 852(ra) # 4cd6 <printf> exit(1); 98a: 4505 li a0,1 98c: 00004097 auipc ra,0x4 @@ -1062,9 +1062,9 @@ badwrite(char *s) 994: 862a mv a2,a0 996: 85d6 mv a1,s5 998: 00005517 auipc a0,0x5 - 99c: 82050513 addi a0,a0,-2016 # 51b8 <malloc+0x434> + 99c: 82850513 addi a0,a0,-2008 # 51c0 <malloc+0x432> 9a0: 00004097 auipc ra,0x4 - 9a4: 32c080e7 jalr 812(ra) # 4ccc <printf> + 9a4: 336080e7 jalr 822(ra) # 4cd6 <printf> exit(1); 9a8: 4505 li a0,1 9aa: 00004097 auipc ra,0x4 @@ -1073,9 +1073,9 @@ badwrite(char *s) 9b2: 862a mv a2,a0 9b4: 85d6 mv a1,s5 9b6: 00005517 auipc a0,0x5 - 9ba: 82250513 addi a0,a0,-2014 # 51d8 <malloc+0x454> + 9ba: 82a50513 addi a0,a0,-2006 # 51e0 <malloc+0x452> 9be: 00004097 auipc ra,0x4 - 9c2: 30e080e7 jalr 782(ra) # 4ccc <printf> + 9c2: 318080e7 jalr 792(ra) # 4cd6 <printf> exit(1); 9c6: 4505 li a0,1 9c8: 00004097 auipc ra,0x4 @@ -1097,7 +1097,7 @@ badwrite(char *s) fd = open("small", O_CREATE|O_RDWR); 9e6: 20200593 li a1,514 9ea: 00005517 auipc a0,0x5 - 9ee: 80e50513 addi a0,a0,-2034 # 51f8 <malloc+0x474> + 9ee: 81650513 addi a0,a0,-2026 # 5200 <malloc+0x472> 9f2: 00004097 auipc ra,0x4 9f6: f5c080e7 jalr -164(ra) # 494e <open> if(fd < 0){ @@ -1106,10 +1106,10 @@ badwrite(char *s) a00: 4481 li s1,0 if(write(fd, "aaaaaaaaaa", SZ) != SZ){ a02: 00005997 auipc s3,0x5 - a06: 81e98993 addi s3,s3,-2018 # 5220 <malloc+0x49c> + a06: 82698993 addi s3,s3,-2010 # 5228 <malloc+0x49a> if(write(fd, "bbbbbbbbbb", SZ) != SZ){ a0a: 00005a97 auipc s5,0x5 - a0e: 84ea8a93 addi s5,s5,-1970 # 5258 <malloc+0x4d4> + a0e: 856a8a93 addi s5,s5,-1962 # 5260 <malloc+0x4d2> for(i = 0; i < N; i++){ a12: 06400a13 li s4,100 if(write(fd, "aaaaaaaaaa", SZ) != SZ){ @@ -1138,7 +1138,7 @@ badwrite(char *s) fd = open("small", O_RDONLY); a4e: 4581 li a1,0 a50: 00004517 auipc a0,0x4 - a54: 7a850513 addi a0,a0,1960 # 51f8 <malloc+0x474> + a54: 7b050513 addi a0,a0,1968 # 5200 <malloc+0x472> a58: 00004097 auipc ra,0x4 a5c: ef6080e7 jalr -266(ra) # 494e <open> a60: 84aa mv s1,a0 @@ -1147,7 +1147,7 @@ badwrite(char *s) i = read(fd, buf, N*SZ*2); a66: 7d000613 li a2,2000 a6a: 0000a597 auipc a1,0xa - a6e: e2e58593 addi a1,a1,-466 # a898 <buf> + a6e: e3658593 addi a1,a1,-458 # a8a0 <buf> a72: 00004097 auipc ra,0x4 a76: eae080e7 jalr -338(ra) # 4920 <read> if(i != N*SZ*2){ @@ -1159,7 +1159,7 @@ badwrite(char *s) a88: eb0080e7 jalr -336(ra) # 4934 <close> if(remove("small") < 0){ a8c: 00004517 auipc a0,0x4 - a90: 76c50513 addi a0,a0,1900 # 51f8 <malloc+0x474> + a90: 77450513 addi a0,a0,1908 # 5200 <malloc+0x472> a94: 00004097 auipc ra,0x4 a98: f2c080e7 jalr -212(ra) # 49c0 <remove> a9c: 0a054263 bltz a0,b40 <writetest+0x170> @@ -1177,9 +1177,9 @@ badwrite(char *s) printf("%s: error: creat small failed!\n", s); ab4: 85da mv a1,s6 ab6: 00004517 auipc a0,0x4 - aba: 74a50513 addi a0,a0,1866 # 5200 <malloc+0x47c> + aba: 75250513 addi a0,a0,1874 # 5208 <malloc+0x47a> abe: 00004097 auipc ra,0x4 - ac2: 20e080e7 jalr 526(ra) # 4ccc <printf> + ac2: 218080e7 jalr 536(ra) # 4cd6 <printf> exit(1); ac6: 4505 li a0,1 ac8: 00004097 auipc ra,0x4 @@ -1187,9 +1187,9 @@ badwrite(char *s) printf("%s: error: write aa %d new file failed\n", i); ad0: 85a6 mv a1,s1 ad2: 00004517 auipc a0,0x4 - ad6: 75e50513 addi a0,a0,1886 # 5230 <malloc+0x4ac> + ad6: 76650513 addi a0,a0,1894 # 5238 <malloc+0x4aa> ada: 00004097 auipc ra,0x4 - ade: 1f2080e7 jalr 498(ra) # 4ccc <printf> + ade: 1fc080e7 jalr 508(ra) # 4cd6 <printf> exit(1); ae2: 4505 li a0,1 ae4: 00004097 auipc ra,0x4 @@ -1197,9 +1197,9 @@ badwrite(char *s) printf("%s: error: write bb %d new file failed\n", i); aec: 85a6 mv a1,s1 aee: 00004517 auipc a0,0x4 - af2: 77a50513 addi a0,a0,1914 # 5268 <malloc+0x4e4> + af2: 78250513 addi a0,a0,1922 # 5270 <malloc+0x4e2> af6: 00004097 auipc ra,0x4 - afa: 1d6080e7 jalr 470(ra) # 4ccc <printf> + afa: 1e0080e7 jalr 480(ra) # 4cd6 <printf> exit(1); afe: 4505 li a0,1 b00: 00004097 auipc ra,0x4 @@ -1207,9 +1207,9 @@ badwrite(char *s) printf("%s: error: open small failed!\n", s); b08: 85da mv a1,s6 b0a: 00004517 auipc a0,0x4 - b0e: 78650513 addi a0,a0,1926 # 5290 <malloc+0x50c> + b0e: 78e50513 addi a0,a0,1934 # 5298 <malloc+0x50a> b12: 00004097 auipc ra,0x4 - b16: 1ba080e7 jalr 442(ra) # 4ccc <printf> + b16: 1c4080e7 jalr 452(ra) # 4cd6 <printf> exit(1); b1a: 4505 li a0,1 b1c: 00004097 auipc ra,0x4 @@ -1217,9 +1217,9 @@ badwrite(char *s) printf("%s: read failed\n", s); b24: 85da mv a1,s6 b26: 00004517 auipc a0,0x4 - b2a: 78a50513 addi a0,a0,1930 # 52b0 <malloc+0x52c> + b2a: 79250513 addi a0,a0,1938 # 52b8 <malloc+0x52a> b2e: 00004097 auipc ra,0x4 - b32: 19e080e7 jalr 414(ra) # 4ccc <printf> + b32: 1a8080e7 jalr 424(ra) # 4cd6 <printf> exit(1); b36: 4505 li a0,1 b38: 00004097 auipc ra,0x4 @@ -1227,9 +1227,9 @@ badwrite(char *s) printf("%s: remove small failed\n", s); b40: 85da mv a1,s6 b42: 00004517 auipc a0,0x4 - b46: 78650513 addi a0,a0,1926 # 52c8 <malloc+0x544> + b46: 78e50513 addi a0,a0,1934 # 52d0 <malloc+0x542> b4a: 00004097 auipc ra,0x4 - b4e: 182080e7 jalr 386(ra) # 4ccc <printf> + b4e: 18c080e7 jalr 396(ra) # 4cd6 <printf> exit(1); b52: 4505 li a0,1 b54: 00004097 auipc ra,0x4 @@ -1249,7 +1249,7 @@ badwrite(char *s) fd = open("big", O_CREATE|O_RDWR); b6e: 20200593 li a1,514 b72: 00004517 auipc a0,0x4 - b76: 77650513 addi a0,a0,1910 # 52e8 <malloc+0x564> + b76: 77e50513 addi a0,a0,1918 # 52f0 <malloc+0x562> b7a: 00004097 auipc ra,0x4 b7e: dd4080e7 jalr -556(ra) # 494e <open> b82: 89aa mv s3,a0 @@ -1257,7 +1257,7 @@ badwrite(char *s) b84: 4481 li s1,0 ((int*)buf)[0] = i; b86: 0000a917 auipc s2,0xa - b8a: d1290913 addi s2,s2,-750 # a898 <buf> + b8a: d1a90913 addi s2,s2,-742 # a8a0 <buf> if(fd < 0){ b8e: 06054e63 bltz a0,c0a <writebig+0xae> ((int*)buf)[0] = i; @@ -1281,7 +1281,7 @@ badwrite(char *s) fd = open("big", O_RDONLY); bc2: 4581 li a1,0 bc4: 00004517 auipc a0,0x4 - bc8: 72450513 addi a0,a0,1828 # 52e8 <malloc+0x564> + bc8: 72c50513 addi a0,a0,1836 # 52f0 <malloc+0x562> bcc: 00004097 auipc ra,0x4 bd0: d82080e7 jalr -638(ra) # 494e <open> bd4: 89aa mv s3,a0 @@ -1289,7 +1289,7 @@ badwrite(char *s) bd6: 4481 li s1,0 i = read(fd, buf, BSIZE); bd8: 0000a917 auipc s2,0xa - bdc: cc090913 addi s2,s2,-832 # a898 <buf> + bdc: cc890913 addi s2,s2,-824 # a8a0 <buf> if(fd < 0){ be0: 06054163 bltz a0,c42 <writebig+0xe6> i = read(fd, buf, BSIZE); @@ -1313,9 +1313,9 @@ badwrite(char *s) printf("%s: error: creat big failed!\n", s); c0a: 85d2 mv a1,s4 c0c: 00004517 auipc a0,0x4 - c10: 6e450513 addi a0,a0,1764 # 52f0 <malloc+0x56c> + c10: 6ec50513 addi a0,a0,1772 # 52f8 <malloc+0x56a> c14: 00004097 auipc ra,0x4 - c18: 0b8080e7 jalr 184(ra) # 4ccc <printf> + c18: 0c2080e7 jalr 194(ra) # 4cd6 <printf> exit(1); c1c: 4505 li a0,1 c1e: 00004097 auipc ra,0x4 @@ -1323,9 +1323,9 @@ badwrite(char *s) printf("%s: error: write big file failed\n", i); c26: 85a6 mv a1,s1 c28: 00004517 auipc a0,0x4 - c2c: 6e850513 addi a0,a0,1768 # 5310 <malloc+0x58c> + c2c: 6f050513 addi a0,a0,1776 # 5318 <malloc+0x58a> c30: 00004097 auipc ra,0x4 - c34: 09c080e7 jalr 156(ra) # 4ccc <printf> + c34: 0a6080e7 jalr 166(ra) # 4cd6 <printf> exit(1); c38: 4505 li a0,1 c3a: 00004097 auipc ra,0x4 @@ -1333,9 +1333,9 @@ badwrite(char *s) printf("%s: error: open big failed!\n", s); c42: 85d2 mv a1,s4 c44: 00004517 auipc a0,0x4 - c48: 6f450513 addi a0,a0,1780 # 5338 <malloc+0x5b4> + c48: 6fc50513 addi a0,a0,1788 # 5340 <malloc+0x5b2> c4c: 00004097 auipc ra,0x4 - c50: 080080e7 jalr 128(ra) # 4ccc <printf> + c50: 08a080e7 jalr 138(ra) # 4cd6 <printf> exit(1); c54: 4505 li a0,1 c56: 00004097 auipc ra,0x4 @@ -1349,7 +1349,7 @@ badwrite(char *s) c6c: ccc080e7 jalr -820(ra) # 4934 <close> if(remove("big") < 0){ c70: 00004517 auipc a0,0x4 - c74: 67850513 addi a0,a0,1656 # 52e8 <malloc+0x564> + c74: 68050513 addi a0,a0,1664 # 52f0 <malloc+0x562> c78: 00004097 auipc ra,0x4 c7c: d48080e7 jalr -696(ra) # 49c0 <remove> c80: 06054563 bltz a0,cea <writebig+0x18e> @@ -1365,9 +1365,9 @@ badwrite(char *s) printf("%s: read only %d blocks from big", n); c94: 1ff00593 li a1,511 c98: 00004517 auipc a0,0x4 - c9c: 6c050513 addi a0,a0,1728 # 5358 <malloc+0x5d4> + c9c: 6c850513 addi a0,a0,1736 # 5360 <malloc+0x5d2> ca0: 00004097 auipc ra,0x4 - ca4: 02c080e7 jalr 44(ra) # 4ccc <printf> + ca4: 036080e7 jalr 54(ra) # 4cd6 <printf> exit(1); ca8: 4505 li a0,1 caa: 00004097 auipc ra,0x4 @@ -1375,9 +1375,9 @@ badwrite(char *s) printf("%s: read failed %d\n", i); cb2: 85aa mv a1,a0 cb4: 00004517 auipc a0,0x4 - cb8: 6cc50513 addi a0,a0,1740 # 5380 <malloc+0x5fc> + cb8: 6d450513 addi a0,a0,1748 # 5388 <malloc+0x5fa> cbc: 00004097 auipc ra,0x4 - cc0: 010080e7 jalr 16(ra) # 4ccc <printf> + cc0: 01a080e7 jalr 26(ra) # 4cd6 <printf> exit(1); cc4: 4505 li a0,1 cc6: 00004097 auipc ra,0x4 @@ -1385,9 +1385,9 @@ badwrite(char *s) printf("%s: read content of block %d is %d\n", cce: 85a6 mv a1,s1 cd0: 00004517 auipc a0,0x4 - cd4: 6c850513 addi a0,a0,1736 # 5398 <malloc+0x614> + cd4: 6d050513 addi a0,a0,1744 # 53a0 <malloc+0x612> cd8: 00004097 auipc ra,0x4 - cdc: ff4080e7 jalr -12(ra) # 4ccc <printf> + cdc: ffe080e7 jalr -2(ra) # 4cd6 <printf> exit(1); ce0: 4505 li a0,1 ce2: 00004097 auipc ra,0x4 @@ -1395,9 +1395,9 @@ badwrite(char *s) printf("%s: remove big failed\n", s); cea: 85d2 mv a1,s4 cec: 00004517 auipc a0,0x4 - cf0: 6d450513 addi a0,a0,1748 # 53c0 <malloc+0x63c> + cf0: 6dc50513 addi a0,a0,1756 # 53c8 <malloc+0x63a> cf4: 00004097 auipc ra,0x4 - cf8: fd8080e7 jalr -40(ra) # 4ccc <printf> + cf8: fe2080e7 jalr -30(ra) # 4cd6 <printf> exit(1); cfc: 4505 li a0,1 cfe: 00004097 auipc ra,0x4 @@ -1416,7 +1416,7 @@ badwrite(char *s) fd = open("removeread", O_CREATE | O_RDWR); d16: 20200593 li a1,514 d1a: 00004517 auipc a0,0x4 - d1e: 6be50513 addi a0,a0,1726 # 53d8 <malloc+0x654> + d1e: 6c650513 addi a0,a0,1734 # 53e0 <malloc+0x652> d22: 00004097 auipc ra,0x4 d26: c2c080e7 jalr -980(ra) # 494e <open> if(fd < 0){ @@ -1425,7 +1425,7 @@ badwrite(char *s) write(fd, "hello", SZ); d30: 4615 li a2,5 d32: 00004597 auipc a1,0x4 - d36: 6d658593 addi a1,a1,1750 # 5408 <malloc+0x684> + d36: 6de58593 addi a1,a1,1758 # 5410 <malloc+0x682> d3a: 00004097 auipc ra,0x4 d3e: bf0080e7 jalr -1040(ra) # 492a <write> close(fd); @@ -1435,7 +1435,7 @@ badwrite(char *s) fd = open("removeread", O_RDWR); d4c: 4589 li a1,2 d4e: 00004517 auipc a0,0x4 - d52: 68a50513 addi a0,a0,1674 # 53d8 <malloc+0x654> + d52: 69250513 addi a0,a0,1682 # 53e0 <malloc+0x652> d56: 00004097 auipc ra,0x4 d5a: bf8080e7 jalr -1032(ra) # 494e <open> d5e: 84aa mv s1,a0 @@ -1443,21 +1443,21 @@ badwrite(char *s) d60: 0c054a63 bltz a0,e34 <removeread+0x12e> if(remove("removeread") != 0){ d64: 00004517 auipc a0,0x4 - d68: 67450513 addi a0,a0,1652 # 53d8 <malloc+0x654> + d68: 67c50513 addi a0,a0,1660 # 53e0 <malloc+0x652> d6c: 00004097 auipc ra,0x4 d70: c54080e7 jalr -940(ra) # 49c0 <remove> d74: ed71 bnez a0,e50 <removeread+0x14a> fd1 = open("removeread", O_CREATE | O_RDWR); d76: 20200593 li a1,514 d7a: 00004517 auipc a0,0x4 - d7e: 65e50513 addi a0,a0,1630 # 53d8 <malloc+0x654> + d7e: 66650513 addi a0,a0,1638 # 53e0 <malloc+0x652> d82: 00004097 auipc ra,0x4 d86: bcc080e7 jalr -1076(ra) # 494e <open> d8a: 892a mv s2,a0 write(fd1, "yyy", 3); d8c: 460d li a2,3 d8e: 00004597 auipc a1,0x4 - d92: 6c258593 addi a1,a1,1730 # 5450 <malloc+0x6cc> + d92: 6ca58593 addi a1,a1,1738 # 5458 <malloc+0x6ca> d96: 00004097 auipc ra,0x4 d9a: b94080e7 jalr -1132(ra) # 492a <write> close(fd1); @@ -1468,7 +1468,7 @@ badwrite(char *s) da8: 6609 lui a2,0x2 daa: 80060613 addi a2,a2,-2048 # 1800 <forkfork+0x42> dae: 0000a597 auipc a1,0xa - db2: aea58593 addi a1,a1,-1302 # a898 <buf> + db2: af258593 addi a1,a1,-1294 # a8a0 <buf> db6: 8526 mv a0,s1 db8: 00004097 auipc ra,0x4 dbc: b68080e7 jalr -1176(ra) # 4920 <read> @@ -1476,13 +1476,13 @@ badwrite(char *s) dc2: 0af51563 bne a0,a5,e6c <removeread+0x166> if(buf[0] != 'h'){ dc6: 0000a717 auipc a4,0xa - dca: ad274703 lbu a4,-1326(a4) # a898 <buf> + dca: ada74703 lbu a4,-1318(a4) # a8a0 <buf> dce: 06800793 li a5,104 dd2: 0af71b63 bne a4,a5,e88 <removeread+0x182> if(write(fd, buf, 10) != 10){ dd6: 4629 li a2,10 dd8: 0000a597 auipc a1,0xa - ddc: ac058593 addi a1,a1,-1344 # a898 <buf> + ddc: ac858593 addi a1,a1,-1336 # a8a0 <buf> de0: 8526 mv a0,s1 de2: 00004097 auipc ra,0x4 de6: b48080e7 jalr -1208(ra) # 492a <write> @@ -1494,7 +1494,7 @@ badwrite(char *s) df6: b42080e7 jalr -1214(ra) # 4934 <close> remove("removeread"); dfa: 00004517 auipc a0,0x4 - dfe: 5de50513 addi a0,a0,1502 # 53d8 <malloc+0x654> + dfe: 5e650513 addi a0,a0,1510 # 53e0 <malloc+0x652> e02: 00004097 auipc ra,0x4 e06: bbe080e7 jalr -1090(ra) # 49c0 <remove> } @@ -1508,9 +1508,9 @@ badwrite(char *s) printf("%s: create removeread failed\n", s); e18: 85ce mv a1,s3 e1a: 00004517 auipc a0,0x4 - e1e: 5ce50513 addi a0,a0,1486 # 53e8 <malloc+0x664> + e1e: 5d650513 addi a0,a0,1494 # 53f0 <malloc+0x662> e22: 00004097 auipc ra,0x4 - e26: eaa080e7 jalr -342(ra) # 4ccc <printf> + e26: eb4080e7 jalr -332(ra) # 4cd6 <printf> exit(1); e2a: 4505 li a0,1 e2c: 00004097 auipc ra,0x4 @@ -1518,9 +1518,9 @@ badwrite(char *s) printf("%s: open removeread failed\n", s); e34: 85ce mv a1,s3 e36: 00004517 auipc a0,0x4 - e3a: 5da50513 addi a0,a0,1498 # 5410 <malloc+0x68c> + e3a: 5e250513 addi a0,a0,1506 # 5418 <malloc+0x68a> e3e: 00004097 auipc ra,0x4 - e42: e8e080e7 jalr -370(ra) # 4ccc <printf> + e42: e98080e7 jalr -360(ra) # 4cd6 <printf> exit(1); e46: 4505 li a0,1 e48: 00004097 auipc ra,0x4 @@ -1528,9 +1528,9 @@ badwrite(char *s) printf("%s: remove removeread failed\n", s); e50: 85ce mv a1,s3 e52: 00004517 auipc a0,0x4 - e56: 5de50513 addi a0,a0,1502 # 5430 <malloc+0x6ac> + e56: 5e650513 addi a0,a0,1510 # 5438 <malloc+0x6aa> e5a: 00004097 auipc ra,0x4 - e5e: e72080e7 jalr -398(ra) # 4ccc <printf> + e5e: e7c080e7 jalr -388(ra) # 4cd6 <printf> exit(1); e62: 4505 li a0,1 e64: 00004097 auipc ra,0x4 @@ -1538,9 +1538,9 @@ badwrite(char *s) printf("%s: removeread read failed", s); e6c: 85ce mv a1,s3 e6e: 00004517 auipc a0,0x4 - e72: 5ea50513 addi a0,a0,1514 # 5458 <malloc+0x6d4> + e72: 5f250513 addi a0,a0,1522 # 5460 <malloc+0x6d2> e76: 00004097 auipc ra,0x4 - e7a: e56080e7 jalr -426(ra) # 4ccc <printf> + e7a: e60080e7 jalr -416(ra) # 4cd6 <printf> exit(1); e7e: 4505 li a0,1 e80: 00004097 auipc ra,0x4 @@ -1548,9 +1548,9 @@ badwrite(char *s) printf("%s: removeread wrong data\n", s); e88: 85ce mv a1,s3 e8a: 00004517 auipc a0,0x4 - e8e: 5ee50513 addi a0,a0,1518 # 5478 <malloc+0x6f4> + e8e: 5f650513 addi a0,a0,1526 # 5480 <malloc+0x6f2> e92: 00004097 auipc ra,0x4 - e96: e3a080e7 jalr -454(ra) # 4ccc <printf> + e96: e44080e7 jalr -444(ra) # 4cd6 <printf> exit(1); e9a: 4505 li a0,1 e9c: 00004097 auipc ra,0x4 @@ -1558,9 +1558,9 @@ badwrite(char *s) printf("%s: removeread write failed\n", s); ea4: 85ce mv a1,s3 ea6: 00004517 auipc a0,0x4 - eaa: 5f250513 addi a0,a0,1522 # 5498 <malloc+0x714> + eaa: 5fa50513 addi a0,a0,1530 # 54a0 <malloc+0x712> eae: 00004097 auipc ra,0x4 - eb2: e1e080e7 jalr -482(ra) # 4ccc <printf> + eb2: e28080e7 jalr -472(ra) # 4cd6 <printf> exit(1); eb6: 4505 li a0,1 eb8: 00004097 auipc ra,0x4 @@ -1577,7 +1577,7 @@ badwrite(char *s) eca: fc043c23 sd zero,-40(s0) exec((char*)0xeaeb0b5b00002f5e, argv); ece: 00006497 auipc s1,0x6 - ed2: dc24b483 ld s1,-574(s1) # 6c90 <malloc+0x1f0c> + ed2: dca4b483 ld s1,-566(s1) # 6c98 <malloc+0x1f0a> ed6: fd840593 addi a1,s0,-40 eda: 8526 mv a0,s1 edc: 00004097 auipc ra,0x4 @@ -1607,7 +1607,7 @@ badarg(char *s) f04: e852 sd s4,16(sp) f06: 0080 addi s0,sp,64 f08: 64b1 lui s1,0xc - f0a: 35048493 addi s1,s1,848 # c350 <__BSS_END__+0x2a0> + f0a: 35048493 addi s1,s1,848 # c350 <__BSS_END__+0x298> for(int i = 0; i < 50000; i++){ char *argv[2]; argv[0] = (char*)0xffffffff; @@ -1617,7 +1617,7 @@ badarg(char *s) exec("echo", argv); f14: fc040a13 addi s4,s0,-64 f18: 00004997 auipc s3,0x4 - f1c: fc898993 addi s3,s3,-56 # 4ee0 <malloc+0x15c> + f1c: fd098993 addi s3,s3,-48 # 4ee8 <malloc+0x15a> argv[0] = (char*)0xffffffff; f20: fd243023 sd s2,-64(s0) argv[1] = 0; @@ -1671,7 +1671,7 @@ badarg(char *s) f88: 0cf51b63 bne a0,a5,105e <copyinstr2+0x11c> char *args[] = { "xx", 0 }; f8c: 00005797 auipc a5,0x5 - f90: 14478793 addi a5,a5,324 # 60d0 <malloc+0x134c> + f90: 14c78793 addi a5,a5,332 # 60d8 <malloc+0x134a> f94: ecf43c23 sd a5,-296(s0) f98: ee043023 sd zero,-288(s0) ret = exec(b, args); @@ -1690,9 +1690,9 @@ badarg(char *s) if(pid == 0){ fbe: 10051363 bnez a0,10c4 <copyinstr2+0x182> fc2: 00006797 auipc a5,0x6 - fc6: 1be78793 addi a5,a5,446 # 7180 <big.0> + fc6: 1c678793 addi a5,a5,454 # 7188 <big.0> fca: 00007697 auipc a3,0x7 - fce: 1b668693 addi a3,a3,438 # 8180 <__global_pointer$+0x908> + fce: 1be68693 addi a3,a3,446 # 8188 <__global_pointer$+0x908> big[i] = 'x'; fd2: 07800713 li a4,120 fd6: 00e78023 sb a4,0(a5) @@ -1701,10 +1701,10 @@ badarg(char *s) fdc: fed79de3 bne a5,a3,fd6 <copyinstr2+0x94> big[PGSIZE] = '\0'; fe0: 00007797 auipc a5,0x7 - fe4: 1a078023 sb zero,416(a5) # 8180 <__global_pointer$+0x908> + fe4: 1a078423 sb zero,424(a5) # 8188 <__global_pointer$+0x908> char *args2[] = { big, big, big, 0 }; fe8: 00006797 auipc a5,0x6 - fec: d2878793 addi a5,a5,-728 # 6d10 <__DATA_BEGIN__> + fec: d3078793 addi a5,a5,-720 # 6d18 <__DATA_BEGIN__> ff0: 6390 ld a2,0(a5) ff2: 6794 ld a3,8(a5) ff4: 6b98 ld a4,16(a5) @@ -1716,7 +1716,7 @@ badarg(char *s) ret = exec("echo", args2); 1008: eb040593 addi a1,s0,-336 100c: 00004517 auipc a0,0x4 - 1010: ed450513 addi a0,a0,-300 # 4ee0 <malloc+0x15c> + 1010: edc50513 addi a0,a0,-292 # 4ee8 <malloc+0x15a> 1014: 00004097 auipc ra,0x4 1018: 932080e7 jalr -1742(ra) # 4946 <exec> if(ret != -1){ @@ -1725,9 +1725,9 @@ badarg(char *s) printf("exec(echo, BIG) returned %d, not -1\n", fd); 1022: 55fd li a1,-1 1024: 00004517 auipc a0,0x4 - 1028: 4f450513 addi a0,a0,1268 # 5518 <malloc+0x794> + 1028: 4fc50513 addi a0,a0,1276 # 5520 <malloc+0x792> 102c: 00004097 auipc ra,0x4 - 1030: ca0080e7 jalr -864(ra) # 4ccc <printf> + 1030: caa080e7 jalr -854(ra) # 4cd6 <printf> exit(1); 1034: 4505 li a0,1 1036: 00004097 auipc ra,0x4 @@ -1736,9 +1736,9 @@ badarg(char *s) 103e: 862a mv a2,a0 1040: ee840593 addi a1,s0,-280 1044: 00004517 auipc a0,0x4 - 1048: 47450513 addi a0,a0,1140 # 54b8 <malloc+0x734> + 1048: 47c50513 addi a0,a0,1148 # 54c0 <malloc+0x732> 104c: 00004097 auipc ra,0x4 - 1050: c80080e7 jalr -896(ra) # 4ccc <printf> + 1050: c8a080e7 jalr -886(ra) # 4cd6 <printf> exit(1); 1054: 4505 li a0,1 1056: 00004097 auipc ra,0x4 @@ -1747,9 +1747,9 @@ badarg(char *s) 105e: 862a mv a2,a0 1060: ee840593 addi a1,s0,-280 1064: 00004517 auipc a0,0x4 - 1068: 47450513 addi a0,a0,1140 # 54d8 <malloc+0x754> + 1068: 47c50513 addi a0,a0,1148 # 54e0 <malloc+0x752> 106c: 00004097 auipc ra,0x4 - 1070: c60080e7 jalr -928(ra) # 4ccc <printf> + 1070: c6a080e7 jalr -918(ra) # 4cd6 <printf> exit(1); 1074: 4505 li a0,1 1076: 00004097 auipc ra,0x4 @@ -1758,18 +1758,18 @@ badarg(char *s) 107e: 567d li a2,-1 1080: ee840593 addi a1,s0,-280 1084: 00004517 auipc a0,0x4 - 1088: 47450513 addi a0,a0,1140 # 54f8 <malloc+0x774> + 1088: 47c50513 addi a0,a0,1148 # 5500 <malloc+0x772> 108c: 00004097 auipc ra,0x4 - 1090: c40080e7 jalr -960(ra) # 4ccc <printf> + 1090: c4a080e7 jalr -950(ra) # 4cd6 <printf> exit(1); 1094: 4505 li a0,1 1096: 00004097 auipc ra,0x4 109a: 86e080e7 jalr -1938(ra) # 4904 <exit> printf("fork failed\n"); 109e: 00005517 auipc a0,0x5 - 10a2: 85250513 addi a0,a0,-1966 # 58f0 <malloc+0xb6c> + 10a2: 85a50513 addi a0,a0,-1958 # 58f8 <malloc+0xb6a> 10a6: 00004097 auipc ra,0x4 - 10aa: c26080e7 jalr -986(ra) # 4ccc <printf> + 10aa: c30080e7 jalr -976(ra) # 4cd6 <printf> exit(1); 10ae: 4505 li a0,1 10b0: 00004097 auipc ra,0x4 @@ -1795,9 +1795,9 @@ badarg(char *s) 10e6: 8082 ret printf("exec(echo, BIG) succeeded, should have failed\n"); 10e8: 00004517 auipc a0,0x4 - 10ec: 45850513 addi a0,a0,1112 # 5540 <malloc+0x7bc> + 10ec: 46050513 addi a0,a0,1120 # 5548 <malloc+0x7ba> 10f0: 00004097 auipc ra,0x4 - 10f4: bdc080e7 jalr -1060(ra) # 4ccc <printf> + 10f4: be6080e7 jalr -1050(ra) # 4cd6 <printf> exit(1); 10f8: 4505 li a0,1 10fa: 00004097 auipc ra,0x4 @@ -1819,7 +1819,7 @@ badarg(char *s) close(open("truncfile", O_CREATE|O_TRUNC|O_WRONLY)); 1118: 60100593 li a1,1537 111c: 00004517 auipc a0,0x4 - 1120: e1c50513 addi a0,a0,-484 # 4f38 <malloc+0x1b4> + 1120: e2450513 addi a0,a0,-476 # 4f40 <malloc+0x1b2> 1124: 00004097 auipc ra,0x4 1128: 82a080e7 jalr -2006(ra) # 494e <open> 112c: 00004097 auipc ra,0x4 @@ -1834,10 +1834,10 @@ badarg(char *s) 1142: 06400993 li s3,100 int fd = open("truncfile", O_WRONLY); 1146: 00004a17 auipc s4,0x4 - 114a: df2a0a13 addi s4,s4,-526 # 4f38 <malloc+0x1b4> + 114a: dfaa0a13 addi s4,s4,-518 # 4f40 <malloc+0x1b2> int n = write(fd, "1234567890", 10); 114e: 00004a97 auipc s5,0x4 - 1152: 452a8a93 addi s5,s5,1106 # 55a0 <malloc+0x81c> + 1152: 45aa8a93 addi s5,s5,1114 # 55a8 <malloc+0x81a> read(fd, buf, sizeof(buf)); 1156: f9840b13 addi s6,s0,-104 int fd = open("truncfile", O_WRONLY); @@ -1885,9 +1885,9 @@ badarg(char *s) printf("%s: fork failed\n", s); 11be: 85ca mv a1,s2 11c0: 00004517 auipc a0,0x4 - 11c4: 3b050513 addi a0,a0,944 # 5570 <malloc+0x7ec> + 11c4: 3b850513 addi a0,a0,952 # 5578 <malloc+0x7ea> 11c8: 00004097 auipc ra,0x4 - 11cc: b04080e7 jalr -1276(ra) # 4ccc <printf> + 11cc: b0e080e7 jalr -1266(ra) # 4cd6 <printf> exit(1); 11d0: 4505 li a0,1 11d2: 00003097 auipc ra,0x3 @@ -1895,9 +1895,9 @@ badarg(char *s) printf("%s: open failed\n", s); 11da: 85ca mv a1,s2 11dc: 00004517 auipc a0,0x4 - 11e0: 3ac50513 addi a0,a0,940 # 5588 <malloc+0x804> + 11e0: 3b450513 addi a0,a0,948 # 5590 <malloc+0x802> 11e4: 00004097 auipc ra,0x4 - 11e8: ae8080e7 jalr -1304(ra) # 4ccc <printf> + 11e8: af2080e7 jalr -1294(ra) # 4cd6 <printf> exit(1); 11ec: 4505 li a0,1 11ee: 00003097 auipc ra,0x3 @@ -1906,9 +1906,9 @@ badarg(char *s) 11f6: 862a mv a2,a0 11f8: 85ca mv a1,s2 11fa: 00004517 auipc a0,0x4 - 11fe: 3b650513 addi a0,a0,950 # 55b0 <malloc+0x82c> + 11fe: 3be50513 addi a0,a0,958 # 55b8 <malloc+0x82a> 1202: 00004097 auipc ra,0x4 - 1206: aca080e7 jalr -1334(ra) # 4ccc <printf> + 1206: ad4080e7 jalr -1324(ra) # 4cd6 <printf> exit(1); 120a: 4505 li a0,1 120c: 00003097 auipc ra,0x3 @@ -1916,10 +1916,10 @@ badarg(char *s) 1214: 09600993 li s3,150 int fd = open("truncfile", O_CREATE|O_WRONLY|O_TRUNC); 1218: 00004a17 auipc s4,0x4 - 121c: d20a0a13 addi s4,s4,-736 # 4f38 <malloc+0x1b4> + 121c: d28a0a13 addi s4,s4,-728 # 4f40 <malloc+0x1b2> int n = write(fd, "xxx", 3); 1220: 00004a97 auipc s5,0x4 - 1224: 3b0a8a93 addi s5,s5,944 # 55d0 <malloc+0x84c> + 1224: 3b8a8a93 addi s5,s5,952 # 55d8 <malloc+0x84a> int fd = open("truncfile", O_CREATE|O_WRONLY|O_TRUNC); 1228: 60100593 li a1,1537 122c: 8552 mv a0,s4 @@ -1949,7 +1949,7 @@ badarg(char *s) 1266: 6ac080e7 jalr 1708(ra) # 490e <wait> remove("truncfile"); 126a: 00004517 auipc a0,0x4 - 126e: cce50513 addi a0,a0,-818 # 4f38 <malloc+0x1b4> + 126e: cd650513 addi a0,a0,-810 # 4f40 <malloc+0x1b2> 1272: 00003097 auipc ra,0x3 1276: 74e080e7 jalr 1870(ra) # 49c0 <remove> exit(xstatus); @@ -1959,9 +1959,9 @@ badarg(char *s) printf("%s: open failed\n", s); 1286: 85ca mv a1,s2 1288: 00004517 auipc a0,0x4 - 128c: 30050513 addi a0,a0,768 # 5588 <malloc+0x804> + 128c: 30850513 addi a0,a0,776 # 5590 <malloc+0x802> 1290: 00004097 auipc ra,0x4 - 1294: a3c080e7 jalr -1476(ra) # 4ccc <printf> + 1294: a46080e7 jalr -1466(ra) # 4cd6 <printf> exit(1); 1298: 4505 li a0,1 129a: 00003097 auipc ra,0x3 @@ -1970,9 +1970,9 @@ badarg(char *s) 12a2: 862a mv a2,a0 12a4: 85ca mv a1,s2 12a6: 00004517 auipc a0,0x4 - 12aa: 33250513 addi a0,a0,818 # 55d8 <malloc+0x854> + 12aa: 33a50513 addi a0,a0,826 # 55e0 <malloc+0x852> 12ae: 00004097 auipc ra,0x4 - 12b2: a1e080e7 jalr -1506(ra) # 4ccc <printf> + 12b2: a28080e7 jalr -1496(ra) # 4cd6 <printf> exit(1); 12b6: 4505 li a0,1 12b8: 00003097 auipc ra,0x3 @@ -1989,15 +1989,15 @@ badarg(char *s) 12cc: 892a mv s2,a0 char *echoargv[] = { "echo", "OK", 0 }; 12ce: 00004797 auipc a5,0x4 - 12d2: c1278793 addi a5,a5,-1006 # 4ee0 <malloc+0x15c> + 12d2: c1a78793 addi a5,a5,-998 # 4ee8 <malloc+0x15a> 12d6: fcf43023 sd a5,-64(s0) 12da: 00004797 auipc a5,0x4 - 12de: 31e78793 addi a5,a5,798 # 55f8 <malloc+0x874> + 12de: 32678793 addi a5,a5,806 # 5600 <malloc+0x872> 12e2: fcf43423 sd a5,-56(s0) 12e6: fc043823 sd zero,-48(s0) remove("echo-ok"); 12ea: 00004517 auipc a0,0x4 - 12ee: 31650513 addi a0,a0,790 # 5600 <malloc+0x87c> + 12ee: 31e50513 addi a0,a0,798 # 5608 <malloc+0x87a> 12f2: 00003097 auipc ra,0x3 12f6: 6ce080e7 jalr 1742(ra) # 49c0 <remove> pid = fork(); @@ -2015,7 +2015,7 @@ badarg(char *s) fd = open("echo-ok", O_CREATE|O_WRONLY); 1314: 20100593 li a1,513 1318: 00004517 auipc a0,0x4 - 131c: 2e850513 addi a0,a0,744 # 5600 <malloc+0x87c> + 131c: 2f050513 addi a0,a0,752 # 5608 <malloc+0x87a> 1320: 00003097 auipc ra,0x3 1324: 62e080e7 jalr 1582(ra) # 494e <open> if(fd < 0) { @@ -2026,9 +2026,9 @@ badarg(char *s) printf("%s: wrong fd\n", s); 1332: 85ca mv a1,s2 1334: 00004517 auipc a0,0x4 - 1338: 2ec50513 addi a0,a0,748 # 5620 <malloc+0x89c> + 1338: 2f450513 addi a0,a0,756 # 5628 <malloc+0x89a> 133c: 00004097 auipc ra,0x4 - 1340: 990080e7 jalr -1648(ra) # 4ccc <printf> + 1340: 99a080e7 jalr -1638(ra) # 4cd6 <printf> exit(1); 1344: 4505 li a0,1 1346: 00003097 auipc ra,0x3 @@ -2036,9 +2036,9 @@ badarg(char *s) printf("%s: fork failed\n", s); 134e: 85ca mv a1,s2 1350: 00004517 auipc a0,0x4 - 1354: 22050513 addi a0,a0,544 # 5570 <malloc+0x7ec> + 1354: 22850513 addi a0,a0,552 # 5578 <malloc+0x7ea> 1358: 00004097 auipc ra,0x4 - 135c: 974080e7 jalr -1676(ra) # 4ccc <printf> + 135c: 97e080e7 jalr -1666(ra) # 4cd6 <printf> exit(1); 1360: 4505 li a0,1 1362: 00003097 auipc ra,0x3 @@ -2046,9 +2046,9 @@ badarg(char *s) printf("%s: create failed\n", s); 136a: 85ca mv a1,s2 136c: 00004517 auipc a0,0x4 - 1370: 29c50513 addi a0,a0,668 # 5608 <malloc+0x884> + 1370: 2a450513 addi a0,a0,676 # 5610 <malloc+0x882> 1374: 00004097 auipc ra,0x4 - 1378: 958080e7 jalr -1704(ra) # 4ccc <printf> + 1378: 962080e7 jalr -1694(ra) # 4cd6 <printf> exit(1); 137c: 4505 li a0,1 137e: 00003097 auipc ra,0x3 @@ -2056,7 +2056,7 @@ badarg(char *s) if(exec("echo", echoargv) < 0){ 1386: fc040593 addi a1,s0,-64 138a: 00004517 auipc a0,0x4 - 138e: b5650513 addi a0,a0,-1194 # 4ee0 <malloc+0x15c> + 138e: b5e50513 addi a0,a0,-1186 # 4ee8 <malloc+0x15a> 1392: 00003097 auipc ra,0x3 1396: 5b4080e7 jalr 1460(ra) # 4946 <exec> 139a: 02054163 bltz a0,13bc <exectest+0xfc> @@ -2074,9 +2074,9 @@ badarg(char *s) printf("%s: exec echo failed\n", s); 13bc: 85ca mv a1,s2 13be: 00004517 auipc a0,0x4 - 13c2: 27250513 addi a0,a0,626 # 5630 <malloc+0x8ac> + 13c2: 27a50513 addi a0,a0,634 # 5638 <malloc+0x8aa> 13c6: 00004097 auipc ra,0x4 - 13ca: 906080e7 jalr -1786(ra) # 4ccc <printf> + 13ca: 910080e7 jalr -1776(ra) # 4cd6 <printf> exit(1); 13ce: 4505 li a0,1 13d0: 00003097 auipc ra,0x3 @@ -2084,14 +2084,14 @@ badarg(char *s) printf("%s: wait failed!\n", s); 13d8: 85ca mv a1,s2 13da: 00004517 auipc a0,0x4 - 13de: 26e50513 addi a0,a0,622 # 5648 <malloc+0x8c4> + 13de: 27650513 addi a0,a0,630 # 5650 <malloc+0x8c2> 13e2: 00004097 auipc ra,0x4 - 13e6: 8ea080e7 jalr -1814(ra) # 4ccc <printf> + 13e6: 8f4080e7 jalr -1804(ra) # 4cd6 <printf> 13ea: b7d1 j 13ae <exectest+0xee> fd = open("echo-ok", O_RDONLY); 13ec: 4581 li a1,0 13ee: 00004517 auipc a0,0x4 - 13f2: 21250513 addi a0,a0,530 # 5600 <malloc+0x87c> + 13f2: 21a50513 addi a0,a0,538 # 5608 <malloc+0x87a> 13f6: 00003097 auipc ra,0x3 13fa: 558080e7 jalr 1368(ra) # 494e <open> if(fd < 0) { @@ -2106,9 +2106,9 @@ badarg(char *s) printf("%s: read failed\n", s); 1416: 85ca mv a1,s2 1418: 00004517 auipc a0,0x4 - 141c: e9850513 addi a0,a0,-360 # 52b0 <malloc+0x52c> + 141c: ea050513 addi a0,a0,-352 # 52b8 <malloc+0x52a> 1420: 00004097 auipc ra,0x4 - 1424: 8ac080e7 jalr -1876(ra) # 4ccc <printf> + 1424: 8b6080e7 jalr -1866(ra) # 4cd6 <printf> exit(1); 1428: 4505 li a0,1 142a: 00003097 auipc ra,0x3 @@ -2116,16 +2116,16 @@ badarg(char *s) printf("%s: open failed\n", s); 1432: 85ca mv a1,s2 1434: 00004517 auipc a0,0x4 - 1438: 15450513 addi a0,a0,340 # 5588 <malloc+0x804> + 1438: 15c50513 addi a0,a0,348 # 5590 <malloc+0x802> 143c: 00004097 auipc ra,0x4 - 1440: 890080e7 jalr -1904(ra) # 4ccc <printf> + 1440: 89a080e7 jalr -1894(ra) # 4cd6 <printf> exit(1); 1444: 4505 li a0,1 1446: 00003097 auipc ra,0x3 144a: 4be080e7 jalr 1214(ra) # 4904 <exit> remove("echo-ok"); 144e: 00004517 auipc a0,0x4 - 1452: 1b250513 addi a0,a0,434 # 5600 <malloc+0x87c> + 1452: 1ba50513 addi a0,a0,442 # 5608 <malloc+0x87a> 1456: 00003097 auipc ra,0x3 145a: 56a080e7 jalr 1386(ra) # 49c0 <remove> if(buf[0] == 'O' && buf[1] == 'K') @@ -2138,9 +2138,9 @@ badarg(char *s) printf("%s: wrong output\n", s); 1476: 85ca mv a1,s2 1478: 00004517 auipc a0,0x4 - 147c: 1e850513 addi a0,a0,488 # 5660 <malloc+0x8dc> + 147c: 1f050513 addi a0,a0,496 # 5668 <malloc+0x8da> 1480: 00004097 auipc ra,0x4 - 1484: 84c080e7 jalr -1972(ra) # 4ccc <printf> + 1484: 856080e7 jalr -1962(ra) # 4cd6 <printf> exit(1); 1488: 4505 li a0,1 148a: 00003097 auipc ra,0x3 @@ -2188,7 +2188,7 @@ badarg(char *s) 14e2: 4985 li s3,1 while((n = read(fds[0], buf, cc)) > 0){ 14e4: 00009b17 auipc s6,0x9 - 14e8: 3b4b0b13 addi s6,s6,948 # a898 <buf> + 14e8: 3bcb0b13 addi s6,s6,956 # a8a0 <buf> if(cc > sizeof(buf)) 14ec: 6a09 lui s4,0x2 14ee: 800a0a13 addi s4,s4,-2048 # 1800 <forkfork+0x42> @@ -2201,7 +2201,7 @@ badarg(char *s) 1502: 10a05163 blez a0,1604 <pipe1+0x168> for(i = 0; i < n; i++){ 1506: 00009717 auipc a4,0x9 - 150a: 39270713 addi a4,a4,914 # a898 <buf> + 150a: 39a70713 addi a4,a4,922 # a8a0 <buf> 150e: 00a4863b addw a2,s1,a0 if((buf[i] & 0xff) != (seq++ & 0xff)){ 1512: 00074683 lbu a3,0(a4) @@ -2224,9 +2224,9 @@ badarg(char *s) printf("%s: pipe() failed\n", s); 153a: 85ca mv a1,s2 153c: 00004517 auipc a0,0x4 - 1540: 13c50513 addi a0,a0,316 # 5678 <malloc+0x8f4> + 1540: 14450513 addi a0,a0,324 # 5680 <malloc+0x8f2> 1544: 00003097 auipc ra,0x3 - 1548: 788080e7 jalr 1928(ra) # 4ccc <printf> + 1548: 792080e7 jalr 1938(ra) # 4cd6 <printf> exit(1); 154c: 4505 li a0,1 154e: 00003097 auipc ra,0x3 @@ -2237,7 +2237,7 @@ badarg(char *s) 155e: 3da080e7 jalr 986(ra) # 4934 <close> for(n = 0; n < N; n++){ 1562: 00009b17 auipc s6,0x9 - 1566: 336b0b13 addi s6,s6,822 # a898 <buf> + 1566: 33eb0b13 addi s6,s6,830 # a8a0 <buf> 156a: 416004bb negw s1,s6 156e: 0ff4f493 zext.b s1,s1 1572: 409b0993 addi s3,s6,1033 @@ -2275,9 +2275,9 @@ badarg(char *s) printf("%s: pipe1 oops 1\n", s); 15c0: 85ca mv a1,s2 15c2: 00004517 auipc a0,0x4 - 15c6: 0ce50513 addi a0,a0,206 # 5690 <malloc+0x90c> + 15c6: 0d650513 addi a0,a0,214 # 5698 <malloc+0x90a> 15ca: 00003097 auipc ra,0x3 - 15ce: 702080e7 jalr 1794(ra) # 4ccc <printf> + 15ce: 70c080e7 jalr 1804(ra) # 4cd6 <printf> exit(1); 15d2: 4505 li a0,1 15d4: 00003097 auipc ra,0x3 @@ -2285,9 +2285,9 @@ badarg(char *s) printf("%s: pipe1 oops 2\n", s); 15dc: 85ca mv a1,s2 15de: 00004517 auipc a0,0x4 - 15e2: 0ca50513 addi a0,a0,202 # 56a8 <malloc+0x924> + 15e2: 0d250513 addi a0,a0,210 # 56b0 <malloc+0x922> 15e6: 00003097 auipc ra,0x3 - 15ea: 6e6080e7 jalr 1766(ra) # 4ccc <printf> + 15ea: 6f0080e7 jalr 1776(ra) # 4cd6 <printf> } 15ee: 60e6 ld ra,88(sp) 15f0: 6446 ld s0,80(sp) @@ -2307,9 +2307,9 @@ badarg(char *s) printf("%s: pipe1 oops 3 total %d\n", total); 160e: 85d6 mv a1,s5 1610: 00004517 auipc a0,0x4 - 1614: 0b050513 addi a0,a0,176 # 56c0 <malloc+0x93c> + 1614: 0b850513 addi a0,a0,184 # 56c8 <malloc+0x93a> 1618: 00003097 auipc ra,0x3 - 161c: 6b4080e7 jalr 1716(ra) # 4ccc <printf> + 161c: 6be080e7 jalr 1726(ra) # 4cd6 <printf> exit(1); 1620: 4505 li a0,1 1622: 00003097 auipc ra,0x3 @@ -2329,9 +2329,9 @@ badarg(char *s) printf("%s: fork() failed\n", s); 164e: 85ca mv a1,s2 1650: 00004517 auipc a0,0x4 - 1654: 09050513 addi a0,a0,144 # 56e0 <malloc+0x95c> + 1654: 09850513 addi a0,a0,152 # 56e8 <malloc+0x95a> 1658: 00003097 auipc ra,0x3 - 165c: 674080e7 jalr 1652(ra) # 4ccc <printf> + 165c: 67e080e7 jalr 1662(ra) # 4cd6 <printf> exit(1); 1660: 4505 li a0,1 1662: 00003097 auipc ra,0x3 @@ -2387,9 +2387,9 @@ badarg(char *s) printf("%s: fork failed\n", s); 16c6: 85d6 mv a1,s5 16c8: 00004517 auipc a0,0x4 - 16cc: ea850513 addi a0,a0,-344 # 5570 <malloc+0x7ec> + 16cc: eb050513 addi a0,a0,-336 # 5578 <malloc+0x7ea> 16d0: 00003097 auipc ra,0x3 - 16d4: 5fc080e7 jalr 1532(ra) # 4ccc <printf> + 16d4: 606080e7 jalr 1542(ra) # 4cd6 <printf> exit(1); 16d8: 4505 li a0,1 16da: 00003097 auipc ra,0x3 @@ -2397,9 +2397,9 @@ badarg(char *s) printf("%s: wait wrong pid\n", s); 16e2: 85d6 mv a1,s5 16e4: 00004517 auipc a0,0x4 - 16e8: 01450513 addi a0,a0,20 # 56f8 <malloc+0x974> + 16e8: 01c50513 addi a0,a0,28 # 5700 <malloc+0x972> 16ec: 00003097 auipc ra,0x3 - 16f0: 5e0080e7 jalr 1504(ra) # 4ccc <printf> + 16f0: 5ea080e7 jalr 1514(ra) # 4cd6 <printf> exit(1); 16f4: 4505 li a0,1 16f6: 00003097 auipc ra,0x3 @@ -2407,9 +2407,9 @@ badarg(char *s) printf("%s: wait wrong exit status\n", s); 16fe: 85d6 mv a1,s5 1700: 00004517 auipc a0,0x4 - 1704: 01050513 addi a0,a0,16 # 5710 <malloc+0x98c> + 1704: 01850513 addi a0,a0,24 # 5718 <malloc+0x98a> 1708: 00003097 auipc ra,0x3 - 170c: 5c4080e7 jalr 1476(ra) # 4ccc <printf> + 170c: 5ce080e7 jalr 1486(ra) # 4cd6 <printf> exit(1); 1710: 4505 li a0,1 1712: 00003097 auipc ra,0x3 @@ -2464,9 +2464,9 @@ badarg(char *s) printf("%s: fork failed\n", s); 1776: 85ca mv a1,s2 1778: 00004517 auipc a0,0x4 - 177c: df850513 addi a0,a0,-520 # 5570 <malloc+0x7ec> + 177c: e0050513 addi a0,a0,-512 # 5578 <malloc+0x7ea> 1780: 00003097 auipc ra,0x3 - 1784: 54c080e7 jalr 1356(ra) # 4ccc <printf> + 1784: 556080e7 jalr 1366(ra) # 4cd6 <printf> exit(1); 1788: 4505 li a0,1 178a: 00003097 auipc ra,0x3 @@ -2477,9 +2477,9 @@ badarg(char *s) printf("%s: fork failed\n", s); 179a: 85ca mv a1,s2 179c: 00004517 auipc a0,0x4 - 17a0: dd450513 addi a0,a0,-556 # 5570 <malloc+0x7ec> + 17a0: ddc50513 addi a0,a0,-548 # 5578 <malloc+0x7ea> 17a4: 00003097 auipc ra,0x3 - 17a8: 528080e7 jalr 1320(ra) # 4ccc <printf> + 17a8: 532080e7 jalr 1330(ra) # 4cd6 <printf> exit(1); 17ac: 4505 li a0,1 17ae: 00003097 auipc ra,0x3 @@ -2533,9 +2533,9 @@ badarg(char *s) printf("%s: fork failed", s); 1814: 85a6 mv a1,s1 1816: 00004517 auipc a0,0x4 - 181a: f1a50513 addi a0,a0,-230 # 5730 <malloc+0x9ac> + 181a: f2250513 addi a0,a0,-222 # 5738 <malloc+0x9aa> 181e: 00003097 auipc ra,0x3 - 1822: 4ae080e7 jalr 1198(ra) # 4ccc <printf> + 1822: 4b8080e7 jalr 1208(ra) # 4cd6 <printf> exit(1); 1826: 4505 li a0,1 1828: 00003097 auipc ra,0x3 @@ -2570,9 +2570,9 @@ badarg(char *s) printf("%s: fork in child failed", s); 186c: 85a6 mv a1,s1 186e: 00004517 auipc a0,0x4 - 1872: ed250513 addi a0,a0,-302 # 5740 <malloc+0x9bc> + 1872: eda50513 addi a0,a0,-294 # 5748 <malloc+0x9ba> 1876: 00003097 auipc ra,0x3 - 187a: 456080e7 jalr 1110(ra) # 4ccc <printf> + 187a: 460080e7 jalr 1120(ra) # 4cd6 <printf> exit(1); 187e: 4505 li a0,1 1880: 00003097 auipc ra,0x3 @@ -2606,9 +2606,9 @@ badarg(char *s) 18b8: 050080e7 jalr 80(ra) # 4904 <exit> printf("fork failed\n"); 18bc: 00004517 auipc a0,0x4 - 18c0: 03450513 addi a0,a0,52 # 58f0 <malloc+0xb6c> + 18c0: 03c50513 addi a0,a0,60 # 58f8 <malloc+0xb6a> 18c4: 00003097 auipc ra,0x3 - 18c8: 408080e7 jalr 1032(ra) # 4ccc <printf> + 18c8: 412080e7 jalr 1042(ra) # 4cd6 <printf> exit(1); 18cc: 4505 li a0,1 18ce: 00003097 auipc ra,0x3 @@ -2650,9 +2650,9 @@ badarg(char *s) printf("%s: fork claimed to work 1000 times!\n", s); 191a: 85ce mv a1,s3 191c: 00004517 auipc a0,0x4 - 1920: e5c50513 addi a0,a0,-420 # 5778 <malloc+0x9f4> + 1920: e6450513 addi a0,a0,-412 # 5780 <malloc+0x9f2> 1924: 00003097 auipc ra,0x3 - 1928: 3a8080e7 jalr 936(ra) # 4ccc <printf> + 1928: 3b2080e7 jalr 946(ra) # 4cd6 <printf> exit(1); 192c: 4505 li a0,1 192e: 00003097 auipc ra,0x3 @@ -2692,9 +2692,9 @@ badarg(char *s) printf("%s: no fork at all!\n", s); 197c: 85ce mv a1,s3 197e: 00004517 auipc a0,0x4 - 1982: de250513 addi a0,a0,-542 # 5760 <malloc+0x9dc> + 1982: dea50513 addi a0,a0,-534 # 5768 <malloc+0x9da> 1986: 00003097 auipc ra,0x3 - 198a: 346080e7 jalr 838(ra) # 4ccc <printf> + 198a: 350080e7 jalr 848(ra) # 4cd6 <printf> exit(1); 198e: 4505 li a0,1 1990: 00003097 auipc ra,0x3 @@ -2702,9 +2702,9 @@ badarg(char *s) printf("%s: wait stopped early\n", s); 1998: 85ce mv a1,s3 199a: 00004517 auipc a0,0x4 - 199e: e0650513 addi a0,a0,-506 # 57a0 <malloc+0xa1c> + 199e: e0e50513 addi a0,a0,-498 # 57a8 <malloc+0xa1a> 19a2: 00003097 auipc ra,0x3 - 19a6: 32a080e7 jalr 810(ra) # 4ccc <printf> + 19a6: 334080e7 jalr 820(ra) # 4cd6 <printf> exit(1); 19aa: 4505 li a0,1 19ac: 00003097 auipc ra,0x3 @@ -2712,9 +2712,9 @@ badarg(char *s) printf("%s: wait got too many\n", s); 19b4: 85ce mv a1,s3 19b6: 00004517 auipc a0,0x4 - 19ba: e0250513 addi a0,a0,-510 # 57b8 <malloc+0xa34> + 19ba: e0a50513 addi a0,a0,-502 # 57c0 <malloc+0xa32> 19be: 00003097 auipc ra,0x3 - 19c2: 30e080e7 jalr 782(ra) # 4ccc <printf> + 19c2: 318080e7 jalr 792(ra) # 4cd6 <printf> exit(1); 19c6: 4505 li a0,1 19c8: 00003097 auipc ra,0x3 @@ -2742,10 +2742,10 @@ badarg(char *s) 19f0: 5a7d li s4,-1 for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){ 19f2: 69b1 lui s3,0xc - 19f4: 35098993 addi s3,s3,848 # c350 <__BSS_END__+0x2a0> + 19f4: 35098993 addi s3,s3,848 # c350 <__BSS_END__+0x298> 19f8: 1007d937 lui s2,0x1007d 19fc: 090e slli s2,s2,0x3 - 19fe: 48090913 addi s2,s2,1152 # 1007d480 <__BSS_END__+0x100713d0> + 19fe: 48090913 addi s2,s2,1152 # 1007d480 <__BSS_END__+0x100713c8> pid = fork(); 1a02: 00003097 auipc ra,0x3 1a06: efa080e7 jalr -262(ra) # 48fc <fork> @@ -2777,9 +2777,9 @@ badarg(char *s) printf("%s: fork failed\n", s); 1a3c: 85da mv a1,s6 1a3e: 00004517 auipc a0,0x4 - 1a42: b3250513 addi a0,a0,-1230 # 5570 <malloc+0x7ec> + 1a42: b3a50513 addi a0,a0,-1222 # 5578 <malloc+0x7ea> 1a46: 00003097 auipc ra,0x3 - 1a4a: 286080e7 jalr 646(ra) # 4ccc <printf> + 1a4a: 290080e7 jalr 656(ra) # 4cd6 <printf> exit(1); 1a4e: 4505 li a0,1 1a50: 00003097 auipc ra,0x3 @@ -2788,9 +2788,9 @@ badarg(char *s) 1a58: 0004c603 lbu a2,0(s1) 1a5c: 85a6 mv a1,s1 1a5e: 00004517 auipc a0,0x4 - 1a62: d7250513 addi a0,a0,-654 # 57d0 <malloc+0xa4c> + 1a62: d7a50513 addi a0,a0,-646 # 57d8 <malloc+0xa4a> 1a66: 00003097 auipc ra,0x3 - 1a6a: 266080e7 jalr 614(ra) # 4ccc <printf> + 1a6a: 270080e7 jalr 624(ra) # 4cd6 <printf> exit(1); 1a6e: 4505 li a0,1 1a70: 00003097 auipc ra,0x3 @@ -2810,7 +2810,7 @@ badarg(char *s) 1a8c: 84aa mv s1,a0 remove("bigarg-ok"); 1a8e: 00004517 auipc a0,0x4 - 1a92: d6250513 addi a0,a0,-670 # 57f0 <malloc+0xa6c> + 1a92: d6a50513 addi a0,a0,-662 # 57f8 <malloc+0xa6a> 1a96: 00003097 auipc ra,0x3 1a9a: f2a080e7 jalr -214(ra) # 49c0 <remove> pid = fork(); @@ -2830,7 +2830,7 @@ badarg(char *s) fd = open("bigarg-ok", 0); 1abe: 4581 li a1,0 1ac0: 00004517 auipc a0,0x4 - 1ac4: d3050513 addi a0,a0,-720 # 57f0 <malloc+0xa6c> + 1ac4: d3850513 addi a0,a0,-712 # 57f8 <malloc+0xa6a> 1ac8: 00003097 auipc ra,0x3 1acc: e86080e7 jalr -378(ra) # 494e <open> if(fd < 0){ @@ -2840,7 +2840,7 @@ badarg(char *s) 1ad8: e60080e7 jalr -416(ra) # 4934 <close> remove("bigarg-ok"); 1adc: 00004517 auipc a0,0x4 - 1ae0: d1450513 addi a0,a0,-748 # 57f0 <malloc+0xa6c> + 1ae0: d1c50513 addi a0,a0,-740 # 57f8 <malloc+0xa6a> 1ae4: 00003097 auipc ra,0x3 1ae8: edc080e7 jalr -292(ra) # 49c0 <remove> } @@ -2850,30 +2850,30 @@ badarg(char *s) 1af2: 6145 addi sp,sp,48 1af4: 8082 ret 1af6: 00005797 auipc a5,0x5 - 1afa: 58a78793 addi a5,a5,1418 # 7080 <args.1> + 1afa: 59278793 addi a5,a5,1426 # 7088 <args.1> 1afe: 00005697 auipc a3,0x5 - 1b02: 67a68693 addi a3,a3,1658 # 7178 <args.1+0xf8> + 1b02: 68268693 addi a3,a3,1666 # 7180 <args.1+0xf8> args[i] = "bigargs test: failed\n "; 1b06: 00004717 auipc a4,0x4 - 1b0a: cfa70713 addi a4,a4,-774 # 5800 <malloc+0xa7c> + 1b0a: d0270713 addi a4,a4,-766 # 5808 <malloc+0xa7a> 1b0e: e398 sd a4,0(a5) for(i = 0; i < MAXARG-1; i++) 1b10: 07a1 addi a5,a5,8 1b12: fed79ee3 bne a5,a3,1b0e <bigargtest+0x8c> args[MAXARG-1] = 0; 1b16: 00005797 auipc a5,0x5 - 1b1a: 6607b123 sd zero,1634(a5) # 7178 <args.1+0xf8> + 1b1a: 6607b523 sd zero,1642(a5) # 7180 <args.1+0xf8> exec("echo", args); 1b1e: 00005597 auipc a1,0x5 - 1b22: 56258593 addi a1,a1,1378 # 7080 <args.1> + 1b22: 56a58593 addi a1,a1,1386 # 7088 <args.1> 1b26: 00003517 auipc a0,0x3 - 1b2a: 3ba50513 addi a0,a0,954 # 4ee0 <malloc+0x15c> + 1b2a: 3c250513 addi a0,a0,962 # 4ee8 <malloc+0x15a> 1b2e: 00003097 auipc ra,0x3 1b32: e18080e7 jalr -488(ra) # 4946 <exec> fd = open("bigarg-ok", O_CREATE); 1b36: 20000593 li a1,512 1b3a: 00004517 auipc a0,0x4 - 1b3e: cb650513 addi a0,a0,-842 # 57f0 <malloc+0xa6c> + 1b3e: cbe50513 addi a0,a0,-834 # 57f8 <malloc+0xa6a> 1b42: 00003097 auipc ra,0x3 1b46: e0c080e7 jalr -500(ra) # 494e <open> close(fd); @@ -2886,9 +2886,9 @@ badarg(char *s) printf("%s: bigargtest: fork failed\n", s); 1b5c: 85a6 mv a1,s1 1b5e: 00004517 auipc a0,0x4 - 1b62: d8250513 addi a0,a0,-638 # 58e0 <malloc+0xb5c> + 1b62: d8a50513 addi a0,a0,-630 # 58e8 <malloc+0xb5a> 1b66: 00003097 auipc ra,0x3 - 1b6a: 166080e7 jalr 358(ra) # 4ccc <printf> + 1b6a: 170080e7 jalr 368(ra) # 4cd6 <printf> exit(1); 1b6e: 4505 li a0,1 1b70: 00003097 auipc ra,0x3 @@ -2899,9 +2899,9 @@ badarg(char *s) printf("%s: bigarg test failed!\n", s); 1b80: 85a6 mv a1,s1 1b82: 00004517 auipc a0,0x4 - 1b86: d7e50513 addi a0,a0,-642 # 5900 <malloc+0xb7c> + 1b86: d8650513 addi a0,a0,-634 # 5908 <malloc+0xb7a> 1b8a: 00003097 auipc ra,0x3 - 1b8e: 142080e7 jalr 322(ra) # 4ccc <printf> + 1b8e: 14c080e7 jalr 332(ra) # 4cd6 <printf> exit(1); 1b92: 4505 li a0,1 1b94: 00003097 auipc ra,0x3 @@ -2943,11 +2943,11 @@ r_sp() printf("%s: stacktest: read below stack %p\n", *sp); 1bd6: 77fd lui a5,0xfffff 1bd8: 97ba add a5,a5,a4 - 1bda: 0007c583 lbu a1,0(a5) # fffffffffffff000 <__BSS_END__+0xffffffffffff2f50> + 1bda: 0007c583 lbu a1,0(a5) # fffffffffffff000 <__BSS_END__+0xffffffffffff2f48> 1bde: 00004517 auipc a0,0x4 - 1be2: d4250513 addi a0,a0,-702 # 5920 <malloc+0xb9c> + 1be2: d4a50513 addi a0,a0,-694 # 5928 <malloc+0xb9a> 1be6: 00003097 auipc ra,0x3 - 1bea: 0e6080e7 jalr 230(ra) # 4ccc <printf> + 1bea: 0f0080e7 jalr 240(ra) # 4cd6 <printf> exit(1); 1bee: 4505 li a0,1 1bf0: 00003097 auipc ra,0x3 @@ -2955,9 +2955,9 @@ r_sp() printf("%s: fork failed\n", s); 1bf8: 85a6 mv a1,s1 1bfa: 00004517 auipc a0,0x4 - 1bfe: 97650513 addi a0,a0,-1674 # 5570 <malloc+0x7ec> + 1bfe: 97e50513 addi a0,a0,-1666 # 5578 <malloc+0x7ea> 1c02: 00003097 auipc ra,0x3 - 1c06: 0ca080e7 jalr 202(ra) # 4ccc <printf> + 1c06: 0d4080e7 jalr 212(ra) # 4cd6 <printf> exit(1); 1c0a: 4505 li a0,1 1c0c: 00003097 auipc ra,0x3 @@ -3014,7 +3014,7 @@ r_sp() 1c7e: 06f51f63 bne a0,a5,1cfc <copyinstr3+0xde> char *args[] = { "xx", 0 }; 1c82: 00004797 auipc a5,0x4 - 1c86: 44e78793 addi a5,a5,1102 # 60d0 <malloc+0x134c> + 1c86: 45678793 addi a5,a5,1110 # 60d8 <malloc+0x134a> 1c8a: fcf43823 sd a5,-48(s0) 1c8e: fc043c23 sd zero,-40(s0) ret = exec(b, args); @@ -3040,9 +3040,9 @@ r_sp() 1cc2: b741 j 1c42 <copyinstr3+0x24> printf("oops\n"); 1cc4: 00004517 auipc a0,0x4 - 1cc8: c8450513 addi a0,a0,-892 # 5948 <malloc+0xbc4> + 1cc8: c8c50513 addi a0,a0,-884 # 5950 <malloc+0xbc2> 1ccc: 00003097 auipc ra,0x3 - 1cd0: 000080e7 jalr ra # 4ccc <printf> + 1cd0: 00a080e7 jalr 10(ra) # 4cd6 <printf> exit(1); 1cd4: 4505 li a0,1 1cd6: 00003097 auipc ra,0x3 @@ -3051,9 +3051,9 @@ r_sp() 1cde: 862a mv a2,a0 1ce0: 85a6 mv a1,s1 1ce2: 00003517 auipc a0,0x3 - 1ce6: 7d650513 addi a0,a0,2006 # 54b8 <malloc+0x734> + 1ce6: 7de50513 addi a0,a0,2014 # 54c0 <malloc+0x732> 1cea: 00003097 auipc ra,0x3 - 1cee: fe2080e7 jalr -30(ra) # 4ccc <printf> + 1cee: fec080e7 jalr -20(ra) # 4cd6 <printf> exit(1); 1cf2: 4505 li a0,1 1cf4: 00003097 auipc ra,0x3 @@ -3062,9 +3062,9 @@ r_sp() 1cfc: 862a mv a2,a0 1cfe: 85a6 mv a1,s1 1d00: 00003517 auipc a0,0x3 - 1d04: 7d850513 addi a0,a0,2008 # 54d8 <malloc+0x754> + 1d04: 7e050513 addi a0,a0,2016 # 54e0 <malloc+0x752> 1d08: 00003097 auipc ra,0x3 - 1d0c: fc4080e7 jalr -60(ra) # 4ccc <printf> + 1d0c: fce080e7 jalr -50(ra) # 4cd6 <printf> exit(1); 1d10: 4505 li a0,1 1d12: 00003097 auipc ra,0x3 @@ -3073,9 +3073,9 @@ r_sp() 1d1a: 567d li a2,-1 1d1c: 85a6 mv a1,s1 1d1e: 00003517 auipc a0,0x3 - 1d22: 7da50513 addi a0,a0,2010 # 54f8 <malloc+0x774> + 1d22: 7e250513 addi a0,a0,2018 # 5500 <malloc+0x772> 1d26: 00003097 auipc ra,0x3 - 1d2a: fa6080e7 jalr -90(ra) # 4ccc <printf> + 1d2a: fb0080e7 jalr -80(ra) # 4cd6 <printf> exit(1); 1d2e: 4505 li a0,1 1d30: 00003097 auipc ra,0x3 @@ -3114,7 +3114,7 @@ r_sp() for(b = a; b < a+TOOMUCH; b += 4096){ 1d74: 6705 lui a4,0x1 *b = 99; - 1d76: 00d50023 sb a3,0(a0) # 40000000 <__BSS_END__+0x3fff3f50> + 1d76: 00d50023 sb a3,0(a0) # 40000000 <__BSS_END__+0x3fff3f48> for(b = a; b < a+TOOMUCH; b += 4096){ 1d7a: 953a add a0,a0,a4 1d7c: fef51de3 bne a0,a5,1d76 <sbrkbasic+0x3e> @@ -3124,9 +3124,9 @@ r_sp() 1d86: b82080e7 jalr -1150(ra) # 4904 <exit> printf("fork failed in sbrkbasic\n"); 1d8a: 00004517 auipc a0,0x4 - 1d8e: bc650513 addi a0,a0,-1082 # 5950 <malloc+0xbcc> + 1d8e: bce50513 addi a0,a0,-1074 # 5958 <malloc+0xbca> 1d92: 00003097 auipc ra,0x3 - 1d96: f3a080e7 jalr -198(ra) # 4ccc <printf> + 1d96: f44080e7 jalr -188(ra) # 4cd6 <printf> exit(1); 1d9a: 4505 li a0,1 1d9c: 00003097 auipc ra,0x3 @@ -3156,9 +3156,9 @@ r_sp() printf("%s: too much memory allocated!\n", s); 1dda: 85d2 mv a1,s4 1ddc: 00004517 auipc a0,0x4 - 1de0: b9450513 addi a0,a0,-1132 # 5970 <malloc+0xbec> + 1de0: b9c50513 addi a0,a0,-1124 # 5978 <malloc+0xbea> 1de4: 00003097 auipc ra,0x3 - 1de8: ee8080e7 jalr -280(ra) # 4ccc <printf> + 1de8: ef2080e7 jalr -270(ra) # 4cd6 <printf> exit(1); 1dec: 4505 li a0,1 1dee: 00003097 auipc ra,0x3 @@ -3199,9 +3199,9 @@ r_sp() printf("%s: sbrk test failed post-fork\n", s); 1e3e: 85d2 mv a1,s4 1e40: 00004517 auipc a0,0x4 - 1e44: b9050513 addi a0,a0,-1136 # 59d0 <malloc+0xc4c> + 1e44: b9850513 addi a0,a0,-1128 # 59d8 <malloc+0xc4a> 1e48: 00003097 auipc ra,0x3 - 1e4c: e84080e7 jalr -380(ra) # 4ccc <printf> + 1e4c: e8e080e7 jalr -370(ra) # 4cd6 <printf> exit(1); 1e50: 4505 li a0,1 1e52: 00003097 auipc ra,0x3 @@ -3211,9 +3211,9 @@ r_sp() 1e5c: 8626 mv a2,s1 1e5e: 85ca mv a1,s2 1e60: 00004517 auipc a0,0x4 - 1e64: b3050513 addi a0,a0,-1232 # 5990 <malloc+0xc0c> + 1e64: b3850513 addi a0,a0,-1224 # 5998 <malloc+0xc0a> 1e68: 00003097 auipc ra,0x3 - 1e6c: e64080e7 jalr -412(ra) # 4ccc <printf> + 1e6c: e6e080e7 jalr -402(ra) # 4cd6 <printf> exit(1); 1e70: 4505 li a0,1 1e72: 00003097 auipc ra,0x3 @@ -3221,9 +3221,9 @@ r_sp() printf("%s: sbrk test fork failed\n", s); 1e7a: 85d2 mv a1,s4 1e7c: 00004517 auipc a0,0x4 - 1e80: b3450513 addi a0,a0,-1228 # 59b0 <malloc+0xc2c> + 1e80: b3c50513 addi a0,a0,-1220 # 59b8 <malloc+0xc2a> 1e84: 00003097 auipc ra,0x3 - 1e88: e48080e7 jalr -440(ra) # 4ccc <printf> + 1e88: e52080e7 jalr -430(ra) # 4cd6 <printf> exit(1); 1e8c: 4505 li a0,1 1e8e: 00003097 auipc ra,0x3 @@ -3290,7 +3290,7 @@ r_sp() *lastaddr = 99; 1f16: 003007b7 lui a5,0x300 1f1a: 06300713 li a4,99 - 1f1e: fee78fa3 sb a4,-1(a5) # 2fffff <__BSS_END__+0x2f3f4f> + 1f1e: fee78fa3 sb a4,-1(a5) # 2fffff <__BSS_END__+0x2f3f47> a = sbrk(0); 1f22: 4501 li a0,0 1f24: 00003097 auipc ra,0x3 @@ -3331,7 +3331,7 @@ r_sp() 1f7a: 0af51063 bne a0,a5,201a <sbrkmuch+0x15e> if(*lastaddr == 99){ 1f7e: 003007b7 lui a5,0x300 - 1f82: fff7c703 lbu a4,-1(a5) # 2fffff <__BSS_END__+0x2f3f4f> + 1f82: fff7c703 lbu a4,-1(a5) # 2fffff <__BSS_END__+0x2f3f47> 1f86: 06300793 li a5,99 1f8a: 0af70763 beq a4,a5,2038 <sbrkmuch+0x17c> a = sbrk(0); @@ -3360,9 +3360,9 @@ r_sp() printf("%s: sbrk test failed to grow big address space; enough phys mem?\n", s); 1fc4: 85ce mv a1,s3 1fc6: 00004517 auipc a0,0x4 - 1fca: a2a50513 addi a0,a0,-1494 # 59f0 <malloc+0xc6c> + 1fca: a3250513 addi a0,a0,-1486 # 59f8 <malloc+0xc6a> 1fce: 00003097 auipc ra,0x3 - 1fd2: cfe080e7 jalr -770(ra) # 4ccc <printf> + 1fd2: d08080e7 jalr -760(ra) # 4cd6 <printf> exit(1); 1fd6: 4505 li a0,1 1fd8: 00003097 auipc ra,0x3 @@ -3370,9 +3370,9 @@ r_sp() printf("%s: sbrk could not deallocate\n", s); 1fe0: 85ce mv a1,s3 1fe2: 00004517 auipc a0,0x4 - 1fe6: a5650513 addi a0,a0,-1450 # 5a38 <malloc+0xcb4> + 1fe6: a5e50513 addi a0,a0,-1442 # 5a40 <malloc+0xcb2> 1fea: 00003097 auipc ra,0x3 - 1fee: ce2080e7 jalr -798(ra) # 4ccc <printf> + 1fee: cec080e7 jalr -788(ra) # 4cd6 <printf> exit(1); 1ff2: 4505 li a0,1 1ff4: 00003097 auipc ra,0x3 @@ -3381,9 +3381,9 @@ r_sp() 1ffc: 862a mv a2,a0 1ffe: 85a6 mv a1,s1 2000: 00004517 auipc a0,0x4 - 2004: a5850513 addi a0,a0,-1448 # 5a58 <malloc+0xcd4> + 2004: a6050513 addi a0,a0,-1440 # 5a60 <malloc+0xcd2> 2008: 00003097 auipc ra,0x3 - 200c: cc4080e7 jalr -828(ra) # 4ccc <printf> + 200c: cce080e7 jalr -818(ra) # 4cd6 <printf> exit(1); 2010: 4505 li a0,1 2012: 00003097 auipc ra,0x3 @@ -3392,9 +3392,9 @@ r_sp() 201a: 8652 mv a2,s4 201c: 85a6 mv a1,s1 201e: 00004517 auipc a0,0x4 - 2022: a7a50513 addi a0,a0,-1414 # 5a98 <malloc+0xd14> + 2022: a8250513 addi a0,a0,-1406 # 5aa0 <malloc+0xd12> 2026: 00003097 auipc ra,0x3 - 202a: ca6080e7 jalr -858(ra) # 4ccc <printf> + 202a: cb0080e7 jalr -848(ra) # 4cd6 <printf> exit(1); 202e: 4505 li a0,1 2030: 00003097 auipc ra,0x3 @@ -3402,9 +3402,9 @@ r_sp() printf("%s: sbrk de-allocation didn't really deallocate\n", s); 2038: 85ce mv a1,s3 203a: 00004517 auipc a0,0x4 - 203e: a8e50513 addi a0,a0,-1394 # 5ac8 <malloc+0xd44> + 203e: a9650513 addi a0,a0,-1386 # 5ad0 <malloc+0xd42> 2042: 00003097 auipc ra,0x3 - 2046: c8a080e7 jalr -886(ra) # 4ccc <printf> + 2046: c94080e7 jalr -876(ra) # 4cd6 <printf> exit(1); 204a: 4505 li a0,1 204c: 00003097 auipc ra,0x3 @@ -3413,9 +3413,9 @@ r_sp() 2054: 862a mv a2,a0 2056: 85a6 mv a1,s1 2058: 00004517 auipc a0,0x4 - 205c: aa850513 addi a0,a0,-1368 # 5b00 <malloc+0xd7c> + 205c: ab050513 addi a0,a0,-1360 # 5b08 <malloc+0xd7a> 2060: 00003097 auipc ra,0x3 - 2064: c6c080e7 jalr -916(ra) # 4ccc <printf> + 2064: c76080e7 jalr -906(ra) # 4cd6 <printf> exit(1); 2068: 4505 li a0,1 206a: 00003097 auipc ra,0x3 @@ -3439,13 +3439,13 @@ r_sp() fd = open("sbrk", O_CREATE|O_WRONLY); 208e: 20100593 li a1,513 2092: 00004517 auipc a0,0x4 - 2096: a9650513 addi a0,a0,-1386 # 5b28 <malloc+0xda4> + 2096: a9e50513 addi a0,a0,-1378 # 5b30 <malloc+0xda2> 209a: 00003097 auipc ra,0x3 209e: 8b4080e7 jalr -1868(ra) # 494e <open> 20a2: 84aa mv s1,a0 remove("sbrk"); 20a4: 00004517 auipc a0,0x4 - 20a8: a8450513 addi a0,a0,-1404 # 5b28 <malloc+0xda4> + 20a8: a8c50513 addi a0,a0,-1396 # 5b30 <malloc+0xda2> 20ac: 00003097 auipc ra,0x3 20b0: 914080e7 jalr -1772(ra) # 49c0 <remove> if(fd < 0) { @@ -3480,9 +3480,9 @@ r_sp() printf("%s: open sbrk failed\n", s); 20f6: 85ce mv a1,s3 20f8: 00004517 auipc a0,0x4 - 20fc: a3850513 addi a0,a0,-1480 # 5b30 <malloc+0xdac> + 20fc: a4050513 addi a0,a0,-1472 # 5b38 <malloc+0xdaa> 2100: 00003097 auipc ra,0x3 - 2104: bcc080e7 jalr -1076(ra) # 4ccc <printf> + 2104: bd6080e7 jalr -1066(ra) # 4cd6 <printf> exit(1); 2108: 4505 li a0,1 210a: 00002097 auipc ra,0x2 @@ -3490,9 +3490,9 @@ r_sp() printf("%s: write sbrk failed\n", s); 2112: 85ce mv a1,s3 2114: 00004517 auipc a0,0x4 - 2118: a3450513 addi a0,a0,-1484 # 5b48 <malloc+0xdc4> + 2118: a3c50513 addi a0,a0,-1476 # 5b50 <malloc+0xdc2> 211c: 00003097 auipc ra,0x3 - 2120: bb0080e7 jalr -1104(ra) # 4ccc <printf> + 2120: bba080e7 jalr -1094(ra) # 4cd6 <printf> exit(1); 2124: 4505 li a0,1 2126: 00002097 auipc ra,0x2 @@ -3500,9 +3500,9 @@ r_sp() printf("%s: pipe() failed\n", s); 212e: 85ce mv a1,s3 2130: 00003517 auipc a0,0x3 - 2134: 54850513 addi a0,a0,1352 # 5678 <malloc+0x8f4> + 2134: 55050513 addi a0,a0,1360 # 5680 <malloc+0x8f2> 2138: 00003097 auipc ra,0x3 - 213c: b94080e7 jalr -1132(ra) # 4ccc <printf> + 213c: b9e080e7 jalr -1122(ra) # 4cd6 <printf> exit(1); 2140: 4505 li a0,1 2142: 00002097 auipc ra,0x2 @@ -3520,7 +3520,7 @@ r_sp() fd = open("init", O_RDONLY); 2158: 4581 li a1,0 215a: 00004517 auipc a0,0x4 - 215e: a0650513 addi a0,a0,-1530 # 5b60 <malloc+0xddc> + 215e: a0e50513 addi a0,a0,-1522 # 5b68 <malloc+0xdda> 2162: 00002097 auipc ra,0x2 2166: 7ec080e7 jalr 2028(ra) # 494e <open> if (fd < 0) { @@ -3549,9 +3549,9 @@ r_sp() printf("%s: open failed\n", s); 21a0: 85ca mv a1,s2 21a2: 00003517 auipc a0,0x3 - 21a6: 3e650513 addi a0,a0,998 # 5588 <malloc+0x804> + 21a6: 3ee50513 addi a0,a0,1006 # 5590 <malloc+0x802> 21aa: 00003097 auipc ra,0x3 - 21ae: b22080e7 jalr -1246(ra) # 4ccc <printf> + 21ae: b2c080e7 jalr -1236(ra) # 4cd6 <printf> exit(1); 21b2: 4505 li a0,1 21b4: 00002097 auipc ra,0x2 @@ -3583,9 +3583,9 @@ r_sp() 21ec: 71c080e7 jalr 1820(ra) # 4904 <exit> printf("fork failed\n"); 21f0: 00003517 auipc a0,0x3 - 21f4: 70050513 addi a0,a0,1792 # 58f0 <malloc+0xb6c> + 21f4: 70850513 addi a0,a0,1800 # 58f8 <malloc+0xb6a> 21f8: 00003097 auipc ra,0x3 - 21fc: ad4080e7 jalr -1324(ra) # 4ccc <printf> + 21fc: ade080e7 jalr -1314(ra) # 4cd6 <printf> exit(1); 2200: 4505 li a0,1 2202: 00002097 auipc ra,0x2 @@ -3616,9 +3616,9 @@ r_sp() 2242: 6c6080e7 jalr 1734(ra) # 4904 <exit> printf("fork failed\n"); 2246: 00003517 auipc a0,0x3 - 224a: 6aa50513 addi a0,a0,1706 # 58f0 <malloc+0xb6c> + 224a: 6b250513 addi a0,a0,1714 # 58f8 <malloc+0xb6a> 224e: 00003097 auipc ra,0x3 - 2252: a7e080e7 jalr -1410(ra) # 4ccc <printf> + 2252: a88080e7 jalr -1400(ra) # 4cd6 <printf> exit(1); 2256: 4505 li a0,1 2258: 00002097 auipc ra,0x2 @@ -3638,7 +3638,7 @@ r_sp() 2278: 00002097 auipc ra,0x2 227c: 710080e7 jalr 1808(ra) # 4988 <sbrk> 2280: 67ad lui a5,0xb - 2282: 8007879b addiw a5,a5,-2048 # a800 <uninit+0x2678> + 2282: 8007879b addiw a5,a5,-2048 # a800 <uninit+0x2670> 2286: 40a7853b subw a0,a5,a0 228a: 00002097 auipc ra,0x2 228e: 6fe080e7 jalr 1790(ra) # 4988 <sbrk> @@ -3652,9 +3652,9 @@ r_sp() 22a2: 666080e7 jalr 1638(ra) # 4904 <exit> printf("fork failed\n"); 22a6: 00003517 auipc a0,0x3 - 22aa: 64a50513 addi a0,a0,1610 # 58f0 <malloc+0xb6c> + 22aa: 65250513 addi a0,a0,1618 # 58f8 <malloc+0xb6a> 22ae: 00003097 auipc ra,0x3 - 22b2: a1e080e7 jalr -1506(ra) # 4ccc <printf> + 22b2: a28080e7 jalr -1496(ra) # 4cd6 <printf> exit(1); 22b6: 4505 li a0,1 22b8: 00002097 auipc ra,0x2 @@ -3717,9 +3717,9 @@ execout(char *s) 230e: 5fa080e7 jalr 1530(ra) # 4904 <exit> printf("fork failed\n"); 2312: 00003517 auipc a0,0x3 - 2316: 5de50513 addi a0,a0,1502 # 58f0 <malloc+0xb6c> + 2316: 5e650513 addi a0,a0,1510 # 58f8 <malloc+0xb6a> 231a: 00003097 auipc ra,0x3 - 231e: 9b2080e7 jalr -1614(ra) # 4ccc <printf> + 231e: 9bc080e7 jalr -1604(ra) # 4cd6 <printf> exit(1); 2322: 4505 li a0,1 2324: 00002097 auipc ra,0x2 @@ -3755,10 +3755,10 @@ execout(char *s) 2362: 5d6080e7 jalr 1494(ra) # 4934 <close> char *args[] = { "echo", "x", 0 }; 2366: 00003517 auipc a0,0x3 - 236a: b7a50513 addi a0,a0,-1158 # 4ee0 <malloc+0x15c> + 236a: b8250513 addi a0,a0,-1150 # 4ee8 <malloc+0x15a> 236e: faa43c23 sd a0,-72(s0) 2372: 00003797 auipc a5,0x3 - 2376: bde78793 addi a5,a5,-1058 # 4f50 <malloc+0x1cc> + 2376: be678793 addi a5,a5,-1050 # 4f58 <malloc+0x1ca> 237a: fcf43023 sd a5,-64(s0) 237e: fc043423 sd zero,-56(s0) exec("echo", args); @@ -3780,25 +3780,25 @@ execout(char *s) 23a2: 84aa mv s1,a0 if(mkdir("iputdir") < 0){ 23a4: 00003517 auipc a0,0x3 - 23a8: 7c450513 addi a0,a0,1988 # 5b68 <malloc+0xde4> + 23a8: 7cc50513 addi a0,a0,1996 # 5b70 <malloc+0xde2> 23ac: 00002097 auipc ra,0x2 23b0: 5b6080e7 jalr 1462(ra) # 4962 <mkdir> 23b4: 04054563 bltz a0,23fe <iputtest+0x66> if(chdir("iputdir") < 0){ 23b8: 00003517 auipc a0,0x3 - 23bc: 7b050513 addi a0,a0,1968 # 5b68 <malloc+0xde4> + 23bc: 7b850513 addi a0,a0,1976 # 5b70 <malloc+0xde2> 23c0: 00002097 auipc ra,0x2 23c4: 5ac080e7 jalr 1452(ra) # 496c <chdir> 23c8: 04054963 bltz a0,241a <iputtest+0x82> if(remove("../iputdir") < 0){ 23cc: 00003517 auipc a0,0x3 - 23d0: 7dc50513 addi a0,a0,2012 # 5ba8 <malloc+0xe24> + 23d0: 7e450513 addi a0,a0,2020 # 5bb0 <malloc+0xe22> 23d4: 00002097 auipc ra,0x2 23d8: 5ec080e7 jalr 1516(ra) # 49c0 <remove> 23dc: 04054d63 bltz a0,2436 <iputtest+0x9e> if(chdir("/") < 0){ - 23e0: 00003517 auipc a0,0x3 - 23e4: 7f850513 addi a0,a0,2040 # 5bd8 <malloc+0xe54> + 23e0: 00004517 auipc a0,0x4 + 23e4: 80050513 addi a0,a0,-2048 # 5be0 <malloc+0xe52> 23e8: 00002097 auipc ra,0x2 23ec: 584080e7 jalr 1412(ra) # 496c <chdir> 23f0: 06054163 bltz a0,2452 <iputtest+0xba> @@ -3811,9 +3811,9 @@ execout(char *s) printf("%s: mkdir failed\n", s); 23fe: 85a6 mv a1,s1 2400: 00003517 auipc a0,0x3 - 2404: 77050513 addi a0,a0,1904 # 5b70 <malloc+0xdec> + 2404: 77850513 addi a0,a0,1912 # 5b78 <malloc+0xdea> 2408: 00003097 auipc ra,0x3 - 240c: 8c4080e7 jalr -1852(ra) # 4ccc <printf> + 240c: 8ce080e7 jalr -1842(ra) # 4cd6 <printf> exit(1); 2410: 4505 li a0,1 2412: 00002097 auipc ra,0x2 @@ -3821,9 +3821,9 @@ execout(char *s) printf("%s: chdir iputdir failed\n", s); 241a: 85a6 mv a1,s1 241c: 00003517 auipc a0,0x3 - 2420: 76c50513 addi a0,a0,1900 # 5b88 <malloc+0xe04> + 2420: 77450513 addi a0,a0,1908 # 5b90 <malloc+0xe02> 2424: 00003097 auipc ra,0x3 - 2428: 8a8080e7 jalr -1880(ra) # 4ccc <printf> + 2428: 8b2080e7 jalr -1870(ra) # 4cd6 <printf> exit(1); 242c: 4505 li a0,1 242e: 00002097 auipc ra,0x2 @@ -3831,9 +3831,9 @@ execout(char *s) printf("%s: remove ../iputdir failed\n", s); 2436: 85a6 mv a1,s1 2438: 00003517 auipc a0,0x3 - 243c: 78050513 addi a0,a0,1920 # 5bb8 <malloc+0xe34> + 243c: 78850513 addi a0,a0,1928 # 5bc0 <malloc+0xe32> 2440: 00003097 auipc ra,0x3 - 2444: 88c080e7 jalr -1908(ra) # 4ccc <printf> + 2444: 896080e7 jalr -1898(ra) # 4cd6 <printf> exit(1); 2448: 4505 li a0,1 244a: 00002097 auipc ra,0x2 @@ -3841,9 +3841,9 @@ execout(char *s) printf("%s: chdir / failed\n", s); 2452: 85a6 mv a1,s1 2454: 00003517 auipc a0,0x3 - 2458: 78c50513 addi a0,a0,1932 # 5be0 <malloc+0xe5c> + 2458: 79450513 addi a0,a0,1940 # 5be8 <malloc+0xe5a> 245c: 00003097 auipc ra,0x3 - 2460: 870080e7 jalr -1936(ra) # 4ccc <printf> + 2460: 87a080e7 jalr -1926(ra) # 4cd6 <printf> exit(1); 2464: 4505 li a0,1 2466: 00002097 auipc ra,0x2 @@ -3866,19 +3866,19 @@ execout(char *s) 2486: ed45 bnez a0,253e <exitiputtest+0xd0> if(mkdir("iputdir") < 0){ 2488: 00003517 auipc a0,0x3 - 248c: 6e050513 addi a0,a0,1760 # 5b68 <malloc+0xde4> + 248c: 6e850513 addi a0,a0,1768 # 5b70 <malloc+0xde2> 2490: 00002097 auipc ra,0x2 2494: 4d2080e7 jalr 1234(ra) # 4962 <mkdir> 2498: 04054963 bltz a0,24ea <exitiputtest+0x7c> if(chdir("iputdir") < 0){ 249c: 00003517 auipc a0,0x3 - 24a0: 6cc50513 addi a0,a0,1740 # 5b68 <malloc+0xde4> + 24a0: 6d450513 addi a0,a0,1748 # 5b70 <malloc+0xde2> 24a4: 00002097 auipc ra,0x2 24a8: 4c8080e7 jalr 1224(ra) # 496c <chdir> 24ac: 04054d63 bltz a0,2506 <exitiputtest+0x98> if(remove("../iputdir") < 0){ 24b0: 00003517 auipc a0,0x3 - 24b4: 6f850513 addi a0,a0,1784 # 5ba8 <malloc+0xe24> + 24b4: 70050513 addi a0,a0,1792 # 5bb0 <malloc+0xe22> 24b8: 00002097 auipc ra,0x2 24bc: 508080e7 jalr 1288(ra) # 49c0 <remove> 24c0: 06054163 bltz a0,2522 <exitiputtest+0xb4> @@ -3889,9 +3889,9 @@ execout(char *s) printf("%s: fork failed\n", s); 24ce: 85a6 mv a1,s1 24d0: 00003517 auipc a0,0x3 - 24d4: 0a050513 addi a0,a0,160 # 5570 <malloc+0x7ec> + 24d4: 0a850513 addi a0,a0,168 # 5578 <malloc+0x7ea> 24d8: 00002097 auipc ra,0x2 - 24dc: 7f4080e7 jalr 2036(ra) # 4ccc <printf> + 24dc: 7fe080e7 jalr 2046(ra) # 4cd6 <printf> exit(1); 24e0: 4505 li a0,1 24e2: 00002097 auipc ra,0x2 @@ -3899,9 +3899,9 @@ execout(char *s) printf("%s: mkdir failed\n", s); 24ea: 85a6 mv a1,s1 24ec: 00003517 auipc a0,0x3 - 24f0: 68450513 addi a0,a0,1668 # 5b70 <malloc+0xdec> + 24f0: 68c50513 addi a0,a0,1676 # 5b78 <malloc+0xdea> 24f4: 00002097 auipc ra,0x2 - 24f8: 7d8080e7 jalr 2008(ra) # 4ccc <printf> + 24f8: 7e2080e7 jalr 2018(ra) # 4cd6 <printf> exit(1); 24fc: 4505 li a0,1 24fe: 00002097 auipc ra,0x2 @@ -3909,9 +3909,9 @@ execout(char *s) printf("%s: child chdir failed\n", s); 2506: 85a6 mv a1,s1 2508: 00003517 auipc a0,0x3 - 250c: 6f050513 addi a0,a0,1776 # 5bf8 <malloc+0xe74> + 250c: 6f850513 addi a0,a0,1784 # 5c00 <malloc+0xe72> 2510: 00002097 auipc ra,0x2 - 2514: 7bc080e7 jalr 1980(ra) # 4ccc <printf> + 2514: 7c6080e7 jalr 1990(ra) # 4cd6 <printf> exit(1); 2518: 4505 li a0,1 251a: 00002097 auipc ra,0x2 @@ -3919,9 +3919,9 @@ execout(char *s) printf("%s: remove ../iputdir failed\n", s); 2522: 85a6 mv a1,s1 2524: 00003517 auipc a0,0x3 - 2528: 69450513 addi a0,a0,1684 # 5bb8 <malloc+0xe34> + 2528: 69c50513 addi a0,a0,1692 # 5bc0 <malloc+0xe32> 252c: 00002097 auipc ra,0x2 - 2530: 7a0080e7 jalr 1952(ra) # 4ccc <printf> + 2530: 7aa080e7 jalr 1962(ra) # 4cd6 <printf> exit(1); 2534: 4505 li a0,1 2536: 00002097 auipc ra,0x2 @@ -3946,19 +3946,19 @@ execout(char *s) 2562: 892a mv s2,a0 remove("ff"); 2564: 00003517 auipc a0,0x3 - 2568: 6ac50513 addi a0,a0,1708 # 5c10 <malloc+0xe8c> + 2568: 6b450513 addi a0,a0,1716 # 5c18 <malloc+0xe8a> 256c: 00002097 auipc ra,0x2 2570: 454080e7 jalr 1108(ra) # 49c0 <remove> if(mkdir("dd") != 0){ 2574: 00003517 auipc a0,0x3 - 2578: 6a450513 addi a0,a0,1700 # 5c18 <malloc+0xe94> + 2578: 6ac50513 addi a0,a0,1708 # 5c20 <malloc+0xe92> 257c: 00002097 auipc ra,0x2 2580: 3e6080e7 jalr 998(ra) # 4962 <mkdir> 2584: 24051363 bnez a0,27ca <subdir+0x274> fd = open("dd/ff", O_CREATE | O_RDWR); 2588: 20200593 li a1,514 258c: 00003517 auipc a0,0x3 - 2590: 6ac50513 addi a0,a0,1708 # 5c38 <malloc+0xeb4> + 2590: 6b450513 addi a0,a0,1716 # 5c40 <malloc+0xeb2> 2594: 00002097 auipc ra,0x2 2598: 3ba080e7 jalr 954(ra) # 494e <open> 259c: 84aa mv s1,a0 @@ -3967,7 +3967,7 @@ execout(char *s) write(fd, "ff", 2); 25a2: 4609 li a2,2 25a4: 00003597 auipc a1,0x3 - 25a8: 66c58593 addi a1,a1,1644 # 5c10 <malloc+0xe8c> + 25a8: 67458593 addi a1,a1,1652 # 5c18 <malloc+0xe8a> 25ac: 00002097 auipc ra,0x2 25b0: 37e080e7 jalr 894(ra) # 492a <write> close(fd); @@ -3976,20 +3976,20 @@ execout(char *s) 25ba: 37e080e7 jalr 894(ra) # 4934 <close> if(remove("dd") >= 0){ 25be: 00003517 auipc a0,0x3 - 25c2: 65a50513 addi a0,a0,1626 # 5c18 <malloc+0xe94> + 25c2: 66250513 addi a0,a0,1634 # 5c20 <malloc+0xe92> 25c6: 00002097 auipc ra,0x2 25ca: 3fa080e7 jalr 1018(ra) # 49c0 <remove> 25ce: 22055a63 bgez a0,2802 <subdir+0x2ac> if(mkdir("/dd/dd") != 0){ 25d2: 00003517 auipc a0,0x3 - 25d6: 6be50513 addi a0,a0,1726 # 5c90 <malloc+0xf0c> + 25d6: 6c650513 addi a0,a0,1734 # 5c98 <malloc+0xf0a> 25da: 00002097 auipc ra,0x2 25de: 388080e7 jalr 904(ra) # 4962 <mkdir> 25e2: 22051e63 bnez a0,281e <subdir+0x2c8> fd = open("dd/dd/ff", O_CREATE | O_RDWR); 25e6: 20200593 li a1,514 25ea: 00003517 auipc a0,0x3 - 25ee: 6ce50513 addi a0,a0,1742 # 5cb8 <malloc+0xf34> + 25ee: 6d650513 addi a0,a0,1750 # 5cc0 <malloc+0xf32> 25f2: 00002097 auipc ra,0x2 25f6: 35c080e7 jalr 860(ra) # 494e <open> 25fa: 84aa mv s1,a0 @@ -3998,7 +3998,7 @@ execout(char *s) write(fd, "FF", 2); 2600: 4609 li a2,2 2602: 00003597 auipc a1,0x3 - 2606: 6e658593 addi a1,a1,1766 # 5ce8 <malloc+0xf64> + 2606: 6ee58593 addi a1,a1,1774 # 5cf0 <malloc+0xf62> 260a: 00002097 auipc ra,0x2 260e: 320080e7 jalr 800(ra) # 492a <write> close(fd); @@ -4008,7 +4008,7 @@ execout(char *s) fd = open("dd/dd/../ff", 0); 261c: 4581 li a1,0 261e: 00003517 auipc a0,0x3 - 2622: 6d250513 addi a0,a0,1746 # 5cf0 <malloc+0xf6c> + 2622: 6da50513 addi a0,a0,1754 # 5cf8 <malloc+0xf6a> 2626: 00002097 auipc ra,0x2 262a: 328080e7 jalr 808(ra) # 494e <open> 262e: 84aa mv s1,a0 @@ -4018,14 +4018,14 @@ execout(char *s) 2634: 6609 lui a2,0x2 2636: 80060613 addi a2,a2,-2048 # 1800 <forkfork+0x42> 263a: 00008597 auipc a1,0x8 - 263e: 25e58593 addi a1,a1,606 # a898 <buf> + 263e: 26658593 addi a1,a1,614 # a8a0 <buf> 2642: 00002097 auipc ra,0x2 2646: 2de080e7 jalr 734(ra) # 4920 <read> if(cc != 2 || buf[0] != 'f'){ 264a: 4789 li a5,2 264c: 22f51363 bne a0,a5,2872 <subdir+0x31c> 2650: 00008717 auipc a4,0x8 - 2654: 24874703 lbu a4,584(a4) # a898 <buf> + 2654: 25074703 lbu a4,592(a4) # a8a0 <buf> 2658: 06600793 li a5,102 265c: 20f71b63 bne a4,a5,2872 <subdir+0x31c> close(fd); @@ -4034,104 +4034,104 @@ execout(char *s) 2666: 2d2080e7 jalr 722(ra) # 4934 <close> if(remove("dd/dd/ff") != 0){ 266a: 00003517 auipc a0,0x3 - 266e: 64e50513 addi a0,a0,1614 # 5cb8 <malloc+0xf34> + 266e: 65650513 addi a0,a0,1622 # 5cc0 <malloc+0xf32> 2672: 00002097 auipc ra,0x2 2676: 34e080e7 jalr 846(ra) # 49c0 <remove> 267a: 20051a63 bnez a0,288e <subdir+0x338> if(open("dd/dd/ff", O_RDONLY) >= 0){ 267e: 4581 li a1,0 2680: 00003517 auipc a0,0x3 - 2684: 63850513 addi a0,a0,1592 # 5cb8 <malloc+0xf34> + 2684: 64050513 addi a0,a0,1600 # 5cc0 <malloc+0xf32> 2688: 00002097 auipc ra,0x2 268c: 2c6080e7 jalr 710(ra) # 494e <open> 2690: 20055d63 bgez a0,28aa <subdir+0x354> if(chdir("dd") != 0){ 2694: 00003517 auipc a0,0x3 - 2698: 58450513 addi a0,a0,1412 # 5c18 <malloc+0xe94> + 2698: 58c50513 addi a0,a0,1420 # 5c20 <malloc+0xe92> 269c: 00002097 auipc ra,0x2 26a0: 2d0080e7 jalr 720(ra) # 496c <chdir> 26a4: 22051163 bnez a0,28c6 <subdir+0x370> if(chdir("dd/../../dd") != 0){ 26a8: 00003517 auipc a0,0x3 - 26ac: 6f850513 addi a0,a0,1784 # 5da0 <malloc+0x101c> + 26ac: 70050513 addi a0,a0,1792 # 5da8 <malloc+0x101a> 26b0: 00002097 auipc ra,0x2 26b4: 2bc080e7 jalr 700(ra) # 496c <chdir> 26b8: 22051563 bnez a0,28e2 <subdir+0x38c> if(chdir("dd/../../../dd") != 0){ 26bc: 00003517 auipc a0,0x3 - 26c0: 71450513 addi a0,a0,1812 # 5dd0 <malloc+0x104c> + 26c0: 71c50513 addi a0,a0,1820 # 5dd8 <malloc+0x104a> 26c4: 00002097 auipc ra,0x2 26c8: 2a8080e7 jalr 680(ra) # 496c <chdir> 26cc: 22051963 bnez a0,28fe <subdir+0x3a8> if(chdir("./..") != 0){ 26d0: 00003517 auipc a0,0x3 - 26d4: 73050513 addi a0,a0,1840 # 5e00 <malloc+0x107c> + 26d4: 73850513 addi a0,a0,1848 # 5e08 <malloc+0x107a> 26d8: 00002097 auipc ra,0x2 26dc: 294080e7 jalr 660(ra) # 496c <chdir> 26e0: 22051d63 bnez a0,291a <subdir+0x3c4> if(open("dd/dd/ff", O_RDONLY) >= 0){ 26e4: 4581 li a1,0 26e6: 00003517 auipc a0,0x3 - 26ea: 5d250513 addi a0,a0,1490 # 5cb8 <malloc+0xf34> + 26ea: 5da50513 addi a0,a0,1498 # 5cc0 <malloc+0xf32> 26ee: 00002097 auipc ra,0x2 26f2: 260080e7 jalr 608(ra) # 494e <open> 26f6: 24055063 bgez a0,2936 <subdir+0x3e0> if(open("dd/ff/ff", O_CREATE|O_RDWR) >= 0){ 26fa: 20200593 li a1,514 26fe: 00003517 auipc a0,0x3 - 2702: 75250513 addi a0,a0,1874 # 5e50 <malloc+0x10cc> + 2702: 75a50513 addi a0,a0,1882 # 5e58 <malloc+0x10ca> 2706: 00002097 auipc ra,0x2 270a: 248080e7 jalr 584(ra) # 494e <open> 270e: 24055263 bgez a0,2952 <subdir+0x3fc> if(open("dd/xx/ff", O_CREATE|O_RDWR) >= 0){ 2712: 20200593 li a1,514 2716: 00003517 auipc a0,0x3 - 271a: 76a50513 addi a0,a0,1898 # 5e80 <malloc+0x10fc> + 271a: 77250513 addi a0,a0,1906 # 5e88 <malloc+0x10fa> 271e: 00002097 auipc ra,0x2 2722: 230080e7 jalr 560(ra) # 494e <open> 2726: 24055463 bgez a0,296e <subdir+0x418> if(open("dd", O_CREATE) >= 0){ 272a: 20000593 li a1,512 272e: 00003517 auipc a0,0x3 - 2732: 4ea50513 addi a0,a0,1258 # 5c18 <malloc+0xe94> + 2732: 4f250513 addi a0,a0,1266 # 5c20 <malloc+0xe92> 2736: 00002097 auipc ra,0x2 273a: 218080e7 jalr 536(ra) # 494e <open> 273e: 24055663 bgez a0,298a <subdir+0x434> if(open("dd", O_RDWR) >= 0){ 2742: 4589 li a1,2 2744: 00003517 auipc a0,0x3 - 2748: 4d450513 addi a0,a0,1236 # 5c18 <malloc+0xe94> + 2748: 4dc50513 addi a0,a0,1244 # 5c20 <malloc+0xe92> 274c: 00002097 auipc ra,0x2 2750: 202080e7 jalr 514(ra) # 494e <open> 2754: 24055963 bgez a0,29a6 <subdir+0x450> if(open("dd", O_WRONLY) >= 0){ 2758: 4585 li a1,1 275a: 00003517 auipc a0,0x3 - 275e: 4be50513 addi a0,a0,1214 # 5c18 <malloc+0xe94> + 275e: 4c650513 addi a0,a0,1222 # 5c20 <malloc+0xe92> 2762: 00002097 auipc ra,0x2 2766: 1ec080e7 jalr 492(ra) # 494e <open> 276a: 24055c63 bgez a0,29c2 <subdir+0x46c> if(remove("dd/ff") != 0){ 276e: 00003517 auipc a0,0x3 - 2772: 4ca50513 addi a0,a0,1226 # 5c38 <malloc+0xeb4> + 2772: 4d250513 addi a0,a0,1234 # 5c40 <malloc+0xeb2> 2776: 00002097 auipc ra,0x2 277a: 24a080e7 jalr 586(ra) # 49c0 <remove> 277e: 26051063 bnez a0,29de <subdir+0x488> if(remove("dd") == 0){ 2782: 00003517 auipc a0,0x3 - 2786: 49650513 addi a0,a0,1174 # 5c18 <malloc+0xe94> + 2786: 49e50513 addi a0,a0,1182 # 5c20 <malloc+0xe92> 278a: 00002097 auipc ra,0x2 278e: 236080e7 jalr 566(ra) # 49c0 <remove> 2792: 26050463 beqz a0,29fa <subdir+0x4a4> if(remove("dd/dd") < 0){ 2796: 00003517 auipc a0,0x3 - 279a: 7c250513 addi a0,a0,1986 # 5f58 <malloc+0x11d4> + 279a: 7ca50513 addi a0,a0,1994 # 5f60 <malloc+0x11d2> 279e: 00002097 auipc ra,0x2 27a2: 222080e7 jalr 546(ra) # 49c0 <remove> 27a6: 26054863 bltz a0,2a16 <subdir+0x4c0> if(remove("dd") < 0){ 27aa: 00003517 auipc a0,0x3 - 27ae: 46e50513 addi a0,a0,1134 # 5c18 <malloc+0xe94> + 27ae: 47650513 addi a0,a0,1142 # 5c20 <malloc+0xe92> 27b2: 00002097 auipc ra,0x2 27b6: 20e080e7 jalr 526(ra) # 49c0 <remove> 27ba: 26054c63 bltz a0,2a32 <subdir+0x4dc> @@ -4145,9 +4145,9 @@ execout(char *s) printf("%s: mkdir dd failed\n", s); 27ca: 85ca mv a1,s2 27cc: 00003517 auipc a0,0x3 - 27d0: 45450513 addi a0,a0,1108 # 5c20 <malloc+0xe9c> + 27d0: 45c50513 addi a0,a0,1116 # 5c28 <malloc+0xe9a> 27d4: 00002097 auipc ra,0x2 - 27d8: 4f8080e7 jalr 1272(ra) # 4ccc <printf> + 27d8: 502080e7 jalr 1282(ra) # 4cd6 <printf> exit(1); 27dc: 4505 li a0,1 27de: 00002097 auipc ra,0x2 @@ -4155,9 +4155,9 @@ execout(char *s) printf("%s: create dd/ff failed\n", s); 27e6: 85ca mv a1,s2 27e8: 00003517 auipc a0,0x3 - 27ec: 45850513 addi a0,a0,1112 # 5c40 <malloc+0xebc> + 27ec: 46050513 addi a0,a0,1120 # 5c48 <malloc+0xeba> 27f0: 00002097 auipc ra,0x2 - 27f4: 4dc080e7 jalr 1244(ra) # 4ccc <printf> + 27f4: 4e6080e7 jalr 1254(ra) # 4cd6 <printf> exit(1); 27f8: 4505 li a0,1 27fa: 00002097 auipc ra,0x2 @@ -4165,9 +4165,9 @@ execout(char *s) printf("%s: remove dd (non-empty dir) succeeded!\n", s); 2802: 85ca mv a1,s2 2804: 00003517 auipc a0,0x3 - 2808: 45c50513 addi a0,a0,1116 # 5c60 <malloc+0xedc> + 2808: 46450513 addi a0,a0,1124 # 5c68 <malloc+0xeda> 280c: 00002097 auipc ra,0x2 - 2810: 4c0080e7 jalr 1216(ra) # 4ccc <printf> + 2810: 4ca080e7 jalr 1226(ra) # 4cd6 <printf> exit(1); 2814: 4505 li a0,1 2816: 00002097 auipc ra,0x2 @@ -4175,9 +4175,9 @@ execout(char *s) printf("subdir mkdir dd/dd failed\n", s); 281e: 85ca mv a1,s2 2820: 00003517 auipc a0,0x3 - 2824: 47850513 addi a0,a0,1144 # 5c98 <malloc+0xf14> + 2824: 48050513 addi a0,a0,1152 # 5ca0 <malloc+0xf12> 2828: 00002097 auipc ra,0x2 - 282c: 4a4080e7 jalr 1188(ra) # 4ccc <printf> + 282c: 4ae080e7 jalr 1198(ra) # 4cd6 <printf> exit(1); 2830: 4505 li a0,1 2832: 00002097 auipc ra,0x2 @@ -4185,9 +4185,9 @@ execout(char *s) printf("%s: create dd/dd/ff failed\n", s); 283a: 85ca mv a1,s2 283c: 00003517 auipc a0,0x3 - 2840: 48c50513 addi a0,a0,1164 # 5cc8 <malloc+0xf44> + 2840: 49450513 addi a0,a0,1172 # 5cd0 <malloc+0xf42> 2844: 00002097 auipc ra,0x2 - 2848: 488080e7 jalr 1160(ra) # 4ccc <printf> + 2848: 492080e7 jalr 1170(ra) # 4cd6 <printf> exit(1); 284c: 4505 li a0,1 284e: 00002097 auipc ra,0x2 @@ -4195,9 +4195,9 @@ execout(char *s) printf("%s: open dd/dd/../ff failed\n", s); 2856: 85ca mv a1,s2 2858: 00003517 auipc a0,0x3 - 285c: 4a850513 addi a0,a0,1192 # 5d00 <malloc+0xf7c> + 285c: 4b050513 addi a0,a0,1200 # 5d08 <malloc+0xf7a> 2860: 00002097 auipc ra,0x2 - 2864: 46c080e7 jalr 1132(ra) # 4ccc <printf> + 2864: 476080e7 jalr 1142(ra) # 4cd6 <printf> exit(1); 2868: 4505 li a0,1 286a: 00002097 auipc ra,0x2 @@ -4205,9 +4205,9 @@ execout(char *s) printf("%s: dd/dd/../ff wrong content\n", s); 2872: 85ca mv a1,s2 2874: 00003517 auipc a0,0x3 - 2878: 4ac50513 addi a0,a0,1196 # 5d20 <malloc+0xf9c> + 2878: 4b450513 addi a0,a0,1204 # 5d28 <malloc+0xf9a> 287c: 00002097 auipc ra,0x2 - 2880: 450080e7 jalr 1104(ra) # 4ccc <printf> + 2880: 45a080e7 jalr 1114(ra) # 4cd6 <printf> exit(1); 2884: 4505 li a0,1 2886: 00002097 auipc ra,0x2 @@ -4215,9 +4215,9 @@ execout(char *s) printf("%s: remove dd/dd/ff failed\n", s); 288e: 85ca mv a1,s2 2890: 00003517 auipc a0,0x3 - 2894: 4b050513 addi a0,a0,1200 # 5d40 <malloc+0xfbc> + 2894: 4b850513 addi a0,a0,1208 # 5d48 <malloc+0xfba> 2898: 00002097 auipc ra,0x2 - 289c: 434080e7 jalr 1076(ra) # 4ccc <printf> + 289c: 43e080e7 jalr 1086(ra) # 4cd6 <printf> exit(1); 28a0: 4505 li a0,1 28a2: 00002097 auipc ra,0x2 @@ -4225,9 +4225,9 @@ execout(char *s) printf("%s: open (removeed) dd/dd/ff succeeded\n", s); 28aa: 85ca mv a1,s2 28ac: 00003517 auipc a0,0x3 - 28b0: 4b450513 addi a0,a0,1204 # 5d60 <malloc+0xfdc> + 28b0: 4bc50513 addi a0,a0,1212 # 5d68 <malloc+0xfda> 28b4: 00002097 auipc ra,0x2 - 28b8: 418080e7 jalr 1048(ra) # 4ccc <printf> + 28b8: 422080e7 jalr 1058(ra) # 4cd6 <printf> exit(1); 28bc: 4505 li a0,1 28be: 00002097 auipc ra,0x2 @@ -4235,9 +4235,9 @@ execout(char *s) printf("%s: chdir dd failed\n", s); 28c6: 85ca mv a1,s2 28c8: 00003517 auipc a0,0x3 - 28cc: 4c050513 addi a0,a0,1216 # 5d88 <malloc+0x1004> + 28cc: 4c850513 addi a0,a0,1224 # 5d90 <malloc+0x1002> 28d0: 00002097 auipc ra,0x2 - 28d4: 3fc080e7 jalr 1020(ra) # 4ccc <printf> + 28d4: 406080e7 jalr 1030(ra) # 4cd6 <printf> exit(1); 28d8: 4505 li a0,1 28da: 00002097 auipc ra,0x2 @@ -4245,9 +4245,9 @@ execout(char *s) printf("%s: chdir dd/../../dd failed\n", s); 28e2: 85ca mv a1,s2 28e4: 00003517 auipc a0,0x3 - 28e8: 4cc50513 addi a0,a0,1228 # 5db0 <malloc+0x102c> + 28e8: 4d450513 addi a0,a0,1236 # 5db8 <malloc+0x102a> 28ec: 00002097 auipc ra,0x2 - 28f0: 3e0080e7 jalr 992(ra) # 4ccc <printf> + 28f0: 3ea080e7 jalr 1002(ra) # 4cd6 <printf> exit(1); 28f4: 4505 li a0,1 28f6: 00002097 auipc ra,0x2 @@ -4255,9 +4255,9 @@ execout(char *s) printf("chdir dd/../../dd failed\n", s); 28fe: 85ca mv a1,s2 2900: 00003517 auipc a0,0x3 - 2904: 4e050513 addi a0,a0,1248 # 5de0 <malloc+0x105c> + 2904: 4e850513 addi a0,a0,1256 # 5de8 <malloc+0x105a> 2908: 00002097 auipc ra,0x2 - 290c: 3c4080e7 jalr 964(ra) # 4ccc <printf> + 290c: 3ce080e7 jalr 974(ra) # 4cd6 <printf> exit(1); 2910: 4505 li a0,1 2912: 00002097 auipc ra,0x2 @@ -4265,9 +4265,9 @@ execout(char *s) printf("%s: chdir ./.. failed\n", s); 291a: 85ca mv a1,s2 291c: 00003517 auipc a0,0x3 - 2920: 4ec50513 addi a0,a0,1260 # 5e08 <malloc+0x1084> + 2920: 4f450513 addi a0,a0,1268 # 5e10 <malloc+0x1082> 2924: 00002097 auipc ra,0x2 - 2928: 3a8080e7 jalr 936(ra) # 4ccc <printf> + 2928: 3b2080e7 jalr 946(ra) # 4cd6 <printf> exit(1); 292c: 4505 li a0,1 292e: 00002097 auipc ra,0x2 @@ -4275,9 +4275,9 @@ execout(char *s) printf("%s: open (removeed) dd/dd/ff succeeded!\n", s); 2936: 85ca mv a1,s2 2938: 00003517 auipc a0,0x3 - 293c: 4e850513 addi a0,a0,1256 # 5e20 <malloc+0x109c> + 293c: 4f050513 addi a0,a0,1264 # 5e28 <malloc+0x109a> 2940: 00002097 auipc ra,0x2 - 2944: 38c080e7 jalr 908(ra) # 4ccc <printf> + 2944: 396080e7 jalr 918(ra) # 4cd6 <printf> exit(1); 2948: 4505 li a0,1 294a: 00002097 auipc ra,0x2 @@ -4285,9 +4285,9 @@ execout(char *s) printf("%s: create dd/ff/ff succeeded!\n", s); 2952: 85ca mv a1,s2 2954: 00003517 auipc a0,0x3 - 2958: 50c50513 addi a0,a0,1292 # 5e60 <malloc+0x10dc> + 2958: 51450513 addi a0,a0,1300 # 5e68 <malloc+0x10da> 295c: 00002097 auipc ra,0x2 - 2960: 370080e7 jalr 880(ra) # 4ccc <printf> + 2960: 37a080e7 jalr 890(ra) # 4cd6 <printf> exit(1); 2964: 4505 li a0,1 2966: 00002097 auipc ra,0x2 @@ -4295,9 +4295,9 @@ execout(char *s) printf("%s: create dd/xx/ff succeeded!\n", s); 296e: 85ca mv a1,s2 2970: 00003517 auipc a0,0x3 - 2974: 52050513 addi a0,a0,1312 # 5e90 <malloc+0x110c> + 2974: 52850513 addi a0,a0,1320 # 5e98 <malloc+0x110a> 2978: 00002097 auipc ra,0x2 - 297c: 354080e7 jalr 852(ra) # 4ccc <printf> + 297c: 35e080e7 jalr 862(ra) # 4cd6 <printf> exit(1); 2980: 4505 li a0,1 2982: 00002097 auipc ra,0x2 @@ -4305,9 +4305,9 @@ execout(char *s) printf("%s: create dd succeeded!\n", s); 298a: 85ca mv a1,s2 298c: 00003517 auipc a0,0x3 - 2990: 52450513 addi a0,a0,1316 # 5eb0 <malloc+0x112c> + 2990: 52c50513 addi a0,a0,1324 # 5eb8 <malloc+0x112a> 2994: 00002097 auipc ra,0x2 - 2998: 338080e7 jalr 824(ra) # 4ccc <printf> + 2998: 342080e7 jalr 834(ra) # 4cd6 <printf> exit(1); 299c: 4505 li a0,1 299e: 00002097 auipc ra,0x2 @@ -4315,9 +4315,9 @@ execout(char *s) printf("%s: open dd rdwr succeeded!\n", s); 29a6: 85ca mv a1,s2 29a8: 00003517 auipc a0,0x3 - 29ac: 52850513 addi a0,a0,1320 # 5ed0 <malloc+0x114c> + 29ac: 53050513 addi a0,a0,1328 # 5ed8 <malloc+0x114a> 29b0: 00002097 auipc ra,0x2 - 29b4: 31c080e7 jalr 796(ra) # 4ccc <printf> + 29b4: 326080e7 jalr 806(ra) # 4cd6 <printf> exit(1); 29b8: 4505 li a0,1 29ba: 00002097 auipc ra,0x2 @@ -4325,9 +4325,9 @@ execout(char *s) printf("%s: open dd wronly succeeded!\n", s); 29c2: 85ca mv a1,s2 29c4: 00003517 auipc a0,0x3 - 29c8: 52c50513 addi a0,a0,1324 # 5ef0 <malloc+0x116c> + 29c8: 53450513 addi a0,a0,1332 # 5ef8 <malloc+0x116a> 29cc: 00002097 auipc ra,0x2 - 29d0: 300080e7 jalr 768(ra) # 4ccc <printf> + 29d0: 30a080e7 jalr 778(ra) # 4cd6 <printf> exit(1); 29d4: 4505 li a0,1 29d6: 00002097 auipc ra,0x2 @@ -4335,9 +4335,9 @@ execout(char *s) printf("%s: remove dd/ff failed\n", s); 29de: 85ca mv a1,s2 29e0: 00003517 auipc a0,0x3 - 29e4: 53050513 addi a0,a0,1328 # 5f10 <malloc+0x118c> + 29e4: 53850513 addi a0,a0,1336 # 5f18 <malloc+0x118a> 29e8: 00002097 auipc ra,0x2 - 29ec: 2e4080e7 jalr 740(ra) # 4ccc <printf> + 29ec: 2ee080e7 jalr 750(ra) # 4cd6 <printf> exit(1); 29f0: 4505 li a0,1 29f2: 00002097 auipc ra,0x2 @@ -4345,9 +4345,9 @@ execout(char *s) printf("%s: remove non-empty dd succeeded!\n", s); 29fa: 85ca mv a1,s2 29fc: 00003517 auipc a0,0x3 - 2a00: 53450513 addi a0,a0,1332 # 5f30 <malloc+0x11ac> + 2a00: 53c50513 addi a0,a0,1340 # 5f38 <malloc+0x11aa> 2a04: 00002097 auipc ra,0x2 - 2a08: 2c8080e7 jalr 712(ra) # 4ccc <printf> + 2a08: 2d2080e7 jalr 722(ra) # 4cd6 <printf> exit(1); 2a0c: 4505 li a0,1 2a0e: 00002097 auipc ra,0x2 @@ -4355,9 +4355,9 @@ execout(char *s) printf("%s: remove dd/dd failed\n", s); 2a16: 85ca mv a1,s2 2a18: 00003517 auipc a0,0x3 - 2a1c: 54850513 addi a0,a0,1352 # 5f60 <malloc+0x11dc> + 2a1c: 55050513 addi a0,a0,1360 # 5f68 <malloc+0x11da> 2a20: 00002097 auipc ra,0x2 - 2a24: 2ac080e7 jalr 684(ra) # 4ccc <printf> + 2a24: 2b6080e7 jalr 694(ra) # 4cd6 <printf> exit(1); 2a28: 4505 li a0,1 2a2a: 00002097 auipc ra,0x2 @@ -4365,9 +4365,9 @@ execout(char *s) printf("%s: remove dd failed\n", s); 2a32: 85ca mv a1,s2 2a34: 00003517 auipc a0,0x3 - 2a38: 54c50513 addi a0,a0,1356 # 5f80 <malloc+0x11fc> + 2a38: 55450513 addi a0,a0,1364 # 5f88 <malloc+0x11fa> 2a3c: 00002097 auipc ra,0x2 - 2a40: 290080e7 jalr 656(ra) # 4ccc <printf> + 2a40: 29a080e7 jalr 666(ra) # 4cd6 <printf> exit(1); 2a44: 4505 li a0,1 2a46: 00002097 auipc ra,0x2 @@ -4383,49 +4383,49 @@ execout(char *s) 2a58: 84aa mv s1,a0 if(mkdir("dots") != 0){ 2a5a: 00003517 auipc a0,0x3 - 2a5e: 53e50513 addi a0,a0,1342 # 5f98 <malloc+0x1214> + 2a5e: 54650513 addi a0,a0,1350 # 5fa0 <malloc+0x1212> 2a62: 00002097 auipc ra,0x2 2a66: f00080e7 jalr -256(ra) # 4962 <mkdir> 2a6a: e549 bnez a0,2af4 <rmdot+0xa6> if(chdir("dots") != 0){ 2a6c: 00003517 auipc a0,0x3 - 2a70: 52c50513 addi a0,a0,1324 # 5f98 <malloc+0x1214> + 2a70: 53450513 addi a0,a0,1332 # 5fa0 <malloc+0x1212> 2a74: 00002097 auipc ra,0x2 2a78: ef8080e7 jalr -264(ra) # 496c <chdir> 2a7c: e951 bnez a0,2b10 <rmdot+0xc2> if(remove(".") == 0){ 2a7e: 00003517 auipc a0,0x3 - 2a82: 55250513 addi a0,a0,1362 # 5fd0 <malloc+0x124c> + 2a82: 55a50513 addi a0,a0,1370 # 5fd8 <malloc+0x124a> 2a86: 00002097 auipc ra,0x2 2a8a: f3a080e7 jalr -198(ra) # 49c0 <remove> 2a8e: cd59 beqz a0,2b2c <rmdot+0xde> if(remove("..") == 0){ 2a90: 00003517 auipc a0,0x3 - 2a94: 56050513 addi a0,a0,1376 # 5ff0 <malloc+0x126c> + 2a94: 56850513 addi a0,a0,1384 # 5ff8 <malloc+0x126a> 2a98: 00002097 auipc ra,0x2 2a9c: f28080e7 jalr -216(ra) # 49c0 <remove> 2aa0: c545 beqz a0,2b48 <rmdot+0xfa> if(chdir("/") != 0){ 2aa2: 00003517 auipc a0,0x3 - 2aa6: 13650513 addi a0,a0,310 # 5bd8 <malloc+0xe54> + 2aa6: 13e50513 addi a0,a0,318 # 5be0 <malloc+0xe52> 2aaa: 00002097 auipc ra,0x2 2aae: ec2080e7 jalr -318(ra) # 496c <chdir> 2ab2: e94d bnez a0,2b64 <rmdot+0x116> if(remove("dots/.") == 0){ 2ab4: 00003517 auipc a0,0x3 - 2ab8: 55c50513 addi a0,a0,1372 # 6010 <malloc+0x128c> + 2ab8: 56450513 addi a0,a0,1380 # 6018 <malloc+0x128a> 2abc: 00002097 auipc ra,0x2 2ac0: f04080e7 jalr -252(ra) # 49c0 <remove> 2ac4: cd55 beqz a0,2b80 <rmdot+0x132> if(remove("dots/..") == 0){ 2ac6: 00003517 auipc a0,0x3 - 2aca: 57250513 addi a0,a0,1394 # 6038 <malloc+0x12b4> + 2aca: 57a50513 addi a0,a0,1402 # 6040 <malloc+0x12b2> 2ace: 00002097 auipc ra,0x2 2ad2: ef2080e7 jalr -270(ra) # 49c0 <remove> 2ad6: c179 beqz a0,2b9c <rmdot+0x14e> if(remove("dots") != 0){ 2ad8: 00003517 auipc a0,0x3 - 2adc: 4c050513 addi a0,a0,1216 # 5f98 <malloc+0x1214> + 2adc: 4c850513 addi a0,a0,1224 # 5fa0 <malloc+0x1212> 2ae0: 00002097 auipc ra,0x2 2ae4: ee0080e7 jalr -288(ra) # 49c0 <remove> 2ae8: e961 bnez a0,2bb8 <rmdot+0x16a> @@ -4438,9 +4438,9 @@ execout(char *s) printf("%s: mkdir dots failed\n", s); 2af4: 85a6 mv a1,s1 2af6: 00003517 auipc a0,0x3 - 2afa: 4aa50513 addi a0,a0,1194 # 5fa0 <malloc+0x121c> + 2afa: 4b250513 addi a0,a0,1202 # 5fa8 <malloc+0x121a> 2afe: 00002097 auipc ra,0x2 - 2b02: 1ce080e7 jalr 462(ra) # 4ccc <printf> + 2b02: 1d8080e7 jalr 472(ra) # 4cd6 <printf> exit(1); 2b06: 4505 li a0,1 2b08: 00002097 auipc ra,0x2 @@ -4448,9 +4448,9 @@ execout(char *s) printf("%s: chdir dots failed\n", s); 2b10: 85a6 mv a1,s1 2b12: 00003517 auipc a0,0x3 - 2b16: 4a650513 addi a0,a0,1190 # 5fb8 <malloc+0x1234> + 2b16: 4ae50513 addi a0,a0,1198 # 5fc0 <malloc+0x1232> 2b1a: 00002097 auipc ra,0x2 - 2b1e: 1b2080e7 jalr 434(ra) # 4ccc <printf> + 2b1e: 1bc080e7 jalr 444(ra) # 4cd6 <printf> exit(1); 2b22: 4505 li a0,1 2b24: 00002097 auipc ra,0x2 @@ -4458,9 +4458,9 @@ execout(char *s) printf("%s: rm . worked!\n", s); 2b2c: 85a6 mv a1,s1 2b2e: 00003517 auipc a0,0x3 - 2b32: 4aa50513 addi a0,a0,1194 # 5fd8 <malloc+0x1254> + 2b32: 4b250513 addi a0,a0,1202 # 5fe0 <malloc+0x1252> 2b36: 00002097 auipc ra,0x2 - 2b3a: 196080e7 jalr 406(ra) # 4ccc <printf> + 2b3a: 1a0080e7 jalr 416(ra) # 4cd6 <printf> exit(1); 2b3e: 4505 li a0,1 2b40: 00002097 auipc ra,0x2 @@ -4468,9 +4468,9 @@ execout(char *s) printf("%s: rm .. worked!\n", s); 2b48: 85a6 mv a1,s1 2b4a: 00003517 auipc a0,0x3 - 2b4e: 4ae50513 addi a0,a0,1198 # 5ff8 <malloc+0x1274> + 2b4e: 4b650513 addi a0,a0,1206 # 6000 <malloc+0x1272> 2b52: 00002097 auipc ra,0x2 - 2b56: 17a080e7 jalr 378(ra) # 4ccc <printf> + 2b56: 184080e7 jalr 388(ra) # 4cd6 <printf> exit(1); 2b5a: 4505 li a0,1 2b5c: 00002097 auipc ra,0x2 @@ -4478,9 +4478,9 @@ execout(char *s) printf("%s: chdir / failed\n", s); 2b64: 85a6 mv a1,s1 2b66: 00003517 auipc a0,0x3 - 2b6a: 07a50513 addi a0,a0,122 # 5be0 <malloc+0xe5c> + 2b6a: 08250513 addi a0,a0,130 # 5be8 <malloc+0xe5a> 2b6e: 00002097 auipc ra,0x2 - 2b72: 15e080e7 jalr 350(ra) # 4ccc <printf> + 2b72: 168080e7 jalr 360(ra) # 4cd6 <printf> exit(1); 2b76: 4505 li a0,1 2b78: 00002097 auipc ra,0x2 @@ -4488,9 +4488,9 @@ execout(char *s) printf("%s: remove dots/. worked!\n", s); 2b80: 85a6 mv a1,s1 2b82: 00003517 auipc a0,0x3 - 2b86: 49650513 addi a0,a0,1174 # 6018 <malloc+0x1294> + 2b86: 49e50513 addi a0,a0,1182 # 6020 <malloc+0x1292> 2b8a: 00002097 auipc ra,0x2 - 2b8e: 142080e7 jalr 322(ra) # 4ccc <printf> + 2b8e: 14c080e7 jalr 332(ra) # 4cd6 <printf> exit(1); 2b92: 4505 li a0,1 2b94: 00002097 auipc ra,0x2 @@ -4498,9 +4498,9 @@ execout(char *s) printf("%s: remove dots/.. worked!\n", s); 2b9c: 85a6 mv a1,s1 2b9e: 00003517 auipc a0,0x3 - 2ba2: 4a250513 addi a0,a0,1186 # 6040 <malloc+0x12bc> + 2ba2: 4aa50513 addi a0,a0,1194 # 6048 <malloc+0x12ba> 2ba6: 00002097 auipc ra,0x2 - 2baa: 126080e7 jalr 294(ra) # 4ccc <printf> + 2baa: 130080e7 jalr 304(ra) # 4cd6 <printf> exit(1); 2bae: 4505 li a0,1 2bb0: 00002097 auipc ra,0x2 @@ -4508,9 +4508,9 @@ execout(char *s) printf("%s: remove dots failed!\n", s); 2bb8: 85a6 mv a1,s1 2bba: 00003517 auipc a0,0x3 - 2bbe: 4a650513 addi a0,a0,1190 # 6060 <malloc+0x12dc> + 2bbe: 4ae50513 addi a0,a0,1198 # 6068 <malloc+0x12da> 2bc2: 00002097 auipc ra,0x2 - 2bc6: 10a080e7 jalr 266(ra) # 4ccc <printf> + 2bc6: 114080e7 jalr 276(ra) # 4cd6 <printf> exit(1); 2bca: 4505 li a0,1 2bcc: 00002097 auipc ra,0x2 @@ -4528,7 +4528,7 @@ execout(char *s) fd = open("dirfile", O_CREATE); 2be2: 20000593 li a1,512 2be6: 00003517 auipc a0,0x3 - 2bea: 49a50513 addi a0,a0,1178 # 6080 <malloc+0x12fc> + 2bea: 4a250513 addi a0,a0,1186 # 6088 <malloc+0x12fa> 2bee: 00002097 auipc ra,0x2 2bf2: d60080e7 jalr -672(ra) # 494e <open> if(fd < 0){ @@ -4538,14 +4538,14 @@ execout(char *s) 2bfe: d3a080e7 jalr -710(ra) # 4934 <close> if(chdir("dirfile") == 0){ 2c02: 00003517 auipc a0,0x3 - 2c06: 47e50513 addi a0,a0,1150 # 6080 <malloc+0x12fc> + 2c06: 48650513 addi a0,a0,1158 # 6088 <malloc+0x12fa> 2c0a: 00002097 auipc ra,0x2 2c0e: d62080e7 jalr -670(ra) # 496c <chdir> 2c12: cd69 beqz a0,2cec <dirfile+0x118> fd = open("dirfile/xx", 0); 2c14: 4581 li a1,0 2c16: 00003517 auipc a0,0x3 - 2c1a: 4b250513 addi a0,a0,1202 # 60c8 <malloc+0x1344> + 2c1a: 4ba50513 addi a0,a0,1210 # 60d0 <malloc+0x1342> 2c1e: 00002097 auipc ra,0x2 2c22: d30080e7 jalr -720(ra) # 494e <open> if(fd >= 0){ @@ -4553,33 +4553,33 @@ execout(char *s) fd = open("dirfile/xx", O_CREATE); 2c2a: 20000593 li a1,512 2c2e: 00003517 auipc a0,0x3 - 2c32: 49a50513 addi a0,a0,1178 # 60c8 <malloc+0x1344> + 2c32: 4a250513 addi a0,a0,1186 # 60d0 <malloc+0x1342> 2c36: 00002097 auipc ra,0x2 2c3a: d18080e7 jalr -744(ra) # 494e <open> if(fd >= 0){ 2c3e: 0e055363 bgez a0,2d24 <dirfile+0x150> if(mkdir("dirfile/xx") == 0){ 2c42: 00003517 auipc a0,0x3 - 2c46: 48650513 addi a0,a0,1158 # 60c8 <malloc+0x1344> + 2c46: 48e50513 addi a0,a0,1166 # 60d0 <malloc+0x1342> 2c4a: 00002097 auipc ra,0x2 2c4e: d18080e7 jalr -744(ra) # 4962 <mkdir> 2c52: c57d beqz a0,2d40 <dirfile+0x16c> if(remove("dirfile/xx") == 0){ 2c54: 00003517 auipc a0,0x3 - 2c58: 47450513 addi a0,a0,1140 # 60c8 <malloc+0x1344> + 2c58: 47c50513 addi a0,a0,1148 # 60d0 <malloc+0x1342> 2c5c: 00002097 auipc ra,0x2 2c60: d64080e7 jalr -668(ra) # 49c0 <remove> 2c64: cd65 beqz a0,2d5c <dirfile+0x188> if(remove("dirfile") != 0){ 2c66: 00003517 auipc a0,0x3 - 2c6a: 41a50513 addi a0,a0,1050 # 6080 <malloc+0x12fc> + 2c6a: 42250513 addi a0,a0,1058 # 6088 <malloc+0x12fa> 2c6e: 00002097 auipc ra,0x2 2c72: d52080e7 jalr -686(ra) # 49c0 <remove> 2c76: 10051163 bnez a0,2d78 <dirfile+0x1a4> fd = open(".", O_RDWR); 2c7a: 4589 li a1,2 2c7c: 00003517 auipc a0,0x3 - 2c80: 35450513 addi a0,a0,852 # 5fd0 <malloc+0x124c> + 2c80: 35c50513 addi a0,a0,860 # 5fd8 <malloc+0x124a> 2c84: 00002097 auipc ra,0x2 2c88: cca080e7 jalr -822(ra) # 494e <open> if(fd >= 0){ @@ -4587,14 +4587,14 @@ execout(char *s) fd = open(".", 0); 2c90: 4581 li a1,0 2c92: 00003517 auipc a0,0x3 - 2c96: 33e50513 addi a0,a0,830 # 5fd0 <malloc+0x124c> + 2c96: 34650513 addi a0,a0,838 # 5fd8 <malloc+0x124a> 2c9a: 00002097 auipc ra,0x2 2c9e: cb4080e7 jalr -844(ra) # 494e <open> 2ca2: 84aa mv s1,a0 if(write(fd, "x", 1) > 0){ 2ca4: 4605 li a2,1 2ca6: 00002597 auipc a1,0x2 - 2caa: 2aa58593 addi a1,a1,682 # 4f50 <malloc+0x1cc> + 2caa: 2b258593 addi a1,a1,690 # 4f58 <malloc+0x1ca> 2cae: 00002097 auipc ra,0x2 2cb2: c7c080e7 jalr -900(ra) # 492a <write> 2cb6: 0ea04d63 bgtz a0,2db0 <dirfile+0x1dc> @@ -4612,9 +4612,9 @@ execout(char *s) printf("%s: create dirfile failed\n", s); 2cd0: 85ca mv a1,s2 2cd2: 00003517 auipc a0,0x3 - 2cd6: 3b650513 addi a0,a0,950 # 6088 <malloc+0x1304> + 2cd6: 3be50513 addi a0,a0,958 # 6090 <malloc+0x1302> 2cda: 00002097 auipc ra,0x2 - 2cde: ff2080e7 jalr -14(ra) # 4ccc <printf> + 2cde: ffc080e7 jalr -4(ra) # 4cd6 <printf> exit(1); 2ce2: 4505 li a0,1 2ce4: 00002097 auipc ra,0x2 @@ -4622,9 +4622,9 @@ execout(char *s) printf("%s: chdir dirfile succeeded!\n", s); 2cec: 85ca mv a1,s2 2cee: 00003517 auipc a0,0x3 - 2cf2: 3ba50513 addi a0,a0,954 # 60a8 <malloc+0x1324> + 2cf2: 3c250513 addi a0,a0,962 # 60b0 <malloc+0x1322> 2cf6: 00002097 auipc ra,0x2 - 2cfa: fd6080e7 jalr -42(ra) # 4ccc <printf> + 2cfa: fe0080e7 jalr -32(ra) # 4cd6 <printf> exit(1); 2cfe: 4505 li a0,1 2d00: 00002097 auipc ra,0x2 @@ -4632,9 +4632,9 @@ execout(char *s) printf("%s: create dirfile/xx succeeded!\n", s); 2d08: 85ca mv a1,s2 2d0a: 00003517 auipc a0,0x3 - 2d0e: 3ce50513 addi a0,a0,974 # 60d8 <malloc+0x1354> + 2d0e: 3d650513 addi a0,a0,982 # 60e0 <malloc+0x1352> 2d12: 00002097 auipc ra,0x2 - 2d16: fba080e7 jalr -70(ra) # 4ccc <printf> + 2d16: fc4080e7 jalr -60(ra) # 4cd6 <printf> exit(1); 2d1a: 4505 li a0,1 2d1c: 00002097 auipc ra,0x2 @@ -4642,9 +4642,9 @@ execout(char *s) printf("%s: create dirfile/xx succeeded!\n", s); 2d24: 85ca mv a1,s2 2d26: 00003517 auipc a0,0x3 - 2d2a: 3b250513 addi a0,a0,946 # 60d8 <malloc+0x1354> + 2d2a: 3ba50513 addi a0,a0,954 # 60e0 <malloc+0x1352> 2d2e: 00002097 auipc ra,0x2 - 2d32: f9e080e7 jalr -98(ra) # 4ccc <printf> + 2d32: fa8080e7 jalr -88(ra) # 4cd6 <printf> exit(1); 2d36: 4505 li a0,1 2d38: 00002097 auipc ra,0x2 @@ -4652,9 +4652,9 @@ execout(char *s) printf("%s: mkdir dirfile/xx succeeded!\n", s); 2d40: 85ca mv a1,s2 2d42: 00003517 auipc a0,0x3 - 2d46: 3be50513 addi a0,a0,958 # 6100 <malloc+0x137c> + 2d46: 3c650513 addi a0,a0,966 # 6108 <malloc+0x137a> 2d4a: 00002097 auipc ra,0x2 - 2d4e: f82080e7 jalr -126(ra) # 4ccc <printf> + 2d4e: f8c080e7 jalr -116(ra) # 4cd6 <printf> exit(1); 2d52: 4505 li a0,1 2d54: 00002097 auipc ra,0x2 @@ -4662,9 +4662,9 @@ execout(char *s) printf("%s: remove dirfile/xx succeeded!\n", s); 2d5c: 85ca mv a1,s2 2d5e: 00003517 auipc a0,0x3 - 2d62: 3ca50513 addi a0,a0,970 # 6128 <malloc+0x13a4> + 2d62: 3d250513 addi a0,a0,978 # 6130 <malloc+0x13a2> 2d66: 00002097 auipc ra,0x2 - 2d6a: f66080e7 jalr -154(ra) # 4ccc <printf> + 2d6a: f70080e7 jalr -144(ra) # 4cd6 <printf> exit(1); 2d6e: 4505 li a0,1 2d70: 00002097 auipc ra,0x2 @@ -4672,9 +4672,9 @@ execout(char *s) printf("%s: remove dirfile failed!\n", s); 2d78: 85ca mv a1,s2 2d7a: 00003517 auipc a0,0x3 - 2d7e: 3d650513 addi a0,a0,982 # 6150 <malloc+0x13cc> + 2d7e: 3de50513 addi a0,a0,990 # 6158 <malloc+0x13ca> 2d82: 00002097 auipc ra,0x2 - 2d86: f4a080e7 jalr -182(ra) # 4ccc <printf> + 2d86: f54080e7 jalr -172(ra) # 4cd6 <printf> exit(1); 2d8a: 4505 li a0,1 2d8c: 00002097 auipc ra,0x2 @@ -4682,9 +4682,9 @@ execout(char *s) printf("%s: open . for writing succeeded!\n", s); 2d94: 85ca mv a1,s2 2d96: 00003517 auipc a0,0x3 - 2d9a: 3da50513 addi a0,a0,986 # 6170 <malloc+0x13ec> + 2d9a: 3e250513 addi a0,a0,994 # 6178 <malloc+0x13ea> 2d9e: 00002097 auipc ra,0x2 - 2da2: f2e080e7 jalr -210(ra) # 4ccc <printf> + 2da2: f38080e7 jalr -200(ra) # 4cd6 <printf> exit(1); 2da6: 4505 li a0,1 2da8: 00002097 auipc ra,0x2 @@ -4692,9 +4692,9 @@ execout(char *s) printf("%s: write . succeeded!\n", s); 2db0: 85ca mv a1,s2 2db2: 00003517 auipc a0,0x3 - 2db6: 3e650513 addi a0,a0,998 # 6198 <malloc+0x1414> + 2db6: 3ee50513 addi a0,a0,1006 # 61a0 <malloc+0x1412> 2dba: 00002097 auipc ra,0x2 - 2dbe: f12080e7 jalr -238(ra) # 4ccc <printf> + 2dbe: f1c080e7 jalr -228(ra) # 4cd6 <printf> exit(1); 2dc2: 4505 li a0,1 2dc4: 00002097 auipc ra,0x2 @@ -4715,20 +4715,20 @@ execout(char *s) 2de0: 02e00493 li s1,46 if(mkdir("irefd") != 0){ 2de4: 00003917 auipc s2,0x3 - 2de8: 3cc90913 addi s2,s2,972 # 61b0 <malloc+0x142c> + 2de8: 3d490913 addi s2,s2,980 # 61b8 <malloc+0x142a> mkdir(""); 2dec: 00003a17 auipc s4,0x3 - 2df0: 05ca0a13 addi s4,s4,92 # 5e48 <malloc+0x10c4> + 2df0: 064a0a13 addi s4,s4,100 # 5e50 <malloc+0x10c2> fd = open("xx", O_CREATE); 2df4: 00003997 auipc s3,0x3 - 2df8: 2dc98993 addi s3,s3,732 # 60d0 <malloc+0x134c> + 2df8: 2e498993 addi s3,s3,740 # 60d8 <malloc+0x134a> 2dfc: a889 j 2e4e <iref+0x82> printf("%s: mkdir irefd failed\n", s); 2dfe: 85d6 mv a1,s5 2e00: 00003517 auipc a0,0x3 - 2e04: 3b850513 addi a0,a0,952 # 61b8 <malloc+0x1434> + 2e04: 3c050513 addi a0,a0,960 # 61c0 <malloc+0x1432> 2e08: 00002097 auipc ra,0x2 - 2e0c: ec4080e7 jalr -316(ra) # 4ccc <printf> + 2e0c: ece080e7 jalr -306(ra) # 4cd6 <printf> exit(1); 2e10: 4505 li a0,1 2e12: 00002097 auipc ra,0x2 @@ -4736,9 +4736,9 @@ execout(char *s) printf("%s: chdir irefd failed\n", s); 2e1a: 85d6 mv a1,s5 2e1c: 00003517 auipc a0,0x3 - 2e20: 3b450513 addi a0,a0,948 # 61d0 <malloc+0x144c> + 2e20: 3bc50513 addi a0,a0,956 # 61d8 <malloc+0x144a> 2e24: 00002097 auipc ra,0x2 - 2e28: ea8080e7 jalr -344(ra) # 4ccc <printf> + 2e28: eb2080e7 jalr -334(ra) # 4cd6 <printf> exit(1); 2e2c: 4505 li a0,1 2e2e: 00002097 auipc ra,0x2 @@ -4789,10 +4789,10 @@ execout(char *s) 2e9e: 03300493 li s1,51 chdir(".."); 2ea2: 00003997 auipc s3,0x3 - 2ea6: 14e98993 addi s3,s3,334 # 5ff0 <malloc+0x126c> + 2ea6: 15698993 addi s3,s3,342 # 5ff8 <malloc+0x126a> remove("irefd"); 2eaa: 00003917 auipc s2,0x3 - 2eae: 30690913 addi s2,s2,774 # 61b0 <malloc+0x142c> + 2eae: 30e90913 addi s2,s2,782 # 61b8 <malloc+0x142a> chdir(".."); 2eb2: 854e mv a0,s3 2eb4: 00002097 auipc ra,0x2 @@ -4806,7 +4806,7 @@ execout(char *s) 2ec8: f4ed bnez s1,2eb2 <iref+0xe6> chdir("/"); 2eca: 00003517 auipc a0,0x3 - 2ece: d0e50513 addi a0,a0,-754 # 5bd8 <malloc+0xe54> + 2ece: d1650513 addi a0,a0,-746 # 5be0 <malloc+0xe52> 2ed2: 00002097 auipc ra,0x2 2ed6: a9a080e7 jalr -1382(ra) # 496c <chdir> } @@ -4830,7 +4830,7 @@ execout(char *s) 2ef6: 84aa mv s1,a0 if(mkdir("oidir") < 0){ 2ef8: 00003517 auipc a0,0x3 - 2efc: 2f050513 addi a0,a0,752 # 61e8 <malloc+0x1464> + 2efc: 2f850513 addi a0,a0,760 # 61f0 <malloc+0x1462> 2f00: 00002097 auipc ra,0x2 2f04: a62080e7 jalr -1438(ra) # 4962 <mkdir> 2f08: 04054263 bltz a0,2f4c <openiputtest+0x60> @@ -4844,7 +4844,7 @@ execout(char *s) int fd = open("oidir", O_RDWR); 2f1a: 4589 li a1,2 2f1c: 00003517 auipc a0,0x3 - 2f20: 2cc50513 addi a0,a0,716 # 61e8 <malloc+0x1464> + 2f20: 2d450513 addi a0,a0,724 # 61f0 <malloc+0x1462> 2f24: 00002097 auipc ra,0x2 2f28: a2a080e7 jalr -1494(ra) # 494e <open> if(fd >= 0){ @@ -4852,9 +4852,9 @@ execout(char *s) printf("%s: open directory for write succeeded\n", s); 2f30: 85a6 mv a1,s1 2f32: 00003517 auipc a0,0x3 - 2f36: 2d650513 addi a0,a0,726 # 6208 <malloc+0x1484> + 2f36: 2de50513 addi a0,a0,734 # 6210 <malloc+0x1482> 2f3a: 00002097 auipc ra,0x2 - 2f3e: d92080e7 jalr -622(ra) # 4ccc <printf> + 2f3e: d9c080e7 jalr -612(ra) # 4cd6 <printf> exit(1); 2f42: 4505 li a0,1 2f44: 00002097 auipc ra,0x2 @@ -4862,9 +4862,9 @@ execout(char *s) printf("%s: mkdir oidir failed\n", s); 2f4c: 85a6 mv a1,s1 2f4e: 00003517 auipc a0,0x3 - 2f52: 2a250513 addi a0,a0,674 # 61f0 <malloc+0x146c> + 2f52: 2aa50513 addi a0,a0,682 # 61f8 <malloc+0x146a> 2f56: 00002097 auipc ra,0x2 - 2f5a: d76080e7 jalr -650(ra) # 4ccc <printf> + 2f5a: d80080e7 jalr -640(ra) # 4cd6 <printf> exit(1); 2f5e: 4505 li a0,1 2f60: 00002097 auipc ra,0x2 @@ -4872,9 +4872,9 @@ execout(char *s) printf("%s: fork failed\n", s); 2f68: 85a6 mv a1,s1 2f6a: 00002517 auipc a0,0x2 - 2f6e: 60650513 addi a0,a0,1542 # 5570 <malloc+0x7ec> + 2f6e: 60e50513 addi a0,a0,1550 # 5578 <malloc+0x7ea> 2f72: 00002097 auipc ra,0x2 - 2f76: d5a080e7 jalr -678(ra) # 4ccc <printf> + 2f76: d64080e7 jalr -668(ra) # 4cd6 <printf> exit(1); 2f7a: 4505 li a0,1 2f7c: 00002097 auipc ra,0x2 @@ -4889,16 +4889,16 @@ execout(char *s) 2f94: a00080e7 jalr -1536(ra) # 4990 <sleep> if(remove("oidir") != 0){ 2f98: 00003517 auipc a0,0x3 - 2f9c: 25050513 addi a0,a0,592 # 61e8 <malloc+0x1464> + 2f9c: 25850513 addi a0,a0,600 # 61f0 <malloc+0x1462> 2fa0: 00002097 auipc ra,0x2 2fa4: a20080e7 jalr -1504(ra) # 49c0 <remove> 2fa8: cd19 beqz a0,2fc6 <openiputtest+0xda> printf("%s: remove failed\n", s); 2faa: 85a6 mv a1,s1 2fac: 00003517 auipc a0,0x3 - 2fb0: 28450513 addi a0,a0,644 # 6230 <malloc+0x14ac> + 2fb0: 28c50513 addi a0,a0,652 # 6238 <malloc+0x14aa> 2fb4: 00002097 auipc ra,0x2 - 2fb8: d18080e7 jalr -744(ra) # 4ccc <printf> + 2fb8: d22080e7 jalr -734(ra) # 4cd6 <printf> exit(1); 2fbc: 4505 li a0,1 2fbe: 00002097 auipc ra,0x2 @@ -4922,7 +4922,7 @@ execout(char *s) 2fe8: 84aa mv s1,a0 remove("stopforking"); 2fea: 00003517 auipc a0,0x3 - 2fee: 25e50513 addi a0,a0,606 # 6248 <malloc+0x14c4> + 2fee: 26650513 addi a0,a0,614 # 6250 <malloc+0x14c2> 2ff2: 00002097 auipc ra,0x2 2ff6: 9ce080e7 jalr -1586(ra) # 49c0 <remove> int pid = fork(); @@ -4939,7 +4939,7 @@ execout(char *s) close(open("stopforking", O_CREATE|O_RDWR)); 3012: 20200593 li a1,514 3016: 00003517 auipc a0,0x3 - 301a: 23250513 addi a0,a0,562 # 6248 <malloc+0x14c4> + 301a: 23a50513 addi a0,a0,570 # 6250 <malloc+0x14c2> 301e: 00002097 auipc ra,0x2 3022: 930080e7 jalr -1744(ra) # 494e <open> 3026: 00002097 auipc ra,0x2 @@ -4954,7 +4954,7 @@ execout(char *s) 303e: 956080e7 jalr -1706(ra) # 4990 <sleep> remove("stopforking"); 3042: 00003517 auipc a0,0x3 - 3046: 20650513 addi a0,a0,518 # 6248 <malloc+0x14c4> + 3046: 20e50513 addi a0,a0,526 # 6250 <malloc+0x14c2> 304a: 00002097 auipc ra,0x2 304e: 976080e7 jalr -1674(ra) # 49c0 <remove> } @@ -4966,16 +4966,16 @@ execout(char *s) printf("%s: fork failed", s); 305c: 85a6 mv a1,s1 305e: 00002517 auipc a0,0x2 - 3062: 6d250513 addi a0,a0,1746 # 5730 <malloc+0x9ac> + 3062: 6da50513 addi a0,a0,1754 # 5738 <malloc+0x9aa> 3066: 00002097 auipc ra,0x2 - 306a: c66080e7 jalr -922(ra) # 4ccc <printf> + 306a: c70080e7 jalr -912(ra) # 4cd6 <printf> exit(1); 306e: 4505 li a0,1 3070: 00002097 auipc ra,0x2 3074: 894080e7 jalr -1900(ra) # 4904 <exit> int fd = open("stopforking", 0); 3078: 00003497 auipc s1,0x3 - 307c: 1d048493 addi s1,s1,464 # 6248 <malloc+0x14c4> + 307c: 1d848493 addi s1,s1,472 # 6250 <malloc+0x14c2> 3080: 4581 li a1,0 3082: 8526 mv a0,s1 3084: 00002097 auipc ra,0x2 @@ -5022,9 +5022,9 @@ execout(char *s) 30e0: a001 j 30e0 <preempt+0x22> printf("%s: fork failed"); 30e2: 00002517 auipc a0,0x2 - 30e6: 64e50513 addi a0,a0,1614 # 5730 <malloc+0x9ac> + 30e6: 65650513 addi a0,a0,1622 # 5738 <malloc+0x9aa> 30ea: 00002097 auipc ra,0x2 - 30ee: be2080e7 jalr -1054(ra) # 4ccc <printf> + 30ee: bec080e7 jalr -1044(ra) # 4cd6 <printf> exit(1); 30f2: 4505 li a0,1 30f4: 00002097 auipc ra,0x2 @@ -5042,9 +5042,9 @@ execout(char *s) printf("%s: fork failed\n", s); 310e: 85ca mv a1,s2 3110: 00002517 auipc a0,0x2 - 3114: 46050513 addi a0,a0,1120 # 5570 <malloc+0x7ec> + 3114: 46850513 addi a0,a0,1128 # 5578 <malloc+0x7ea> 3118: 00002097 auipc ra,0x2 - 311c: bb4080e7 jalr -1100(ra) # 4ccc <printf> + 311c: bbe080e7 jalr -1090(ra) # 4cd6 <printf> exit(1); 3120: 4505 li a0,1 3122: 00001097 auipc ra,0x1 @@ -5068,7 +5068,7 @@ execout(char *s) if(write(pfds[1], "x", 1) != 1) 3152: 4605 li a2,1 3154: 00002597 auipc a1,0x2 - 3158: dfc58593 addi a1,a1,-516 # 4f50 <malloc+0x1cc> + 3158: e0458593 addi a1,a1,-508 # 4f58 <malloc+0x1ca> 315c: fcc42503 lw a0,-52(s0) 3160: 00001097 auipc ra,0x1 3164: 7ca080e7 jalr 1994(ra) # 492a <write> @@ -5083,18 +5083,18 @@ execout(char *s) printf("%s: fork failed\n", s); 317c: 85ca mv a1,s2 317e: 00002517 auipc a0,0x2 - 3182: 3f250513 addi a0,a0,1010 # 5570 <malloc+0x7ec> + 3182: 3fa50513 addi a0,a0,1018 # 5578 <malloc+0x7ea> 3186: 00002097 auipc ra,0x2 - 318a: b46080e7 jalr -1210(ra) # 4ccc <printf> + 318a: b50080e7 jalr -1200(ra) # 4cd6 <printf> exit(1); 318e: 4505 li a0,1 3190: 00001097 auipc ra,0x1 3194: 774080e7 jalr 1908(ra) # 4904 <exit> printf("%s: preempt write error"); 3198: 00003517 auipc a0,0x3 - 319c: 0c050513 addi a0,a0,192 # 6258 <malloc+0x14d4> + 319c: 0c850513 addi a0,a0,200 # 6260 <malloc+0x14d2> 31a0: 00002097 auipc ra,0x2 - 31a4: b2c080e7 jalr -1236(ra) # 4ccc <printf> + 31a4: b36080e7 jalr -1226(ra) # 4cd6 <printf> 31a8: b7d9 j 316e <preempt+0xb0> close(pfds[1]); 31aa: fcc42503 lw a0,-52(s0) @@ -5104,7 +5104,7 @@ execout(char *s) 31b6: 6609 lui a2,0x2 31b8: 80060613 addi a2,a2,-2048 # 1800 <forkfork+0x42> 31bc: 00007597 auipc a1,0x7 - 31c0: 6dc58593 addi a1,a1,1756 # a898 <buf> + 31c0: 6e458593 addi a1,a1,1764 # a8a0 <buf> 31c4: fc842503 lw a0,-56(s0) 31c8: 00001097 auipc ra,0x1 31cc: 758080e7 jalr 1880(ra) # 4920 <read> @@ -5112,9 +5112,9 @@ execout(char *s) 31d2: 02f50263 beq a0,a5,31f6 <preempt+0x138> printf("%s: preempt read error"); 31d6: 00003517 auipc a0,0x3 - 31da: 09a50513 addi a0,a0,154 # 6270 <malloc+0x14ec> + 31da: 0a250513 addi a0,a0,162 # 6278 <malloc+0x14ea> 31de: 00002097 auipc ra,0x2 - 31e2: aee080e7 jalr -1298(ra) # 4ccc <printf> + 31e2: af8080e7 jalr -1288(ra) # 4cd6 <printf> } 31e6: 70e2 ld ra,56(sp) 31e8: 7442 ld s0,48(sp) @@ -5130,9 +5130,9 @@ execout(char *s) 31fe: 73a080e7 jalr 1850(ra) # 4934 <close> printf("kill... "); 3202: 00003517 auipc a0,0x3 - 3206: 08650513 addi a0,a0,134 # 6288 <malloc+0x1504> + 3206: 08e50513 addi a0,a0,142 # 6290 <malloc+0x1502> 320a: 00002097 auipc ra,0x2 - 320e: ac2080e7 jalr -1342(ra) # 4ccc <printf> + 320e: acc080e7 jalr -1332(ra) # 4cd6 <printf> kill(pid1); 3212: 8526 mv a0,s1 3214: 00001097 auipc ra,0x1 @@ -5147,9 +5147,9 @@ execout(char *s) 322c: 716080e7 jalr 1814(ra) # 493e <kill> printf("wait... "); 3230: 00003517 auipc a0,0x3 - 3234: 06850513 addi a0,a0,104 # 6298 <malloc+0x1514> + 3234: 07050513 addi a0,a0,112 # 62a0 <malloc+0x1512> 3238: 00002097 auipc ra,0x2 - 323c: a94080e7 jalr -1388(ra) # 4ccc <printf> + 323c: a9e080e7 jalr -1378(ra) # 4cd6 <printf> wait(0); 3240: 4501 li a0,0 3242: 00001097 auipc ra,0x1 @@ -5193,9 +5193,9 @@ execout(char *s) printf("%s: pipe() failed\n", s); 3296: 85da mv a1,s6 3298: 00002517 auipc a0,0x2 - 329c: 3e050513 addi a0,a0,992 # 5678 <malloc+0x8f4> + 329c: 3e850513 addi a0,a0,1000 # 5680 <malloc+0x8f2> 32a0: 00002097 auipc ra,0x2 - 32a4: a2c080e7 jalr -1492(ra) # 4ccc <printf> + 32a4: a36080e7 jalr -1482(ra) # 4cd6 <printf> exit(1); 32a8: 4505 li a0,1 32aa: 00001097 auipc ra,0x1 @@ -5210,7 +5210,7 @@ execout(char *s) write(fds[1], "x", 1); 32ca: 4605 li a2,1 32cc: 00002597 auipc a1,0x2 - 32d0: c8458593 addi a1,a1,-892 # 4f50 <malloc+0x1cc> + 32d0: c8c58593 addi a1,a1,-884 # 4f58 <malloc+0x1ca> 32d4: fb442503 lw a0,-76(s0) 32d8: 00001097 auipc ra,0x1 32dc: 652080e7 jalr 1618(ra) # 492a <write> @@ -5293,9 +5293,9 @@ execout(char *s) printf("%s: failed sbrk leaked memory\n", s); 338e: 85da mv a1,s6 3390: 00003517 auipc a0,0x3 - 3394: f1850513 addi a0,a0,-232 # 62a8 <malloc+0x1524> + 3394: f2050513 addi a0,a0,-224 # 62b0 <malloc+0x1522> 3398: 00002097 auipc ra,0x2 - 339c: 934080e7 jalr -1740(ra) # 4ccc <printf> + 339c: 93e080e7 jalr -1730(ra) # 4cd6 <printf> exit(1); 33a0: 4505 li a0,1 33a2: 00001097 auipc ra,0x1 @@ -5303,9 +5303,9 @@ execout(char *s) printf("%s: fork failed\n", s); 33aa: 85da mv a1,s6 33ac: 00002517 auipc a0,0x2 - 33b0: 1c450513 addi a0,a0,452 # 5570 <malloc+0x7ec> + 33b0: 1cc50513 addi a0,a0,460 # 5578 <malloc+0x7ea> 33b4: 00002097 auipc ra,0x2 - 33b8: 918080e7 jalr -1768(ra) # 4ccc <printf> + 33b8: 922080e7 jalr -1758(ra) # 4cd6 <printf> exit(1); 33bc: 4505 li a0,1 33be: 00001097 auipc ra,0x1 @@ -5325,7 +5325,7 @@ execout(char *s) 33e4: 993a add s2,s2,a4 33e6: 6705 lui a4,0x1 n += *(a+i); - 33e8: 0007c683 lbu a3,0(a5) # 6400000 <__BSS_END__+0x63f3f50> + 33e8: 0007c683 lbu a3,0(a5) # 6400000 <__BSS_END__+0x63f3f48> 33ec: 9cb5 addw s1,s1,a3 for (i = 0; i < 10*BIG; i += PGSIZE) { 33ee: 97ba add a5,a5,a4 @@ -5333,9 +5333,9 @@ execout(char *s) printf("%s: allocate a lot of memory succeeded %d\n", n); 33f4: 85a6 mv a1,s1 33f6: 00003517 auipc a0,0x3 - 33fa: ed250513 addi a0,a0,-302 # 62c8 <malloc+0x1544> + 33fa: eda50513 addi a0,a0,-294 # 62d0 <malloc+0x1542> 33fe: 00002097 auipc ra,0x2 - 3402: 8ce080e7 jalr -1842(ra) # 4ccc <printf> + 3402: 8d8080e7 jalr -1832(ra) # 4cd6 <printf> exit(1); 3406: 4505 li a0,1 3408: 00001097 auipc ra,0x1 @@ -5384,9 +5384,9 @@ execout(char *s) printf("%s: fork failed\n", s); 3468: 85ce mv a1,s3 346a: 00002517 auipc a0,0x2 - 346e: 10650513 addi a0,a0,262 # 5570 <malloc+0x7ec> + 346e: 10e50513 addi a0,a0,270 # 5578 <malloc+0x7ea> 3472: 00002097 auipc ra,0x2 - 3476: 85a080e7 jalr -1958(ra) # 4ccc <printf> + 3476: 864080e7 jalr -1948(ra) # 4cd6 <printf> exit(1); 347a: 4505 li a0,1 347c: 00001097 auipc ra,0x1 @@ -5394,9 +5394,9 @@ execout(char *s) printf("%s: wait wrong pid\n", s); 3484: 85ce mv a1,s3 3486: 00002517 auipc a0,0x2 - 348a: 27250513 addi a0,a0,626 # 56f8 <malloc+0x974> + 348a: 27a50513 addi a0,a0,634 # 5700 <malloc+0x972> 348e: 00002097 auipc ra,0x2 - 3492: 83e080e7 jalr -1986(ra) # 4ccc <printf> + 3492: 848080e7 jalr -1976(ra) # 4cd6 <printf> exit(1); 3496: 4505 li a0,1 3498: 00001097 auipc ra,0x1 @@ -5457,7 +5457,7 @@ execout(char *s) while((m2 = malloc(10001)) != 0){ 350e: 854a mv a0,s2 3510: 00002097 auipc ra,0x2 - 3514: 874080e7 jalr -1932(ra) # 4d84 <malloc> + 3514: 87e080e7 jalr -1922(ra) # 4d8e <malloc> 3518: f96d bnez a0,350a <mem+0x40> while(m1){ 351a: c881 beqz s1,352a <mem+0x60> @@ -5466,18 +5466,18 @@ execout(char *s) 351e: 6084 ld s1,0(s1) free(m1); 3520: 00001097 auipc ra,0x1 - 3524: 7e2080e7 jalr 2018(ra) # 4d02 <free> + 3524: 7ec080e7 jalr 2028(ra) # 4d0c <free> while(m1){ 3528: f8f5 bnez s1,351c <mem+0x52> m1 = malloc(1024*20); 352a: 6515 lui a0,0x5 352c: 00002097 auipc ra,0x2 - 3530: 858080e7 jalr -1960(ra) # 4d84 <malloc> + 3530: 862080e7 jalr -1950(ra) # 4d8e <malloc> if(m1 == 0){ 3534: c911 beqz a0,3548 <mem+0x7e> free(m1); 3536: 00001097 auipc ra,0x1 - 353a: 7cc080e7 jalr 1996(ra) # 4d02 <free> + 353a: 7d6080e7 jalr 2006(ra) # 4d0c <free> exit(0); 353e: 4501 li a0,0 3540: 00001097 auipc ra,0x1 @@ -5485,9 +5485,9 @@ execout(char *s) printf("couldn't allocate mem?!!\n", s); 3548: 85ce mv a1,s3 354a: 00003517 auipc a0,0x3 - 354e: dae50513 addi a0,a0,-594 # 62f8 <malloc+0x1574> + 354e: db650513 addi a0,a0,-586 # 6300 <malloc+0x1572> 3552: 00001097 auipc ra,0x1 - 3556: 77a080e7 jalr 1914(ra) # 4ccc <printf> + 3556: 784080e7 jalr 1924(ra) # 4cd6 <printf> exit(1); 355a: 4505 li a0,1 355c: 00001097 auipc ra,0x1 @@ -5514,13 +5514,13 @@ execout(char *s) 3586: 8aaa mv s5,a0 remove("sharedfd"); 3588: 00003517 auipc a0,0x3 - 358c: d9050513 addi a0,a0,-624 # 6318 <malloc+0x1594> + 358c: d9850513 addi a0,a0,-616 # 6320 <malloc+0x1592> 3590: 00001097 auipc ra,0x1 3594: 430080e7 jalr 1072(ra) # 49c0 <remove> fd = open("sharedfd", O_CREATE|O_RDWR); 3598: 20200593 li a1,514 359c: 00003517 auipc a0,0x3 - 35a0: d7c50513 addi a0,a0,-644 # 6318 <malloc+0x1594> + 35a0: d8450513 addi a0,a0,-636 # 6320 <malloc+0x1592> 35a4: 00001097 auipc ra,0x1 35a8: 3aa080e7 jalr 938(ra) # 494e <open> if(fd < 0){ @@ -5560,9 +5560,9 @@ execout(char *s) printf("%s: cannot open sharedfd for writing", s); 3602: 85d6 mv a1,s5 3604: 00003517 auipc a0,0x3 - 3608: d2450513 addi a0,a0,-732 # 6328 <malloc+0x15a4> + 3608: d2c50513 addi a0,a0,-724 # 6330 <malloc+0x15a2> 360c: 00001097 auipc ra,0x1 - 3610: 6c0080e7 jalr 1728(ra) # 4ccc <printf> + 3610: 6ca080e7 jalr 1738(ra) # 4cd6 <printf> exit(1); 3614: 4505 li a0,1 3616: 00001097 auipc ra,0x1 @@ -5570,9 +5570,9 @@ execout(char *s) printf("%s: write sharedfd failed\n", s); 361e: 85d6 mv a1,s5 3620: 00003517 auipc a0,0x3 - 3624: d3050513 addi a0,a0,-720 # 6350 <malloc+0x15cc> + 3624: d3850513 addi a0,a0,-712 # 6358 <malloc+0x15ca> 3628: 00001097 auipc ra,0x1 - 362c: 6a4080e7 jalr 1700(ra) # 4ccc <printf> + 362c: 6ae080e7 jalr 1710(ra) # 4cd6 <printf> exit(1); 3630: 4505 li a0,1 3632: 00001097 auipc ra,0x1 @@ -5595,7 +5595,7 @@ execout(char *s) fd = open("sharedfd", 0); 3662: 4581 li a1,0 3664: 00003517 auipc a0,0x3 - 3668: cb450513 addi a0,a0,-844 # 6318 <malloc+0x1594> + 3668: cbc50513 addi a0,a0,-836 # 6320 <malloc+0x1592> 366c: 00001097 auipc ra,0x1 3670: 2e2080e7 jalr 738(ra) # 494e <open> 3674: 8baa mv s7,a0 @@ -5622,9 +5622,9 @@ execout(char *s) printf("%s: cannot open sharedfd for reading\n", s); 36a4: 85d6 mv a1,s5 36a6: 00003517 auipc a0,0x3 - 36aa: cca50513 addi a0,a0,-822 # 6370 <malloc+0x15ec> + 36aa: cd250513 addi a0,a0,-814 # 6378 <malloc+0x15ea> 36ae: 00001097 auipc ra,0x1 - 36b2: 61e080e7 jalr 1566(ra) # 4ccc <printf> + 36b2: 628080e7 jalr 1576(ra) # 4cd6 <printf> exit(1); 36b6: 4505 li a0,1 36b8: 00001097 auipc ra,0x1 @@ -5648,7 +5648,7 @@ execout(char *s) 36de: 25a080e7 jalr 602(ra) # 4934 <close> remove("sharedfd"); 36e2: 00003517 auipc a0,0x3 - 36e6: c3650513 addi a0,a0,-970 # 6318 <malloc+0x1594> + 36e6: c3e50513 addi a0,a0,-962 # 6320 <malloc+0x1592> 36ea: 00001097 auipc ra,0x1 36ee: 2d6080e7 jalr 726(ra) # 49c0 <remove> if(nc == N*SZ && np == N*SZ){ @@ -5661,9 +5661,9 @@ execout(char *s) printf("%s: nc/np test fails\n", s); 3706: 85d6 mv a1,s5 3708: 00003517 auipc a0,0x3 - 370c: c9050513 addi a0,a0,-880 # 6398 <malloc+0x1614> + 370c: c9850513 addi a0,a0,-872 # 63a0 <malloc+0x1612> 3710: 00001097 auipc ra,0x1 - 3714: 5bc080e7 jalr 1468(ra) # 4ccc <printf> + 3714: 5c6080e7 jalr 1478(ra) # 4cd6 <printf> exit(1); 3718: 4505 li a0,1 371a: 00001097 auipc ra,0x1 @@ -5693,16 +5693,16 @@ execout(char *s) 374a: f4a43c23 sd a0,-168(s0) char *names[] = { "f0", "f1", "f2", "f3" }; 374e: 00003797 auipc a5,0x3 - 3752: c6278793 addi a5,a5,-926 # 63b0 <malloc+0x162c> + 3752: c6a78793 addi a5,a5,-918 # 63b8 <malloc+0x162a> 3756: f6f43823 sd a5,-144(s0) 375a: 00003797 auipc a5,0x3 - 375e: c5e78793 addi a5,a5,-930 # 63b8 <malloc+0x1634> + 375e: c6678793 addi a5,a5,-922 # 63c0 <malloc+0x1632> 3762: f6f43c23 sd a5,-136(s0) 3766: 00003797 auipc a5,0x3 - 376a: c5a78793 addi a5,a5,-934 # 63c0 <malloc+0x163c> + 376a: c6278793 addi a5,a5,-926 # 63c8 <malloc+0x163a> 376e: f8f43023 sd a5,-128(s0) 3772: 00003797 auipc a5,0x3 - 3776: c5678793 addi a5,a5,-938 # 63c8 <malloc+0x1644> + 3776: c5e78793 addi a5,a5,-930 # 63d0 <malloc+0x1642> 377a: f8f43423 sd a5,-120(s0) for(pi = 0; pi < NCHILD; pi++){ 377e: f7040c93 addi s9,s0,-144 @@ -5745,9 +5745,9 @@ execout(char *s) 37cc: 6a09 lui s4,0x2 37ce: 800a0a13 addi s4,s4,-2048 # 1800 <forkfork+0x42> 37d2: 00007a97 auipc s5,0x7 - 37d6: 0c6a8a93 addi s5,s5,198 # a898 <buf> + 37d6: 0cea8a93 addi s5,s5,206 # a8a0 <buf> 37da: 00007b17 auipc s6,0x7 - 37de: 0bfb0b13 addi s6,s6,191 # a899 <buf+0x1> + 37de: 0c7b0b13 addi s6,s6,199 # a8a1 <buf+0x1> if(total != N*SZ){ 37e2: 6785 lui a5,0x1 37e4: 77078793 addi a5,a5,1904 # 1770 <twochildren+0x4c> @@ -5758,9 +5758,9 @@ execout(char *s) printf("fork failed\n", s); 37f2: f5843583 ld a1,-168(s0) 37f6: 00002517 auipc a0,0x2 - 37fa: 0fa50513 addi a0,a0,250 # 58f0 <malloc+0xb6c> + 37fa: 10250513 addi a0,a0,258 # 58f8 <malloc+0xb6a> 37fe: 00001097 auipc ra,0x1 - 3802: 4ce080e7 jalr 1230(ra) # 4ccc <printf> + 3802: 4d8080e7 jalr 1240(ra) # 4cd6 <printf> exit(1); 3806: 4505 li a0,1 3808: 00001097 auipc ra,0x1 @@ -5777,13 +5777,13 @@ execout(char *s) 3824: 1f400613 li a2,500 3828: 0304859b addiw a1,s1,48 382c: 00007517 auipc a0,0x7 - 3830: 06c50513 addi a0,a0,108 # a898 <buf> + 3830: 07450513 addi a0,a0,116 # a8a0 <buf> 3834: 00001097 auipc ra,0x1 3838: eb8080e7 jalr -328(ra) # 46ec <memset> 383c: 44b1 li s1,12 if((n = write(fd, buf, SZ)) != SZ){ 383e: 00007997 auipc s3,0x7 - 3842: 05a98993 addi s3,s3,90 # a898 <buf> + 3842: 06298993 addi s3,s3,98 # a8a0 <buf> 3846: 1f400613 li a2,500 384a: 85ce mv a1,s3 384c: 854a mv a0,s2 @@ -5802,18 +5802,18 @@ execout(char *s) printf("create failed\n", s); 386e: f5843583 ld a1,-168(s0) 3872: 00003517 auipc a0,0x3 - 3876: b5e50513 addi a0,a0,-1186 # 63d0 <malloc+0x164c> + 3876: b6650513 addi a0,a0,-1178 # 63d8 <malloc+0x164a> 387a: 00001097 auipc ra,0x1 - 387e: 452080e7 jalr 1106(ra) # 4ccc <printf> + 387e: 45c080e7 jalr 1116(ra) # 4cd6 <printf> exit(1); 3882: 4505 li a0,1 3884: 00001097 auipc ra,0x1 3888: 080080e7 jalr 128(ra) # 4904 <exit> printf("write failed %d\n", n); 388c: 00003517 auipc a0,0x3 - 3890: b5450513 addi a0,a0,-1196 # 63e0 <malloc+0x165c> + 3890: b5c50513 addi a0,a0,-1188 # 63e8 <malloc+0x165a> 3894: 00001097 auipc ra,0x1 - 3898: 438080e7 jalr 1080(ra) # 4ccc <printf> + 3898: 442080e7 jalr 1090(ra) # 4cd6 <printf> exit(1); 389c: 4505 li a0,1 389e: 00001097 auipc ra,0x1 @@ -5825,9 +5825,9 @@ execout(char *s) printf("wrong char\n", s); 38b0: f5843583 ld a1,-168(s0) 38b4: 00003517 auipc a0,0x3 - 38b8: b4450513 addi a0,a0,-1212 # 63f8 <malloc+0x1674> + 38b8: b4c50513 addi a0,a0,-1204 # 6400 <malloc+0x1672> 38bc: 00001097 auipc ra,0x1 - 38c0: 410080e7 jalr 1040(ra) # 4ccc <printf> + 38c0: 41a080e7 jalr 1050(ra) # 4cd6 <printf> exit(1); 38c4: 4505 li a0,1 38c6: 00001097 auipc ra,0x1 @@ -5842,7 +5842,7 @@ execout(char *s) 38dc: 048080e7 jalr 72(ra) # 4920 <read> 38e0: 02a05363 blez a0,3906 <fourfiles+0x1da> 38e4: 00007797 auipc a5,0x7 - 38e8: fb478793 addi a5,a5,-76 # a898 <buf> + 38e8: fbc78793 addi a5,a5,-68 # a8a0 <buf> 38ec: fff5069b addiw a3,a0,-1 38f0: 1682 slli a3,a3,0x20 38f2: 9281 srli a3,a3,0x20 @@ -5886,9 +5886,9 @@ execout(char *s) printf("wrong length %d\n", total); 3944: 85ca mv a1,s2 3946: 00003517 auipc a0,0x3 - 394a: ac250513 addi a0,a0,-1342 # 6408 <malloc+0x1684> + 394a: aca50513 addi a0,a0,-1334 # 6410 <malloc+0x1682> 394e: 00001097 auipc ra,0x1 - 3952: 37e080e7 jalr 894(ra) # 4ccc <printf> + 3952: 388080e7 jalr 904(ra) # 4cd6 <printf> exit(1); 3956: 4505 li a0,1 3958: 00001097 auipc ra,0x1 @@ -5924,13 +5924,13 @@ execout(char *s) 3990: 8aaa mv s5,a0 remove("bigfile.dat"); 3992: 00003517 auipc a0,0x3 - 3996: a8e50513 addi a0,a0,-1394 # 6420 <malloc+0x169c> + 3996: a9650513 addi a0,a0,-1386 # 6428 <malloc+0x169a> 399a: 00001097 auipc ra,0x1 399e: 026080e7 jalr 38(ra) # 49c0 <remove> fd = open("bigfile.dat", O_CREATE | O_RDWR); 39a2: 20200593 li a1,514 39a6: 00003517 auipc a0,0x3 - 39aa: a7a50513 addi a0,a0,-1414 # 6420 <malloc+0x169c> + 39aa: a8250513 addi a0,a0,-1406 # 6428 <malloc+0x169a> 39ae: 00001097 auipc ra,0x1 39b2: fa0080e7 jalr -96(ra) # 494e <open> 39b6: 89aa mv s3,a0 @@ -5938,7 +5938,7 @@ execout(char *s) 39b8: 4481 li s1,0 memset(buf, i, SZ); 39ba: 00007917 auipc s2,0x7 - 39be: ede90913 addi s2,s2,-290 # a898 <buf> + 39be: ee690913 addi s2,s2,-282 # a8a0 <buf> for(i = 0; i < N; i++){ 39c2: 4a51 li s4,20 if(fd < 0){ @@ -5967,7 +5967,7 @@ execout(char *s) fd = open("bigfile.dat", 0); 3a00: 4581 li a1,0 3a02: 00003517 auipc a0,0x3 - 3a06: a1e50513 addi a0,a0,-1506 # 6420 <malloc+0x169c> + 3a06: a2650513 addi a0,a0,-1498 # 6428 <malloc+0x169a> 3a0a: 00001097 auipc ra,0x1 3a0e: f44080e7 jalr -188(ra) # 494e <open> 3a12: 8a2a mv s4,a0 @@ -5977,7 +5977,7 @@ execout(char *s) 3a16: 4481 li s1,0 cc = read(fd, buf, SZ/2); 3a18: 00007917 auipc s2,0x7 - 3a1c: e8090913 addi s2,s2,-384 # a898 <buf> + 3a1c: e8890913 addi s2,s2,-376 # a8a0 <buf> if(fd < 0){ 3a20: 06054e63 bltz a0,3a9c <bigfile+0x11e> cc = read(fd, buf, SZ/2); @@ -6010,9 +6010,9 @@ execout(char *s) printf("%s: cannot create bigfile", s); 3a64: 85d6 mv a1,s5 3a66: 00003517 auipc a0,0x3 - 3a6a: 9ca50513 addi a0,a0,-1590 # 6430 <malloc+0x16ac> + 3a6a: 9d250513 addi a0,a0,-1582 # 6438 <malloc+0x16aa> 3a6e: 00001097 auipc ra,0x1 - 3a72: 25e080e7 jalr 606(ra) # 4ccc <printf> + 3a72: 268080e7 jalr 616(ra) # 4cd6 <printf> exit(1); 3a76: 4505 li a0,1 3a78: 00001097 auipc ra,0x1 @@ -6020,9 +6020,9 @@ execout(char *s) printf("%s: write bigfile failed\n", s); 3a80: 85d6 mv a1,s5 3a82: 00003517 auipc a0,0x3 - 3a86: 9ce50513 addi a0,a0,-1586 # 6450 <malloc+0x16cc> + 3a86: 9d650513 addi a0,a0,-1578 # 6458 <malloc+0x16ca> 3a8a: 00001097 auipc ra,0x1 - 3a8e: 242080e7 jalr 578(ra) # 4ccc <printf> + 3a8e: 24c080e7 jalr 588(ra) # 4cd6 <printf> exit(1); 3a92: 4505 li a0,1 3a94: 00001097 auipc ra,0x1 @@ -6030,9 +6030,9 @@ execout(char *s) printf("%s: cannot open bigfile\n", s); 3a9c: 85d6 mv a1,s5 3a9e: 00003517 auipc a0,0x3 - 3aa2: 9d250513 addi a0,a0,-1582 # 6470 <malloc+0x16ec> + 3aa2: 9da50513 addi a0,a0,-1574 # 6478 <malloc+0x16ea> 3aa6: 00001097 auipc ra,0x1 - 3aaa: 226080e7 jalr 550(ra) # 4ccc <printf> + 3aaa: 230080e7 jalr 560(ra) # 4cd6 <printf> exit(1); 3aae: 4505 li a0,1 3ab0: 00001097 auipc ra,0x1 @@ -6040,9 +6040,9 @@ execout(char *s) printf("%s: read bigfile failed\n", s); 3ab8: 85d6 mv a1,s5 3aba: 00003517 auipc a0,0x3 - 3abe: 9d650513 addi a0,a0,-1578 # 6490 <malloc+0x170c> + 3abe: 9de50513 addi a0,a0,-1570 # 6498 <malloc+0x170a> 3ac2: 00001097 auipc ra,0x1 - 3ac6: 20a080e7 jalr 522(ra) # 4ccc <printf> + 3ac6: 214080e7 jalr 532(ra) # 4cd6 <printf> exit(1); 3aca: 4505 li a0,1 3acc: 00001097 auipc ra,0x1 @@ -6050,9 +6050,9 @@ execout(char *s) printf("%s: short read bigfile\n", s); 3ad4: 85d6 mv a1,s5 3ad6: 00003517 auipc a0,0x3 - 3ada: 9da50513 addi a0,a0,-1574 # 64b0 <malloc+0x172c> + 3ada: 9e250513 addi a0,a0,-1566 # 64b8 <malloc+0x172a> 3ade: 00001097 auipc ra,0x1 - 3ae2: 1ee080e7 jalr 494(ra) # 4ccc <printf> + 3ae2: 1f8080e7 jalr 504(ra) # 4cd6 <printf> exit(1); 3ae6: 4505 li a0,1 3ae8: 00001097 auipc ra,0x1 @@ -6060,9 +6060,9 @@ execout(char *s) printf("%s: read bigfile wrong data\n", s); 3af0: 85d6 mv a1,s5 3af2: 00003517 auipc a0,0x3 - 3af6: 9d650513 addi a0,a0,-1578 # 64c8 <malloc+0x1744> + 3af6: 9de50513 addi a0,a0,-1570 # 64d0 <malloc+0x1742> 3afa: 00001097 auipc ra,0x1 - 3afe: 1d2080e7 jalr 466(ra) # 4ccc <printf> + 3afe: 1dc080e7 jalr 476(ra) # 4cd6 <printf> exit(1); 3b02: 4505 li a0,1 3b04: 00001097 auipc ra,0x1 @@ -6077,7 +6077,7 @@ execout(char *s) 3b1c: 02f99363 bne s3,a5,3b42 <bigfile+0x1c4> remove("bigfile.dat"); 3b20: 00003517 auipc a0,0x3 - 3b24: 90050513 addi a0,a0,-1792 # 6420 <malloc+0x169c> + 3b24: 90850513 addi a0,a0,-1784 # 6428 <malloc+0x169a> 3b28: 00001097 auipc ra,0x1 3b2c: e98080e7 jalr -360(ra) # 49c0 <remove> } @@ -6093,9 +6093,9 @@ execout(char *s) printf("%s: read bigfile wrong total\n", s); 3b42: 85d6 mv a1,s5 3b44: 00003517 auipc a0,0x3 - 3b48: 9a450513 addi a0,a0,-1628 # 64e8 <malloc+0x1764> + 3b48: 9ac50513 addi a0,a0,-1620 # 64f0 <malloc+0x1762> 3b4c: 00001097 auipc ra,0x1 - 3b50: 180080e7 jalr 384(ra) # 4ccc <printf> + 3b50: 18a080e7 jalr 394(ra) # 4cd6 <printf> exit(1); 3b54: 4505 li a0,1 3b56: 00001097 auipc ra,0x1 @@ -6121,7 +6121,7 @@ execout(char *s) 3b7c: 8daa mv s11,a0 char illegal[] = { '\"', '*', '/', ':', '<', '>', '?', '\\', '|', 0 }; 3b7e: 00003797 auipc a5,0x3 - 3b82: 9f278793 addi a5,a5,-1550 # 6570 <malloc+0x17ec> + 3b82: 9fa78793 addi a5,a5,-1542 # 6578 <malloc+0x17ea> 3b86: 6398 ld a4,0(a5) 3b88: f6e43023 sd a4,-160(s0) 3b8c: 0087d783 lhu a5,8(a5) @@ -6169,9 +6169,9 @@ execout(char *s) printf("fork failed\n", s); 3be6: 85ee mv a1,s11 3be8: 00002517 auipc a0,0x2 - 3bec: d0850513 addi a0,a0,-760 # 58f0 <malloc+0xb6c> + 3bec: d1050513 addi a0,a0,-752 # 58f8 <malloc+0xb6a> 3bf0: 00001097 auipc ra,0x1 - 3bf4: 0dc080e7 jalr 220(ra) # 4ccc <printf> + 3bf4: 0e6080e7 jalr 230(ra) # 4cd6 <printf> exit(1); 3bf8: 4505 li a0,1 3bfa: 00001097 auipc ra,0x1 @@ -6203,9 +6203,9 @@ execout(char *s) 3c36: f7040613 addi a2,s0,-144 3c3a: 85ee mv a1,s11 3c3c: 00003517 auipc a0,0x3 - 3c40: 8cc50513 addi a0,a0,-1844 # 6508 <malloc+0x1784> + 3c40: 8d450513 addi a0,a0,-1836 # 6510 <malloc+0x1782> 3c44: 00001097 auipc ra,0x1 - 3c48: 088080e7 jalr 136(ra) # 4ccc <printf> + 3c48: 092080e7 jalr 146(ra) # 4cd6 <printf> exit(1); 3c4c: 4505 li a0,1 3c4e: 00001097 auipc ra,0x1 @@ -6246,9 +6246,9 @@ execout(char *s) printf("%s: remove failed\n", s); 3cae: 85ee mv a1,s11 3cb0: 00002517 auipc a0,0x2 - 3cb4: 58050513 addi a0,a0,1408 # 6230 <malloc+0x14ac> + 3cb4: 58850513 addi a0,a0,1416 # 6238 <malloc+0x14aa> 3cb8: 00001097 auipc ra,0x1 - 3cbc: 014080e7 jalr 20(ra) # 4ccc <printf> + 3cbc: 01e080e7 jalr 30(ra) # 4cd6 <printf> exit(1); 3cc0: 4505 li a0,1 3cc2: 00001097 auipc ra,0x1 @@ -6265,9 +6265,9 @@ execout(char *s) 3cde: f7040613 addi a2,s0,-144 3ce2: 85ee mv a1,s11 3ce4: 00003517 auipc a0,0x3 - 3ce8: 83c50513 addi a0,a0,-1988 # 6520 <malloc+0x179c> + 3ce8: 84450513 addi a0,a0,-1980 # 6528 <malloc+0x179a> 3cec: 00001097 auipc ra,0x1 - 3cf0: fe0080e7 jalr -32(ra) # 4ccc <printf> + 3cf0: fea080e7 jalr -22(ra) # 4cd6 <printf> exit(1); 3cf4: 4505 li a0,1 3cf6: 00001097 auipc ra,0x1 @@ -6311,9 +6311,9 @@ execout(char *s) 3d50: f7040613 addi a2,s0,-144 3d54: 85ee mv a1,s11 3d56: 00002517 auipc a0,0x2 - 3d5a: 7f250513 addi a0,a0,2034 # 6548 <malloc+0x17c4> + 3d5a: 7fa50513 addi a0,a0,2042 # 6550 <malloc+0x17c2> 3d5e: 00001097 auipc ra,0x1 - 3d62: f6e080e7 jalr -146(ra) # 4ccc <printf> + 3d62: f78080e7 jalr -136(ra) # 4cd6 <printf> exit(1); 3d66: 4505 li a0,1 3d68: 00001097 auipc ra,0x1 @@ -6385,38 +6385,38 @@ execout(char *s) 3df0: 84aa mv s1,a0 printf("mkdir test\n"); 3df2: 00002517 auipc a0,0x2 - 3df6: 78e50513 addi a0,a0,1934 # 6580 <malloc+0x17fc> + 3df6: 79650513 addi a0,a0,1942 # 6588 <malloc+0x17fa> 3dfa: 00001097 auipc ra,0x1 - 3dfe: ed2080e7 jalr -302(ra) # 4ccc <printf> + 3dfe: edc080e7 jalr -292(ra) # 4cd6 <printf> if(mkdir("dir0") < 0){ 3e02: 00002517 auipc a0,0x2 - 3e06: 78e50513 addi a0,a0,1934 # 6590 <malloc+0x180c> + 3e06: 79650513 addi a0,a0,1942 # 6598 <malloc+0x180a> 3e0a: 00001097 auipc ra,0x1 3e0e: b58080e7 jalr -1192(ra) # 4962 <mkdir> 3e12: 04054d63 bltz a0,3e6c <dirtest+0x86> if(chdir("dir0") < 0){ 3e16: 00002517 auipc a0,0x2 - 3e1a: 77a50513 addi a0,a0,1914 # 6590 <malloc+0x180c> + 3e1a: 78250513 addi a0,a0,1922 # 6598 <malloc+0x180a> 3e1e: 00001097 auipc ra,0x1 3e22: b4e080e7 jalr -1202(ra) # 496c <chdir> 3e26: 06054163 bltz a0,3e88 <dirtest+0xa2> if(chdir("..") < 0){ 3e2a: 00002517 auipc a0,0x2 - 3e2e: 1c650513 addi a0,a0,454 # 5ff0 <malloc+0x126c> + 3e2e: 1ce50513 addi a0,a0,462 # 5ff8 <malloc+0x126a> 3e32: 00001097 auipc ra,0x1 3e36: b3a080e7 jalr -1222(ra) # 496c <chdir> 3e3a: 06054563 bltz a0,3ea4 <dirtest+0xbe> if(remove("dir0") < 0){ 3e3e: 00002517 auipc a0,0x2 - 3e42: 75250513 addi a0,a0,1874 # 6590 <malloc+0x180c> + 3e42: 75a50513 addi a0,a0,1882 # 6598 <malloc+0x180a> 3e46: 00001097 auipc ra,0x1 3e4a: b7a080e7 jalr -1158(ra) # 49c0 <remove> 3e4e: 06054963 bltz a0,3ec0 <dirtest+0xda> printf("%s: mkdir test ok\n"); 3e52: 00002517 auipc a0,0x2 - 3e56: 78e50513 addi a0,a0,1934 # 65e0 <malloc+0x185c> + 3e56: 79650513 addi a0,a0,1942 # 65e8 <malloc+0x185a> 3e5a: 00001097 auipc ra,0x1 - 3e5e: e72080e7 jalr -398(ra) # 4ccc <printf> + 3e5e: e7c080e7 jalr -388(ra) # 4cd6 <printf> } 3e62: 60e2 ld ra,24(sp) 3e64: 6442 ld s0,16(sp) @@ -6426,9 +6426,9 @@ execout(char *s) printf("%s: mkdir failed\n", s); 3e6c: 85a6 mv a1,s1 3e6e: 00002517 auipc a0,0x2 - 3e72: d0250513 addi a0,a0,-766 # 5b70 <malloc+0xdec> + 3e72: d0a50513 addi a0,a0,-758 # 5b78 <malloc+0xdea> 3e76: 00001097 auipc ra,0x1 - 3e7a: e56080e7 jalr -426(ra) # 4ccc <printf> + 3e7a: e60080e7 jalr -416(ra) # 4cd6 <printf> exit(1); 3e7e: 4505 li a0,1 3e80: 00001097 auipc ra,0x1 @@ -6436,9 +6436,9 @@ execout(char *s) printf("%s: chdir dir0 failed\n", s); 3e88: 85a6 mv a1,s1 3e8a: 00002517 auipc a0,0x2 - 3e8e: 70e50513 addi a0,a0,1806 # 6598 <malloc+0x1814> + 3e8e: 71650513 addi a0,a0,1814 # 65a0 <malloc+0x1812> 3e92: 00001097 auipc ra,0x1 - 3e96: e3a080e7 jalr -454(ra) # 4ccc <printf> + 3e96: e44080e7 jalr -444(ra) # 4cd6 <printf> exit(1); 3e9a: 4505 li a0,1 3e9c: 00001097 auipc ra,0x1 @@ -6446,9 +6446,9 @@ execout(char *s) printf("%s: chdir .. failed\n", s); 3ea4: 85a6 mv a1,s1 3ea6: 00002517 auipc a0,0x2 - 3eaa: 70a50513 addi a0,a0,1802 # 65b0 <malloc+0x182c> + 3eaa: 71250513 addi a0,a0,1810 # 65b8 <malloc+0x182a> 3eae: 00001097 auipc ra,0x1 - 3eb2: e1e080e7 jalr -482(ra) # 4ccc <printf> + 3eb2: e28080e7 jalr -472(ra) # 4cd6 <printf> exit(1); 3eb6: 4505 li a0,1 3eb8: 00001097 auipc ra,0x1 @@ -6456,9 +6456,9 @@ execout(char *s) printf("%s: remove dir0 failed\n", s); 3ec0: 85a6 mv a1,s1 3ec2: 00002517 auipc a0,0x2 - 3ec6: 70650513 addi a0,a0,1798 # 65c8 <malloc+0x1844> + 3ec6: 70e50513 addi a0,a0,1806 # 65d0 <malloc+0x1842> 3eca: 00001097 auipc ra,0x1 - 3ece: e02080e7 jalr -510(ra) # 4ccc <printf> + 3ece: e0c080e7 jalr -500(ra) # 4cd6 <printf> exit(1); 3ed2: 4505 li a0,1 3ed4: 00001097 auipc ra,0x1 @@ -6474,20 +6474,20 @@ execout(char *s) 3ee6: 84aa mv s1,a0 if(mkdir("12345678901234") != 0){ 3ee8: 00003517 auipc a0,0x3 - 3eec: 8e050513 addi a0,a0,-1824 # 67c8 <malloc+0x1a44> + 3eec: 8e850513 addi a0,a0,-1816 # 67d0 <malloc+0x1a42> 3ef0: 00001097 auipc ra,0x1 3ef4: a72080e7 jalr -1422(ra) # 4962 <mkdir> 3ef8: e165 bnez a0,3fd8 <fourteen+0xfc> if(mkdir("12345678901234/123456789012345") != 0){ 3efa: 00002517 auipc a0,0x2 - 3efe: 72650513 addi a0,a0,1830 # 6620 <malloc+0x189c> + 3efe: 72e50513 addi a0,a0,1838 # 6628 <malloc+0x189a> 3f02: 00001097 auipc ra,0x1 3f06: a60080e7 jalr -1440(ra) # 4962 <mkdir> 3f0a: e56d bnez a0,3ff4 <fourteen+0x118> fd = open("123456789012345/123456789012345/123456789012345", O_CREATE); 3f0c: 20000593 li a1,512 3f10: 00002517 auipc a0,0x2 - 3f14: 76850513 addi a0,a0,1896 # 6678 <malloc+0x18f4> + 3f14: 77050513 addi a0,a0,1904 # 6680 <malloc+0x18f2> 3f18: 00001097 auipc ra,0x1 3f1c: a36080e7 jalr -1482(ra) # 494e <open> if(fd < 0){ @@ -6498,7 +6498,7 @@ execout(char *s) fd = open("12345678901234/12345678901234/12345678901234", 0); 3f2c: 4581 li a1,0 3f2e: 00002517 auipc a0,0x2 - 3f32: 7c250513 addi a0,a0,1986 # 66f0 <malloc+0x196c> + 3f32: 7ca50513 addi a0,a0,1994 # 66f8 <malloc+0x196a> 3f36: 00001097 auipc ra,0x1 3f3a: a18080e7 jalr -1512(ra) # 494e <open> if(fd < 0){ @@ -6508,44 +6508,44 @@ execout(char *s) 3f46: 9f2080e7 jalr -1550(ra) # 4934 <close> if(mkdir("12345678901234/12345678901234") == 0){ 3f4a: 00003517 auipc a0,0x3 - 3f4e: 81650513 addi a0,a0,-2026 # 6760 <malloc+0x19dc> + 3f4e: 81e50513 addi a0,a0,-2018 # 6768 <malloc+0x19da> 3f52: 00001097 auipc ra,0x1 3f56: a10080e7 jalr -1520(ra) # 4962 <mkdir> 3f5a: c57d beqz a0,4048 <fourteen+0x16c> if(mkdir("123456789012345/12345678901234") == 0){ 3f5c: 00003517 auipc a0,0x3 - 3f60: 85c50513 addi a0,a0,-1956 # 67b8 <malloc+0x1a34> + 3f60: 86450513 addi a0,a0,-1948 # 67c0 <malloc+0x1a32> 3f64: 00001097 auipc ra,0x1 3f68: 9fe080e7 jalr -1538(ra) # 4962 <mkdir> 3f6c: cd65 beqz a0,4064 <fourteen+0x188> remove("123456789012345/12345678901234"); 3f6e: 00003517 auipc a0,0x3 - 3f72: 84a50513 addi a0,a0,-1974 # 67b8 <malloc+0x1a34> + 3f72: 85250513 addi a0,a0,-1966 # 67c0 <malloc+0x1a32> 3f76: 00001097 auipc ra,0x1 3f7a: a4a080e7 jalr -1462(ra) # 49c0 <remove> remove("12345678901234/12345678901234"); 3f7e: 00002517 auipc a0,0x2 - 3f82: 7e250513 addi a0,a0,2018 # 6760 <malloc+0x19dc> + 3f82: 7ea50513 addi a0,a0,2026 # 6768 <malloc+0x19da> 3f86: 00001097 auipc ra,0x1 3f8a: a3a080e7 jalr -1478(ra) # 49c0 <remove> remove("12345678901234/12345678901234/12345678901234"); 3f8e: 00002517 auipc a0,0x2 - 3f92: 76250513 addi a0,a0,1890 # 66f0 <malloc+0x196c> + 3f92: 76a50513 addi a0,a0,1898 # 66f8 <malloc+0x196a> 3f96: 00001097 auipc ra,0x1 3f9a: a2a080e7 jalr -1494(ra) # 49c0 <remove> remove("123456789012345/123456789012345/123456789012345"); 3f9e: 00002517 auipc a0,0x2 - 3fa2: 6da50513 addi a0,a0,1754 # 6678 <malloc+0x18f4> + 3fa2: 6e250513 addi a0,a0,1762 # 6680 <malloc+0x18f2> 3fa6: 00001097 auipc ra,0x1 3faa: a1a080e7 jalr -1510(ra) # 49c0 <remove> remove("12345678901234/123456789012345"); 3fae: 00002517 auipc a0,0x2 - 3fb2: 67250513 addi a0,a0,1650 # 6620 <malloc+0x189c> + 3fb2: 67a50513 addi a0,a0,1658 # 6628 <malloc+0x189a> 3fb6: 00001097 auipc ra,0x1 3fba: a0a080e7 jalr -1526(ra) # 49c0 <remove> remove("12345678901234"); 3fbe: 00003517 auipc a0,0x3 - 3fc2: 80a50513 addi a0,a0,-2038 # 67c8 <malloc+0x1a44> + 3fc2: 81250513 addi a0,a0,-2030 # 67d0 <malloc+0x1a42> 3fc6: 00001097 auipc ra,0x1 3fca: 9fa080e7 jalr -1542(ra) # 49c0 <remove> } @@ -6557,9 +6557,9 @@ execout(char *s) printf("%s: mkdir 12345678901234 failed\n", s); 3fd8: 85a6 mv a1,s1 3fda: 00002517 auipc a0,0x2 - 3fde: 61e50513 addi a0,a0,1566 # 65f8 <malloc+0x1874> + 3fde: 62650513 addi a0,a0,1574 # 6600 <malloc+0x1872> 3fe2: 00001097 auipc ra,0x1 - 3fe6: cea080e7 jalr -790(ra) # 4ccc <printf> + 3fe6: cf4080e7 jalr -780(ra) # 4cd6 <printf> exit(1); 3fea: 4505 li a0,1 3fec: 00001097 auipc ra,0x1 @@ -6567,9 +6567,9 @@ execout(char *s) printf("%s: mkdir 12345678901234/123456789012345 failed\n", s); 3ff4: 85a6 mv a1,s1 3ff6: 00002517 auipc a0,0x2 - 3ffa: 64a50513 addi a0,a0,1610 # 6640 <malloc+0x18bc> + 3ffa: 65250513 addi a0,a0,1618 # 6648 <malloc+0x18ba> 3ffe: 00001097 auipc ra,0x1 - 4002: cce080e7 jalr -818(ra) # 4ccc <printf> + 4002: cd8080e7 jalr -808(ra) # 4cd6 <printf> exit(1); 4006: 4505 li a0,1 4008: 00001097 auipc ra,0x1 @@ -6577,9 +6577,9 @@ execout(char *s) printf("%s: create 123456789012345/123456789012345/123456789012345 failed\n", s); 4010: 85a6 mv a1,s1 4012: 00002517 auipc a0,0x2 - 4016: 69650513 addi a0,a0,1686 # 66a8 <malloc+0x1924> + 4016: 69e50513 addi a0,a0,1694 # 66b0 <malloc+0x1922> 401a: 00001097 auipc ra,0x1 - 401e: cb2080e7 jalr -846(ra) # 4ccc <printf> + 401e: cbc080e7 jalr -836(ra) # 4cd6 <printf> exit(1); 4022: 4505 li a0,1 4024: 00001097 auipc ra,0x1 @@ -6587,9 +6587,9 @@ execout(char *s) printf("%s: open 12345678901234/12345678901234/12345678901234 failed\n", s); 402c: 85a6 mv a1,s1 402e: 00002517 auipc a0,0x2 - 4032: 6f250513 addi a0,a0,1778 # 6720 <malloc+0x199c> + 4032: 6fa50513 addi a0,a0,1786 # 6728 <malloc+0x199a> 4036: 00001097 auipc ra,0x1 - 403a: c96080e7 jalr -874(ra) # 4ccc <printf> + 403a: ca0080e7 jalr -864(ra) # 4cd6 <printf> exit(1); 403e: 4505 li a0,1 4040: 00001097 auipc ra,0x1 @@ -6597,9 +6597,9 @@ execout(char *s) printf("%s: mkdir 12345678901234/12345678901234 succeeded!\n", s); 4048: 85a6 mv a1,s1 404a: 00002517 auipc a0,0x2 - 404e: 73650513 addi a0,a0,1846 # 6780 <malloc+0x19fc> + 404e: 73e50513 addi a0,a0,1854 # 6788 <malloc+0x19fa> 4052: 00001097 auipc ra,0x1 - 4056: c7a080e7 jalr -902(ra) # 4ccc <printf> + 4056: c84080e7 jalr -892(ra) # 4cd6 <printf> exit(1); 405a: 4505 li a0,1 405c: 00001097 auipc ra,0x1 @@ -6607,9 +6607,9 @@ execout(char *s) printf("%s: mkdir 12345678901234/123456789012345 succeeded!\n", s); 4064: 85a6 mv a1,s1 4066: 00002517 auipc a0,0x2 - 406a: 77250513 addi a0,a0,1906 # 67d8 <malloc+0x1a54> + 406a: 77a50513 addi a0,a0,1914 # 67e0 <malloc+0x1a52> 406e: 00001097 auipc ra,0x1 - 4072: c5e080e7 jalr -930(ra) # 4ccc <printf> + 4072: c68080e7 jalr -920(ra) # 4cd6 <printf> exit(1); 4076: 4505 li a0,1 4078: 00001097 auipc ra,0x1 @@ -6634,9 +6634,9 @@ execout(char *s) 409c: 1900 addi s0,sp,176 printf("fsfull test\n"); 409e: 00002517 auipc a0,0x2 - 40a2: 77250513 addi a0,a0,1906 # 6810 <malloc+0x1a8c> + 40a2: 77a50513 addi a0,a0,1914 # 6818 <malloc+0x1a8a> 40a6: 00001097 auipc ra,0x1 - 40aa: c26080e7 jalr -986(ra) # 4ccc <printf> + 40aa: c30080e7 jalr -976(ra) # 4cd6 <printf> for(nfiles = 0; ; nfiles++){ 40ae: 4481 li s1,0 name[0] = 'f'; @@ -6650,10 +6650,10 @@ execout(char *s) printf("%s: writing %s\n", name); 40be: f5040b13 addi s6,s0,-176 40c2: 00002d17 auipc s10,0x2 - 40c6: 75ed0d13 addi s10,s10,1886 # 6820 <malloc+0x1a9c> + 40c6: 766d0d13 addi s10,s10,1894 # 6828 <malloc+0x1a9a> int cc = write(fd, buf, BSIZE); 40ca: 00006a17 auipc s4,0x6 - 40ce: 7cea0a13 addi s4,s4,1998 # a898 <buf> + 40ce: 7d6a0a13 addi s4,s4,2006 # a8a0 <buf> name[0] = 'f'; 40d2: f5b40823 sb s11,-176(s0) name[1] = '0' + nfiles / 1000; @@ -6680,7 +6680,7 @@ execout(char *s) 4112: 85da mv a1,s6 4114: 856a mv a0,s10 4116: 00001097 auipc ra,0x1 - 411a: bb6080e7 jalr -1098(ra) # 4ccc <printf> + 411a: bc0080e7 jalr -1088(ra) # 4cd6 <printf> int fd = open(name, O_CREATE|O_RDWR); 411e: 20200593 li a1,514 4122: 855a mv a0,s6 @@ -6692,9 +6692,9 @@ execout(char *s) printf("%s: open %s failed\n", name); 4132: f5040593 addi a1,s0,-176 4136: 00002517 auipc a0,0x2 - 413a: 6fa50513 addi a0,a0,1786 # 6830 <malloc+0x1aac> + 413a: 70250513 addi a0,a0,1794 # 6838 <malloc+0x1aaa> 413e: 00001097 auipc ra,0x1 - 4142: b8e080e7 jalr -1138(ra) # 4ccc <printf> + 4142: b98080e7 jalr -1128(ra) # 4cd6 <printf> while(nfiles >= 0){ 4146: 0604c463 bltz s1,41ae <fsfull+0x12e> name[0] = 'f'; @@ -6741,9 +6741,9 @@ execout(char *s) 41aa: fb549ae3 bne s1,s5,415e <fsfull+0xde> printf("fsfull test finished\n"); 41ae: 00002517 auipc a0,0x2 - 41b2: 6b250513 addi a0,a0,1714 # 6860 <malloc+0x1adc> + 41b2: 6ba50513 addi a0,a0,1722 # 6868 <malloc+0x1ada> 41b6: 00001097 auipc ra,0x1 - 41ba: b16080e7 jalr -1258(ra) # 4ccc <printf> + 41ba: b20080e7 jalr -1248(ra) # 4cd6 <printf> } 41be: 70aa ld ra,168(sp) 41c0: 740a ld s0,160(sp) @@ -6779,9 +6779,9 @@ execout(char *s) printf("%s: wrote %d bytes\n", total); 41fc: 85ce mv a1,s3 41fe: 00002517 auipc a0,0x2 - 4202: 64a50513 addi a0,a0,1610 # 6848 <malloc+0x1ac4> + 4202: 65250513 addi a0,a0,1618 # 6850 <malloc+0x1ac2> 4206: 00001097 auipc ra,0x1 - 420a: ac6080e7 jalr -1338(ra) # 4ccc <printf> + 420a: ad0080e7 jalr -1328(ra) # 4cd6 <printf> close(fd); 420e: 854a mv a0,s2 4210: 00000097 auipc ra,0x0 @@ -6799,13 +6799,13 @@ execout(char *s) 4224: 0800 addi s0,sp,16 randstate = randstate * 1664525 + 1013904223; 4226: 00003717 auipc a4,0x3 - 422a: aea70713 addi a4,a4,-1302 # 6d10 <__DATA_BEGIN__> + 422a: af270713 addi a4,a4,-1294 # 6d18 <__DATA_BEGIN__> 422e: 7308 ld a0,32(a4) 4230: 001967b7 lui a5,0x196 - 4234: 60d78793 addi a5,a5,1549 # 19660d <__BSS_END__+0x18a55d> + 4234: 60d78793 addi a5,a5,1549 # 19660d <__BSS_END__+0x18a555> 4238: 02f50533 mul a0,a0,a5 423c: 3c6ef7b7 lui a5,0x3c6ef - 4240: 35f78793 addi a5,a5,863 # 3c6ef35f <__BSS_END__+0x3c6e32af> + 4240: 35f78793 addi a5,a5,863 # 3c6ef35f <__BSS_END__+0x3c6e32a7> 4244: 953e add a0,a0,a5 4246: f308 sd a0,32(a4) } @@ -6870,7 +6870,7 @@ countfree() // report back one more page. if(write(fds[1], "x", 1) != 1){ 428c: 00001997 auipc s3,0x1 - 4290: cc498993 addi s3,s3,-828 # 4f50 <malloc+0x1cc> + 4290: ccc98993 addi s3,s3,-820 # 4f58 <malloc+0x1ca> uint64 a = (uint64) sbrk(4096); 4294: 6505 lui a0,0x1 4296: 00000097 auipc ra,0x0 @@ -6890,27 +6890,27 @@ countfree() 42ba: fc950de3 beq a0,s1,4294 <countfree+0x44> printf("write() failed in countfree()\n"); 42be: 00002517 auipc a0,0x2 - 42c2: 5fa50513 addi a0,a0,1530 # 68b8 <malloc+0x1b34> + 42c2: 60250513 addi a0,a0,1538 # 68c0 <malloc+0x1b32> 42c6: 00001097 auipc ra,0x1 - 42ca: a06080e7 jalr -1530(ra) # 4ccc <printf> + 42ca: a10080e7 jalr -1520(ra) # 4cd6 <printf> exit(1); 42ce: 4505 li a0,1 42d0: 00000097 auipc ra,0x0 42d4: 634080e7 jalr 1588(ra) # 4904 <exit> printf("pipe() failed in countfree()\n"); 42d8: 00002517 auipc a0,0x2 - 42dc: 5a050513 addi a0,a0,1440 # 6878 <malloc+0x1af4> + 42dc: 5a850513 addi a0,a0,1448 # 6880 <malloc+0x1af2> 42e0: 00001097 auipc ra,0x1 - 42e4: 9ec080e7 jalr -1556(ra) # 4ccc <printf> + 42e4: 9f6080e7 jalr -1546(ra) # 4cd6 <printf> exit(1); 42e8: 4505 li a0,1 42ea: 00000097 auipc ra,0x0 42ee: 61a080e7 jalr 1562(ra) # 4904 <exit> printf("fork failed in countfree()\n"); 42f2: 00002517 auipc a0,0x2 - 42f6: 5a650513 addi a0,a0,1446 # 6898 <malloc+0x1b14> + 42f6: 5ae50513 addi a0,a0,1454 # 68a0 <malloc+0x1b12> 42fa: 00001097 auipc ra,0x1 - 42fe: 9d2080e7 jalr -1582(ra) # 4ccc <printf> + 42fe: 9dc080e7 jalr -1572(ra) # 4cd6 <printf> exit(1); 4302: 4505 li a0,1 4304: 00000097 auipc ra,0x0 @@ -6954,9 +6954,9 @@ countfree() 4340: b7e5 j 4328 <countfree+0xd8> printf("read() failed in countfree()\n"); 4342: 00002517 auipc a0,0x2 - 4346: 59650513 addi a0,a0,1430 # 68d8 <malloc+0x1b54> + 4346: 59e50513 addi a0,a0,1438 # 68e0 <malloc+0x1b52> 434a: 00001097 auipc ra,0x1 - 434e: 982080e7 jalr -1662(ra) # 4ccc <printf> + 434e: 98c080e7 jalr -1652(ra) # 4cd6 <printf> exit(1); 4352: 4505 li a0,1 4354: 00000097 auipc ra,0x0 @@ -7002,9 +7002,9 @@ run(void f(char *), char *s) { printf("test %s: ", s); 4392: 00002517 auipc a0,0x2 - 4396: 56650513 addi a0,a0,1382 # 68f8 <malloc+0x1b74> + 4396: 56e50513 addi a0,a0,1390 # 6900 <malloc+0x1b72> 439a: 00001097 auipc ra,0x1 - 439e: 932080e7 jalr -1742(ra) # 4ccc <printf> + 439e: 93c080e7 jalr -1732(ra) # 4cd6 <printf> if((pid = fork()) < 0) { 43a2: 00000097 auipc ra,0x0 43a6: 55a080e7 jalr 1370(ra) # 48fc <fork> @@ -7026,9 +7026,9 @@ run(void f(char *), char *s) { 43c0: c7b9 beqz a5,440e <run+0x8c> printf("FAILED\n"); 43c2: 00002517 auipc a0,0x2 - 43c6: 55e50513 addi a0,a0,1374 # 6920 <malloc+0x1b9c> + 43c6: 56650513 addi a0,a0,1382 # 6928 <malloc+0x1b9a> 43ca: 00001097 auipc ra,0x1 - 43ce: 902080e7 jalr -1790(ra) # 4ccc <printf> + 43ce: 90c080e7 jalr -1780(ra) # 4cd6 <printf> else printf("OK\n"); return xstatus == 0; @@ -7044,9 +7044,9 @@ run(void f(char *), char *s) { 43e4: 8082 ret printf("runtest: fork error\n"); 43e6: 00002517 auipc a0,0x2 - 43ea: 52250513 addi a0,a0,1314 # 6908 <malloc+0x1b84> + 43ea: 52a50513 addi a0,a0,1322 # 6910 <malloc+0x1b82> 43ee: 00001097 auipc ra,0x1 - 43f2: 8de080e7 jalr -1826(ra) # 4ccc <printf> + 43f2: 8e8080e7 jalr -1816(ra) # 4cd6 <printf> exit(1); 43f6: 4505 li a0,1 43f8: 00000097 auipc ra,0x0 @@ -7060,9 +7060,9 @@ run(void f(char *), char *s) { 440a: 4fe080e7 jalr 1278(ra) # 4904 <exit> printf("OK\n"); 440e: 00002517 auipc a0,0x2 - 4412: 51a50513 addi a0,a0,1306 # 6928 <malloc+0x1ba4> + 4412: 52250513 addi a0,a0,1314 # 6930 <malloc+0x1ba2> 4416: 00001097 auipc ra,0x1 - 441a: 8b6080e7 jalr -1866(ra) # 4ccc <printf> + 441a: 8c0080e7 jalr -1856(ra) # 4cd6 <printf> 441e: bf55 j 43d2 <run+0x50> 0000000000004420 <main>: @@ -7105,10 +7105,10 @@ main(int argc, char *argv[]) char *s; } tests[] = { 4456: 00003797 auipc a5,0x3 - 445a: 8e278793 addi a5,a5,-1822 # 6d38 <randstate+0x8> + 445a: 8ea78793 addi a5,a5,-1814 # 6d40 <randstate+0x8> 445e: c8040713 addi a4,s0,-896 4462: 00003817 auipc a6,0x3 - 4466: c1680813 addi a6,a6,-1002 # 7078 <name> + 4466: c1e80813 addi a6,a6,-994 # 7080 <name> 446a: 6388 ld a0,0(a5) 446c: 678c ld a1,8(a5) 446e: 6b90 ld a2,16(a5) @@ -7127,9 +7127,9 @@ main(int argc, char *argv[]) printf("usertests starting\n"); 4486: 00002517 auipc a0,0x2 - 448a: 55a50513 addi a0,a0,1370 # 69e0 <malloc+0x1c5c> + 448a: 56250513 addi a0,a0,1378 # 69e8 <malloc+0x1c5a> 448e: 00001097 auipc ra,0x1 - 4492: 83e080e7 jalr -1986(ra) # 4ccc <printf> + 4492: 848080e7 jalr -1976(ra) # 4cd6 <printf> int free0 = countfree(); 4496: 00000097 auipc ra,0x0 449a: dba080e7 jalr -582(ra) # 4250 <countfree> @@ -7160,9 +7160,9 @@ main(int argc, char *argv[]) printf("FAILED -- lost some free pages %d (out of %d)\n", free1, free0); 44bc: 8652 mv a2,s4 44be: 00002517 auipc a0,0x2 - 44c2: 4da50513 addi a0,a0,1242 # 6998 <malloc+0x1c14> + 44c2: 4e250513 addi a0,a0,1250 # 69a0 <malloc+0x1c12> 44c6: 00001097 auipc ra,0x1 - 44ca: 806080e7 jalr -2042(ra) # 4ccc <printf> + 44ca: 810080e7 jalr -2032(ra) # 4cd6 <printf> exit(1); 44ce: 4505 li a0,1 44d0: 00000097 auipc ra,0x0 @@ -7170,14 +7170,14 @@ main(int argc, char *argv[]) 44d8: 84ae mv s1,a1 if(argc == 2 && strcmp(argv[1], "-c") == 0){ 44da: 00002597 auipc a1,0x2 - 44de: 45658593 addi a1,a1,1110 # 6930 <malloc+0x1bac> + 44de: 45e58593 addi a1,a1,1118 # 6938 <malloc+0x1baa> 44e2: 6488 ld a0,8(s1) 44e4: 00000097 auipc ra,0x0 44e8: 1b2080e7 jalr 434(ra) # 4696 <strcmp> 44ec: 10050563 beqz a0,45f6 <main+0x1d6> } else if(argc == 2 && strcmp(argv[1], "-C") == 0){ 44f0: 00002597 auipc a1,0x2 - 44f4: 52858593 addi a1,a1,1320 # 6a18 <malloc+0x1c94> + 44f4: 53058593 addi a1,a1,1328 # 6a20 <malloc+0x1c92> 44f8: 6488 ld a0,8(s1) 44fa: 00000097 auipc ra,0x0 44fe: 19c080e7 jalr 412(ra) # 4696 <strcmp> @@ -7189,9 +7189,9 @@ main(int argc, char *argv[]) 4510: f4f713e3 bne a4,a5,4456 <main+0x36> printf("Usage: usertests [-c] [testname]\n"); 4514: 00002517 auipc a0,0x2 - 4518: 42450513 addi a0,a0,1060 # 6938 <malloc+0x1bb4> + 4518: 42c50513 addi a0,a0,1068 # 6940 <malloc+0x1bb2> 451c: 00000097 auipc ra,0x0 - 4520: 7b0080e7 jalr 1968(ra) # 4ccc <printf> + 4520: 7ba080e7 jalr 1978(ra) # 4cd6 <printf> exit(1); 4524: 4505 li a0,1 4526: 00000097 auipc ra,0x0 @@ -7204,7 +7204,7 @@ main(int argc, char *argv[]) 4538: 40a905bb subw a1,s2,a0 453c: 855a mv a0,s6 453e: 00000097 auipc ra,0x0 - 4542: 78e080e7 jalr 1934(ra) # 4ccc <printf> + 4542: 798080e7 jalr 1944(ra) # 4cd6 <printf> if(continuous != 2) 4546: 09498463 beq s3,s4,45ce <main+0x1ae> exit(1); @@ -7234,9 +7234,9 @@ main(int argc, char *argv[]) 457c: f20989e3 beqz s3,44ae <main+0x8e> printf("SOME TESTS FAILED\n"); 4580: 00002517 auipc a0,0x2 - 4584: 40050513 addi a0,a0,1024 # 6980 <malloc+0x1bfc> + 4584: 40850513 addi a0,a0,1032 # 6988 <malloc+0x1bfa> 4588: 00000097 auipc ra,0x0 - 458c: 744080e7 jalr 1860(ra) # 4ccc <printf> + 458c: 74e080e7 jalr 1870(ra) # 4cd6 <printf> exit(1); 4590: 4505 li a0,1 4592: 00000097 auipc ra,0x0 @@ -7244,9 +7244,9 @@ main(int argc, char *argv[]) } else { printf("ALL TESTS PASSED\n"); 459a: 00002517 auipc a0,0x2 - 459e: 42e50513 addi a0,a0,1070 # 69c8 <malloc+0x1c44> + 459e: 43650513 addi a0,a0,1078 # 69d0 <malloc+0x1c42> 45a2: 00000097 auipc ra,0x0 - 45a6: 72a080e7 jalr 1834(ra) # 4ccc <printf> + 45a6: 734080e7 jalr 1844(ra) # 4cd6 <printf> exit(0); 45aa: 4501 li a0,0 45ac: 00000097 auipc ra,0x0 @@ -7254,7 +7254,7 @@ main(int argc, char *argv[]) printf("SOME TESTS FAILED\n"); 45b4: 8556 mv a0,s5 45b6: 00000097 auipc ra,0x0 - 45ba: 716080e7 jalr 1814(ra) # 4ccc <printf> + 45ba: 720080e7 jalr 1824(ra) # 4cd6 <printf> if(continuous != 2) 45be: f74998e3 bne s3,s4,452e <main+0x10e> int free1 = countfree(); @@ -7284,10 +7284,10 @@ main(int argc, char *argv[]) 45f6: 4985 li s3,1 } tests[] = { 45f8: 00002797 auipc a5,0x2 - 45fc: 74078793 addi a5,a5,1856 # 6d38 <randstate+0x8> + 45fc: 74878793 addi a5,a5,1864 # 6d40 <randstate+0x8> 4600: c8040713 addi a4,s0,-896 4604: 00003817 auipc a6,0x3 - 4608: a7480813 addi a6,a6,-1420 # 7078 <name> + 4608: a7c80813 addi a6,a6,-1412 # 7080 <name> 460c: 6388 ld a0,0(a5) 460e: 678c ld a1,8(a5) 4610: 6b90 ld a2,16(a5) @@ -7301,17 +7301,17 @@ main(int argc, char *argv[]) 4624: ff0794e3 bne a5,a6,460c <main+0x1ec> printf("continuous usertests starting\n"); 4628: 00002517 auipc a0,0x2 - 462c: 3d050513 addi a0,a0,976 # 69f8 <malloc+0x1c74> + 462c: 3d850513 addi a0,a0,984 # 6a00 <malloc+0x1c72> 4630: 00000097 auipc ra,0x0 - 4634: 69c080e7 jalr 1692(ra) # 4ccc <printf> + 4634: 6a6080e7 jalr 1702(ra) # 4cd6 <printf> printf("SOME TESTS FAILED\n"); 4638: 00002a97 auipc s5,0x2 - 463c: 348a8a93 addi s5,s5,840 # 6980 <malloc+0x1bfc> + 463c: 350a8a93 addi s5,s5,848 # 6988 <malloc+0x1bfa> if(continuous != 2) 4640: 4a09 li s4,2 printf("FAILED -- lost %d free pages\n", free0 - free1); 4642: 00002b17 auipc s6,0x2 - 4646: 31eb0b13 addi s6,s6,798 # 6960 <malloc+0x1bdc> + 4646: 326b0b13 addi s6,s6,806 # 6968 <malloc+0x1bda> 464a: b751 j 45ce <main+0x1ae> 000000000000464c <strcpy>: @@ -8070,637 +8070,647 @@ uname: ret 49f2: 8082 ret -00000000000049f4 <putc>: +00000000000049f4 <times>: +.global times +times: + li a7, SYS_times + 49f4: 09900893 li a7,153 + ecall + 49f8: 00000073 ecall + ret + 49fc: 8082 ret + +00000000000049fe <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 49f4: 1101 addi sp,sp,-32 - 49f6: ec06 sd ra,24(sp) - 49f8: e822 sd s0,16(sp) - 49fa: 1000 addi s0,sp,32 - 49fc: feb407a3 sb a1,-17(s0) + 49fe: 1101 addi sp,sp,-32 + 4a00: ec06 sd ra,24(sp) + 4a02: e822 sd s0,16(sp) + 4a04: 1000 addi s0,sp,32 + 4a06: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 4a00: 4605 li a2,1 - 4a02: fef40593 addi a1,s0,-17 - 4a06: 00000097 auipc ra,0x0 - 4a0a: f24080e7 jalr -220(ra) # 492a <write> + 4a0a: 4605 li a2,1 + 4a0c: fef40593 addi a1,s0,-17 + 4a10: 00000097 auipc ra,0x0 + 4a14: f1a080e7 jalr -230(ra) # 492a <write> } - 4a0e: 60e2 ld ra,24(sp) - 4a10: 6442 ld s0,16(sp) - 4a12: 6105 addi sp,sp,32 - 4a14: 8082 ret + 4a18: 60e2 ld ra,24(sp) + 4a1a: 6442 ld s0,16(sp) + 4a1c: 6105 addi sp,sp,32 + 4a1e: 8082 ret -0000000000004a16 <printint>: +0000000000004a20 <printint>: static void printint(int fd, int xx, int base, int sgn) { - 4a16: 7139 addi sp,sp,-64 - 4a18: fc06 sd ra,56(sp) - 4a1a: f822 sd s0,48(sp) - 4a1c: f426 sd s1,40(sp) - 4a1e: f04a sd s2,32(sp) - 4a20: ec4e sd s3,24(sp) - 4a22: 0080 addi s0,sp,64 - 4a24: 84aa mv s1,a0 + 4a20: 7139 addi sp,sp,-64 + 4a22: fc06 sd ra,56(sp) + 4a24: f822 sd s0,48(sp) + 4a26: f426 sd s1,40(sp) + 4a28: f04a sd s2,32(sp) + 4a2a: ec4e sd s3,24(sp) + 4a2c: 0080 addi s0,sp,64 + 4a2e: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 4a26: c299 beqz a3,4a2c <printint+0x16> - 4a28: 0805c863 bltz a1,4ab8 <printint+0xa2> + 4a30: c299 beqz a3,4a36 <printint+0x16> + 4a32: 0805c863 bltz a1,4ac2 <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 4a2c: 2581 sext.w a1,a1 + 4a36: 2581 sext.w a1,a1 neg = 0; - 4a2e: 4881 li a7,0 + 4a38: 4881 li a7,0 } i = 0; - 4a30: fc040993 addi s3,s0,-64 + 4a3a: fc040993 addi s3,s0,-64 neg = 0; - 4a34: 86ce mv a3,s3 + 4a3e: 86ce mv a3,s3 i = 0; - 4a36: 4701 li a4,0 + 4a40: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 4a38: 2601 sext.w a2,a2 - 4a3a: 00002517 auipc a0,0x2 - 4a3e: 2be50513 addi a0,a0,702 # 6cf8 <digits> - 4a42: 883a mv a6,a4 - 4a44: 2705 addiw a4,a4,1 - 4a46: 02c5f7bb remuw a5,a1,a2 - 4a4a: 1782 slli a5,a5,0x20 - 4a4c: 9381 srli a5,a5,0x20 - 4a4e: 97aa add a5,a5,a0 - 4a50: 0007c783 lbu a5,0(a5) - 4a54: 00f68023 sb a5,0(a3) + 4a42: 2601 sext.w a2,a2 + 4a44: 00002517 auipc a0,0x2 + 4a48: 2bc50513 addi a0,a0,700 # 6d00 <digits> + 4a4c: 883a mv a6,a4 + 4a4e: 2705 addiw a4,a4,1 + 4a50: 02c5f7bb remuw a5,a1,a2 + 4a54: 1782 slli a5,a5,0x20 + 4a56: 9381 srli a5,a5,0x20 + 4a58: 97aa add a5,a5,a0 + 4a5a: 0007c783 lbu a5,0(a5) + 4a5e: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 4a58: 0005879b sext.w a5,a1 - 4a5c: 02c5d5bb divuw a1,a1,a2 - 4a60: 0685 addi a3,a3,1 - 4a62: fec7f0e3 bgeu a5,a2,4a42 <printint+0x2c> + 4a62: 0005879b sext.w a5,a1 + 4a66: 02c5d5bb divuw a1,a1,a2 + 4a6a: 0685 addi a3,a3,1 + 4a6c: fec7f0e3 bgeu a5,a2,4a4c <printint+0x2c> if(neg) - 4a66: 00088c63 beqz a7,4a7e <printint+0x68> + 4a70: 00088c63 beqz a7,4a88 <printint+0x68> buf[i++] = '-'; - 4a6a: fd070793 addi a5,a4,-48 - 4a6e: 00878733 add a4,a5,s0 - 4a72: 02d00793 li a5,45 - 4a76: fef70823 sb a5,-16(a4) - 4a7a: 0028071b addiw a4,a6,2 + 4a74: fd070793 addi a5,a4,-48 + 4a78: 00878733 add a4,a5,s0 + 4a7c: 02d00793 li a5,45 + 4a80: fef70823 sb a5,-16(a4) + 4a84: 0028071b addiw a4,a6,2 while(--i >= 0) - 4a7e: 02e05663 blez a4,4aaa <printint+0x94> - 4a82: fc040913 addi s2,s0,-64 - 4a86: 993a add s2,s2,a4 - 4a88: 19fd addi s3,s3,-1 - 4a8a: 99ba add s3,s3,a4 - 4a8c: 377d addiw a4,a4,-1 - 4a8e: 1702 slli a4,a4,0x20 - 4a90: 9301 srli a4,a4,0x20 - 4a92: 40e989b3 sub s3,s3,a4 + 4a88: 02e05663 blez a4,4ab4 <printint+0x94> + 4a8c: fc040913 addi s2,s0,-64 + 4a90: 993a add s2,s2,a4 + 4a92: 19fd addi s3,s3,-1 + 4a94: 99ba add s3,s3,a4 + 4a96: 377d addiw a4,a4,-1 + 4a98: 1702 slli a4,a4,0x20 + 4a9a: 9301 srli a4,a4,0x20 + 4a9c: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 4a96: fff94583 lbu a1,-1(s2) - 4a9a: 8526 mv a0,s1 - 4a9c: 00000097 auipc ra,0x0 - 4aa0: f58080e7 jalr -168(ra) # 49f4 <putc> + 4aa0: fff94583 lbu a1,-1(s2) + 4aa4: 8526 mv a0,s1 + 4aa6: 00000097 auipc ra,0x0 + 4aaa: f58080e7 jalr -168(ra) # 49fe <putc> while(--i >= 0) - 4aa4: 197d addi s2,s2,-1 - 4aa6: ff3918e3 bne s2,s3,4a96 <printint+0x80> + 4aae: 197d addi s2,s2,-1 + 4ab0: ff3918e3 bne s2,s3,4aa0 <printint+0x80> } - 4aaa: 70e2 ld ra,56(sp) - 4aac: 7442 ld s0,48(sp) - 4aae: 74a2 ld s1,40(sp) - 4ab0: 7902 ld s2,32(sp) - 4ab2: 69e2 ld s3,24(sp) - 4ab4: 6121 addi sp,sp,64 - 4ab6: 8082 ret + 4ab4: 70e2 ld ra,56(sp) + 4ab6: 7442 ld s0,48(sp) + 4ab8: 74a2 ld s1,40(sp) + 4aba: 7902 ld s2,32(sp) + 4abc: 69e2 ld s3,24(sp) + 4abe: 6121 addi sp,sp,64 + 4ac0: 8082 ret x = -xx; - 4ab8: 40b005bb negw a1,a1 + 4ac2: 40b005bb negw a1,a1 neg = 1; - 4abc: 4885 li a7,1 + 4ac6: 4885 li a7,1 x = -xx; - 4abe: bf8d j 4a30 <printint+0x1a> + 4ac8: bf8d j 4a3a <printint+0x1a> -0000000000004ac0 <vprintf>: +0000000000004aca <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 4ac0: 7119 addi sp,sp,-128 - 4ac2: fc86 sd ra,120(sp) - 4ac4: f8a2 sd s0,112(sp) - 4ac6: f4a6 sd s1,104(sp) - 4ac8: f0ca sd s2,96(sp) - 4aca: ecce sd s3,88(sp) - 4acc: e8d2 sd s4,80(sp) - 4ace: e4d6 sd s5,72(sp) - 4ad0: e0da sd s6,64(sp) - 4ad2: fc5e sd s7,56(sp) - 4ad4: f862 sd s8,48(sp) - 4ad6: f466 sd s9,40(sp) - 4ad8: f06a sd s10,32(sp) - 4ada: ec6e sd s11,24(sp) - 4adc: 0100 addi s0,sp,128 + 4aca: 7119 addi sp,sp,-128 + 4acc: fc86 sd ra,120(sp) + 4ace: f8a2 sd s0,112(sp) + 4ad0: f4a6 sd s1,104(sp) + 4ad2: f0ca sd s2,96(sp) + 4ad4: ecce sd s3,88(sp) + 4ad6: e8d2 sd s4,80(sp) + 4ad8: e4d6 sd s5,72(sp) + 4ada: e0da sd s6,64(sp) + 4adc: fc5e sd s7,56(sp) + 4ade: f862 sd s8,48(sp) + 4ae0: f466 sd s9,40(sp) + 4ae2: f06a sd s10,32(sp) + 4ae4: ec6e sd s11,24(sp) + 4ae6: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 4ade: 0005c903 lbu s2,0(a1) - 4ae2: 18090f63 beqz s2,4c80 <vprintf+0x1c0> - 4ae6: 8aaa mv s5,a0 - 4ae8: 8b32 mv s6,a2 - 4aea: 00158493 addi s1,a1,1 + 4ae8: 0005c903 lbu s2,0(a1) + 4aec: 18090f63 beqz s2,4c8a <vprintf+0x1c0> + 4af0: 8aaa mv s5,a0 + 4af2: 8b32 mv s6,a2 + 4af4: 00158493 addi s1,a1,1 state = 0; - 4aee: 4981 li s3,0 + 4af8: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 4af0: 02500a13 li s4,37 - 4af4: 4c55 li s8,21 - 4af6: 00002c97 auipc s9,0x2 - 4afa: 1aac8c93 addi s9,s9,426 # 6ca0 <malloc+0x1f1c> + 4afa: 02500a13 li s4,37 + 4afe: 4c55 li s8,21 + 4b00: 00002c97 auipc s9,0x2 + 4b04: 1a8c8c93 addi s9,s9,424 # 6ca8 <malloc+0x1f1a> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 4afe: 02800d93 li s11,40 + 4b08: 02800d93 li s11,40 putc(fd, 'x'); - 4b02: 4d41 li s10,16 + 4b0c: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 4b04: 00002b97 auipc s7,0x2 - 4b08: 1f4b8b93 addi s7,s7,500 # 6cf8 <digits> - 4b0c: a839 j 4b2a <vprintf+0x6a> + 4b0e: 00002b97 auipc s7,0x2 + 4b12: 1f2b8b93 addi s7,s7,498 # 6d00 <digits> + 4b16: a839 j 4b34 <vprintf+0x6a> putc(fd, c); - 4b0e: 85ca mv a1,s2 - 4b10: 8556 mv a0,s5 - 4b12: 00000097 auipc ra,0x0 - 4b16: ee2080e7 jalr -286(ra) # 49f4 <putc> - 4b1a: a019 j 4b20 <vprintf+0x60> + 4b18: 85ca mv a1,s2 + 4b1a: 8556 mv a0,s5 + 4b1c: 00000097 auipc ra,0x0 + 4b20: ee2080e7 jalr -286(ra) # 49fe <putc> + 4b24: a019 j 4b2a <vprintf+0x60> } else if(state == '%'){ - 4b1c: 01498d63 beq s3,s4,4b36 <vprintf+0x76> + 4b26: 01498d63 beq s3,s4,4b40 <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 4b20: 0485 addi s1,s1,1 - 4b22: fff4c903 lbu s2,-1(s1) - 4b26: 14090d63 beqz s2,4c80 <vprintf+0x1c0> + 4b2a: 0485 addi s1,s1,1 + 4b2c: fff4c903 lbu s2,-1(s1) + 4b30: 14090d63 beqz s2,4c8a <vprintf+0x1c0> if(state == 0){ - 4b2a: fe0999e3 bnez s3,4b1c <vprintf+0x5c> + 4b34: fe0999e3 bnez s3,4b26 <vprintf+0x5c> if(c == '%'){ - 4b2e: ff4910e3 bne s2,s4,4b0e <vprintf+0x4e> + 4b38: ff4910e3 bne s2,s4,4b18 <vprintf+0x4e> state = '%'; - 4b32: 89d2 mv s3,s4 - 4b34: b7f5 j 4b20 <vprintf+0x60> + 4b3c: 89d2 mv s3,s4 + 4b3e: b7f5 j 4b2a <vprintf+0x60> if(c == 'd'){ - 4b36: 11490c63 beq s2,s4,4c4e <vprintf+0x18e> - 4b3a: f9d9079b addiw a5,s2,-99 - 4b3e: 0ff7f793 zext.b a5,a5 - 4b42: 10fc6e63 bltu s8,a5,4c5e <vprintf+0x19e> - 4b46: f9d9079b addiw a5,s2,-99 - 4b4a: 0ff7f713 zext.b a4,a5 - 4b4e: 10ec6863 bltu s8,a4,4c5e <vprintf+0x19e> - 4b52: 00271793 slli a5,a4,0x2 - 4b56: 97e6 add a5,a5,s9 - 4b58: 439c lw a5,0(a5) - 4b5a: 97e6 add a5,a5,s9 - 4b5c: 8782 jr a5 + 4b40: 11490c63 beq s2,s4,4c58 <vprintf+0x18e> + 4b44: f9d9079b addiw a5,s2,-99 + 4b48: 0ff7f793 zext.b a5,a5 + 4b4c: 10fc6e63 bltu s8,a5,4c68 <vprintf+0x19e> + 4b50: f9d9079b addiw a5,s2,-99 + 4b54: 0ff7f713 zext.b a4,a5 + 4b58: 10ec6863 bltu s8,a4,4c68 <vprintf+0x19e> + 4b5c: 00271793 slli a5,a4,0x2 + 4b60: 97e6 add a5,a5,s9 + 4b62: 439c lw a5,0(a5) + 4b64: 97e6 add a5,a5,s9 + 4b66: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 4b5e: 008b0913 addi s2,s6,8 - 4b62: 4685 li a3,1 - 4b64: 4629 li a2,10 - 4b66: 000b2583 lw a1,0(s6) - 4b6a: 8556 mv a0,s5 - 4b6c: 00000097 auipc ra,0x0 - 4b70: eaa080e7 jalr -342(ra) # 4a16 <printint> - 4b74: 8b4a mv s6,s2 + 4b68: 008b0913 addi s2,s6,8 + 4b6c: 4685 li a3,1 + 4b6e: 4629 li a2,10 + 4b70: 000b2583 lw a1,0(s6) + 4b74: 8556 mv a0,s5 + 4b76: 00000097 auipc ra,0x0 + 4b7a: eaa080e7 jalr -342(ra) # 4a20 <printint> + 4b7e: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 4b76: 4981 li s3,0 - 4b78: b765 j 4b20 <vprintf+0x60> + 4b80: 4981 li s3,0 + 4b82: b765 j 4b2a <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 4b7a: 008b0913 addi s2,s6,8 - 4b7e: 4681 li a3,0 - 4b80: 4629 li a2,10 - 4b82: 000b2583 lw a1,0(s6) - 4b86: 8556 mv a0,s5 - 4b88: 00000097 auipc ra,0x0 - 4b8c: e8e080e7 jalr -370(ra) # 4a16 <printint> - 4b90: 8b4a mv s6,s2 + 4b84: 008b0913 addi s2,s6,8 + 4b88: 4681 li a3,0 + 4b8a: 4629 li a2,10 + 4b8c: 000b2583 lw a1,0(s6) + 4b90: 8556 mv a0,s5 + 4b92: 00000097 auipc ra,0x0 + 4b96: e8e080e7 jalr -370(ra) # 4a20 <printint> + 4b9a: 8b4a mv s6,s2 state = 0; - 4b92: 4981 li s3,0 - 4b94: b771 j 4b20 <vprintf+0x60> + 4b9c: 4981 li s3,0 + 4b9e: b771 j 4b2a <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 4b96: 008b0913 addi s2,s6,8 - 4b9a: 4681 li a3,0 - 4b9c: 866a mv a2,s10 - 4b9e: 000b2583 lw a1,0(s6) - 4ba2: 8556 mv a0,s5 - 4ba4: 00000097 auipc ra,0x0 - 4ba8: e72080e7 jalr -398(ra) # 4a16 <printint> - 4bac: 8b4a mv s6,s2 + 4ba0: 008b0913 addi s2,s6,8 + 4ba4: 4681 li a3,0 + 4ba6: 866a mv a2,s10 + 4ba8: 000b2583 lw a1,0(s6) + 4bac: 8556 mv a0,s5 + 4bae: 00000097 auipc ra,0x0 + 4bb2: e72080e7 jalr -398(ra) # 4a20 <printint> + 4bb6: 8b4a mv s6,s2 state = 0; - 4bae: 4981 li s3,0 - 4bb0: bf85 j 4b20 <vprintf+0x60> + 4bb8: 4981 li s3,0 + 4bba: bf85 j 4b2a <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 4bb2: 008b0793 addi a5,s6,8 - 4bb6: f8f43423 sd a5,-120(s0) - 4bba: 000b3983 ld s3,0(s6) + 4bbc: 008b0793 addi a5,s6,8 + 4bc0: f8f43423 sd a5,-120(s0) + 4bc4: 000b3983 ld s3,0(s6) putc(fd, '0'); - 4bbe: 03000593 li a1,48 - 4bc2: 8556 mv a0,s5 - 4bc4: 00000097 auipc ra,0x0 - 4bc8: e30080e7 jalr -464(ra) # 49f4 <putc> + 4bc8: 03000593 li a1,48 + 4bcc: 8556 mv a0,s5 + 4bce: 00000097 auipc ra,0x0 + 4bd2: e30080e7 jalr -464(ra) # 49fe <putc> putc(fd, 'x'); - 4bcc: 07800593 li a1,120 - 4bd0: 8556 mv a0,s5 - 4bd2: 00000097 auipc ra,0x0 - 4bd6: e22080e7 jalr -478(ra) # 49f4 <putc> - 4bda: 896a mv s2,s10 + 4bd6: 07800593 li a1,120 + 4bda: 8556 mv a0,s5 + 4bdc: 00000097 auipc ra,0x0 + 4be0: e22080e7 jalr -478(ra) # 49fe <putc> + 4be4: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 4bdc: 03c9d793 srli a5,s3,0x3c - 4be0: 97de add a5,a5,s7 - 4be2: 0007c583 lbu a1,0(a5) - 4be6: 8556 mv a0,s5 - 4be8: 00000097 auipc ra,0x0 - 4bec: e0c080e7 jalr -500(ra) # 49f4 <putc> + 4be6: 03c9d793 srli a5,s3,0x3c + 4bea: 97de add a5,a5,s7 + 4bec: 0007c583 lbu a1,0(a5) + 4bf0: 8556 mv a0,s5 + 4bf2: 00000097 auipc ra,0x0 + 4bf6: e0c080e7 jalr -500(ra) # 49fe <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 4bf0: 0992 slli s3,s3,0x4 - 4bf2: 397d addiw s2,s2,-1 - 4bf4: fe0914e3 bnez s2,4bdc <vprintf+0x11c> + 4bfa: 0992 slli s3,s3,0x4 + 4bfc: 397d addiw s2,s2,-1 + 4bfe: fe0914e3 bnez s2,4be6 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 4bf8: f8843b03 ld s6,-120(s0) + 4c02: f8843b03 ld s6,-120(s0) state = 0; - 4bfc: 4981 li s3,0 - 4bfe: b70d j 4b20 <vprintf+0x60> + 4c06: 4981 li s3,0 + 4c08: b70d j 4b2a <vprintf+0x60> s = va_arg(ap, char*); - 4c00: 008b0913 addi s2,s6,8 - 4c04: 000b3983 ld s3,0(s6) + 4c0a: 008b0913 addi s2,s6,8 + 4c0e: 000b3983 ld s3,0(s6) if(s == 0) - 4c08: 02098163 beqz s3,4c2a <vprintf+0x16a> + 4c12: 02098163 beqz s3,4c34 <vprintf+0x16a> while(*s != 0){ - 4c0c: 0009c583 lbu a1,0(s3) - 4c10: c5ad beqz a1,4c7a <vprintf+0x1ba> + 4c16: 0009c583 lbu a1,0(s3) + 4c1a: c5ad beqz a1,4c84 <vprintf+0x1ba> putc(fd, *s); - 4c12: 8556 mv a0,s5 - 4c14: 00000097 auipc ra,0x0 - 4c18: de0080e7 jalr -544(ra) # 49f4 <putc> + 4c1c: 8556 mv a0,s5 + 4c1e: 00000097 auipc ra,0x0 + 4c22: de0080e7 jalr -544(ra) # 49fe <putc> s++; - 4c1c: 0985 addi s3,s3,1 + 4c26: 0985 addi s3,s3,1 while(*s != 0){ - 4c1e: 0009c583 lbu a1,0(s3) - 4c22: f9e5 bnez a1,4c12 <vprintf+0x152> + 4c28: 0009c583 lbu a1,0(s3) + 4c2c: f9e5 bnez a1,4c1c <vprintf+0x152> s = va_arg(ap, char*); - 4c24: 8b4a mv s6,s2 + 4c2e: 8b4a mv s6,s2 state = 0; - 4c26: 4981 li s3,0 - 4c28: bde5 j 4b20 <vprintf+0x60> + 4c30: 4981 li s3,0 + 4c32: bde5 j 4b2a <vprintf+0x60> s = "(null)"; - 4c2a: 00002997 auipc s3,0x2 - 4c2e: 06e98993 addi s3,s3,110 # 6c98 <malloc+0x1f14> + 4c34: 00002997 auipc s3,0x2 + 4c38: 06c98993 addi s3,s3,108 # 6ca0 <malloc+0x1f12> while(*s != 0){ - 4c32: 85ee mv a1,s11 - 4c34: bff9 j 4c12 <vprintf+0x152> + 4c3c: 85ee mv a1,s11 + 4c3e: bff9 j 4c1c <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 4c36: 008b0913 addi s2,s6,8 - 4c3a: 000b4583 lbu a1,0(s6) - 4c3e: 8556 mv a0,s5 - 4c40: 00000097 auipc ra,0x0 - 4c44: db4080e7 jalr -588(ra) # 49f4 <putc> - 4c48: 8b4a mv s6,s2 + 4c40: 008b0913 addi s2,s6,8 + 4c44: 000b4583 lbu a1,0(s6) + 4c48: 8556 mv a0,s5 + 4c4a: 00000097 auipc ra,0x0 + 4c4e: db4080e7 jalr -588(ra) # 49fe <putc> + 4c52: 8b4a mv s6,s2 state = 0; - 4c4a: 4981 li s3,0 - 4c4c: bdd1 j 4b20 <vprintf+0x60> + 4c54: 4981 li s3,0 + 4c56: bdd1 j 4b2a <vprintf+0x60> putc(fd, c); - 4c4e: 85d2 mv a1,s4 - 4c50: 8556 mv a0,s5 - 4c52: 00000097 auipc ra,0x0 - 4c56: da2080e7 jalr -606(ra) # 49f4 <putc> + 4c58: 85d2 mv a1,s4 + 4c5a: 8556 mv a0,s5 + 4c5c: 00000097 auipc ra,0x0 + 4c60: da2080e7 jalr -606(ra) # 49fe <putc> state = 0; - 4c5a: 4981 li s3,0 - 4c5c: b5d1 j 4b20 <vprintf+0x60> + 4c64: 4981 li s3,0 + 4c66: b5d1 j 4b2a <vprintf+0x60> putc(fd, '%'); - 4c5e: 85d2 mv a1,s4 - 4c60: 8556 mv a0,s5 - 4c62: 00000097 auipc ra,0x0 - 4c66: d92080e7 jalr -622(ra) # 49f4 <putc> + 4c68: 85d2 mv a1,s4 + 4c6a: 8556 mv a0,s5 + 4c6c: 00000097 auipc ra,0x0 + 4c70: d92080e7 jalr -622(ra) # 49fe <putc> putc(fd, c); - 4c6a: 85ca mv a1,s2 - 4c6c: 8556 mv a0,s5 - 4c6e: 00000097 auipc ra,0x0 - 4c72: d86080e7 jalr -634(ra) # 49f4 <putc> + 4c74: 85ca mv a1,s2 + 4c76: 8556 mv a0,s5 + 4c78: 00000097 auipc ra,0x0 + 4c7c: d86080e7 jalr -634(ra) # 49fe <putc> state = 0; - 4c76: 4981 li s3,0 - 4c78: b565 j 4b20 <vprintf+0x60> + 4c80: 4981 li s3,0 + 4c82: b565 j 4b2a <vprintf+0x60> s = va_arg(ap, char*); - 4c7a: 8b4a mv s6,s2 + 4c84: 8b4a mv s6,s2 state = 0; - 4c7c: 4981 li s3,0 - 4c7e: b54d j 4b20 <vprintf+0x60> + 4c86: 4981 li s3,0 + 4c88: b54d j 4b2a <vprintf+0x60> } } } - 4c80: 70e6 ld ra,120(sp) - 4c82: 7446 ld s0,112(sp) - 4c84: 74a6 ld s1,104(sp) - 4c86: 7906 ld s2,96(sp) - 4c88: 69e6 ld s3,88(sp) - 4c8a: 6a46 ld s4,80(sp) - 4c8c: 6aa6 ld s5,72(sp) - 4c8e: 6b06 ld s6,64(sp) - 4c90: 7be2 ld s7,56(sp) - 4c92: 7c42 ld s8,48(sp) - 4c94: 7ca2 ld s9,40(sp) - 4c96: 7d02 ld s10,32(sp) - 4c98: 6de2 ld s11,24(sp) - 4c9a: 6109 addi sp,sp,128 - 4c9c: 8082 ret - -0000000000004c9e <fprintf>: + 4c8a: 70e6 ld ra,120(sp) + 4c8c: 7446 ld s0,112(sp) + 4c8e: 74a6 ld s1,104(sp) + 4c90: 7906 ld s2,96(sp) + 4c92: 69e6 ld s3,88(sp) + 4c94: 6a46 ld s4,80(sp) + 4c96: 6aa6 ld s5,72(sp) + 4c98: 6b06 ld s6,64(sp) + 4c9a: 7be2 ld s7,56(sp) + 4c9c: 7c42 ld s8,48(sp) + 4c9e: 7ca2 ld s9,40(sp) + 4ca0: 7d02 ld s10,32(sp) + 4ca2: 6de2 ld s11,24(sp) + 4ca4: 6109 addi sp,sp,128 + 4ca6: 8082 ret + +0000000000004ca8 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 4c9e: 715d addi sp,sp,-80 - 4ca0: ec06 sd ra,24(sp) - 4ca2: e822 sd s0,16(sp) - 4ca4: 1000 addi s0,sp,32 - 4ca6: e010 sd a2,0(s0) - 4ca8: e414 sd a3,8(s0) - 4caa: e818 sd a4,16(s0) - 4cac: ec1c sd a5,24(s0) - 4cae: 03043023 sd a6,32(s0) - 4cb2: 03143423 sd a7,40(s0) + 4ca8: 715d addi sp,sp,-80 + 4caa: ec06 sd ra,24(sp) + 4cac: e822 sd s0,16(sp) + 4cae: 1000 addi s0,sp,32 + 4cb0: e010 sd a2,0(s0) + 4cb2: e414 sd a3,8(s0) + 4cb4: e818 sd a4,16(s0) + 4cb6: ec1c sd a5,24(s0) + 4cb8: 03043023 sd a6,32(s0) + 4cbc: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 4cb6: 8622 mv a2,s0 - 4cb8: fe843423 sd s0,-24(s0) + 4cc0: 8622 mv a2,s0 + 4cc2: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 4cbc: 00000097 auipc ra,0x0 - 4cc0: e04080e7 jalr -508(ra) # 4ac0 <vprintf> + 4cc6: 00000097 auipc ra,0x0 + 4cca: e04080e7 jalr -508(ra) # 4aca <vprintf> } - 4cc4: 60e2 ld ra,24(sp) - 4cc6: 6442 ld s0,16(sp) - 4cc8: 6161 addi sp,sp,80 - 4cca: 8082 ret + 4cce: 60e2 ld ra,24(sp) + 4cd0: 6442 ld s0,16(sp) + 4cd2: 6161 addi sp,sp,80 + 4cd4: 8082 ret -0000000000004ccc <printf>: +0000000000004cd6 <printf>: void printf(const char *fmt, ...) { - 4ccc: 711d addi sp,sp,-96 - 4cce: ec06 sd ra,24(sp) - 4cd0: e822 sd s0,16(sp) - 4cd2: 1000 addi s0,sp,32 - 4cd4: e40c sd a1,8(s0) - 4cd6: e810 sd a2,16(s0) - 4cd8: ec14 sd a3,24(s0) - 4cda: f018 sd a4,32(s0) - 4cdc: f41c sd a5,40(s0) - 4cde: 03043823 sd a6,48(s0) - 4ce2: 03143c23 sd a7,56(s0) + 4cd6: 711d addi sp,sp,-96 + 4cd8: ec06 sd ra,24(sp) + 4cda: e822 sd s0,16(sp) + 4cdc: 1000 addi s0,sp,32 + 4cde: e40c sd a1,8(s0) + 4ce0: e810 sd a2,16(s0) + 4ce2: ec14 sd a3,24(s0) + 4ce4: f018 sd a4,32(s0) + 4ce6: f41c sd a5,40(s0) + 4ce8: 03043823 sd a6,48(s0) + 4cec: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 4ce6: 00840613 addi a2,s0,8 - 4cea: fec43423 sd a2,-24(s0) + 4cf0: 00840613 addi a2,s0,8 + 4cf4: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 4cee: 85aa mv a1,a0 - 4cf0: 4505 li a0,1 - 4cf2: 00000097 auipc ra,0x0 - 4cf6: dce080e7 jalr -562(ra) # 4ac0 <vprintf> + 4cf8: 85aa mv a1,a0 + 4cfa: 4505 li a0,1 + 4cfc: 00000097 auipc ra,0x0 + 4d00: dce080e7 jalr -562(ra) # 4aca <vprintf> } - 4cfa: 60e2 ld ra,24(sp) - 4cfc: 6442 ld s0,16(sp) - 4cfe: 6125 addi sp,sp,96 - 4d00: 8082 ret + 4d04: 60e2 ld ra,24(sp) + 4d06: 6442 ld s0,16(sp) + 4d08: 6125 addi sp,sp,96 + 4d0a: 8082 ret -0000000000004d02 <free>: +0000000000004d0c <free>: static Header base; static Header *freep; void free(void *ap) { - 4d02: 1141 addi sp,sp,-16 - 4d04: e422 sd s0,8(sp) - 4d06: 0800 addi s0,sp,16 + 4d0c: 1141 addi sp,sp,-16 + 4d0e: e422 sd s0,8(sp) + 4d10: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 4d08: ff050693 addi a3,a0,-16 + 4d12: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 4d0c: 00007797 auipc a5,0x7 - 4d10: 38c7b783 ld a5,908(a5) # c098 <freep> - 4d14: a02d j 4d3e <free+0x3c> + 4d16: 00007797 auipc a5,0x7 + 4d1a: 38a7b783 ld a5,906(a5) # c0a0 <freep> + 4d1e: a02d j 4d48 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 4d16: 4618 lw a4,8(a2) - 4d18: 9f2d addw a4,a4,a1 - 4d1a: fee52c23 sw a4,-8(a0) + 4d20: 4618 lw a4,8(a2) + 4d22: 9f2d addw a4,a4,a1 + 4d24: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 4d1e: 6398 ld a4,0(a5) - 4d20: 6310 ld a2,0(a4) - 4d22: a83d j 4d60 <free+0x5e> + 4d28: 6398 ld a4,0(a5) + 4d2a: 6310 ld a2,0(a4) + 4d2c: a83d j 4d6a <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 4d24: ff852703 lw a4,-8(a0) - 4d28: 9f31 addw a4,a4,a2 - 4d2a: c798 sw a4,8(a5) + 4d2e: ff852703 lw a4,-8(a0) + 4d32: 9f31 addw a4,a4,a2 + 4d34: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 4d2c: ff053683 ld a3,-16(a0) - 4d30: a091 j 4d74 <free+0x72> + 4d36: ff053683 ld a3,-16(a0) + 4d3a: a091 j 4d7e <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 4d32: 6398 ld a4,0(a5) - 4d34: 00e7e463 bltu a5,a4,4d3c <free+0x3a> - 4d38: 00e6ea63 bltu a3,a4,4d4c <free+0x4a> + 4d3c: 6398 ld a4,0(a5) + 4d3e: 00e7e463 bltu a5,a4,4d46 <free+0x3a> + 4d42: 00e6ea63 bltu a3,a4,4d56 <free+0x4a> { - 4d3c: 87ba mv a5,a4 + 4d46: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 4d3e: fed7fae3 bgeu a5,a3,4d32 <free+0x30> - 4d42: 6398 ld a4,0(a5) - 4d44: 00e6e463 bltu a3,a4,4d4c <free+0x4a> + 4d48: fed7fae3 bgeu a5,a3,4d3c <free+0x30> + 4d4c: 6398 ld a4,0(a5) + 4d4e: 00e6e463 bltu a3,a4,4d56 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 4d48: fee7eae3 bltu a5,a4,4d3c <free+0x3a> + 4d52: fee7eae3 bltu a5,a4,4d46 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 4d4c: ff852583 lw a1,-8(a0) - 4d50: 6390 ld a2,0(a5) - 4d52: 02059813 slli a6,a1,0x20 - 4d56: 01c85713 srli a4,a6,0x1c - 4d5a: 9736 add a4,a4,a3 - 4d5c: fae60de3 beq a2,a4,4d16 <free+0x14> + 4d56: ff852583 lw a1,-8(a0) + 4d5a: 6390 ld a2,0(a5) + 4d5c: 02059813 slli a6,a1,0x20 + 4d60: 01c85713 srli a4,a6,0x1c + 4d64: 9736 add a4,a4,a3 + 4d66: fae60de3 beq a2,a4,4d20 <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 4d60: fec53823 sd a2,-16(a0) + 4d6a: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 4d64: 4790 lw a2,8(a5) - 4d66: 02061593 slli a1,a2,0x20 - 4d6a: 01c5d713 srli a4,a1,0x1c - 4d6e: 973e add a4,a4,a5 - 4d70: fae68ae3 beq a3,a4,4d24 <free+0x22> + 4d6e: 4790 lw a2,8(a5) + 4d70: 02061593 slli a1,a2,0x20 + 4d74: 01c5d713 srli a4,a1,0x1c + 4d78: 973e add a4,a4,a5 + 4d7a: fae68ae3 beq a3,a4,4d2e <free+0x22> p->s.ptr = bp->s.ptr; - 4d74: e394 sd a3,0(a5) + 4d7e: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 4d76: 00007717 auipc a4,0x7 - 4d7a: 32f73123 sd a5,802(a4) # c098 <freep> + 4d80: 00007717 auipc a4,0x7 + 4d84: 32f73023 sd a5,800(a4) # c0a0 <freep> } - 4d7e: 6422 ld s0,8(sp) - 4d80: 0141 addi sp,sp,16 - 4d82: 8082 ret + 4d88: 6422 ld s0,8(sp) + 4d8a: 0141 addi sp,sp,16 + 4d8c: 8082 ret -0000000000004d84 <malloc>: +0000000000004d8e <malloc>: return freep; } void* malloc(uint nbytes) { - 4d84: 7139 addi sp,sp,-64 - 4d86: fc06 sd ra,56(sp) - 4d88: f822 sd s0,48(sp) - 4d8a: f426 sd s1,40(sp) - 4d8c: f04a sd s2,32(sp) - 4d8e: ec4e sd s3,24(sp) - 4d90: e852 sd s4,16(sp) - 4d92: e456 sd s5,8(sp) - 4d94: e05a sd s6,0(sp) - 4d96: 0080 addi s0,sp,64 + 4d8e: 7139 addi sp,sp,-64 + 4d90: fc06 sd ra,56(sp) + 4d92: f822 sd s0,48(sp) + 4d94: f426 sd s1,40(sp) + 4d96: f04a sd s2,32(sp) + 4d98: ec4e sd s3,24(sp) + 4d9a: e852 sd s4,16(sp) + 4d9c: e456 sd s5,8(sp) + 4d9e: e05a sd s6,0(sp) + 4da0: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 4d98: 02051493 slli s1,a0,0x20 - 4d9c: 9081 srli s1,s1,0x20 - 4d9e: 04bd addi s1,s1,15 - 4da0: 8091 srli s1,s1,0x4 - 4da2: 00148a1b addiw s4,s1,1 - 4da6: 0485 addi s1,s1,1 + 4da2: 02051493 slli s1,a0,0x20 + 4da6: 9081 srli s1,s1,0x20 + 4da8: 04bd addi s1,s1,15 + 4daa: 8091 srli s1,s1,0x4 + 4dac: 00148a1b addiw s4,s1,1 + 4db0: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 4da8: 00007517 auipc a0,0x7 - 4dac: 2f053503 ld a0,752(a0) # c098 <freep> - 4db0: c515 beqz a0,4ddc <malloc+0x58> + 4db2: 00007517 auipc a0,0x7 + 4db6: 2ee53503 ld a0,750(a0) # c0a0 <freep> + 4dba: c515 beqz a0,4de6 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 4db2: 611c ld a5,0(a0) + 4dbc: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 4db4: 4798 lw a4,8(a5) - 4db6: 04977163 bgeu a4,s1,4df8 <malloc+0x74> - 4dba: 89d2 mv s3,s4 - 4dbc: 000a071b sext.w a4,s4 - 4dc0: 6685 lui a3,0x1 - 4dc2: 00d77363 bgeu a4,a3,4dc8 <malloc+0x44> - 4dc6: 6985 lui s3,0x1 - 4dc8: 00098b1b sext.w s6,s3 + 4dbe: 4798 lw a4,8(a5) + 4dc0: 04977163 bgeu a4,s1,4e02 <malloc+0x74> + 4dc4: 89d2 mv s3,s4 + 4dc6: 000a071b sext.w a4,s4 + 4dca: 6685 lui a3,0x1 + 4dcc: 00d77363 bgeu a4,a3,4dd2 <malloc+0x44> + 4dd0: 6985 lui s3,0x1 + 4dd2: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 4dcc: 0049999b slliw s3,s3,0x4 + 4dd6: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 4dd0: 00007917 auipc s2,0x7 - 4dd4: 2c890913 addi s2,s2,712 # c098 <freep> + 4dda: 00007917 auipc s2,0x7 + 4dde: 2c690913 addi s2,s2,710 # c0a0 <freep> if(p == (char*)-1) - 4dd8: 5afd li s5,-1 - 4dda: a8a5 j 4e52 <malloc+0xce> + 4de2: 5afd li s5,-1 + 4de4: a8a5 j 4e5c <malloc+0xce> base.s.ptr = freep = prevp = &base; - 4ddc: 00007797 auipc a5,0x7 - 4de0: 2bc78793 addi a5,a5,700 # c098 <freep> - 4de4: 00007717 auipc a4,0x7 - 4de8: 2bc70713 addi a4,a4,700 # c0a0 <base> - 4dec: e398 sd a4,0(a5) - 4dee: e798 sd a4,8(a5) + 4de6: 00007797 auipc a5,0x7 + 4dea: 2ba78793 addi a5,a5,698 # c0a0 <freep> + 4dee: 00007717 auipc a4,0x7 + 4df2: 2ba70713 addi a4,a4,698 # c0a8 <base> + 4df6: e398 sd a4,0(a5) + 4df8: e798 sd a4,8(a5) base.s.size = 0; - 4df0: 0007a823 sw zero,16(a5) + 4dfa: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 4df4: 87ba mv a5,a4 - 4df6: b7d1 j 4dba <malloc+0x36> + 4dfe: 87ba mv a5,a4 + 4e00: b7d1 j 4dc4 <malloc+0x36> if(p->s.size == nunits) - 4df8: 02e48c63 beq s1,a4,4e30 <malloc+0xac> + 4e02: 02e48c63 beq s1,a4,4e3a <malloc+0xac> p->s.size -= nunits; - 4dfc: 4147073b subw a4,a4,s4 - 4e00: c798 sw a4,8(a5) + 4e06: 4147073b subw a4,a4,s4 + 4e0a: c798 sw a4,8(a5) p += p->s.size; - 4e02: 02071693 slli a3,a4,0x20 - 4e06: 01c6d713 srli a4,a3,0x1c - 4e0a: 97ba add a5,a5,a4 + 4e0c: 02071693 slli a3,a4,0x20 + 4e10: 01c6d713 srli a4,a3,0x1c + 4e14: 97ba add a5,a5,a4 p->s.size = nunits; - 4e0c: 0147a423 sw s4,8(a5) + 4e16: 0147a423 sw s4,8(a5) freep = prevp; - 4e10: 00007717 auipc a4,0x7 - 4e14: 28a73423 sd a0,648(a4) # c098 <freep> + 4e1a: 00007717 auipc a4,0x7 + 4e1e: 28a73323 sd a0,646(a4) # c0a0 <freep> return (void*)(p + 1); - 4e18: 01078513 addi a0,a5,16 + 4e22: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 4e1c: 70e2 ld ra,56(sp) - 4e1e: 7442 ld s0,48(sp) - 4e20: 74a2 ld s1,40(sp) - 4e22: 7902 ld s2,32(sp) - 4e24: 69e2 ld s3,24(sp) - 4e26: 6a42 ld s4,16(sp) - 4e28: 6aa2 ld s5,8(sp) - 4e2a: 6b02 ld s6,0(sp) - 4e2c: 6121 addi sp,sp,64 - 4e2e: 8082 ret + 4e26: 70e2 ld ra,56(sp) + 4e28: 7442 ld s0,48(sp) + 4e2a: 74a2 ld s1,40(sp) + 4e2c: 7902 ld s2,32(sp) + 4e2e: 69e2 ld s3,24(sp) + 4e30: 6a42 ld s4,16(sp) + 4e32: 6aa2 ld s5,8(sp) + 4e34: 6b02 ld s6,0(sp) + 4e36: 6121 addi sp,sp,64 + 4e38: 8082 ret prevp->s.ptr = p->s.ptr; - 4e30: 6398 ld a4,0(a5) - 4e32: e118 sd a4,0(a0) - 4e34: bff1 j 4e10 <malloc+0x8c> + 4e3a: 6398 ld a4,0(a5) + 4e3c: e118 sd a4,0(a0) + 4e3e: bff1 j 4e1a <malloc+0x8c> hp->s.size = nu; - 4e36: 01652423 sw s6,8(a0) + 4e40: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 4e3a: 0541 addi a0,a0,16 - 4e3c: 00000097 auipc ra,0x0 - 4e40: ec6080e7 jalr -314(ra) # 4d02 <free> + 4e44: 0541 addi a0,a0,16 + 4e46: 00000097 auipc ra,0x0 + 4e4a: ec6080e7 jalr -314(ra) # 4d0c <free> return freep; - 4e44: 00093503 ld a0,0(s2) + 4e4e: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 4e48: d971 beqz a0,4e1c <malloc+0x98> + 4e52: d971 beqz a0,4e26 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 4e4a: 611c ld a5,0(a0) + 4e54: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 4e4c: 4798 lw a4,8(a5) - 4e4e: fa9775e3 bgeu a4,s1,4df8 <malloc+0x74> + 4e56: 4798 lw a4,8(a5) + 4e58: fa9775e3 bgeu a4,s1,4e02 <malloc+0x74> if(p == freep) - 4e52: 00093703 ld a4,0(s2) - 4e56: 853e mv a0,a5 - 4e58: fef719e3 bne a4,a5,4e4a <malloc+0xc6> + 4e5c: 00093703 ld a4,0(s2) + 4e60: 853e mv a0,a5 + 4e62: fef719e3 bne a4,a5,4e54 <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 4e5c: 854e mv a0,s3 - 4e5e: 00000097 auipc ra,0x0 - 4e62: b2a080e7 jalr -1238(ra) # 4988 <sbrk> + 4e66: 854e mv a0,s3 + 4e68: 00000097 auipc ra,0x0 + 4e6c: b20080e7 jalr -1248(ra) # 4988 <sbrk> if(p == (char*)-1) - 4e66: fd5518e3 bne a0,s5,4e36 <malloc+0xb2> + 4e70: fd5518e3 bne a0,s5,4e40 <malloc+0xb2> return 0; - 4e6a: 4501 li a0,0 - 4e6c: bf45 j 4e1c <malloc+0x98> + 4e74: 4501 li a0,0 + 4e76: bf45 j 4e26 <malloc+0x98> diff --git a/xv6-user/usertests.sym b/xv6-user/usertests.sym index bb1853d..7101964 100644 --- a/xv6-user/usertests.sym +++ b/xv6-user/usertests.sym @@ -1,7 +1,7 @@ 0000000000000000 .text -0000000000004e70 .rodata -0000000000006d10 .data -0000000000007078 .bss +0000000000004e78 .rodata +0000000000006d18 .data +0000000000007080 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -14,36 +14,37 @@ 0000000000000000 .debug_loclists 0000000000000000 .debug_rnglists 0000000000000000 usertests.c -0000000000007180 big.0 -0000000000007080 args.1 +0000000000007188 big.0 +0000000000007088 args.1 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -00000000000049f4 putc -0000000000004a16 printint -0000000000006cf8 digits +00000000000049fe putc +0000000000004a20 printint +0000000000006d00 digits 0000000000000000 umalloc.c -000000000000c098 freep -000000000000c0a0 base +000000000000c0a0 freep +000000000000c0a8 base 0000000000000b5c writebig 000000000000464c strcpy 000000000000166a exitwait -0000000000004ccc printf -0000000000007878 __global_pointer$ +0000000000004cd6 printf +0000000000007880 __global_pointer$ 00000000000049a8 dev 0000000000001a82 bigargtest 0000000000004852 memmove 0000000000002eec openiputtest +00000000000049f4 times 00000000000049c8 trace 000000000000341a reparent 0000000000004732 gets -0000000000007078 __SDATA_BEGIN__ +0000000000007080 __SDATA_BEGIN__ 000000000000497e getpid 000000000000149c pipe1 00000000000048e4 memcpy 0000000000002dcc iref 0000000000000ec0 pgbug -0000000000004d84 malloc +0000000000004d8e malloc 00000000000049c0 remove 0000000000000654 copyout 0000000000004990 sleep @@ -58,22 +59,22 @@ 0000000000001102 truncate3 00000000000002f0 bigwrite 000000000000356e sharedfd -0000000000006d30 randstate +0000000000006d38 randstate 0000000000004916 pipe 00000000000049ea uname -0000000000008188 uninit +0000000000008190 uninit 00000000000049d8 rename 0000000000002bd4 dirfile 000000000000492a write 00000000000000d0 bsstest 0000000000004958 fstat -0000000000004c9e fprintf +0000000000004ca8 fprintf 000000000000493e kill 0000000000000058 validatetest 0000000000004668 strcat 0000000000002a4e rmdot 00000000000004ea copyin -0000000000004ac0 vprintf +0000000000004aca vprintf 0000000000000194 truncate2 000000000000496c chdir 00000000000012c0 exectest @@ -88,14 +89,14 @@ 00000000000034ca mem 00000000000048aa memcmp 00000000000048fc fork -000000000000c0b0 __BSS_END__ +000000000000c0b8 __BSS_END__ 0000000000001c1e copyinstr3 00000000000017be forkfork 0000000000004988 sbrk 00000000000049a0 test_proc 0000000000004998 uptime 0000000000001724 twochildren -0000000000007078 __bss_start +0000000000007080 __bss_start 00000000000046ec memset 00000000000019d0 kernmem 000000000000025c createtest @@ -113,21 +114,21 @@ 0000000000004382 run 0000000000002556 subdir 0000000000000f42 copyinstr2 -000000000000a898 buf +000000000000a8a0 buf 0000000000003de6 dirtest 0000000000002072 sbrkarg 0000000000002398 iputtest -0000000000006d10 __DATA_BEGIN__ +0000000000006d18 __DATA_BEGIN__ 00000000000047ac stat 000000000000397e bigfile -0000000000007078 _edata -000000000000c0b0 _end +0000000000007080 _edata +000000000000c0b8 _end 0000000000004250 countfree 0000000000004904 exit 00000000000047f2 atoi 0000000000000000 copyinstr1 0000000000001d38 sbrkbasic -0000000000007078 name +0000000000007080 name 00000000000046c2 strlen 000000000000494e open 0000000000000d06 removeread @@ -138,4 +139,4 @@ 0000000000004962 mkdir 0000000000004934 close 0000000000001888 reparent2 -0000000000004d02 free +0000000000004d0c free diff --git a/xv6-user/usys.S b/xv6-user/usys.S index c0a62cf..54f260a 100644 --- a/xv6-user/usys.S +++ b/xv6-user/usys.S @@ -140,3 +140,8 @@ uname: li a7, SYS_uname ecall ret +.global times +times: + li a7, SYS_times + ecall + ret diff --git a/xv6-user/usys.o b/xv6-user/usys.o index 666fab2119e7acdf8596e912a7f2d177f607055f..dc05f5af01297997db34564aafc446ab20e76b14 100644 GIT binary patch delta 624 zcmYk3KS(1%6vpSxiexdXi6Wcj3e9GB4gLWOF-pKSY2;A2v-EONiT?{hP>$=2DFh2a z_-Y#~8xLfy1i@hAiB}&M2i8_;4lF#l8Fqx3V!k)O?|Y9K=KRy`{7IhIz01K)>OkVe z++~b4>T}T~6*z9G8#_jkH#jbgT=ZzXB(P{@3}SC+wq=NLmi$H><n>_K8snUznssQH zS7Jzt5qrf`>dx8Q+Fp}m<#J;Y9%El|k+z+xB2q?GE!{=@N!zp({Y^(*PLaosY+q0z zDMd81_I^oozi93|4+PV@X0&`o%fEA(*XPV?`DHDycsr8~75vKD&W2`Ns+O<W#6RKI zH1~t%u42Ts@s>?mIgPHPD(JAAv{H)7d(?33+Rln1QZlN}3#~;rZU>2vz(a1F%Hn52 zv6sBiEX!+%^%+NA!OVBZr+fVL3Yhj2Nca=<10_G?Ef)=cihiT%htvWEA+P694yLFd q2SG?BG=s4Bds{rAm5jAZ$ToThhRn@$Os?^9pkO|$C!NCd`u+oo@?MGn delta 502 zcmYk3KS;ws6vlf=s0}vuADU*dv@w5F3L;2a#b$68acgU9wK@bRad2~RuTc7dgCOeW zD(NPIqi!xjy9h4grehbuI}_m^+<V{szQ?-<_qchx(X|CnznhyNWZ7RMj)0E1B8&*0 zMcw}vKVq0x+8D%>=t@zXD~nW5`ESaR2rt#2jnF8tM1#;%`%^(OL(O;{>uFWn;@l<9 zZTKf?Ke1XC0>%b5xz>Nq239#93pIOSA3p^Z4Lz=;Ldu4<P}Eg)D9v%bZ8UXN+Y1RR zQO@1Q8FgEnn+^30tvh(oRnqcb^>Lz%xTXk*o#`1_Qo^Z{K~j>iVA$O4(6HqaTa`uy zH-;l$hpU$GZaCx^n(2}rYNjg;^0+W7<Q_wcUZ7d7;1y7}D)^GdaAlQA9z)BWtV+SW dZak<7S`JXO=jG32K>FCV9r-Ezqf6wC+%KpqQ{eyr diff --git a/xv6-user/usys.pl b/xv6-user/usys.pl index 1695aec..ec2e437 100755 --- a/xv6-user/usys.pl +++ b/xv6-user/usys.pl @@ -43,3 +43,4 @@ entry("sysinfo"); entry("rename"); entry("shutdown"); entry("uname"); +entry("times"); diff --git a/xv6-user/wc.asm b/xv6-user/wc.asm index f951d91..59451ac 100644 --- a/xv6-user/wc.asm +++ b/xv6-user/wc.asm @@ -39,7 +39,7 @@ wc(int fd, char *name) 2a: 4c01 li s8,0 2c: 4b81 li s7,0 2e: 00001d97 auipc s11,0x1 - 32: a7bd8d93 addi s11,s11,-1413 # aa9 <buf+0x1> + 32: a83d8d93 addi s11,s11,-1405 # ab1 <buf+0x1> while((n = read(fd, buf, sizeof(buf))) > 0){ for(i=0; i<n; i++){ c++; @@ -48,7 +48,7 @@ wc(int fd, char *name) l++; if(strchr(" \r\t\n\v", buf[i])) 38: 00001a17 auipc s4,0x1 - 3c: 998a0a13 addi s4,s4,-1640 # 9d0 <malloc+0xf0> + 3c: 9a0a0a13 addi s4,s4,-1632 # 9d8 <malloc+0xee> inword = 0; 40: 4b01 li s6,0 while((n = read(fd, buf, sizeof(buf))) > 0){ @@ -81,14 +81,14 @@ wc(int fd, char *name) while((n = read(fd, buf, sizeof(buf))) > 0){ 72: 20000613 li a2,512 76: 00001597 auipc a1,0x1 - 7a: a3258593 addi a1,a1,-1486 # aa8 <buf> + 7a: a3a58593 addi a1,a1,-1478 # ab0 <buf> 7e: f8843503 ld a0,-120(s0) 82: 00000097 auipc ra,0x0 86: 3fa080e7 jalr 1018(ra) # 47c <read> 8a: 00a05f63 blez a0,a8 <wc+0xa8> for(i=0; i<n; i++){ 8e: 00001497 auipc s1,0x1 - 92: a1a48493 addi s1,s1,-1510 # aa8 <buf> + 92: a2248493 addi s1,s1,-1502 # ab0 <buf> 96: 00050d1b sext.w s10,a0 9a: fff5091b addiw s2,a0,-1 9e: 1902 slli s2,s2,0x20 @@ -109,9 +109,9 @@ wc(int fd, char *name) b2: 8662 mv a2,s8 b4: 85de mv a1,s7 b6: 00001517 auipc a0,0x1 - ba: 93250513 addi a0,a0,-1742 # 9e8 <malloc+0x108> + ba: 93a50513 addi a0,a0,-1734 # 9f0 <malloc+0x106> be: 00000097 auipc ra,0x0 - c2: 76a080e7 jalr 1898(ra) # 828 <printf> + c2: 774080e7 jalr 1908(ra) # 832 <printf> } c6: 70e6 ld ra,120(sp) c8: 7446 ld s0,112(sp) @@ -130,9 +130,9 @@ wc(int fd, char *name) e2: 8082 ret printf("wc: read error\n"); e4: 00001517 auipc a0,0x1 - e8: 8f450513 addi a0,a0,-1804 # 9d8 <malloc+0xf8> + e8: 8fc50513 addi a0,a0,-1796 # 9e0 <malloc+0xf6> ec: 00000097 auipc ra,0x0 - f0: 73c080e7 jalr 1852(ra) # 828 <printf> + f0: 746080e7 jalr 1862(ra) # 832 <printf> exit(1); f4: 4505 li a0,1 f6: 00000097 auipc ra,0x0 @@ -164,9 +164,9 @@ main(int argc, char *argv[]) printf("LINE\tWORD\tBYTE\tFILE\n"); 118: 00001517 auipc a0,0x1 - 11c: 8e850513 addi a0,a0,-1816 # a00 <malloc+0x120> + 11c: 8f050513 addi a0,a0,-1808 # a08 <malloc+0x11e> 120: 00000097 auipc ra,0x0 - 124: 708080e7 jalr 1800(ra) # 828 <printf> + 124: 712080e7 jalr 1810(ra) # 832 <printf> for(i = 1; i < argc; i++){ 128: 00890493 addi s1,s2,8 12c: 39f9 addiw s3,s3,-2 @@ -202,7 +202,7 @@ main(int argc, char *argv[]) 16c: 2f8080e7 jalr 760(ra) # 460 <exit> wc(0, ""); 170: 00001597 auipc a1,0x1 - 174: 88858593 addi a1,a1,-1912 # 9f8 <malloc+0x118> + 174: 89058593 addi a1,a1,-1904 # a00 <malloc+0x116> 178: 4501 li a0,0 17a: 00000097 auipc ra,0x0 17e: e86080e7 jalr -378(ra) # 0 <wc> @@ -213,9 +213,9 @@ main(int argc, char *argv[]) printf("wc: cannot open %s\n", argv[i]); 18c: 608c ld a1,0(s1) 18e: 00001517 auipc a0,0x1 - 192: 88a50513 addi a0,a0,-1910 # a18 <malloc+0x138> + 192: 89250513 addi a0,a0,-1902 # a20 <malloc+0x136> 196: 00000097 auipc ra,0x0 - 19a: 692080e7 jalr 1682(ra) # 828 <printf> + 19a: 69c080e7 jalr 1692(ra) # 832 <printf> exit(1); 19e: 4505 li a0,1 1a0: 00000097 auipc ra,0x0 @@ -977,637 +977,647 @@ uname: ret 54e: 8082 ret -0000000000000550 <putc>: +0000000000000550 <times>: +.global times +times: + li a7, SYS_times + 550: 09900893 li a7,153 + ecall + 554: 00000073 ecall + ret + 558: 8082 ret + +000000000000055a <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 550: 1101 addi sp,sp,-32 - 552: ec06 sd ra,24(sp) - 554: e822 sd s0,16(sp) - 556: 1000 addi s0,sp,32 - 558: feb407a3 sb a1,-17(s0) + 55a: 1101 addi sp,sp,-32 + 55c: ec06 sd ra,24(sp) + 55e: e822 sd s0,16(sp) + 560: 1000 addi s0,sp,32 + 562: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 55c: 4605 li a2,1 - 55e: fef40593 addi a1,s0,-17 - 562: 00000097 auipc ra,0x0 - 566: f24080e7 jalr -220(ra) # 486 <write> + 566: 4605 li a2,1 + 568: fef40593 addi a1,s0,-17 + 56c: 00000097 auipc ra,0x0 + 570: f1a080e7 jalr -230(ra) # 486 <write> } - 56a: 60e2 ld ra,24(sp) - 56c: 6442 ld s0,16(sp) - 56e: 6105 addi sp,sp,32 - 570: 8082 ret + 574: 60e2 ld ra,24(sp) + 576: 6442 ld s0,16(sp) + 578: 6105 addi sp,sp,32 + 57a: 8082 ret -0000000000000572 <printint>: +000000000000057c <printint>: static void printint(int fd, int xx, int base, int sgn) { - 572: 7139 addi sp,sp,-64 - 574: fc06 sd ra,56(sp) - 576: f822 sd s0,48(sp) - 578: f426 sd s1,40(sp) - 57a: f04a sd s2,32(sp) - 57c: ec4e sd s3,24(sp) - 57e: 0080 addi s0,sp,64 - 580: 84aa mv s1,a0 + 57c: 7139 addi sp,sp,-64 + 57e: fc06 sd ra,56(sp) + 580: f822 sd s0,48(sp) + 582: f426 sd s1,40(sp) + 584: f04a sd s2,32(sp) + 586: ec4e sd s3,24(sp) + 588: 0080 addi s0,sp,64 + 58a: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 582: c299 beqz a3,588 <printint+0x16> - 584: 0805c863 bltz a1,614 <printint+0xa2> + 58c: c299 beqz a3,592 <printint+0x16> + 58e: 0805c863 bltz a1,61e <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 588: 2581 sext.w a1,a1 + 592: 2581 sext.w a1,a1 neg = 0; - 58a: 4881 li a7,0 + 594: 4881 li a7,0 } i = 0; - 58c: fc040993 addi s3,s0,-64 + 596: fc040993 addi s3,s0,-64 neg = 0; - 590: 86ce mv a3,s3 + 59a: 86ce mv a3,s3 i = 0; - 592: 4701 li a4,0 + 59c: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 594: 2601 sext.w a2,a2 - 596: 00000517 auipc a0,0x0 - 59a: 4fa50513 addi a0,a0,1274 # a90 <digits> - 59e: 883a mv a6,a4 - 5a0: 2705 addiw a4,a4,1 - 5a2: 02c5f7bb remuw a5,a1,a2 - 5a6: 1782 slli a5,a5,0x20 - 5a8: 9381 srli a5,a5,0x20 - 5aa: 97aa add a5,a5,a0 - 5ac: 0007c783 lbu a5,0(a5) - 5b0: 00f68023 sb a5,0(a3) + 59e: 2601 sext.w a2,a2 + 5a0: 00000517 auipc a0,0x0 + 5a4: 4f850513 addi a0,a0,1272 # a98 <digits> + 5a8: 883a mv a6,a4 + 5aa: 2705 addiw a4,a4,1 + 5ac: 02c5f7bb remuw a5,a1,a2 + 5b0: 1782 slli a5,a5,0x20 + 5b2: 9381 srli a5,a5,0x20 + 5b4: 97aa add a5,a5,a0 + 5b6: 0007c783 lbu a5,0(a5) + 5ba: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 5b4: 0005879b sext.w a5,a1 - 5b8: 02c5d5bb divuw a1,a1,a2 - 5bc: 0685 addi a3,a3,1 - 5be: fec7f0e3 bgeu a5,a2,59e <printint+0x2c> + 5be: 0005879b sext.w a5,a1 + 5c2: 02c5d5bb divuw a1,a1,a2 + 5c6: 0685 addi a3,a3,1 + 5c8: fec7f0e3 bgeu a5,a2,5a8 <printint+0x2c> if(neg) - 5c2: 00088c63 beqz a7,5da <printint+0x68> + 5cc: 00088c63 beqz a7,5e4 <printint+0x68> buf[i++] = '-'; - 5c6: fd070793 addi a5,a4,-48 - 5ca: 00878733 add a4,a5,s0 - 5ce: 02d00793 li a5,45 - 5d2: fef70823 sb a5,-16(a4) - 5d6: 0028071b addiw a4,a6,2 + 5d0: fd070793 addi a5,a4,-48 + 5d4: 00878733 add a4,a5,s0 + 5d8: 02d00793 li a5,45 + 5dc: fef70823 sb a5,-16(a4) + 5e0: 0028071b addiw a4,a6,2 while(--i >= 0) - 5da: 02e05663 blez a4,606 <printint+0x94> - 5de: fc040913 addi s2,s0,-64 - 5e2: 993a add s2,s2,a4 - 5e4: 19fd addi s3,s3,-1 - 5e6: 99ba add s3,s3,a4 - 5e8: 377d addiw a4,a4,-1 - 5ea: 1702 slli a4,a4,0x20 - 5ec: 9301 srli a4,a4,0x20 - 5ee: 40e989b3 sub s3,s3,a4 + 5e4: 02e05663 blez a4,610 <printint+0x94> + 5e8: fc040913 addi s2,s0,-64 + 5ec: 993a add s2,s2,a4 + 5ee: 19fd addi s3,s3,-1 + 5f0: 99ba add s3,s3,a4 + 5f2: 377d addiw a4,a4,-1 + 5f4: 1702 slli a4,a4,0x20 + 5f6: 9301 srli a4,a4,0x20 + 5f8: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 5f2: fff94583 lbu a1,-1(s2) - 5f6: 8526 mv a0,s1 - 5f8: 00000097 auipc ra,0x0 - 5fc: f58080e7 jalr -168(ra) # 550 <putc> + 5fc: fff94583 lbu a1,-1(s2) + 600: 8526 mv a0,s1 + 602: 00000097 auipc ra,0x0 + 606: f58080e7 jalr -168(ra) # 55a <putc> while(--i >= 0) - 600: 197d addi s2,s2,-1 - 602: ff3918e3 bne s2,s3,5f2 <printint+0x80> + 60a: 197d addi s2,s2,-1 + 60c: ff3918e3 bne s2,s3,5fc <printint+0x80> } - 606: 70e2 ld ra,56(sp) - 608: 7442 ld s0,48(sp) - 60a: 74a2 ld s1,40(sp) - 60c: 7902 ld s2,32(sp) - 60e: 69e2 ld s3,24(sp) - 610: 6121 addi sp,sp,64 - 612: 8082 ret + 610: 70e2 ld ra,56(sp) + 612: 7442 ld s0,48(sp) + 614: 74a2 ld s1,40(sp) + 616: 7902 ld s2,32(sp) + 618: 69e2 ld s3,24(sp) + 61a: 6121 addi sp,sp,64 + 61c: 8082 ret x = -xx; - 614: 40b005bb negw a1,a1 + 61e: 40b005bb negw a1,a1 neg = 1; - 618: 4885 li a7,1 + 622: 4885 li a7,1 x = -xx; - 61a: bf8d j 58c <printint+0x1a> + 624: bf8d j 596 <printint+0x1a> -000000000000061c <vprintf>: +0000000000000626 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 61c: 7119 addi sp,sp,-128 - 61e: fc86 sd ra,120(sp) - 620: f8a2 sd s0,112(sp) - 622: f4a6 sd s1,104(sp) - 624: f0ca sd s2,96(sp) - 626: ecce sd s3,88(sp) - 628: e8d2 sd s4,80(sp) - 62a: e4d6 sd s5,72(sp) - 62c: e0da sd s6,64(sp) - 62e: fc5e sd s7,56(sp) - 630: f862 sd s8,48(sp) - 632: f466 sd s9,40(sp) - 634: f06a sd s10,32(sp) - 636: ec6e sd s11,24(sp) - 638: 0100 addi s0,sp,128 + 626: 7119 addi sp,sp,-128 + 628: fc86 sd ra,120(sp) + 62a: f8a2 sd s0,112(sp) + 62c: f4a6 sd s1,104(sp) + 62e: f0ca sd s2,96(sp) + 630: ecce sd s3,88(sp) + 632: e8d2 sd s4,80(sp) + 634: e4d6 sd s5,72(sp) + 636: e0da sd s6,64(sp) + 638: fc5e sd s7,56(sp) + 63a: f862 sd s8,48(sp) + 63c: f466 sd s9,40(sp) + 63e: f06a sd s10,32(sp) + 640: ec6e sd s11,24(sp) + 642: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 63a: 0005c903 lbu s2,0(a1) - 63e: 18090f63 beqz s2,7dc <vprintf+0x1c0> - 642: 8aaa mv s5,a0 - 644: 8b32 mv s6,a2 - 646: 00158493 addi s1,a1,1 + 644: 0005c903 lbu s2,0(a1) + 648: 18090f63 beqz s2,7e6 <vprintf+0x1c0> + 64c: 8aaa mv s5,a0 + 64e: 8b32 mv s6,a2 + 650: 00158493 addi s1,a1,1 state = 0; - 64a: 4981 li s3,0 + 654: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 64c: 02500a13 li s4,37 - 650: 4c55 li s8,21 - 652: 00000c97 auipc s9,0x0 - 656: 3e6c8c93 addi s9,s9,998 # a38 <malloc+0x158> + 656: 02500a13 li s4,37 + 65a: 4c55 li s8,21 + 65c: 00000c97 auipc s9,0x0 + 660: 3e4c8c93 addi s9,s9,996 # a40 <malloc+0x156> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 65a: 02800d93 li s11,40 + 664: 02800d93 li s11,40 putc(fd, 'x'); - 65e: 4d41 li s10,16 + 668: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 660: 00000b97 auipc s7,0x0 - 664: 430b8b93 addi s7,s7,1072 # a90 <digits> - 668: a839 j 686 <vprintf+0x6a> + 66a: 00000b97 auipc s7,0x0 + 66e: 42eb8b93 addi s7,s7,1070 # a98 <digits> + 672: a839 j 690 <vprintf+0x6a> putc(fd, c); - 66a: 85ca mv a1,s2 - 66c: 8556 mv a0,s5 - 66e: 00000097 auipc ra,0x0 - 672: ee2080e7 jalr -286(ra) # 550 <putc> - 676: a019 j 67c <vprintf+0x60> + 674: 85ca mv a1,s2 + 676: 8556 mv a0,s5 + 678: 00000097 auipc ra,0x0 + 67c: ee2080e7 jalr -286(ra) # 55a <putc> + 680: a019 j 686 <vprintf+0x60> } else if(state == '%'){ - 678: 01498d63 beq s3,s4,692 <vprintf+0x76> + 682: 01498d63 beq s3,s4,69c <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 67c: 0485 addi s1,s1,1 - 67e: fff4c903 lbu s2,-1(s1) - 682: 14090d63 beqz s2,7dc <vprintf+0x1c0> + 686: 0485 addi s1,s1,1 + 688: fff4c903 lbu s2,-1(s1) + 68c: 14090d63 beqz s2,7e6 <vprintf+0x1c0> if(state == 0){ - 686: fe0999e3 bnez s3,678 <vprintf+0x5c> + 690: fe0999e3 bnez s3,682 <vprintf+0x5c> if(c == '%'){ - 68a: ff4910e3 bne s2,s4,66a <vprintf+0x4e> + 694: ff4910e3 bne s2,s4,674 <vprintf+0x4e> state = '%'; - 68e: 89d2 mv s3,s4 - 690: b7f5 j 67c <vprintf+0x60> + 698: 89d2 mv s3,s4 + 69a: b7f5 j 686 <vprintf+0x60> if(c == 'd'){ - 692: 11490c63 beq s2,s4,7aa <vprintf+0x18e> - 696: f9d9079b addiw a5,s2,-99 - 69a: 0ff7f793 zext.b a5,a5 - 69e: 10fc6e63 bltu s8,a5,7ba <vprintf+0x19e> - 6a2: f9d9079b addiw a5,s2,-99 - 6a6: 0ff7f713 zext.b a4,a5 - 6aa: 10ec6863 bltu s8,a4,7ba <vprintf+0x19e> - 6ae: 00271793 slli a5,a4,0x2 - 6b2: 97e6 add a5,a5,s9 - 6b4: 439c lw a5,0(a5) - 6b6: 97e6 add a5,a5,s9 - 6b8: 8782 jr a5 + 69c: 11490c63 beq s2,s4,7b4 <vprintf+0x18e> + 6a0: f9d9079b addiw a5,s2,-99 + 6a4: 0ff7f793 zext.b a5,a5 + 6a8: 10fc6e63 bltu s8,a5,7c4 <vprintf+0x19e> + 6ac: f9d9079b addiw a5,s2,-99 + 6b0: 0ff7f713 zext.b a4,a5 + 6b4: 10ec6863 bltu s8,a4,7c4 <vprintf+0x19e> + 6b8: 00271793 slli a5,a4,0x2 + 6bc: 97e6 add a5,a5,s9 + 6be: 439c lw a5,0(a5) + 6c0: 97e6 add a5,a5,s9 + 6c2: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 6ba: 008b0913 addi s2,s6,8 - 6be: 4685 li a3,1 - 6c0: 4629 li a2,10 - 6c2: 000b2583 lw a1,0(s6) - 6c6: 8556 mv a0,s5 - 6c8: 00000097 auipc ra,0x0 - 6cc: eaa080e7 jalr -342(ra) # 572 <printint> - 6d0: 8b4a mv s6,s2 + 6c4: 008b0913 addi s2,s6,8 + 6c8: 4685 li a3,1 + 6ca: 4629 li a2,10 + 6cc: 000b2583 lw a1,0(s6) + 6d0: 8556 mv a0,s5 + 6d2: 00000097 auipc ra,0x0 + 6d6: eaa080e7 jalr -342(ra) # 57c <printint> + 6da: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 6d2: 4981 li s3,0 - 6d4: b765 j 67c <vprintf+0x60> + 6dc: 4981 li s3,0 + 6de: b765 j 686 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 6d6: 008b0913 addi s2,s6,8 - 6da: 4681 li a3,0 - 6dc: 4629 li a2,10 - 6de: 000b2583 lw a1,0(s6) - 6e2: 8556 mv a0,s5 - 6e4: 00000097 auipc ra,0x0 - 6e8: e8e080e7 jalr -370(ra) # 572 <printint> - 6ec: 8b4a mv s6,s2 + 6e0: 008b0913 addi s2,s6,8 + 6e4: 4681 li a3,0 + 6e6: 4629 li a2,10 + 6e8: 000b2583 lw a1,0(s6) + 6ec: 8556 mv a0,s5 + 6ee: 00000097 auipc ra,0x0 + 6f2: e8e080e7 jalr -370(ra) # 57c <printint> + 6f6: 8b4a mv s6,s2 state = 0; - 6ee: 4981 li s3,0 - 6f0: b771 j 67c <vprintf+0x60> + 6f8: 4981 li s3,0 + 6fa: b771 j 686 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 6f2: 008b0913 addi s2,s6,8 - 6f6: 4681 li a3,0 - 6f8: 866a mv a2,s10 - 6fa: 000b2583 lw a1,0(s6) - 6fe: 8556 mv a0,s5 - 700: 00000097 auipc ra,0x0 - 704: e72080e7 jalr -398(ra) # 572 <printint> - 708: 8b4a mv s6,s2 + 6fc: 008b0913 addi s2,s6,8 + 700: 4681 li a3,0 + 702: 866a mv a2,s10 + 704: 000b2583 lw a1,0(s6) + 708: 8556 mv a0,s5 + 70a: 00000097 auipc ra,0x0 + 70e: e72080e7 jalr -398(ra) # 57c <printint> + 712: 8b4a mv s6,s2 state = 0; - 70a: 4981 li s3,0 - 70c: bf85 j 67c <vprintf+0x60> + 714: 4981 li s3,0 + 716: bf85 j 686 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 70e: 008b0793 addi a5,s6,8 - 712: f8f43423 sd a5,-120(s0) - 716: 000b3983 ld s3,0(s6) + 718: 008b0793 addi a5,s6,8 + 71c: f8f43423 sd a5,-120(s0) + 720: 000b3983 ld s3,0(s6) putc(fd, '0'); - 71a: 03000593 li a1,48 - 71e: 8556 mv a0,s5 - 720: 00000097 auipc ra,0x0 - 724: e30080e7 jalr -464(ra) # 550 <putc> + 724: 03000593 li a1,48 + 728: 8556 mv a0,s5 + 72a: 00000097 auipc ra,0x0 + 72e: e30080e7 jalr -464(ra) # 55a <putc> putc(fd, 'x'); - 728: 07800593 li a1,120 - 72c: 8556 mv a0,s5 - 72e: 00000097 auipc ra,0x0 - 732: e22080e7 jalr -478(ra) # 550 <putc> - 736: 896a mv s2,s10 + 732: 07800593 li a1,120 + 736: 8556 mv a0,s5 + 738: 00000097 auipc ra,0x0 + 73c: e22080e7 jalr -478(ra) # 55a <putc> + 740: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 738: 03c9d793 srli a5,s3,0x3c - 73c: 97de add a5,a5,s7 - 73e: 0007c583 lbu a1,0(a5) - 742: 8556 mv a0,s5 - 744: 00000097 auipc ra,0x0 - 748: e0c080e7 jalr -500(ra) # 550 <putc> + 742: 03c9d793 srli a5,s3,0x3c + 746: 97de add a5,a5,s7 + 748: 0007c583 lbu a1,0(a5) + 74c: 8556 mv a0,s5 + 74e: 00000097 auipc ra,0x0 + 752: e0c080e7 jalr -500(ra) # 55a <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 74c: 0992 slli s3,s3,0x4 - 74e: 397d addiw s2,s2,-1 - 750: fe0914e3 bnez s2,738 <vprintf+0x11c> + 756: 0992 slli s3,s3,0x4 + 758: 397d addiw s2,s2,-1 + 75a: fe0914e3 bnez s2,742 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 754: f8843b03 ld s6,-120(s0) + 75e: f8843b03 ld s6,-120(s0) state = 0; - 758: 4981 li s3,0 - 75a: b70d j 67c <vprintf+0x60> + 762: 4981 li s3,0 + 764: b70d j 686 <vprintf+0x60> s = va_arg(ap, char*); - 75c: 008b0913 addi s2,s6,8 - 760: 000b3983 ld s3,0(s6) + 766: 008b0913 addi s2,s6,8 + 76a: 000b3983 ld s3,0(s6) if(s == 0) - 764: 02098163 beqz s3,786 <vprintf+0x16a> + 76e: 02098163 beqz s3,790 <vprintf+0x16a> while(*s != 0){ - 768: 0009c583 lbu a1,0(s3) - 76c: c5ad beqz a1,7d6 <vprintf+0x1ba> + 772: 0009c583 lbu a1,0(s3) + 776: c5ad beqz a1,7e0 <vprintf+0x1ba> putc(fd, *s); - 76e: 8556 mv a0,s5 - 770: 00000097 auipc ra,0x0 - 774: de0080e7 jalr -544(ra) # 550 <putc> + 778: 8556 mv a0,s5 + 77a: 00000097 auipc ra,0x0 + 77e: de0080e7 jalr -544(ra) # 55a <putc> s++; - 778: 0985 addi s3,s3,1 + 782: 0985 addi s3,s3,1 while(*s != 0){ - 77a: 0009c583 lbu a1,0(s3) - 77e: f9e5 bnez a1,76e <vprintf+0x152> + 784: 0009c583 lbu a1,0(s3) + 788: f9e5 bnez a1,778 <vprintf+0x152> s = va_arg(ap, char*); - 780: 8b4a mv s6,s2 + 78a: 8b4a mv s6,s2 state = 0; - 782: 4981 li s3,0 - 784: bde5 j 67c <vprintf+0x60> + 78c: 4981 li s3,0 + 78e: bde5 j 686 <vprintf+0x60> s = "(null)"; - 786: 00000997 auipc s3,0x0 - 78a: 2aa98993 addi s3,s3,682 # a30 <malloc+0x150> + 790: 00000997 auipc s3,0x0 + 794: 2a898993 addi s3,s3,680 # a38 <malloc+0x14e> while(*s != 0){ - 78e: 85ee mv a1,s11 - 790: bff9 j 76e <vprintf+0x152> + 798: 85ee mv a1,s11 + 79a: bff9 j 778 <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 792: 008b0913 addi s2,s6,8 - 796: 000b4583 lbu a1,0(s6) - 79a: 8556 mv a0,s5 - 79c: 00000097 auipc ra,0x0 - 7a0: db4080e7 jalr -588(ra) # 550 <putc> - 7a4: 8b4a mv s6,s2 + 79c: 008b0913 addi s2,s6,8 + 7a0: 000b4583 lbu a1,0(s6) + 7a4: 8556 mv a0,s5 + 7a6: 00000097 auipc ra,0x0 + 7aa: db4080e7 jalr -588(ra) # 55a <putc> + 7ae: 8b4a mv s6,s2 state = 0; - 7a6: 4981 li s3,0 - 7a8: bdd1 j 67c <vprintf+0x60> + 7b0: 4981 li s3,0 + 7b2: bdd1 j 686 <vprintf+0x60> putc(fd, c); - 7aa: 85d2 mv a1,s4 - 7ac: 8556 mv a0,s5 - 7ae: 00000097 auipc ra,0x0 - 7b2: da2080e7 jalr -606(ra) # 550 <putc> + 7b4: 85d2 mv a1,s4 + 7b6: 8556 mv a0,s5 + 7b8: 00000097 auipc ra,0x0 + 7bc: da2080e7 jalr -606(ra) # 55a <putc> state = 0; - 7b6: 4981 li s3,0 - 7b8: b5d1 j 67c <vprintf+0x60> + 7c0: 4981 li s3,0 + 7c2: b5d1 j 686 <vprintf+0x60> putc(fd, '%'); - 7ba: 85d2 mv a1,s4 - 7bc: 8556 mv a0,s5 - 7be: 00000097 auipc ra,0x0 - 7c2: d92080e7 jalr -622(ra) # 550 <putc> + 7c4: 85d2 mv a1,s4 + 7c6: 8556 mv a0,s5 + 7c8: 00000097 auipc ra,0x0 + 7cc: d92080e7 jalr -622(ra) # 55a <putc> putc(fd, c); - 7c6: 85ca mv a1,s2 - 7c8: 8556 mv a0,s5 - 7ca: 00000097 auipc ra,0x0 - 7ce: d86080e7 jalr -634(ra) # 550 <putc> + 7d0: 85ca mv a1,s2 + 7d2: 8556 mv a0,s5 + 7d4: 00000097 auipc ra,0x0 + 7d8: d86080e7 jalr -634(ra) # 55a <putc> state = 0; - 7d2: 4981 li s3,0 - 7d4: b565 j 67c <vprintf+0x60> + 7dc: 4981 li s3,0 + 7de: b565 j 686 <vprintf+0x60> s = va_arg(ap, char*); - 7d6: 8b4a mv s6,s2 + 7e0: 8b4a mv s6,s2 state = 0; - 7d8: 4981 li s3,0 - 7da: b54d j 67c <vprintf+0x60> + 7e2: 4981 li s3,0 + 7e4: b54d j 686 <vprintf+0x60> } } } - 7dc: 70e6 ld ra,120(sp) - 7de: 7446 ld s0,112(sp) - 7e0: 74a6 ld s1,104(sp) - 7e2: 7906 ld s2,96(sp) - 7e4: 69e6 ld s3,88(sp) - 7e6: 6a46 ld s4,80(sp) - 7e8: 6aa6 ld s5,72(sp) - 7ea: 6b06 ld s6,64(sp) - 7ec: 7be2 ld s7,56(sp) - 7ee: 7c42 ld s8,48(sp) - 7f0: 7ca2 ld s9,40(sp) - 7f2: 7d02 ld s10,32(sp) - 7f4: 6de2 ld s11,24(sp) - 7f6: 6109 addi sp,sp,128 - 7f8: 8082 ret - -00000000000007fa <fprintf>: + 7e6: 70e6 ld ra,120(sp) + 7e8: 7446 ld s0,112(sp) + 7ea: 74a6 ld s1,104(sp) + 7ec: 7906 ld s2,96(sp) + 7ee: 69e6 ld s3,88(sp) + 7f0: 6a46 ld s4,80(sp) + 7f2: 6aa6 ld s5,72(sp) + 7f4: 6b06 ld s6,64(sp) + 7f6: 7be2 ld s7,56(sp) + 7f8: 7c42 ld s8,48(sp) + 7fa: 7ca2 ld s9,40(sp) + 7fc: 7d02 ld s10,32(sp) + 7fe: 6de2 ld s11,24(sp) + 800: 6109 addi sp,sp,128 + 802: 8082 ret + +0000000000000804 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 7fa: 715d addi sp,sp,-80 - 7fc: ec06 sd ra,24(sp) - 7fe: e822 sd s0,16(sp) - 800: 1000 addi s0,sp,32 - 802: e010 sd a2,0(s0) - 804: e414 sd a3,8(s0) - 806: e818 sd a4,16(s0) - 808: ec1c sd a5,24(s0) - 80a: 03043023 sd a6,32(s0) - 80e: 03143423 sd a7,40(s0) + 804: 715d addi sp,sp,-80 + 806: ec06 sd ra,24(sp) + 808: e822 sd s0,16(sp) + 80a: 1000 addi s0,sp,32 + 80c: e010 sd a2,0(s0) + 80e: e414 sd a3,8(s0) + 810: e818 sd a4,16(s0) + 812: ec1c sd a5,24(s0) + 814: 03043023 sd a6,32(s0) + 818: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 812: 8622 mv a2,s0 - 814: fe843423 sd s0,-24(s0) + 81c: 8622 mv a2,s0 + 81e: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 818: 00000097 auipc ra,0x0 - 81c: e04080e7 jalr -508(ra) # 61c <vprintf> + 822: 00000097 auipc ra,0x0 + 826: e04080e7 jalr -508(ra) # 626 <vprintf> } - 820: 60e2 ld ra,24(sp) - 822: 6442 ld s0,16(sp) - 824: 6161 addi sp,sp,80 - 826: 8082 ret + 82a: 60e2 ld ra,24(sp) + 82c: 6442 ld s0,16(sp) + 82e: 6161 addi sp,sp,80 + 830: 8082 ret -0000000000000828 <printf>: +0000000000000832 <printf>: void printf(const char *fmt, ...) { - 828: 711d addi sp,sp,-96 - 82a: ec06 sd ra,24(sp) - 82c: e822 sd s0,16(sp) - 82e: 1000 addi s0,sp,32 - 830: e40c sd a1,8(s0) - 832: e810 sd a2,16(s0) - 834: ec14 sd a3,24(s0) - 836: f018 sd a4,32(s0) - 838: f41c sd a5,40(s0) - 83a: 03043823 sd a6,48(s0) - 83e: 03143c23 sd a7,56(s0) + 832: 711d addi sp,sp,-96 + 834: ec06 sd ra,24(sp) + 836: e822 sd s0,16(sp) + 838: 1000 addi s0,sp,32 + 83a: e40c sd a1,8(s0) + 83c: e810 sd a2,16(s0) + 83e: ec14 sd a3,24(s0) + 840: f018 sd a4,32(s0) + 842: f41c sd a5,40(s0) + 844: 03043823 sd a6,48(s0) + 848: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 842: 00840613 addi a2,s0,8 - 846: fec43423 sd a2,-24(s0) + 84c: 00840613 addi a2,s0,8 + 850: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 84a: 85aa mv a1,a0 - 84c: 4505 li a0,1 - 84e: 00000097 auipc ra,0x0 - 852: dce080e7 jalr -562(ra) # 61c <vprintf> + 854: 85aa mv a1,a0 + 856: 4505 li a0,1 + 858: 00000097 auipc ra,0x0 + 85c: dce080e7 jalr -562(ra) # 626 <vprintf> } - 856: 60e2 ld ra,24(sp) - 858: 6442 ld s0,16(sp) - 85a: 6125 addi sp,sp,96 - 85c: 8082 ret + 860: 60e2 ld ra,24(sp) + 862: 6442 ld s0,16(sp) + 864: 6125 addi sp,sp,96 + 866: 8082 ret -000000000000085e <free>: +0000000000000868 <free>: static Header base; static Header *freep; void free(void *ap) { - 85e: 1141 addi sp,sp,-16 - 860: e422 sd s0,8(sp) - 862: 0800 addi s0,sp,16 + 868: 1141 addi sp,sp,-16 + 86a: e422 sd s0,8(sp) + 86c: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 864: ff050693 addi a3,a0,-16 + 86e: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 868: 00000797 auipc a5,0x0 - 86c: 4407b783 ld a5,1088(a5) # ca8 <freep> - 870: a02d j 89a <free+0x3c> + 872: 00000797 auipc a5,0x0 + 876: 43e7b783 ld a5,1086(a5) # cb0 <freep> + 87a: a02d j 8a4 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 872: 4618 lw a4,8(a2) - 874: 9f2d addw a4,a4,a1 - 876: fee52c23 sw a4,-8(a0) + 87c: 4618 lw a4,8(a2) + 87e: 9f2d addw a4,a4,a1 + 880: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 87a: 6398 ld a4,0(a5) - 87c: 6310 ld a2,0(a4) - 87e: a83d j 8bc <free+0x5e> + 884: 6398 ld a4,0(a5) + 886: 6310 ld a2,0(a4) + 888: a83d j 8c6 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 880: ff852703 lw a4,-8(a0) - 884: 9f31 addw a4,a4,a2 - 886: c798 sw a4,8(a5) + 88a: ff852703 lw a4,-8(a0) + 88e: 9f31 addw a4,a4,a2 + 890: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 888: ff053683 ld a3,-16(a0) - 88c: a091 j 8d0 <free+0x72> + 892: ff053683 ld a3,-16(a0) + 896: a091 j 8da <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 88e: 6398 ld a4,0(a5) - 890: 00e7e463 bltu a5,a4,898 <free+0x3a> - 894: 00e6ea63 bltu a3,a4,8a8 <free+0x4a> + 898: 6398 ld a4,0(a5) + 89a: 00e7e463 bltu a5,a4,8a2 <free+0x3a> + 89e: 00e6ea63 bltu a3,a4,8b2 <free+0x4a> { - 898: 87ba mv a5,a4 + 8a2: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 89a: fed7fae3 bgeu a5,a3,88e <free+0x30> - 89e: 6398 ld a4,0(a5) - 8a0: 00e6e463 bltu a3,a4,8a8 <free+0x4a> + 8a4: fed7fae3 bgeu a5,a3,898 <free+0x30> + 8a8: 6398 ld a4,0(a5) + 8aa: 00e6e463 bltu a3,a4,8b2 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 8a4: fee7eae3 bltu a5,a4,898 <free+0x3a> + 8ae: fee7eae3 bltu a5,a4,8a2 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 8a8: ff852583 lw a1,-8(a0) - 8ac: 6390 ld a2,0(a5) - 8ae: 02059813 slli a6,a1,0x20 - 8b2: 01c85713 srli a4,a6,0x1c - 8b6: 9736 add a4,a4,a3 - 8b8: fae60de3 beq a2,a4,872 <free+0x14> + 8b2: ff852583 lw a1,-8(a0) + 8b6: 6390 ld a2,0(a5) + 8b8: 02059813 slli a6,a1,0x20 + 8bc: 01c85713 srli a4,a6,0x1c + 8c0: 9736 add a4,a4,a3 + 8c2: fae60de3 beq a2,a4,87c <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 8bc: fec53823 sd a2,-16(a0) + 8c6: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 8c0: 4790 lw a2,8(a5) - 8c2: 02061593 slli a1,a2,0x20 - 8c6: 01c5d713 srli a4,a1,0x1c - 8ca: 973e add a4,a4,a5 - 8cc: fae68ae3 beq a3,a4,880 <free+0x22> + 8ca: 4790 lw a2,8(a5) + 8cc: 02061593 slli a1,a2,0x20 + 8d0: 01c5d713 srli a4,a1,0x1c + 8d4: 973e add a4,a4,a5 + 8d6: fae68ae3 beq a3,a4,88a <free+0x22> p->s.ptr = bp->s.ptr; - 8d0: e394 sd a3,0(a5) + 8da: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 8d2: 00000717 auipc a4,0x0 - 8d6: 3cf73b23 sd a5,982(a4) # ca8 <freep> + 8dc: 00000717 auipc a4,0x0 + 8e0: 3cf73a23 sd a5,980(a4) # cb0 <freep> } - 8da: 6422 ld s0,8(sp) - 8dc: 0141 addi sp,sp,16 - 8de: 8082 ret + 8e4: 6422 ld s0,8(sp) + 8e6: 0141 addi sp,sp,16 + 8e8: 8082 ret -00000000000008e0 <malloc>: +00000000000008ea <malloc>: return freep; } void* malloc(uint nbytes) { - 8e0: 7139 addi sp,sp,-64 - 8e2: fc06 sd ra,56(sp) - 8e4: f822 sd s0,48(sp) - 8e6: f426 sd s1,40(sp) - 8e8: f04a sd s2,32(sp) - 8ea: ec4e sd s3,24(sp) - 8ec: e852 sd s4,16(sp) - 8ee: e456 sd s5,8(sp) - 8f0: e05a sd s6,0(sp) - 8f2: 0080 addi s0,sp,64 + 8ea: 7139 addi sp,sp,-64 + 8ec: fc06 sd ra,56(sp) + 8ee: f822 sd s0,48(sp) + 8f0: f426 sd s1,40(sp) + 8f2: f04a sd s2,32(sp) + 8f4: ec4e sd s3,24(sp) + 8f6: e852 sd s4,16(sp) + 8f8: e456 sd s5,8(sp) + 8fa: e05a sd s6,0(sp) + 8fc: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 8f4: 02051493 slli s1,a0,0x20 - 8f8: 9081 srli s1,s1,0x20 - 8fa: 04bd addi s1,s1,15 - 8fc: 8091 srli s1,s1,0x4 - 8fe: 00148a1b addiw s4,s1,1 - 902: 0485 addi s1,s1,1 + 8fe: 02051493 slli s1,a0,0x20 + 902: 9081 srli s1,s1,0x20 + 904: 04bd addi s1,s1,15 + 906: 8091 srli s1,s1,0x4 + 908: 00148a1b addiw s4,s1,1 + 90c: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 904: 00000517 auipc a0,0x0 - 908: 3a453503 ld a0,932(a0) # ca8 <freep> - 90c: c515 beqz a0,938 <malloc+0x58> + 90e: 00000517 auipc a0,0x0 + 912: 3a253503 ld a0,930(a0) # cb0 <freep> + 916: c515 beqz a0,942 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 90e: 611c ld a5,0(a0) + 918: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 910: 4798 lw a4,8(a5) - 912: 04977163 bgeu a4,s1,954 <malloc+0x74> - 916: 89d2 mv s3,s4 - 918: 000a071b sext.w a4,s4 - 91c: 6685 lui a3,0x1 - 91e: 00d77363 bgeu a4,a3,924 <malloc+0x44> - 922: 6985 lui s3,0x1 - 924: 00098b1b sext.w s6,s3 + 91a: 4798 lw a4,8(a5) + 91c: 04977163 bgeu a4,s1,95e <malloc+0x74> + 920: 89d2 mv s3,s4 + 922: 000a071b sext.w a4,s4 + 926: 6685 lui a3,0x1 + 928: 00d77363 bgeu a4,a3,92e <malloc+0x44> + 92c: 6985 lui s3,0x1 + 92e: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 928: 0049999b slliw s3,s3,0x4 + 932: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 92c: 00000917 auipc s2,0x0 - 930: 37c90913 addi s2,s2,892 # ca8 <freep> + 936: 00000917 auipc s2,0x0 + 93a: 37a90913 addi s2,s2,890 # cb0 <freep> if(p == (char*)-1) - 934: 5afd li s5,-1 - 936: a8a5 j 9ae <malloc+0xce> + 93e: 5afd li s5,-1 + 940: a8a5 j 9b8 <malloc+0xce> base.s.ptr = freep = prevp = &base; - 938: 00000797 auipc a5,0x0 - 93c: 37078793 addi a5,a5,880 # ca8 <freep> - 940: 00000717 auipc a4,0x0 - 944: 37070713 addi a4,a4,880 # cb0 <base> - 948: e398 sd a4,0(a5) - 94a: e798 sd a4,8(a5) + 942: 00000797 auipc a5,0x0 + 946: 36e78793 addi a5,a5,878 # cb0 <freep> + 94a: 00000717 auipc a4,0x0 + 94e: 36e70713 addi a4,a4,878 # cb8 <base> + 952: e398 sd a4,0(a5) + 954: e798 sd a4,8(a5) base.s.size = 0; - 94c: 0007a823 sw zero,16(a5) + 956: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 950: 87ba mv a5,a4 - 952: b7d1 j 916 <malloc+0x36> + 95a: 87ba mv a5,a4 + 95c: b7d1 j 920 <malloc+0x36> if(p->s.size == nunits) - 954: 02e48c63 beq s1,a4,98c <malloc+0xac> + 95e: 02e48c63 beq s1,a4,996 <malloc+0xac> p->s.size -= nunits; - 958: 4147073b subw a4,a4,s4 - 95c: c798 sw a4,8(a5) + 962: 4147073b subw a4,a4,s4 + 966: c798 sw a4,8(a5) p += p->s.size; - 95e: 02071693 slli a3,a4,0x20 - 962: 01c6d713 srli a4,a3,0x1c - 966: 97ba add a5,a5,a4 + 968: 02071693 slli a3,a4,0x20 + 96c: 01c6d713 srli a4,a3,0x1c + 970: 97ba add a5,a5,a4 p->s.size = nunits; - 968: 0147a423 sw s4,8(a5) + 972: 0147a423 sw s4,8(a5) freep = prevp; - 96c: 00000717 auipc a4,0x0 - 970: 32a73e23 sd a0,828(a4) # ca8 <freep> + 976: 00000717 auipc a4,0x0 + 97a: 32a73d23 sd a0,826(a4) # cb0 <freep> return (void*)(p + 1); - 974: 01078513 addi a0,a5,16 + 97e: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 978: 70e2 ld ra,56(sp) - 97a: 7442 ld s0,48(sp) - 97c: 74a2 ld s1,40(sp) - 97e: 7902 ld s2,32(sp) - 980: 69e2 ld s3,24(sp) - 982: 6a42 ld s4,16(sp) - 984: 6aa2 ld s5,8(sp) - 986: 6b02 ld s6,0(sp) - 988: 6121 addi sp,sp,64 - 98a: 8082 ret + 982: 70e2 ld ra,56(sp) + 984: 7442 ld s0,48(sp) + 986: 74a2 ld s1,40(sp) + 988: 7902 ld s2,32(sp) + 98a: 69e2 ld s3,24(sp) + 98c: 6a42 ld s4,16(sp) + 98e: 6aa2 ld s5,8(sp) + 990: 6b02 ld s6,0(sp) + 992: 6121 addi sp,sp,64 + 994: 8082 ret prevp->s.ptr = p->s.ptr; - 98c: 6398 ld a4,0(a5) - 98e: e118 sd a4,0(a0) - 990: bff1 j 96c <malloc+0x8c> + 996: 6398 ld a4,0(a5) + 998: e118 sd a4,0(a0) + 99a: bff1 j 976 <malloc+0x8c> hp->s.size = nu; - 992: 01652423 sw s6,8(a0) + 99c: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 996: 0541 addi a0,a0,16 - 998: 00000097 auipc ra,0x0 - 99c: ec6080e7 jalr -314(ra) # 85e <free> + 9a0: 0541 addi a0,a0,16 + 9a2: 00000097 auipc ra,0x0 + 9a6: ec6080e7 jalr -314(ra) # 868 <free> return freep; - 9a0: 00093503 ld a0,0(s2) + 9aa: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 9a4: d971 beqz a0,978 <malloc+0x98> + 9ae: d971 beqz a0,982 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 9a6: 611c ld a5,0(a0) + 9b0: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 9a8: 4798 lw a4,8(a5) - 9aa: fa9775e3 bgeu a4,s1,954 <malloc+0x74> + 9b2: 4798 lw a4,8(a5) + 9b4: fa9775e3 bgeu a4,s1,95e <malloc+0x74> if(p == freep) - 9ae: 00093703 ld a4,0(s2) - 9b2: 853e mv a0,a5 - 9b4: fef719e3 bne a4,a5,9a6 <malloc+0xc6> + 9b8: 00093703 ld a4,0(s2) + 9bc: 853e mv a0,a5 + 9be: fef719e3 bne a4,a5,9b0 <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 9b8: 854e mv a0,s3 - 9ba: 00000097 auipc ra,0x0 - 9be: b2a080e7 jalr -1238(ra) # 4e4 <sbrk> + 9c2: 854e mv a0,s3 + 9c4: 00000097 auipc ra,0x0 + 9c8: b20080e7 jalr -1248(ra) # 4e4 <sbrk> if(p == (char*)-1) - 9c2: fd5518e3 bne a0,s5,992 <malloc+0xb2> + 9cc: fd5518e3 bne a0,s5,99c <malloc+0xb2> return 0; - 9c6: 4501 li a0,0 - 9c8: bf45 j 978 <malloc+0x98> + 9d0: 4501 li a0,0 + 9d2: bf45 j 982 <malloc+0x98> diff --git a/xv6-user/wc.sym b/xv6-user/wc.sym index 12d95bc..8e8695a 100644 --- a/xv6-user/wc.sym +++ b/xv6-user/wc.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -00000000000009d0 .rodata -0000000000000aa8 .bss +00000000000009d8 .rodata +0000000000000ab0 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,23 +16,24 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -0000000000000550 putc -0000000000000572 printint -0000000000000a90 digits +000000000000055a putc +000000000000057c printint +0000000000000a98 digits 0000000000000000 umalloc.c -0000000000000ca8 freep -0000000000000cb0 base +0000000000000cb0 freep +0000000000000cb8 base 00000000000001a8 strcpy -0000000000000828 printf -00000000000012a1 __global_pointer$ +0000000000000832 printf +00000000000012a9 __global_pointer$ 0000000000000504 dev 00000000000003ae memmove +0000000000000550 times 0000000000000524 trace 000000000000028e gets -0000000000000aa1 __SDATA_BEGIN__ +0000000000000aa9 __SDATA_BEGIN__ 00000000000004da getpid 0000000000000440 memcpy -00000000000008e0 malloc +00000000000008ea malloc 000000000000051c remove 00000000000004ec sleep 000000000000052c sysinfo @@ -42,10 +43,10 @@ 0000000000000534 rename 0000000000000486 write 00000000000004b4 fstat -00000000000007fa fprintf +0000000000000804 fprintf 000000000000049a kill 00000000000001c4 strcat -000000000000061c vprintf +0000000000000626 vprintf 00000000000004c8 chdir 00000000000004a2 exec 000000000000046a wait @@ -53,22 +54,22 @@ 0000000000000000 wc 0000000000000406 memcmp 0000000000000458 fork -0000000000000cc0 __BSS_END__ +0000000000000cc8 __BSS_END__ 00000000000004e4 sbrk 00000000000004fc test_proc 00000000000004f4 uptime -0000000000000aa1 __bss_start +0000000000000aa9 __bss_start 0000000000000248 memset 00000000000000fe main 00000000000001f2 strcmp 000000000000053c shutdown 00000000000004d2 dup 0000000000000514 getcwd -0000000000000aa8 buf -0000000000000aa1 __DATA_BEGIN__ +0000000000000ab0 buf +0000000000000aa9 __DATA_BEGIN__ 0000000000000308 stat -0000000000000aa1 _edata -0000000000000cc0 _end +0000000000000aa9 _edata +0000000000000cc8 _end 0000000000000460 exit 000000000000034e atoi 000000000000021e strlen @@ -76,4 +77,4 @@ 000000000000026a strchr 00000000000004be mkdir 0000000000000490 close -000000000000085e free +0000000000000868 free diff --git a/xv6-user/xargs.asm b/xv6-user/xargs.asm index 0488ea8..725beb8 100644 --- a/xv6-user/xargs.asm +++ b/xv6-user/xargs.asm @@ -167,10 +167,10 @@ int main(int argc, char *argv[]) 114: 35e080e7 jalr 862(ra) # 46e <exit> fprintf(2, "Usage: xargs COMMAND [INITIAL-ARGS]...\n"); 118: 00001597 auipc a1,0x1 - 11c: 8c058593 addi a1,a1,-1856 # 9d8 <malloc+0xea> + 11c: 8d058593 addi a1,a1,-1840 # 9e8 <malloc+0xf0> 120: 4509 li a0,2 122: 00000097 auipc ra,0x0 - 126: 6e6080e7 jalr 1766(ra) # 808 <fprintf> + 126: 6f0080e7 jalr 1776(ra) # 812 <fprintf> exit(-1); 12a: 557d li a0,-1 12c: 00000097 auipc ra,0x0 @@ -192,9 +192,9 @@ int main(int argc, char *argv[]) printf("xargs: exec %s fail\n", argv[1]); 15e: 00893583 ld a1,8(s2) 162: 00001517 auipc a0,0x1 - 166: 89e50513 addi a0,a0,-1890 # a00 <malloc+0x112> + 166: 8ae50513 addi a0,a0,-1874 # a10 <malloc+0x118> 16a: 00000097 auipc ra,0x0 - 16e: 6cc080e7 jalr 1740(ra) # 836 <printf> + 16e: 6d6080e7 jalr 1750(ra) # 840 <printf> exit(0); 172: 4501 li a0,0 174: 00000097 auipc ra,0x0 @@ -212,9 +212,9 @@ int main(int argc, char *argv[]) printf("xargs: exec %s fail\n", argv[1]); 198: 00893583 ld a1,8(s2) 19c: 00001517 auipc a0,0x1 - 1a0: 86450513 addi a0,a0,-1948 # a00 <malloc+0x112> + 1a0: 87450513 addi a0,a0,-1932 # a10 <malloc+0x118> 1a4: 00000097 auipc ra,0x0 - 1a8: 692080e7 jalr 1682(ra) # 836 <printf> + 1a8: 69c080e7 jalr 1692(ra) # 840 <printf> exit(0); 1ac: 4501 li a0,0 1ae: 00000097 auipc ra,0x0 @@ -976,637 +976,647 @@ uname: ret 55c: 8082 ret -000000000000055e <putc>: +000000000000055e <times>: +.global times +times: + li a7, SYS_times + 55e: 09900893 li a7,153 + ecall + 562: 00000073 ecall + ret + 566: 8082 ret + +0000000000000568 <putc>: static char digits[] = "0123456789ABCDEF"; static void putc(int fd, char c) { - 55e: 1101 addi sp,sp,-32 - 560: ec06 sd ra,24(sp) - 562: e822 sd s0,16(sp) - 564: 1000 addi s0,sp,32 - 566: feb407a3 sb a1,-17(s0) + 568: 1101 addi sp,sp,-32 + 56a: ec06 sd ra,24(sp) + 56c: e822 sd s0,16(sp) + 56e: 1000 addi s0,sp,32 + 570: feb407a3 sb a1,-17(s0) write(fd, &c, 1); - 56a: 4605 li a2,1 - 56c: fef40593 addi a1,s0,-17 - 570: 00000097 auipc ra,0x0 - 574: f24080e7 jalr -220(ra) # 494 <write> + 574: 4605 li a2,1 + 576: fef40593 addi a1,s0,-17 + 57a: 00000097 auipc ra,0x0 + 57e: f1a080e7 jalr -230(ra) # 494 <write> } - 578: 60e2 ld ra,24(sp) - 57a: 6442 ld s0,16(sp) - 57c: 6105 addi sp,sp,32 - 57e: 8082 ret + 582: 60e2 ld ra,24(sp) + 584: 6442 ld s0,16(sp) + 586: 6105 addi sp,sp,32 + 588: 8082 ret -0000000000000580 <printint>: +000000000000058a <printint>: static void printint(int fd, int xx, int base, int sgn) { - 580: 7139 addi sp,sp,-64 - 582: fc06 sd ra,56(sp) - 584: f822 sd s0,48(sp) - 586: f426 sd s1,40(sp) - 588: f04a sd s2,32(sp) - 58a: ec4e sd s3,24(sp) - 58c: 0080 addi s0,sp,64 - 58e: 84aa mv s1,a0 + 58a: 7139 addi sp,sp,-64 + 58c: fc06 sd ra,56(sp) + 58e: f822 sd s0,48(sp) + 590: f426 sd s1,40(sp) + 592: f04a sd s2,32(sp) + 594: ec4e sd s3,24(sp) + 596: 0080 addi s0,sp,64 + 598: 84aa mv s1,a0 char buf[16]; int i, neg; uint x; neg = 0; if(sgn && xx < 0){ - 590: c299 beqz a3,596 <printint+0x16> - 592: 0805c863 bltz a1,622 <printint+0xa2> + 59a: c299 beqz a3,5a0 <printint+0x16> + 59c: 0805c863 bltz a1,62c <printint+0xa2> neg = 1; x = -xx; } else { x = xx; - 596: 2581 sext.w a1,a1 + 5a0: 2581 sext.w a1,a1 neg = 0; - 598: 4881 li a7,0 + 5a2: 4881 li a7,0 } i = 0; - 59a: fc040993 addi s3,s0,-64 + 5a4: fc040993 addi s3,s0,-64 neg = 0; - 59e: 86ce mv a3,s3 + 5a8: 86ce mv a3,s3 i = 0; - 5a0: 4701 li a4,0 + 5aa: 4701 li a4,0 do{ buf[i++] = digits[x % base]; - 5a2: 2601 sext.w a2,a2 - 5a4: 00000517 auipc a0,0x0 - 5a8: 4d450513 addi a0,a0,1236 # a78 <digits> - 5ac: 883a mv a6,a4 - 5ae: 2705 addiw a4,a4,1 - 5b0: 02c5f7bb remuw a5,a1,a2 - 5b4: 1782 slli a5,a5,0x20 - 5b6: 9381 srli a5,a5,0x20 - 5b8: 97aa add a5,a5,a0 - 5ba: 0007c783 lbu a5,0(a5) - 5be: 00f68023 sb a5,0(a3) + 5ac: 2601 sext.w a2,a2 + 5ae: 00000517 auipc a0,0x0 + 5b2: 4da50513 addi a0,a0,1242 # a88 <digits> + 5b6: 883a mv a6,a4 + 5b8: 2705 addiw a4,a4,1 + 5ba: 02c5f7bb remuw a5,a1,a2 + 5be: 1782 slli a5,a5,0x20 + 5c0: 9381 srli a5,a5,0x20 + 5c2: 97aa add a5,a5,a0 + 5c4: 0007c783 lbu a5,0(a5) + 5c8: 00f68023 sb a5,0(a3) }while((x /= base) != 0); - 5c2: 0005879b sext.w a5,a1 - 5c6: 02c5d5bb divuw a1,a1,a2 - 5ca: 0685 addi a3,a3,1 - 5cc: fec7f0e3 bgeu a5,a2,5ac <printint+0x2c> + 5cc: 0005879b sext.w a5,a1 + 5d0: 02c5d5bb divuw a1,a1,a2 + 5d4: 0685 addi a3,a3,1 + 5d6: fec7f0e3 bgeu a5,a2,5b6 <printint+0x2c> if(neg) - 5d0: 00088c63 beqz a7,5e8 <printint+0x68> + 5da: 00088c63 beqz a7,5f2 <printint+0x68> buf[i++] = '-'; - 5d4: fd070793 addi a5,a4,-48 - 5d8: 00878733 add a4,a5,s0 - 5dc: 02d00793 li a5,45 - 5e0: fef70823 sb a5,-16(a4) - 5e4: 0028071b addiw a4,a6,2 + 5de: fd070793 addi a5,a4,-48 + 5e2: 00878733 add a4,a5,s0 + 5e6: 02d00793 li a5,45 + 5ea: fef70823 sb a5,-16(a4) + 5ee: 0028071b addiw a4,a6,2 while(--i >= 0) - 5e8: 02e05663 blez a4,614 <printint+0x94> - 5ec: fc040913 addi s2,s0,-64 - 5f0: 993a add s2,s2,a4 - 5f2: 19fd addi s3,s3,-1 - 5f4: 99ba add s3,s3,a4 - 5f6: 377d addiw a4,a4,-1 - 5f8: 1702 slli a4,a4,0x20 - 5fa: 9301 srli a4,a4,0x20 - 5fc: 40e989b3 sub s3,s3,a4 + 5f2: 02e05663 blez a4,61e <printint+0x94> + 5f6: fc040913 addi s2,s0,-64 + 5fa: 993a add s2,s2,a4 + 5fc: 19fd addi s3,s3,-1 + 5fe: 99ba add s3,s3,a4 + 600: 377d addiw a4,a4,-1 + 602: 1702 slli a4,a4,0x20 + 604: 9301 srli a4,a4,0x20 + 606: 40e989b3 sub s3,s3,a4 putc(fd, buf[i]); - 600: fff94583 lbu a1,-1(s2) - 604: 8526 mv a0,s1 - 606: 00000097 auipc ra,0x0 - 60a: f58080e7 jalr -168(ra) # 55e <putc> + 60a: fff94583 lbu a1,-1(s2) + 60e: 8526 mv a0,s1 + 610: 00000097 auipc ra,0x0 + 614: f58080e7 jalr -168(ra) # 568 <putc> while(--i >= 0) - 60e: 197d addi s2,s2,-1 - 610: ff3918e3 bne s2,s3,600 <printint+0x80> + 618: 197d addi s2,s2,-1 + 61a: ff3918e3 bne s2,s3,60a <printint+0x80> } - 614: 70e2 ld ra,56(sp) - 616: 7442 ld s0,48(sp) - 618: 74a2 ld s1,40(sp) - 61a: 7902 ld s2,32(sp) - 61c: 69e2 ld s3,24(sp) - 61e: 6121 addi sp,sp,64 - 620: 8082 ret + 61e: 70e2 ld ra,56(sp) + 620: 7442 ld s0,48(sp) + 622: 74a2 ld s1,40(sp) + 624: 7902 ld s2,32(sp) + 626: 69e2 ld s3,24(sp) + 628: 6121 addi sp,sp,64 + 62a: 8082 ret x = -xx; - 622: 40b005bb negw a1,a1 + 62c: 40b005bb negw a1,a1 neg = 1; - 626: 4885 li a7,1 + 630: 4885 li a7,1 x = -xx; - 628: bf8d j 59a <printint+0x1a> + 632: bf8d j 5a4 <printint+0x1a> -000000000000062a <vprintf>: +0000000000000634 <vprintf>: } // Print to the given fd. Only understands %d, %x, %p, %s. void vprintf(int fd, const char *fmt, va_list ap) { - 62a: 7119 addi sp,sp,-128 - 62c: fc86 sd ra,120(sp) - 62e: f8a2 sd s0,112(sp) - 630: f4a6 sd s1,104(sp) - 632: f0ca sd s2,96(sp) - 634: ecce sd s3,88(sp) - 636: e8d2 sd s4,80(sp) - 638: e4d6 sd s5,72(sp) - 63a: e0da sd s6,64(sp) - 63c: fc5e sd s7,56(sp) - 63e: f862 sd s8,48(sp) - 640: f466 sd s9,40(sp) - 642: f06a sd s10,32(sp) - 644: ec6e sd s11,24(sp) - 646: 0100 addi s0,sp,128 + 634: 7119 addi sp,sp,-128 + 636: fc86 sd ra,120(sp) + 638: f8a2 sd s0,112(sp) + 63a: f4a6 sd s1,104(sp) + 63c: f0ca sd s2,96(sp) + 63e: ecce sd s3,88(sp) + 640: e8d2 sd s4,80(sp) + 642: e4d6 sd s5,72(sp) + 644: e0da sd s6,64(sp) + 646: fc5e sd s7,56(sp) + 648: f862 sd s8,48(sp) + 64a: f466 sd s9,40(sp) + 64c: f06a sd s10,32(sp) + 64e: ec6e sd s11,24(sp) + 650: 0100 addi s0,sp,128 char *s; int c, i, state; state = 0; for(i = 0; fmt[i]; i++){ - 648: 0005c903 lbu s2,0(a1) - 64c: 18090f63 beqz s2,7ea <vprintf+0x1c0> - 650: 8aaa mv s5,a0 - 652: 8b32 mv s6,a2 - 654: 00158493 addi s1,a1,1 + 652: 0005c903 lbu s2,0(a1) + 656: 18090f63 beqz s2,7f4 <vprintf+0x1c0> + 65a: 8aaa mv s5,a0 + 65c: 8b32 mv s6,a2 + 65e: 00158493 addi s1,a1,1 state = 0; - 658: 4981 li s3,0 + 662: 4981 li s3,0 if(c == '%'){ state = '%'; } else { putc(fd, c); } } else if(state == '%'){ - 65a: 02500a13 li s4,37 - 65e: 4c55 li s8,21 - 660: 00000c97 auipc s9,0x0 - 664: 3c0c8c93 addi s9,s9,960 # a20 <malloc+0x132> + 664: 02500a13 li s4,37 + 668: 4c55 li s8,21 + 66a: 00000c97 auipc s9,0x0 + 66e: 3c6c8c93 addi s9,s9,966 # a30 <malloc+0x138> printptr(fd, va_arg(ap, uint64)); } else if(c == 's'){ s = va_arg(ap, char*); if(s == 0) s = "(null)"; while(*s != 0){ - 668: 02800d93 li s11,40 + 672: 02800d93 li s11,40 putc(fd, 'x'); - 66c: 4d41 li s10,16 + 676: 4d41 li s10,16 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 66e: 00000b97 auipc s7,0x0 - 672: 40ab8b93 addi s7,s7,1034 # a78 <digits> - 676: a839 j 694 <vprintf+0x6a> + 678: 00000b97 auipc s7,0x0 + 67c: 410b8b93 addi s7,s7,1040 # a88 <digits> + 680: a839 j 69e <vprintf+0x6a> putc(fd, c); - 678: 85ca mv a1,s2 - 67a: 8556 mv a0,s5 - 67c: 00000097 auipc ra,0x0 - 680: ee2080e7 jalr -286(ra) # 55e <putc> - 684: a019 j 68a <vprintf+0x60> + 682: 85ca mv a1,s2 + 684: 8556 mv a0,s5 + 686: 00000097 auipc ra,0x0 + 68a: ee2080e7 jalr -286(ra) # 568 <putc> + 68e: a019 j 694 <vprintf+0x60> } else if(state == '%'){ - 686: 01498d63 beq s3,s4,6a0 <vprintf+0x76> + 690: 01498d63 beq s3,s4,6aa <vprintf+0x76> for(i = 0; fmt[i]; i++){ - 68a: 0485 addi s1,s1,1 - 68c: fff4c903 lbu s2,-1(s1) - 690: 14090d63 beqz s2,7ea <vprintf+0x1c0> + 694: 0485 addi s1,s1,1 + 696: fff4c903 lbu s2,-1(s1) + 69a: 14090d63 beqz s2,7f4 <vprintf+0x1c0> if(state == 0){ - 694: fe0999e3 bnez s3,686 <vprintf+0x5c> + 69e: fe0999e3 bnez s3,690 <vprintf+0x5c> if(c == '%'){ - 698: ff4910e3 bne s2,s4,678 <vprintf+0x4e> + 6a2: ff4910e3 bne s2,s4,682 <vprintf+0x4e> state = '%'; - 69c: 89d2 mv s3,s4 - 69e: b7f5 j 68a <vprintf+0x60> + 6a6: 89d2 mv s3,s4 + 6a8: b7f5 j 694 <vprintf+0x60> if(c == 'd'){ - 6a0: 11490c63 beq s2,s4,7b8 <vprintf+0x18e> - 6a4: f9d9079b addiw a5,s2,-99 - 6a8: 0ff7f793 zext.b a5,a5 - 6ac: 10fc6e63 bltu s8,a5,7c8 <vprintf+0x19e> - 6b0: f9d9079b addiw a5,s2,-99 - 6b4: 0ff7f713 zext.b a4,a5 - 6b8: 10ec6863 bltu s8,a4,7c8 <vprintf+0x19e> - 6bc: 00271793 slli a5,a4,0x2 - 6c0: 97e6 add a5,a5,s9 - 6c2: 439c lw a5,0(a5) - 6c4: 97e6 add a5,a5,s9 - 6c6: 8782 jr a5 + 6aa: 11490c63 beq s2,s4,7c2 <vprintf+0x18e> + 6ae: f9d9079b addiw a5,s2,-99 + 6b2: 0ff7f793 zext.b a5,a5 + 6b6: 10fc6e63 bltu s8,a5,7d2 <vprintf+0x19e> + 6ba: f9d9079b addiw a5,s2,-99 + 6be: 0ff7f713 zext.b a4,a5 + 6c2: 10ec6863 bltu s8,a4,7d2 <vprintf+0x19e> + 6c6: 00271793 slli a5,a4,0x2 + 6ca: 97e6 add a5,a5,s9 + 6cc: 439c lw a5,0(a5) + 6ce: 97e6 add a5,a5,s9 + 6d0: 8782 jr a5 printint(fd, va_arg(ap, int), 10, 1); - 6c8: 008b0913 addi s2,s6,8 - 6cc: 4685 li a3,1 - 6ce: 4629 li a2,10 - 6d0: 000b2583 lw a1,0(s6) - 6d4: 8556 mv a0,s5 - 6d6: 00000097 auipc ra,0x0 - 6da: eaa080e7 jalr -342(ra) # 580 <printint> - 6de: 8b4a mv s6,s2 + 6d2: 008b0913 addi s2,s6,8 + 6d6: 4685 li a3,1 + 6d8: 4629 li a2,10 + 6da: 000b2583 lw a1,0(s6) + 6de: 8556 mv a0,s5 + 6e0: 00000097 auipc ra,0x0 + 6e4: eaa080e7 jalr -342(ra) # 58a <printint> + 6e8: 8b4a mv s6,s2 } else { // Unknown % sequence. Print it to draw attention. putc(fd, '%'); putc(fd, c); } state = 0; - 6e0: 4981 li s3,0 - 6e2: b765 j 68a <vprintf+0x60> + 6ea: 4981 li s3,0 + 6ec: b765 j 694 <vprintf+0x60> printint(fd, va_arg(ap, uint64), 10, 0); - 6e4: 008b0913 addi s2,s6,8 - 6e8: 4681 li a3,0 - 6ea: 4629 li a2,10 - 6ec: 000b2583 lw a1,0(s6) - 6f0: 8556 mv a0,s5 - 6f2: 00000097 auipc ra,0x0 - 6f6: e8e080e7 jalr -370(ra) # 580 <printint> - 6fa: 8b4a mv s6,s2 + 6ee: 008b0913 addi s2,s6,8 + 6f2: 4681 li a3,0 + 6f4: 4629 li a2,10 + 6f6: 000b2583 lw a1,0(s6) + 6fa: 8556 mv a0,s5 + 6fc: 00000097 auipc ra,0x0 + 700: e8e080e7 jalr -370(ra) # 58a <printint> + 704: 8b4a mv s6,s2 state = 0; - 6fc: 4981 li s3,0 - 6fe: b771 j 68a <vprintf+0x60> + 706: 4981 li s3,0 + 708: b771 j 694 <vprintf+0x60> printint(fd, va_arg(ap, int), 16, 0); - 700: 008b0913 addi s2,s6,8 - 704: 4681 li a3,0 - 706: 866a mv a2,s10 - 708: 000b2583 lw a1,0(s6) - 70c: 8556 mv a0,s5 - 70e: 00000097 auipc ra,0x0 - 712: e72080e7 jalr -398(ra) # 580 <printint> - 716: 8b4a mv s6,s2 + 70a: 008b0913 addi s2,s6,8 + 70e: 4681 li a3,0 + 710: 866a mv a2,s10 + 712: 000b2583 lw a1,0(s6) + 716: 8556 mv a0,s5 + 718: 00000097 auipc ra,0x0 + 71c: e72080e7 jalr -398(ra) # 58a <printint> + 720: 8b4a mv s6,s2 state = 0; - 718: 4981 li s3,0 - 71a: bf85 j 68a <vprintf+0x60> + 722: 4981 li s3,0 + 724: bf85 j 694 <vprintf+0x60> printptr(fd, va_arg(ap, uint64)); - 71c: 008b0793 addi a5,s6,8 - 720: f8f43423 sd a5,-120(s0) - 724: 000b3983 ld s3,0(s6) + 726: 008b0793 addi a5,s6,8 + 72a: f8f43423 sd a5,-120(s0) + 72e: 000b3983 ld s3,0(s6) putc(fd, '0'); - 728: 03000593 li a1,48 - 72c: 8556 mv a0,s5 - 72e: 00000097 auipc ra,0x0 - 732: e30080e7 jalr -464(ra) # 55e <putc> + 732: 03000593 li a1,48 + 736: 8556 mv a0,s5 + 738: 00000097 auipc ra,0x0 + 73c: e30080e7 jalr -464(ra) # 568 <putc> putc(fd, 'x'); - 736: 07800593 li a1,120 - 73a: 8556 mv a0,s5 - 73c: 00000097 auipc ra,0x0 - 740: e22080e7 jalr -478(ra) # 55e <putc> - 744: 896a mv s2,s10 + 740: 07800593 li a1,120 + 744: 8556 mv a0,s5 + 746: 00000097 auipc ra,0x0 + 74a: e22080e7 jalr -478(ra) # 568 <putc> + 74e: 896a mv s2,s10 putc(fd, digits[x >> (sizeof(uint64) * 8 - 4)]); - 746: 03c9d793 srli a5,s3,0x3c - 74a: 97de add a5,a5,s7 - 74c: 0007c583 lbu a1,0(a5) - 750: 8556 mv a0,s5 - 752: 00000097 auipc ra,0x0 - 756: e0c080e7 jalr -500(ra) # 55e <putc> + 750: 03c9d793 srli a5,s3,0x3c + 754: 97de add a5,a5,s7 + 756: 0007c583 lbu a1,0(a5) + 75a: 8556 mv a0,s5 + 75c: 00000097 auipc ra,0x0 + 760: e0c080e7 jalr -500(ra) # 568 <putc> for (i = 0; i < (sizeof(uint64) * 2); i++, x <<= 4) - 75a: 0992 slli s3,s3,0x4 - 75c: 397d addiw s2,s2,-1 - 75e: fe0914e3 bnez s2,746 <vprintf+0x11c> + 764: 0992 slli s3,s3,0x4 + 766: 397d addiw s2,s2,-1 + 768: fe0914e3 bnez s2,750 <vprintf+0x11c> printptr(fd, va_arg(ap, uint64)); - 762: f8843b03 ld s6,-120(s0) + 76c: f8843b03 ld s6,-120(s0) state = 0; - 766: 4981 li s3,0 - 768: b70d j 68a <vprintf+0x60> + 770: 4981 li s3,0 + 772: b70d j 694 <vprintf+0x60> s = va_arg(ap, char*); - 76a: 008b0913 addi s2,s6,8 - 76e: 000b3983 ld s3,0(s6) + 774: 008b0913 addi s2,s6,8 + 778: 000b3983 ld s3,0(s6) if(s == 0) - 772: 02098163 beqz s3,794 <vprintf+0x16a> + 77c: 02098163 beqz s3,79e <vprintf+0x16a> while(*s != 0){ - 776: 0009c583 lbu a1,0(s3) - 77a: c5ad beqz a1,7e4 <vprintf+0x1ba> + 780: 0009c583 lbu a1,0(s3) + 784: c5ad beqz a1,7ee <vprintf+0x1ba> putc(fd, *s); - 77c: 8556 mv a0,s5 - 77e: 00000097 auipc ra,0x0 - 782: de0080e7 jalr -544(ra) # 55e <putc> + 786: 8556 mv a0,s5 + 788: 00000097 auipc ra,0x0 + 78c: de0080e7 jalr -544(ra) # 568 <putc> s++; - 786: 0985 addi s3,s3,1 + 790: 0985 addi s3,s3,1 while(*s != 0){ - 788: 0009c583 lbu a1,0(s3) - 78c: f9e5 bnez a1,77c <vprintf+0x152> + 792: 0009c583 lbu a1,0(s3) + 796: f9e5 bnez a1,786 <vprintf+0x152> s = va_arg(ap, char*); - 78e: 8b4a mv s6,s2 + 798: 8b4a mv s6,s2 state = 0; - 790: 4981 li s3,0 - 792: bde5 j 68a <vprintf+0x60> + 79a: 4981 li s3,0 + 79c: bde5 j 694 <vprintf+0x60> s = "(null)"; - 794: 00000997 auipc s3,0x0 - 798: 28498993 addi s3,s3,644 # a18 <malloc+0x12a> + 79e: 00000997 auipc s3,0x0 + 7a2: 28a98993 addi s3,s3,650 # a28 <malloc+0x130> while(*s != 0){ - 79c: 85ee mv a1,s11 - 79e: bff9 j 77c <vprintf+0x152> + 7a6: 85ee mv a1,s11 + 7a8: bff9 j 786 <vprintf+0x152> putc(fd, va_arg(ap, uint)); - 7a0: 008b0913 addi s2,s6,8 - 7a4: 000b4583 lbu a1,0(s6) - 7a8: 8556 mv a0,s5 - 7aa: 00000097 auipc ra,0x0 - 7ae: db4080e7 jalr -588(ra) # 55e <putc> - 7b2: 8b4a mv s6,s2 + 7aa: 008b0913 addi s2,s6,8 + 7ae: 000b4583 lbu a1,0(s6) + 7b2: 8556 mv a0,s5 + 7b4: 00000097 auipc ra,0x0 + 7b8: db4080e7 jalr -588(ra) # 568 <putc> + 7bc: 8b4a mv s6,s2 state = 0; - 7b4: 4981 li s3,0 - 7b6: bdd1 j 68a <vprintf+0x60> + 7be: 4981 li s3,0 + 7c0: bdd1 j 694 <vprintf+0x60> putc(fd, c); - 7b8: 85d2 mv a1,s4 - 7ba: 8556 mv a0,s5 - 7bc: 00000097 auipc ra,0x0 - 7c0: da2080e7 jalr -606(ra) # 55e <putc> + 7c2: 85d2 mv a1,s4 + 7c4: 8556 mv a0,s5 + 7c6: 00000097 auipc ra,0x0 + 7ca: da2080e7 jalr -606(ra) # 568 <putc> state = 0; - 7c4: 4981 li s3,0 - 7c6: b5d1 j 68a <vprintf+0x60> + 7ce: 4981 li s3,0 + 7d0: b5d1 j 694 <vprintf+0x60> putc(fd, '%'); - 7c8: 85d2 mv a1,s4 - 7ca: 8556 mv a0,s5 - 7cc: 00000097 auipc ra,0x0 - 7d0: d92080e7 jalr -622(ra) # 55e <putc> + 7d2: 85d2 mv a1,s4 + 7d4: 8556 mv a0,s5 + 7d6: 00000097 auipc ra,0x0 + 7da: d92080e7 jalr -622(ra) # 568 <putc> putc(fd, c); - 7d4: 85ca mv a1,s2 - 7d6: 8556 mv a0,s5 - 7d8: 00000097 auipc ra,0x0 - 7dc: d86080e7 jalr -634(ra) # 55e <putc> + 7de: 85ca mv a1,s2 + 7e0: 8556 mv a0,s5 + 7e2: 00000097 auipc ra,0x0 + 7e6: d86080e7 jalr -634(ra) # 568 <putc> state = 0; - 7e0: 4981 li s3,0 - 7e2: b565 j 68a <vprintf+0x60> + 7ea: 4981 li s3,0 + 7ec: b565 j 694 <vprintf+0x60> s = va_arg(ap, char*); - 7e4: 8b4a mv s6,s2 + 7ee: 8b4a mv s6,s2 state = 0; - 7e6: 4981 li s3,0 - 7e8: b54d j 68a <vprintf+0x60> + 7f0: 4981 li s3,0 + 7f2: b54d j 694 <vprintf+0x60> } } } - 7ea: 70e6 ld ra,120(sp) - 7ec: 7446 ld s0,112(sp) - 7ee: 74a6 ld s1,104(sp) - 7f0: 7906 ld s2,96(sp) - 7f2: 69e6 ld s3,88(sp) - 7f4: 6a46 ld s4,80(sp) - 7f6: 6aa6 ld s5,72(sp) - 7f8: 6b06 ld s6,64(sp) - 7fa: 7be2 ld s7,56(sp) - 7fc: 7c42 ld s8,48(sp) - 7fe: 7ca2 ld s9,40(sp) - 800: 7d02 ld s10,32(sp) - 802: 6de2 ld s11,24(sp) - 804: 6109 addi sp,sp,128 - 806: 8082 ret - -0000000000000808 <fprintf>: + 7f4: 70e6 ld ra,120(sp) + 7f6: 7446 ld s0,112(sp) + 7f8: 74a6 ld s1,104(sp) + 7fa: 7906 ld s2,96(sp) + 7fc: 69e6 ld s3,88(sp) + 7fe: 6a46 ld s4,80(sp) + 800: 6aa6 ld s5,72(sp) + 802: 6b06 ld s6,64(sp) + 804: 7be2 ld s7,56(sp) + 806: 7c42 ld s8,48(sp) + 808: 7ca2 ld s9,40(sp) + 80a: 7d02 ld s10,32(sp) + 80c: 6de2 ld s11,24(sp) + 80e: 6109 addi sp,sp,128 + 810: 8082 ret + +0000000000000812 <fprintf>: void fprintf(int fd, const char *fmt, ...) { - 808: 715d addi sp,sp,-80 - 80a: ec06 sd ra,24(sp) - 80c: e822 sd s0,16(sp) - 80e: 1000 addi s0,sp,32 - 810: e010 sd a2,0(s0) - 812: e414 sd a3,8(s0) - 814: e818 sd a4,16(s0) - 816: ec1c sd a5,24(s0) - 818: 03043023 sd a6,32(s0) - 81c: 03143423 sd a7,40(s0) + 812: 715d addi sp,sp,-80 + 814: ec06 sd ra,24(sp) + 816: e822 sd s0,16(sp) + 818: 1000 addi s0,sp,32 + 81a: e010 sd a2,0(s0) + 81c: e414 sd a3,8(s0) + 81e: e818 sd a4,16(s0) + 820: ec1c sd a5,24(s0) + 822: 03043023 sd a6,32(s0) + 826: 03143423 sd a7,40(s0) va_list ap; va_start(ap, fmt); - 820: 8622 mv a2,s0 - 822: fe843423 sd s0,-24(s0) + 82a: 8622 mv a2,s0 + 82c: fe843423 sd s0,-24(s0) vprintf(fd, fmt, ap); - 826: 00000097 auipc ra,0x0 - 82a: e04080e7 jalr -508(ra) # 62a <vprintf> + 830: 00000097 auipc ra,0x0 + 834: e04080e7 jalr -508(ra) # 634 <vprintf> } - 82e: 60e2 ld ra,24(sp) - 830: 6442 ld s0,16(sp) - 832: 6161 addi sp,sp,80 - 834: 8082 ret + 838: 60e2 ld ra,24(sp) + 83a: 6442 ld s0,16(sp) + 83c: 6161 addi sp,sp,80 + 83e: 8082 ret -0000000000000836 <printf>: +0000000000000840 <printf>: void printf(const char *fmt, ...) { - 836: 711d addi sp,sp,-96 - 838: ec06 sd ra,24(sp) - 83a: e822 sd s0,16(sp) - 83c: 1000 addi s0,sp,32 - 83e: e40c sd a1,8(s0) - 840: e810 sd a2,16(s0) - 842: ec14 sd a3,24(s0) - 844: f018 sd a4,32(s0) - 846: f41c sd a5,40(s0) - 848: 03043823 sd a6,48(s0) - 84c: 03143c23 sd a7,56(s0) + 840: 711d addi sp,sp,-96 + 842: ec06 sd ra,24(sp) + 844: e822 sd s0,16(sp) + 846: 1000 addi s0,sp,32 + 848: e40c sd a1,8(s0) + 84a: e810 sd a2,16(s0) + 84c: ec14 sd a3,24(s0) + 84e: f018 sd a4,32(s0) + 850: f41c sd a5,40(s0) + 852: 03043823 sd a6,48(s0) + 856: 03143c23 sd a7,56(s0) va_list ap; va_start(ap, fmt); - 850: 00840613 addi a2,s0,8 - 854: fec43423 sd a2,-24(s0) + 85a: 00840613 addi a2,s0,8 + 85e: fec43423 sd a2,-24(s0) vprintf(1, fmt, ap); - 858: 85aa mv a1,a0 - 85a: 4505 li a0,1 - 85c: 00000097 auipc ra,0x0 - 860: dce080e7 jalr -562(ra) # 62a <vprintf> + 862: 85aa mv a1,a0 + 864: 4505 li a0,1 + 866: 00000097 auipc ra,0x0 + 86a: dce080e7 jalr -562(ra) # 634 <vprintf> } - 864: 60e2 ld ra,24(sp) - 866: 6442 ld s0,16(sp) - 868: 6125 addi sp,sp,96 - 86a: 8082 ret + 86e: 60e2 ld ra,24(sp) + 870: 6442 ld s0,16(sp) + 872: 6125 addi sp,sp,96 + 874: 8082 ret -000000000000086c <free>: +0000000000000876 <free>: static Header base; static Header *freep; void free(void *ap) { - 86c: 1141 addi sp,sp,-16 - 86e: e422 sd s0,8(sp) - 870: 0800 addi s0,sp,16 + 876: 1141 addi sp,sp,-16 + 878: e422 sd s0,8(sp) + 87a: 0800 addi s0,sp,16 Header *bp, *p; bp = (Header*)ap - 1; - 872: ff050693 addi a3,a0,-16 + 87c: ff050693 addi a3,a0,-16 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 876: 00000797 auipc a5,0x0 - 87a: 21a7b783 ld a5,538(a5) # a90 <freep> - 87e: a02d j 8a8 <free+0x3c> + 880: 00000797 auipc a5,0x0 + 884: 2207b783 ld a5,544(a5) # aa0 <freep> + 888: a02d j 8b2 <free+0x3c> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; if(bp + bp->s.size == p->s.ptr){ bp->s.size += p->s.ptr->s.size; - 880: 4618 lw a4,8(a2) - 882: 9f2d addw a4,a4,a1 - 884: fee52c23 sw a4,-8(a0) + 88a: 4618 lw a4,8(a2) + 88c: 9f2d addw a4,a4,a1 + 88e: fee52c23 sw a4,-8(a0) bp->s.ptr = p->s.ptr->s.ptr; - 888: 6398 ld a4,0(a5) - 88a: 6310 ld a2,0(a4) - 88c: a83d j 8ca <free+0x5e> + 892: 6398 ld a4,0(a5) + 894: 6310 ld a2,0(a4) + 896: a83d j 8d4 <free+0x5e> } else bp->s.ptr = p->s.ptr; if(p + p->s.size == bp){ p->s.size += bp->s.size; - 88e: ff852703 lw a4,-8(a0) - 892: 9f31 addw a4,a4,a2 - 894: c798 sw a4,8(a5) + 898: ff852703 lw a4,-8(a0) + 89c: 9f31 addw a4,a4,a2 + 89e: c798 sw a4,8(a5) p->s.ptr = bp->s.ptr; - 896: ff053683 ld a3,-16(a0) - 89a: a091 j 8de <free+0x72> + 8a0: ff053683 ld a3,-16(a0) + 8a4: a091 j 8e8 <free+0x72> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 89c: 6398 ld a4,0(a5) - 89e: 00e7e463 bltu a5,a4,8a6 <free+0x3a> - 8a2: 00e6ea63 bltu a3,a4,8b6 <free+0x4a> + 8a6: 6398 ld a4,0(a5) + 8a8: 00e7e463 bltu a5,a4,8b0 <free+0x3a> + 8ac: 00e6ea63 bltu a3,a4,8c0 <free+0x4a> { - 8a6: 87ba mv a5,a4 + 8b0: 87ba mv a5,a4 for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - 8a8: fed7fae3 bgeu a5,a3,89c <free+0x30> - 8ac: 6398 ld a4,0(a5) - 8ae: 00e6e463 bltu a3,a4,8b6 <free+0x4a> + 8b2: fed7fae3 bgeu a5,a3,8a6 <free+0x30> + 8b6: 6398 ld a4,0(a5) + 8b8: 00e6e463 bltu a3,a4,8c0 <free+0x4a> if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) - 8b2: fee7eae3 bltu a5,a4,8a6 <free+0x3a> + 8bc: fee7eae3 bltu a5,a4,8b0 <free+0x3a> if(bp + bp->s.size == p->s.ptr){ - 8b6: ff852583 lw a1,-8(a0) - 8ba: 6390 ld a2,0(a5) - 8bc: 02059813 slli a6,a1,0x20 - 8c0: 01c85713 srli a4,a6,0x1c - 8c4: 9736 add a4,a4,a3 - 8c6: fae60de3 beq a2,a4,880 <free+0x14> + 8c0: ff852583 lw a1,-8(a0) + 8c4: 6390 ld a2,0(a5) + 8c6: 02059813 slli a6,a1,0x20 + 8ca: 01c85713 srli a4,a6,0x1c + 8ce: 9736 add a4,a4,a3 + 8d0: fae60de3 beq a2,a4,88a <free+0x14> bp->s.ptr = p->s.ptr->s.ptr; - 8ca: fec53823 sd a2,-16(a0) + 8d4: fec53823 sd a2,-16(a0) if(p + p->s.size == bp){ - 8ce: 4790 lw a2,8(a5) - 8d0: 02061593 slli a1,a2,0x20 - 8d4: 01c5d713 srli a4,a1,0x1c - 8d8: 973e add a4,a4,a5 - 8da: fae68ae3 beq a3,a4,88e <free+0x22> + 8d8: 4790 lw a2,8(a5) + 8da: 02061593 slli a1,a2,0x20 + 8de: 01c5d713 srli a4,a1,0x1c + 8e2: 973e add a4,a4,a5 + 8e4: fae68ae3 beq a3,a4,898 <free+0x22> p->s.ptr = bp->s.ptr; - 8de: e394 sd a3,0(a5) + 8e8: e394 sd a3,0(a5) } else p->s.ptr = bp; freep = p; - 8e0: 00000717 auipc a4,0x0 - 8e4: 1af73823 sd a5,432(a4) # a90 <freep> + 8ea: 00000717 auipc a4,0x0 + 8ee: 1af73b23 sd a5,438(a4) # aa0 <freep> } - 8e8: 6422 ld s0,8(sp) - 8ea: 0141 addi sp,sp,16 - 8ec: 8082 ret + 8f2: 6422 ld s0,8(sp) + 8f4: 0141 addi sp,sp,16 + 8f6: 8082 ret -00000000000008ee <malloc>: +00000000000008f8 <malloc>: return freep; } void* malloc(uint nbytes) { - 8ee: 7139 addi sp,sp,-64 - 8f0: fc06 sd ra,56(sp) - 8f2: f822 sd s0,48(sp) - 8f4: f426 sd s1,40(sp) - 8f6: f04a sd s2,32(sp) - 8f8: ec4e sd s3,24(sp) - 8fa: e852 sd s4,16(sp) - 8fc: e456 sd s5,8(sp) - 8fe: e05a sd s6,0(sp) - 900: 0080 addi s0,sp,64 + 8f8: 7139 addi sp,sp,-64 + 8fa: fc06 sd ra,56(sp) + 8fc: f822 sd s0,48(sp) + 8fe: f426 sd s1,40(sp) + 900: f04a sd s2,32(sp) + 902: ec4e sd s3,24(sp) + 904: e852 sd s4,16(sp) + 906: e456 sd s5,8(sp) + 908: e05a sd s6,0(sp) + 90a: 0080 addi s0,sp,64 Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - 902: 02051493 slli s1,a0,0x20 - 906: 9081 srli s1,s1,0x20 - 908: 04bd addi s1,s1,15 - 90a: 8091 srli s1,s1,0x4 - 90c: 00148a1b addiw s4,s1,1 - 910: 0485 addi s1,s1,1 + 90c: 02051493 slli s1,a0,0x20 + 910: 9081 srli s1,s1,0x20 + 912: 04bd addi s1,s1,15 + 914: 8091 srli s1,s1,0x4 + 916: 00148a1b addiw s4,s1,1 + 91a: 0485 addi s1,s1,1 if((prevp = freep) == 0){ - 912: 00000517 auipc a0,0x0 - 916: 17e53503 ld a0,382(a0) # a90 <freep> - 91a: c515 beqz a0,946 <malloc+0x58> + 91c: 00000517 auipc a0,0x0 + 920: 18453503 ld a0,388(a0) # aa0 <freep> + 924: c515 beqz a0,950 <malloc+0x58> base.s.ptr = freep = prevp = &base; base.s.size = 0; } for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 91c: 611c ld a5,0(a0) + 926: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 91e: 4798 lw a4,8(a5) - 920: 04977163 bgeu a4,s1,962 <malloc+0x74> - 924: 89d2 mv s3,s4 - 926: 000a071b sext.w a4,s4 - 92a: 6685 lui a3,0x1 - 92c: 00d77363 bgeu a4,a3,932 <malloc+0x44> - 930: 6985 lui s3,0x1 - 932: 00098b1b sext.w s6,s3 + 928: 4798 lw a4,8(a5) + 92a: 04977163 bgeu a4,s1,96c <malloc+0x74> + 92e: 89d2 mv s3,s4 + 930: 000a071b sext.w a4,s4 + 934: 6685 lui a3,0x1 + 936: 00d77363 bgeu a4,a3,93c <malloc+0x44> + 93a: 6985 lui s3,0x1 + 93c: 00098b1b sext.w s6,s3 p = sbrk(nu * sizeof(Header)); - 936: 0049999b slliw s3,s3,0x4 + 940: 0049999b slliw s3,s3,0x4 p->s.size = nunits; } freep = prevp; return (void*)(p + 1); } if(p == freep) - 93a: 00000917 auipc s2,0x0 - 93e: 15690913 addi s2,s2,342 # a90 <freep> + 944: 00000917 auipc s2,0x0 + 948: 15c90913 addi s2,s2,348 # aa0 <freep> if(p == (char*)-1) - 942: 5afd li s5,-1 - 944: a8a5 j 9bc <malloc+0xce> + 94c: 5afd li s5,-1 + 94e: a8a5 j 9c6 <malloc+0xce> base.s.ptr = freep = prevp = &base; - 946: 00000797 auipc a5,0x0 - 94a: 14a78793 addi a5,a5,330 # a90 <freep> - 94e: 00000717 auipc a4,0x0 - 952: 14a70713 addi a4,a4,330 # a98 <base> - 956: e398 sd a4,0(a5) - 958: e798 sd a4,8(a5) + 950: 00000797 auipc a5,0x0 + 954: 15078793 addi a5,a5,336 # aa0 <freep> + 958: 00000717 auipc a4,0x0 + 95c: 15070713 addi a4,a4,336 # aa8 <base> + 960: e398 sd a4,0(a5) + 962: e798 sd a4,8(a5) base.s.size = 0; - 95a: 0007a823 sw zero,16(a5) + 964: 0007a823 sw zero,16(a5) for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 95e: 87ba mv a5,a4 - 960: b7d1 j 924 <malloc+0x36> + 968: 87ba mv a5,a4 + 96a: b7d1 j 92e <malloc+0x36> if(p->s.size == nunits) - 962: 02e48c63 beq s1,a4,99a <malloc+0xac> + 96c: 02e48c63 beq s1,a4,9a4 <malloc+0xac> p->s.size -= nunits; - 966: 4147073b subw a4,a4,s4 - 96a: c798 sw a4,8(a5) + 970: 4147073b subw a4,a4,s4 + 974: c798 sw a4,8(a5) p += p->s.size; - 96c: 02071693 slli a3,a4,0x20 - 970: 01c6d713 srli a4,a3,0x1c - 974: 97ba add a5,a5,a4 + 976: 02071693 slli a3,a4,0x20 + 97a: 01c6d713 srli a4,a3,0x1c + 97e: 97ba add a5,a5,a4 p->s.size = nunits; - 976: 0147a423 sw s4,8(a5) + 980: 0147a423 sw s4,8(a5) freep = prevp; - 97a: 00000717 auipc a4,0x0 - 97e: 10a73b23 sd a0,278(a4) # a90 <freep> + 984: 00000717 auipc a4,0x0 + 988: 10a73e23 sd a0,284(a4) # aa0 <freep> return (void*)(p + 1); - 982: 01078513 addi a0,a5,16 + 98c: 01078513 addi a0,a5,16 if((p = morecore(nunits)) == 0) return 0; } } - 986: 70e2 ld ra,56(sp) - 988: 7442 ld s0,48(sp) - 98a: 74a2 ld s1,40(sp) - 98c: 7902 ld s2,32(sp) - 98e: 69e2 ld s3,24(sp) - 990: 6a42 ld s4,16(sp) - 992: 6aa2 ld s5,8(sp) - 994: 6b02 ld s6,0(sp) - 996: 6121 addi sp,sp,64 - 998: 8082 ret + 990: 70e2 ld ra,56(sp) + 992: 7442 ld s0,48(sp) + 994: 74a2 ld s1,40(sp) + 996: 7902 ld s2,32(sp) + 998: 69e2 ld s3,24(sp) + 99a: 6a42 ld s4,16(sp) + 99c: 6aa2 ld s5,8(sp) + 99e: 6b02 ld s6,0(sp) + 9a0: 6121 addi sp,sp,64 + 9a2: 8082 ret prevp->s.ptr = p->s.ptr; - 99a: 6398 ld a4,0(a5) - 99c: e118 sd a4,0(a0) - 99e: bff1 j 97a <malloc+0x8c> + 9a4: 6398 ld a4,0(a5) + 9a6: e118 sd a4,0(a0) + 9a8: bff1 j 984 <malloc+0x8c> hp->s.size = nu; - 9a0: 01652423 sw s6,8(a0) + 9aa: 01652423 sw s6,8(a0) free((void*)(hp + 1)); - 9a4: 0541 addi a0,a0,16 - 9a6: 00000097 auipc ra,0x0 - 9aa: ec6080e7 jalr -314(ra) # 86c <free> + 9ae: 0541 addi a0,a0,16 + 9b0: 00000097 auipc ra,0x0 + 9b4: ec6080e7 jalr -314(ra) # 876 <free> return freep; - 9ae: 00093503 ld a0,0(s2) + 9b8: 00093503 ld a0,0(s2) if((p = morecore(nunits)) == 0) - 9b2: d971 beqz a0,986 <malloc+0x98> + 9bc: d971 beqz a0,990 <malloc+0x98> for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){ - 9b4: 611c ld a5,0(a0) + 9be: 611c ld a5,0(a0) if(p->s.size >= nunits){ - 9b6: 4798 lw a4,8(a5) - 9b8: fa9775e3 bgeu a4,s1,962 <malloc+0x74> + 9c0: 4798 lw a4,8(a5) + 9c2: fa9775e3 bgeu a4,s1,96c <malloc+0x74> if(p == freep) - 9bc: 00093703 ld a4,0(s2) - 9c0: 853e mv a0,a5 - 9c2: fef719e3 bne a4,a5,9b4 <malloc+0xc6> + 9c6: 00093703 ld a4,0(s2) + 9ca: 853e mv a0,a5 + 9cc: fef719e3 bne a4,a5,9be <malloc+0xc6> p = sbrk(nu * sizeof(Header)); - 9c6: 854e mv a0,s3 - 9c8: 00000097 auipc ra,0x0 - 9cc: b2a080e7 jalr -1238(ra) # 4f2 <sbrk> + 9d0: 854e mv a0,s3 + 9d2: 00000097 auipc ra,0x0 + 9d6: b20080e7 jalr -1248(ra) # 4f2 <sbrk> if(p == (char*)-1) - 9d0: fd5518e3 bne a0,s5,9a0 <malloc+0xb2> + 9da: fd5518e3 bne a0,s5,9aa <malloc+0xb2> return 0; - 9d4: 4501 li a0,0 - 9d6: bf45 j 986 <malloc+0x98> + 9de: 4501 li a0,0 + 9e0: bf45 j 990 <malloc+0x98> diff --git a/xv6-user/xargs.sym b/xv6-user/xargs.sym index 15ac61e..e4caefa 100644 --- a/xv6-user/xargs.sym +++ b/xv6-user/xargs.sym @@ -1,6 +1,6 @@ 0000000000000000 .text -00000000000009d8 .rodata -0000000000000a90 .bss +00000000000009e8 .rodata +0000000000000aa0 .bss 0000000000000000 .comment 0000000000000000 .riscv.attributes 0000000000000000 .debug_aranges @@ -16,24 +16,25 @@ 0000000000000000 ulib.c 0000000000000000 usys.o 0000000000000000 printf.c -000000000000055e putc -0000000000000580 printint -0000000000000a78 digits +0000000000000568 putc +000000000000058a printint +0000000000000a88 digits 0000000000000000 umalloc.c -0000000000000a90 freep -0000000000000a98 base +0000000000000aa0 freep +0000000000000aa8 base 00000000000001b6 strcpy -0000000000000836 printf -0000000000001289 __global_pointer$ +0000000000000840 printf +0000000000001299 __global_pointer$ 0000000000000512 dev 00000000000003bc memmove +000000000000055e times 0000000000000532 trace 000000000000029c gets -0000000000000a89 __SDATA_BEGIN__ +0000000000000a99 __SDATA_BEGIN__ 00000000000004e8 getpid 000000000000044e memcpy 0000000000000000 readline -00000000000008ee malloc +00000000000008f8 malloc 000000000000052a remove 00000000000004fa sleep 000000000000053a sysinfo @@ -43,31 +44,31 @@ 0000000000000542 rename 0000000000000494 write 00000000000004c2 fstat -0000000000000808 fprintf +0000000000000812 fprintf 00000000000004a8 kill 00000000000001d2 strcat -000000000000062a vprintf +0000000000000634 vprintf 00000000000004d6 chdir 00000000000004b0 exec 0000000000000478 wait 000000000000048a read 0000000000000414 memcmp 0000000000000466 fork -0000000000000aa8 __BSS_END__ +0000000000000ab8 __BSS_END__ 00000000000004f2 sbrk 000000000000050a test_proc 0000000000000502 uptime -0000000000000a89 __bss_start +0000000000000a99 __bss_start 0000000000000256 memset 0000000000000068 main 0000000000000200 strcmp 000000000000054a shutdown 00000000000004e0 dup 0000000000000522 getcwd -0000000000000a89 __DATA_BEGIN__ +0000000000000a99 __DATA_BEGIN__ 0000000000000316 stat -0000000000000a89 _edata -0000000000000aa8 _end +0000000000000a99 _edata +0000000000000ab8 _end 000000000000046e exit 000000000000035c atoi 000000000000022c strlen @@ -75,4 +76,4 @@ 0000000000000278 strchr 00000000000004cc mkdir 000000000000049e close -000000000000086c free +0000000000000876 free -- GitLab