From 49684ab687cf9fa8d6180aea5a5ca66705330f12 Mon Sep 17 00:00:00 2001 From: yzw <2000013168@stu.pku.edu.cn> Date: Sun, 22 Dec 2024 06:41:26 +0800 Subject: [PATCH] os lab12 --- fs.img | Bin 268435456 -> 268435456 bytes kernel/include/defs.h | 1 + kernel/include/proc.h | 5 +- kernel/proc.c | 138 + kernel/proc.o | Bin 155400 -> 178352 bytes kernel/syscall.o | Bin 49176 -> 51312 bytes kernel/sysfile.o | Bin 110840 -> 113712 bytes kernel/sysproc.o | Bin 46456 -> 53096 bytes target/kernel | Bin 279632 -> 285688 bytes target/kernel.asm | 14444 +++++++++++++++++++++------------------- target/kernel.sym | 262 +- 11 files changed, 7756 insertions(+), 7094 deletions(-) diff --git a/fs.img b/fs.img index f5213a52b1e6e44785593f473f8d11737c7e40ab..941a9bfcd8543732f2ef3b4ab4352c5bcb91c954 100644 GIT binary patch delta 3590736 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 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4 zG^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF z(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+Gy zNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp* zAq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYM zhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV2 z8q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7 zX-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHU zq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZ zkcKp*Aq{CrLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{Cr zLmJYMhBTxh4QWV28q$!4G^8O7X-GpF(vXHUq#+GyNJARZkcKp*Aq{CrLmJYMhBTxh z4QWV28q$!4G^8O7X-LEWue~}b0sw#j0Ct*+riB__@(5xpF&o;@hBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ z4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@ zHngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq z+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c zXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td& zp$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%A zhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c z8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD) zZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJ zw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#? z(1td&p$%<lLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<l zLmS%AhBmaJ4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`cXhR#?(1td&p$%<lLmS%AhBmaJ i4Q*&c8`{u@HngD)ZD>Oq+R%nJw4n`c_<F;x*^C3sjz?zz delta 3003190 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 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBoLKkd*l0RR9D0-*lqniy>n%-|0ZFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd u0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0Rslsf%_D|5UUsf diff --git a/kernel/include/defs.h b/kernel/include/defs.h index 1c2e250..6d17679 100644 --- a/kernel/include/defs.h +++ b/kernel/include/defs.h @@ -135,6 +135,7 @@ int either_copyout(int user_dst, uint64 dst, void *src, uint64 len); int either_copyin(void *dst, int user_src, uint64 src, uint64 len); void procdump(void); void test_proc_init(int); +int wait4(int, uint64, int); // swtch.S void swtch(struct context*, struct context*); diff --git a/kernel/include/proc.h b/kernel/include/proc.h index 94812bc..46bf989 100644 --- a/kernel/include/proc.h +++ b/kernel/include/proc.h @@ -92,4 +92,7 @@ void procdump(void); uint64 procnum(void); void test_proc_init(int); -#endif \ No newline at end of file +int clone(int); +int wait4(int, uint64, int); + +#endif diff --git a/kernel/proc.c b/kernel/proc.c index 1700926..2f0fd8e 100644 --- a/kernel/proc.c +++ b/kernel/proc.c @@ -792,3 +792,141 @@ procnum(void) return num; } +static int check_for_children(struct proc *p); +static struct proc* find_zombie_child(struct proc *p, int *pid, int *status, uint64 addr); +static void copy_open_files(struct proc *np, struct proc *p); + +int +wait4(int pid, uint64 addr, int options) +{ + if (pid == -1) { + return wait(addr); + } + + struct proc *p = myproc(); + struct proc *np; + int havekids, status; + + // æŒæœ‰ p->lock 以é¿å…å进程退出时的唤醒丢失 + acquire(&p->lock); + + for (;;) { + havekids = check_for_children(p); + if (!havekids || p->killed) { + release(&p->lock); + return -1; + } + + np = find_zombie_child(p, &pid, &status, addr); + if (np != NULL) { + freeproc(np); + release(&np->lock); + release(&p->lock); + return pid; + } + + // ç‰å¾…å进程退出 + sleep(p, &p->lock); //DOC: wait-sleep + } +} + +// è¾…åŠ©å‡½æ•°ï¼šæ£€æŸ¥è¿›ç¨‹æ˜¯å¦æœ‰å进程 +static int check_for_children(struct proc *p) { + int havekids = 0; + for (struct proc *np = proc; np < &proc[NPROC]; np++) { + if (np->parent == p) { + havekids = 1; + break; + } + } + return havekids; +} + +// 辅助函数:查找并处ç†åƒµå°¸å进程 +static struct proc* find_zombie_child(struct proc *p, int *pid, int *status, uint64 addr) { + for (struct proc *np = proc; np < &proc[NPROC]; np++) { + if (np->parent == p) { + acquire(&np->lock); + if (np->state == ZOMBIE) { + *pid = np->pid; + *status = np->xstate << 8; + if (addr != 0 && copyout2(addr, (char *)status, sizeof(*status)) < 0) { + release(&np->lock); + return NULL; + } + return np; + } + release(&np->lock); + } + } + return NULL; +} + +int +clone(int stack) +{ + int pid; + struct proc *np; + struct proc *p = myproc(); + + if (stack < 0 || stack > p->sz) + return -1; + + // åˆ†é…æ–°è¿›ç¨‹ + if ((np = allocproc()) == NULL) { + return -1; + } + + // 从父进程å¤åˆ¶ç”¨æˆ·å†…å˜åˆ°å进程 + if (uvmcopy(p->pagetable, np->pagetable, np->kpagetable, p->sz) < 0) { + freeproc(np); + release(&np->lock); + return -1; + } + np->sz = p->sz; + + // 设置父进程 + np->parent = p; + + // 从父进程å¤åˆ¶è·Ÿè¸ªæŽ©ç + np->tmask = p->tmask; + + // 从父进程å¤åˆ¶ä¿å˜çš„用户寄å˜å™¨ + *(np->trapframe) = *(p->trapframe); + + // 使 fork 在å进程ä¸è¿”回 0 + np->trapframe->a0 = 0; + + // 设置åè¿›ç¨‹çš„å †æ ˆæŒ‡é’ˆ + if (stack > 0) np->trapframe->sp = stack; + + // å¢žåŠ æ‰“å¼€æ–‡ä»¶æè¿°ç¬¦çš„引用计数 + copy_open_files(np, p); + + // å¤åˆ¶å½“å‰å·¥ä½œç›®å½• + np->cwd = edup(p->cwd); + + // å¤åˆ¶è¿›ç¨‹å + safestrcpy(np->name, p->name, sizeof(p->name)); + + // 获å–å进程的 PID + pid = np->pid; + + // 设置å进程状æ€ä¸ºå¯è¿è¡Œ + np->state = RUNNABLE; + + // é‡Šæ”¾è¿›ç¨‹é” + release(&np->lock); + + return pid; +} + +// 辅助函数:从父进程å¤åˆ¶æ‰“开文件æè¿°ç¬¦åˆ°å进程 +static void copy_open_files(struct proc *np, struct proc *p) { + for (int i = 0; i < NOFILE; i++) { + if (p->ofile[i]) { + np->ofile[i] = filedup(p->ofile[i]); + } + } +} + diff --git a/kernel/proc.o b/kernel/proc.o index 6a667a2c35d65bfd543e423785b50868c9e6f388..ca15055a43a09b0c7ffb422ce9600f7f14f1681b 100644 GIT binary patch literal 178352 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 A6951J literal 155400 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 diff --git a/kernel/syscall.o b/kernel/syscall.o index 14db7628871253a305fb006dd27fee51f0da3b5d..7f13717b50900bbd5b94da38322cb180844d6416 100644 GIT binary patch literal 51312 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∾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 O9!yNxrbQK^toy%hq=8%j literal 49176 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%0D0I{rRgbx+CbHV^x1*;B%64|9K@- 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 diff --git a/kernel/sysfile.o b/kernel/sysfile.o index d81e9da22f8b4304bc6b0b633ebd04179dfe95b4..2823fe3354425d185bc840b74520eb5c463a6fff 100644 GIT binary patch literal 113712 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 delta 26934 zcmZ{s30xKR`u}H+OQIkm%5V@A1Qba`aIdg5vn;VRGg~w*wMB8u%4?U%EN|Dc8$H># zMNLaBP26x-Omj(7EG?HzEX!OfOw2v8-}B6TM?QT2{^#}L%$(2r*}lsxXU-fJU8sKH zaP>D+0xRb&PQ4>E*>aabgP)Bb^5n3=@gs)EckR^MO1JjMSyna6t|7PyeI5E_qo%T1 zWuzT3f!8$$@k@OVr@YGB&FKEHu68O-=hy2Ce+_FMup1WEtuwZY-JD*FY}q!gM$JA| zEGw$cb(ST64M(t3xK*>8&7uTIt`Ob#ZTWpXl|}ZmThQJ0cG&3@TYs9}l2+IMJ0gSa zt!j5iY^=_!nwFJGTcR>)m=hN_rZz_%F>H{v)vh7iRr0syh7TY79KVknLvx&_84bj@ z*luofHL|$xciPvz?Y;Hhe{F~C)$d!;6(>5+wfftx>wC4<^y;d9Ez1fSJkt8kc6=Kv zA+63;es$wlJ9He|HojT2*t>Y6O8z%vWBa%pJH{qH#v7r&!&dGGo2Epk1U{@qpGPMK zHr1jd(TO*da1h&mu*%r2xmLh8-p=Dy?t}Hu+xA11`4SEmMV*4tffk`uCnhS`mGf|v zz)My|kjZQ`lqLm}><P3m=mb6prLyFxKw&8T6pRXN52ZJfq5{8o{(o!#m%%?d#Ihpk z<`^e<eV7*=X+5U5(uf$xew_XjlW4y}pT)!lriIa0F^PdM!st|Nqv|sD$HHh4r~4;N zlE*kamQp9ry{nC_!jaNzyG7kzTZ*zDq1PHDReObP<7sJwq%i6K2<e-Tc{b3m4O(}& z=8!D2ufHSw{~eN3<MfdHF)r~j>J{4|kP}W<5)$o+v^X|8Fg={M$0i0ghI7e@f#czB zCs}o<XOpNvbRD`rv0=M5lG}dAwq<hJBe|NkgGP$bK;}piPnUP?h{oKYcCO)j-YiU_ z_v4z`qiIuIsy&AOjLQsMu0x3pn*|agI7ehP9^;!MXnss|wG`gGpC&Zy9JmxgUp7px zelPE}Uq{fNO=GKn$-VPO1l4QQ!LCm|8a-&gL~|R(Hu|ux+mUt#&yB#?z7@SG`_bCE zbfi&I_3~KDI$W1($4A)~CCA@t_opZ0#{^bH(vR^C0(&Cqa(whnV#K?jx5%5T<1&=1 z3auw;I71iPe%NkZ88)MP5(b71tgi<rR0d~VLdU?NdeXfO&bz)mv-iWymPr*}Upm)r zO7}KS3Usf}U7Sc$8#|$qQI_RMAy+ui=ZzcN8>u`YzWQF)j@G9di3x!#VthlWD6ZjG zY&a^hd*H(;`aChQMG*(!+2wXhm9d*3t$6(4QQ4EYNp>ccHFDfOvK&fi5*3VQ8*?9O z%jIU!!%5MBZjQ`jdmv3ta$^2<4b!9CUHJ~J<DF`*8!)iJp_54s?PLl|ZjkU~(6Smy z<7)dyB==p+2cq%Ph`J@;W)G$RB{!1&HQ5QwkEX53O#_>v-5Gf>T6XlnnP{oi4y9Ac zj-5pJG;!>k-0j}<Vv`#Ke+H?jNs>E%HU+QFpTj{4Y1-Z%LY<o?SChGQ7Y%FL-L6Ng znznRpcf_!5eBeY3MWi&at5aG^hrkyN=!ukc*L)nEY?@#zs*@6HFJ%}_f2Aa3jp51S zj>6q_<V+CA?^|ogAgiZ)1P<i)ZZEB}``3|!yDV4dl@yRpJ)0%i-RbFO_Xf&iX=^jD zu5Vb5OO;u8od5J-Ts?%w^VHUw<(}};DL*yJtuT&yr?#;>(4^G3xVYg~Y%SSSWr-Wf zHN{4ja)It!+LYQlP#jlyDRr%#*V?L5`-TMj#%djEb&CveTVh*V8Igf#cB^JpsUfJA zj~XUe-6GTZnB0hw>y<Fm_F=pWt65e;oShLFVb{H`Z-V_mwfk$?k$gO=CP6uRqD1H8 z1*dgm*L3spDYJ!5q0M9Rnnc*iwIgd)Y1E*Rgs8(VO`{}PEw4h$N@>DH@JTw!s#U9F zttvd@QX}muHEPvj6RuRUU0>DiSgRJdr$TC8)vi+86w|^vhGn&A!rhYI!oE3Jh0dnc z&1>1h;!R1(@tOv^Mc%~oHpAsw6iE_gayMD6YF@3+vRc=&rEY<3T5w9QZV3|ame$to z)T@nY=XU?qx9#O^n3vcajShv>qESfTugJos?f#6Us@;F2((a3cqX!QhG-Bl7;g($K zJTh|3XzS_Gj}05~*wDh_?2&fiZFlF|fkDp{Zoa31U0BkyLDj;QectR?n4-o8=$<K2 zh0EVta-H3Xo}Bpz9|E?`Oz+lQUqQGNgkPfFnHp}L_XWLfr1hbEse?-st@ou)AEn#B z(WsA{V4e}Pv$jd4nIAbBRgDNe{fvg!16rR*Cq7CK{^-7|$UI8ZyD8&iCs@abIbPGY zG?3}zRV(~tD__&;l+X0%%Fvpr=}okO>9<Bzi#7d$%071N_b6mmdPHv{`!3or%b@|Y z;`t;yewGuQZR9W0F^14$rhgb2yeqG8E13?@a_mWTaaMY8zw1#^XoBk#E|)>G9lHxX zFgrcC(a6$C+pMLTvz_4g70&KfPfa`0uGvoDU={jpcK?`~Mu_p+=uev-ozo)YSEHTp zY5anr&(!)b+At?Q<Fxy(BK;~&iw&<0S|3RXpE$vGhSx4ldr;3$((PF^o^4_bn=)<l z0WJQ-vA?5jpQH!-8CmMOO$@hIQN*WCFktj+V@>-|C#Fq|_?epapi!TubFa^2n|Q;f zm$vzacCk%;vgfATWt1`33C?p#ML)cxExXV_rVEWa-_mp(<<E8Ow`uO&^x)4%u0n0I znaVgz1|`f(w+pG~JSVu#u>3_^+BBZ2*V7f1{H1AgT0GCOBWc^b+aqci5n`#+d?%R5 zM|nOCS(#T)OJ0;z8a3a^%XDdob$dl<ck2dM54YwSZS1V==Nk5RYWt~%eJ^d_(9j?B zbh@q}qT8d|_n1-tP^}*|M*L|VbFC5cc^X*Y1joD7w%*~BFE0O~e5U`?v@M@XaCwI| zFrB6&pEn}U7MfR}eOnrlmudYDLod?$gND9Y>mv=lSnDqu`W{cuvt}5eL_5qg^k22U z+R#h2zSYprYW;|zmuvl`t3!`fqlkr0FwDJBvaOmxq)+QpC#G?l4lrmkjbfUn=@^5y zp_xpxG=1Bkx6v-9*_tjf=zU}_a)SLd-D=Rml)*Gd)6)ihh6Xat)wHIuue?I}OebsF z(4bRj!y+ednoGm2M4VQ<Jx6;T<cl9%3bbw+oxW7Z>4V0+UF7N^RxM+1*zD<f)@=qT z)(*oAeUGc#R#*P0fXfeBA7JQ*b(}RuoD-GoZ>$Jarh#Pyx~TO`L$@hni4zQQuXt^1 zv_T`N6VsrkuNpLgMlo%s=~RPe&`hQsG(Ba|PPB{Zoh}WxzA~D3FWH4o@L}y6Z;ak! zRK_#nDebE&8t-mBO#|8Yd6$M*=Zwe`D4*$TI`S<>WTFjBKhSiHK|iLlLMQJtP3IZ3 zQ0uD=eT}P!TMxNsjf!G7Y5U#ox<cQsb+gr;ot<a>W;h(s4p$8QXRX&W3iABJt>=tG z{$JYOGU8m)x>o?~yF7Q6Io(3s@Zr{S<G5W{>#>I3z|}*nPmJ`5G-?^&J#wjSr5Z)F zqM1x@)U>}rZ>3#K@6vR>L3uVUcY+VOG~Bvq)H8@OmOK1e`tVXGW3;x3Gsfz9R}Zmv z8a4B5;>fS*yix8xRxy%1o0xu}X=j7-Y+BB<Nz;)AE!6s}hQ3DYD-C_4);AgYcC8;Z z^lv@Avvt}4Ke!;=T4*%&hz>NsJug)>@^|UJjMFX+vCK=ZOIi;xIy68LE1h6X_n=@~ zuNpDyQYWS{n$9t3V;aRYRntud&7_$tos1ha{llQ0T|L|yVzllq+OW#8d(q+*PVfQO zCd9hcsCgh|ta5@+>d5Vl$fIcBDyQ4OH0@!~@jCBW<8U-d+pjn3$(MS9@47U^ddjF| z29>RH@;=qH%%F>O%%6;yE3|&j(AR0*yVS23+09ySXvE*)>3LSF0lw7^FBtj(t-o*R zhqXS((2r|<ouU7!^{uWBC%tnT>@^(9wSLmjt5T;m4#lso(J5ezQ$6>BAlzDOc*ME7 zZOyCb9(OB=X0G9bmP<pdNk+6x+Qqbkj(OSW_s(Rmb%NcrZ+~My>`56+A8@H{Z87o= zpn*&u*YppA4ySyk&uD61{{NdcFrA=jXX9`<iOQJfYdXN7?@~gMllP&fV+=aS)x)hT z#w=f`?ME9uuw3ir>@U*#B*T7_r{`JI4X|B1EH(7qt{!gvZWQ!`wofwbf7ZHL=n1WN zbnS;$boVI@x*LJcYu!A~TygbqYqnv3oqJlft#wABwQ1%$Cn(=D$;ZgO292d%OcOOV zdp(ux&z)d~OT(=<jf^)?2GdUepS*X_K&E$V`m&L?59KrMr|A-d4x$ZAb2Qy)%#ksY zx7+hB4Y$akFKa!-h&kESL#zwNUNVJxu6Ke{b*{@sw2x{0dM9t5rp=9*i?!ax&{w*8 zxb?bm4A`LU|7~RPKJ3_*+0w6F`;a^<)VLnmrvtrf1UjVk`G)?h*4G*OAFdv5H8%9K z+WrZ5p2BhRvIg@iCa}9z#r;qfV#OPU)}&n<oM42e-i2?4Yc$zkIKf6P4YxWPy_G^4 zOw(OzTV5#@zI>yRX_k&0?p`HS&@PnE^e#;o8nhQ}_`;zX8)`&kR=BuZ{i%%ohUlCR zyZc&&$#6>8=mekDw7J_C74!w_$#kNo>kZ#GXgt$*G#zcw>9lyGlQ&1xmhQSD@&c{D zWOyyt`n!g{PU}023b$yzvAeE_zthw6te1^Id$q$PLqDYT*6!)CBG6H-PdD_FT0dy$ z=d^yt)nT4p(crS-P@TUTmg87;L$6KtW+xb>X>EfxqztA_H1)1-DvEAF1DUqf^gF}1 zBjq#gs;T*@y9aGx+DFqF#ysQM#B_+J4;qwb(-xjhnvOFl&nBi5HC<~^o=r^O(ezn^ z@@(3|vq{qf23?@_sm8v#T<hM)%8LG3r}Zs{{T8hcF!Y_Co@cE$z+UZ8!#D&V()wjX zKdSYq#zoOdt$$_c=d`}x)p0gy@T}oboxk#z+4Q2J^K9D6vq@9$W@<%$@N8n*MAL^2 zU!F}&+i2R^IHui1`Al!sbf-b@qzz1aYI@Y5eW{G;BbvTw&>@ttjnA2y)-&iB>dEwZ zO{W_4B^uB4znUI0=$o{dsnYakgHETz+nl`Fny#zpCU<MT*1t0JLakpm^wnB#Z=8@e zXuXf2Z}s#%Ypemj)($6)1bej}YS@=({RTrnqV*nz{=3%ux;o6Y(;7T$I9$~FR-+(` zGPXOx>-a$unTb)xl|*eC$h5wu3yhetl+QF#(<h9`skDJ<hNjaE+Mddo-mK|FgLb8a z9ek@+)0Yj}n|d;RNYgn6eU!#CeL_=yDx=aeoE9@3qv^wym}QNl!#kXi7d5?w7H@Yb zy0}j8b*&6C?BAkJ#gEuCXlAivf8xF_a9>xuuRUlN>+9X^t@0Wy<~Vh^pZzPaUOL_$ zmzHSiUx!W7^r%ZuY1&th(GX29y76tvMc))xr87J0@v{z+xgjNd?F3W!0UpWee<bLk z{rIyTS9GJM{wJ8OdW^fc5$<wdkGik-xvvk?VU9UOd-?ZL{O1owQp7io{V&&Yg1iP_ z*OvZ0x!pSZ+b(@yQ~wsCU)vm)F3{A!k+@d-u5#nAcWt(68~+A*lCJ+-*XDcI=CEIb zzKqD!J@|)fbKZTmY4O*N9pb+3mmV!_zx%Kq$ZT8K;JbQ(KxRA2*t;;0*`9vhJG@Fp z%a$~MUs9_M?W`8vyWiWpRVJ@H-P^T8d;PwZUbpu2jLZ(&phIEx{h4-j2EXmvxlLPH z-R7>?JELVL-ShqHku9}TONrv@t?AG2qwF?R{lMLUmTl?&18J!(B{heT%p5{iTu7z_ zc3q?rccTL>IB-X_#AItX?``f%U`7Vj{^1FJFyOf#hS;s>&<`E$))aT}Eq+~eFo_fH zIXE<s(Uv-wqy{qD(QsL{r}s-T0vR2sxFpkV`PQMRntsmAOo~6$isSU=*EaO(p-elY zaLu9PRcl-RUdYc%Si7m@7bmz1jx<g5xbiSrt10XVe+dsq`CBw?&g(Ul#dIzBb_ZHS zIZTUyKB{RNuZw7!LC0t+ReejvO!3p}8=6X0pHn&0^$^)V(}?ePl=drs$qLjz-w549 z{g~pNos&AUwCD?(%yc98UeQ$YZlWTln}PZ#4vD;vN}2A5zKYkg-^&|!)Cukb+6Cx- z%4WI+BKr?DNL8CC*YJI`l5YW1%<G?Rq@TA?$x+ANLT8Vr+h0=hvGm}Vkj1~rE)^c2 zoMY+sR+@Iq3GRkE{ZGNt1KX&W=~jpks<$P=w^Ys)zkEpodXUnNJHZ1GxsRq&=T_=> zJl)<-li3EdPt-P&eLEE~#VeBcE78*9j{PH5JCPpTp>=k$e%9Mk;cm)4;Z&mj7dk=@ zQSJ#R27T-3yBtCfSEU6fTG+)@!Xa>%=nqB*DeSj&dnaZ6R=Lm_+D4kOlX8A@VvayZ z?1u<PtJ3t}qJm#T3r+&wO~oAg8=wIlNM_0|D(CdODeZSBcnlK6gUz?p@Aq_mJYzE3 z?14D9fX!YiV!99Lvzkgz@JwfV9OC=ekW#~biu;2j1Dy|%zo%@b-$Uf(l_KXd#ku^I zrZPvqrUIrXAhN$73*AE{OtIhmnd13|l~$(y6}7bJAZ0Pdz4H=OwV!fIofwQ9qp$PD zR|c#!%058LO4EZsK*MeVqkUA)39w=PHI?EHP})f+2IrLjAw(zWe=;iOAcTGkLLaY6 zZ=8$@mH?g(cn=kw<hclR5l|jVrdZd3N;K}z%JihBQuRT~W{PE90pD*am#IGlY;HwY zmsfstpZ|WO0;Z)flr1XJl0Vb!pD659x_y|kPB}rm<?esCC2@YH9D`1(6lWUKgOFvd zrrw|zGsP#{c7X3sRBrhGR>?Q5tnz^>T7SNks(zt<2KB#x6ncav8}ugd{gsNC;&U>+ zfF7e#rnqbSAGl@LJ5F(@)9n+KeVT1x#QhKV{7|R0jB-yqG0TC@(($EFPVqtRbW|nh zbsEc%AEOc@w0|GK>(H>j9Qzn0|CJv64HBG#1cxZ+FDC|RsJ<g15l-{I^jB1+S<^*h z>AByjn4NJy>8q)<{*M4%`70{s3=Fq_A4Qx?1JvS7RLohx?}PWr0QF~#-b<jelf0Lm zi3+ZOX6@Eko<&_rMQ5DgpFsT^Ez)hjQ|TEe#y{Y&z`yfwU)_D-RDc?ujf(LeOZ4Pe zz^4P$gYjPw+xxPTe<8uvy!*d!HY#`qusk>}i{L#}aMlUK?+N=-#yN+MpA8NA=RUE0 zs*+C_TMRoF8ulWn`zY&N<zwXAK=~MX&Z*Rf^_oiGmj!70xu}@)P^5orP2-*CqJkFy zAA;C?@Z{KdkUFiYbnXQn*Yi;^=zOU%?r-1}{mDc6hmYQGFun+>Z>fye8Mqf<?);PI zqk@;f`w76`QQQS5=5L^5fnKUgJuXC5!u~B+>6E_%^aA6{;Qgld7F-^n1s9@%7~H?} z>y3K}r^d7J5=i}bRjPe4Du`e4__wIVnTPtK6Z{7<@7K<<pIMZ{6i=2%A@qKl#?;oA zEMk795-nzmy&cfEr6uovD!=H2VbOQc_)8A8zZ4n_K*YY_!x!{yart6s*f3D{(d0`` z%w^cuUk6%VmDXK~3RZ!T(*g5I@lxe7mQvY8hf@9yjlpK`1fMHBn14rA>XkEq_fziQ zPOvH@41`MGcsuESDqxBeJgO2cVTyg01au#TU3Ow{to$zwWar>X)bVmuuo@%|bJNQG zCI0aZ<y_|bO+fi~D()h*22Eoc0<^KFNxZH}#Rg5)RD5euInz+^y$NU-rIkCu+Cc9F z8czL~`q$n99t0XelbO~9-_bxLsfcMkpsxX~Po+$wfPM_rp|~qfFdC?Tk3(7%r0gqv zRJ<G-b`E?RP%it#f{*_&y!gaX0n>&++lkDJtQt`X(|Dk_0!^T>f1F@rp#J?%F-oK? zruc<(F8C%>4pV%9dJ)j3G|iyffu>L~(`Jy@fACz4QmLHj^+0WXm=M~0N}A0NgaS<j z+G0vSrs+VlfVP}6nP~>l2Y_ZyDPr0R=rcfDPbp>E2Iz-C+p0L5F+S7of3%UJ+pBEB z9l+Z^*$Pfk{F5ywcmv=_y)8Ie6$lOjz8~<7szmTjfJXt&Qegqc-h%)fjhA-;->k9( zHvsQ_`Wjnu$EX~^DS*oW-=d}o#&*}z*RbN<Nfit34Bp9rZ&l@jy8!MB_%@YRg>hHF zqXFNj`U%F$Uk7}<nk*Q5Z5iM@RFU9r5ZrsD)!T9IRHcIN0(=a-yQ{dWjI#m%1-OUG z7JN70Y<-0)-Exo072Ff>8-RPM0>SqJ-Uhh0DiM4i;HvsMQG)kTVbvJ>GlUiEX25+_ zmf#1#dl=vcRgU0?0M7^fu$m^gAK+tv`>SHXj{vT!FO;OT0jgZ^K)_7^KdREIGky$k zHsC?3pWwlO{pWin_z*Q&@Z*5Dg7*`uNbr+@y>EfN@qS8`3LXkLL0?oz@L?+MI>tGG zJ83LOf#E8faoz~P-cwS%Zwm(9dy2_RIudk(Z2s=cu9knrB~|!$^hN&|?4S1H<cV&5 z3SbN*C<Of(&{u+vJIhAUp9OpW=KxaBbD$rt>E(CNJ7WR-0fGJndYRUx1IK}WQR{LA z@ccD&=~1+=qc4K^L1WAMH#o#-API6oZ>)7m@WM58Nr3kLuRo;4_{+Cm5dTGvqub9_ z0~ikpW`O<@=$k>G0J`^hjrZHqmqEV*_ODdvd6uKE+N8x3D}d!a)ZzvD59qgp{i~o4 z1O30CzYID)>NeHYx&4y(HE>u84zGj01N6zD9|8Rh&@Y4jKhW#xOHIl9CXP*W0Qun1 z1@yN-e*$y@-FqOyYuMYMPY3%cT6f3)GXU>^!$!~*=-+_upO?8Y)^X6^1AD8sP_Ll( zL65Gj=bv=N2LM`v!&K1k0DT(h13;e+`b4eEUhpC4Z(g<M_WL)XrNVbLklk!1IQY8k zW@!HjB=`vIz3<|^Bj(4T?*jW-qWk;bj{xwo#p7C+9-0GzPH9~V#b^9|T?$3}s_vJ= zUO}HioV<7qB*9z&-9VoQ`f$)c1N}ds&j<ZO&<jAH@9BB&?zaHICU95?`YzBHfqnw? z#h}}AJAfBy*b>l#pchv0`=5<kXdsgXA91}O^kooe6zI!Ae;yL70DXeiWyn_gy5#qP zj2Sw-1qoL94s0_Y^wpp*1|28kSD>!}`va`I?Uxp>1@NPGkgh8Ny&Uv)px1Q&6NuN< zpM%~Q^!1?MQlaNr8vyjJ0M-|vKdp5sbR+1wV803USF|o&z4;ot^t5NM$A19?+5!&W zfc_=urJ!#G{co*Hq1!;OR+j}{q({F3JuFWHsdPI6txKio&_wH!U<cS=4|*}^H-O$0 z^ln<ulR!HG3<QU-K_8-ZX~8$3PXK)v=rcgy4SEsi-&VPL{Nq*v_zoO?27M3c=Rsd4 zRp~|k*MTe|?FIWNtxJRVUDbK~<H2G7RlrxlT9={u{u;Ur4cfPZ1P8$Wzo7pB`WvFl z{F6!#0{B2Xh+YEvO3)91z8CZ#LH`BxpFlqadfs6GVfqmWN&GYDsi6M?dOOgMfZhf4 zUqSB)`cY5!_P<9okg+)i4o`x^anMI;U54hwHFOyow0{xe<B{?GdV2qt#J@qHPr>1L z&<miTKR{m%dMW5Xf_@V83%)M-{{&En|8<WnG6bhUPXWCQ^fsWM20a_}zd(Of>(bye ztn2pkzoi0)v*7Tw)}^b@T|<|yM*Ei_L8Yz+{d`57JnKV9e4zqZn?Sz^`Z3Tif&LHZ ze}i66-@BC-Uj{wS)w%uB)#U(^wS%<y$~AOpG1|9=1lZ#4p#KALdV*e@2jB?+R#ncT zmuEq@L4RKB(g6Q)2XUDJdKIu=2YOYlyW@WlKs9hU0eW@NZTZHO7fE~_=t0nHfSw6D z{zmamN6$YAR1+K?1&3Ooj{`jv^tV6{1AQLowL$;ls?O~X2e3~AnJjfc|LLj&|7R`G zk83@N?eUj=zAkeG?axDecdlIB|K#gZUL<iOB&Y^@BFvTApyPwgk)YRyII*Bdfu5HN zzyZ)6^k~qtKo3Ge-L)=583g-bpvQpzvZs63{|x{XfI}?kn?c844wr!55bV!_-U#$C z{_jb$NTKmnul7Ix&nEy0;E)A+W6<vdJrVS$v@S!L1p3oppX}?B|9K6Pc)N)YK$l5$ z)q%G^hCofhelzGPp#KbdGtf`5?zUel#h;m81c&Rv!H!`=UXu8)`89MY6z!X7d+F*l zu<u@>=UFWPJWv6wbkHByx)j<H^pRkn0s2_2C$W9zHFPP|v)7kGpFyBjDl3j}jJ5{9 z-vGA({kjGmh!<&KThQxkUFvNIdPA^p4|)@=C$W78Pfz7do(>vF!RYV+1iC?$OT9Nj zymtZL1o|@2vq0adb*Z-_=sUpvX3)RWdJ@~~2jsjR$p=y|I{X3&IzgZ-pmzp6B$fm4 zA_d_u#A|C^I=l<mw~W<0vVhwFWP?Lj&>sZ-cF-RO{SMHd(Yh4W4fGd$d&z$%fQcF; zv3}Pzbm<|qp9cxLgZ)B30o!MTz6<motn2pk^)P_D!Ql!dxCiv>_<#S&B0bj=^l+^w zvEJ(%x-<an^Q<P?LAvN(aA*yBZ_qn|ejn&vwJrtq0lhca-w*mDuFmZjhrR$F*A7Xn zKX46QT7dTBAi;xR|6kDY|BEQlA07Y>ivjcleYw`9(EgzB1pN`v_3c!*VFOfdWBxX0 zAm9WJBa4I^s0su>3b?fkJ^Yv|5j+A;*mnRPpu!Rv4+8Ip0S{7Hf(HX00eG;=5sdfH zUjqD?nkIM%cuxU5L=_9h(&ho?@81MJ4&MG_?b7bYRaz3`CjjpP?<Z70!PqTF06(TC z3&zsU10JG^1V0JEYsu{9MRGr>N(E!(jQ|f&amkD)LZ7z+JW*u}#$LM}@M9`hFqZZZ z;329&Fy<Z!_$gH)cqmjp0q{^2*2KvD4&cXBmf&IFJr{6}$`OpE6#*WmrU}jg?_Ge0 zt75?;03QK7LX``aUi(Kc7XZJZ(wZ`U5jxd>)?S8Wr0OSl6a;T1Ixn&sttJb88nFL6 z8^L2#kzl;>-xa*)sZznufVclFhFCqV;!+qt3pfY7pHta_#{zy4@V`{9;BkNn@HkZ< z_<6ve0{*uu5j+O4{{s}U%2i>_7~}nY|5<s#FQ_cRdEosE1b<QG2)=sHnmznS7R743 znkM)q@D9_%Blsm%EO-Loc)$}>x!{)pw*vgKN=s$@3gE7QC#rsev9t#P|3^(0{3>|o z0G_Cd1pgQCc);JOQo)k|`(LL?!(LNy*E4<{u>Z}9;K?dmFnaqp-vz&+as}f(->)I} z|5SnCHzBxx=S{rxRf*uY0Q)y*1d|GD&KPfv)zqef-&R?Ir+~NriAwMkl_U5a!2U(I z7kru-+`kkPtW>e!cfs2~TMK?ql?(Q(WySK3Qi9)CY4WVp2jKmJ-WEJn^%Fb|a6aJa zYO>%D0nY|JLlp_G&XRv@SqZqhDiu5vytf0Ms^VHO{s{0Pz|&Q>V7y~=8t}&|SMV(G zuBIPKl7`Jv1%femG~n5)L~sau`;}i0I7Ee|Gse<70-mF?1b+g#djkGM<p};1@F2jS zs%e7f0)7tgTvaR>+x;5gd8%Bn+!F9B_kV{W?GCE6mW=B{aPOZ@dI#)zs-NJ`0B?oh zpQ*{F_m6<*sUpFc`!wL7Diu5*g8M(am(u2|xD3VxfK&AIQi2z#Y{3fw-vM}$$`y<a zdj#-eRUmi?c>B+ZN$@4AL~ujEuYmUg6_&}k5b(Qz3ssijrGP&Jyj0}~UIus_;ALu> z;N^gK174wu1^YV=7i;|rc!4SxjP3URE21}`t5jMm#;YNCn0`)7+Py~g6TB910^lMw zS+IO6@F!Diz<pGa;C0}AJK%MyRPg73`vLx3#kFSK3-Bnw>s7Yk4S-((yg}s({sQp3 zfIn9SW^n%>=t;ZRs}jK*!TWRY-l)RbFx~{%|249Bf3C6wZw7o6ytk+v!TlNgy>=0B ze>F`oenP5KgQM~y!MCVl!Cyk~M8IFFa=}{xw*|aarL|?e4RCkB+f+Znn0o-=Eo!o0 zto&)f{Z*0RuORqDz+b6SGxt=$+f-aTBljY}+f}yU9T436_kUiu6sug*Tki$#O^cnX zKyZjYrAue(`;k@>Z`V{MCT=V?yvW7wOcmCiy+4xv*Nb;Q$ipA2EWxt?chF|yJzM24 z4$R?SfRsnspQveK>|ZU4T{al=;al)Lh;={U&s4eK`G5xkE>LM57%u=k6!1dTPw*nZ z&j4PmCNs8|teD-wzBMO!THlOo%qE54a$4D+*pBKu*ABIps=;&Z|MBXqw|Zrs`>y_H z?rOHTYBS$`x7l0WSKz+;l~;kK0o9_Z9i?7hV2|Y>)fT#FinmH$<i1<RD>1y%j13=N z>>BP_?4rR-+|}77_JkD|mfC%7J5%*sZnq2UFHw`0+Z_X=Ln*&ql=^A8o#JoDudq|> zv8vk&`{u|=`jN1M`U5{Vl*Zp*UoBc;N7uaPoYys<CaK*k?6x68^pNMOh?Sh;mo#<f zN=|VhMop6Ss<!GYS*NsAHCNdkBTuyT+|TP?^ka`)#j#&)>3xQZ9--b^#j$_7(=#qs zyH;`Rg1c4C)f}t;J?c(bPrAo##*Ec=O30h{c&5>6*J`_6%^4qhk>YErx@+vVflqs@ wJJ;A9>;Kf-GdupAx0WwDcB^S??CV3e?(n2=wQG&tE@Zv_ELo;@Ew>x}AEhAB$N&HU diff --git a/kernel/sysproc.o b/kernel/sysproc.o index dee6c050132785f4eb52aede56a94a0e08ca2146..d758ecbc6a1bdd2df72d3bb2f12ea2b48842b630 100644 GIT binary patch literal 53096 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 literal 46456 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 T1)0iU#w&)VS6!0&^vnMbuj`e* diff --git a/target/kernel b/target/kernel index f0fe64c28abe1efa42965dcea0e79c9e5552eef9..76f58bfa25e4f0dd92d2ed893efa97ae52de8d62 100644 GIT binary patch delta 88841 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%0Ah)59;6%m!3go_~rh};BJq{>0GR#B-} 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 delta 82817 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 diff --git a/target/kernel.asm b/target/kernel.asm index 6c7dd22..b3b4d71 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: a7a13103 ld sp,-1414(sp) # 8020ba80 <_GLOBAL_OFFSET_TABLE_+0x50> + 8020000a: cea13103 ld sp,-790(sp) # 8020bcf0 <_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: be4080e7 jalr -1052(ra) # 80206c7a <consputc> + 8020009a: f34080e7 jalr -204(ra) # 80206fca <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: bae080e7 jalr -1106(ra) # 80206c7a <consputc> + 802000d0: efe080e7 jalr -258(ra) # 80206fca <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: a5a080e7 jalr -1446(ra) # 80206c7a <consputc> + 80200224: daa080e7 jalr -598(ra) # 80206fca <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: 9c8080e7 jalr -1592(ra) # 80206c7a <consputc> + 802002b6: d18080e7 jalr -744(ra) # 80206fca <consputc> consputc('x'); 802002ba: 07800513 li a0,120 802002be: 00007097 auipc ra,0x7 - 802002c2: 9bc080e7 jalr -1604(ra) # 80206c7a <consputc> + 802002c2: d0c080e7 jalr -756(ra) # 80206fca <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: 9a8080e7 jalr -1624(ra) # 80206c7a <consputc> + 802002d6: cf8080e7 jalr -776(ra) # 80206fca <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: 982080e7 jalr -1662(ra) # 80206c7a <consputc> + 802002fc: cd2080e7 jalr -814(ra) # 80206fca <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: 960080e7 jalr -1696(ra) # 80206c7a <consputc> + 8020031e: cb0080e7 jalr -848(ra) # 80206fca <consputc> break; 80200322: b719 j 80200228 <printf+0x9a> consputc('%'); 80200324: 8556 mv a0,s5 80200326: 00007097 auipc ra,0x7 - 8020032a: 954080e7 jalr -1708(ra) # 80206c7a <consputc> + 8020032a: ca4080e7 jalr -860(ra) # 80206fca <consputc> consputc(c); 8020032e: 8526 mv a0,s1 80200330: 00007097 auipc ra,0x7 - 80200334: 94a080e7 jalr -1718(ra) # 80206c7a <consputc> + 80200334: c9a080e7 jalr -870(ra) # 80206fca <consputc> break; 80200338: bdc5 j 80200228 <printf+0x9a> if(locking) @@ -527,8 +527,8 @@ kfree(void *pa) 8020044c: 03451793 slli a5,a0,0x34 80200450: e3ad bnez a5,802004b2 <kfree+0x72> 80200452: 84aa mv s1,a0 - 80200454: 0000b797 auipc a5,0xb - 80200458: 6047b783 ld a5,1540(a5) # 8020ba58 <_GLOBAL_OFFSET_TABLE_+0x28> + 80200454: 0000c797 auipc a5,0xc + 80200458: 8747b783 ld a5,-1932(a5) # 8020bcc8 <_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: 51853503 ld a0,1304(a0) # 8020ba58 <_GLOBAL_OFFSET_TABLE_+0x28> + 80200544: 78853503 ld a0,1928(a0) # 8020bcc8 <_GLOBAL_OFFSET_TABLE_+0x28> 80200548: 00000097 auipc ra,0x0 8020054c: f7a080e7 jalr -134(ra) # 802004c2 <freerange> } @@ -1443,10 +1443,10 @@ main(unsigned long hartid, unsigned long dtb_pa) 80200a0a: 0de080e7 jalr 222(ra) # 80200ae4 <kvminithart> trapinithart(); 80200a0e: 00002097 auipc ra,0x2 - 80200a12: cbc080e7 jalr -836(ra) # 802026ca <trapinithart> + 80200a12: f10080e7 jalr -240(ra) # 8020291e <trapinithart> plicinithart(); // ask PLIC for device interrupts 80200a16: 00006097 auipc ra,0x6 - 80200a1a: 022080e7 jalr 34(ra) # 80206a38 <plicinithart> + 80200a1a: 372080e7 jalr 882(ra) # 80206d88 <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: 414080e7 jalr 1044(ra) # 80206e4a <consoleinit> + 80200a3a: 764080e7 jalr 1892(ra) # 8020719a <consoleinit> printfinit(); // init a lock for printf 80200a3e: 00000097 auipc ra,0x0 80200a42: 930080e7 jalr -1744(ra) # 8020036e <printfinit> @@ -1475,29 +1475,29 @@ main(unsigned long hartid, unsigned long dtb_pa) 80200a5e: 00000097 auipc ra,0x0 80200a62: 086080e7 jalr 134(ra) # 80200ae4 <kvminithart> timerinit(); // init a lock for timer - 80200a66: 00004097 auipc ra,0x4 - 80200a6a: 588080e7 jalr 1416(ra) # 80204fee <timerinit> + 80200a66: 00005097 auipc ra,0x5 + 80200a6a: 8d8080e7 jalr -1832(ra) # 8020533e <timerinit> trapinithart(); // install kernel trap vector, including interrupt handler 80200a6e: 00002097 auipc ra,0x2 - 80200a72: c5c080e7 jalr -932(ra) # 802026ca <trapinithart> + 80200a72: eb0080e7 jalr -336(ra) # 8020291e <trapinithart> procinit(); 80200a76: 00001097 auipc ra,0x1 80200a7a: f24080e7 jalr -220(ra) # 8020199a <procinit> plicinit(); 80200a7e: 00006097 auipc ra,0x6 - 80200a82: fa2080e7 jalr -94(ra) # 80206a20 <plicinit> + 80200a82: 2f2080e7 jalr 754(ra) # 80206d70 <plicinit> plicinithart(); 80200a86: 00006097 auipc ra,0x6 - 80200a8a: fb2080e7 jalr -78(ra) # 80206a38 <plicinithart> + 80200a8a: 302080e7 jalr 770(ra) # 80206d88 <plicinithart> disk_init(); - 80200a8e: 00004097 auipc ra,0x4 - 80200a92: 5fc080e7 jalr 1532(ra) # 8020508a <disk_init> + 80200a8e: 00005097 auipc ra,0x5 + 80200a92: 94c080e7 jalr -1716(ra) # 802053da <disk_init> binit(); // buffer cache 80200a96: 00003097 auipc ra,0x3 - 80200a9a: 88c080e7 jalr -1908(ra) # 80203322 <binit> + 80200a9a: ba8080e7 jalr -1112(ra) # 8020363e <binit> fileinit(); // file table 80200a9e: 00003097 auipc ra,0x3 - 80200aa2: c90080e7 jalr -880(ra) # 8020372e <fileinit> + 80200aa2: fac080e7 jalr -84(ra) # 80203a4a <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: c8c4b483 ld s1,-884(s1) # 8020ba50 <_GLOBAL_OFFSET_TABLE_+0x20> + 80200dc8: efc4b483 ld s1,-260(s1) # 8020bcc0 <_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: c385b583 ld a1,-968(a1) # 8020ba38 <_GLOBAL_OFFSET_TABLE_+0x8> + 80200e04: ea85b583 ld a1,-344(a1) # 8020bca8 <_GLOBAL_OFFSET_TABLE_+0x8> 80200e08: 04000537 lui a0,0x4000 80200e0c: 157d addi a0,a0,-1 # 3ffffff <_entry-0x7c200001> 80200e0e: 0532 slli a0,a0,0xc @@ -3777,7 +3777,7 @@ myproc(void) { 80201a96: eb91 bnez a5,80201aaa <forkret+0x36> usertrapret(); 80201a98: 00001097 auipc ra,0x1 - 80201a9c: c6e080e7 jalr -914(ra) # 80202706 <usertrapret> + 80201a9c: ec2080e7 jalr -318(ra) # 8020295a <usertrapret> } 80201aa0: 60e2 ld ra,24(sp) 80201aa2: 6442 ld s0,16(sp) @@ -3789,7 +3789,7 @@ myproc(void) { 80201aae: 5407ab23 sw zero,1366(a5) # 8020a000 <first.1> fat32_init(); 80201ab2: 00004097 auipc ra,0x4 - 80201ab6: cc2080e7 jalr -830(ra) # 80205774 <fat32_init> + 80201ab6: 012080e7 jalr 18(ra) # 80205ac4 <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: f1a080e7 jalr -230(ra) # 802069e6 <ename> + 80201ad0: 26a080e7 jalr 618(ra) # 80206d36 <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: efc6b683 ld a3,-260(a3) # 8020ba38 <_GLOBAL_OFFSET_TABLE_+0x8> + 80201b40: 16c6b683 ld a3,364(a3) # 8020bca8 <_GLOBAL_OFFSET_TABLE_+0x8> 80201b44: 6605 lui a2,0x1 80201b46: 040005b7 lui a1,0x4000 80201b4a: 15fd addi a1,a1,-1 # 3ffffff <_entry-0x7c200001> @@ -4298,13 +4298,13 @@ release(&p->lock); 80201efc: d97d beqz a0,80201ef2 <fork+0xb0> np->ofile[i] = filedup(p->ofile[i]); 80201efe: 00002097 auipc ra,0x2 - 80201f02: 8f2080e7 jalr -1806(ra) # 802037f0 <filedup> + 80201f02: c0e080e7 jalr -1010(ra) # 80203b0c <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: 0d0080e7 jalr 208(ra) # 80205fe0 <edup> + 80201f14: 420080e7 jalr 1056(ra) # 80206330 <edup> 80201f18: 14aa3c23 sd a0,344(s4) safestrcpy(np->name, p->name, sizeof(p->name)); 80201f1c: 4641 li a2,16 @@ -4421,7 +4421,7 @@ release(&p->lock); 80202006: 1a7e slli s4,s4,0x3f w_satp(MAKE_SATP(kernel_pagetable)); 80202008: 0000ab97 auipc s7,0xa - 8020200c: a70bbb83 ld s7,-1424(s7) # 8020ba78 <_GLOBAL_OFFSET_TABLE_+0x48> + 8020200c: ce0bbb83 ld s7,-800(s7) # 8020bce8 <_GLOBAL_OFFSET_TABLE_+0x48> 80202010: a8a5 j 80202088 <scheduler+0xc8> release(&p->lock); 80202012: 8526 mv a0,s1 @@ -4453,8 +4453,8 @@ release(&p->lock); swtch(&c->context, &p->context); 8020204c: 06848593 addi a1,s1,104 80202050: 855a mv a0,s6 - 80202052: 00000097 auipc ra,0x0 - 80202056: 60e080e7 jalr 1550(ra) # 80202660 <swtch> + 80202052: 00001097 auipc ra,0x1 + 80202056: 862080e7 jalr -1950(ra) # 802028b4 <swtch> w_satp(MAKE_SATP(kernel_pagetable)); 8020205a: 000bb783 ld a5,0(s7) 8020205e: 83b1 srli a5,a5,0xc @@ -4552,7 +4552,7 @@ release(&p->lock); 80202118: 95be add a1,a1,a5 8020211a: 06848513 addi a0,s1,104 8020211e: 00000097 auipc ra,0x0 - 80202122: 542080e7 jalr 1346(ra) # 80202660 <swtch> + 80202122: 796080e7 jalr 1942(ra) # 802028b4 <swtch> 80202126: 8792 mv a5,tp mycpu()->intena = intena; 80202128: 2781 sext.w a5,a5 @@ -4615,8 +4615,8 @@ release(&p->lock); 802021b8: ffffe097 auipc ra,0xffffe 802021bc: f8c080e7 jalr -116(ra) # 80200144 <panic> fileclose(f); - 802021c0: 00001097 auipc ra,0x1 - 802021c4: 682080e7 jalr 1666(ra) # 80203842 <fileclose> + 802021c0: 00002097 auipc ra,0x2 + 802021c4: 99e080e7 jalr -1634(ra) # 80203b5e <fileclose> p->ofile[fd] = 0; 802021c8: 0004b023 sd zero,0(s1) for(int fd = 0; fd < NOFILE; fd++){ @@ -4629,7 +4629,7 @@ release(&p->lock); eput(p->cwd); 802021d8: 1589b503 ld a0,344(s3) 802021dc: 00004097 auipc ra,0x4 - 802021e0: 0e6080e7 jalr 230(ra) # 802062c2 <eput> + 802021e0: 436080e7 jalr 1078(ra) # 80206612 <eput> p->cwd = 0; 802021e4: 1409bc23 sd zero,344(s3) acquire(&initproc->lock); @@ -5242,9750 +5242,10260 @@ procnum(void) 8020265c: 0141 addi sp,sp,16 8020265e: 8082 ret -0000000080202660 <swtch>: - 80202660: 00153023 sd ra,0(a0) - 80202664: 00253423 sd sp,8(a0) - 80202668: e900 sd s0,16(a0) - 8020266a: ed04 sd s1,24(a0) - 8020266c: 03253023 sd s2,32(a0) - 80202670: 03353423 sd s3,40(a0) - 80202674: 03453823 sd s4,48(a0) - 80202678: 03553c23 sd s5,56(a0) - 8020267c: 05653023 sd s6,64(a0) - 80202680: 05753423 sd s7,72(a0) - 80202684: 05853823 sd s8,80(a0) - 80202688: 05953c23 sd s9,88(a0) - 8020268c: 07a53023 sd s10,96(a0) - 80202690: 07b53423 sd s11,104(a0) - 80202694: 0005b083 ld ra,0(a1) - 80202698: 0085b103 ld sp,8(a1) - 8020269c: 6980 ld s0,16(a1) - 8020269e: 6d84 ld s1,24(a1) - 802026a0: 0205b903 ld s2,32(a1) - 802026a4: 0285b983 ld s3,40(a1) - 802026a8: 0305ba03 ld s4,48(a1) - 802026ac: 0385ba83 ld s5,56(a1) - 802026b0: 0405bb03 ld s6,64(a1) - 802026b4: 0485bb83 ld s7,72(a1) - 802026b8: 0505bc03 ld s8,80(a1) - 802026bc: 0585bc83 ld s9,88(a1) - 802026c0: 0605bd03 ld s10,96(a1) - 802026c4: 0685bd83 ld s11,104(a1) - 802026c8: 8082 ret - -00000000802026ca <trapinithart>: +0000000080202660 <wait4>: +static struct proc* find_zombie_child(struct proc *p, int *pid, int *status, uint64 addr); +static void copy_open_files(struct proc *np, struct proc *p); + +int +wait4(int pid, uint64 addr, int options) +{ + 80202660: 711d addi sp,sp,-96 + 80202662: ec86 sd ra,88(sp) + 80202664: e8a2 sd s0,80(sp) + 80202666: e4a6 sd s1,72(sp) + 80202668: e0ca sd s2,64(sp) + 8020266a: fc4e sd s3,56(sp) + 8020266c: f852 sd s4,48(sp) + 8020266e: f456 sd s5,40(sp) + 80202670: f05a sd s6,32(sp) + 80202672: ec5e sd s7,24(sp) + 80202674: 1080 addi s0,sp,96 + 80202676: 8aae mv s5,a1 + if (pid == -1) { + 80202678: 57fd li a5,-1 + 8020267a: 02f50363 beq a0,a5,802026a0 <wait4+0x40> + return wait(addr); + } + + struct proc *p = myproc(); + 8020267e: fffff097 auipc ra,0xfffff + 80202682: 3be080e7 jalr 958(ra) # 80201a3c <myproc> + 80202686: 892a mv s2,a0 + struct proc *np; + int havekids, status; + + // æŒæœ‰ p->lock 以é¿å…å进程退出时的唤醒丢失 + acquire(&p->lock); + 80202688: ffffe097 auipc ra,0xffffe + 8020268c: 03e080e7 jalr 62(ra) # 802006c6 <acquire> +} + +// è¾…åŠ©å‡½æ•°ï¼šæ£€æŸ¥è¿›ç¨‹æ˜¯å¦æœ‰å进程 +static int check_for_children(struct proc *p) { + int havekids = 0; + for (struct proc *np = proc; np < &proc[NPROC]; np++) { + 80202690: 00016997 auipc s3,0x16 + 80202694: 46098993 addi s3,s3,1120 # 80218af0 <bcache> +// 辅助函数:查找并处ç†åƒµå°¸å进程 +static struct proc* find_zombie_child(struct proc *p, int *pid, int *status, uint64 addr) { + for (struct proc *np = proc; np < &proc[NPROC]; np++) { + if (np->parent == p) { + acquire(&np->lock); + if (np->state == ZOMBIE) { + 80202698: 4a11 li s4,4 + *pid = np->pid; + *status = np->xstate << 8; + if (addr != 0 && copyout2(addr, (char *)status, sizeof(*status)) < 0) { + 8020269a: fac40b13 addi s6,s0,-84 + 8020269e: a0ad j 80202708 <wait4+0xa8> + return wait(addr); + 802026a0: 852e mv a0,a1 + 802026a2: 00000097 auipc ra,0x0 + 802026a6: c98080e7 jalr -872(ra) # 8020233a <wait> + 802026aa: 8baa mv s7,a0 + 802026ac: a8bd j 8020272a <wait4+0xca> + *pid = np->pid; + 802026ae: 0384ab83 lw s7,56(s1) + *status = np->xstate << 8; + 802026b2: 58dc lw a5,52(s1) + 802026b4: 0087979b slliw a5,a5,0x8 + 802026b8: faf42623 sw a5,-84(s0) + if (addr != 0 && copyout2(addr, (char *)status, sizeof(*status)) < 0) { + 802026bc: 020a9263 bnez s5,802026e0 <wait4+0x80> + freeproc(np); + 802026c0: 8526 mv a0,s1 + 802026c2: fffff097 auipc ra,0xfffff + 802026c6: 54c080e7 jalr 1356(ra) # 80201c0e <freeproc> + release(&np->lock); + 802026ca: 8526 mv a0,s1 + 802026cc: ffffe097 auipc ra,0xffffe + 802026d0: 04e080e7 jalr 78(ra) # 8020071a <release> + release(&p->lock); + 802026d4: 854a mv a0,s2 + 802026d6: ffffe097 auipc ra,0xffffe + 802026da: 044080e7 jalr 68(ra) # 8020071a <release> + return pid; + 802026de: a0b1 j 8020272a <wait4+0xca> + if (addr != 0 && copyout2(addr, (char *)status, sizeof(*status)) < 0) { + 802026e0: 8652 mv a2,s4 + 802026e2: 85da mv a1,s6 + 802026e4: 8556 mv a0,s5 + 802026e6: fffff097 auipc ra,0xfffff + 802026ea: c8c080e7 jalr -884(ra) # 80201372 <copyout2> + 802026ee: fc0559e3 bgez a0,802026c0 <wait4+0x60> + release(&np->lock); + 802026f2: 8526 mv a0,s1 + 802026f4: ffffe097 auipc ra,0xffffe + 802026f8: 026080e7 jalr 38(ra) # 8020071a <release> + sleep(p, &p->lock); //DOC: wait-sleep + 802026fc: 85ca mv a1,s2 + 802026fe: 854a mv a0,s2 + 80202700: 00000097 auipc ra,0x0 + 80202704: bbc080e7 jalr -1092(ra) # 802022bc <sleep> + for (struct proc *np = proc; np < &proc[NPROC]; np++) { + 80202708: 00012797 auipc a5,0x12 + 8020270c: a7878793 addi a5,a5,-1416 # 80214180 <proc> + if (np->parent == p) { + 80202710: 7398 ld a4,32(a5) + 80202712: 04e90d63 beq s2,a4,8020276c <wait4+0x10c> + for (struct proc *np = proc; np < &proc[NPROC]; np++) { + 80202716: 17878793 addi a5,a5,376 + 8020271a: ff379be3 bne a5,s3,80202710 <wait4+0xb0> + release(&p->lock); + 8020271e: 854a mv a0,s2 + 80202720: ffffe097 auipc ra,0xffffe + 80202724: ffa080e7 jalr -6(ra) # 8020071a <release> + return -1; + 80202728: 5bfd li s7,-1 +} + 8020272a: 855e mv a0,s7 + 8020272c: 60e6 ld ra,88(sp) + 8020272e: 6446 ld s0,80(sp) + 80202730: 64a6 ld s1,72(sp) + 80202732: 6906 ld s2,64(sp) + 80202734: 79e2 ld s3,56(sp) + 80202736: 7a42 ld s4,48(sp) + 80202738: 7aa2 ld s5,40(sp) + 8020273a: 7b02 ld s6,32(sp) + 8020273c: 6be2 ld s7,24(sp) + 8020273e: 6125 addi sp,sp,96 + 80202740: 8082 ret + for (struct proc *np = proc; np < &proc[NPROC]; np++) { + 80202742: 17848493 addi s1,s1,376 + 80202746: fb348be3 beq s1,s3,802026fc <wait4+0x9c> + if (np->parent == p) { + 8020274a: 709c ld a5,32(s1) + 8020274c: fef91be3 bne s2,a5,80202742 <wait4+0xe2> + acquire(&np->lock); + 80202750: 8526 mv a0,s1 + 80202752: ffffe097 auipc ra,0xffffe + 80202756: f74080e7 jalr -140(ra) # 802006c6 <acquire> + if (np->state == ZOMBIE) { + 8020275a: 4c9c lw a5,24(s1) + 8020275c: f54789e3 beq a5,s4,802026ae <wait4+0x4e> + return NULL; + } + return np; + } + release(&np->lock); + 80202760: 8526 mv a0,s1 + 80202762: ffffe097 auipc ra,0xffffe + 80202766: fb8080e7 jalr -72(ra) # 8020071a <release> + 8020276a: bfe1 j 80202742 <wait4+0xe2> + if (!havekids || p->killed) { + 8020276c: 03092783 lw a5,48(s2) + 80202770: f7dd bnez a5,8020271e <wait4+0xbe> + for (struct proc *np = proc; np < &proc[NPROC]; np++) { + 80202772: 00012497 auipc s1,0x12 + 80202776: a0e48493 addi s1,s1,-1522 # 80214180 <proc> + 8020277a: bfc1 j 8020274a <wait4+0xea> + +000000008020277c <clone>: + return NULL; +} + +int +clone(int stack) +{ + 8020277c: 7139 addi sp,sp,-64 + 8020277e: fc06 sd ra,56(sp) + 80202780: f822 sd s0,48(sp) + 80202782: f426 sd s1,40(sp) + 80202784: f04a sd s2,32(sp) + 80202786: ec4e sd s3,24(sp) + 80202788: e852 sd s4,16(sp) + 8020278a: e456 sd s5,8(sp) + 8020278c: 0080 addi s0,sp,64 + 8020278e: 84aa mv s1,a0 + int pid; + struct proc *np; + struct proc *p = myproc(); + 80202790: fffff097 auipc ra,0xfffff + 80202794: 2ac080e7 jalr 684(ra) # 80201a3c <myproc> + + if (stack < 0 || stack > p->sz) + 80202798: 1004c863 bltz s1,802028a8 <clone+0x12c> + 8020279c: 8aaa mv s5,a0 + 8020279e: 653c ld a5,72(a0) + 802027a0: 1097e663 bltu a5,s1,802028ac <clone+0x130> + return -1; + + // åˆ†é…æ–°è¿›ç¨‹ + if ((np = allocproc()) == NULL) { + 802027a4: fffff097 auipc ra,0xfffff + 802027a8: 4d4080e7 jalr 1236(ra) # 80201c78 <allocproc> + 802027ac: 89aa mv s3,a0 + 802027ae: 10050163 beqz a0,802028b0 <clone+0x134> + return -1; + } + + // 从父进程å¤åˆ¶ç”¨æˆ·å†…å˜åˆ°å进程 + if (uvmcopy(p->pagetable, np->pagetable, np->kpagetable, p->sz) < 0) { + 802027b2: 048ab683 ld a3,72(s5) + 802027b6: 6d30 ld a2,88(a0) + 802027b8: 692c ld a1,80(a0) + 802027ba: 050ab503 ld a0,80(s5) + 802027be: fffff097 auipc ra,0xfffff + 802027c2: 9e8080e7 jalr -1560(ra) # 802011a6 <uvmcopy> + 802027c6: 06054363 bltz a0,8020282c <clone+0xb0> + freeproc(np); + release(&np->lock); + return -1; + } + np->sz = p->sz; + 802027ca: 048ab783 ld a5,72(s5) + 802027ce: 04f9b423 sd a5,72(s3) + + // 设置父进程 + np->parent = p; + 802027d2: 0359b023 sd s5,32(s3) + + // 从父进程å¤åˆ¶è·Ÿè¸ªæŽ©ç + np->tmask = p->tmask; + 802027d6: 170aa783 lw a5,368(s5) + 802027da: 16f9a823 sw a5,368(s3) + + // 从父进程å¤åˆ¶ä¿å˜çš„用户寄å˜å™¨ + *(np->trapframe) = *(p->trapframe); + 802027de: 060ab683 ld a3,96(s5) + 802027e2: 87b6 mv a5,a3 + 802027e4: 0609b703 ld a4,96(s3) + 802027e8: 12068693 addi a3,a3,288 + 802027ec: 0007b803 ld a6,0(a5) + 802027f0: 6788 ld a0,8(a5) + 802027f2: 6b8c ld a1,16(a5) + 802027f4: 6f90 ld a2,24(a5) + 802027f6: 01073023 sd a6,0(a4) + 802027fa: e708 sd a0,8(a4) + 802027fc: eb0c sd a1,16(a4) + 802027fe: ef10 sd a2,24(a4) + 80202800: 02078793 addi a5,a5,32 + 80202804: 02070713 addi a4,a4,32 + 80202808: fed792e3 bne a5,a3,802027ec <clone+0x70> + + // 使 fork 在å进程ä¸è¿”回 0 + np->trapframe->a0 = 0; + 8020280c: 0609b783 ld a5,96(s3) + 80202810: 0607b823 sd zero,112(a5) + + // 设置åè¿›ç¨‹çš„å †æ ˆæŒ‡é’ˆ + if (stack > 0) np->trapframe->sp = stack; + 80202814: 00905563 blez s1,8020281e <clone+0xa2> + 80202818: 0609b783 ld a5,96(s3) + 8020281c: fb84 sd s1,48(a5) + return pid; +} + +// 辅助函数:从父进程å¤åˆ¶æ‰“开文件æè¿°ç¬¦åˆ°å进程 +static void copy_open_files(struct proc *np, struct proc *p) { + for (int i = 0; i < NOFILE; i++) { + 8020281e: 0d8a8493 addi s1,s5,216 + 80202822: 0d898913 addi s2,s3,216 + 80202826: 158a8a13 addi s4,s5,344 + 8020282a: a03d j 80202858 <clone+0xdc> + freeproc(np); + 8020282c: 854e mv a0,s3 + 8020282e: fffff097 auipc ra,0xfffff + 80202832: 3e0080e7 jalr 992(ra) # 80201c0e <freeproc> + release(&np->lock); + 80202836: 854e mv a0,s3 + 80202838: ffffe097 auipc ra,0xffffe + 8020283c: ee2080e7 jalr -286(ra) # 8020071a <release> + return -1; + 80202840: 54fd li s1,-1 + 80202842: a889 j 80202894 <clone+0x118> + if (p->ofile[i]) { + np->ofile[i] = filedup(p->ofile[i]); + 80202844: 00001097 auipc ra,0x1 + 80202848: 2c8080e7 jalr 712(ra) # 80203b0c <filedup> + 8020284c: 00a93023 sd a0,0(s2) + for (int i = 0; i < NOFILE; i++) { + 80202850: 04a1 addi s1,s1,8 + 80202852: 0921 addi s2,s2,8 + 80202854: 01448563 beq s1,s4,8020285e <clone+0xe2> + if (p->ofile[i]) { + 80202858: 6088 ld a0,0(s1) + 8020285a: f56d bnez a0,80202844 <clone+0xc8> + 8020285c: bfd5 j 80202850 <clone+0xd4> + np->cwd = edup(p->cwd); + 8020285e: 158ab503 ld a0,344(s5) + 80202862: 00004097 auipc ra,0x4 + 80202866: ace080e7 jalr -1330(ra) # 80206330 <edup> + 8020286a: 14a9bc23 sd a0,344(s3) + safestrcpy(np->name, p->name, sizeof(p->name)); + 8020286e: 4641 li a2,16 + 80202870: 160a8593 addi a1,s5,352 + 80202874: 16098513 addi a0,s3,352 + 80202878: ffffe097 auipc ra,0xffffe + 8020287c: 03c080e7 jalr 60(ra) # 802008b4 <safestrcpy> + pid = np->pid; + 80202880: 0389a483 lw s1,56(s3) + np->state = RUNNABLE; + 80202884: 4789 li a5,2 + 80202886: 00f9ac23 sw a5,24(s3) + release(&np->lock); + 8020288a: 854e mv a0,s3 + 8020288c: ffffe097 auipc ra,0xffffe + 80202890: e8e080e7 jalr -370(ra) # 8020071a <release> +} + 80202894: 8526 mv a0,s1 + 80202896: 70e2 ld ra,56(sp) + 80202898: 7442 ld s0,48(sp) + 8020289a: 74a2 ld s1,40(sp) + 8020289c: 7902 ld s2,32(sp) + 8020289e: 69e2 ld s3,24(sp) + 802028a0: 6a42 ld s4,16(sp) + 802028a2: 6aa2 ld s5,8(sp) + 802028a4: 6121 addi sp,sp,64 + 802028a6: 8082 ret + return -1; + 802028a8: 54fd li s1,-1 + 802028aa: b7ed j 80202894 <clone+0x118> + 802028ac: 54fd li s1,-1 + 802028ae: b7dd j 80202894 <clone+0x118> + return -1; + 802028b0: 54fd li s1,-1 + 802028b2: b7cd j 80202894 <clone+0x118> + +00000000802028b4 <swtch>: + 802028b4: 00153023 sd ra,0(a0) + 802028b8: 00253423 sd sp,8(a0) + 802028bc: e900 sd s0,16(a0) + 802028be: ed04 sd s1,24(a0) + 802028c0: 03253023 sd s2,32(a0) + 802028c4: 03353423 sd s3,40(a0) + 802028c8: 03453823 sd s4,48(a0) + 802028cc: 03553c23 sd s5,56(a0) + 802028d0: 05653023 sd s6,64(a0) + 802028d4: 05753423 sd s7,72(a0) + 802028d8: 05853823 sd s8,80(a0) + 802028dc: 05953c23 sd s9,88(a0) + 802028e0: 07a53023 sd s10,96(a0) + 802028e4: 07b53423 sd s11,104(a0) + 802028e8: 0005b083 ld ra,0(a1) + 802028ec: 0085b103 ld sp,8(a1) + 802028f0: 6980 ld s0,16(a1) + 802028f2: 6d84 ld s1,24(a1) + 802028f4: 0205b903 ld s2,32(a1) + 802028f8: 0285b983 ld s3,40(a1) + 802028fc: 0305ba03 ld s4,48(a1) + 80202900: 0385ba83 ld s5,56(a1) + 80202904: 0405bb03 ld s6,64(a1) + 80202908: 0485bb83 ld s7,72(a1) + 8020290c: 0505bc03 ld s8,80(a1) + 80202910: 0585bc83 ld s9,88(a1) + 80202914: 0605bd03 ld s10,96(a1) + 80202918: 0685bd83 ld s11,104(a1) + 8020291c: 8082 ret + +000000008020291e <trapinithart>: // } // set up to take exceptions and traps while in the kernel. void trapinithart(void) { - 802026ca: 1141 addi sp,sp,-16 - 802026cc: e406 sd ra,8(sp) - 802026ce: e022 sd s0,0(sp) - 802026d0: 0800 addi s0,sp,16 + 8020291e: 1141 addi sp,sp,-16 + 80202920: e406 sd ra,8(sp) + 80202922: e022 sd s0,0(sp) + 80202924: 0800 addi s0,sp,16 asm volatile("csrw stvec, %0" : : "r" (x)); - 802026d2: 00009797 auipc a5,0x9 - 802026d6: 3767b783 ld a5,886(a5) # 8020ba48 <_GLOBAL_OFFSET_TABLE_+0x18> - 802026da: 10579073 csrw stvec,a5 + 80202926: 00009797 auipc a5,0x9 + 8020292a: 3927b783 ld a5,914(a5) # 8020bcb8 <_GLOBAL_OFFSET_TABLE_+0x18> + 8020292e: 10579073 csrw stvec,a5 asm volatile("csrr %0, sstatus" : "=r" (x) ); - 802026de: 100027f3 csrr a5,sstatus + 80202932: 100027f3 csrr a5,sstatus w_stvec((uint64)kernelvec); w_sstatus(r_sstatus() | SSTATUS_SIE); - 802026e2: 0027e793 ori a5,a5,2 + 80202936: 0027e793 ori a5,a5,2 asm volatile("csrw sstatus, %0" : : "r" (x)); - 802026e6: 10079073 csrw sstatus,a5 + 8020293a: 10079073 csrw sstatus,a5 asm volatile("csrr %0, sie" : "=r" (x) ); - 802026ea: 104027f3 csrr a5,sie + 8020293e: 104027f3 csrr a5,sie // enable supervisor-mode timer interrupts. w_sie(r_sie() | SIE_SEIE | SIE_SSIE | SIE_STIE); - 802026ee: 2227e793 ori a5,a5,546 + 80202942: 2227e793 ori a5,a5,546 asm volatile("csrw sie, %0" : : "r" (x)); - 802026f2: 10479073 csrw sie,a5 + 80202946: 10479073 csrw sie,a5 set_next_timeout(); - 802026f6: 00003097 auipc ra,0x3 - 802026fa: 920080e7 jalr -1760(ra) # 80205016 <set_next_timeout> + 8020294a: 00003097 auipc ra,0x3 + 8020294e: a1c080e7 jalr -1508(ra) # 80205366 <set_next_timeout> #ifdef DEBUG printf("trapinithart\n"); #endif } - 802026fe: 60a2 ld ra,8(sp) - 80202700: 6402 ld s0,0(sp) - 80202702: 0141 addi sp,sp,16 - 80202704: 8082 ret + 80202952: 60a2 ld ra,8(sp) + 80202954: 6402 ld s0,0(sp) + 80202956: 0141 addi sp,sp,16 + 80202958: 8082 ret -0000000080202706 <usertrapret>: +000000008020295a <usertrapret>: // // return to user space // void usertrapret(void) { - 80202706: 1141 addi sp,sp,-16 - 80202708: e406 sd ra,8(sp) - 8020270a: e022 sd s0,0(sp) - 8020270c: 0800 addi s0,sp,16 + 8020295a: 1141 addi sp,sp,-16 + 8020295c: e406 sd ra,8(sp) + 8020295e: e022 sd s0,0(sp) + 80202960: 0800 addi s0,sp,16 struct proc *p = myproc(); - 8020270e: fffff097 auipc ra,0xfffff - 80202712: 32e080e7 jalr 814(ra) # 80201a3c <myproc> + 80202962: fffff097 auipc ra,0xfffff + 80202966: 0da080e7 jalr 218(ra) # 80201a3c <myproc> asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80202716: 100027f3 csrr a5,sstatus + 8020296a: 100027f3 csrr a5,sstatus w_sstatus(r_sstatus() & ~SSTATUS_SIE); - 8020271a: 9bf5 andi a5,a5,-3 + 8020296e: 9bf5 andi a5,a5,-3 asm volatile("csrw sstatus, %0" : : "r" (x)); - 8020271c: 10079073 csrw sstatus,a5 + 80202970: 10079073 csrw sstatus,a5 // kerneltrap() to usertrap(), so turn off interrupts until // we're back in user space, where usertrap() is correct. intr_off(); // send syscalls, interrupts, and exceptions to trampoline.S w_stvec(TRAMPOLINE + (uservec - trampoline)); - 80202720: 00009697 auipc a3,0x9 - 80202724: 3186b683 ld a3,792(a3) # 8020ba38 <_GLOBAL_OFFSET_TABLE_+0x8> - 80202728: 00009717 auipc a4,0x9 - 8020272c: 34073703 ld a4,832(a4) # 8020ba68 <_GLOBAL_OFFSET_TABLE_+0x38> - 80202730: 8f15 sub a4,a4,a3 - 80202732: 040007b7 lui a5,0x4000 - 80202736: 17fd addi a5,a5,-1 # 3ffffff <_entry-0x7c200001> - 80202738: 07b2 slli a5,a5,0xc - 8020273a: 973e add a4,a4,a5 + 80202974: 00009697 auipc a3,0x9 + 80202978: 3346b683 ld a3,820(a3) # 8020bca8 <_GLOBAL_OFFSET_TABLE_+0x8> + 8020297c: 00009717 auipc a4,0x9 + 80202980: 35c73703 ld a4,860(a4) # 8020bcd8 <_GLOBAL_OFFSET_TABLE_+0x38> + 80202984: 8f15 sub a4,a4,a3 + 80202986: 040007b7 lui a5,0x4000 + 8020298a: 17fd addi a5,a5,-1 # 3ffffff <_entry-0x7c200001> + 8020298c: 07b2 slli a5,a5,0xc + 8020298e: 973e add a4,a4,a5 asm volatile("csrw stvec, %0" : : "r" (x)); - 8020273c: 10571073 csrw stvec,a4 + 80202990: 10571073 csrw stvec,a4 // set up trapframe values that uservec will need when // the process next re-enters the kernel. p->trapframe->kernel_satp = r_satp(); // kernel page table - 80202740: 7138 ld a4,96(a0) + 80202994: 7138 ld a4,96(a0) asm volatile("csrr %0, satp" : "=r" (x) ); - 80202742: 18002673 csrr a2,satp - 80202746: e310 sd a2,0(a4) + 80202996: 18002673 csrr a2,satp + 8020299a: e310 sd a2,0(a4) p->trapframe->kernel_sp = p->kstack + PGSIZE; // process's kernel stack - 80202748: 7130 ld a2,96(a0) - 8020274a: 6138 ld a4,64(a0) - 8020274c: 6585 lui a1,0x1 - 8020274e: 972e add a4,a4,a1 - 80202750: e618 sd a4,8(a2) + 8020299c: 7130 ld a2,96(a0) + 8020299e: 6138 ld a4,64(a0) + 802029a0: 6585 lui a1,0x1 + 802029a2: 972e add a4,a4,a1 + 802029a4: e618 sd a4,8(a2) p->trapframe->kernel_trap = (uint64)usertrap; - 80202752: 7138 ld a4,96(a0) - 80202754: 00000617 auipc a2,0x0 - 80202758: 0f460613 addi a2,a2,244 # 80202848 <usertrap> - 8020275c: eb10 sd a2,16(a4) + 802029a6: 7138 ld a4,96(a0) + 802029a8: 00000617 auipc a2,0x0 + 802029ac: 0f460613 addi a2,a2,244 # 80202a9c <usertrap> + 802029b0: eb10 sd a2,16(a4) p->trapframe->kernel_hartid = r_tp(); // hartid for cpuid() - 8020275e: 7138 ld a4,96(a0) + 802029b2: 7138 ld a4,96(a0) asm volatile("mv %0, tp" : "=r" (x) ); - 80202760: 8612 mv a2,tp - 80202762: f310 sd a2,32(a4) + 802029b4: 8612 mv a2,tp + 802029b6: f310 sd a2,32(a4) asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80202764: 10002773 csrr a4,sstatus + 802029b8: 10002773 csrr a4,sstatus // set up the registers that trampoline.S's sret will use // to get to user space. // set S Previous Privilege mode to User. unsigned long x = r_sstatus(); x &= ~SSTATUS_SPP; // clear SPP to 0 for user mode - 80202768: eff77713 andi a4,a4,-257 + 802029bc: eff77713 andi a4,a4,-257 x |= SSTATUS_SPIE; // enable interrupts in user mode - 8020276c: 02076713 ori a4,a4,32 + 802029c0: 02076713 ori a4,a4,32 asm volatile("csrw sstatus, %0" : : "r" (x)); - 80202770: 10071073 csrw sstatus,a4 + 802029c4: 10071073 csrw sstatus,a4 w_sstatus(x); // set S Exception Program Counter to the saved user pc. w_sepc(p->trapframe->epc); - 80202774: 7138 ld a4,96(a0) + 802029c8: 7138 ld a4,96(a0) asm volatile("csrw sepc, %0" : : "r" (x)); - 80202776: 6f18 ld a4,24(a4) - 80202778: 14171073 csrw sepc,a4 + 802029ca: 6f18 ld a4,24(a4) + 802029cc: 14171073 csrw sepc,a4 // tell trampoline.S the user page table to switch to. // printf("[usertrapret]p->pagetable: %p\n", p->pagetable); uint64 satp = MAKE_SATP(p->pagetable); - 8020277c: 692c ld a1,80(a0) - 8020277e: 81b1 srli a1,a1,0xc + 802029d0: 692c ld a1,80(a0) + 802029d2: 81b1 srli a1,a1,0xc // jump to trampoline.S at the top of memory, which // switches to the user page table, restores user registers, // and switches to user mode with sret. uint64 fn = TRAMPOLINE + (userret - trampoline); - 80202780: 00009717 auipc a4,0x9 - 80202784: 2c073703 ld a4,704(a4) # 8020ba40 <_GLOBAL_OFFSET_TABLE_+0x10> - 80202788: 8f15 sub a4,a4,a3 - 8020278a: 97ba add a5,a5,a4 + 802029d4: 00009717 auipc a4,0x9 + 802029d8: 2dc73703 ld a4,732(a4) # 8020bcb0 <_GLOBAL_OFFSET_TABLE_+0x10> + 802029dc: 8f15 sub a4,a4,a3 + 802029de: 97ba add a5,a5,a4 ((void (*)(uint64,uint64))fn)(TRAPFRAME, satp); - 8020278c: 577d li a4,-1 - 8020278e: 177e slli a4,a4,0x3f - 80202790: 8dd9 or a1,a1,a4 - 80202792: 02000537 lui a0,0x2000 - 80202796: 157d addi a0,a0,-1 # 1ffffff <_entry-0x7e200001> - 80202798: 0536 slli a0,a0,0xd - 8020279a: 9782 jalr a5 -} - 8020279c: 60a2 ld ra,8(sp) - 8020279e: 6402 ld s0,0(sp) - 802027a0: 0141 addi sp,sp,16 - 802027a2: 8082 ret - -00000000802027a4 <devintr>: + 802029e0: 577d li a4,-1 + 802029e2: 177e slli a4,a4,0x3f + 802029e4: 8dd9 or a1,a1,a4 + 802029e6: 02000537 lui a0,0x2000 + 802029ea: 157d addi a0,a0,-1 # 1ffffff <_entry-0x7e200001> + 802029ec: 0536 slli a0,a0,0xd + 802029ee: 9782 jalr a5 +} + 802029f0: 60a2 ld ra,8(sp) + 802029f2: 6402 ld s0,0(sp) + 802029f4: 0141 addi sp,sp,16 + 802029f6: 8082 ret + +00000000802029f8 <devintr>: // Check if it's an external/software interrupt, // and handle it. // returns 2 if timer interrupt, // 1 if other device, // 0 if not recognized. int devintr(void) { - 802027a4: 1101 addi sp,sp,-32 - 802027a6: ec06 sd ra,24(sp) - 802027a8: e822 sd s0,16(sp) - 802027aa: e426 sd s1,8(sp) - 802027ac: 1000 addi s0,sp,32 + 802029f8: 1101 addi sp,sp,-32 + 802029fa: ec06 sd ra,24(sp) + 802029fc: e822 sd s0,16(sp) + 802029fe: e426 sd s1,8(sp) + 80202a00: 1000 addi s0,sp,32 asm volatile("csrr %0, scause" : "=r" (x) ); - 802027ae: 14202773 csrr a4,scause + 80202a02: 14202773 csrr a4,scause uint64 scause = r_scause(); #ifdef QEMU // handle external interrupt if ((0x8000000000000000L & scause) && 9 == (scause & 0xff)) - 802027b2: 00074d63 bltz a4,802027cc <devintr+0x28> + 80202a06: 00074d63 bltz a4,80202a20 <devintr+0x28> sbi_set_mie(); #endif return 1; } else if (0x8000000000000005L == scause) { - 802027b6: 57fd li a5,-1 - 802027b8: 17fe slli a5,a5,0x3f - 802027ba: 0795 addi a5,a5,5 + 80202a0a: 57fd li a5,-1 + 80202a0c: 17fe slli a5,a5,0x3f + 80202a0e: 0795 addi a5,a5,5 timer_tick(); return 2; } else { return 0;} - 802027bc: 4501 li a0,0 + 80202a10: 4501 li a0,0 else if (0x8000000000000005L == scause) { - 802027be: 06f70f63 beq a4,a5,8020283c <devintr+0x98> + 80202a12: 06f70f63 beq a4,a5,80202a90 <devintr+0x98> } - 802027c2: 60e2 ld ra,24(sp) - 802027c4: 6442 ld s0,16(sp) - 802027c6: 64a2 ld s1,8(sp) - 802027c8: 6105 addi sp,sp,32 - 802027ca: 8082 ret + 80202a16: 60e2 ld ra,24(sp) + 80202a18: 6442 ld s0,16(sp) + 80202a1a: 64a2 ld s1,8(sp) + 80202a1c: 6105 addi sp,sp,32 + 80202a1e: 8082 ret if ((0x8000000000000000L & scause) && 9 == (scause & 0xff)) - 802027cc: 0ff77793 zext.b a5,a4 - 802027d0: 46a5 li a3,9 - 802027d2: fed792e3 bne a5,a3,802027b6 <devintr+0x12> + 80202a20: 0ff77793 zext.b a5,a4 + 80202a24: 46a5 li a3,9 + 80202a26: fed792e3 bne a5,a3,80202a0a <devintr+0x12> int irq = plic_claim(); - 802027d6: 00004097 auipc ra,0x4 - 802027da: 2a4080e7 jalr 676(ra) # 80206a7a <plic_claim> - 802027de: 84aa mv s1,a0 + 80202a2a: 00004097 auipc ra,0x4 + 80202a2e: 3a0080e7 jalr 928(ra) # 80206dca <plic_claim> + 80202a32: 84aa mv s1,a0 if (UART_IRQ == irq) { - 802027e0: 47a9 li a5,10 - 802027e2: 02f50163 beq a0,a5,80202804 <devintr+0x60> + 80202a34: 47a9 li a5,10 + 80202a36: 02f50163 beq a0,a5,80202a58 <devintr+0x60> else if (DISK_IRQ == irq) { - 802027e6: 4785 li a5,1 - 802027e8: 04f50563 beq a0,a5,80202832 <devintr+0x8e> + 80202a3a: 4785 li a5,1 + 80202a3c: 04f50563 beq a0,a5,80202a86 <devintr+0x8e> return 1; - 802027ec: 4505 li a0,1 + 80202a40: 4505 li a0,1 else if (irq) { - 802027ee: d8f1 beqz s1,802027c2 <devintr+0x1e> + 80202a42: d8f1 beqz s1,80202a16 <devintr+0x1e> printf("unexpected interrupt irq = %d\n", irq); - 802027f0: 85a6 mv a1,s1 - 802027f2: 00007517 auipc a0,0x7 - 802027f6: f0e50513 addi a0,a0,-242 # 80209700 <digits+0x380> - 802027fa: ffffe097 auipc ra,0xffffe - 802027fe: 994080e7 jalr -1644(ra) # 8020018e <printf> - 80202802: a821 j 8020281a <devintr+0x76> + 80202a44: 85a6 mv a1,s1 + 80202a46: 00007517 auipc a0,0x7 + 80202a4a: cba50513 addi a0,a0,-838 # 80209700 <digits+0x380> + 80202a4e: ffffd097 auipc ra,0xffffd + 80202a52: 740080e7 jalr 1856(ra) # 8020018e <printf> + 80202a56: a821 j 80202a6e <devintr+0x76> return SBI_CALL_0(SBI_CONSOLE_GETCHAR); - 80202804: 4501 li a0,0 - 80202806: 4581 li a1,0 - 80202808: 4601 li a2,0 - 8020280a: 4681 li a3,0 - 8020280c: 4889 li a7,2 - 8020280e: 00000073 ecall - 80202812: 2501 sext.w a0,a0 + 80202a58: 4501 li a0,0 + 80202a5a: 4581 li a1,0 + 80202a5c: 4601 li a2,0 + 80202a5e: 4681 li a3,0 + 80202a60: 4889 li a7,2 + 80202a62: 00000073 ecall + 80202a66: 2501 sext.w a0,a0 if (-1 != c) { - 80202814: 57fd li a5,-1 - 80202816: 00f51963 bne a0,a5,80202828 <devintr+0x84> + 80202a68: 57fd li a5,-1 + 80202a6a: 00f51963 bne a0,a5,80202a7c <devintr+0x84> if (irq) { plic_complete(irq);} - 8020281a: 8526 mv a0,s1 - 8020281c: 00004097 auipc ra,0x4 - 80202820: 288080e7 jalr 648(ra) # 80206aa4 <plic_complete> + 80202a6e: 8526 mv a0,s1 + 80202a70: 00004097 auipc ra,0x4 + 80202a74: 384080e7 jalr 900(ra) # 80206df4 <plic_complete> return 1; - 80202824: 4505 li a0,1 - 80202826: bf71 j 802027c2 <devintr+0x1e> + 80202a78: 4505 li a0,1 + 80202a7a: bf71 j 80202a16 <devintr+0x1e> consoleintr(c); - 80202828: 00004097 auipc ra,0x4 - 8020282c: 490080e7 jalr 1168(ra) # 80206cb8 <consoleintr> - 80202830: b7ed j 8020281a <devintr+0x76> + 80202a7c: 00004097 auipc ra,0x4 + 80202a80: 58c080e7 jalr 1420(ra) # 80207008 <consoleintr> + 80202a84: b7ed j 80202a6e <devintr+0x76> disk_intr(); - 80202832: 00003097 auipc ra,0x3 - 80202836: 8a4080e7 jalr -1884(ra) # 802050d6 <disk_intr> - 8020283a: b7c5 j 8020281a <devintr+0x76> + 80202a86: 00003097 auipc ra,0x3 + 80202a8a: 9a0080e7 jalr -1632(ra) # 80205426 <disk_intr> + 80202a8e: b7c5 j 80202a6e <devintr+0x76> timer_tick(); - 8020283c: 00003097 auipc ra,0x3 - 80202840: 800080e7 jalr -2048(ra) # 8020503c <timer_tick> + 80202a90: 00003097 auipc ra,0x3 + 80202a94: 8fc080e7 jalr -1796(ra) # 8020538c <timer_tick> return 2; - 80202844: 4509 li a0,2 - 80202846: bfb5 j 802027c2 <devintr+0x1e> + 80202a98: 4509 li a0,2 + 80202a9a: bfb5 j 80202a16 <devintr+0x1e> -0000000080202848 <usertrap>: +0000000080202a9c <usertrap>: { - 80202848: 1101 addi sp,sp,-32 - 8020284a: ec06 sd ra,24(sp) - 8020284c: e822 sd s0,16(sp) - 8020284e: e426 sd s1,8(sp) - 80202850: e04a sd s2,0(sp) - 80202852: 1000 addi s0,sp,32 + 80202a9c: 1101 addi sp,sp,-32 + 80202a9e: ec06 sd ra,24(sp) + 80202aa0: e822 sd s0,16(sp) + 80202aa2: e426 sd s1,8(sp) + 80202aa4: e04a sd s2,0(sp) + 80202aa6: 1000 addi s0,sp,32 asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80202854: 100027f3 csrr a5,sstatus + 80202aa8: 100027f3 csrr a5,sstatus if((r_sstatus() & SSTATUS_SPP) != 0) - 80202858: 1007f793 andi a5,a5,256 - 8020285c: e3ad bnez a5,802028be <usertrap+0x76> + 80202aac: 1007f793 andi a5,a5,256 + 80202ab0: e3ad bnez a5,80202b12 <usertrap+0x76> asm volatile("csrw stvec, %0" : : "r" (x)); - 8020285e: 00009797 auipc a5,0x9 - 80202862: 1ea7b783 ld a5,490(a5) # 8020ba48 <_GLOBAL_OFFSET_TABLE_+0x18> - 80202866: 10579073 csrw stvec,a5 + 80202ab2: 00009797 auipc a5,0x9 + 80202ab6: 2067b783 ld a5,518(a5) # 8020bcb8 <_GLOBAL_OFFSET_TABLE_+0x18> + 80202aba: 10579073 csrw stvec,a5 struct proc *p = myproc(); - 8020286a: fffff097 auipc ra,0xfffff - 8020286e: 1d2080e7 jalr 466(ra) # 80201a3c <myproc> - 80202872: 84aa mv s1,a0 + 80202abe: fffff097 auipc ra,0xfffff + 80202ac2: f7e080e7 jalr -130(ra) # 80201a3c <myproc> + 80202ac6: 84aa mv s1,a0 p->trapframe->epc = r_sepc(); - 80202874: 713c ld a5,96(a0) + 80202ac8: 713c ld a5,96(a0) asm volatile("csrr %0, sepc" : "=r" (x) ); - 80202876: 14102773 csrr a4,sepc - 8020287a: ef98 sd a4,24(a5) + 80202aca: 14102773 csrr a4,sepc + 80202ace: ef98 sd a4,24(a5) asm volatile("csrr %0, scause" : "=r" (x) ); - 8020287c: 14202773 csrr a4,scause + 80202ad0: 14202773 csrr a4,scause if(r_scause() == 8){ - 80202880: 47a1 li a5,8 - 80202882: 04f71c63 bne a4,a5,802028da <usertrap+0x92> + 80202ad4: 47a1 li a5,8 + 80202ad6: 04f71c63 bne a4,a5,80202b2e <usertrap+0x92> if(p->killed) - 80202886: 591c lw a5,48(a0) - 80202888: e3b9 bnez a5,802028ce <usertrap+0x86> + 80202ada: 591c lw a5,48(a0) + 80202adc: e3b9 bnez a5,80202b22 <usertrap+0x86> p->trapframe->epc += 4; - 8020288a: 70b8 ld a4,96(s1) - 8020288c: 6f1c ld a5,24(a4) - 8020288e: 0791 addi a5,a5,4 - 80202890: ef1c sd a5,24(a4) + 80202ade: 70b8 ld a4,96(s1) + 80202ae0: 6f1c ld a5,24(a4) + 80202ae2: 0791 addi a5,a5,4 + 80202ae4: ef1c sd a5,24(a4) asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80202892: 100027f3 csrr a5,sstatus + 80202ae6: 100027f3 csrr a5,sstatus w_sstatus(r_sstatus() | SSTATUS_SIE); - 80202896: 0027e793 ori a5,a5,2 + 80202aea: 0027e793 ori a5,a5,2 asm volatile("csrw sstatus, %0" : : "r" (x)); - 8020289a: 10079073 csrw sstatus,a5 + 80202aee: 10079073 csrw sstatus,a5 syscall(); - 8020289e: 00000097 auipc ra,0x0 - 802028a2: 5d4080e7 jalr 1492(ra) # 80202e72 <syscall> + 80202af2: 00000097 auipc ra,0x0 + 80202af6: 5d4080e7 jalr 1492(ra) # 802030c6 <syscall> if(p->killed) - 802028a6: 589c lw a5,48(s1) - 802028a8: ebd1 bnez a5,8020293c <usertrap+0xf4> + 80202afa: 589c lw a5,48(s1) + 80202afc: ebd1 bnez a5,80202b90 <usertrap+0xf4> usertrapret(); - 802028aa: 00000097 auipc ra,0x0 - 802028ae: e5c080e7 jalr -420(ra) # 80202706 <usertrapret> -} - 802028b2: 60e2 ld ra,24(sp) - 802028b4: 6442 ld s0,16(sp) - 802028b6: 64a2 ld s1,8(sp) - 802028b8: 6902 ld s2,0(sp) - 802028ba: 6105 addi sp,sp,32 - 802028bc: 8082 ret + 80202afe: 00000097 auipc ra,0x0 + 80202b02: e5c080e7 jalr -420(ra) # 8020295a <usertrapret> +} + 80202b06: 60e2 ld ra,24(sp) + 80202b08: 6442 ld s0,16(sp) + 80202b0a: 64a2 ld s1,8(sp) + 80202b0c: 6902 ld s2,0(sp) + 80202b0e: 6105 addi sp,sp,32 + 80202b10: 8082 ret panic("usertrap: not from user mode"); - 802028be: 00007517 auipc a0,0x7 - 802028c2: e6250513 addi a0,a0,-414 # 80209720 <digits+0x3a0> - 802028c6: ffffe097 auipc ra,0xffffe - 802028ca: 87e080e7 jalr -1922(ra) # 80200144 <panic> + 80202b12: 00007517 auipc a0,0x7 + 80202b16: c0e50513 addi a0,a0,-1010 # 80209720 <digits+0x3a0> + 80202b1a: ffffd097 auipc ra,0xffffd + 80202b1e: 62a080e7 jalr 1578(ra) # 80200144 <panic> exit(-1); - 802028ce: 557d li a0,-1 - 802028d0: 00000097 auipc ra,0x0 - 802028d4: 8b0080e7 jalr -1872(ra) # 80202180 <exit> - 802028d8: bf4d j 8020288a <usertrap+0x42> + 80202b22: 557d li a0,-1 + 80202b24: fffff097 auipc ra,0xfffff + 80202b28: 65c080e7 jalr 1628(ra) # 80202180 <exit> + 80202b2c: bf4d j 80202ade <usertrap+0x42> else if((which_dev = devintr()) != 0){ - 802028da: 00000097 auipc ra,0x0 - 802028de: eca080e7 jalr -310(ra) # 802027a4 <devintr> - 802028e2: 892a mv s2,a0 - 802028e4: c501 beqz a0,802028ec <usertrap+0xa4> + 80202b2e: 00000097 auipc ra,0x0 + 80202b32: eca080e7 jalr -310(ra) # 802029f8 <devintr> + 80202b36: 892a mv s2,a0 + 80202b38: c501 beqz a0,80202b40 <usertrap+0xa4> if(p->killed) - 802028e6: 589c lw a5,48(s1) - 802028e8: c3b1 beqz a5,8020292c <usertrap+0xe4> - 802028ea: a825 j 80202922 <usertrap+0xda> + 80202b3a: 589c lw a5,48(s1) + 80202b3c: c3b1 beqz a5,80202b80 <usertrap+0xe4> + 80202b3e: a825 j 80202b76 <usertrap+0xda> asm volatile("csrr %0, scause" : "=r" (x) ); - 802028ec: 142025f3 csrr a1,scause + 80202b40: 142025f3 csrr a1,scause printf("\nusertrap(): unexpected scause %p pid=%d %s\n", r_scause(), p->pid, p->name); - 802028f0: 16048693 addi a3,s1,352 - 802028f4: 5c90 lw a2,56(s1) - 802028f6: 00007517 auipc a0,0x7 - 802028fa: e4a50513 addi a0,a0,-438 # 80209740 <digits+0x3c0> - 802028fe: ffffe097 auipc ra,0xffffe - 80202902: 890080e7 jalr -1904(ra) # 8020018e <printf> + 80202b44: 16048693 addi a3,s1,352 + 80202b48: 5c90 lw a2,56(s1) + 80202b4a: 00007517 auipc a0,0x7 + 80202b4e: bf650513 addi a0,a0,-1034 # 80209740 <digits+0x3c0> + 80202b52: ffffd097 auipc ra,0xffffd + 80202b56: 63c080e7 jalr 1596(ra) # 8020018e <printf> asm volatile("csrr %0, sepc" : "=r" (x) ); - 80202906: 141025f3 csrr a1,sepc + 80202b5a: 141025f3 csrr a1,sepc asm volatile("csrr %0, stval" : "=r" (x) ); - 8020290a: 14302673 csrr a2,stval + 80202b5e: 14302673 csrr a2,stval printf(" sepc=%p stval=%p\n", r_sepc(), r_stval()); - 8020290e: 00007517 auipc a0,0x7 - 80202912: e6250513 addi a0,a0,-414 # 80209770 <digits+0x3f0> - 80202916: ffffe097 auipc ra,0xffffe - 8020291a: 878080e7 jalr -1928(ra) # 8020018e <printf> + 80202b62: 00007517 auipc a0,0x7 + 80202b66: c0e50513 addi a0,a0,-1010 # 80209770 <digits+0x3f0> + 80202b6a: ffffd097 auipc ra,0xffffd + 80202b6e: 624080e7 jalr 1572(ra) # 8020018e <printf> p->killed = 1; - 8020291e: 4785 li a5,1 - 80202920: d89c sw a5,48(s1) + 80202b72: 4785 li a5,1 + 80202b74: d89c sw a5,48(s1) exit(-1); - 80202922: 557d li a0,-1 - 80202924: 00000097 auipc ra,0x0 - 80202928: 85c080e7 jalr -1956(ra) # 80202180 <exit> + 80202b76: 557d li a0,-1 + 80202b78: fffff097 auipc ra,0xfffff + 80202b7c: 608080e7 jalr 1544(ra) # 80202180 <exit> if(which_dev == 2) - 8020292c: 4789 li a5,2 - 8020292e: f6f91ee3 bne s2,a5,802028aa <usertrap+0x62> + 80202b80: 4789 li a5,2 + 80202b82: f6f91ee3 bne s2,a5,80202afe <usertrap+0x62> yield(); - 80202932: 00000097 auipc ra,0x0 - 80202936: 94e080e7 jalr -1714(ra) # 80202280 <yield> - 8020293a: bf85 j 802028aa <usertrap+0x62> + 80202b86: fffff097 auipc ra,0xfffff + 80202b8a: 6fa080e7 jalr 1786(ra) # 80202280 <yield> + 80202b8e: bf85 j 80202afe <usertrap+0x62> int which_dev = 0; - 8020293c: 4901 li s2,0 - 8020293e: b7d5 j 80202922 <usertrap+0xda> + 80202b90: 4901 li s2,0 + 80202b92: b7d5 j 80202b76 <usertrap+0xda> -0000000080202940 <kerneltrap>: +0000000080202b94 <kerneltrap>: kerneltrap() { - 80202940: 7179 addi sp,sp,-48 - 80202942: f406 sd ra,40(sp) - 80202944: f022 sd s0,32(sp) - 80202946: ec26 sd s1,24(sp) - 80202948: e84a sd s2,16(sp) - 8020294a: e44e sd s3,8(sp) - 8020294c: 1800 addi s0,sp,48 + 80202b94: 7179 addi sp,sp,-48 + 80202b96: f406 sd ra,40(sp) + 80202b98: f022 sd s0,32(sp) + 80202b9a: ec26 sd s1,24(sp) + 80202b9c: e84a sd s2,16(sp) + 80202b9e: e44e sd s3,8(sp) + 80202ba0: 1800 addi s0,sp,48 asm volatile("csrr %0, sepc" : "=r" (x) ); - 8020294e: 14102973 csrr s2,sepc + 80202ba2: 14102973 csrr s2,sepc asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80202952: 100024f3 csrr s1,sstatus + 80202ba6: 100024f3 csrr s1,sstatus asm volatile("csrr %0, scause" : "=r" (x) ); - 80202956: 142029f3 csrr s3,scause + 80202baa: 142029f3 csrr s3,scause if((sstatus & SSTATUS_SPP) == 0) - 8020295a: 1004f793 andi a5,s1,256 - 8020295e: cb85 beqz a5,8020298e <kerneltrap+0x4e> + 80202bae: 1004f793 andi a5,s1,256 + 80202bb2: cb85 beqz a5,80202be2 <kerneltrap+0x4e> asm volatile("csrr %0, sstatus" : "=r" (x) ); - 80202960: 100027f3 csrr a5,sstatus + 80202bb4: 100027f3 csrr a5,sstatus return (x & SSTATUS_SIE) != 0; - 80202964: 8b89 andi a5,a5,2 + 80202bb8: 8b89 andi a5,a5,2 if(intr_get() != 0) - 80202966: ef85 bnez a5,8020299e <kerneltrap+0x5e> + 80202bba: ef85 bnez a5,80202bf2 <kerneltrap+0x5e> if((which_dev = devintr()) == 0){ - 80202968: 00000097 auipc ra,0x0 - 8020296c: e3c080e7 jalr -452(ra) # 802027a4 <devintr> - 80202970: cd1d beqz a0,802029ae <kerneltrap+0x6e> + 80202bbc: 00000097 auipc ra,0x0 + 80202bc0: e3c080e7 jalr -452(ra) # 802029f8 <devintr> + 80202bc4: cd1d beqz a0,80202c02 <kerneltrap+0x6e> if(which_dev == 2 && myproc() != 0 && myproc()->state == RUNNING) { - 80202972: 4789 li a5,2 - 80202974: 08f50b63 beq a0,a5,80202a0a <kerneltrap+0xca> + 80202bc6: 4789 li a5,2 + 80202bc8: 08f50b63 beq a0,a5,80202c5e <kerneltrap+0xca> asm volatile("csrw sepc, %0" : : "r" (x)); - 80202978: 14191073 csrw sepc,s2 + 80202bcc: 14191073 csrw sepc,s2 asm volatile("csrw sstatus, %0" : : "r" (x)); - 8020297c: 10049073 csrw sstatus,s1 -} - 80202980: 70a2 ld ra,40(sp) - 80202982: 7402 ld s0,32(sp) - 80202984: 64e2 ld s1,24(sp) - 80202986: 6942 ld s2,16(sp) - 80202988: 69a2 ld s3,8(sp) - 8020298a: 6145 addi sp,sp,48 - 8020298c: 8082 ret + 80202bd0: 10049073 csrw sstatus,s1 +} + 80202bd4: 70a2 ld ra,40(sp) + 80202bd6: 7402 ld s0,32(sp) + 80202bd8: 64e2 ld s1,24(sp) + 80202bda: 6942 ld s2,16(sp) + 80202bdc: 69a2 ld s3,8(sp) + 80202bde: 6145 addi sp,sp,48 + 80202be0: 8082 ret panic("kerneltrap: not from supervisor mode"); - 8020298e: 00007517 auipc a0,0x7 - 80202992: e0250513 addi a0,a0,-510 # 80209790 <digits+0x410> - 80202996: ffffd097 auipc ra,0xffffd - 8020299a: 7ae080e7 jalr 1966(ra) # 80200144 <panic> + 80202be2: 00007517 auipc a0,0x7 + 80202be6: bae50513 addi a0,a0,-1106 # 80209790 <digits+0x410> + 80202bea: ffffd097 auipc ra,0xffffd + 80202bee: 55a080e7 jalr 1370(ra) # 80200144 <panic> panic("kerneltrap: interrupts enabled"); - 8020299e: 00007517 auipc a0,0x7 - 802029a2: e1a50513 addi a0,a0,-486 # 802097b8 <digits+0x438> - 802029a6: ffffd097 auipc ra,0xffffd - 802029aa: 79e080e7 jalr 1950(ra) # 80200144 <panic> + 80202bf2: 00007517 auipc a0,0x7 + 80202bf6: bc650513 addi a0,a0,-1082 # 802097b8 <digits+0x438> + 80202bfa: ffffd097 auipc ra,0xffffd + 80202bfe: 54a080e7 jalr 1354(ra) # 80200144 <panic> printf("\nscause %p\n", scause); - 802029ae: 85ce mv a1,s3 - 802029b0: 00007517 auipc a0,0x7 - 802029b4: e2850513 addi a0,a0,-472 # 802097d8 <digits+0x458> - 802029b8: ffffd097 auipc ra,0xffffd - 802029bc: 7d6080e7 jalr 2006(ra) # 8020018e <printf> + 80202c02: 85ce mv a1,s3 + 80202c04: 00007517 auipc a0,0x7 + 80202c08: bd450513 addi a0,a0,-1068 # 802097d8 <digits+0x458> + 80202c0c: ffffd097 auipc ra,0xffffd + 80202c10: 582080e7 jalr 1410(ra) # 8020018e <printf> asm volatile("csrr %0, sepc" : "=r" (x) ); - 802029c0: 141025f3 csrr a1,sepc + 80202c14: 141025f3 csrr a1,sepc asm volatile("csrr %0, stval" : "=r" (x) ); - 802029c4: 14302673 csrr a2,stval + 80202c18: 14302673 csrr a2,stval asm volatile("mv %0, tp" : "=r" (x) ); - 802029c8: 8692 mv a3,tp + 80202c1c: 8692 mv a3,tp printf("sepc=%p stval=%p hart=%d\n", r_sepc(), r_stval(), r_tp()); - 802029ca: 00007517 auipc a0,0x7 - 802029ce: e1e50513 addi a0,a0,-482 # 802097e8 <digits+0x468> - 802029d2: ffffd097 auipc ra,0xffffd - 802029d6: 7bc080e7 jalr 1980(ra) # 8020018e <printf> + 80202c1e: 00007517 auipc a0,0x7 + 80202c22: bca50513 addi a0,a0,-1078 # 802097e8 <digits+0x468> + 80202c26: ffffd097 auipc ra,0xffffd + 80202c2a: 568080e7 jalr 1384(ra) # 8020018e <printf> struct proc *p = myproc(); - 802029da: fffff097 auipc ra,0xfffff - 802029de: 062080e7 jalr 98(ra) # 80201a3c <myproc> + 80202c2e: fffff097 auipc ra,0xfffff + 80202c32: e0e080e7 jalr -498(ra) # 80201a3c <myproc> if (p != 0) { - 802029e2: cd01 beqz a0,802029fa <kerneltrap+0xba> + 80202c36: cd01 beqz a0,80202c4e <kerneltrap+0xba> printf("pid: %d, name: %s\n", p->pid, p->name); - 802029e4: 16050613 addi a2,a0,352 - 802029e8: 5d0c lw a1,56(a0) - 802029ea: 00007517 auipc a0,0x7 - 802029ee: e1e50513 addi a0,a0,-482 # 80209808 <digits+0x488> - 802029f2: ffffd097 auipc ra,0xffffd - 802029f6: 79c080e7 jalr 1948(ra) # 8020018e <printf> + 80202c38: 16050613 addi a2,a0,352 + 80202c3c: 5d0c lw a1,56(a0) + 80202c3e: 00007517 auipc a0,0x7 + 80202c42: bca50513 addi a0,a0,-1078 # 80209808 <digits+0x488> + 80202c46: ffffd097 auipc ra,0xffffd + 80202c4a: 548080e7 jalr 1352(ra) # 8020018e <printf> panic("kerneltrap"); - 802029fa: 00007517 auipc a0,0x7 - 802029fe: e2650513 addi a0,a0,-474 # 80209820 <digits+0x4a0> - 80202a02: ffffd097 auipc ra,0xffffd - 80202a06: 742080e7 jalr 1858(ra) # 80200144 <panic> + 80202c4e: 00007517 auipc a0,0x7 + 80202c52: bd250513 addi a0,a0,-1070 # 80209820 <digits+0x4a0> + 80202c56: ffffd097 auipc ra,0xffffd + 80202c5a: 4ee080e7 jalr 1262(ra) # 80200144 <panic> if(which_dev == 2 && myproc() != 0 && myproc()->state == RUNNING) { - 80202a0a: fffff097 auipc ra,0xfffff - 80202a0e: 032080e7 jalr 50(ra) # 80201a3c <myproc> - 80202a12: d13d beqz a0,80202978 <kerneltrap+0x38> - 80202a14: fffff097 auipc ra,0xfffff - 80202a18: 028080e7 jalr 40(ra) # 80201a3c <myproc> - 80202a1c: 4d18 lw a4,24(a0) - 80202a1e: 478d li a5,3 - 80202a20: f4f71ce3 bne a4,a5,80202978 <kerneltrap+0x38> + 80202c5e: fffff097 auipc ra,0xfffff + 80202c62: dde080e7 jalr -546(ra) # 80201a3c <myproc> + 80202c66: d13d beqz a0,80202bcc <kerneltrap+0x38> + 80202c68: fffff097 auipc ra,0xfffff + 80202c6c: dd4080e7 jalr -556(ra) # 80201a3c <myproc> + 80202c70: 4d18 lw a4,24(a0) + 80202c72: 478d li a5,3 + 80202c74: f4f71ce3 bne a4,a5,80202bcc <kerneltrap+0x38> yield(); - 80202a24: 00000097 auipc ra,0x0 - 80202a28: 85c080e7 jalr -1956(ra) # 80202280 <yield> - 80202a2c: b7b1 j 80202978 <kerneltrap+0x38> + 80202c78: fffff097 auipc ra,0xfffff + 80202c7c: 608080e7 jalr 1544(ra) # 80202280 <yield> + 80202c80: b7b1 j 80202bcc <kerneltrap+0x38> -0000000080202a2e <trapframedump>: +0000000080202c82 <trapframedump>: void trapframedump(struct trapframe *tf) { - 80202a2e: 1101 addi sp,sp,-32 - 80202a30: ec06 sd ra,24(sp) - 80202a32: e822 sd s0,16(sp) - 80202a34: e426 sd s1,8(sp) - 80202a36: 1000 addi s0,sp,32 - 80202a38: 84aa mv s1,a0 + 80202c82: 1101 addi sp,sp,-32 + 80202c84: ec06 sd ra,24(sp) + 80202c86: e822 sd s0,16(sp) + 80202c88: e426 sd s1,8(sp) + 80202c8a: 1000 addi s0,sp,32 + 80202c8c: 84aa mv s1,a0 printf("a0: %p\t", tf->a0); - 80202a3a: 792c ld a1,112(a0) - 80202a3c: 00007517 auipc a0,0x7 - 80202a40: df450513 addi a0,a0,-524 # 80209830 <digits+0x4b0> - 80202a44: ffffd097 auipc ra,0xffffd - 80202a48: 74a080e7 jalr 1866(ra) # 8020018e <printf> + 80202c8e: 792c ld a1,112(a0) + 80202c90: 00007517 auipc a0,0x7 + 80202c94: ba050513 addi a0,a0,-1120 # 80209830 <digits+0x4b0> + 80202c98: ffffd097 auipc ra,0xffffd + 80202c9c: 4f6080e7 jalr 1270(ra) # 8020018e <printf> printf("a1: %p\t", tf->a1); - 80202a4c: 7cac ld a1,120(s1) - 80202a4e: 00007517 auipc a0,0x7 - 80202a52: dea50513 addi a0,a0,-534 # 80209838 <digits+0x4b8> - 80202a56: ffffd097 auipc ra,0xffffd - 80202a5a: 738080e7 jalr 1848(ra) # 8020018e <printf> + 80202ca0: 7cac ld a1,120(s1) + 80202ca2: 00007517 auipc a0,0x7 + 80202ca6: b9650513 addi a0,a0,-1130 # 80209838 <digits+0x4b8> + 80202caa: ffffd097 auipc ra,0xffffd + 80202cae: 4e4080e7 jalr 1252(ra) # 8020018e <printf> printf("a2: %p\t", tf->a2); - 80202a5e: 60cc ld a1,128(s1) - 80202a60: 00007517 auipc a0,0x7 - 80202a64: de050513 addi a0,a0,-544 # 80209840 <digits+0x4c0> - 80202a68: ffffd097 auipc ra,0xffffd - 80202a6c: 726080e7 jalr 1830(ra) # 8020018e <printf> + 80202cb2: 60cc ld a1,128(s1) + 80202cb4: 00007517 auipc a0,0x7 + 80202cb8: b8c50513 addi a0,a0,-1140 # 80209840 <digits+0x4c0> + 80202cbc: ffffd097 auipc ra,0xffffd + 80202cc0: 4d2080e7 jalr 1234(ra) # 8020018e <printf> printf("a3: %p\n", tf->a3); - 80202a70: 64cc ld a1,136(s1) - 80202a72: 00007517 auipc a0,0x7 - 80202a76: dd650513 addi a0,a0,-554 # 80209848 <digits+0x4c8> - 80202a7a: ffffd097 auipc ra,0xffffd - 80202a7e: 714080e7 jalr 1812(ra) # 8020018e <printf> + 80202cc4: 64cc ld a1,136(s1) + 80202cc6: 00007517 auipc a0,0x7 + 80202cca: b8250513 addi a0,a0,-1150 # 80209848 <digits+0x4c8> + 80202cce: ffffd097 auipc ra,0xffffd + 80202cd2: 4c0080e7 jalr 1216(ra) # 8020018e <printf> printf("a4: %p\t", tf->a4); - 80202a82: 68cc ld a1,144(s1) - 80202a84: 00007517 auipc a0,0x7 - 80202a88: dcc50513 addi a0,a0,-564 # 80209850 <digits+0x4d0> - 80202a8c: ffffd097 auipc ra,0xffffd - 80202a90: 702080e7 jalr 1794(ra) # 8020018e <printf> + 80202cd6: 68cc ld a1,144(s1) + 80202cd8: 00007517 auipc a0,0x7 + 80202cdc: b7850513 addi a0,a0,-1160 # 80209850 <digits+0x4d0> + 80202ce0: ffffd097 auipc ra,0xffffd + 80202ce4: 4ae080e7 jalr 1198(ra) # 8020018e <printf> printf("a5: %p\t", tf->a5); - 80202a94: 6ccc ld a1,152(s1) - 80202a96: 00007517 auipc a0,0x7 - 80202a9a: dc250513 addi a0,a0,-574 # 80209858 <digits+0x4d8> - 80202a9e: ffffd097 auipc ra,0xffffd - 80202aa2: 6f0080e7 jalr 1776(ra) # 8020018e <printf> + 80202ce8: 6ccc ld a1,152(s1) + 80202cea: 00007517 auipc a0,0x7 + 80202cee: b6e50513 addi a0,a0,-1170 # 80209858 <digits+0x4d8> + 80202cf2: ffffd097 auipc ra,0xffffd + 80202cf6: 49c080e7 jalr 1180(ra) # 8020018e <printf> printf("a6: %p\t", tf->a6); - 80202aa6: 70cc ld a1,160(s1) - 80202aa8: 00007517 auipc a0,0x7 - 80202aac: db850513 addi a0,a0,-584 # 80209860 <digits+0x4e0> - 80202ab0: ffffd097 auipc ra,0xffffd - 80202ab4: 6de080e7 jalr 1758(ra) # 8020018e <printf> + 80202cfa: 70cc ld a1,160(s1) + 80202cfc: 00007517 auipc a0,0x7 + 80202d00: b6450513 addi a0,a0,-1180 # 80209860 <digits+0x4e0> + 80202d04: ffffd097 auipc ra,0xffffd + 80202d08: 48a080e7 jalr 1162(ra) # 8020018e <printf> printf("a7: %p\n", tf->a7); - 80202ab8: 74cc ld a1,168(s1) - 80202aba: 00007517 auipc a0,0x7 - 80202abe: dae50513 addi a0,a0,-594 # 80209868 <digits+0x4e8> - 80202ac2: ffffd097 auipc ra,0xffffd - 80202ac6: 6cc080e7 jalr 1740(ra) # 8020018e <printf> + 80202d0c: 74cc ld a1,168(s1) + 80202d0e: 00007517 auipc a0,0x7 + 80202d12: b5a50513 addi a0,a0,-1190 # 80209868 <digits+0x4e8> + 80202d16: ffffd097 auipc ra,0xffffd + 80202d1a: 478080e7 jalr 1144(ra) # 8020018e <printf> printf("t0: %p\t", tf->t0); - 80202aca: 64ac ld a1,72(s1) - 80202acc: 00007517 auipc a0,0x7 - 80202ad0: da450513 addi a0,a0,-604 # 80209870 <digits+0x4f0> - 80202ad4: ffffd097 auipc ra,0xffffd - 80202ad8: 6ba080e7 jalr 1722(ra) # 8020018e <printf> + 80202d1e: 64ac ld a1,72(s1) + 80202d20: 00007517 auipc a0,0x7 + 80202d24: b5050513 addi a0,a0,-1200 # 80209870 <digits+0x4f0> + 80202d28: ffffd097 auipc ra,0xffffd + 80202d2c: 466080e7 jalr 1126(ra) # 8020018e <printf> printf("t1: %p\t", tf->t1); - 80202adc: 68ac ld a1,80(s1) - 80202ade: 00007517 auipc a0,0x7 - 80202ae2: d9a50513 addi a0,a0,-614 # 80209878 <digits+0x4f8> - 80202ae6: ffffd097 auipc ra,0xffffd - 80202aea: 6a8080e7 jalr 1704(ra) # 8020018e <printf> + 80202d30: 68ac ld a1,80(s1) + 80202d32: 00007517 auipc a0,0x7 + 80202d36: b4650513 addi a0,a0,-1210 # 80209878 <digits+0x4f8> + 80202d3a: ffffd097 auipc ra,0xffffd + 80202d3e: 454080e7 jalr 1108(ra) # 8020018e <printf> printf("t2: %p\t", tf->t2); - 80202aee: 6cac ld a1,88(s1) - 80202af0: 00007517 auipc a0,0x7 - 80202af4: d9050513 addi a0,a0,-624 # 80209880 <digits+0x500> - 80202af8: ffffd097 auipc ra,0xffffd - 80202afc: 696080e7 jalr 1686(ra) # 8020018e <printf> + 80202d42: 6cac ld a1,88(s1) + 80202d44: 00007517 auipc a0,0x7 + 80202d48: b3c50513 addi a0,a0,-1220 # 80209880 <digits+0x500> + 80202d4c: ffffd097 auipc ra,0xffffd + 80202d50: 442080e7 jalr 1090(ra) # 8020018e <printf> printf("t3: %p\n", tf->t3); - 80202b00: 1004b583 ld a1,256(s1) - 80202b04: 00007517 auipc a0,0x7 - 80202b08: d8450513 addi a0,a0,-636 # 80209888 <digits+0x508> - 80202b0c: ffffd097 auipc ra,0xffffd - 80202b10: 682080e7 jalr 1666(ra) # 8020018e <printf> + 80202d54: 1004b583 ld a1,256(s1) + 80202d58: 00007517 auipc a0,0x7 + 80202d5c: b3050513 addi a0,a0,-1232 # 80209888 <digits+0x508> + 80202d60: ffffd097 auipc ra,0xffffd + 80202d64: 42e080e7 jalr 1070(ra) # 8020018e <printf> printf("t4: %p\t", tf->t4); - 80202b14: 1084b583 ld a1,264(s1) - 80202b18: 00007517 auipc a0,0x7 - 80202b1c: d7850513 addi a0,a0,-648 # 80209890 <digits+0x510> - 80202b20: ffffd097 auipc ra,0xffffd - 80202b24: 66e080e7 jalr 1646(ra) # 8020018e <printf> + 80202d68: 1084b583 ld a1,264(s1) + 80202d6c: 00007517 auipc a0,0x7 + 80202d70: b2450513 addi a0,a0,-1244 # 80209890 <digits+0x510> + 80202d74: ffffd097 auipc ra,0xffffd + 80202d78: 41a080e7 jalr 1050(ra) # 8020018e <printf> printf("t5: %p\t", tf->t5); - 80202b28: 1104b583 ld a1,272(s1) - 80202b2c: 00007517 auipc a0,0x7 - 80202b30: d6c50513 addi a0,a0,-660 # 80209898 <digits+0x518> - 80202b34: ffffd097 auipc ra,0xffffd - 80202b38: 65a080e7 jalr 1626(ra) # 8020018e <printf> + 80202d7c: 1104b583 ld a1,272(s1) + 80202d80: 00007517 auipc a0,0x7 + 80202d84: b1850513 addi a0,a0,-1256 # 80209898 <digits+0x518> + 80202d88: ffffd097 auipc ra,0xffffd + 80202d8c: 406080e7 jalr 1030(ra) # 8020018e <printf> printf("t6: %p\t", tf->t6); - 80202b3c: 1184b583 ld a1,280(s1) - 80202b40: 00007517 auipc a0,0x7 - 80202b44: d6050513 addi a0,a0,-672 # 802098a0 <digits+0x520> - 80202b48: ffffd097 auipc ra,0xffffd - 80202b4c: 646080e7 jalr 1606(ra) # 8020018e <printf> + 80202d90: 1184b583 ld a1,280(s1) + 80202d94: 00007517 auipc a0,0x7 + 80202d98: b0c50513 addi a0,a0,-1268 # 802098a0 <digits+0x520> + 80202d9c: ffffd097 auipc ra,0xffffd + 80202da0: 3f2080e7 jalr 1010(ra) # 8020018e <printf> printf("s0: %p\n", tf->s0); - 80202b50: 70ac ld a1,96(s1) - 80202b52: 00007517 auipc a0,0x7 - 80202b56: d5650513 addi a0,a0,-682 # 802098a8 <digits+0x528> - 80202b5a: ffffd097 auipc ra,0xffffd - 80202b5e: 634080e7 jalr 1588(ra) # 8020018e <printf> + 80202da4: 70ac ld a1,96(s1) + 80202da6: 00007517 auipc a0,0x7 + 80202daa: b0250513 addi a0,a0,-1278 # 802098a8 <digits+0x528> + 80202dae: ffffd097 auipc ra,0xffffd + 80202db2: 3e0080e7 jalr 992(ra) # 8020018e <printf> printf("s1: %p\t", tf->s1); - 80202b62: 74ac ld a1,104(s1) - 80202b64: 00007517 auipc a0,0x7 - 80202b68: d4c50513 addi a0,a0,-692 # 802098b0 <digits+0x530> - 80202b6c: ffffd097 auipc ra,0xffffd - 80202b70: 622080e7 jalr 1570(ra) # 8020018e <printf> + 80202db6: 74ac ld a1,104(s1) + 80202db8: 00007517 auipc a0,0x7 + 80202dbc: af850513 addi a0,a0,-1288 # 802098b0 <digits+0x530> + 80202dc0: ffffd097 auipc ra,0xffffd + 80202dc4: 3ce080e7 jalr 974(ra) # 8020018e <printf> printf("s2: %p\t", tf->s2); - 80202b74: 78cc ld a1,176(s1) - 80202b76: 00007517 auipc a0,0x7 - 80202b7a: d4250513 addi a0,a0,-702 # 802098b8 <digits+0x538> - 80202b7e: ffffd097 auipc ra,0xffffd - 80202b82: 610080e7 jalr 1552(ra) # 8020018e <printf> + 80202dc8: 78cc ld a1,176(s1) + 80202dca: 00007517 auipc a0,0x7 + 80202dce: aee50513 addi a0,a0,-1298 # 802098b8 <digits+0x538> + 80202dd2: ffffd097 auipc ra,0xffffd + 80202dd6: 3bc080e7 jalr 956(ra) # 8020018e <printf> printf("s3: %p\t", tf->s3); - 80202b86: 7ccc ld a1,184(s1) - 80202b88: 00007517 auipc a0,0x7 - 80202b8c: d3850513 addi a0,a0,-712 # 802098c0 <digits+0x540> - 80202b90: ffffd097 auipc ra,0xffffd - 80202b94: 5fe080e7 jalr 1534(ra) # 8020018e <printf> + 80202dda: 7ccc ld a1,184(s1) + 80202ddc: 00007517 auipc a0,0x7 + 80202de0: ae450513 addi a0,a0,-1308 # 802098c0 <digits+0x540> + 80202de4: ffffd097 auipc ra,0xffffd + 80202de8: 3aa080e7 jalr 938(ra) # 8020018e <printf> printf("s4: %p\n", tf->s4); - 80202b98: 60ec ld a1,192(s1) - 80202b9a: 00007517 auipc a0,0x7 - 80202b9e: d2e50513 addi a0,a0,-722 # 802098c8 <digits+0x548> - 80202ba2: ffffd097 auipc ra,0xffffd - 80202ba6: 5ec080e7 jalr 1516(ra) # 8020018e <printf> + 80202dec: 60ec ld a1,192(s1) + 80202dee: 00007517 auipc a0,0x7 + 80202df2: ada50513 addi a0,a0,-1318 # 802098c8 <digits+0x548> + 80202df6: ffffd097 auipc ra,0xffffd + 80202dfa: 398080e7 jalr 920(ra) # 8020018e <printf> printf("s5: %p\t", tf->s5); - 80202baa: 64ec ld a1,200(s1) - 80202bac: 00007517 auipc a0,0x7 - 80202bb0: d2450513 addi a0,a0,-732 # 802098d0 <digits+0x550> - 80202bb4: ffffd097 auipc ra,0xffffd - 80202bb8: 5da080e7 jalr 1498(ra) # 8020018e <printf> + 80202dfe: 64ec ld a1,200(s1) + 80202e00: 00007517 auipc a0,0x7 + 80202e04: ad050513 addi a0,a0,-1328 # 802098d0 <digits+0x550> + 80202e08: ffffd097 auipc ra,0xffffd + 80202e0c: 386080e7 jalr 902(ra) # 8020018e <printf> printf("s6: %p\t", tf->s6); - 80202bbc: 68ec ld a1,208(s1) - 80202bbe: 00007517 auipc a0,0x7 - 80202bc2: d1a50513 addi a0,a0,-742 # 802098d8 <digits+0x558> - 80202bc6: ffffd097 auipc ra,0xffffd - 80202bca: 5c8080e7 jalr 1480(ra) # 8020018e <printf> + 80202e10: 68ec ld a1,208(s1) + 80202e12: 00007517 auipc a0,0x7 + 80202e16: ac650513 addi a0,a0,-1338 # 802098d8 <digits+0x558> + 80202e1a: ffffd097 auipc ra,0xffffd + 80202e1e: 374080e7 jalr 884(ra) # 8020018e <printf> printf("s7: %p\t", tf->s7); - 80202bce: 6cec ld a1,216(s1) - 80202bd0: 00007517 auipc a0,0x7 - 80202bd4: d1050513 addi a0,a0,-752 # 802098e0 <digits+0x560> - 80202bd8: ffffd097 auipc ra,0xffffd - 80202bdc: 5b6080e7 jalr 1462(ra) # 8020018e <printf> + 80202e22: 6cec ld a1,216(s1) + 80202e24: 00007517 auipc a0,0x7 + 80202e28: abc50513 addi a0,a0,-1348 # 802098e0 <digits+0x560> + 80202e2c: ffffd097 auipc ra,0xffffd + 80202e30: 362080e7 jalr 866(ra) # 8020018e <printf> printf("s8: %p\n", tf->s8); - 80202be0: 70ec ld a1,224(s1) - 80202be2: 00007517 auipc a0,0x7 - 80202be6: d0650513 addi a0,a0,-762 # 802098e8 <digits+0x568> - 80202bea: ffffd097 auipc ra,0xffffd - 80202bee: 5a4080e7 jalr 1444(ra) # 8020018e <printf> + 80202e34: 70ec ld a1,224(s1) + 80202e36: 00007517 auipc a0,0x7 + 80202e3a: ab250513 addi a0,a0,-1358 # 802098e8 <digits+0x568> + 80202e3e: ffffd097 auipc ra,0xffffd + 80202e42: 350080e7 jalr 848(ra) # 8020018e <printf> printf("s9: %p\t", tf->s9); - 80202bf2: 74ec ld a1,232(s1) - 80202bf4: 00007517 auipc a0,0x7 - 80202bf8: cfc50513 addi a0,a0,-772 # 802098f0 <digits+0x570> - 80202bfc: ffffd097 auipc ra,0xffffd - 80202c00: 592080e7 jalr 1426(ra) # 8020018e <printf> + 80202e46: 74ec ld a1,232(s1) + 80202e48: 00007517 auipc a0,0x7 + 80202e4c: aa850513 addi a0,a0,-1368 # 802098f0 <digits+0x570> + 80202e50: ffffd097 auipc ra,0xffffd + 80202e54: 33e080e7 jalr 830(ra) # 8020018e <printf> printf("s10: %p\t", tf->s10); - 80202c04: 78ec ld a1,240(s1) - 80202c06: 00007517 auipc a0,0x7 - 80202c0a: cf250513 addi a0,a0,-782 # 802098f8 <digits+0x578> - 80202c0e: ffffd097 auipc ra,0xffffd - 80202c12: 580080e7 jalr 1408(ra) # 8020018e <printf> + 80202e58: 78ec ld a1,240(s1) + 80202e5a: 00007517 auipc a0,0x7 + 80202e5e: a9e50513 addi a0,a0,-1378 # 802098f8 <digits+0x578> + 80202e62: ffffd097 auipc ra,0xffffd + 80202e66: 32c080e7 jalr 812(ra) # 8020018e <printf> printf("s11: %p\t", tf->s11); - 80202c16: 7cec ld a1,248(s1) - 80202c18: 00007517 auipc a0,0x7 - 80202c1c: cf050513 addi a0,a0,-784 # 80209908 <digits+0x588> - 80202c20: ffffd097 auipc ra,0xffffd - 80202c24: 56e080e7 jalr 1390(ra) # 8020018e <printf> + 80202e6a: 7cec ld a1,248(s1) + 80202e6c: 00007517 auipc a0,0x7 + 80202e70: a9c50513 addi a0,a0,-1380 # 80209908 <digits+0x588> + 80202e74: ffffd097 auipc ra,0xffffd + 80202e78: 31a080e7 jalr 794(ra) # 8020018e <printf> printf("ra: %p\n", tf->ra); - 80202c28: 748c ld a1,40(s1) - 80202c2a: 00007517 auipc a0,0x7 - 80202c2e: 9e650513 addi a0,a0,-1562 # 80209610 <digits+0x290> - 80202c32: ffffd097 auipc ra,0xffffd - 80202c36: 55c080e7 jalr 1372(ra) # 8020018e <printf> + 80202e7c: 748c ld a1,40(s1) + 80202e7e: 00006517 auipc a0,0x6 + 80202e82: 79250513 addi a0,a0,1938 # 80209610 <digits+0x290> + 80202e86: ffffd097 auipc ra,0xffffd + 80202e8a: 308080e7 jalr 776(ra) # 8020018e <printf> printf("sp: %p\t", tf->sp); - 80202c3a: 788c ld a1,48(s1) - 80202c3c: 00007517 auipc a0,0x7 - 80202c40: cdc50513 addi a0,a0,-804 # 80209918 <digits+0x598> - 80202c44: ffffd097 auipc ra,0xffffd - 80202c48: 54a080e7 jalr 1354(ra) # 8020018e <printf> + 80202e8e: 788c ld a1,48(s1) + 80202e90: 00007517 auipc a0,0x7 + 80202e94: a8850513 addi a0,a0,-1400 # 80209918 <digits+0x598> + 80202e98: ffffd097 auipc ra,0xffffd + 80202e9c: 2f6080e7 jalr 758(ra) # 8020018e <printf> printf("gp: %p\t", tf->gp); - 80202c4c: 7c8c ld a1,56(s1) - 80202c4e: 00007517 auipc a0,0x7 - 80202c52: cd250513 addi a0,a0,-814 # 80209920 <digits+0x5a0> - 80202c56: ffffd097 auipc ra,0xffffd - 80202c5a: 538080e7 jalr 1336(ra) # 8020018e <printf> + 80202ea0: 7c8c ld a1,56(s1) + 80202ea2: 00007517 auipc a0,0x7 + 80202ea6: a7e50513 addi a0,a0,-1410 # 80209920 <digits+0x5a0> + 80202eaa: ffffd097 auipc ra,0xffffd + 80202eae: 2e4080e7 jalr 740(ra) # 8020018e <printf> printf("tp: %p\t", tf->tp); - 80202c5e: 60ac ld a1,64(s1) - 80202c60: 00007517 auipc a0,0x7 - 80202c64: cc850513 addi a0,a0,-824 # 80209928 <digits+0x5a8> - 80202c68: ffffd097 auipc ra,0xffffd - 80202c6c: 526080e7 jalr 1318(ra) # 8020018e <printf> + 80202eb2: 60ac ld a1,64(s1) + 80202eb4: 00007517 auipc a0,0x7 + 80202eb8: a7450513 addi a0,a0,-1420 # 80209928 <digits+0x5a8> + 80202ebc: ffffd097 auipc ra,0xffffd + 80202ec0: 2d2080e7 jalr 722(ra) # 8020018e <printf> printf("epc: %p\n", tf->epc); - 80202c70: 6c8c ld a1,24(s1) - 80202c72: 00007517 auipc a0,0x7 - 80202c76: cbe50513 addi a0,a0,-834 # 80209930 <digits+0x5b0> - 80202c7a: ffffd097 auipc ra,0xffffd - 80202c7e: 514080e7 jalr 1300(ra) # 8020018e <printf> -} - 80202c82: 60e2 ld ra,24(sp) - 80202c84: 6442 ld s0,16(sp) - 80202c86: 64a2 ld s1,8(sp) - 80202c88: 6105 addi sp,sp,32 - 80202c8a: 8082 ret - -0000000080202c8c <argraw>: + 80202ec4: 6c8c ld a1,24(s1) + 80202ec6: 00007517 auipc a0,0x7 + 80202eca: a6a50513 addi a0,a0,-1430 # 80209930 <digits+0x5b0> + 80202ece: ffffd097 auipc ra,0xffffd + 80202ed2: 2c0080e7 jalr 704(ra) # 8020018e <printf> +} + 80202ed6: 60e2 ld ra,24(sp) + 80202ed8: 6442 ld s0,16(sp) + 80202eda: 64a2 ld s1,8(sp) + 80202edc: 6105 addi sp,sp,32 + 80202ede: 8082 ret + +0000000080202ee0 <argraw>: return strlen(buf); } static uint64 argraw(int n) { - 80202c8c: 1101 addi sp,sp,-32 - 80202c8e: ec06 sd ra,24(sp) - 80202c90: e822 sd s0,16(sp) - 80202c92: e426 sd s1,8(sp) - 80202c94: 1000 addi s0,sp,32 - 80202c96: 84aa mv s1,a0 + 80202ee0: 1101 addi sp,sp,-32 + 80202ee2: ec06 sd ra,24(sp) + 80202ee4: e822 sd s0,16(sp) + 80202ee6: e426 sd s1,8(sp) + 80202ee8: 1000 addi s0,sp,32 + 80202eea: 84aa mv s1,a0 struct proc *p = myproc(); - 80202c98: fffff097 auipc ra,0xfffff - 80202c9c: da4080e7 jalr -604(ra) # 80201a3c <myproc> + 80202eec: fffff097 auipc ra,0xfffff + 80202ef0: b50080e7 jalr -1200(ra) # 80201a3c <myproc> switch (n) { - 80202ca0: 4795 li a5,5 - 80202ca2: 0497e163 bltu a5,s1,80202ce4 <argraw+0x58> - 80202ca6: 048a slli s1,s1,0x2 - 80202ca8: 00007717 auipc a4,0x7 - 80202cac: e0870713 addi a4,a4,-504 # 80209ab0 <digits+0x730> - 80202cb0: 94ba add s1,s1,a4 - 80202cb2: 409c lw a5,0(s1) - 80202cb4: 97ba add a5,a5,a4 - 80202cb6: 8782 jr a5 + 80202ef4: 4795 li a5,5 + 80202ef6: 0497e163 bltu a5,s1,80202f38 <argraw+0x58> + 80202efa: 048a slli s1,s1,0x2 + 80202efc: 00007717 auipc a4,0x7 + 80202f00: bec70713 addi a4,a4,-1044 # 80209ae8 <digits+0x768> + 80202f04: 94ba add s1,s1,a4 + 80202f06: 409c lw a5,0(s1) + 80202f08: 97ba add a5,a5,a4 + 80202f0a: 8782 jr a5 case 0: return p->trapframe->a0; - 80202cb8: 713c ld a5,96(a0) - 80202cba: 7ba8 ld a0,112(a5) + 80202f0c: 713c ld a5,96(a0) + 80202f0e: 7ba8 ld a0,112(a5) case 5: return p->trapframe->a5; } panic("argraw"); return -1; } - 80202cbc: 60e2 ld ra,24(sp) - 80202cbe: 6442 ld s0,16(sp) - 80202cc0: 64a2 ld s1,8(sp) - 80202cc2: 6105 addi sp,sp,32 - 80202cc4: 8082 ret + 80202f10: 60e2 ld ra,24(sp) + 80202f12: 6442 ld s0,16(sp) + 80202f14: 64a2 ld s1,8(sp) + 80202f16: 6105 addi sp,sp,32 + 80202f18: 8082 ret return p->trapframe->a1; - 80202cc6: 713c ld a5,96(a0) - 80202cc8: 7fa8 ld a0,120(a5) - 80202cca: bfcd j 80202cbc <argraw+0x30> + 80202f1a: 713c ld a5,96(a0) + 80202f1c: 7fa8 ld a0,120(a5) + 80202f1e: bfcd j 80202f10 <argraw+0x30> return p->trapframe->a2; - 80202ccc: 713c ld a5,96(a0) - 80202cce: 63c8 ld a0,128(a5) - 80202cd0: b7f5 j 80202cbc <argraw+0x30> + 80202f20: 713c ld a5,96(a0) + 80202f22: 63c8 ld a0,128(a5) + 80202f24: b7f5 j 80202f10 <argraw+0x30> return p->trapframe->a3; - 80202cd2: 713c ld a5,96(a0) - 80202cd4: 67c8 ld a0,136(a5) - 80202cd6: b7dd j 80202cbc <argraw+0x30> + 80202f26: 713c ld a5,96(a0) + 80202f28: 67c8 ld a0,136(a5) + 80202f2a: b7dd j 80202f10 <argraw+0x30> return p->trapframe->a4; - 80202cd8: 713c ld a5,96(a0) - 80202cda: 6bc8 ld a0,144(a5) - 80202cdc: b7c5 j 80202cbc <argraw+0x30> + 80202f2c: 713c ld a5,96(a0) + 80202f2e: 6bc8 ld a0,144(a5) + 80202f30: b7c5 j 80202f10 <argraw+0x30> return p->trapframe->a5; - 80202cde: 713c ld a5,96(a0) - 80202ce0: 6fc8 ld a0,152(a5) - 80202ce2: bfe9 j 80202cbc <argraw+0x30> + 80202f32: 713c ld a5,96(a0) + 80202f34: 6fc8 ld a0,152(a5) + 80202f36: bfe9 j 80202f10 <argraw+0x30> panic("argraw"); - 80202ce4: 00007517 auipc a0,0x7 - 80202ce8: c5c50513 addi a0,a0,-932 # 80209940 <digits+0x5c0> - 80202cec: ffffd097 auipc ra,0xffffd - 80202cf0: 458080e7 jalr 1112(ra) # 80200144 <panic> + 80202f38: 00007517 auipc a0,0x7 + 80202f3c: a0850513 addi a0,a0,-1528 # 80209940 <digits+0x5c0> + 80202f40: ffffd097 auipc ra,0xffffd + 80202f44: 204080e7 jalr 516(ra) # 80200144 <panic> -0000000080202cf4 <sys_sysinfo>: +0000000080202f48 <sys_sysinfo>: return 0; } uint64 sys_sysinfo(void) { - 80202cf4: 7179 addi sp,sp,-48 - 80202cf6: f406 sd ra,40(sp) - 80202cf8: f022 sd s0,32(sp) - 80202cfa: ec26 sd s1,24(sp) - 80202cfc: 1800 addi s0,sp,48 + 80202f48: 7179 addi sp,sp,-48 + 80202f4a: f406 sd ra,40(sp) + 80202f4c: f022 sd s0,32(sp) + 80202f4e: ec26 sd s1,24(sp) + 80202f50: 1800 addi s0,sp,48 *ip = argraw(n); - 80202cfe: 4501 li a0,0 - 80202d00: 00000097 auipc ra,0x0 - 80202d04: f8c080e7 jalr -116(ra) # 80202c8c <argraw> - 80202d08: 84aa mv s1,a0 + 80202f52: 4501 li a0,0 + 80202f54: 00000097 auipc ra,0x0 + 80202f58: f8c080e7 jalr -116(ra) # 80202ee0 <argraw> + 80202f5c: 84aa mv s1,a0 if (argaddr(0, &addr) < 0) { return -1; } struct sysinfo info; info.freemem = freemem_amount(); - 80202d0a: ffffe097 auipc ra,0xffffe - 80202d0e: 8b6080e7 jalr -1866(ra) # 802005c0 <freemem_amount> - 80202d12: fca43823 sd a0,-48(s0) + 80202f5e: ffffd097 auipc ra,0xffffd + 80202f62: 662080e7 jalr 1634(ra) # 802005c0 <freemem_amount> + 80202f66: fca43823 sd a0,-48(s0) info.nproc = procnum(); - 80202d16: 00000097 auipc ra,0x0 - 80202d1a: 91a080e7 jalr -1766(ra) # 80202630 <procnum> - 80202d1e: fca43c23 sd a0,-40(s0) + 80202f6a: fffff097 auipc ra,0xfffff + 80202f6e: 6c6080e7 jalr 1734(ra) # 80202630 <procnum> + 80202f72: fca43c23 sd a0,-40(s0) // if (copyout(p->pagetable, addr, (char *)&info, sizeof(info)) < 0) { if (copyout2(addr, (char *)&info, sizeof(info)) < 0) { - 80202d22: 4641 li a2,16 - 80202d24: fd040593 addi a1,s0,-48 - 80202d28: 8526 mv a0,s1 - 80202d2a: ffffe097 auipc ra,0xffffe - 80202d2e: 648080e7 jalr 1608(ra) # 80201372 <copyout2> + 80202f76: 4641 li a2,16 + 80202f78: fd040593 addi a1,s0,-48 + 80202f7c: 8526 mv a0,s1 + 80202f7e: ffffe097 auipc ra,0xffffe + 80202f82: 3f4080e7 jalr 1012(ra) # 80201372 <copyout2> return -1; } return 0; } - 80202d32: 957d srai a0,a0,0x3f - 80202d34: 70a2 ld ra,40(sp) - 80202d36: 7402 ld s0,32(sp) - 80202d38: 64e2 ld s1,24(sp) - 80202d3a: 6145 addi sp,sp,48 - 80202d3c: 8082 ret - -0000000080202d3e <fetchaddr>: -{ - 80202d3e: 1101 addi sp,sp,-32 - 80202d40: ec06 sd ra,24(sp) - 80202d42: e822 sd s0,16(sp) - 80202d44: e426 sd s1,8(sp) - 80202d46: e04a sd s2,0(sp) - 80202d48: 1000 addi s0,sp,32 - 80202d4a: 84aa mv s1,a0 - 80202d4c: 892e mv s2,a1 + 80202f86: 957d srai a0,a0,0x3f + 80202f88: 70a2 ld ra,40(sp) + 80202f8a: 7402 ld s0,32(sp) + 80202f8c: 64e2 ld s1,24(sp) + 80202f8e: 6145 addi sp,sp,48 + 80202f90: 8082 ret + +0000000080202f92 <fetchaddr>: +{ + 80202f92: 1101 addi sp,sp,-32 + 80202f94: ec06 sd ra,24(sp) + 80202f96: e822 sd s0,16(sp) + 80202f98: e426 sd s1,8(sp) + 80202f9a: e04a sd s2,0(sp) + 80202f9c: 1000 addi s0,sp,32 + 80202f9e: 84aa mv s1,a0 + 80202fa0: 892e mv s2,a1 struct proc *p = myproc(); - 80202d4e: fffff097 auipc ra,0xfffff - 80202d52: cee080e7 jalr -786(ra) # 80201a3c <myproc> + 80202fa2: fffff097 auipc ra,0xfffff + 80202fa6: a9a080e7 jalr -1382(ra) # 80201a3c <myproc> if(addr >= p->sz || addr+sizeof(uint64) > p->sz) - 80202d56: 653c ld a5,72(a0) - 80202d58: 02f4f763 bgeu s1,a5,80202d86 <fetchaddr+0x48> - 80202d5c: 00848713 addi a4,s1,8 - 80202d60: 02e7e563 bltu a5,a4,80202d8a <fetchaddr+0x4c> + 80202faa: 653c ld a5,72(a0) + 80202fac: 02f4f763 bgeu s1,a5,80202fda <fetchaddr+0x48> + 80202fb0: 00848713 addi a4,s1,8 + 80202fb4: 02e7e563 bltu a5,a4,80202fde <fetchaddr+0x4c> if(copyin2((char *)ip, addr, sizeof(*ip)) != 0) - 80202d64: 4621 li a2,8 - 80202d66: 85a6 mv a1,s1 - 80202d68: 854a mv a0,s2 - 80202d6a: ffffe097 auipc ra,0xffffe - 80202d6e: 6e8080e7 jalr 1768(ra) # 80201452 <copyin2> - 80202d72: 00a03533 snez a0,a0 - 80202d76: 40a00533 neg a0,a0 -} - 80202d7a: 60e2 ld ra,24(sp) - 80202d7c: 6442 ld s0,16(sp) - 80202d7e: 64a2 ld s1,8(sp) - 80202d80: 6902 ld s2,0(sp) - 80202d82: 6105 addi sp,sp,32 - 80202d84: 8082 ret + 80202fb8: 4621 li a2,8 + 80202fba: 85a6 mv a1,s1 + 80202fbc: 854a mv a0,s2 + 80202fbe: ffffe097 auipc ra,0xffffe + 80202fc2: 494080e7 jalr 1172(ra) # 80201452 <copyin2> + 80202fc6: 00a03533 snez a0,a0 + 80202fca: 40a00533 neg a0,a0 +} + 80202fce: 60e2 ld ra,24(sp) + 80202fd0: 6442 ld s0,16(sp) + 80202fd2: 64a2 ld s1,8(sp) + 80202fd4: 6902 ld s2,0(sp) + 80202fd6: 6105 addi sp,sp,32 + 80202fd8: 8082 ret return -1; - 80202d86: 557d li a0,-1 - 80202d88: bfcd j 80202d7a <fetchaddr+0x3c> - 80202d8a: 557d li a0,-1 - 80202d8c: b7fd j 80202d7a <fetchaddr+0x3c> - -0000000080202d8e <fetchstr>: -{ - 80202d8e: 1101 addi sp,sp,-32 - 80202d90: ec06 sd ra,24(sp) - 80202d92: e822 sd s0,16(sp) - 80202d94: e426 sd s1,8(sp) - 80202d96: 1000 addi s0,sp,32 - 80202d98: 84ae mv s1,a1 + 80202fda: 557d li a0,-1 + 80202fdc: bfcd j 80202fce <fetchaddr+0x3c> + 80202fde: 557d li a0,-1 + 80202fe0: b7fd j 80202fce <fetchaddr+0x3c> + +0000000080202fe2 <fetchstr>: +{ + 80202fe2: 1101 addi sp,sp,-32 + 80202fe4: ec06 sd ra,24(sp) + 80202fe6: e822 sd s0,16(sp) + 80202fe8: e426 sd s1,8(sp) + 80202fea: 1000 addi s0,sp,32 + 80202fec: 84ae mv s1,a1 int err = copyinstr2(buf, addr, max); - 80202d9a: 85aa mv a1,a0 - 80202d9c: 8526 mv a0,s1 - 80202d9e: ffffe097 auipc ra,0xffffe - 80202da2: 7b6080e7 jalr 1974(ra) # 80201554 <copyinstr2> + 80202fee: 85aa mv a1,a0 + 80202ff0: 8526 mv a0,s1 + 80202ff2: ffffe097 auipc ra,0xffffe + 80202ff6: 562080e7 jalr 1378(ra) # 80201554 <copyinstr2> if(err < 0) - 80202da6: 00054763 bltz a0,80202db4 <fetchstr+0x26> + 80202ffa: 00054763 bltz a0,80203008 <fetchstr+0x26> return strlen(buf); - 80202daa: 8526 mv a0,s1 - 80202dac: ffffe097 auipc ra,0xffffe - 80202db0: b3a080e7 jalr -1222(ra) # 802008e6 <strlen> -} - 80202db4: 60e2 ld ra,24(sp) - 80202db6: 6442 ld s0,16(sp) - 80202db8: 64a2 ld s1,8(sp) - 80202dba: 6105 addi sp,sp,32 - 80202dbc: 8082 ret - -0000000080202dbe <argint>: -{ - 80202dbe: 1101 addi sp,sp,-32 - 80202dc0: ec06 sd ra,24(sp) - 80202dc2: e822 sd s0,16(sp) - 80202dc4: e426 sd s1,8(sp) - 80202dc6: 1000 addi s0,sp,32 - 80202dc8: 84ae mv s1,a1 + 80202ffe: 8526 mv a0,s1 + 80203000: ffffe097 auipc ra,0xffffe + 80203004: 8e6080e7 jalr -1818(ra) # 802008e6 <strlen> +} + 80203008: 60e2 ld ra,24(sp) + 8020300a: 6442 ld s0,16(sp) + 8020300c: 64a2 ld s1,8(sp) + 8020300e: 6105 addi sp,sp,32 + 80203010: 8082 ret + +0000000080203012 <argint>: +{ + 80203012: 1101 addi sp,sp,-32 + 80203014: ec06 sd ra,24(sp) + 80203016: e822 sd s0,16(sp) + 80203018: e426 sd s1,8(sp) + 8020301a: 1000 addi s0,sp,32 + 8020301c: 84ae mv s1,a1 *ip = argraw(n); - 80202dca: 00000097 auipc ra,0x0 - 80202dce: ec2080e7 jalr -318(ra) # 80202c8c <argraw> - 80202dd2: c088 sw a0,0(s1) -} - 80202dd4: 4501 li a0,0 - 80202dd6: 60e2 ld ra,24(sp) - 80202dd8: 6442 ld s0,16(sp) - 80202dda: 64a2 ld s1,8(sp) - 80202ddc: 6105 addi sp,sp,32 - 80202dde: 8082 ret - -0000000080202de0 <sys_test_proc>: + 8020301e: 00000097 auipc ra,0x0 + 80203022: ec2080e7 jalr -318(ra) # 80202ee0 <argraw> + 80203026: c088 sw a0,0(s1) +} + 80203028: 4501 li a0,0 + 8020302a: 60e2 ld ra,24(sp) + 8020302c: 6442 ld s0,16(sp) + 8020302e: 64a2 ld s1,8(sp) + 80203030: 6105 addi sp,sp,32 + 80203032: 8082 ret + +0000000080203034 <sys_test_proc>: sys_test_proc(void) { - 80202de0: 1101 addi sp,sp,-32 - 80202de2: ec06 sd ra,24(sp) - 80202de4: e822 sd s0,16(sp) - 80202de6: 1000 addi s0,sp,32 + 80203034: 1101 addi sp,sp,-32 + 80203036: ec06 sd ra,24(sp) + 80203038: e822 sd s0,16(sp) + 8020303a: 1000 addi s0,sp,32 argint(0, &n); - 80202de8: fec40593 addi a1,s0,-20 - 80202dec: 4501 li a0,0 - 80202dee: 00000097 auipc ra,0x0 - 80202df2: fd0080e7 jalr -48(ra) # 80202dbe <argint> + 8020303c: fec40593 addi a1,s0,-20 + 80203040: 4501 li a0,0 + 80203042: 00000097 auipc ra,0x0 + 80203046: fd0080e7 jalr -48(ra) # 80203012 <argint> printf("hello world from proc %d, hart %d, arg %d\n", myproc()->pid, r_tp(), n); - 80202df6: fffff097 auipc ra,0xfffff - 80202dfa: c46080e7 jalr -954(ra) # 80201a3c <myproc> - 80202dfe: 8612 mv a2,tp - 80202e00: fec42683 lw a3,-20(s0) - 80202e04: 5d0c lw a1,56(a0) - 80202e06: 00007517 auipc a0,0x7 - 80202e0a: b4250513 addi a0,a0,-1214 # 80209948 <digits+0x5c8> - 80202e0e: ffffd097 auipc ra,0xffffd - 80202e12: 380080e7 jalr 896(ra) # 8020018e <printf> -} - 80202e16: 4501 li a0,0 - 80202e18: 60e2 ld ra,24(sp) - 80202e1a: 6442 ld s0,16(sp) - 80202e1c: 6105 addi sp,sp,32 - 80202e1e: 8082 ret - -0000000080202e20 <argaddr>: -{ - 80202e20: 1101 addi sp,sp,-32 - 80202e22: ec06 sd ra,24(sp) - 80202e24: e822 sd s0,16(sp) - 80202e26: e426 sd s1,8(sp) - 80202e28: 1000 addi s0,sp,32 - 80202e2a: 84ae mv s1,a1 + 8020304a: fffff097 auipc ra,0xfffff + 8020304e: 9f2080e7 jalr -1550(ra) # 80201a3c <myproc> + 80203052: 8612 mv a2,tp + 80203054: fec42683 lw a3,-20(s0) + 80203058: 5d0c lw a1,56(a0) + 8020305a: 00007517 auipc a0,0x7 + 8020305e: 8ee50513 addi a0,a0,-1810 # 80209948 <digits+0x5c8> + 80203062: ffffd097 auipc ra,0xffffd + 80203066: 12c080e7 jalr 300(ra) # 8020018e <printf> +} + 8020306a: 4501 li a0,0 + 8020306c: 60e2 ld ra,24(sp) + 8020306e: 6442 ld s0,16(sp) + 80203070: 6105 addi sp,sp,32 + 80203072: 8082 ret + +0000000080203074 <argaddr>: +{ + 80203074: 1101 addi sp,sp,-32 + 80203076: ec06 sd ra,24(sp) + 80203078: e822 sd s0,16(sp) + 8020307a: e426 sd s1,8(sp) + 8020307c: 1000 addi s0,sp,32 + 8020307e: 84ae mv s1,a1 *ip = argraw(n); - 80202e2c: 00000097 auipc ra,0x0 - 80202e30: e60080e7 jalr -416(ra) # 80202c8c <argraw> - 80202e34: e088 sd a0,0(s1) -} - 80202e36: 4501 li a0,0 - 80202e38: 60e2 ld ra,24(sp) - 80202e3a: 6442 ld s0,16(sp) - 80202e3c: 64a2 ld s1,8(sp) - 80202e3e: 6105 addi sp,sp,32 - 80202e40: 8082 ret - -0000000080202e42 <argstr>: -{ - 80202e42: 1101 addi sp,sp,-32 - 80202e44: ec06 sd ra,24(sp) - 80202e46: e822 sd s0,16(sp) - 80202e48: e426 sd s1,8(sp) - 80202e4a: e04a sd s2,0(sp) - 80202e4c: 1000 addi s0,sp,32 - 80202e4e: 84ae mv s1,a1 - 80202e50: 8932 mv s2,a2 + 80203080: 00000097 auipc ra,0x0 + 80203084: e60080e7 jalr -416(ra) # 80202ee0 <argraw> + 80203088: e088 sd a0,0(s1) +} + 8020308a: 4501 li a0,0 + 8020308c: 60e2 ld ra,24(sp) + 8020308e: 6442 ld s0,16(sp) + 80203090: 64a2 ld s1,8(sp) + 80203092: 6105 addi sp,sp,32 + 80203094: 8082 ret + +0000000080203096 <argstr>: +{ + 80203096: 1101 addi sp,sp,-32 + 80203098: ec06 sd ra,24(sp) + 8020309a: e822 sd s0,16(sp) + 8020309c: e426 sd s1,8(sp) + 8020309e: e04a sd s2,0(sp) + 802030a0: 1000 addi s0,sp,32 + 802030a2: 84ae mv s1,a1 + 802030a4: 8932 mv s2,a2 *ip = argraw(n); - 80202e52: 00000097 auipc ra,0x0 - 80202e56: e3a080e7 jalr -454(ra) # 80202c8c <argraw> + 802030a6: 00000097 auipc ra,0x0 + 802030aa: e3a080e7 jalr -454(ra) # 80202ee0 <argraw> return fetchstr(addr, buf, max); - 80202e5a: 864a mv a2,s2 - 80202e5c: 85a6 mv a1,s1 - 80202e5e: 00000097 auipc ra,0x0 - 80202e62: f30080e7 jalr -208(ra) # 80202d8e <fetchstr> -} - 80202e66: 60e2 ld ra,24(sp) - 80202e68: 6442 ld s0,16(sp) - 80202e6a: 64a2 ld s1,8(sp) - 80202e6c: 6902 ld s2,0(sp) - 80202e6e: 6105 addi sp,sp,32 - 80202e70: 8082 ret - -0000000080202e72 <syscall>: -{ - 80202e72: 7179 addi sp,sp,-48 - 80202e74: f406 sd ra,40(sp) - 80202e76: f022 sd s0,32(sp) - 80202e78: ec26 sd s1,24(sp) - 80202e7a: e84a sd s2,16(sp) - 80202e7c: e44e sd s3,8(sp) - 80202e7e: 1800 addi s0,sp,48 + 802030ae: 864a mv a2,s2 + 802030b0: 85a6 mv a1,s1 + 802030b2: 00000097 auipc ra,0x0 + 802030b6: f30080e7 jalr -208(ra) # 80202fe2 <fetchstr> +} + 802030ba: 60e2 ld ra,24(sp) + 802030bc: 6442 ld s0,16(sp) + 802030be: 64a2 ld s1,8(sp) + 802030c0: 6902 ld s2,0(sp) + 802030c2: 6105 addi sp,sp,32 + 802030c4: 8082 ret + +00000000802030c6 <syscall>: +{ + 802030c6: 7179 addi sp,sp,-48 + 802030c8: f406 sd ra,40(sp) + 802030ca: f022 sd s0,32(sp) + 802030cc: ec26 sd s1,24(sp) + 802030ce: e84a sd s2,16(sp) + 802030d0: e44e sd s3,8(sp) + 802030d2: 1800 addi s0,sp,48 struct proc *p = myproc(); - 80202e80: fffff097 auipc ra,0xfffff - 80202e84: bbc080e7 jalr -1092(ra) # 80201a3c <myproc> - 80202e88: 84aa mv s1,a0 + 802030d4: fffff097 auipc ra,0xfffff + 802030d8: 968080e7 jalr -1688(ra) # 80201a3c <myproc> + 802030dc: 84aa mv s1,a0 num = p->trapframe->a7; - 80202e8a: 06053903 ld s2,96(a0) - 80202e8e: 0a893783 ld a5,168(s2) - 80202e92: 0007899b sext.w s3,a5 + 802030de: 06053903 ld s2,96(a0) + 802030e2: 0a893783 ld a5,168(s2) + 802030e6: 0007899b sext.w s3,a5 if(num > 0 && num < NELEM(syscalls) && syscalls[num]) { - 80202e96: 37fd addiw a5,a5,-1 - 80202e98: 0dc00713 li a4,220 - 80202e9c: 04f76763 bltu a4,a5,80202eea <syscall+0x78> - 80202ea0: 00399713 slli a4,s3,0x3 - 80202ea4: 00008797 auipc a5,0x8 - 80202ea8: d9478793 addi a5,a5,-620 # 8020ac38 <syscalls> - 80202eac: 97ba add a5,a5,a4 - 80202eae: 639c ld a5,0(a5) - 80202eb0: cf8d beqz a5,80202eea <syscall+0x78> + 802030ea: 37fd addiw a5,a5,-1 + 802030ec: 10300713 li a4,259 + 802030f0: 04f76763 bltu a4,a5,8020313e <syscall+0x78> + 802030f4: 00399713 slli a4,s3,0x3 + 802030f8: 00008797 auipc a5,0x8 + 802030fc: b4078793 addi a5,a5,-1216 # 8020ac38 <syscalls> + 80203100: 97ba add a5,a5,a4 + 80203102: 639c ld a5,0(a5) + 80203104: cf8d beqz a5,8020313e <syscall+0x78> p->trapframe->a0 = syscalls[num](); - 80202eb2: 9782 jalr a5 - 80202eb4: 06a93823 sd a0,112(s2) + 80203106: 9782 jalr a5 + 80203108: 06a93823 sd a0,112(s2) if ((p->tmask & (1 << num)) != 0) { - 80202eb8: 1704a783 lw a5,368(s1) - 80202ebc: 4137d7bb sraw a5,a5,s3 - 80202ec0: 8b85 andi a5,a5,1 - 80202ec2: c3b9 beqz a5,80202f08 <syscall+0x96> + 8020310c: 1704a783 lw a5,368(s1) + 80203110: 4137d7bb sraw a5,a5,s3 + 80203114: 8b85 andi a5,a5,1 + 80203116: c3b9 beqz a5,8020315c <syscall+0x96> printf("pid %d: %s -> %d\n", p->pid, sysnames[num], p->trapframe->a0); - 80202ec4: 70b8 ld a4,96(s1) - 80202ec6: 098e slli s3,s3,0x3 - 80202ec8: 00008797 auipc a5,0x8 - 80202ecc: 46078793 addi a5,a5,1120 # 8020b328 <sysnames> - 80202ed0: 97ce add a5,a5,s3 - 80202ed2: 7b34 ld a3,112(a4) - 80202ed4: 6390 ld a2,0(a5) - 80202ed6: 5c8c lw a1,56(s1) - 80202ed8: 00007517 auipc a0,0x7 - 80202edc: aa050513 addi a0,a0,-1376 # 80209978 <digits+0x5f8> - 80202ee0: ffffd097 auipc ra,0xffffd - 80202ee4: 2ae080e7 jalr 686(ra) # 8020018e <printf> - 80202ee8: a005 j 80202f08 <syscall+0x96> + 80203118: 70b8 ld a4,96(s1) + 8020311a: 098e slli s3,s3,0x3 + 8020311c: 00008797 auipc a5,0x8 + 80203120: 34478793 addi a5,a5,836 # 8020b460 <sysnames> + 80203124: 97ce add a5,a5,s3 + 80203126: 7b34 ld a3,112(a4) + 80203128: 6390 ld a2,0(a5) + 8020312a: 5c8c lw a1,56(s1) + 8020312c: 00007517 auipc a0,0x7 + 80203130: 84c50513 addi a0,a0,-1972 # 80209978 <digits+0x5f8> + 80203134: ffffd097 auipc ra,0xffffd + 80203138: 05a080e7 jalr 90(ra) # 8020018e <printf> + 8020313c: a005 j 8020315c <syscall+0x96> printf("pid %d %s: unknown sys call %d\n", - 80202eea: 86ce mv a3,s3 - 80202eec: 16048613 addi a2,s1,352 - 80202ef0: 5c8c lw a1,56(s1) - 80202ef2: 00007517 auipc a0,0x7 - 80202ef6: a9e50513 addi a0,a0,-1378 # 80209990 <digits+0x610> - 80202efa: ffffd097 auipc ra,0xffffd - 80202efe: 294080e7 jalr 660(ra) # 8020018e <printf> + 8020313e: 86ce mv a3,s3 + 80203140: 16048613 addi a2,s1,352 + 80203144: 5c8c lw a1,56(s1) + 80203146: 00007517 auipc a0,0x7 + 8020314a: 84a50513 addi a0,a0,-1974 # 80209990 <digits+0x610> + 8020314e: ffffd097 auipc ra,0xffffd + 80203152: 040080e7 jalr 64(ra) # 8020018e <printf> p->trapframe->a0 = -1; - 80202f02: 70bc ld a5,96(s1) - 80202f04: 577d li a4,-1 - 80202f06: fbb8 sd a4,112(a5) + 80203156: 70bc ld a5,96(s1) + 80203158: 577d li a4,-1 + 8020315a: fbb8 sd a4,112(a5) } - 80202f08: 70a2 ld ra,40(sp) - 80202f0a: 7402 ld s0,32(sp) - 80202f0c: 64e2 ld s1,24(sp) - 80202f0e: 6942 ld s2,16(sp) - 80202f10: 69a2 ld s3,8(sp) - 80202f12: 6145 addi sp,sp,48 - 80202f14: 8082 ret + 8020315c: 70a2 ld ra,40(sp) + 8020315e: 7402 ld s0,32(sp) + 80203160: 64e2 ld s1,24(sp) + 80203162: 6942 ld s2,16(sp) + 80203164: 69a2 ld s3,8(sp) + 80203166: 6145 addi sp,sp,48 + 80203168: 8082 ret -0000000080202f16 <sys_exec>: +000000008020316a <sys_exec>: extern int exec(char *path, char **argv); uint64 sys_exec(void) { - 80202f16: d9010113 addi sp,sp,-624 - 80202f1a: 26113423 sd ra,616(sp) - 80202f1e: 26813023 sd s0,608(sp) - 80202f22: 24913c23 sd s1,600(sp) - 80202f26: 25213823 sd s2,592(sp) - 80202f2a: 25313423 sd s3,584(sp) - 80202f2e: 25413023 sd s4,576(sp) - 80202f32: 23513c23 sd s5,568(sp) - 80202f36: 23613823 sd s6,560(sp) - 80202f3a: 23713423 sd s7,552(sp) - 80202f3e: 1c80 addi s0,sp,624 + 8020316a: d9010113 addi sp,sp,-624 + 8020316e: 26113423 sd ra,616(sp) + 80203172: 26813023 sd s0,608(sp) + 80203176: 24913c23 sd s1,600(sp) + 8020317a: 25213823 sd s2,592(sp) + 8020317e: 25313423 sd s3,584(sp) + 80203182: 25413023 sd s4,576(sp) + 80203186: 23513c23 sd s5,568(sp) + 8020318a: 23613823 sd s6,560(sp) + 8020318e: 23713423 sd s7,552(sp) + 80203192: 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){ - 80202f40: 10400613 li a2,260 - 80202f44: ea840593 addi a1,s0,-344 - 80202f48: 4501 li a0,0 - 80202f4a: 00000097 auipc ra,0x0 - 80202f4e: ef8080e7 jalr -264(ra) # 80202e42 <argstr> + 80203194: 10400613 li a2,260 + 80203198: ea840593 addi a1,s0,-344 + 8020319c: 4501 li a0,0 + 8020319e: 00000097 auipc ra,0x0 + 802031a2: ef8080e7 jalr -264(ra) # 80203096 <argstr> return -1; - 80202f52: 597d li s2,-1 + 802031a6: 597d li s2,-1 if(argstr(0, path, FAT32_MAX_PATH) < 0 || argaddr(1, &uargv) < 0){ - 80202f54: 0c054c63 bltz a0,8020302c <sys_exec+0x116> - 80202f58: da040593 addi a1,s0,-608 - 80202f5c: 4505 li a0,1 - 80202f5e: 00000097 auipc ra,0x0 - 80202f62: ec2080e7 jalr -318(ra) # 80202e20 <argaddr> - 80202f66: 0c054363 bltz a0,8020302c <sys_exec+0x116> + 802031a8: 0c054c63 bltz a0,80203280 <sys_exec+0x116> + 802031ac: da040593 addi a1,s0,-608 + 802031b0: 4505 li a0,1 + 802031b2: 00000097 auipc ra,0x0 + 802031b6: ec2080e7 jalr -318(ra) # 80203074 <argaddr> + 802031ba: 0c054363 bltz a0,80203280 <sys_exec+0x116> } memset(argv, 0, sizeof(argv)); - 80202f6a: da840a13 addi s4,s0,-600 - 80202f6e: 10000613 li a2,256 - 80202f72: 4581 li a1,0 - 80202f74: 8552 mv a0,s4 - 80202f76: ffffd097 auipc ra,0xffffd - 80202f7a: 7ec080e7 jalr 2028(ra) # 80200762 <memset> + 802031be: da840a13 addi s4,s0,-600 + 802031c2: 10000613 li a2,256 + 802031c6: 4581 li a1,0 + 802031c8: 8552 mv a0,s4 + 802031ca: ffffd097 auipc ra,0xffffd + 802031ce: 598080e7 jalr 1432(ra) # 80200762 <memset> for(i=0;; i++){ if(i >= NELEM(argv)){ - 80202f7e: 84d2 mv s1,s4 + 802031d2: 84d2 mv s1,s4 memset(argv, 0, sizeof(argv)); - 80202f80: 89d2 mv s3,s4 - 80202f82: 4901 li s2,0 + 802031d4: 89d2 mv s3,s4 + 802031d6: 4901 li s2,0 goto bad; } if(fetchaddr(uargv+sizeof(uint64)*i, (uint64*)&uarg) < 0){ - 80202f84: d9840a93 addi s5,s0,-616 + 802031d8: d9840a93 addi s5,s0,-616 if(i >= NELEM(argv)){ - 80202f88: 02000b13 li s6,32 - 80202f8c: 00090b9b sext.w s7,s2 + 802031dc: 02000b13 li s6,32 + 802031e0: 00090b9b sext.w s7,s2 if(fetchaddr(uargv+sizeof(uint64)*i, (uint64*)&uarg) < 0){ - 80202f90: 00391513 slli a0,s2,0x3 - 80202f94: 85d6 mv a1,s5 - 80202f96: da043783 ld a5,-608(s0) - 80202f9a: 953e add a0,a0,a5 - 80202f9c: 00000097 auipc ra,0x0 - 80202fa0: da2080e7 jalr -606(ra) # 80202d3e <fetchaddr> - 80202fa4: 02054a63 bltz a0,80202fd8 <sys_exec+0xc2> + 802031e4: 00391513 slli a0,s2,0x3 + 802031e8: 85d6 mv a1,s5 + 802031ea: da043783 ld a5,-608(s0) + 802031ee: 953e add a0,a0,a5 + 802031f0: 00000097 auipc ra,0x0 + 802031f4: da2080e7 jalr -606(ra) # 80202f92 <fetchaddr> + 802031f8: 02054a63 bltz a0,8020322c <sys_exec+0xc2> goto bad; } if(uarg == 0){ - 80202fa8: d9843783 ld a5,-616(s0) - 80202fac: c3b9 beqz a5,80202ff2 <sys_exec+0xdc> + 802031fc: d9843783 ld a5,-616(s0) + 80203200: c3b9 beqz a5,80203246 <sys_exec+0xdc> argv[i] = 0; break; } argv[i] = kalloc(); - 80202fae: ffffd097 auipc ra,0xffffd - 80202fb2: 5ac080e7 jalr 1452(ra) # 8020055a <kalloc> - 80202fb6: 85aa mv a1,a0 - 80202fb8: 00a9b023 sd a0,0(s3) + 80203202: ffffd097 auipc ra,0xffffd + 80203206: 358080e7 jalr 856(ra) # 8020055a <kalloc> + 8020320a: 85aa mv a1,a0 + 8020320c: 00a9b023 sd a0,0(s3) if(argv[i] == 0) - 80202fbc: cd11 beqz a0,80202fd8 <sys_exec+0xc2> + 80203210: cd11 beqz a0,8020322c <sys_exec+0xc2> goto bad; if(fetchstr(uarg, argv[i], PGSIZE) < 0) - 80202fbe: 6605 lui a2,0x1 - 80202fc0: d9843503 ld a0,-616(s0) - 80202fc4: 00000097 auipc ra,0x0 - 80202fc8: dca080e7 jalr -566(ra) # 80202d8e <fetchstr> - 80202fcc: 00054663 bltz a0,80202fd8 <sys_exec+0xc2> + 80203212: 6605 lui a2,0x1 + 80203214: d9843503 ld a0,-616(s0) + 80203218: 00000097 auipc ra,0x0 + 8020321c: dca080e7 jalr -566(ra) # 80202fe2 <fetchstr> + 80203220: 00054663 bltz a0,8020322c <sys_exec+0xc2> if(i >= NELEM(argv)){ - 80202fd0: 0905 addi s2,s2,1 - 80202fd2: 09a1 addi s3,s3,8 - 80202fd4: fb691ce3 bne s2,s6,80202f8c <sys_exec+0x76> + 80203224: 0905 addi s2,s2,1 + 80203226: 09a1 addi s3,s3,8 + 80203228: fb691ce3 bne s2,s6,802031e0 <sys_exec+0x76> kfree(argv[i]); return ret; bad: for(i = 0; i < NELEM(argv) && argv[i] != 0; i++) - 80202fd8: 100a0a13 addi s4,s4,256 - 80202fdc: 6088 ld a0,0(s1) - 80202fde: c531 beqz a0,8020302a <sys_exec+0x114> + 8020322c: 100a0a13 addi s4,s4,256 + 80203230: 6088 ld a0,0(s1) + 80203232: c531 beqz a0,8020327e <sys_exec+0x114> kfree(argv[i]); - 80202fe0: ffffd097 auipc ra,0xffffd - 80202fe4: 460080e7 jalr 1120(ra) # 80200440 <kfree> + 80203234: ffffd097 auipc ra,0xffffd + 80203238: 20c080e7 jalr 524(ra) # 80200440 <kfree> for(i = 0; i < NELEM(argv) && argv[i] != 0; i++) - 80202fe8: 04a1 addi s1,s1,8 - 80202fea: ff4499e3 bne s1,s4,80202fdc <sys_exec+0xc6> + 8020323c: 04a1 addi s1,s1,8 + 8020323e: ff4499e3 bne s1,s4,80203230 <sys_exec+0xc6> return -1; - 80202fee: 597d li s2,-1 - 80202ff0: a835 j 8020302c <sys_exec+0x116> + 80203242: 597d li s2,-1 + 80203244: a835 j 80203280 <sys_exec+0x116> argv[i] = 0; - 80202ff2: 0b8e slli s7,s7,0x3 - 80202ff4: fb0b8793 addi a5,s7,-80 - 80202ff8: 00878bb3 add s7,a5,s0 - 80202ffc: de0bbc23 sd zero,-520(s7) + 80203246: 0b8e slli s7,s7,0x3 + 80203248: fb0b8793 addi a5,s7,-80 + 8020324c: 00878bb3 add s7,a5,s0 + 80203250: de0bbc23 sd zero,-520(s7) int ret = exec(path, argv); - 80203000: da840593 addi a1,s0,-600 - 80203004: ea840513 addi a0,s0,-344 - 80203008: 00001097 auipc ra,0x1 - 8020300c: ee0080e7 jalr -288(ra) # 80203ee8 <exec> - 80203010: 892a mv s2,a0 + 80203254: da840593 addi a1,s0,-600 + 80203258: ea840513 addi a0,s0,-344 + 8020325c: 00001097 auipc ra,0x1 + 80203260: fa8080e7 jalr -88(ra) # 80204204 <exec> + 80203264: 892a mv s2,a0 for(i = 0; i < NELEM(argv) && argv[i] != 0; i++) - 80203012: 100a0a13 addi s4,s4,256 - 80203016: 6088 ld a0,0(s1) - 80203018: c911 beqz a0,8020302c <sys_exec+0x116> + 80203266: 100a0a13 addi s4,s4,256 + 8020326a: 6088 ld a0,0(s1) + 8020326c: c911 beqz a0,80203280 <sys_exec+0x116> kfree(argv[i]); - 8020301a: ffffd097 auipc ra,0xffffd - 8020301e: 426080e7 jalr 1062(ra) # 80200440 <kfree> + 8020326e: ffffd097 auipc ra,0xffffd + 80203272: 1d2080e7 jalr 466(ra) # 80200440 <kfree> for(i = 0; i < NELEM(argv) && argv[i] != 0; i++) - 80203022: 04a1 addi s1,s1,8 - 80203024: ff4499e3 bne s1,s4,80203016 <sys_exec+0x100> - 80203028: a011 j 8020302c <sys_exec+0x116> + 80203276: 04a1 addi s1,s1,8 + 80203278: ff4499e3 bne s1,s4,8020326a <sys_exec+0x100> + 8020327c: a011 j 80203280 <sys_exec+0x116> return -1; - 8020302a: 597d li s2,-1 -} - 8020302c: 854a mv a0,s2 - 8020302e: 26813083 ld ra,616(sp) - 80203032: 26013403 ld s0,608(sp) - 80203036: 25813483 ld s1,600(sp) - 8020303a: 25013903 ld s2,592(sp) - 8020303e: 24813983 ld s3,584(sp) - 80203042: 24013a03 ld s4,576(sp) - 80203046: 23813a83 ld s5,568(sp) - 8020304a: 23013b03 ld s6,560(sp) - 8020304e: 22813b83 ld s7,552(sp) - 80203052: 27010113 addi sp,sp,624 - 80203056: 8082 ret - -0000000080203058 <sys_exit>: + 8020327e: 597d li s2,-1 +} + 80203280: 854a mv a0,s2 + 80203282: 26813083 ld ra,616(sp) + 80203286: 26013403 ld s0,608(sp) + 8020328a: 25813483 ld s1,600(sp) + 8020328e: 25013903 ld s2,592(sp) + 80203292: 24813983 ld s3,584(sp) + 80203296: 24013a03 ld s4,576(sp) + 8020329a: 23813a83 ld s5,568(sp) + 8020329e: 23013b03 ld s6,560(sp) + 802032a2: 22813b83 ld s7,552(sp) + 802032a6: 27010113 addi sp,sp,624 + 802032aa: 8082 ret + +00000000802032ac <sys_exit>: uint64 sys_exit(void) { - 80203058: 1101 addi sp,sp,-32 - 8020305a: ec06 sd ra,24(sp) - 8020305c: e822 sd s0,16(sp) - 8020305e: 1000 addi s0,sp,32 + 802032ac: 1101 addi sp,sp,-32 + 802032ae: ec06 sd ra,24(sp) + 802032b0: e822 sd s0,16(sp) + 802032b2: 1000 addi s0,sp,32 int n; if(argint(0, &n) < 0) - 80203060: fec40593 addi a1,s0,-20 - 80203064: 4501 li a0,0 - 80203066: 00000097 auipc ra,0x0 - 8020306a: d58080e7 jalr -680(ra) # 80202dbe <argint> + 802032b4: fec40593 addi a1,s0,-20 + 802032b8: 4501 li a0,0 + 802032ba: 00000097 auipc ra,0x0 + 802032be: d58080e7 jalr -680(ra) # 80203012 <argint> return -1; - 8020306e: 57fd li a5,-1 + 802032c2: 57fd li a5,-1 if(argint(0, &n) < 0) - 80203070: 00054963 bltz a0,80203082 <sys_exit+0x2a> + 802032c4: 00054963 bltz a0,802032d6 <sys_exit+0x2a> exit(n); - 80203074: fec42503 lw a0,-20(s0) - 80203078: fffff097 auipc ra,0xfffff - 8020307c: 108080e7 jalr 264(ra) # 80202180 <exit> + 802032c8: fec42503 lw a0,-20(s0) + 802032cc: fffff097 auipc ra,0xfffff + 802032d0: eb4080e7 jalr -332(ra) # 80202180 <exit> return 0; // not reached - 80203080: 4781 li a5,0 + 802032d4: 4781 li a5,0 } - 80203082: 853e mv a0,a5 - 80203084: 60e2 ld ra,24(sp) - 80203086: 6442 ld s0,16(sp) - 80203088: 6105 addi sp,sp,32 - 8020308a: 8082 ret + 802032d6: 853e mv a0,a5 + 802032d8: 60e2 ld ra,24(sp) + 802032da: 6442 ld s0,16(sp) + 802032dc: 6105 addi sp,sp,32 + 802032de: 8082 ret -000000008020308c <sys_getpid>: +00000000802032e0 <sys_getpid>: uint64 sys_getpid(void) { - 8020308c: 1141 addi sp,sp,-16 - 8020308e: e406 sd ra,8(sp) - 80203090: e022 sd s0,0(sp) - 80203092: 0800 addi s0,sp,16 + 802032e0: 1141 addi sp,sp,-16 + 802032e2: e406 sd ra,8(sp) + 802032e4: e022 sd s0,0(sp) + 802032e6: 0800 addi s0,sp,16 return myproc()->pid; - 80203094: fffff097 auipc ra,0xfffff - 80203098: 9a8080e7 jalr -1624(ra) # 80201a3c <myproc> + 802032e8: ffffe097 auipc ra,0xffffe + 802032ec: 754080e7 jalr 1876(ra) # 80201a3c <myproc> } - 8020309c: 5d08 lw a0,56(a0) - 8020309e: 60a2 ld ra,8(sp) - 802030a0: 6402 ld s0,0(sp) - 802030a2: 0141 addi sp,sp,16 - 802030a4: 8082 ret + 802032f0: 5d08 lw a0,56(a0) + 802032f2: 60a2 ld ra,8(sp) + 802032f4: 6402 ld s0,0(sp) + 802032f6: 0141 addi sp,sp,16 + 802032f8: 8082 ret -00000000802030a6 <sys_getppid>: +00000000802032fa <sys_getppid>: uint64 sys_getppid(void) { - 802030a6: 1141 addi sp,sp,-16 - 802030a8: e406 sd ra,8(sp) - 802030aa: e022 sd s0,0(sp) - 802030ac: 0800 addi s0,sp,16 + 802032fa: 1141 addi sp,sp,-16 + 802032fc: e406 sd ra,8(sp) + 802032fe: e022 sd s0,0(sp) + 80203300: 0800 addi s0,sp,16 return myproc()->parent->pid; - 802030ae: fffff097 auipc ra,0xfffff - 802030b2: 98e080e7 jalr -1650(ra) # 80201a3c <myproc> - 802030b6: 711c ld a5,32(a0) + 80203302: ffffe097 auipc ra,0xffffe + 80203306: 73a080e7 jalr 1850(ra) # 80201a3c <myproc> + 8020330a: 711c ld a5,32(a0) } - 802030b8: 5f88 lw a0,56(a5) - 802030ba: 60a2 ld ra,8(sp) - 802030bc: 6402 ld s0,0(sp) - 802030be: 0141 addi sp,sp,16 - 802030c0: 8082 ret + 8020330c: 5f88 lw a0,56(a5) + 8020330e: 60a2 ld ra,8(sp) + 80203310: 6402 ld s0,0(sp) + 80203312: 0141 addi sp,sp,16 + 80203314: 8082 ret -00000000802030c2 <sys_fork>: +0000000080203316 <sys_fork>: uint64 sys_fork(void) { - 802030c2: 1141 addi sp,sp,-16 - 802030c4: e406 sd ra,8(sp) - 802030c6: e022 sd s0,0(sp) - 802030c8: 0800 addi s0,sp,16 + 80203316: 1141 addi sp,sp,-16 + 80203318: e406 sd ra,8(sp) + 8020331a: e022 sd s0,0(sp) + 8020331c: 0800 addi s0,sp,16 return fork(); - 802030ca: fffff097 auipc ra,0xfffff - 802030ce: d78080e7 jalr -648(ra) # 80201e42 <fork> + 8020331e: fffff097 auipc ra,0xfffff + 80203322: b24080e7 jalr -1244(ra) # 80201e42 <fork> } - 802030d2: 60a2 ld ra,8(sp) - 802030d4: 6402 ld s0,0(sp) - 802030d6: 0141 addi sp,sp,16 - 802030d8: 8082 ret + 80203326: 60a2 ld ra,8(sp) + 80203328: 6402 ld s0,0(sp) + 8020332a: 0141 addi sp,sp,16 + 8020332c: 8082 ret -00000000802030da <sys_wait>: +000000008020332e <sys_wait>: uint64 sys_wait(void) { - 802030da: 1101 addi sp,sp,-32 - 802030dc: ec06 sd ra,24(sp) - 802030de: e822 sd s0,16(sp) - 802030e0: 1000 addi s0,sp,32 + 8020332e: 1101 addi sp,sp,-32 + 80203330: ec06 sd ra,24(sp) + 80203332: e822 sd s0,16(sp) + 80203334: 1000 addi s0,sp,32 uint64 p; if(argaddr(0, &p) < 0) - 802030e2: fe840593 addi a1,s0,-24 - 802030e6: 4501 li a0,0 - 802030e8: 00000097 auipc ra,0x0 - 802030ec: d38080e7 jalr -712(ra) # 80202e20 <argaddr> - 802030f0: 87aa mv a5,a0 + 80203336: fe840593 addi a1,s0,-24 + 8020333a: 4501 li a0,0 + 8020333c: 00000097 auipc ra,0x0 + 80203340: d38080e7 jalr -712(ra) # 80203074 <argaddr> + 80203344: 87aa mv a5,a0 return -1; - 802030f2: 557d li a0,-1 + 80203346: 557d li a0,-1 if(argaddr(0, &p) < 0) - 802030f4: 0007c863 bltz a5,80203104 <sys_wait+0x2a> + 80203348: 0007c863 bltz a5,80203358 <sys_wait+0x2a> return wait(p); - 802030f8: fe843503 ld a0,-24(s0) - 802030fc: fffff097 auipc ra,0xfffff - 80203100: 23e080e7 jalr 574(ra) # 8020233a <wait> + 8020334c: fe843503 ld a0,-24(s0) + 80203350: fffff097 auipc ra,0xfffff + 80203354: fea080e7 jalr -22(ra) # 8020233a <wait> } - 80203104: 60e2 ld ra,24(sp) - 80203106: 6442 ld s0,16(sp) - 80203108: 6105 addi sp,sp,32 - 8020310a: 8082 ret + 80203358: 60e2 ld ra,24(sp) + 8020335a: 6442 ld s0,16(sp) + 8020335c: 6105 addi sp,sp,32 + 8020335e: 8082 ret -000000008020310c <sys_sbrk>: +0000000080203360 <sys_sbrk>: uint64 sys_sbrk(void) { - 8020310c: 7179 addi sp,sp,-48 - 8020310e: f406 sd ra,40(sp) - 80203110: f022 sd s0,32(sp) - 80203112: ec26 sd s1,24(sp) - 80203114: 1800 addi s0,sp,48 + 80203360: 7179 addi sp,sp,-48 + 80203362: f406 sd ra,40(sp) + 80203364: f022 sd s0,32(sp) + 80203366: ec26 sd s1,24(sp) + 80203368: 1800 addi s0,sp,48 int addr; int n; if(argint(0, &n) < 0) - 80203116: fdc40593 addi a1,s0,-36 - 8020311a: 4501 li a0,0 - 8020311c: 00000097 auipc ra,0x0 - 80203120: ca2080e7 jalr -862(ra) # 80202dbe <argint> - 80203124: 87aa mv a5,a0 + 8020336a: fdc40593 addi a1,s0,-36 + 8020336e: 4501 li a0,0 + 80203370: 00000097 auipc ra,0x0 + 80203374: ca2080e7 jalr -862(ra) # 80203012 <argint> + 80203378: 87aa mv a5,a0 return -1; - 80203126: 557d li a0,-1 + 8020337a: 557d li a0,-1 if(argint(0, &n) < 0) - 80203128: 0207c063 bltz a5,80203148 <sys_sbrk+0x3c> + 8020337c: 0207c063 bltz a5,8020339c <sys_sbrk+0x3c> addr = myproc()->sz; - 8020312c: fffff097 auipc ra,0xfffff - 80203130: 910080e7 jalr -1776(ra) # 80201a3c <myproc> - 80203134: 4524 lw s1,72(a0) + 80203380: ffffe097 auipc ra,0xffffe + 80203384: 6bc080e7 jalr 1724(ra) # 80201a3c <myproc> + 80203388: 4524 lw s1,72(a0) if(growproc(n) < 0) - 80203136: fdc42503 lw a0,-36(s0) - 8020313a: fffff097 auipc ra,0xfffff - 8020313e: c8c080e7 jalr -884(ra) # 80201dc6 <growproc> - 80203142: 00054863 bltz a0,80203152 <sys_sbrk+0x46> + 8020338a: fdc42503 lw a0,-36(s0) + 8020338e: fffff097 auipc ra,0xfffff + 80203392: a38080e7 jalr -1480(ra) # 80201dc6 <growproc> + 80203396: 00054863 bltz a0,802033a6 <sys_sbrk+0x46> return -1; return addr; - 80203146: 8526 mv a0,s1 + 8020339a: 8526 mv a0,s1 } - 80203148: 70a2 ld ra,40(sp) - 8020314a: 7402 ld s0,32(sp) - 8020314c: 64e2 ld s1,24(sp) - 8020314e: 6145 addi sp,sp,48 - 80203150: 8082 ret + 8020339c: 70a2 ld ra,40(sp) + 8020339e: 7402 ld s0,32(sp) + 802033a0: 64e2 ld s1,24(sp) + 802033a2: 6145 addi sp,sp,48 + 802033a4: 8082 ret return -1; - 80203152: 557d li a0,-1 - 80203154: bfd5 j 80203148 <sys_sbrk+0x3c> + 802033a6: 557d li a0,-1 + 802033a8: bfd5 j 8020339c <sys_sbrk+0x3c> -0000000080203156 <sys_brk>: +00000000802033aa <sys_brk>: uint64 sys_brk(void) { - 80203156: 7179 addi sp,sp,-48 - 80203158: f406 sd ra,40(sp) - 8020315a: f022 sd s0,32(sp) - 8020315c: ec26 sd s1,24(sp) - 8020315e: 1800 addi s0,sp,48 + 802033aa: 7179 addi sp,sp,-48 + 802033ac: f406 sd ra,40(sp) + 802033ae: f022 sd s0,32(sp) + 802033b0: ec26 sd s1,24(sp) + 802033b2: 1800 addi s0,sp,48 int current_addr; int new_size; // èŽ·å–æ–°çš„å †å¤§å° if (argint(0, &new_size) < 0) { - 80203160: fdc40593 addi a1,s0,-36 - 80203164: 4501 li a0,0 - 80203166: 00000097 auipc ra,0x0 - 8020316a: c58080e7 jalr -936(ra) # 80202dbe <argint> - 8020316e: 87aa mv a5,a0 + 802033b4: fdc40593 addi a1,s0,-36 + 802033b8: 4501 li a0,0 + 802033ba: 00000097 auipc ra,0x0 + 802033be: c58080e7 jalr -936(ra) # 80203012 <argint> + 802033c2: 87aa mv a5,a0 return -1; // 如果获å–失败,返回错误ç -1 - 80203170: 557d li a0,-1 + 802033c4: 557d li a0,-1 if (argint(0, &new_size) < 0) { - 80203172: 0007cb63 bltz a5,80203188 <sys_brk+0x32> + 802033c6: 0007cb63 bltz a5,802033dc <sys_brk+0x32> } // 获å–当å‰è¿›ç¨‹çš„å †åœ°å€ current_addr = myproc()->sz; - 80203176: fffff097 auipc ra,0xfffff - 8020317a: 8c6080e7 jalr -1850(ra) # 80201a3c <myproc> - 8020317e: 4524 lw s1,72(a0) + 802033ca: ffffe097 auipc ra,0xffffe + 802033ce: 672080e7 jalr 1650(ra) # 80201a3c <myproc> + 802033d2: 4524 lw s1,72(a0) // å¦‚æžœè¯·æ±‚çš„å †å¤§å°ä¸º 0,返回当å‰å †åœ°å€ if (new_size == 0) { - 80203180: fdc42503 lw a0,-36(s0) - 80203184: e519 bnez a0,80203192 <sys_brk+0x3c> + 802033d4: fdc42503 lw a0,-36(s0) + 802033d8: e519 bnez a0,802033e6 <sys_brk+0x3c> return current_addr; - 80203186: 8526 mv a0,s1 + 802033da: 8526 mv a0,s1 return -1; // 如果调整失败,返回错误ç -1 } // è¿”å›žæ–°çš„å †åœ°å€ return current_addr; } - 80203188: 70a2 ld ra,40(sp) - 8020318a: 7402 ld s0,32(sp) - 8020318c: 64e2 ld s1,24(sp) - 8020318e: 6145 addi sp,sp,48 - 80203190: 8082 ret + 802033dc: 70a2 ld ra,40(sp) + 802033de: 7402 ld s0,32(sp) + 802033e0: 64e2 ld s1,24(sp) + 802033e2: 6145 addi sp,sp,48 + 802033e4: 8082 ret if (growproc(new_size - current_addr) < 0) { - 80203192: 9d05 subw a0,a0,s1 - 80203194: fffff097 auipc ra,0xfffff - 80203198: c32080e7 jalr -974(ra) # 80201dc6 <growproc> - 8020319c: 00054463 bltz a0,802031a4 <sys_brk+0x4e> + 802033e6: 9d05 subw a0,a0,s1 + 802033e8: fffff097 auipc ra,0xfffff + 802033ec: 9de080e7 jalr -1570(ra) # 80201dc6 <growproc> + 802033f0: 00054463 bltz a0,802033f8 <sys_brk+0x4e> return current_addr; - 802031a0: 8526 mv a0,s1 - 802031a2: b7dd j 80203188 <sys_brk+0x32> + 802033f4: 8526 mv a0,s1 + 802033f6: b7dd j 802033dc <sys_brk+0x32> return -1; // 如果调整失败,返回错误ç -1 - 802031a4: 557d li a0,-1 - 802031a6: b7cd j 80203188 <sys_brk+0x32> + 802033f8: 557d li a0,-1 + 802033fa: b7cd j 802033dc <sys_brk+0x32> -00000000802031a8 <sys_sleep>: +00000000802033fc <sys_sleep>: uint64 sys_sleep(void) { - 802031a8: 7139 addi sp,sp,-64 - 802031aa: fc06 sd ra,56(sp) - 802031ac: f822 sd s0,48(sp) - 802031ae: f426 sd s1,40(sp) - 802031b0: f04a sd s2,32(sp) - 802031b2: ec4e sd s3,24(sp) - 802031b4: 0080 addi s0,sp,64 + 802033fc: 7139 addi sp,sp,-64 + 802033fe: fc06 sd ra,56(sp) + 80203400: f822 sd s0,48(sp) + 80203402: f426 sd s1,40(sp) + 80203404: f04a sd s2,32(sp) + 80203406: ec4e sd s3,24(sp) + 80203408: 0080 addi s0,sp,64 int n; uint ticks0; if(argint(0, &n) < 0) - 802031b6: fcc40593 addi a1,s0,-52 - 802031ba: 4501 li a0,0 - 802031bc: 00000097 auipc ra,0x0 - 802031c0: c02080e7 jalr -1022(ra) # 80202dbe <argint> + 8020340a: fcc40593 addi a1,s0,-52 + 8020340e: 4501 li a0,0 + 80203410: 00000097 auipc ra,0x0 + 80203414: c02080e7 jalr -1022(ra) # 80203012 <argint> return -1; - 802031c4: 57fd li a5,-1 + 80203418: 57fd li a5,-1 if(argint(0, &n) < 0) - 802031c6: 06054763 bltz a0,80203234 <sys_sleep+0x8c> + 8020341a: 06054763 bltz a0,80203488 <sys_sleep+0x8c> acquire(&tickslock); - 802031ca: 00009517 auipc a0,0x9 - 802031ce: 89653503 ld a0,-1898(a0) # 8020ba60 <_GLOBAL_OFFSET_TABLE_+0x30> - 802031d2: ffffd097 auipc ra,0xffffd - 802031d6: 4f4080e7 jalr 1268(ra) # 802006c6 <acquire> + 8020341e: 00009517 auipc a0,0x9 + 80203422: 8b253503 ld a0,-1870(a0) # 8020bcd0 <_GLOBAL_OFFSET_TABLE_+0x30> + 80203426: ffffd097 auipc ra,0xffffd + 8020342a: 2a0080e7 jalr 672(ra) # 802006c6 <acquire> ticks0 = ticks; - 802031da: 00009797 auipc a5,0x9 - 802031de: 8967b783 ld a5,-1898(a5) # 8020ba70 <_GLOBAL_OFFSET_TABLE_+0x40> - 802031e2: 0007a903 lw s2,0(a5) + 8020342e: 00009797 auipc a5,0x9 + 80203432: 8b27b783 ld a5,-1870(a5) # 8020bce0 <_GLOBAL_OFFSET_TABLE_+0x40> + 80203436: 0007a903 lw s2,0(a5) while(ticks - ticks0 < n){ - 802031e6: fcc42783 lw a5,-52(s0) - 802031ea: cf85 beqz a5,80203222 <sys_sleep+0x7a> + 8020343a: fcc42783 lw a5,-52(s0) + 8020343e: cf85 beqz a5,80203476 <sys_sleep+0x7a> if(myproc()->killed){ release(&tickslock); return -1; } sleep(&ticks, &tickslock); - 802031ec: 00009997 auipc s3,0x9 - 802031f0: 8749b983 ld s3,-1932(s3) # 8020ba60 <_GLOBAL_OFFSET_TABLE_+0x30> - 802031f4: 00009497 auipc s1,0x9 - 802031f8: 87c4b483 ld s1,-1924(s1) # 8020ba70 <_GLOBAL_OFFSET_TABLE_+0x40> + 80203440: 00009997 auipc s3,0x9 + 80203444: 8909b983 ld s3,-1904(s3) # 8020bcd0 <_GLOBAL_OFFSET_TABLE_+0x30> + 80203448: 00009497 auipc s1,0x9 + 8020344c: 8984b483 ld s1,-1896(s1) # 8020bce0 <_GLOBAL_OFFSET_TABLE_+0x40> if(myproc()->killed){ - 802031fc: fffff097 auipc ra,0xfffff - 80203200: 840080e7 jalr -1984(ra) # 80201a3c <myproc> - 80203204: 591c lw a5,48(a0) - 80203206: ef9d bnez a5,80203244 <sys_sleep+0x9c> + 80203450: ffffe097 auipc ra,0xffffe + 80203454: 5ec080e7 jalr 1516(ra) # 80201a3c <myproc> + 80203458: 591c lw a5,48(a0) + 8020345a: ef9d bnez a5,80203498 <sys_sleep+0x9c> sleep(&ticks, &tickslock); - 80203208: 85ce mv a1,s3 - 8020320a: 8526 mv a0,s1 - 8020320c: fffff097 auipc ra,0xfffff - 80203210: 0b0080e7 jalr 176(ra) # 802022bc <sleep> + 8020345c: 85ce mv a1,s3 + 8020345e: 8526 mv a0,s1 + 80203460: fffff097 auipc ra,0xfffff + 80203464: e5c080e7 jalr -420(ra) # 802022bc <sleep> while(ticks - ticks0 < n){ - 80203214: 409c lw a5,0(s1) - 80203216: 412787bb subw a5,a5,s2 - 8020321a: fcc42703 lw a4,-52(s0) - 8020321e: fce7efe3 bltu a5,a4,802031fc <sys_sleep+0x54> + 80203468: 409c lw a5,0(s1) + 8020346a: 412787bb subw a5,a5,s2 + 8020346e: fcc42703 lw a4,-52(s0) + 80203472: fce7efe3 bltu a5,a4,80203450 <sys_sleep+0x54> } release(&tickslock); - 80203222: 00009517 auipc a0,0x9 - 80203226: 83e53503 ld a0,-1986(a0) # 8020ba60 <_GLOBAL_OFFSET_TABLE_+0x30> - 8020322a: ffffd097 auipc ra,0xffffd - 8020322e: 4f0080e7 jalr 1264(ra) # 8020071a <release> + 80203476: 00009517 auipc a0,0x9 + 8020347a: 85a53503 ld a0,-1958(a0) # 8020bcd0 <_GLOBAL_OFFSET_TABLE_+0x30> + 8020347e: ffffd097 auipc ra,0xffffd + 80203482: 29c080e7 jalr 668(ra) # 8020071a <release> return 0; - 80203232: 4781 li a5,0 -} - 80203234: 853e mv a0,a5 - 80203236: 70e2 ld ra,56(sp) - 80203238: 7442 ld s0,48(sp) - 8020323a: 74a2 ld s1,40(sp) - 8020323c: 7902 ld s2,32(sp) - 8020323e: 69e2 ld s3,24(sp) - 80203240: 6121 addi sp,sp,64 - 80203242: 8082 ret + 80203486: 4781 li a5,0 +} + 80203488: 853e mv a0,a5 + 8020348a: 70e2 ld ra,56(sp) + 8020348c: 7442 ld s0,48(sp) + 8020348e: 74a2 ld s1,40(sp) + 80203490: 7902 ld s2,32(sp) + 80203492: 69e2 ld s3,24(sp) + 80203494: 6121 addi sp,sp,64 + 80203496: 8082 ret release(&tickslock); - 80203244: 00009517 auipc a0,0x9 - 80203248: 81c53503 ld a0,-2020(a0) # 8020ba60 <_GLOBAL_OFFSET_TABLE_+0x30> - 8020324c: ffffd097 auipc ra,0xffffd - 80203250: 4ce080e7 jalr 1230(ra) # 8020071a <release> + 80203498: 00009517 auipc a0,0x9 + 8020349c: 83853503 ld a0,-1992(a0) # 8020bcd0 <_GLOBAL_OFFSET_TABLE_+0x30> + 802034a0: ffffd097 auipc ra,0xffffd + 802034a4: 27a080e7 jalr 634(ra) # 8020071a <release> return -1; - 80203254: 57fd li a5,-1 - 80203256: bff9 j 80203234 <sys_sleep+0x8c> + 802034a8: 57fd li a5,-1 + 802034aa: bff9 j 80203488 <sys_sleep+0x8c> -0000000080203258 <sys_kill>: +00000000802034ac <sys_kill>: uint64 sys_kill(void) { - 80203258: 1101 addi sp,sp,-32 - 8020325a: ec06 sd ra,24(sp) - 8020325c: e822 sd s0,16(sp) - 8020325e: 1000 addi s0,sp,32 + 802034ac: 1101 addi sp,sp,-32 + 802034ae: ec06 sd ra,24(sp) + 802034b0: e822 sd s0,16(sp) + 802034b2: 1000 addi s0,sp,32 int pid; if(argint(0, &pid) < 0) - 80203260: fec40593 addi a1,s0,-20 - 80203264: 4501 li a0,0 - 80203266: 00000097 auipc ra,0x0 - 8020326a: b58080e7 jalr -1192(ra) # 80202dbe <argint> - 8020326e: 87aa mv a5,a0 + 802034b4: fec40593 addi a1,s0,-20 + 802034b8: 4501 li a0,0 + 802034ba: 00000097 auipc ra,0x0 + 802034be: b58080e7 jalr -1192(ra) # 80203012 <argint> + 802034c2: 87aa mv a5,a0 return -1; - 80203270: 557d li a0,-1 + 802034c4: 557d li a0,-1 if(argint(0, &pid) < 0) - 80203272: 0007c863 bltz a5,80203282 <sys_kill+0x2a> + 802034c6: 0007c863 bltz a5,802034d6 <sys_kill+0x2a> return kill(pid); - 80203276: fec42503 lw a0,-20(s0) - 8020327a: fffff097 auipc ra,0xfffff - 8020327e: 228080e7 jalr 552(ra) # 802024a2 <kill> + 802034ca: fec42503 lw a0,-20(s0) + 802034ce: fffff097 auipc ra,0xfffff + 802034d2: fd4080e7 jalr -44(ra) # 802024a2 <kill> } - 80203282: 60e2 ld ra,24(sp) - 80203284: 6442 ld s0,16(sp) - 80203286: 6105 addi sp,sp,32 - 80203288: 8082 ret + 802034d6: 60e2 ld ra,24(sp) + 802034d8: 6442 ld s0,16(sp) + 802034da: 6105 addi sp,sp,32 + 802034dc: 8082 ret -000000008020328a <sys_uptime>: +00000000802034de <sys_uptime>: // return how many clock tick interrupts have occurred // since start. uint64 sys_uptime(void) { - 8020328a: 1101 addi sp,sp,-32 - 8020328c: ec06 sd ra,24(sp) - 8020328e: e822 sd s0,16(sp) - 80203290: e426 sd s1,8(sp) - 80203292: 1000 addi s0,sp,32 + 802034de: 1101 addi sp,sp,-32 + 802034e0: ec06 sd ra,24(sp) + 802034e2: e822 sd s0,16(sp) + 802034e4: e426 sd s1,8(sp) + 802034e6: 1000 addi s0,sp,32 uint xticks; acquire(&tickslock); - 80203294: 00008517 auipc a0,0x8 - 80203298: 7cc53503 ld a0,1996(a0) # 8020ba60 <_GLOBAL_OFFSET_TABLE_+0x30> - 8020329c: ffffd097 auipc ra,0xffffd - 802032a0: 42a080e7 jalr 1066(ra) # 802006c6 <acquire> + 802034e8: 00008517 auipc a0,0x8 + 802034ec: 7e853503 ld a0,2024(a0) # 8020bcd0 <_GLOBAL_OFFSET_TABLE_+0x30> + 802034f0: ffffd097 auipc ra,0xffffd + 802034f4: 1d6080e7 jalr 470(ra) # 802006c6 <acquire> xticks = ticks; - 802032a4: 00008797 auipc a5,0x8 - 802032a8: 7cc7b783 ld a5,1996(a5) # 8020ba70 <_GLOBAL_OFFSET_TABLE_+0x40> - 802032ac: 4384 lw s1,0(a5) + 802034f8: 00008797 auipc a5,0x8 + 802034fc: 7e87b783 ld a5,2024(a5) # 8020bce0 <_GLOBAL_OFFSET_TABLE_+0x40> + 80203500: 4384 lw s1,0(a5) release(&tickslock); - 802032ae: 00008517 auipc a0,0x8 - 802032b2: 7b253503 ld a0,1970(a0) # 8020ba60 <_GLOBAL_OFFSET_TABLE_+0x30> - 802032b6: ffffd097 auipc ra,0xffffd - 802032ba: 464080e7 jalr 1124(ra) # 8020071a <release> + 80203502: 00008517 auipc a0,0x8 + 80203506: 7ce53503 ld a0,1998(a0) # 8020bcd0 <_GLOBAL_OFFSET_TABLE_+0x30> + 8020350a: ffffd097 auipc ra,0xffffd + 8020350e: 210080e7 jalr 528(ra) # 8020071a <release> return xticks; } - 802032be: 02049513 slli a0,s1,0x20 - 802032c2: 9101 srli a0,a0,0x20 - 802032c4: 60e2 ld ra,24(sp) - 802032c6: 6442 ld s0,16(sp) - 802032c8: 64a2 ld s1,8(sp) - 802032ca: 6105 addi sp,sp,32 - 802032cc: 8082 ret + 80203512: 02049513 slli a0,s1,0x20 + 80203516: 9101 srli a0,a0,0x20 + 80203518: 60e2 ld ra,24(sp) + 8020351a: 6442 ld s0,16(sp) + 8020351c: 64a2 ld s1,8(sp) + 8020351e: 6105 addi sp,sp,32 + 80203520: 8082 ret -00000000802032ce <sys_trace>: +0000000080203522 <sys_times>: + +uint64 +sys_times(void) +{ + 80203522: 1141 addi sp,sp,-16 + 80203524: e406 sd ra,8(sp) + 80203526: e022 sd s0,0(sp) + 80203528: 0800 addi s0,sp,16 + return sys_uptime(); + 8020352a: 00000097 auipc ra,0x0 + 8020352e: fb4080e7 jalr -76(ra) # 802034de <sys_uptime> +}//diaoyong sys_uptime(); + 80203532: 60a2 ld ra,8(sp) + 80203534: 6402 ld s0,0(sp) + 80203536: 0141 addi sp,sp,16 + 80203538: 8082 ret + +000000008020353a <sys_trace>: uint64 sys_trace(void) { - 802032ce: 1101 addi sp,sp,-32 - 802032d0: ec06 sd ra,24(sp) - 802032d2: e822 sd s0,16(sp) - 802032d4: 1000 addi s0,sp,32 + 8020353a: 1101 addi sp,sp,-32 + 8020353c: ec06 sd ra,24(sp) + 8020353e: e822 sd s0,16(sp) + 80203540: 1000 addi s0,sp,32 int mask; if(argint(0, &mask) < 0) { - 802032d6: fec40593 addi a1,s0,-20 - 802032da: 4501 li a0,0 - 802032dc: 00000097 auipc ra,0x0 - 802032e0: ae2080e7 jalr -1310(ra) # 80202dbe <argint> + 80203542: fec40593 addi a1,s0,-20 + 80203546: 4501 li a0,0 + 80203548: 00000097 auipc ra,0x0 + 8020354c: aca080e7 jalr -1334(ra) # 80203012 <argint> return -1; - 802032e4: 57fd li a5,-1 + 80203550: 57fd li a5,-1 if(argint(0, &mask) < 0) { - 802032e6: 00054b63 bltz a0,802032fc <sys_trace+0x2e> + 80203552: 00054b63 bltz a0,80203568 <sys_trace+0x2e> } myproc()->tmask = mask; - 802032ea: ffffe097 auipc ra,0xffffe - 802032ee: 752080e7 jalr 1874(ra) # 80201a3c <myproc> - 802032f2: fec42783 lw a5,-20(s0) - 802032f6: 16f52823 sw a5,368(a0) + 80203556: ffffe097 auipc ra,0xffffe + 8020355a: 4e6080e7 jalr 1254(ra) # 80201a3c <myproc> + 8020355e: fec42783 lw a5,-20(s0) + 80203562: 16f52823 sw a5,368(a0) return 0; - 802032fa: 4781 li a5,0 + 80203566: 4781 li a5,0 } - 802032fc: 853e mv a0,a5 - 802032fe: 60e2 ld ra,24(sp) - 80203300: 6442 ld s0,16(sp) - 80203302: 6105 addi sp,sp,32 - 80203304: 8082 ret + 80203568: 853e mv a0,a5 + 8020356a: 60e2 ld ra,24(sp) + 8020356c: 6442 ld s0,16(sp) + 8020356e: 6105 addi sp,sp,32 + 80203570: 8082 ret -0000000080203306 <sys_shutdown>: +0000000080203572 <sys_shutdown>: uint64 sys_shutdown(void) { - 80203306: 1141 addi sp,sp,-16 - 80203308: e422 sd s0,8(sp) - 8020330a: 0800 addi s0,sp,16 + 80203572: 1141 addi sp,sp,-16 + 80203574: e422 sd s0,8(sp) + 80203576: 0800 addi s0,sp,16 SBI_CALL_0(SBI_SHUTDOWN); - 8020330c: 4501 li a0,0 - 8020330e: 4581 li a1,0 - 80203310: 4601 li a2,0 - 80203312: 4681 li a3,0 - 80203314: 48a1 li a7,8 - 80203316: 00000073 ecall + 80203578: 4501 li a0,0 + 8020357a: 4581 li a1,0 + 8020357c: 4601 li a2,0 + 8020357e: 4681 li a3,0 + 80203580: 48a1 li a7,8 + 80203582: 00000073 ecall sbi_shutdown(); return 0; } - 8020331a: 4501 li a0,0 - 8020331c: 6422 ld s0,8(sp) - 8020331e: 0141 addi sp,sp,16 - 80203320: 8082 ret + 80203586: 4501 li a0,0 + 80203588: 6422 ld s0,8(sp) + 8020358a: 0141 addi sp,sp,16 + 8020358c: 8082 ret + +000000008020358e <sys_clone>: + +uint64 +sys_clone(void) +{ + 8020358e: 1101 addi sp,sp,-32 + 80203590: ec06 sd ra,24(sp) + 80203592: e822 sd s0,16(sp) + 80203594: 1000 addi s0,sp,32 + int stack_address; + + // ä»Žç”¨æˆ·ç©ºé—´èŽ·å–æ ˆåœ°å€å‚æ•° + if (argint(1, &stack_address) < 0) + 80203596: fec40593 addi a1,s0,-20 + 8020359a: 4505 li a0,1 + 8020359c: 00000097 auipc ra,0x0 + 802035a0: a76080e7 jalr -1418(ra) # 80203012 <argint> + 802035a4: 87aa mv a5,a0 + return -1; // 如果获å–傿•°å¤±è´¥ï¼Œè¿”回 -1 + 802035a6: 557d li a0,-1 + if (argint(1, &stack_address) < 0) + 802035a8: 0007c863 bltz a5,802035b8 <sys_clone+0x2a> + + // 调用 clone 函数并返回其结果 + return clone(stack_address); + 802035ac: fec42503 lw a0,-20(s0) + 802035b0: fffff097 auipc ra,0xfffff + 802035b4: 1cc080e7 jalr 460(ra) # 8020277c <clone> +} + 802035b8: 60e2 ld ra,24(sp) + 802035ba: 6442 ld s0,16(sp) + 802035bc: 6105 addi sp,sp,32 + 802035be: 8082 ret + +00000000802035c0 <sys_wait4>: -0000000080203322 <binit>: +uint64 +sys_wait4(void) +{ + 802035c0: 1101 addi sp,sp,-32 + 802035c2: ec06 sd ra,24(sp) + 802035c4: e822 sd s0,16(sp) + 802035c6: 1000 addi s0,sp,32 + uint64 status_addr; + int pid, opts; + + // 从用户空间获å–傿•° + if (argint(0, &pid) < 0 || argaddr(1, &status_addr) < 0 || argint(2, &opts) < 0) + 802035c8: fe440593 addi a1,s0,-28 + 802035cc: 4501 li a0,0 + 802035ce: 00000097 auipc ra,0x0 + 802035d2: a44080e7 jalr -1468(ra) # 80203012 <argint> + return -1; // 如果获å–傿•°å¤±è´¥ï¼Œè¿”回 -1 + 802035d6: 57fd li a5,-1 + if (argint(0, &pid) < 0 || argaddr(1, &status_addr) < 0 || argint(2, &opts) < 0) + 802035d8: 04054163 bltz a0,8020361a <sys_wait4+0x5a> + 802035dc: fe840593 addi a1,s0,-24 + 802035e0: 4505 li a0,1 + 802035e2: 00000097 auipc ra,0x0 + 802035e6: a92080e7 jalr -1390(ra) # 80203074 <argaddr> + return -1; // 如果获å–傿•°å¤±è´¥ï¼Œè¿”回 -1 + 802035ea: 57fd li a5,-1 + if (argint(0, &pid) < 0 || argaddr(1, &status_addr) < 0 || argint(2, &opts) < 0) + 802035ec: 02054763 bltz a0,8020361a <sys_wait4+0x5a> + 802035f0: fe040593 addi a1,s0,-32 + 802035f4: 4509 li a0,2 + 802035f6: 00000097 auipc ra,0x0 + 802035fa: a1c080e7 jalr -1508(ra) # 80203012 <argint> + return -1; // 如果获å–傿•°å¤±è´¥ï¼Œè¿”回 -1 + 802035fe: 57fd li a5,-1 + if (argint(0, &pid) < 0 || argaddr(1, &status_addr) < 0 || argint(2, &opts) < 0) + 80203600: 00054d63 bltz a0,8020361a <sys_wait4+0x5a> + + // 调用 wait4 函数并返回其结果 + return wait4(pid, status_addr, opts); + 80203604: fe042603 lw a2,-32(s0) + 80203608: fe843583 ld a1,-24(s0) + 8020360c: fe442503 lw a0,-28(s0) + 80203610: fffff097 auipc ra,0xfffff + 80203614: 050080e7 jalr 80(ra) # 80202660 <wait4> + 80203618: 87aa mv a5,a0 +} + 8020361a: 853e mv a0,a5 + 8020361c: 60e2 ld ra,24(sp) + 8020361e: 6442 ld s0,16(sp) + 80203620: 6105 addi sp,sp,32 + 80203622: 8082 ret + +0000000080203624 <sys_yield>: + +uint64 +sys_yield(void) { + 80203624: 1141 addi sp,sp,-16 + 80203626: e406 sd ra,8(sp) + 80203628: e022 sd s0,0(sp) + 8020362a: 0800 addi s0,sp,16 + yield(); + 8020362c: fffff097 auipc ra,0xfffff + 80203630: c54080e7 jalr -940(ra) # 80202280 <yield> + return 0; +} + 80203634: 4501 li a0,0 + 80203636: 60a2 ld ra,8(sp) + 80203638: 6402 ld s0,0(sp) + 8020363a: 0141 addi sp,sp,16 + 8020363c: 8082 ret + +000000008020363e <binit>: struct buf head; } bcache; void binit(void) { - 80203322: 7139 addi sp,sp,-64 - 80203324: fc06 sd ra,56(sp) - 80203326: f822 sd s0,48(sp) - 80203328: f426 sd s1,40(sp) - 8020332a: f04a sd s2,32(sp) - 8020332c: ec4e sd s3,24(sp) - 8020332e: e852 sd s4,16(sp) - 80203330: e456 sd s5,8(sp) - 80203332: 0080 addi s0,sp,64 + 8020363e: 7139 addi sp,sp,-64 + 80203640: fc06 sd ra,56(sp) + 80203642: f822 sd s0,48(sp) + 80203644: f426 sd s1,40(sp) + 80203646: f04a sd s2,32(sp) + 80203648: ec4e sd s3,24(sp) + 8020364a: e852 sd s4,16(sp) + 8020364c: e456 sd s5,8(sp) + 8020364e: 0080 addi s0,sp,64 struct buf *b; initlock(&bcache.lock, "bcache"); - 80203334: 00006597 auipc a1,0x6 - 80203338: 79458593 addi a1,a1,1940 # 80209ac8 <digits+0x748> - 8020333c: 00015517 auipc a0,0x15 - 80203340: 7b450513 addi a0,a0,1972 # 80218af0 <bcache> - 80203344: ffffd097 auipc ra,0xffffd - 80203348: 33e080e7 jalr 830(ra) # 80200682 <initlock> + 80203650: 00006597 auipc a1,0x6 + 80203654: 4b058593 addi a1,a1,1200 # 80209b00 <digits+0x780> + 80203658: 00015517 auipc a0,0x15 + 8020365c: 49850513 addi a0,a0,1176 # 80218af0 <bcache> + 80203660: ffffd097 auipc ra,0xffffd + 80203664: 022080e7 jalr 34(ra) # 80200682 <initlock> // Create linked list of buffers bcache.head.prev = &bcache.head; - 8020334c: 00019797 auipc a5,0x19 - 80203350: 7a478793 addi a5,a5,1956 # 8021caf0 <bcache+0x4000> - 80203354: 0001a717 auipc a4,0x1a - 80203358: e0470713 addi a4,a4,-508 # 8021d158 <bcache+0x4668> - 8020335c: 6ae7b823 sd a4,1712(a5) + 80203668: 00019797 auipc a5,0x19 + 8020366c: 48878793 addi a5,a5,1160 # 8021caf0 <bcache+0x4000> + 80203670: 0001a717 auipc a4,0x1a + 80203674: ae870713 addi a4,a4,-1304 # 8021d158 <bcache+0x4668> + 80203678: 6ae7b823 sd a4,1712(a5) bcache.head.next = &bcache.head; - 80203360: 6ae7bc23 sd a4,1720(a5) + 8020367c: 6ae7bc23 sd a4,1720(a5) for(b = bcache.buf; b < bcache.buf+NBUF; b++){ - 80203364: 00015497 auipc s1,0x15 - 80203368: 7a448493 addi s1,s1,1956 # 80218b08 <bcache+0x18> + 80203680: 00015497 auipc s1,0x15 + 80203684: 48848493 addi s1,s1,1160 # 80218b08 <bcache+0x18> b->refcnt = 0; b->sectorno = ~0; - 8020336c: 5a7d li s4,-1 + 80203688: 5a7d li s4,-1 b->dev = ~0; b->next = bcache.head.next; - 8020336e: 893e mv s2,a5 + 8020368a: 893e mv s2,a5 b->prev = &bcache.head; - 80203370: 89ba mv s3,a4 + 8020368c: 89ba mv s3,a4 initsleeplock(&b->lock, "buffer"); - 80203372: 00006a97 auipc s5,0x6 - 80203376: 75ea8a93 addi s5,s5,1886 # 80209ad0 <digits+0x750> + 8020368e: 00006a97 auipc s5,0x6 + 80203692: 47aa8a93 addi s5,s5,1146 # 80209b08 <digits+0x788> b->refcnt = 0; - 8020337a: 0404a023 sw zero,64(s1) + 80203696: 0404a023 sw zero,64(s1) b->sectorno = ~0; - 8020337e: 0144a623 sw s4,12(s1) + 8020369a: 0144a623 sw s4,12(s1) b->dev = ~0; - 80203382: 0144a423 sw s4,8(s1) + 8020369e: 0144a423 sw s4,8(s1) b->next = bcache.head.next; - 80203386: 6b893783 ld a5,1720(s2) - 8020338a: e8bc sd a5,80(s1) + 802036a2: 6b893783 ld a5,1720(s2) + 802036a6: e8bc sd a5,80(s1) b->prev = &bcache.head; - 8020338c: 0534b423 sd s3,72(s1) + 802036a8: 0534b423 sd s3,72(s1) initsleeplock(&b->lock, "buffer"); - 80203390: 85d6 mv a1,s5 - 80203392: 01048513 addi a0,s1,16 - 80203396: 00000097 auipc ra,0x0 - 8020339a: 26e080e7 jalr 622(ra) # 80203604 <initsleeplock> + 802036ac: 85d6 mv a1,s5 + 802036ae: 01048513 addi a0,s1,16 + 802036b2: 00000097 auipc ra,0x0 + 802036b6: 26e080e7 jalr 622(ra) # 80203920 <initsleeplock> bcache.head.next->prev = b; - 8020339e: 6b893783 ld a5,1720(s2) - 802033a2: e7a4 sd s1,72(a5) + 802036ba: 6b893783 ld a5,1720(s2) + 802036be: e7a4 sd s1,72(a5) bcache.head.next = b; - 802033a4: 6a993c23 sd s1,1720(s2) + 802036c0: 6a993c23 sd s1,1720(s2) for(b = bcache.buf; b < bcache.buf+NBUF; b++){ - 802033a8: 25848493 addi s1,s1,600 - 802033ac: fd3497e3 bne s1,s3,8020337a <binit+0x58> + 802036c4: 25848493 addi s1,s1,600 + 802036c8: fd3497e3 bne s1,s3,80203696 <binit+0x58> } #ifdef DEBUG printf("binit\n"); #endif } - 802033b0: 70e2 ld ra,56(sp) - 802033b2: 7442 ld s0,48(sp) - 802033b4: 74a2 ld s1,40(sp) - 802033b6: 7902 ld s2,32(sp) - 802033b8: 69e2 ld s3,24(sp) - 802033ba: 6a42 ld s4,16(sp) - 802033bc: 6aa2 ld s5,8(sp) - 802033be: 6121 addi sp,sp,64 - 802033c0: 8082 ret - -00000000802033c2 <bread>: + 802036cc: 70e2 ld ra,56(sp) + 802036ce: 7442 ld s0,48(sp) + 802036d0: 74a2 ld s1,40(sp) + 802036d2: 7902 ld s2,32(sp) + 802036d4: 69e2 ld s3,24(sp) + 802036d6: 6a42 ld s4,16(sp) + 802036d8: 6aa2 ld s5,8(sp) + 802036da: 6121 addi sp,sp,64 + 802036dc: 8082 ret + +00000000802036de <bread>: panic("bget: no buffers"); } // Return a locked buf with the contents of the indicated block. struct buf* bread(uint dev, uint sectorno) { - 802033c2: 7179 addi sp,sp,-48 - 802033c4: f406 sd ra,40(sp) - 802033c6: f022 sd s0,32(sp) - 802033c8: ec26 sd s1,24(sp) - 802033ca: e84a sd s2,16(sp) - 802033cc: e44e sd s3,8(sp) - 802033ce: 1800 addi s0,sp,48 - 802033d0: 892a mv s2,a0 - 802033d2: 89ae mv s3,a1 + 802036de: 7179 addi sp,sp,-48 + 802036e0: f406 sd ra,40(sp) + 802036e2: f022 sd s0,32(sp) + 802036e4: ec26 sd s1,24(sp) + 802036e6: e84a sd s2,16(sp) + 802036e8: e44e sd s3,8(sp) + 802036ea: 1800 addi s0,sp,48 + 802036ec: 892a mv s2,a0 + 802036ee: 89ae mv s3,a1 acquire(&bcache.lock); - 802033d4: 00015517 auipc a0,0x15 - 802033d8: 71c50513 addi a0,a0,1820 # 80218af0 <bcache> - 802033dc: ffffd097 auipc ra,0xffffd - 802033e0: 2ea080e7 jalr 746(ra) # 802006c6 <acquire> + 802036f0: 00015517 auipc a0,0x15 + 802036f4: 40050513 addi a0,a0,1024 # 80218af0 <bcache> + 802036f8: ffffd097 auipc ra,0xffffd + 802036fc: fce080e7 jalr -50(ra) # 802006c6 <acquire> for(b = bcache.head.next; b != &bcache.head; b = b->next){ - 802033e4: 0001a497 auipc s1,0x1a - 802033e8: dc44b483 ld s1,-572(s1) # 8021d1a8 <bcache+0x46b8> - 802033ec: 0001a797 auipc a5,0x1a - 802033f0: d6c78793 addi a5,a5,-660 # 8021d158 <bcache+0x4668> - 802033f4: 02f48f63 beq s1,a5,80203432 <bread+0x70> - 802033f8: 873e mv a4,a5 - 802033fa: a021 j 80203402 <bread+0x40> - 802033fc: 68a4 ld s1,80(s1) - 802033fe: 02e48a63 beq s1,a4,80203432 <bread+0x70> + 80203700: 0001a497 auipc s1,0x1a + 80203704: aa84b483 ld s1,-1368(s1) # 8021d1a8 <bcache+0x46b8> + 80203708: 0001a797 auipc a5,0x1a + 8020370c: a5078793 addi a5,a5,-1456 # 8021d158 <bcache+0x4668> + 80203710: 02f48f63 beq s1,a5,8020374e <bread+0x70> + 80203714: 873e mv a4,a5 + 80203716: a021 j 8020371e <bread+0x40> + 80203718: 68a4 ld s1,80(s1) + 8020371a: 02e48a63 beq s1,a4,8020374e <bread+0x70> if(b->dev == dev && b->sectorno == sectorno){ - 80203402: 449c lw a5,8(s1) - 80203404: ff279ce3 bne a5,s2,802033fc <bread+0x3a> - 80203408: 44dc lw a5,12(s1) - 8020340a: ff3799e3 bne a5,s3,802033fc <bread+0x3a> + 8020371e: 449c lw a5,8(s1) + 80203720: ff279ce3 bne a5,s2,80203718 <bread+0x3a> + 80203724: 44dc lw a5,12(s1) + 80203726: ff3799e3 bne a5,s3,80203718 <bread+0x3a> b->refcnt++; - 8020340e: 40bc lw a5,64(s1) - 80203410: 2785 addiw a5,a5,1 - 80203412: c0bc sw a5,64(s1) + 8020372a: 40bc lw a5,64(s1) + 8020372c: 2785 addiw a5,a5,1 + 8020372e: c0bc sw a5,64(s1) release(&bcache.lock); - 80203414: 00015517 auipc a0,0x15 - 80203418: 6dc50513 addi a0,a0,1756 # 80218af0 <bcache> - 8020341c: ffffd097 auipc ra,0xffffd - 80203420: 2fe080e7 jalr 766(ra) # 8020071a <release> + 80203730: 00015517 auipc a0,0x15 + 80203734: 3c050513 addi a0,a0,960 # 80218af0 <bcache> + 80203738: ffffd097 auipc ra,0xffffd + 8020373c: fe2080e7 jalr -30(ra) # 8020071a <release> acquiresleep(&b->lock); - 80203424: 01048513 addi a0,s1,16 - 80203428: 00000097 auipc ra,0x0 - 8020342c: 216080e7 jalr 534(ra) # 8020363e <acquiresleep> + 80203740: 01048513 addi a0,s1,16 + 80203744: 00000097 auipc ra,0x0 + 80203748: 216080e7 jalr 534(ra) # 8020395a <acquiresleep> return b; - 80203430: a8b9 j 8020348e <bread+0xcc> + 8020374c: a8b9 j 802037aa <bread+0xcc> for(b = bcache.head.prev; b != &bcache.head; b = b->prev){ - 80203432: 0001a497 auipc s1,0x1a - 80203436: d6e4b483 ld s1,-658(s1) # 8021d1a0 <bcache+0x46b0> - 8020343a: 0001a797 auipc a5,0x1a - 8020343e: d1e78793 addi a5,a5,-738 # 8021d158 <bcache+0x4668> - 80203442: 00f48863 beq s1,a5,80203452 <bread+0x90> - 80203446: 873e mv a4,a5 + 8020374e: 0001a497 auipc s1,0x1a + 80203752: a524b483 ld s1,-1454(s1) # 8021d1a0 <bcache+0x46b0> + 80203756: 0001a797 auipc a5,0x1a + 8020375a: a0278793 addi a5,a5,-1534 # 8021d158 <bcache+0x4668> + 8020375e: 00f48863 beq s1,a5,8020376e <bread+0x90> + 80203762: 873e mv a4,a5 if(b->refcnt == 0) { - 80203448: 40bc lw a5,64(s1) - 8020344a: cf81 beqz a5,80203462 <bread+0xa0> + 80203764: 40bc lw a5,64(s1) + 80203766: cf81 beqz a5,8020377e <bread+0xa0> for(b = bcache.head.prev; b != &bcache.head; b = b->prev){ - 8020344c: 64a4 ld s1,72(s1) - 8020344e: fee49de3 bne s1,a4,80203448 <bread+0x86> + 80203768: 64a4 ld s1,72(s1) + 8020376a: fee49de3 bne s1,a4,80203764 <bread+0x86> panic("bget: no buffers"); - 80203452: 00006517 auipc a0,0x6 - 80203456: 68650513 addi a0,a0,1670 # 80209ad8 <digits+0x758> - 8020345a: ffffd097 auipc ra,0xffffd - 8020345e: cea080e7 jalr -790(ra) # 80200144 <panic> + 8020376e: 00006517 auipc a0,0x6 + 80203772: 3a250513 addi a0,a0,930 # 80209b10 <digits+0x790> + 80203776: ffffd097 auipc ra,0xffffd + 8020377a: 9ce080e7 jalr -1586(ra) # 80200144 <panic> b->dev = dev; - 80203462: 0124a423 sw s2,8(s1) + 8020377e: 0124a423 sw s2,8(s1) b->sectorno = sectorno; - 80203466: 0134a623 sw s3,12(s1) + 80203782: 0134a623 sw s3,12(s1) b->valid = 0; - 8020346a: 0004a023 sw zero,0(s1) + 80203786: 0004a023 sw zero,0(s1) b->refcnt = 1; - 8020346e: 4785 li a5,1 - 80203470: c0bc sw a5,64(s1) + 8020378a: 4785 li a5,1 + 8020378c: c0bc sw a5,64(s1) release(&bcache.lock); - 80203472: 00015517 auipc a0,0x15 - 80203476: 67e50513 addi a0,a0,1662 # 80218af0 <bcache> - 8020347a: ffffd097 auipc ra,0xffffd - 8020347e: 2a0080e7 jalr 672(ra) # 8020071a <release> + 8020378e: 00015517 auipc a0,0x15 + 80203792: 36250513 addi a0,a0,866 # 80218af0 <bcache> + 80203796: ffffd097 auipc ra,0xffffd + 8020379a: f84080e7 jalr -124(ra) # 8020071a <release> acquiresleep(&b->lock); - 80203482: 01048513 addi a0,s1,16 - 80203486: 00000097 auipc ra,0x0 - 8020348a: 1b8080e7 jalr 440(ra) # 8020363e <acquiresleep> + 8020379e: 01048513 addi a0,s1,16 + 802037a2: 00000097 auipc ra,0x0 + 802037a6: 1b8080e7 jalr 440(ra) # 8020395a <acquiresleep> struct buf *b; b = bget(dev, sectorno); if (!b->valid) { - 8020348e: 409c lw a5,0(s1) - 80203490: cb89 beqz a5,802034a2 <bread+0xe0> + 802037aa: 409c lw a5,0(s1) + 802037ac: cb89 beqz a5,802037be <bread+0xe0> disk_read(b); b->valid = 1; } return b; } - 80203492: 8526 mv a0,s1 - 80203494: 70a2 ld ra,40(sp) - 80203496: 7402 ld s0,32(sp) - 80203498: 64e2 ld s1,24(sp) - 8020349a: 6942 ld s2,16(sp) - 8020349c: 69a2 ld s3,8(sp) - 8020349e: 6145 addi sp,sp,48 - 802034a0: 8082 ret + 802037ae: 8526 mv a0,s1 + 802037b0: 70a2 ld ra,40(sp) + 802037b2: 7402 ld s0,32(sp) + 802037b4: 64e2 ld s1,24(sp) + 802037b6: 6942 ld s2,16(sp) + 802037b8: 69a2 ld s3,8(sp) + 802037ba: 6145 addi sp,sp,48 + 802037bc: 8082 ret disk_read(b); - 802034a2: 8526 mv a0,s1 - 802034a4: 00002097 auipc ra,0x2 - 802034a8: bfe080e7 jalr -1026(ra) # 802050a2 <disk_read> + 802037be: 8526 mv a0,s1 + 802037c0: 00002097 auipc ra,0x2 + 802037c4: c32080e7 jalr -974(ra) # 802053f2 <disk_read> b->valid = 1; - 802034ac: 4785 li a5,1 - 802034ae: c09c sw a5,0(s1) + 802037c8: 4785 li a5,1 + 802037ca: c09c sw a5,0(s1) return b; - 802034b0: b7cd j 80203492 <bread+0xd0> + 802037cc: b7cd j 802037ae <bread+0xd0> -00000000802034b2 <bwrite>: +00000000802037ce <bwrite>: // Write b's contents to disk. Must be locked. void bwrite(struct buf *b) { - 802034b2: 1101 addi sp,sp,-32 - 802034b4: ec06 sd ra,24(sp) - 802034b6: e822 sd s0,16(sp) - 802034b8: e426 sd s1,8(sp) - 802034ba: 1000 addi s0,sp,32 - 802034bc: 84aa mv s1,a0 + 802037ce: 1101 addi sp,sp,-32 + 802037d0: ec06 sd ra,24(sp) + 802037d2: e822 sd s0,16(sp) + 802037d4: e426 sd s1,8(sp) + 802037d6: 1000 addi s0,sp,32 + 802037d8: 84aa mv s1,a0 if(!holdingsleep(&b->lock)) - 802034be: 0541 addi a0,a0,16 - 802034c0: 00000097 auipc ra,0x0 - 802034c4: 218080e7 jalr 536(ra) # 802036d8 <holdingsleep> - 802034c8: c919 beqz a0,802034de <bwrite+0x2c> + 802037da: 0541 addi a0,a0,16 + 802037dc: 00000097 auipc ra,0x0 + 802037e0: 218080e7 jalr 536(ra) # 802039f4 <holdingsleep> + 802037e4: c919 beqz a0,802037fa <bwrite+0x2c> panic("bwrite"); disk_write(b); - 802034ca: 8526 mv a0,s1 - 802034cc: 00002097 auipc ra,0x2 - 802034d0: bf0080e7 jalr -1040(ra) # 802050bc <disk_write> -} - 802034d4: 60e2 ld ra,24(sp) - 802034d6: 6442 ld s0,16(sp) - 802034d8: 64a2 ld s1,8(sp) - 802034da: 6105 addi sp,sp,32 - 802034dc: 8082 ret + 802037e6: 8526 mv a0,s1 + 802037e8: 00002097 auipc ra,0x2 + 802037ec: c24080e7 jalr -988(ra) # 8020540c <disk_write> +} + 802037f0: 60e2 ld ra,24(sp) + 802037f2: 6442 ld s0,16(sp) + 802037f4: 64a2 ld s1,8(sp) + 802037f6: 6105 addi sp,sp,32 + 802037f8: 8082 ret panic("bwrite"); - 802034de: 00006517 auipc a0,0x6 - 802034e2: 61250513 addi a0,a0,1554 # 80209af0 <digits+0x770> - 802034e6: ffffd097 auipc ra,0xffffd - 802034ea: c5e080e7 jalr -930(ra) # 80200144 <panic> + 802037fa: 00006517 auipc a0,0x6 + 802037fe: 32e50513 addi a0,a0,814 # 80209b28 <digits+0x7a8> + 80203802: ffffd097 auipc ra,0xffffd + 80203806: 942080e7 jalr -1726(ra) # 80200144 <panic> -00000000802034ee <brelse>: +000000008020380a <brelse>: // Release a locked buffer. // Move to the head of the most-recently-used list. void brelse(struct buf *b) { - 802034ee: 1101 addi sp,sp,-32 - 802034f0: ec06 sd ra,24(sp) - 802034f2: e822 sd s0,16(sp) - 802034f4: e426 sd s1,8(sp) - 802034f6: e04a sd s2,0(sp) - 802034f8: 1000 addi s0,sp,32 - 802034fa: 84aa mv s1,a0 + 8020380a: 1101 addi sp,sp,-32 + 8020380c: ec06 sd ra,24(sp) + 8020380e: e822 sd s0,16(sp) + 80203810: e426 sd s1,8(sp) + 80203812: e04a sd s2,0(sp) + 80203814: 1000 addi s0,sp,32 + 80203816: 84aa mv s1,a0 if(!holdingsleep(&b->lock)) - 802034fc: 01050913 addi s2,a0,16 - 80203500: 854a mv a0,s2 - 80203502: 00000097 auipc ra,0x0 - 80203506: 1d6080e7 jalr 470(ra) # 802036d8 <holdingsleep> - 8020350a: c92d beqz a0,8020357c <brelse+0x8e> + 80203818: 01050913 addi s2,a0,16 + 8020381c: 854a mv a0,s2 + 8020381e: 00000097 auipc ra,0x0 + 80203822: 1d6080e7 jalr 470(ra) # 802039f4 <holdingsleep> + 80203826: c92d beqz a0,80203898 <brelse+0x8e> panic("brelse"); releasesleep(&b->lock); - 8020350c: 854a mv a0,s2 - 8020350e: 00000097 auipc ra,0x0 - 80203512: 186080e7 jalr 390(ra) # 80203694 <releasesleep> + 80203828: 854a mv a0,s2 + 8020382a: 00000097 auipc ra,0x0 + 8020382e: 186080e7 jalr 390(ra) # 802039b0 <releasesleep> acquire(&bcache.lock); - 80203516: 00015517 auipc a0,0x15 - 8020351a: 5da50513 addi a0,a0,1498 # 80218af0 <bcache> - 8020351e: ffffd097 auipc ra,0xffffd - 80203522: 1a8080e7 jalr 424(ra) # 802006c6 <acquire> + 80203832: 00015517 auipc a0,0x15 + 80203836: 2be50513 addi a0,a0,702 # 80218af0 <bcache> + 8020383a: ffffd097 auipc ra,0xffffd + 8020383e: e8c080e7 jalr -372(ra) # 802006c6 <acquire> b->refcnt--; - 80203526: 40bc lw a5,64(s1) - 80203528: 37fd addiw a5,a5,-1 - 8020352a: 0007871b sext.w a4,a5 - 8020352e: c0bc sw a5,64(s1) + 80203842: 40bc lw a5,64(s1) + 80203844: 37fd addiw a5,a5,-1 + 80203846: 0007871b sext.w a4,a5 + 8020384a: c0bc sw a5,64(s1) if (b->refcnt == 0) { - 80203530: eb05 bnez a4,80203560 <brelse+0x72> + 8020384c: eb05 bnez a4,8020387c <brelse+0x72> // no one is waiting for it. b->next->prev = b->prev; - 80203532: 68bc ld a5,80(s1) - 80203534: 64b8 ld a4,72(s1) - 80203536: e7b8 sd a4,72(a5) + 8020384e: 68bc ld a5,80(s1) + 80203850: 64b8 ld a4,72(s1) + 80203852: e7b8 sd a4,72(a5) b->prev->next = b->next; - 80203538: 64bc ld a5,72(s1) - 8020353a: 68b8 ld a4,80(s1) - 8020353c: ebb8 sd a4,80(a5) + 80203854: 64bc ld a5,72(s1) + 80203856: 68b8 ld a4,80(s1) + 80203858: ebb8 sd a4,80(a5) b->next = bcache.head.next; - 8020353e: 00019797 auipc a5,0x19 - 80203542: 5b278793 addi a5,a5,1458 # 8021caf0 <bcache+0x4000> - 80203546: 6b87b703 ld a4,1720(a5) - 8020354a: e8b8 sd a4,80(s1) + 8020385a: 00019797 auipc a5,0x19 + 8020385e: 29678793 addi a5,a5,662 # 8021caf0 <bcache+0x4000> + 80203862: 6b87b703 ld a4,1720(a5) + 80203866: e8b8 sd a4,80(s1) b->prev = &bcache.head; - 8020354c: 0001a717 auipc a4,0x1a - 80203550: c0c70713 addi a4,a4,-1012 # 8021d158 <bcache+0x4668> - 80203554: e4b8 sd a4,72(s1) + 80203868: 0001a717 auipc a4,0x1a + 8020386c: 8f070713 addi a4,a4,-1808 # 8021d158 <bcache+0x4668> + 80203870: e4b8 sd a4,72(s1) bcache.head.next->prev = b; - 80203556: 6b87b703 ld a4,1720(a5) - 8020355a: e724 sd s1,72(a4) + 80203872: 6b87b703 ld a4,1720(a5) + 80203876: e724 sd s1,72(a4) bcache.head.next = b; - 8020355c: 6a97bc23 sd s1,1720(a5) + 80203878: 6a97bc23 sd s1,1720(a5) } release(&bcache.lock); - 80203560: 00015517 auipc a0,0x15 - 80203564: 59050513 addi a0,a0,1424 # 80218af0 <bcache> - 80203568: ffffd097 auipc ra,0xffffd - 8020356c: 1b2080e7 jalr 434(ra) # 8020071a <release> -} - 80203570: 60e2 ld ra,24(sp) - 80203572: 6442 ld s0,16(sp) - 80203574: 64a2 ld s1,8(sp) - 80203576: 6902 ld s2,0(sp) - 80203578: 6105 addi sp,sp,32 - 8020357a: 8082 ret + 8020387c: 00015517 auipc a0,0x15 + 80203880: 27450513 addi a0,a0,628 # 80218af0 <bcache> + 80203884: ffffd097 auipc ra,0xffffd + 80203888: e96080e7 jalr -362(ra) # 8020071a <release> +} + 8020388c: 60e2 ld ra,24(sp) + 8020388e: 6442 ld s0,16(sp) + 80203890: 64a2 ld s1,8(sp) + 80203892: 6902 ld s2,0(sp) + 80203894: 6105 addi sp,sp,32 + 80203896: 8082 ret panic("brelse"); - 8020357c: 00006517 auipc a0,0x6 - 80203580: 57c50513 addi a0,a0,1404 # 80209af8 <digits+0x778> - 80203584: ffffd097 auipc ra,0xffffd - 80203588: bc0080e7 jalr -1088(ra) # 80200144 <panic> + 80203898: 00006517 auipc a0,0x6 + 8020389c: 29850513 addi a0,a0,664 # 80209b30 <digits+0x7b0> + 802038a0: ffffd097 auipc ra,0xffffd + 802038a4: 8a4080e7 jalr -1884(ra) # 80200144 <panic> -000000008020358c <bpin>: +00000000802038a8 <bpin>: void bpin(struct buf *b) { - 8020358c: 1101 addi sp,sp,-32 - 8020358e: ec06 sd ra,24(sp) - 80203590: e822 sd s0,16(sp) - 80203592: e426 sd s1,8(sp) - 80203594: 1000 addi s0,sp,32 - 80203596: 84aa mv s1,a0 + 802038a8: 1101 addi sp,sp,-32 + 802038aa: ec06 sd ra,24(sp) + 802038ac: e822 sd s0,16(sp) + 802038ae: e426 sd s1,8(sp) + 802038b0: 1000 addi s0,sp,32 + 802038b2: 84aa mv s1,a0 acquire(&bcache.lock); - 80203598: 00015517 auipc a0,0x15 - 8020359c: 55850513 addi a0,a0,1368 # 80218af0 <bcache> - 802035a0: ffffd097 auipc ra,0xffffd - 802035a4: 126080e7 jalr 294(ra) # 802006c6 <acquire> + 802038b4: 00015517 auipc a0,0x15 + 802038b8: 23c50513 addi a0,a0,572 # 80218af0 <bcache> + 802038bc: ffffd097 auipc ra,0xffffd + 802038c0: e0a080e7 jalr -502(ra) # 802006c6 <acquire> b->refcnt++; - 802035a8: 40bc lw a5,64(s1) - 802035aa: 2785 addiw a5,a5,1 - 802035ac: c0bc sw a5,64(s1) + 802038c4: 40bc lw a5,64(s1) + 802038c6: 2785 addiw a5,a5,1 + 802038c8: c0bc sw a5,64(s1) release(&bcache.lock); - 802035ae: 00015517 auipc a0,0x15 - 802035b2: 54250513 addi a0,a0,1346 # 80218af0 <bcache> - 802035b6: ffffd097 auipc ra,0xffffd - 802035ba: 164080e7 jalr 356(ra) # 8020071a <release> + 802038ca: 00015517 auipc a0,0x15 + 802038ce: 22650513 addi a0,a0,550 # 80218af0 <bcache> + 802038d2: ffffd097 auipc ra,0xffffd + 802038d6: e48080e7 jalr -440(ra) # 8020071a <release> } - 802035be: 60e2 ld ra,24(sp) - 802035c0: 6442 ld s0,16(sp) - 802035c2: 64a2 ld s1,8(sp) - 802035c4: 6105 addi sp,sp,32 - 802035c6: 8082 ret + 802038da: 60e2 ld ra,24(sp) + 802038dc: 6442 ld s0,16(sp) + 802038de: 64a2 ld s1,8(sp) + 802038e0: 6105 addi sp,sp,32 + 802038e2: 8082 ret -00000000802035c8 <bunpin>: +00000000802038e4 <bunpin>: void bunpin(struct buf *b) { - 802035c8: 1101 addi sp,sp,-32 - 802035ca: ec06 sd ra,24(sp) - 802035cc: e822 sd s0,16(sp) - 802035ce: e426 sd s1,8(sp) - 802035d0: 1000 addi s0,sp,32 - 802035d2: 84aa mv s1,a0 + 802038e4: 1101 addi sp,sp,-32 + 802038e6: ec06 sd ra,24(sp) + 802038e8: e822 sd s0,16(sp) + 802038ea: e426 sd s1,8(sp) + 802038ec: 1000 addi s0,sp,32 + 802038ee: 84aa mv s1,a0 acquire(&bcache.lock); - 802035d4: 00015517 auipc a0,0x15 - 802035d8: 51c50513 addi a0,a0,1308 # 80218af0 <bcache> - 802035dc: ffffd097 auipc ra,0xffffd - 802035e0: 0ea080e7 jalr 234(ra) # 802006c6 <acquire> + 802038f0: 00015517 auipc a0,0x15 + 802038f4: 20050513 addi a0,a0,512 # 80218af0 <bcache> + 802038f8: ffffd097 auipc ra,0xffffd + 802038fc: dce080e7 jalr -562(ra) # 802006c6 <acquire> b->refcnt--; - 802035e4: 40bc lw a5,64(s1) - 802035e6: 37fd addiw a5,a5,-1 - 802035e8: c0bc sw a5,64(s1) + 80203900: 40bc lw a5,64(s1) + 80203902: 37fd addiw a5,a5,-1 + 80203904: c0bc sw a5,64(s1) release(&bcache.lock); - 802035ea: 00015517 auipc a0,0x15 - 802035ee: 50650513 addi a0,a0,1286 # 80218af0 <bcache> - 802035f2: ffffd097 auipc ra,0xffffd - 802035f6: 128080e7 jalr 296(ra) # 8020071a <release> -} - 802035fa: 60e2 ld ra,24(sp) - 802035fc: 6442 ld s0,16(sp) - 802035fe: 64a2 ld s1,8(sp) - 80203600: 6105 addi sp,sp,32 - 80203602: 8082 ret - -0000000080203604 <initsleeplock>: + 80203906: 00015517 auipc a0,0x15 + 8020390a: 1ea50513 addi a0,a0,490 # 80218af0 <bcache> + 8020390e: ffffd097 auipc ra,0xffffd + 80203912: e0c080e7 jalr -500(ra) # 8020071a <release> +} + 80203916: 60e2 ld ra,24(sp) + 80203918: 6442 ld s0,16(sp) + 8020391a: 64a2 ld s1,8(sp) + 8020391c: 6105 addi sp,sp,32 + 8020391e: 8082 ret + +0000000080203920 <initsleeplock>: #include "include/proc.h" #include "include/sleeplock.h" void initsleeplock(struct sleeplock *lk, char *name) { - 80203604: 1101 addi sp,sp,-32 - 80203606: ec06 sd ra,24(sp) - 80203608: e822 sd s0,16(sp) - 8020360a: e426 sd s1,8(sp) - 8020360c: e04a sd s2,0(sp) - 8020360e: 1000 addi s0,sp,32 - 80203610: 84aa mv s1,a0 - 80203612: 892e mv s2,a1 + 80203920: 1101 addi sp,sp,-32 + 80203922: ec06 sd ra,24(sp) + 80203924: e822 sd s0,16(sp) + 80203926: e426 sd s1,8(sp) + 80203928: e04a sd s2,0(sp) + 8020392a: 1000 addi s0,sp,32 + 8020392c: 84aa mv s1,a0 + 8020392e: 892e mv s2,a1 initlock(&lk->lk, "sleep lock"); - 80203614: 00006597 auipc a1,0x6 - 80203618: 4ec58593 addi a1,a1,1260 # 80209b00 <digits+0x780> - 8020361c: 0521 addi a0,a0,8 - 8020361e: ffffd097 auipc ra,0xffffd - 80203622: 064080e7 jalr 100(ra) # 80200682 <initlock> + 80203930: 00006597 auipc a1,0x6 + 80203934: 20858593 addi a1,a1,520 # 80209b38 <digits+0x7b8> + 80203938: 0521 addi a0,a0,8 + 8020393a: ffffd097 auipc ra,0xffffd + 8020393e: d48080e7 jalr -696(ra) # 80200682 <initlock> lk->name = name; - 80203626: 0324b023 sd s2,32(s1) + 80203942: 0324b023 sd s2,32(s1) lk->locked = 0; - 8020362a: 0004a023 sw zero,0(s1) + 80203946: 0004a023 sw zero,0(s1) lk->pid = 0; - 8020362e: 0204a423 sw zero,40(s1) + 8020394a: 0204a423 sw zero,40(s1) } - 80203632: 60e2 ld ra,24(sp) - 80203634: 6442 ld s0,16(sp) - 80203636: 64a2 ld s1,8(sp) - 80203638: 6902 ld s2,0(sp) - 8020363a: 6105 addi sp,sp,32 - 8020363c: 8082 ret + 8020394e: 60e2 ld ra,24(sp) + 80203950: 6442 ld s0,16(sp) + 80203952: 64a2 ld s1,8(sp) + 80203954: 6902 ld s2,0(sp) + 80203956: 6105 addi sp,sp,32 + 80203958: 8082 ret -000000008020363e <acquiresleep>: +000000008020395a <acquiresleep>: void acquiresleep(struct sleeplock *lk) { - 8020363e: 1101 addi sp,sp,-32 - 80203640: ec06 sd ra,24(sp) - 80203642: e822 sd s0,16(sp) - 80203644: e426 sd s1,8(sp) - 80203646: e04a sd s2,0(sp) - 80203648: 1000 addi s0,sp,32 - 8020364a: 84aa mv s1,a0 + 8020395a: 1101 addi sp,sp,-32 + 8020395c: ec06 sd ra,24(sp) + 8020395e: e822 sd s0,16(sp) + 80203960: e426 sd s1,8(sp) + 80203962: e04a sd s2,0(sp) + 80203964: 1000 addi s0,sp,32 + 80203966: 84aa mv s1,a0 acquire(&lk->lk); - 8020364c: 00850913 addi s2,a0,8 - 80203650: 854a mv a0,s2 - 80203652: ffffd097 auipc ra,0xffffd - 80203656: 074080e7 jalr 116(ra) # 802006c6 <acquire> + 80203968: 00850913 addi s2,a0,8 + 8020396c: 854a mv a0,s2 + 8020396e: ffffd097 auipc ra,0xffffd + 80203972: d58080e7 jalr -680(ra) # 802006c6 <acquire> while (lk->locked) { - 8020365a: 409c lw a5,0(s1) - 8020365c: cb89 beqz a5,8020366e <acquiresleep+0x30> + 80203976: 409c lw a5,0(s1) + 80203978: cb89 beqz a5,8020398a <acquiresleep+0x30> sleep(lk, &lk->lk); - 8020365e: 85ca mv a1,s2 - 80203660: 8526 mv a0,s1 - 80203662: fffff097 auipc ra,0xfffff - 80203666: c5a080e7 jalr -934(ra) # 802022bc <sleep> + 8020397a: 85ca mv a1,s2 + 8020397c: 8526 mv a0,s1 + 8020397e: fffff097 auipc ra,0xfffff + 80203982: 93e080e7 jalr -1730(ra) # 802022bc <sleep> while (lk->locked) { - 8020366a: 409c lw a5,0(s1) - 8020366c: fbed bnez a5,8020365e <acquiresleep+0x20> + 80203986: 409c lw a5,0(s1) + 80203988: fbed bnez a5,8020397a <acquiresleep+0x20> } lk->locked = 1; - 8020366e: 4785 li a5,1 - 80203670: c09c sw a5,0(s1) + 8020398a: 4785 li a5,1 + 8020398c: c09c sw a5,0(s1) lk->pid = myproc()->pid; - 80203672: ffffe097 auipc ra,0xffffe - 80203676: 3ca080e7 jalr 970(ra) # 80201a3c <myproc> - 8020367a: 5d1c lw a5,56(a0) - 8020367c: d49c sw a5,40(s1) + 8020398e: ffffe097 auipc ra,0xffffe + 80203992: 0ae080e7 jalr 174(ra) # 80201a3c <myproc> + 80203996: 5d1c lw a5,56(a0) + 80203998: d49c sw a5,40(s1) release(&lk->lk); - 8020367e: 854a mv a0,s2 - 80203680: ffffd097 auipc ra,0xffffd - 80203684: 09a080e7 jalr 154(ra) # 8020071a <release> + 8020399a: 854a mv a0,s2 + 8020399c: ffffd097 auipc ra,0xffffd + 802039a0: d7e080e7 jalr -642(ra) # 8020071a <release> } - 80203688: 60e2 ld ra,24(sp) - 8020368a: 6442 ld s0,16(sp) - 8020368c: 64a2 ld s1,8(sp) - 8020368e: 6902 ld s2,0(sp) - 80203690: 6105 addi sp,sp,32 - 80203692: 8082 ret + 802039a4: 60e2 ld ra,24(sp) + 802039a6: 6442 ld s0,16(sp) + 802039a8: 64a2 ld s1,8(sp) + 802039aa: 6902 ld s2,0(sp) + 802039ac: 6105 addi sp,sp,32 + 802039ae: 8082 ret -0000000080203694 <releasesleep>: +00000000802039b0 <releasesleep>: void releasesleep(struct sleeplock *lk) { - 80203694: 1101 addi sp,sp,-32 - 80203696: ec06 sd ra,24(sp) - 80203698: e822 sd s0,16(sp) - 8020369a: e426 sd s1,8(sp) - 8020369c: e04a sd s2,0(sp) - 8020369e: 1000 addi s0,sp,32 - 802036a0: 84aa mv s1,a0 + 802039b0: 1101 addi sp,sp,-32 + 802039b2: ec06 sd ra,24(sp) + 802039b4: e822 sd s0,16(sp) + 802039b6: e426 sd s1,8(sp) + 802039b8: e04a sd s2,0(sp) + 802039ba: 1000 addi s0,sp,32 + 802039bc: 84aa mv s1,a0 acquire(&lk->lk); - 802036a2: 00850913 addi s2,a0,8 - 802036a6: 854a mv a0,s2 - 802036a8: ffffd097 auipc ra,0xffffd - 802036ac: 01e080e7 jalr 30(ra) # 802006c6 <acquire> + 802039be: 00850913 addi s2,a0,8 + 802039c2: 854a mv a0,s2 + 802039c4: ffffd097 auipc ra,0xffffd + 802039c8: d02080e7 jalr -766(ra) # 802006c6 <acquire> lk->locked = 0; - 802036b0: 0004a023 sw zero,0(s1) + 802039cc: 0004a023 sw zero,0(s1) lk->pid = 0; - 802036b4: 0204a423 sw zero,40(s1) + 802039d0: 0204a423 sw zero,40(s1) wakeup(lk); - 802036b8: 8526 mv a0,s1 - 802036ba: fffff097 auipc ra,0xfffff - 802036be: d7e080e7 jalr -642(ra) # 80202438 <wakeup> + 802039d4: 8526 mv a0,s1 + 802039d6: fffff097 auipc ra,0xfffff + 802039da: a62080e7 jalr -1438(ra) # 80202438 <wakeup> release(&lk->lk); - 802036c2: 854a mv a0,s2 - 802036c4: ffffd097 auipc ra,0xffffd - 802036c8: 056080e7 jalr 86(ra) # 8020071a <release> + 802039de: 854a mv a0,s2 + 802039e0: ffffd097 auipc ra,0xffffd + 802039e4: d3a080e7 jalr -710(ra) # 8020071a <release> } - 802036cc: 60e2 ld ra,24(sp) - 802036ce: 6442 ld s0,16(sp) - 802036d0: 64a2 ld s1,8(sp) - 802036d2: 6902 ld s2,0(sp) - 802036d4: 6105 addi sp,sp,32 - 802036d6: 8082 ret + 802039e8: 60e2 ld ra,24(sp) + 802039ea: 6442 ld s0,16(sp) + 802039ec: 64a2 ld s1,8(sp) + 802039ee: 6902 ld s2,0(sp) + 802039f0: 6105 addi sp,sp,32 + 802039f2: 8082 ret -00000000802036d8 <holdingsleep>: +00000000802039f4 <holdingsleep>: int holdingsleep(struct sleeplock *lk) { - 802036d8: 7179 addi sp,sp,-48 - 802036da: f406 sd ra,40(sp) - 802036dc: f022 sd s0,32(sp) - 802036de: ec26 sd s1,24(sp) - 802036e0: e84a sd s2,16(sp) - 802036e2: e44e sd s3,8(sp) - 802036e4: 1800 addi s0,sp,48 - 802036e6: 84aa mv s1,a0 + 802039f4: 7179 addi sp,sp,-48 + 802039f6: f406 sd ra,40(sp) + 802039f8: f022 sd s0,32(sp) + 802039fa: ec26 sd s1,24(sp) + 802039fc: e84a sd s2,16(sp) + 802039fe: e44e sd s3,8(sp) + 80203a00: 1800 addi s0,sp,48 + 80203a02: 84aa mv s1,a0 int r; acquire(&lk->lk); - 802036e8: 00850913 addi s2,a0,8 - 802036ec: 854a mv a0,s2 - 802036ee: ffffd097 auipc ra,0xffffd - 802036f2: fd8080e7 jalr -40(ra) # 802006c6 <acquire> + 80203a04: 00850913 addi s2,a0,8 + 80203a08: 854a mv a0,s2 + 80203a0a: ffffd097 auipc ra,0xffffd + 80203a0e: cbc080e7 jalr -836(ra) # 802006c6 <acquire> r = lk->locked && (lk->pid == myproc()->pid); - 802036f6: 409c lw a5,0(s1) - 802036f8: ef99 bnez a5,80203716 <holdingsleep+0x3e> - 802036fa: 4481 li s1,0 + 80203a12: 409c lw a5,0(s1) + 80203a14: ef99 bnez a5,80203a32 <holdingsleep+0x3e> + 80203a16: 4481 li s1,0 release(&lk->lk); - 802036fc: 854a mv a0,s2 - 802036fe: ffffd097 auipc ra,0xffffd - 80203702: 01c080e7 jalr 28(ra) # 8020071a <release> + 80203a18: 854a mv a0,s2 + 80203a1a: ffffd097 auipc ra,0xffffd + 80203a1e: d00080e7 jalr -768(ra) # 8020071a <release> return r; } - 80203706: 8526 mv a0,s1 - 80203708: 70a2 ld ra,40(sp) - 8020370a: 7402 ld s0,32(sp) - 8020370c: 64e2 ld s1,24(sp) - 8020370e: 6942 ld s2,16(sp) - 80203710: 69a2 ld s3,8(sp) - 80203712: 6145 addi sp,sp,48 - 80203714: 8082 ret + 80203a22: 8526 mv a0,s1 + 80203a24: 70a2 ld ra,40(sp) + 80203a26: 7402 ld s0,32(sp) + 80203a28: 64e2 ld s1,24(sp) + 80203a2a: 6942 ld s2,16(sp) + 80203a2c: 69a2 ld s3,8(sp) + 80203a2e: 6145 addi sp,sp,48 + 80203a30: 8082 ret r = lk->locked && (lk->pid == myproc()->pid); - 80203716: 0284a983 lw s3,40(s1) - 8020371a: ffffe097 auipc ra,0xffffe - 8020371e: 322080e7 jalr 802(ra) # 80201a3c <myproc> - 80203722: 5d04 lw s1,56(a0) - 80203724: 413484b3 sub s1,s1,s3 - 80203728: 0014b493 seqz s1,s1 - 8020372c: bfc1 j 802036fc <holdingsleep+0x24> - -000000008020372e <fileinit>: + 80203a32: 0284a983 lw s3,40(s1) + 80203a36: ffffe097 auipc ra,0xffffe + 80203a3a: 006080e7 jalr 6(ra) # 80201a3c <myproc> + 80203a3e: 5d04 lw s1,56(a0) + 80203a40: 413484b3 sub s1,s1,s3 + 80203a44: 0014b493 seqz s1,s1 + 80203a48: bfc1 j 80203a18 <holdingsleep+0x24> + +0000000080203a4a <fileinit>: struct file file[NFILE]; } ftable; void fileinit(void) { - 8020372e: 1101 addi sp,sp,-32 - 80203730: ec06 sd ra,24(sp) - 80203732: e822 sd s0,16(sp) - 80203734: e426 sd s1,8(sp) - 80203736: e04a sd s2,0(sp) - 80203738: 1000 addi s0,sp,32 + 80203a4a: 1101 addi sp,sp,-32 + 80203a4c: ec06 sd ra,24(sp) + 80203a4e: e822 sd s0,16(sp) + 80203a50: e426 sd s1,8(sp) + 80203a52: e04a sd s2,0(sp) + 80203a54: 1000 addi s0,sp,32 initlock(&ftable.lock, "ftable"); - 8020373a: 00006597 auipc a1,0x6 - 8020373e: 3d658593 addi a1,a1,982 # 80209b10 <digits+0x790> - 80203742: 0001a517 auipc a0,0x1a - 80203746: d0e50513 addi a0,a0,-754 # 8021d450 <ftable> - 8020374a: ffffd097 auipc ra,0xffffd - 8020374e: f38080e7 jalr -200(ra) # 80200682 <initlock> + 80203a56: 00006597 auipc a1,0x6 + 80203a5a: 0f258593 addi a1,a1,242 # 80209b48 <digits+0x7c8> + 80203a5e: 0001a517 auipc a0,0x1a + 80203a62: 9f250513 addi a0,a0,-1550 # 8021d450 <ftable> + 80203a66: ffffd097 auipc ra,0xffffd + 80203a6a: c1c080e7 jalr -996(ra) # 80200682 <initlock> struct file *f; for(f = ftable.file; f < ftable.file + NFILE; f++){ - 80203752: 0001a497 auipc s1,0x1a - 80203756: d1648493 addi s1,s1,-746 # 8021d468 <ftable+0x18> - 8020375a: 0001b917 auipc s2,0x1b - 8020375e: cae90913 addi s2,s2,-850 # 8021e408 <tickslock> + 80203a6e: 0001a497 auipc s1,0x1a + 80203a72: 9fa48493 addi s1,s1,-1542 # 8021d468 <ftable+0x18> + 80203a76: 0001b917 auipc s2,0x1b + 80203a7a: 99290913 addi s2,s2,-1646 # 8021e408 <tickslock> memset(f, 0, sizeof(struct file)); - 80203762: 02800613 li a2,40 - 80203766: 4581 li a1,0 - 80203768: 8526 mv a0,s1 - 8020376a: ffffd097 auipc ra,0xffffd - 8020376e: ff8080e7 jalr -8(ra) # 80200762 <memset> + 80203a7e: 02800613 li a2,40 + 80203a82: 4581 li a1,0 + 80203a84: 8526 mv a0,s1 + 80203a86: ffffd097 auipc ra,0xffffd + 80203a8a: cdc080e7 jalr -804(ra) # 80200762 <memset> for(f = ftable.file; f < ftable.file + NFILE; f++){ - 80203772: 02848493 addi s1,s1,40 - 80203776: ff2496e3 bne s1,s2,80203762 <fileinit+0x34> + 80203a8e: 02848493 addi s1,s1,40 + 80203a92: ff2496e3 bne s1,s2,80203a7e <fileinit+0x34> } #ifdef DEBUG printf("fileinit\n"); #endif } - 8020377a: 60e2 ld ra,24(sp) - 8020377c: 6442 ld s0,16(sp) - 8020377e: 64a2 ld s1,8(sp) - 80203780: 6902 ld s2,0(sp) - 80203782: 6105 addi sp,sp,32 - 80203784: 8082 ret + 80203a96: 60e2 ld ra,24(sp) + 80203a98: 6442 ld s0,16(sp) + 80203a9a: 64a2 ld s1,8(sp) + 80203a9c: 6902 ld s2,0(sp) + 80203a9e: 6105 addi sp,sp,32 + 80203aa0: 8082 ret -0000000080203786 <filealloc>: +0000000080203aa2 <filealloc>: // Allocate a file structure. struct file* filealloc(void) { - 80203786: 1101 addi sp,sp,-32 - 80203788: ec06 sd ra,24(sp) - 8020378a: e822 sd s0,16(sp) - 8020378c: e426 sd s1,8(sp) - 8020378e: 1000 addi s0,sp,32 + 80203aa2: 1101 addi sp,sp,-32 + 80203aa4: ec06 sd ra,24(sp) + 80203aa6: e822 sd s0,16(sp) + 80203aa8: e426 sd s1,8(sp) + 80203aaa: 1000 addi s0,sp,32 struct file *f; acquire(&ftable.lock); - 80203790: 0001a517 auipc a0,0x1a - 80203794: cc050513 addi a0,a0,-832 # 8021d450 <ftable> - 80203798: ffffd097 auipc ra,0xffffd - 8020379c: f2e080e7 jalr -210(ra) # 802006c6 <acquire> + 80203aac: 0001a517 auipc a0,0x1a + 80203ab0: 9a450513 addi a0,a0,-1628 # 8021d450 <ftable> + 80203ab4: ffffd097 auipc ra,0xffffd + 80203ab8: c12080e7 jalr -1006(ra) # 802006c6 <acquire> for(f = ftable.file; f < ftable.file + NFILE; f++){ - 802037a0: 0001a497 auipc s1,0x1a - 802037a4: cc848493 addi s1,s1,-824 # 8021d468 <ftable+0x18> - 802037a8: 0001b717 auipc a4,0x1b - 802037ac: c6070713 addi a4,a4,-928 # 8021e408 <tickslock> + 80203abc: 0001a497 auipc s1,0x1a + 80203ac0: 9ac48493 addi s1,s1,-1620 # 8021d468 <ftable+0x18> + 80203ac4: 0001b717 auipc a4,0x1b + 80203ac8: 94470713 addi a4,a4,-1724 # 8021e408 <tickslock> if(f->ref == 0){ - 802037b0: 40dc lw a5,4(s1) - 802037b2: cf99 beqz a5,802037d0 <filealloc+0x4a> + 80203acc: 40dc lw a5,4(s1) + 80203ace: cf99 beqz a5,80203aec <filealloc+0x4a> for(f = ftable.file; f < ftable.file + NFILE; f++){ - 802037b4: 02848493 addi s1,s1,40 - 802037b8: fee49ce3 bne s1,a4,802037b0 <filealloc+0x2a> + 80203ad0: 02848493 addi s1,s1,40 + 80203ad4: fee49ce3 bne s1,a4,80203acc <filealloc+0x2a> f->ref = 1; release(&ftable.lock); return f; } } release(&ftable.lock); - 802037bc: 0001a517 auipc a0,0x1a - 802037c0: c9450513 addi a0,a0,-876 # 8021d450 <ftable> - 802037c4: ffffd097 auipc ra,0xffffd - 802037c8: f56080e7 jalr -170(ra) # 8020071a <release> + 80203ad8: 0001a517 auipc a0,0x1a + 80203adc: 97850513 addi a0,a0,-1672 # 8021d450 <ftable> + 80203ae0: ffffd097 auipc ra,0xffffd + 80203ae4: c3a080e7 jalr -966(ra) # 8020071a <release> return NULL; - 802037cc: 4481 li s1,0 - 802037ce: a819 j 802037e4 <filealloc+0x5e> + 80203ae8: 4481 li s1,0 + 80203aea: a819 j 80203b00 <filealloc+0x5e> f->ref = 1; - 802037d0: 4785 li a5,1 - 802037d2: c0dc sw a5,4(s1) + 80203aec: 4785 li a5,1 + 80203aee: c0dc sw a5,4(s1) release(&ftable.lock); - 802037d4: 0001a517 auipc a0,0x1a - 802037d8: c7c50513 addi a0,a0,-900 # 8021d450 <ftable> - 802037dc: ffffd097 auipc ra,0xffffd - 802037e0: f3e080e7 jalr -194(ra) # 8020071a <release> + 80203af0: 0001a517 auipc a0,0x1a + 80203af4: 96050513 addi a0,a0,-1696 # 8021d450 <ftable> + 80203af8: ffffd097 auipc ra,0xffffd + 80203afc: c22080e7 jalr -990(ra) # 8020071a <release> } - 802037e4: 8526 mv a0,s1 - 802037e6: 60e2 ld ra,24(sp) - 802037e8: 6442 ld s0,16(sp) - 802037ea: 64a2 ld s1,8(sp) - 802037ec: 6105 addi sp,sp,32 - 802037ee: 8082 ret + 80203b00: 8526 mv a0,s1 + 80203b02: 60e2 ld ra,24(sp) + 80203b04: 6442 ld s0,16(sp) + 80203b06: 64a2 ld s1,8(sp) + 80203b08: 6105 addi sp,sp,32 + 80203b0a: 8082 ret -00000000802037f0 <filedup>: +0000000080203b0c <filedup>: // Increment ref count for file f. struct file* filedup(struct file *f) { - 802037f0: 1101 addi sp,sp,-32 - 802037f2: ec06 sd ra,24(sp) - 802037f4: e822 sd s0,16(sp) - 802037f6: e426 sd s1,8(sp) - 802037f8: 1000 addi s0,sp,32 - 802037fa: 84aa mv s1,a0 + 80203b0c: 1101 addi sp,sp,-32 + 80203b0e: ec06 sd ra,24(sp) + 80203b10: e822 sd s0,16(sp) + 80203b12: e426 sd s1,8(sp) + 80203b14: 1000 addi s0,sp,32 + 80203b16: 84aa mv s1,a0 acquire(&ftable.lock); - 802037fc: 0001a517 auipc a0,0x1a - 80203800: c5450513 addi a0,a0,-940 # 8021d450 <ftable> - 80203804: ffffd097 auipc ra,0xffffd - 80203808: ec2080e7 jalr -318(ra) # 802006c6 <acquire> + 80203b18: 0001a517 auipc a0,0x1a + 80203b1c: 93850513 addi a0,a0,-1736 # 8021d450 <ftable> + 80203b20: ffffd097 auipc ra,0xffffd + 80203b24: ba6080e7 jalr -1114(ra) # 802006c6 <acquire> if(f->ref < 1) - 8020380c: 40dc lw a5,4(s1) - 8020380e: 02f05263 blez a5,80203832 <filedup+0x42> + 80203b28: 40dc lw a5,4(s1) + 80203b2a: 02f05263 blez a5,80203b4e <filedup+0x42> panic("filedup"); f->ref++; - 80203812: 2785 addiw a5,a5,1 - 80203814: c0dc sw a5,4(s1) + 80203b2e: 2785 addiw a5,a5,1 + 80203b30: c0dc sw a5,4(s1) release(&ftable.lock); - 80203816: 0001a517 auipc a0,0x1a - 8020381a: c3a50513 addi a0,a0,-966 # 8021d450 <ftable> - 8020381e: ffffd097 auipc ra,0xffffd - 80203822: efc080e7 jalr -260(ra) # 8020071a <release> + 80203b32: 0001a517 auipc a0,0x1a + 80203b36: 91e50513 addi a0,a0,-1762 # 8021d450 <ftable> + 80203b3a: ffffd097 auipc ra,0xffffd + 80203b3e: be0080e7 jalr -1056(ra) # 8020071a <release> return f; } - 80203826: 8526 mv a0,s1 - 80203828: 60e2 ld ra,24(sp) - 8020382a: 6442 ld s0,16(sp) - 8020382c: 64a2 ld s1,8(sp) - 8020382e: 6105 addi sp,sp,32 - 80203830: 8082 ret + 80203b42: 8526 mv a0,s1 + 80203b44: 60e2 ld ra,24(sp) + 80203b46: 6442 ld s0,16(sp) + 80203b48: 64a2 ld s1,8(sp) + 80203b4a: 6105 addi sp,sp,32 + 80203b4c: 8082 ret panic("filedup"); - 80203832: 00006517 auipc a0,0x6 - 80203836: 2e650513 addi a0,a0,742 # 80209b18 <digits+0x798> - 8020383a: ffffd097 auipc ra,0xffffd - 8020383e: 90a080e7 jalr -1782(ra) # 80200144 <panic> + 80203b4e: 00006517 auipc a0,0x6 + 80203b52: 00250513 addi a0,a0,2 # 80209b50 <digits+0x7d0> + 80203b56: ffffc097 auipc ra,0xffffc + 80203b5a: 5ee080e7 jalr 1518(ra) # 80200144 <panic> -0000000080203842 <fileclose>: +0000000080203b5e <fileclose>: // Close file f. (Decrement ref count, close when reaches 0.) void fileclose(struct file *f) { - 80203842: 7139 addi sp,sp,-64 - 80203844: fc06 sd ra,56(sp) - 80203846: f822 sd s0,48(sp) - 80203848: f426 sd s1,40(sp) - 8020384a: f04a sd s2,32(sp) - 8020384c: ec4e sd s3,24(sp) - 8020384e: e852 sd s4,16(sp) - 80203850: e456 sd s5,8(sp) - 80203852: 0080 addi s0,sp,64 - 80203854: 84aa mv s1,a0 + 80203b5e: 7139 addi sp,sp,-64 + 80203b60: fc06 sd ra,56(sp) + 80203b62: f822 sd s0,48(sp) + 80203b64: f426 sd s1,40(sp) + 80203b66: f04a sd s2,32(sp) + 80203b68: ec4e sd s3,24(sp) + 80203b6a: e852 sd s4,16(sp) + 80203b6c: e456 sd s5,8(sp) + 80203b6e: 0080 addi s0,sp,64 + 80203b70: 84aa mv s1,a0 struct file ff; acquire(&ftable.lock); - 80203856: 0001a517 auipc a0,0x1a - 8020385a: bfa50513 addi a0,a0,-1030 # 8021d450 <ftable> - 8020385e: ffffd097 auipc ra,0xffffd - 80203862: e68080e7 jalr -408(ra) # 802006c6 <acquire> + 80203b72: 0001a517 auipc a0,0x1a + 80203b76: 8de50513 addi a0,a0,-1826 # 8021d450 <ftable> + 80203b7a: ffffd097 auipc ra,0xffffd + 80203b7e: b4c080e7 jalr -1204(ra) # 802006c6 <acquire> if(f->ref < 1) - 80203866: 40dc lw a5,4(s1) - 80203868: 04f05863 blez a5,802038b8 <fileclose+0x76> + 80203b82: 40dc lw a5,4(s1) + 80203b84: 04f05863 blez a5,80203bd4 <fileclose+0x76> panic("fileclose"); if(--f->ref > 0){ - 8020386c: 37fd addiw a5,a5,-1 - 8020386e: 0007871b sext.w a4,a5 - 80203872: c0dc sw a5,4(s1) - 80203874: 04e04a63 bgtz a4,802038c8 <fileclose+0x86> + 80203b88: 37fd addiw a5,a5,-1 + 80203b8a: 0007871b sext.w a4,a5 + 80203b8e: c0dc sw a5,4(s1) + 80203b90: 04e04a63 bgtz a4,80203be4 <fileclose+0x86> release(&ftable.lock); return; } ff = *f; - 80203878: 0004a903 lw s2,0(s1) - 8020387c: 0094ca03 lbu s4,9(s1) - 80203880: 0104b983 ld s3,16(s1) - 80203884: 0184ba83 ld s5,24(s1) + 80203b94: 0004a903 lw s2,0(s1) + 80203b98: 0094ca03 lbu s4,9(s1) + 80203b9c: 0104b983 ld s3,16(s1) + 80203ba0: 0184ba83 ld s5,24(s1) f->ref = 0; - 80203888: 0004a223 sw zero,4(s1) + 80203ba4: 0004a223 sw zero,4(s1) f->type = FD_NONE; - 8020388c: 0004a023 sw zero,0(s1) + 80203ba8: 0004a023 sw zero,0(s1) release(&ftable.lock); - 80203890: 0001a517 auipc a0,0x1a - 80203894: bc050513 addi a0,a0,-1088 # 8021d450 <ftable> - 80203898: ffffd097 auipc ra,0xffffd - 8020389c: e82080e7 jalr -382(ra) # 8020071a <release> + 80203bac: 0001a517 auipc a0,0x1a + 80203bb0: 8a450513 addi a0,a0,-1884 # 8021d450 <ftable> + 80203bb4: ffffd097 auipc ra,0xffffd + 80203bb8: b66080e7 jalr -1178(ra) # 8020071a <release> if(ff.type == FD_PIPE){ - 802038a0: 4785 li a5,1 - 802038a2: 04f90463 beq s2,a5,802038ea <fileclose+0xa8> + 80203bbc: 4785 li a5,1 + 80203bbe: 04f90463 beq s2,a5,80203c06 <fileclose+0xa8> pipeclose(ff.pipe, ff.writable); } else if(ff.type == FD_ENTRY){ - 802038a6: 4789 li a5,2 - 802038a8: 02f91863 bne s2,a5,802038d8 <fileclose+0x96> + 80203bc2: 4789 li a5,2 + 80203bc4: 02f91863 bne s2,a5,80203bf4 <fileclose+0x96> eput(ff.ep); - 802038ac: 8556 mv a0,s5 - 802038ae: 00003097 auipc ra,0x3 - 802038b2: a14080e7 jalr -1516(ra) # 802062c2 <eput> - 802038b6: a00d j 802038d8 <fileclose+0x96> + 80203bc8: 8556 mv a0,s5 + 80203bca: 00003097 auipc ra,0x3 + 80203bce: a48080e7 jalr -1464(ra) # 80206612 <eput> + 80203bd2: a00d j 80203bf4 <fileclose+0x96> panic("fileclose"); - 802038b8: 00006517 auipc a0,0x6 - 802038bc: 26850513 addi a0,a0,616 # 80209b20 <digits+0x7a0> - 802038c0: ffffd097 auipc ra,0xffffd - 802038c4: 884080e7 jalr -1916(ra) # 80200144 <panic> + 80203bd4: 00006517 auipc a0,0x6 + 80203bd8: f8450513 addi a0,a0,-124 # 80209b58 <digits+0x7d8> + 80203bdc: ffffc097 auipc ra,0xffffc + 80203be0: 568080e7 jalr 1384(ra) # 80200144 <panic> release(&ftable.lock); - 802038c8: 0001a517 auipc a0,0x1a - 802038cc: b8850513 addi a0,a0,-1144 # 8021d450 <ftable> - 802038d0: ffffd097 auipc ra,0xffffd - 802038d4: e4a080e7 jalr -438(ra) # 8020071a <release> + 80203be4: 0001a517 auipc a0,0x1a + 80203be8: 86c50513 addi a0,a0,-1940 # 8021d450 <ftable> + 80203bec: ffffd097 auipc ra,0xffffd + 80203bf0: b2e080e7 jalr -1234(ra) # 8020071a <release> } else if (ff.type == FD_DEVICE) { } } - 802038d8: 70e2 ld ra,56(sp) - 802038da: 7442 ld s0,48(sp) - 802038dc: 74a2 ld s1,40(sp) - 802038de: 7902 ld s2,32(sp) - 802038e0: 69e2 ld s3,24(sp) - 802038e2: 6a42 ld s4,16(sp) - 802038e4: 6aa2 ld s5,8(sp) - 802038e6: 6121 addi sp,sp,64 - 802038e8: 8082 ret + 80203bf4: 70e2 ld ra,56(sp) + 80203bf6: 7442 ld s0,48(sp) + 80203bf8: 74a2 ld s1,40(sp) + 80203bfa: 7902 ld s2,32(sp) + 80203bfc: 69e2 ld s3,24(sp) + 80203bfe: 6a42 ld s4,16(sp) + 80203c00: 6aa2 ld s5,8(sp) + 80203c02: 6121 addi sp,sp,64 + 80203c04: 8082 ret pipeclose(ff.pipe, ff.writable); - 802038ea: 85d2 mv a1,s4 - 802038ec: 854e mv a0,s3 - 802038ee: 00000097 auipc ra,0x0 - 802038f2: 3a0080e7 jalr 928(ra) # 80203c8e <pipeclose> - 802038f6: b7cd j 802038d8 <fileclose+0x96> + 80203c06: 85d2 mv a1,s4 + 80203c08: 854e mv a0,s3 + 80203c0a: 00000097 auipc ra,0x0 + 80203c0e: 3a0080e7 jalr 928(ra) # 80203faa <pipeclose> + 80203c12: b7cd j 80203bf4 <fileclose+0x96> -00000000802038f8 <filestat>: +0000000080203c14 <filestat>: filestat(struct file *f, uint64 addr) { // struct proc *p = myproc(); struct stat st; if(f->type == FD_ENTRY){ - 802038f8: 4118 lw a4,0(a0) - 802038fa: 4789 li a5,2 - 802038fc: 04f71e63 bne a4,a5,80203958 <filestat+0x60> -{ - 80203900: 7159 addi sp,sp,-112 - 80203902: f486 sd ra,104(sp) - 80203904: f0a2 sd s0,96(sp) - 80203906: eca6 sd s1,88(sp) - 80203908: e8ca sd s2,80(sp) - 8020390a: e4ce sd s3,72(sp) - 8020390c: 1880 addi s0,sp,112 - 8020390e: 84aa mv s1,a0 - 80203910: 892e mv s2,a1 + 80203c14: 4118 lw a4,0(a0) + 80203c16: 4789 li a5,2 + 80203c18: 04f71e63 bne a4,a5,80203c74 <filestat+0x60> +{ + 80203c1c: 7159 addi sp,sp,-112 + 80203c1e: f486 sd ra,104(sp) + 80203c20: f0a2 sd s0,96(sp) + 80203c22: eca6 sd s1,88(sp) + 80203c24: e8ca sd s2,80(sp) + 80203c26: e4ce sd s3,72(sp) + 80203c28: 1880 addi s0,sp,112 + 80203c2a: 84aa mv s1,a0 + 80203c2c: 892e mv s2,a1 elock(f->ep); - 80203912: 6d08 ld a0,24(a0) - 80203914: 00003097 auipc ra,0x3 - 80203918: 92a080e7 jalr -1750(ra) # 8020623e <elock> + 80203c2e: 6d08 ld a0,24(a0) + 80203c30: 00003097 auipc ra,0x3 + 80203c34: 95e080e7 jalr -1698(ra) # 8020658e <elock> estat(f->ep, &st); - 8020391c: f9840993 addi s3,s0,-104 - 80203920: 85ce mv a1,s3 - 80203922: 6c88 ld a0,24(s1) - 80203924: 00003097 auipc ra,0x3 - 80203928: ad6080e7 jalr -1322(ra) # 802063fa <estat> + 80203c38: f9840993 addi s3,s0,-104 + 80203c3c: 85ce mv a1,s3 + 80203c3e: 6c88 ld a0,24(s1) + 80203c40: 00003097 auipc ra,0x3 + 80203c44: b0a080e7 jalr -1270(ra) # 8020674a <estat> eunlock(f->ep); - 8020392c: 6c88 ld a0,24(s1) - 8020392e: 00003097 auipc ra,0x3 - 80203932: 946080e7 jalr -1722(ra) # 80206274 <eunlock> + 80203c48: 6c88 ld a0,24(s1) + 80203c4a: 00003097 auipc ra,0x3 + 80203c4e: 97a080e7 jalr -1670(ra) # 802065c4 <eunlock> // if(copyout(p->pagetable, addr, (char *)&st, sizeof(st)) < 0) if(copyout2(addr, (char *)&st, sizeof(st)) < 0) - 80203936: 03800613 li a2,56 - 8020393a: 85ce mv a1,s3 - 8020393c: 854a mv a0,s2 - 8020393e: ffffe097 auipc ra,0xffffe - 80203942: a34080e7 jalr -1484(ra) # 80201372 <copyout2> - 80203946: 41f5551b sraiw a0,a0,0x1f + 80203c52: 03800613 li a2,56 + 80203c56: 85ce mv a1,s3 + 80203c58: 854a mv a0,s2 + 80203c5a: ffffd097 auipc ra,0xffffd + 80203c5e: 718080e7 jalr 1816(ra) # 80201372 <copyout2> + 80203c62: 41f5551b sraiw a0,a0,0x1f return -1; return 0; } return -1; } - 8020394a: 70a6 ld ra,104(sp) - 8020394c: 7406 ld s0,96(sp) - 8020394e: 64e6 ld s1,88(sp) - 80203950: 6946 ld s2,80(sp) - 80203952: 69a6 ld s3,72(sp) - 80203954: 6165 addi sp,sp,112 - 80203956: 8082 ret + 80203c66: 70a6 ld ra,104(sp) + 80203c68: 7406 ld s0,96(sp) + 80203c6a: 64e6 ld s1,88(sp) + 80203c6c: 6946 ld s2,80(sp) + 80203c6e: 69a6 ld s3,72(sp) + 80203c70: 6165 addi sp,sp,112 + 80203c72: 8082 ret return -1; - 80203958: 557d li a0,-1 + 80203c74: 557d li a0,-1 } - 8020395a: 8082 ret + 80203c76: 8082 ret -000000008020395c <fileread>: +0000000080203c78 <fileread>: // Read from file f. // addr is a user virtual address. int fileread(struct file *f, uint64 addr, int n) { - 8020395c: 7179 addi sp,sp,-48 - 8020395e: f406 sd ra,40(sp) - 80203960: f022 sd s0,32(sp) - 80203962: ec26 sd s1,24(sp) - 80203964: e84a sd s2,16(sp) - 80203966: e44e sd s3,8(sp) - 80203968: 1800 addi s0,sp,48 + 80203c78: 7179 addi sp,sp,-48 + 80203c7a: f406 sd ra,40(sp) + 80203c7c: f022 sd s0,32(sp) + 80203c7e: ec26 sd s1,24(sp) + 80203c80: e84a sd s2,16(sp) + 80203c82: e44e sd s3,8(sp) + 80203c84: 1800 addi s0,sp,48 int r = 0; if(f->readable == 0) - 8020396a: 00854783 lbu a5,8(a0) - 8020396e: c3d5 beqz a5,80203a12 <fileread+0xb6> - 80203970: 84aa mv s1,a0 - 80203972: 89ae mv s3,a1 - 80203974: 8932 mv s2,a2 + 80203c86: 00854783 lbu a5,8(a0) + 80203c8a: c3d5 beqz a5,80203d2e <fileread+0xb6> + 80203c8c: 84aa mv s1,a0 + 80203c8e: 89ae mv s3,a1 + 80203c90: 8932 mv s2,a2 return -1; switch (f->type) { - 80203976: 411c lw a5,0(a0) - 80203978: 4709 li a4,2 - 8020397a: 06e78263 beq a5,a4,802039de <fileread+0x82> - 8020397e: 470d li a4,3 - 80203980: 02e78b63 beq a5,a4,802039b6 <fileread+0x5a> - 80203984: 4705 li a4,1 - 80203986: 00e78a63 beq a5,a4,8020399a <fileread+0x3e> + 80203c92: 411c lw a5,0(a0) + 80203c94: 4709 li a4,2 + 80203c96: 06e78263 beq a5,a4,80203cfa <fileread+0x82> + 80203c9a: 470d li a4,3 + 80203c9c: 02e78b63 beq a5,a4,80203cd2 <fileread+0x5a> + 80203ca0: 4705 li a4,1 + 80203ca2: 00e78a63 beq a5,a4,80203cb6 <fileread+0x3e> if((r = eread(f->ep, 1, addr, f->off, n)) > 0) f->off += r; eunlock(f->ep); break; default: panic("fileread"); - 8020398a: 00006517 auipc a0,0x6 - 8020398e: 1a650513 addi a0,a0,422 # 80209b30 <digits+0x7b0> - 80203992: ffffc097 auipc ra,0xffffc - 80203996: 7b2080e7 jalr 1970(ra) # 80200144 <panic> + 80203ca6: 00006517 auipc a0,0x6 + 80203caa: ec250513 addi a0,a0,-318 # 80209b68 <digits+0x7e8> + 80203cae: ffffc097 auipc ra,0xffffc + 80203cb2: 496080e7 jalr 1174(ra) # 80200144 <panic> r = piperead(f->pipe, addr, n); - 8020399a: 6908 ld a0,16(a0) - 8020399c: 00000097 auipc ra,0x0 - 802039a0: 466080e7 jalr 1126(ra) # 80203e02 <piperead> - 802039a4: 892a mv s2,a0 + 80203cb6: 6908 ld a0,16(a0) + 80203cb8: 00000097 auipc ra,0x0 + 80203cbc: 466080e7 jalr 1126(ra) # 8020411e <piperead> + 80203cc0: 892a mv s2,a0 } return r; } - 802039a6: 854a mv a0,s2 - 802039a8: 70a2 ld ra,40(sp) - 802039aa: 7402 ld s0,32(sp) - 802039ac: 64e2 ld s1,24(sp) - 802039ae: 6942 ld s2,16(sp) - 802039b0: 69a2 ld s3,8(sp) - 802039b2: 6145 addi sp,sp,48 - 802039b4: 8082 ret + 80203cc2: 854a mv a0,s2 + 80203cc4: 70a2 ld ra,40(sp) + 80203cc6: 7402 ld s0,32(sp) + 80203cc8: 64e2 ld s1,24(sp) + 80203cca: 6942 ld s2,16(sp) + 80203ccc: 69a2 ld s3,8(sp) + 80203cce: 6145 addi sp,sp,48 + 80203cd0: 8082 ret if(f->major < 0 || f->major >= NDEV || !devsw[f->major].read) - 802039b6: 02451783 lh a5,36(a0) - 802039ba: 03079693 slli a3,a5,0x30 - 802039be: 92c1 srli a3,a3,0x30 - 802039c0: 4725 li a4,9 - 802039c2: 04d76a63 bltu a4,a3,80203a16 <fileread+0xba> - 802039c6: 0792 slli a5,a5,0x4 - 802039c8: 0001a717 auipc a4,0x1a - 802039cc: 9e870713 addi a4,a4,-1560 # 8021d3b0 <devsw> - 802039d0: 97ba add a5,a5,a4 - 802039d2: 639c ld a5,0(a5) - 802039d4: c3b9 beqz a5,80203a1a <fileread+0xbe> + 80203cd2: 02451783 lh a5,36(a0) + 80203cd6: 03079693 slli a3,a5,0x30 + 80203cda: 92c1 srli a3,a3,0x30 + 80203cdc: 4725 li a4,9 + 80203cde: 04d76a63 bltu a4,a3,80203d32 <fileread+0xba> + 80203ce2: 0792 slli a5,a5,0x4 + 80203ce4: 00019717 auipc a4,0x19 + 80203ce8: 6cc70713 addi a4,a4,1740 # 8021d3b0 <devsw> + 80203cec: 97ba add a5,a5,a4 + 80203cee: 639c ld a5,0(a5) + 80203cf0: c3b9 beqz a5,80203d36 <fileread+0xbe> r = devsw[f->major].read(1, addr, n); - 802039d6: 4505 li a0,1 - 802039d8: 9782 jalr a5 - 802039da: 892a mv s2,a0 + 80203cf2: 4505 li a0,1 + 80203cf4: 9782 jalr a5 + 80203cf6: 892a mv s2,a0 break; - 802039dc: b7e9 j 802039a6 <fileread+0x4a> + 80203cf8: b7e9 j 80203cc2 <fileread+0x4a> elock(f->ep); - 802039de: 6d08 ld a0,24(a0) - 802039e0: 00003097 auipc ra,0x3 - 802039e4: 85e080e7 jalr -1954(ra) # 8020623e <elock> + 80203cfa: 6d08 ld a0,24(a0) + 80203cfc: 00003097 auipc ra,0x3 + 80203d00: 892080e7 jalr -1902(ra) # 8020658e <elock> if((r = eread(f->ep, 1, addr, f->off, n)) > 0) - 802039e8: 874a mv a4,s2 - 802039ea: 5094 lw a3,32(s1) - 802039ec: 864e mv a2,s3 - 802039ee: 4585 li a1,1 - 802039f0: 6c88 ld a0,24(s1) - 802039f2: 00002097 auipc ra,0x2 - 802039f6: f48080e7 jalr -184(ra) # 8020593a <eread> - 802039fa: 892a mv s2,a0 - 802039fc: 00a05563 blez a0,80203a06 <fileread+0xaa> + 80203d04: 874a mv a4,s2 + 80203d06: 5094 lw a3,32(s1) + 80203d08: 864e mv a2,s3 + 80203d0a: 4585 li a1,1 + 80203d0c: 6c88 ld a0,24(s1) + 80203d0e: 00002097 auipc ra,0x2 + 80203d12: f7c080e7 jalr -132(ra) # 80205c8a <eread> + 80203d16: 892a mv s2,a0 + 80203d18: 00a05563 blez a0,80203d22 <fileread+0xaa> f->off += r; - 80203a00: 509c lw a5,32(s1) - 80203a02: 9fa9 addw a5,a5,a0 - 80203a04: d09c sw a5,32(s1) + 80203d1c: 509c lw a5,32(s1) + 80203d1e: 9fa9 addw a5,a5,a0 + 80203d20: d09c sw a5,32(s1) eunlock(f->ep); - 80203a06: 6c88 ld a0,24(s1) - 80203a08: 00003097 auipc ra,0x3 - 80203a0c: 86c080e7 jalr -1940(ra) # 80206274 <eunlock> + 80203d22: 6c88 ld a0,24(s1) + 80203d24: 00003097 auipc ra,0x3 + 80203d28: 8a0080e7 jalr -1888(ra) # 802065c4 <eunlock> break; - 80203a10: bf59 j 802039a6 <fileread+0x4a> + 80203d2c: bf59 j 80203cc2 <fileread+0x4a> return -1; - 80203a12: 597d li s2,-1 - 80203a14: bf49 j 802039a6 <fileread+0x4a> + 80203d2e: 597d li s2,-1 + 80203d30: bf49 j 80203cc2 <fileread+0x4a> return -1; - 80203a16: 597d li s2,-1 - 80203a18: b779 j 802039a6 <fileread+0x4a> - 80203a1a: 597d li s2,-1 - 80203a1c: b769 j 802039a6 <fileread+0x4a> + 80203d32: 597d li s2,-1 + 80203d34: b779 j 80203cc2 <fileread+0x4a> + 80203d36: 597d li s2,-1 + 80203d38: b769 j 80203cc2 <fileread+0x4a> -0000000080203a1e <filewrite>: +0000000080203d3a <filewrite>: // Write to file f. // addr is a user virtual address. int filewrite(struct file *f, uint64 addr, int n) { - 80203a1e: 7179 addi sp,sp,-48 - 80203a20: f406 sd ra,40(sp) - 80203a22: f022 sd s0,32(sp) - 80203a24: ec26 sd s1,24(sp) - 80203a26: e84a sd s2,16(sp) - 80203a28: e44e sd s3,8(sp) - 80203a2a: e052 sd s4,0(sp) - 80203a2c: 1800 addi s0,sp,48 + 80203d3a: 7179 addi sp,sp,-48 + 80203d3c: f406 sd ra,40(sp) + 80203d3e: f022 sd s0,32(sp) + 80203d40: ec26 sd s1,24(sp) + 80203d42: e84a sd s2,16(sp) + 80203d44: e44e sd s3,8(sp) + 80203d46: e052 sd s4,0(sp) + 80203d48: 1800 addi s0,sp,48 int ret = 0; if(f->writable == 0) - 80203a2e: 00954783 lbu a5,9(a0) - 80203a32: cbc5 beqz a5,80203ae2 <filewrite+0xc4> - 80203a34: 84aa mv s1,a0 - 80203a36: 892e mv s2,a1 - 80203a38: 89b2 mv s3,a2 + 80203d4a: 00954783 lbu a5,9(a0) + 80203d4e: cbc5 beqz a5,80203dfe <filewrite+0xc4> + 80203d50: 84aa mv s1,a0 + 80203d52: 892e mv s2,a1 + 80203d54: 89b2 mv s3,a2 return -1; if(f->type == FD_PIPE){ - 80203a3a: 411c lw a5,0(a0) - 80203a3c: 4705 li a4,1 - 80203a3e: 04e78963 beq a5,a4,80203a90 <filewrite+0x72> + 80203d56: 411c lw a5,0(a0) + 80203d58: 4705 li a4,1 + 80203d5a: 04e78963 beq a5,a4,80203dac <filewrite+0x72> ret = pipewrite(f->pipe, addr, n); } else if(f->type == FD_DEVICE){ - 80203a42: 470d li a4,3 - 80203a44: 04e78d63 beq a5,a4,80203a9e <filewrite+0x80> + 80203d5e: 470d li a4,3 + 80203d60: 04e78d63 beq a5,a4,80203dba <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){ - 80203a48: 4709 li a4,2 - 80203a4a: 08e79463 bne a5,a4,80203ad2 <filewrite+0xb4> + 80203d64: 4709 li a4,2 + 80203d66: 08e79463 bne a5,a4,80203dee <filewrite+0xb4> elock(f->ep); - 80203a4e: 6d08 ld a0,24(a0) - 80203a50: 00002097 auipc ra,0x2 - 80203a54: 7ee080e7 jalr 2030(ra) # 8020623e <elock> + 80203d6a: 6d08 ld a0,24(a0) + 80203d6c: 00003097 auipc ra,0x3 + 80203d70: 822080e7 jalr -2014(ra) # 8020658e <elock> if (ewrite(f->ep, 1, addr, f->off, n) == n) { - 80203a58: 00098a1b sext.w s4,s3 - 80203a5c: 8752 mv a4,s4 - 80203a5e: 5094 lw a3,32(s1) - 80203a60: 864a mv a2,s2 - 80203a62: 4585 li a1,1 - 80203a64: 6c88 ld a0,24(s1) - 80203a66: 00002097 auipc ra,0x2 - 80203a6a: fcc080e7 jalr -52(ra) # 80205a32 <ewrite> + 80203d74: 00098a1b sext.w s4,s3 + 80203d78: 8752 mv a4,s4 + 80203d7a: 5094 lw a3,32(s1) + 80203d7c: 864a mv a2,s2 + 80203d7e: 4585 li a1,1 + 80203d80: 6c88 ld a0,24(s1) + 80203d82: 00002097 auipc ra,0x2 + 80203d86: 000080e7 jalr ra # 80205d82 <ewrite> ret = n; f->off += n; } else { ret = -1; - 80203a6e: 597d li s2,-1 + 80203d8a: 597d li s2,-1 if (ewrite(f->ep, 1, addr, f->off, n) == n) { - 80203a70: 05350b63 beq a0,s3,80203ac6 <filewrite+0xa8> + 80203d8c: 05350b63 beq a0,s3,80203de2 <filewrite+0xa8> } eunlock(f->ep); - 80203a74: 6c88 ld a0,24(s1) - 80203a76: 00002097 auipc ra,0x2 - 80203a7a: 7fe080e7 jalr 2046(ra) # 80206274 <eunlock> + 80203d90: 6c88 ld a0,24(s1) + 80203d92: 00003097 auipc ra,0x3 + 80203d96: 832080e7 jalr -1998(ra) # 802065c4 <eunlock> } else { panic("filewrite"); } return ret; } - 80203a7e: 854a mv a0,s2 - 80203a80: 70a2 ld ra,40(sp) - 80203a82: 7402 ld s0,32(sp) - 80203a84: 64e2 ld s1,24(sp) - 80203a86: 6942 ld s2,16(sp) - 80203a88: 69a2 ld s3,8(sp) - 80203a8a: 6a02 ld s4,0(sp) - 80203a8c: 6145 addi sp,sp,48 - 80203a8e: 8082 ret + 80203d9a: 854a mv a0,s2 + 80203d9c: 70a2 ld ra,40(sp) + 80203d9e: 7402 ld s0,32(sp) + 80203da0: 64e2 ld s1,24(sp) + 80203da2: 6942 ld s2,16(sp) + 80203da4: 69a2 ld s3,8(sp) + 80203da6: 6a02 ld s4,0(sp) + 80203da8: 6145 addi sp,sp,48 + 80203daa: 8082 ret ret = pipewrite(f->pipe, addr, n); - 80203a90: 6908 ld a0,16(a0) - 80203a92: 00000097 auipc ra,0x0 - 80203a96: 26c080e7 jalr 620(ra) # 80203cfe <pipewrite> - 80203a9a: 892a mv s2,a0 - 80203a9c: b7cd j 80203a7e <filewrite+0x60> + 80203dac: 6908 ld a0,16(a0) + 80203dae: 00000097 auipc ra,0x0 + 80203db2: 26c080e7 jalr 620(ra) # 8020401a <pipewrite> + 80203db6: 892a mv s2,a0 + 80203db8: b7cd j 80203d9a <filewrite+0x60> if(f->major < 0 || f->major >= NDEV || !devsw[f->major].write) - 80203a9e: 02451783 lh a5,36(a0) - 80203aa2: 03079693 slli a3,a5,0x30 - 80203aa6: 92c1 srli a3,a3,0x30 - 80203aa8: 4725 li a4,9 - 80203aaa: 02d76e63 bltu a4,a3,80203ae6 <filewrite+0xc8> - 80203aae: 0792 slli a5,a5,0x4 - 80203ab0: 0001a717 auipc a4,0x1a - 80203ab4: 90070713 addi a4,a4,-1792 # 8021d3b0 <devsw> - 80203ab8: 97ba add a5,a5,a4 - 80203aba: 679c ld a5,8(a5) - 80203abc: c79d beqz a5,80203aea <filewrite+0xcc> + 80203dba: 02451783 lh a5,36(a0) + 80203dbe: 03079693 slli a3,a5,0x30 + 80203dc2: 92c1 srli a3,a3,0x30 + 80203dc4: 4725 li a4,9 + 80203dc6: 02d76e63 bltu a4,a3,80203e02 <filewrite+0xc8> + 80203dca: 0792 slli a5,a5,0x4 + 80203dcc: 00019717 auipc a4,0x19 + 80203dd0: 5e470713 addi a4,a4,1508 # 8021d3b0 <devsw> + 80203dd4: 97ba add a5,a5,a4 + 80203dd6: 679c ld a5,8(a5) + 80203dd8: c79d beqz a5,80203e06 <filewrite+0xcc> ret = devsw[f->major].write(1, addr, n); - 80203abe: 4505 li a0,1 - 80203ac0: 9782 jalr a5 - 80203ac2: 892a mv s2,a0 - 80203ac4: bf6d j 80203a7e <filewrite+0x60> + 80203dda: 4505 li a0,1 + 80203ddc: 9782 jalr a5 + 80203dde: 892a mv s2,a0 + 80203de0: bf6d j 80203d9a <filewrite+0x60> f->off += n; - 80203ac6: 509c lw a5,32(s1) - 80203ac8: 014787bb addw a5,a5,s4 - 80203acc: d09c sw a5,32(s1) + 80203de2: 509c lw a5,32(s1) + 80203de4: 014787bb addw a5,a5,s4 + 80203de8: d09c sw a5,32(s1) ret = n; - 80203ace: 894e mv s2,s3 - 80203ad0: b755 j 80203a74 <filewrite+0x56> + 80203dea: 894e mv s2,s3 + 80203dec: b755 j 80203d90 <filewrite+0x56> panic("filewrite"); - 80203ad2: 00006517 auipc a0,0x6 - 80203ad6: 06e50513 addi a0,a0,110 # 80209b40 <digits+0x7c0> - 80203ada: ffffc097 auipc ra,0xffffc - 80203ade: 66a080e7 jalr 1642(ra) # 80200144 <panic> + 80203dee: 00006517 auipc a0,0x6 + 80203df2: d8a50513 addi a0,a0,-630 # 80209b78 <digits+0x7f8> + 80203df6: ffffc097 auipc ra,0xffffc + 80203dfa: 34e080e7 jalr 846(ra) # 80200144 <panic> return -1; - 80203ae2: 597d li s2,-1 - 80203ae4: bf69 j 80203a7e <filewrite+0x60> + 80203dfe: 597d li s2,-1 + 80203e00: bf69 j 80203d9a <filewrite+0x60> return -1; - 80203ae6: 597d li s2,-1 - 80203ae8: bf59 j 80203a7e <filewrite+0x60> - 80203aea: 597d li s2,-1 - 80203aec: bf49 j 80203a7e <filewrite+0x60> + 80203e02: 597d li s2,-1 + 80203e04: bf59 j 80203d9a <filewrite+0x60> + 80203e06: 597d li s2,-1 + 80203e08: bf49 j 80203d9a <filewrite+0x60> -0000000080203aee <dirnext>: +0000000080203e0a <dirnext>: int dirnext(struct file *f, uint64 addr) { // struct proc *p = myproc(); if(f->readable == 0 || !(f->ep->attribute & ATTR_DIRECTORY)) - 80203aee: 00854783 lbu a5,8(a0) - 80203af2: cfdd beqz a5,80203bb0 <dirnext+0xc2> -{ - 80203af4: 7141 addi sp,sp,-496 - 80203af6: f786 sd ra,488(sp) - 80203af8: f3a2 sd s0,480(sp) - 80203afa: efa6 sd s1,472(sp) - 80203afc: ebca sd s2,464(sp) - 80203afe: e7ce sd s3,456(sp) - 80203b00: e3d2 sd s4,448(sp) - 80203b02: ff56 sd s5,440(sp) - 80203b04: 1b80 addi s0,sp,496 - 80203b06: 84aa mv s1,a0 - 80203b08: 8aae mv s5,a1 + 80203e0a: 00854783 lbu a5,8(a0) + 80203e0e: cfdd beqz a5,80203ecc <dirnext+0xc2> +{ + 80203e10: 7141 addi sp,sp,-496 + 80203e12: f786 sd ra,488(sp) + 80203e14: f3a2 sd s0,480(sp) + 80203e16: efa6 sd s1,472(sp) + 80203e18: ebca sd s2,464(sp) + 80203e1a: e7ce sd s3,456(sp) + 80203e1c: e3d2 sd s4,448(sp) + 80203e1e: ff56 sd s5,440(sp) + 80203e20: 1b80 addi s0,sp,496 + 80203e22: 84aa mv s1,a0 + 80203e24: 8aae mv s5,a1 if(f->readable == 0 || !(f->ep->attribute & ATTR_DIRECTORY)) - 80203b0a: 6d18 ld a4,24(a0) - 80203b0c: 10074783 lbu a5,256(a4) - 80203b10: 8bc1 andi a5,a5,16 + 80203e26: 6d18 ld a4,24(a0) + 80203e28: 10074783 lbu a5,256(a4) + 80203e2c: 8bc1 andi a5,a5,16 return -1; - 80203b12: 557d li a0,-1 + 80203e2e: 557d li a0,-1 if(f->readable == 0 || !(f->ep->attribute & ATTR_DIRECTORY)) - 80203b14: eb91 bnez a5,80203b28 <dirnext+0x3a> + 80203e30: eb91 bnez a5,80203e44 <dirnext+0x3a> // if(copyout(p->pagetable, addr, (char *)&st, sizeof(st)) < 0) if(copyout2(addr, (char *)&st, sizeof(st)) < 0) return -1; return 1; - 80203b16: 70be ld ra,488(sp) - 80203b18: 741e ld s0,480(sp) - 80203b1a: 64fe ld s1,472(sp) - 80203b1c: 695e ld s2,464(sp) - 80203b1e: 69be ld s3,456(sp) - 80203b20: 6a1e ld s4,448(sp) - 80203b22: 7afa ld s5,440(sp) - 80203b24: 617d addi sp,sp,496 - 80203b26: 8082 ret + 80203e32: 70be ld ra,488(sp) + 80203e34: 741e ld s0,480(sp) + 80203e36: 64fe ld s1,472(sp) + 80203e38: 695e ld s2,464(sp) + 80203e3a: 69be ld s3,456(sp) + 80203e3c: 6a1e ld s4,448(sp) + 80203e3e: 7afa ld s5,440(sp) + 80203e40: 617d addi sp,sp,496 + 80203e42: 8082 ret int count = 0; - 80203b28: e0042e23 sw zero,-484(s0) + 80203e44: e0042e23 sw zero,-484(s0) elock(f->ep); - 80203b2c: 853a mv a0,a4 - 80203b2e: 00002097 auipc ra,0x2 - 80203b32: 710080e7 jalr 1808(ra) # 8020623e <elock> + 80203e48: 853a mv a0,a4 + 80203e4a: 00002097 auipc ra,0x2 + 80203e4e: 744080e7 jalr 1860(ra) # 8020658e <elock> while ((ret = enext(f->ep, &de, f->off, &count)) == 0) { // skip empty entry - 80203b36: e1c40a13 addi s4,s0,-484 - 80203b3a: e5840993 addi s3,s0,-424 - 80203b3e: a801 j 80203b4e <dirnext+0x60> + 80203e52: e1c40a13 addi s4,s0,-484 + 80203e56: e5840993 addi s3,s0,-424 + 80203e5a: a801 j 80203e6a <dirnext+0x60> f->off += count * 32; - 80203b40: e1c42783 lw a5,-484(s0) - 80203b44: 0057979b slliw a5,a5,0x5 - 80203b48: 5098 lw a4,32(s1) - 80203b4a: 9fb9 addw a5,a5,a4 - 80203b4c: d09c sw a5,32(s1) + 80203e5c: e1c42783 lw a5,-484(s0) + 80203e60: 0057979b slliw a5,a5,0x5 + 80203e64: 5098 lw a4,32(s1) + 80203e66: 9fb9 addw a5,a5,a4 + 80203e68: d09c sw a5,32(s1) while ((ret = enext(f->ep, &de, f->off, &count)) == 0) { // skip empty entry - 80203b4e: 86d2 mv a3,s4 - 80203b50: 5090 lw a2,32(s1) - 80203b52: 85ce mv a1,s3 - 80203b54: 6c88 ld a0,24(s1) - 80203b56: 00003097 auipc ra,0x3 - 80203b5a: 8ec080e7 jalr -1812(ra) # 80206442 <enext> - 80203b5e: 892a mv s2,a0 - 80203b60: d165 beqz a0,80203b40 <dirnext+0x52> + 80203e6a: 86d2 mv a3,s4 + 80203e6c: 5090 lw a2,32(s1) + 80203e6e: 85ce mv a1,s3 + 80203e70: 6c88 ld a0,24(s1) + 80203e72: 00003097 auipc ra,0x3 + 80203e76: 920080e7 jalr -1760(ra) # 80206792 <enext> + 80203e7a: 892a mv s2,a0 + 80203e7c: d165 beqz a0,80203e5c <dirnext+0x52> eunlock(f->ep); - 80203b62: 6c88 ld a0,24(s1) - 80203b64: 00002097 auipc ra,0x2 - 80203b68: 710080e7 jalr 1808(ra) # 80206274 <eunlock> + 80203e7e: 6c88 ld a0,24(s1) + 80203e80: 00002097 auipc ra,0x2 + 80203e84: 744080e7 jalr 1860(ra) # 802065c4 <eunlock> if (ret == -1) - 80203b6c: 57fd li a5,-1 + 80203e88: 57fd li a5,-1 return 0; - 80203b6e: 4501 li a0,0 + 80203e8a: 4501 li a0,0 if (ret == -1) - 80203b70: faf903e3 beq s2,a5,80203b16 <dirnext+0x28> + 80203e8c: faf903e3 beq s2,a5,80203e32 <dirnext+0x28> f->off += count * 32; - 80203b74: e1c42783 lw a5,-484(s0) - 80203b78: 0057979b slliw a5,a5,0x5 - 80203b7c: 5098 lw a4,32(s1) - 80203b7e: 9fb9 addw a5,a5,a4 - 80203b80: d09c sw a5,32(s1) + 80203e90: e1c42783 lw a5,-484(s0) + 80203e94: 0057979b slliw a5,a5,0x5 + 80203e98: 5098 lw a4,32(s1) + 80203e9a: 9fb9 addw a5,a5,a4 + 80203e9c: d09c sw a5,32(s1) estat(&de, &st); - 80203b82: e2040493 addi s1,s0,-480 - 80203b86: 85a6 mv a1,s1 - 80203b88: e5840513 addi a0,s0,-424 - 80203b8c: 00003097 auipc ra,0x3 - 80203b90: 86e080e7 jalr -1938(ra) # 802063fa <estat> + 80203e9e: e2040493 addi s1,s0,-480 + 80203ea2: 85a6 mv a1,s1 + 80203ea4: e5840513 addi a0,s0,-424 + 80203ea8: 00003097 auipc ra,0x3 + 80203eac: 8a2080e7 jalr -1886(ra) # 8020674a <estat> if(copyout2(addr, (char *)&st, sizeof(st)) < 0) - 80203b94: 03800613 li a2,56 - 80203b98: 85a6 mv a1,s1 - 80203b9a: 8556 mv a0,s5 - 80203b9c: ffffd097 auipc ra,0xffffd - 80203ba0: 7d6080e7 jalr 2006(ra) # 80201372 <copyout2> + 80203eb0: 03800613 li a2,56 + 80203eb4: 85a6 mv a1,s1 + 80203eb6: 8556 mv a0,s5 + 80203eb8: ffffd097 auipc ra,0xffffd + 80203ebc: 4ba080e7 jalr 1210(ra) # 80201372 <copyout2> return -1; - 80203ba4: fff54513 not a0,a0 - 80203ba8: 957d srai a0,a0,0x3f - 80203baa: 8909 andi a0,a0,2 - 80203bac: 157d addi a0,a0,-1 - 80203bae: b7a5 j 80203b16 <dirnext+0x28> + 80203ec0: fff54513 not a0,a0 + 80203ec4: 957d srai a0,a0,0x3f + 80203ec6: 8909 andi a0,a0,2 + 80203ec8: 157d addi a0,a0,-1 + 80203eca: b7a5 j 80203e32 <dirnext+0x28> return -1; - 80203bb0: 557d li a0,-1 - 80203bb2: 8082 ret + 80203ecc: 557d li a0,-1 + 80203ece: 8082 ret -0000000080203bb4 <pipealloc>: +0000000080203ed0 <pipealloc>: #include "include/kalloc.h" #include "include/vm.h" int pipealloc(struct file **f0, struct file **f1) { - 80203bb4: 7179 addi sp,sp,-48 - 80203bb6: f406 sd ra,40(sp) - 80203bb8: f022 sd s0,32(sp) - 80203bba: ec26 sd s1,24(sp) - 80203bbc: e84a sd s2,16(sp) - 80203bbe: e44e sd s3,8(sp) - 80203bc0: e052 sd s4,0(sp) - 80203bc2: 1800 addi s0,sp,48 - 80203bc4: 84aa mv s1,a0 - 80203bc6: 8a2e mv s4,a1 + 80203ed0: 7179 addi sp,sp,-48 + 80203ed2: f406 sd ra,40(sp) + 80203ed4: f022 sd s0,32(sp) + 80203ed6: ec26 sd s1,24(sp) + 80203ed8: e84a sd s2,16(sp) + 80203eda: e44e sd s3,8(sp) + 80203edc: e052 sd s4,0(sp) + 80203ede: 1800 addi s0,sp,48 + 80203ee0: 84aa mv s1,a0 + 80203ee2: 8a2e mv s4,a1 struct pipe *pi; pi = 0; *f0 = *f1 = 0; - 80203bc8: 0005b023 sd zero,0(a1) - 80203bcc: 00053023 sd zero,0(a0) + 80203ee4: 0005b023 sd zero,0(a1) + 80203ee8: 00053023 sd zero,0(a0) if((*f0 = filealloc()) == NULL || (*f1 = filealloc()) == NULL) - 80203bd0: 00000097 auipc ra,0x0 - 80203bd4: bb6080e7 jalr -1098(ra) # 80203786 <filealloc> - 80203bd8: e088 sd a0,0(s1) - 80203bda: c551 beqz a0,80203c66 <pipealloc+0xb2> - 80203bdc: 00000097 auipc ra,0x0 - 80203be0: baa080e7 jalr -1110(ra) # 80203786 <filealloc> - 80203be4: 00aa3023 sd a0,0(s4) - 80203be8: c92d beqz a0,80203c5a <pipealloc+0xa6> + 80203eec: 00000097 auipc ra,0x0 + 80203ef0: bb6080e7 jalr -1098(ra) # 80203aa2 <filealloc> + 80203ef4: e088 sd a0,0(s1) + 80203ef6: c551 beqz a0,80203f82 <pipealloc+0xb2> + 80203ef8: 00000097 auipc ra,0x0 + 80203efc: baa080e7 jalr -1110(ra) # 80203aa2 <filealloc> + 80203f00: 00aa3023 sd a0,0(s4) + 80203f04: c92d beqz a0,80203f76 <pipealloc+0xa6> goto bad; if((pi = (struct pipe*)kalloc()) == NULL) - 80203bea: ffffd097 auipc ra,0xffffd - 80203bee: 970080e7 jalr -1680(ra) # 8020055a <kalloc> - 80203bf2: 892a mv s2,a0 - 80203bf4: c125 beqz a0,80203c54 <pipealloc+0xa0> + 80203f06: ffffc097 auipc ra,0xffffc + 80203f0a: 654080e7 jalr 1620(ra) # 8020055a <kalloc> + 80203f0e: 892a mv s2,a0 + 80203f10: c125 beqz a0,80203f70 <pipealloc+0xa0> goto bad; pi->readopen = 1; - 80203bf6: 4985 li s3,1 - 80203bf8: 23352023 sw s3,544(a0) + 80203f12: 4985 li s3,1 + 80203f14: 23352023 sw s3,544(a0) pi->writeopen = 1; - 80203bfc: 23352223 sw s3,548(a0) + 80203f18: 23352223 sw s3,548(a0) pi->nwrite = 0; - 80203c00: 20052e23 sw zero,540(a0) + 80203f1c: 20052e23 sw zero,540(a0) pi->nread = 0; - 80203c04: 20052c23 sw zero,536(a0) + 80203f20: 20052c23 sw zero,536(a0) initlock(&pi->lock, "pipe"); - 80203c08: 00006597 auipc a1,0x6 - 80203c0c: e4858593 addi a1,a1,-440 # 80209a50 <digits+0x6d0> - 80203c10: ffffd097 auipc ra,0xffffd - 80203c14: a72080e7 jalr -1422(ra) # 80200682 <initlock> + 80203f24: 00006597 auipc a1,0x6 + 80203f28: b3458593 addi a1,a1,-1228 # 80209a58 <digits+0x6d8> + 80203f2c: ffffc097 auipc ra,0xffffc + 80203f30: 756080e7 jalr 1878(ra) # 80200682 <initlock> (*f0)->type = FD_PIPE; - 80203c18: 609c ld a5,0(s1) - 80203c1a: 0137a023 sw s3,0(a5) + 80203f34: 609c ld a5,0(s1) + 80203f36: 0137a023 sw s3,0(a5) (*f0)->readable = 1; - 80203c1e: 609c ld a5,0(s1) - 80203c20: 01378423 sb s3,8(a5) + 80203f3a: 609c ld a5,0(s1) + 80203f3c: 01378423 sb s3,8(a5) (*f0)->writable = 0; - 80203c24: 609c ld a5,0(s1) - 80203c26: 000784a3 sb zero,9(a5) + 80203f40: 609c ld a5,0(s1) + 80203f42: 000784a3 sb zero,9(a5) (*f0)->pipe = pi; - 80203c2a: 609c ld a5,0(s1) - 80203c2c: 0127b823 sd s2,16(a5) + 80203f46: 609c ld a5,0(s1) + 80203f48: 0127b823 sd s2,16(a5) (*f1)->type = FD_PIPE; - 80203c30: 000a3783 ld a5,0(s4) - 80203c34: 0137a023 sw s3,0(a5) + 80203f4c: 000a3783 ld a5,0(s4) + 80203f50: 0137a023 sw s3,0(a5) (*f1)->readable = 0; - 80203c38: 000a3783 ld a5,0(s4) - 80203c3c: 00078423 sb zero,8(a5) + 80203f54: 000a3783 ld a5,0(s4) + 80203f58: 00078423 sb zero,8(a5) (*f1)->writable = 1; - 80203c40: 000a3783 ld a5,0(s4) - 80203c44: 013784a3 sb s3,9(a5) + 80203f5c: 000a3783 ld a5,0(s4) + 80203f60: 013784a3 sb s3,9(a5) (*f1)->pipe = pi; - 80203c48: 000a3783 ld a5,0(s4) - 80203c4c: 0127b823 sd s2,16(a5) + 80203f64: 000a3783 ld a5,0(s4) + 80203f68: 0127b823 sd s2,16(a5) return 0; - 80203c50: 4501 li a0,0 - 80203c52: a025 j 80203c7a <pipealloc+0xc6> + 80203f6c: 4501 li a0,0 + 80203f6e: a025 j 80203f96 <pipealloc+0xc6> bad: if(pi) kfree((char*)pi); if(*f0) - 80203c54: 6088 ld a0,0(s1) - 80203c56: e501 bnez a0,80203c5e <pipealloc+0xaa> - 80203c58: a039 j 80203c66 <pipealloc+0xb2> - 80203c5a: 6088 ld a0,0(s1) - 80203c5c: c51d beqz a0,80203c8a <pipealloc+0xd6> + 80203f70: 6088 ld a0,0(s1) + 80203f72: e501 bnez a0,80203f7a <pipealloc+0xaa> + 80203f74: a039 j 80203f82 <pipealloc+0xb2> + 80203f76: 6088 ld a0,0(s1) + 80203f78: c51d beqz a0,80203fa6 <pipealloc+0xd6> fileclose(*f0); - 80203c5e: 00000097 auipc ra,0x0 - 80203c62: be4080e7 jalr -1052(ra) # 80203842 <fileclose> + 80203f7a: 00000097 auipc ra,0x0 + 80203f7e: be4080e7 jalr -1052(ra) # 80203b5e <fileclose> if(*f1) - 80203c66: 000a3783 ld a5,0(s4) + 80203f82: 000a3783 ld a5,0(s4) fileclose(*f1); return -1; - 80203c6a: 557d li a0,-1 + 80203f86: 557d li a0,-1 if(*f1) - 80203c6c: c799 beqz a5,80203c7a <pipealloc+0xc6> + 80203f88: c799 beqz a5,80203f96 <pipealloc+0xc6> fileclose(*f1); - 80203c6e: 853e mv a0,a5 - 80203c70: 00000097 auipc ra,0x0 - 80203c74: bd2080e7 jalr -1070(ra) # 80203842 <fileclose> + 80203f8a: 853e mv a0,a5 + 80203f8c: 00000097 auipc ra,0x0 + 80203f90: bd2080e7 jalr -1070(ra) # 80203b5e <fileclose> return -1; - 80203c78: 557d li a0,-1 -} - 80203c7a: 70a2 ld ra,40(sp) - 80203c7c: 7402 ld s0,32(sp) - 80203c7e: 64e2 ld s1,24(sp) - 80203c80: 6942 ld s2,16(sp) - 80203c82: 69a2 ld s3,8(sp) - 80203c84: 6a02 ld s4,0(sp) - 80203c86: 6145 addi sp,sp,48 - 80203c88: 8082 ret + 80203f94: 557d li a0,-1 +} + 80203f96: 70a2 ld ra,40(sp) + 80203f98: 7402 ld s0,32(sp) + 80203f9a: 64e2 ld s1,24(sp) + 80203f9c: 6942 ld s2,16(sp) + 80203f9e: 69a2 ld s3,8(sp) + 80203fa0: 6a02 ld s4,0(sp) + 80203fa2: 6145 addi sp,sp,48 + 80203fa4: 8082 ret return -1; - 80203c8a: 557d li a0,-1 - 80203c8c: b7fd j 80203c7a <pipealloc+0xc6> + 80203fa6: 557d li a0,-1 + 80203fa8: b7fd j 80203f96 <pipealloc+0xc6> -0000000080203c8e <pipeclose>: +0000000080203faa <pipeclose>: void pipeclose(struct pipe *pi, int writable) { - 80203c8e: 1101 addi sp,sp,-32 - 80203c90: ec06 sd ra,24(sp) - 80203c92: e822 sd s0,16(sp) - 80203c94: e426 sd s1,8(sp) - 80203c96: e04a sd s2,0(sp) - 80203c98: 1000 addi s0,sp,32 - 80203c9a: 84aa mv s1,a0 - 80203c9c: 892e mv s2,a1 + 80203faa: 1101 addi sp,sp,-32 + 80203fac: ec06 sd ra,24(sp) + 80203fae: e822 sd s0,16(sp) + 80203fb0: e426 sd s1,8(sp) + 80203fb2: e04a sd s2,0(sp) + 80203fb4: 1000 addi s0,sp,32 + 80203fb6: 84aa mv s1,a0 + 80203fb8: 892e mv s2,a1 acquire(&pi->lock); - 80203c9e: ffffd097 auipc ra,0xffffd - 80203ca2: a28080e7 jalr -1496(ra) # 802006c6 <acquire> + 80203fba: ffffc097 auipc ra,0xffffc + 80203fbe: 70c080e7 jalr 1804(ra) # 802006c6 <acquire> if(writable){ - 80203ca6: 02090d63 beqz s2,80203ce0 <pipeclose+0x52> + 80203fc2: 02090d63 beqz s2,80203ffc <pipeclose+0x52> pi->writeopen = 0; - 80203caa: 2204a223 sw zero,548(s1) + 80203fc6: 2204a223 sw zero,548(s1) wakeup(&pi->nread); - 80203cae: 21848513 addi a0,s1,536 - 80203cb2: ffffe097 auipc ra,0xffffe - 80203cb6: 786080e7 jalr 1926(ra) # 80202438 <wakeup> + 80203fca: 21848513 addi a0,s1,536 + 80203fce: ffffe097 auipc ra,0xffffe + 80203fd2: 46a080e7 jalr 1130(ra) # 80202438 <wakeup> } else { pi->readopen = 0; wakeup(&pi->nwrite); } if(pi->readopen == 0 && pi->writeopen == 0){ - 80203cba: 2204b783 ld a5,544(s1) - 80203cbe: eb95 bnez a5,80203cf2 <pipeclose+0x64> + 80203fd6: 2204b783 ld a5,544(s1) + 80203fda: eb95 bnez a5,8020400e <pipeclose+0x64> release(&pi->lock); - 80203cc0: 8526 mv a0,s1 - 80203cc2: ffffd097 auipc ra,0xffffd - 80203cc6: a58080e7 jalr -1448(ra) # 8020071a <release> + 80203fdc: 8526 mv a0,s1 + 80203fde: ffffc097 auipc ra,0xffffc + 80203fe2: 73c080e7 jalr 1852(ra) # 8020071a <release> kfree((char*)pi); - 80203cca: 8526 mv a0,s1 - 80203ccc: ffffc097 auipc ra,0xffffc - 80203cd0: 774080e7 jalr 1908(ra) # 80200440 <kfree> + 80203fe6: 8526 mv a0,s1 + 80203fe8: ffffc097 auipc ra,0xffffc + 80203fec: 458080e7 jalr 1112(ra) # 80200440 <kfree> } else release(&pi->lock); } - 80203cd4: 60e2 ld ra,24(sp) - 80203cd6: 6442 ld s0,16(sp) - 80203cd8: 64a2 ld s1,8(sp) - 80203cda: 6902 ld s2,0(sp) - 80203cdc: 6105 addi sp,sp,32 - 80203cde: 8082 ret + 80203ff0: 60e2 ld ra,24(sp) + 80203ff2: 6442 ld s0,16(sp) + 80203ff4: 64a2 ld s1,8(sp) + 80203ff6: 6902 ld s2,0(sp) + 80203ff8: 6105 addi sp,sp,32 + 80203ffa: 8082 ret pi->readopen = 0; - 80203ce0: 2204a023 sw zero,544(s1) + 80203ffc: 2204a023 sw zero,544(s1) wakeup(&pi->nwrite); - 80203ce4: 21c48513 addi a0,s1,540 - 80203ce8: ffffe097 auipc ra,0xffffe - 80203cec: 750080e7 jalr 1872(ra) # 80202438 <wakeup> - 80203cf0: b7e9 j 80203cba <pipeclose+0x2c> + 80204000: 21c48513 addi a0,s1,540 + 80204004: ffffe097 auipc ra,0xffffe + 80204008: 434080e7 jalr 1076(ra) # 80202438 <wakeup> + 8020400c: b7e9 j 80203fd6 <pipeclose+0x2c> release(&pi->lock); - 80203cf2: 8526 mv a0,s1 - 80203cf4: ffffd097 auipc ra,0xffffd - 80203cf8: a26080e7 jalr -1498(ra) # 8020071a <release> + 8020400e: 8526 mv a0,s1 + 80204010: ffffc097 auipc ra,0xffffc + 80204014: 70a080e7 jalr 1802(ra) # 8020071a <release> } - 80203cfc: bfe1 j 80203cd4 <pipeclose+0x46> + 80204018: bfe1 j 80203ff0 <pipeclose+0x46> -0000000080203cfe <pipewrite>: +000000008020401a <pipewrite>: int pipewrite(struct pipe *pi, uint64 addr, int n) { - 80203cfe: 7159 addi sp,sp,-112 - 80203d00: f486 sd ra,104(sp) - 80203d02: f0a2 sd s0,96(sp) - 80203d04: eca6 sd s1,88(sp) - 80203d06: e8ca sd s2,80(sp) - 80203d08: e4ce sd s3,72(sp) - 80203d0a: e0d2 sd s4,64(sp) - 80203d0c: fc56 sd s5,56(sp) - 80203d0e: f85a sd s6,48(sp) - 80203d10: f45e sd s7,40(sp) - 80203d12: f062 sd s8,32(sp) - 80203d14: ec66 sd s9,24(sp) - 80203d16: 1880 addi s0,sp,112 - 80203d18: 84aa mv s1,a0 - 80203d1a: 8b2e mv s6,a1 - 80203d1c: 8ab2 mv s5,a2 + 8020401a: 7159 addi sp,sp,-112 + 8020401c: f486 sd ra,104(sp) + 8020401e: f0a2 sd s0,96(sp) + 80204020: eca6 sd s1,88(sp) + 80204022: e8ca sd s2,80(sp) + 80204024: e4ce sd s3,72(sp) + 80204026: e0d2 sd s4,64(sp) + 80204028: fc56 sd s5,56(sp) + 8020402a: f85a sd s6,48(sp) + 8020402c: f45e sd s7,40(sp) + 8020402e: f062 sd s8,32(sp) + 80204030: ec66 sd s9,24(sp) + 80204032: 1880 addi s0,sp,112 + 80204034: 84aa mv s1,a0 + 80204036: 8b2e mv s6,a1 + 80204038: 8ab2 mv s5,a2 int i; char ch; struct proc *pr = myproc(); - 80203d1e: ffffe097 auipc ra,0xffffe - 80203d22: d1e080e7 jalr -738(ra) # 80201a3c <myproc> - 80203d26: 892a mv s2,a0 + 8020403a: ffffe097 auipc ra,0xffffe + 8020403e: a02080e7 jalr -1534(ra) # 80201a3c <myproc> + 80204042: 892a mv s2,a0 acquire(&pi->lock); - 80203d28: 8526 mv a0,s1 - 80203d2a: ffffd097 auipc ra,0xffffd - 80203d2e: 99c080e7 jalr -1636(ra) # 802006c6 <acquire> + 80204044: 8526 mv a0,s1 + 80204046: ffffc097 auipc ra,0xffffc + 8020404a: 680080e7 jalr 1664(ra) # 802006c6 <acquire> for(i = 0; i < n; i++){ - 80203d32: 09505763 blez s5,80203dc0 <pipewrite+0xc2> - 80203d36: 4b81 li s7,0 + 8020404e: 09505763 blez s5,802040dc <pipewrite+0xc2> + 80204052: 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); - 80203d38: 21848a13 addi s4,s1,536 + 80204054: 21848a13 addi s4,s1,536 sleep(&pi->nwrite, &pi->lock); - 80203d3c: 21c48993 addi s3,s1,540 + 80204058: 21c48993 addi s3,s1,540 } // if(copyin(pr->pagetable, &ch, addr + i, 1) == -1) if(copyin2(&ch, addr + i, 1) == -1) - 80203d40: f9f40c93 addi s9,s0,-97 - 80203d44: 5c7d li s8,-1 + 8020405c: f9f40c93 addi s9,s0,-97 + 80204060: 5c7d li s8,-1 while(pi->nwrite == pi->nread + PIPESIZE){ //DOC: pipewrite-full - 80203d46: 2184a783 lw a5,536(s1) - 80203d4a: 21c4a703 lw a4,540(s1) - 80203d4e: 2007879b addiw a5,a5,512 - 80203d52: 02f71b63 bne a4,a5,80203d88 <pipewrite+0x8a> + 80204062: 2184a783 lw a5,536(s1) + 80204066: 21c4a703 lw a4,540(s1) + 8020406a: 2007879b addiw a5,a5,512 + 8020406e: 02f71b63 bne a4,a5,802040a4 <pipewrite+0x8a> if(pi->readopen == 0 || pr->killed){ - 80203d56: 2204a783 lw a5,544(s1) - 80203d5a: c3c1 beqz a5,80203dda <pipewrite+0xdc> - 80203d5c: 03092783 lw a5,48(s2) - 80203d60: efad bnez a5,80203dda <pipewrite+0xdc> + 80204072: 2204a783 lw a5,544(s1) + 80204076: c3c1 beqz a5,802040f6 <pipewrite+0xdc> + 80204078: 03092783 lw a5,48(s2) + 8020407c: efad bnez a5,802040f6 <pipewrite+0xdc> wakeup(&pi->nread); - 80203d62: 8552 mv a0,s4 - 80203d64: ffffe097 auipc ra,0xffffe - 80203d68: 6d4080e7 jalr 1748(ra) # 80202438 <wakeup> + 8020407e: 8552 mv a0,s4 + 80204080: ffffe097 auipc ra,0xffffe + 80204084: 3b8080e7 jalr 952(ra) # 80202438 <wakeup> sleep(&pi->nwrite, &pi->lock); - 80203d6c: 85a6 mv a1,s1 - 80203d6e: 854e mv a0,s3 - 80203d70: ffffe097 auipc ra,0xffffe - 80203d74: 54c080e7 jalr 1356(ra) # 802022bc <sleep> + 80204088: 85a6 mv a1,s1 + 8020408a: 854e mv a0,s3 + 8020408c: ffffe097 auipc ra,0xffffe + 80204090: 230080e7 jalr 560(ra) # 802022bc <sleep> while(pi->nwrite == pi->nread + PIPESIZE){ //DOC: pipewrite-full - 80203d78: 2184a783 lw a5,536(s1) - 80203d7c: 21c4a703 lw a4,540(s1) - 80203d80: 2007879b addiw a5,a5,512 - 80203d84: fcf709e3 beq a4,a5,80203d56 <pipewrite+0x58> + 80204094: 2184a783 lw a5,536(s1) + 80204098: 21c4a703 lw a4,540(s1) + 8020409c: 2007879b addiw a5,a5,512 + 802040a0: fcf709e3 beq a4,a5,80204072 <pipewrite+0x58> if(copyin2(&ch, addr + i, 1) == -1) - 80203d88: 4605 li a2,1 - 80203d8a: 85da mv a1,s6 - 80203d8c: 8566 mv a0,s9 - 80203d8e: ffffd097 auipc ra,0xffffd - 80203d92: 6c4080e7 jalr 1732(ra) # 80201452 <copyin2> - 80203d96: 03850663 beq a0,s8,80203dc2 <pipewrite+0xc4> + 802040a4: 4605 li a2,1 + 802040a6: 85da mv a1,s6 + 802040a8: 8566 mv a0,s9 + 802040aa: ffffd097 auipc ra,0xffffd + 802040ae: 3a8080e7 jalr 936(ra) # 80201452 <copyin2> + 802040b2: 03850663 beq a0,s8,802040de <pipewrite+0xc4> break; pi->data[pi->nwrite++ % PIPESIZE] = ch; - 80203d9a: 21c4a783 lw a5,540(s1) - 80203d9e: 0017871b addiw a4,a5,1 - 80203da2: 20e4ae23 sw a4,540(s1) - 80203da6: 1ff7f793 andi a5,a5,511 - 80203daa: 97a6 add a5,a5,s1 - 80203dac: f9f44703 lbu a4,-97(s0) - 80203db0: 00e78c23 sb a4,24(a5) + 802040b6: 21c4a783 lw a5,540(s1) + 802040ba: 0017871b addiw a4,a5,1 + 802040be: 20e4ae23 sw a4,540(s1) + 802040c2: 1ff7f793 andi a5,a5,511 + 802040c6: 97a6 add a5,a5,s1 + 802040c8: f9f44703 lbu a4,-97(s0) + 802040cc: 00e78c23 sb a4,24(a5) for(i = 0; i < n; i++){ - 80203db4: 2b85 addiw s7,s7,1 - 80203db6: 0b05 addi s6,s6,1 - 80203db8: f97a97e3 bne s5,s7,80203d46 <pipewrite+0x48> - 80203dbc: 8bd6 mv s7,s5 - 80203dbe: a011 j 80203dc2 <pipewrite+0xc4> - 80203dc0: 4b81 li s7,0 + 802040d0: 2b85 addiw s7,s7,1 + 802040d2: 0b05 addi s6,s6,1 + 802040d4: f97a97e3 bne s5,s7,80204062 <pipewrite+0x48> + 802040d8: 8bd6 mv s7,s5 + 802040da: a011 j 802040de <pipewrite+0xc4> + 802040dc: 4b81 li s7,0 } wakeup(&pi->nread); - 80203dc2: 21848513 addi a0,s1,536 - 80203dc6: ffffe097 auipc ra,0xffffe - 80203dca: 672080e7 jalr 1650(ra) # 80202438 <wakeup> + 802040de: 21848513 addi a0,s1,536 + 802040e2: ffffe097 auipc ra,0xffffe + 802040e6: 356080e7 jalr 854(ra) # 80202438 <wakeup> release(&pi->lock); - 80203dce: 8526 mv a0,s1 - 80203dd0: ffffd097 auipc ra,0xffffd - 80203dd4: 94a080e7 jalr -1718(ra) # 8020071a <release> + 802040ea: 8526 mv a0,s1 + 802040ec: ffffc097 auipc ra,0xffffc + 802040f0: 62e080e7 jalr 1582(ra) # 8020071a <release> return i; - 80203dd8: a039 j 80203de6 <pipewrite+0xe8> + 802040f4: a039 j 80204102 <pipewrite+0xe8> release(&pi->lock); - 80203dda: 8526 mv a0,s1 - 80203ddc: ffffd097 auipc ra,0xffffd - 80203de0: 93e080e7 jalr -1730(ra) # 8020071a <release> + 802040f6: 8526 mv a0,s1 + 802040f8: ffffc097 auipc ra,0xffffc + 802040fc: 622080e7 jalr 1570(ra) # 8020071a <release> return -1; - 80203de4: 5bfd li s7,-1 -} - 80203de6: 855e mv a0,s7 - 80203de8: 70a6 ld ra,104(sp) - 80203dea: 7406 ld s0,96(sp) - 80203dec: 64e6 ld s1,88(sp) - 80203dee: 6946 ld s2,80(sp) - 80203df0: 69a6 ld s3,72(sp) - 80203df2: 6a06 ld s4,64(sp) - 80203df4: 7ae2 ld s5,56(sp) - 80203df6: 7b42 ld s6,48(sp) - 80203df8: 7ba2 ld s7,40(sp) - 80203dfa: 7c02 ld s8,32(sp) - 80203dfc: 6ce2 ld s9,24(sp) - 80203dfe: 6165 addi sp,sp,112 - 80203e00: 8082 ret - -0000000080203e02 <piperead>: + 80204100: 5bfd li s7,-1 +} + 80204102: 855e mv a0,s7 + 80204104: 70a6 ld ra,104(sp) + 80204106: 7406 ld s0,96(sp) + 80204108: 64e6 ld s1,88(sp) + 8020410a: 6946 ld s2,80(sp) + 8020410c: 69a6 ld s3,72(sp) + 8020410e: 6a06 ld s4,64(sp) + 80204110: 7ae2 ld s5,56(sp) + 80204112: 7b42 ld s6,48(sp) + 80204114: 7ba2 ld s7,40(sp) + 80204116: 7c02 ld s8,32(sp) + 80204118: 6ce2 ld s9,24(sp) + 8020411a: 6165 addi sp,sp,112 + 8020411c: 8082 ret + +000000008020411e <piperead>: int piperead(struct pipe *pi, uint64 addr, int n) { - 80203e02: 715d addi sp,sp,-80 - 80203e04: e486 sd ra,72(sp) - 80203e06: e0a2 sd s0,64(sp) - 80203e08: fc26 sd s1,56(sp) - 80203e0a: f84a sd s2,48(sp) - 80203e0c: f44e sd s3,40(sp) - 80203e0e: f052 sd s4,32(sp) - 80203e10: ec56 sd s5,24(sp) - 80203e12: e85a sd s6,16(sp) - 80203e14: 0880 addi s0,sp,80 - 80203e16: 84aa mv s1,a0 - 80203e18: 892e mv s2,a1 - 80203e1a: 8a32 mv s4,a2 + 8020411e: 715d addi sp,sp,-80 + 80204120: e486 sd ra,72(sp) + 80204122: e0a2 sd s0,64(sp) + 80204124: fc26 sd s1,56(sp) + 80204126: f84a sd s2,48(sp) + 80204128: f44e sd s3,40(sp) + 8020412a: f052 sd s4,32(sp) + 8020412c: ec56 sd s5,24(sp) + 8020412e: e85a sd s6,16(sp) + 80204130: 0880 addi s0,sp,80 + 80204132: 84aa mv s1,a0 + 80204134: 892e mv s2,a1 + 80204136: 8a32 mv s4,a2 int i; struct proc *pr = myproc(); - 80203e1c: ffffe097 auipc ra,0xffffe - 80203e20: c20080e7 jalr -992(ra) # 80201a3c <myproc> - 80203e24: 89aa mv s3,a0 + 80204138: ffffe097 auipc ra,0xffffe + 8020413c: 904080e7 jalr -1788(ra) # 80201a3c <myproc> + 80204140: 89aa mv s3,a0 char ch; acquire(&pi->lock); - 80203e26: 8526 mv a0,s1 - 80203e28: ffffd097 auipc ra,0xffffd - 80203e2c: 89e080e7 jalr -1890(ra) # 802006c6 <acquire> + 80204142: 8526 mv a0,s1 + 80204144: ffffc097 auipc ra,0xffffc + 80204148: 582080e7 jalr 1410(ra) # 802006c6 <acquire> while(pi->nread == pi->nwrite && pi->writeopen){ //DOC: pipe-empty - 80203e30: 2184a703 lw a4,536(s1) - 80203e34: 21c4a783 lw a5,540(s1) + 8020414c: 2184a703 lw a4,536(s1) + 80204150: 21c4a783 lw a5,540(s1) if(pr->killed){ release(&pi->lock); return -1; } sleep(&pi->nread, &pi->lock); //DOC: piperead-sleep - 80203e38: 21848a93 addi s5,s1,536 + 80204154: 21848a93 addi s5,s1,536 while(pi->nread == pi->nwrite && pi->writeopen){ //DOC: pipe-empty - 80203e3c: 02f71463 bne a4,a5,80203e64 <piperead+0x62> - 80203e40: 2244a783 lw a5,548(s1) - 80203e44: c385 beqz a5,80203e64 <piperead+0x62> + 80204158: 02f71463 bne a4,a5,80204180 <piperead+0x62> + 8020415c: 2244a783 lw a5,548(s1) + 80204160: c385 beqz a5,80204180 <piperead+0x62> if(pr->killed){ - 80203e46: 0309a783 lw a5,48(s3) - 80203e4a: ebc1 bnez a5,80203eda <piperead+0xd8> + 80204162: 0309a783 lw a5,48(s3) + 80204166: ebc1 bnez a5,802041f6 <piperead+0xd8> sleep(&pi->nread, &pi->lock); //DOC: piperead-sleep - 80203e4c: 85a6 mv a1,s1 - 80203e4e: 8556 mv a0,s5 - 80203e50: ffffe097 auipc ra,0xffffe - 80203e54: 46c080e7 jalr 1132(ra) # 802022bc <sleep> + 80204168: 85a6 mv a1,s1 + 8020416a: 8556 mv a0,s5 + 8020416c: ffffe097 auipc ra,0xffffe + 80204170: 150080e7 jalr 336(ra) # 802022bc <sleep> while(pi->nread == pi->nwrite && pi->writeopen){ //DOC: pipe-empty - 80203e58: 2184a703 lw a4,536(s1) - 80203e5c: 21c4a783 lw a5,540(s1) - 80203e60: fef700e3 beq a4,a5,80203e40 <piperead+0x3e> + 80204174: 2184a703 lw a4,536(s1) + 80204178: 21c4a783 lw a5,540(s1) + 8020417c: fef700e3 beq a4,a5,8020415c <piperead+0x3e> } for(i = 0; i < n; i++){ //DOC: piperead-copy - 80203e64: 4981 li s3,0 + 80204180: 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) - 80203e66: fbf40b13 addi s6,s0,-65 - 80203e6a: 5afd li s5,-1 + 80204182: fbf40b13 addi s6,s0,-65 + 80204186: 5afd li s5,-1 for(i = 0; i < n; i++){ //DOC: piperead-copy - 80203e6c: 05405163 blez s4,80203eae <piperead+0xac> + 80204188: 05405163 blez s4,802041ca <piperead+0xac> if(pi->nread == pi->nwrite) - 80203e70: 2184a783 lw a5,536(s1) - 80203e74: 21c4a703 lw a4,540(s1) - 80203e78: 02f70b63 beq a4,a5,80203eae <piperead+0xac> + 8020418c: 2184a783 lw a5,536(s1) + 80204190: 21c4a703 lw a4,540(s1) + 80204194: 02f70b63 beq a4,a5,802041ca <piperead+0xac> ch = pi->data[pi->nread++ % PIPESIZE]; - 80203e7c: 0017871b addiw a4,a5,1 - 80203e80: 20e4ac23 sw a4,536(s1) - 80203e84: 1ff7f793 andi a5,a5,511 - 80203e88: 97a6 add a5,a5,s1 - 80203e8a: 0187c783 lbu a5,24(a5) - 80203e8e: faf40fa3 sb a5,-65(s0) + 80204198: 0017871b addiw a4,a5,1 + 8020419c: 20e4ac23 sw a4,536(s1) + 802041a0: 1ff7f793 andi a5,a5,511 + 802041a4: 97a6 add a5,a5,s1 + 802041a6: 0187c783 lbu a5,24(a5) + 802041aa: faf40fa3 sb a5,-65(s0) if(copyout2(addr + i, &ch, 1) == -1) - 80203e92: 4605 li a2,1 - 80203e94: 85da mv a1,s6 - 80203e96: 854a mv a0,s2 - 80203e98: ffffd097 auipc ra,0xffffd - 80203e9c: 4da080e7 jalr 1242(ra) # 80201372 <copyout2> - 80203ea0: 01550763 beq a0,s5,80203eae <piperead+0xac> + 802041ae: 4605 li a2,1 + 802041b0: 85da mv a1,s6 + 802041b2: 854a mv a0,s2 + 802041b4: ffffd097 auipc ra,0xffffd + 802041b8: 1be080e7 jalr 446(ra) # 80201372 <copyout2> + 802041bc: 01550763 beq a0,s5,802041ca <piperead+0xac> for(i = 0; i < n; i++){ //DOC: piperead-copy - 80203ea4: 2985 addiw s3,s3,1 - 80203ea6: 0905 addi s2,s2,1 - 80203ea8: fd3a14e3 bne s4,s3,80203e70 <piperead+0x6e> - 80203eac: 89d2 mv s3,s4 + 802041c0: 2985 addiw s3,s3,1 + 802041c2: 0905 addi s2,s2,1 + 802041c4: fd3a14e3 bne s4,s3,8020418c <piperead+0x6e> + 802041c8: 89d2 mv s3,s4 break; } wakeup(&pi->nwrite); //DOC: piperead-wakeup - 80203eae: 21c48513 addi a0,s1,540 - 80203eb2: ffffe097 auipc ra,0xffffe - 80203eb6: 586080e7 jalr 1414(ra) # 80202438 <wakeup> + 802041ca: 21c48513 addi a0,s1,540 + 802041ce: ffffe097 auipc ra,0xffffe + 802041d2: 26a080e7 jalr 618(ra) # 80202438 <wakeup> release(&pi->lock); - 80203eba: 8526 mv a0,s1 - 80203ebc: ffffd097 auipc ra,0xffffd - 80203ec0: 85e080e7 jalr -1954(ra) # 8020071a <release> + 802041d6: 8526 mv a0,s1 + 802041d8: ffffc097 auipc ra,0xffffc + 802041dc: 542080e7 jalr 1346(ra) # 8020071a <release> return i; } - 80203ec4: 854e mv a0,s3 - 80203ec6: 60a6 ld ra,72(sp) - 80203ec8: 6406 ld s0,64(sp) - 80203eca: 74e2 ld s1,56(sp) - 80203ecc: 7942 ld s2,48(sp) - 80203ece: 79a2 ld s3,40(sp) - 80203ed0: 7a02 ld s4,32(sp) - 80203ed2: 6ae2 ld s5,24(sp) - 80203ed4: 6b42 ld s6,16(sp) - 80203ed6: 6161 addi sp,sp,80 - 80203ed8: 8082 ret + 802041e0: 854e mv a0,s3 + 802041e2: 60a6 ld ra,72(sp) + 802041e4: 6406 ld s0,64(sp) + 802041e6: 74e2 ld s1,56(sp) + 802041e8: 7942 ld s2,48(sp) + 802041ea: 79a2 ld s3,40(sp) + 802041ec: 7a02 ld s4,32(sp) + 802041ee: 6ae2 ld s5,24(sp) + 802041f0: 6b42 ld s6,16(sp) + 802041f2: 6161 addi sp,sp,80 + 802041f4: 8082 ret release(&pi->lock); - 80203eda: 8526 mv a0,s1 - 80203edc: ffffd097 auipc ra,0xffffd - 80203ee0: 83e080e7 jalr -1986(ra) # 8020071a <release> + 802041f6: 8526 mv a0,s1 + 802041f8: ffffc097 auipc ra,0xffffc + 802041fc: 522080e7 jalr 1314(ra) # 8020071a <release> return -1; - 80203ee4: 59fd li s3,-1 - 80203ee6: bff9 j 80203ec4 <piperead+0xc2> + 80204200: 59fd li s3,-1 + 80204202: bff9 j 802041e0 <piperead+0xc2> -0000000080203ee8 <exec>: +0000000080204204 <exec>: return 0; } int exec(char *path, char **argv) { - 80203ee8: dd010113 addi sp,sp,-560 - 80203eec: 22113423 sd ra,552(sp) - 80203ef0: 22813023 sd s0,544(sp) - 80203ef4: 20913c23 sd s1,536(sp) - 80203ef8: 21213823 sd s2,528(sp) - 80203efc: 21313423 sd s3,520(sp) - 80203f00: 21413023 sd s4,512(sp) - 80203f04: ffd6 sd s5,504(sp) - 80203f06: fbda sd s6,496(sp) - 80203f08: f7de sd s7,488(sp) - 80203f0a: f3e2 sd s8,480(sp) - 80203f0c: efe6 sd s9,472(sp) - 80203f0e: ebea sd s10,464(sp) - 80203f10: e7ee sd s11,456(sp) - 80203f12: 1c00 addi s0,sp,560 - 80203f14: 892a mv s2,a0 - 80203f16: dca43c23 sd a0,-552(s0) - 80203f1a: deb43423 sd a1,-536(s0) + 80204204: dd010113 addi sp,sp,-560 + 80204208: 22113423 sd ra,552(sp) + 8020420c: 22813023 sd s0,544(sp) + 80204210: 20913c23 sd s1,536(sp) + 80204214: 21213823 sd s2,528(sp) + 80204218: 21313423 sd s3,520(sp) + 8020421c: 21413023 sd s4,512(sp) + 80204220: ffd6 sd s5,504(sp) + 80204222: fbda sd s6,496(sp) + 80204224: f7de sd s7,488(sp) + 80204226: f3e2 sd s8,480(sp) + 80204228: efe6 sd s9,472(sp) + 8020422a: ebea sd s10,464(sp) + 8020422c: e7ee sd s11,456(sp) + 8020422e: 1c00 addi s0,sp,560 + 80204230: 892a mv s2,a0 + 80204232: dca43c23 sd a0,-552(s0) + 80204236: 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(); - 80203f1e: ffffe097 auipc ra,0xffffe - 80203f22: b1e080e7 jalr -1250(ra) # 80201a3c <myproc> - 80203f26: 84aa mv s1,a0 + 8020423a: ffffe097 auipc ra,0xffffe + 8020423e: 802080e7 jalr -2046(ra) # 80201a3c <myproc> + 80204242: 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) { - 80203f28: ffffc097 auipc ra,0xffffc - 80203f2c: 632080e7 jalr 1586(ra) # 8020055a <kalloc> - 80203f30: 2a050863 beqz a0,802041e0 <exec+0x2f8> - 80203f34: 8b2a mv s6,a0 + 80204244: ffffc097 auipc ra,0xffffc + 80204248: 316080e7 jalr 790(ra) # 8020055a <kalloc> + 8020424c: 2a050863 beqz a0,802044fc <exec+0x2f8> + 80204250: 8b2a mv s6,a0 return -1; } memmove(kpagetable, p->kpagetable, PGSIZE); - 80203f36: 6605 lui a2,0x1 - 80203f38: 6cac ld a1,88(s1) - 80203f3a: ffffd097 auipc ra,0xffffd - 80203f3e: 884080e7 jalr -1916(ra) # 802007be <memmove> + 80204252: 6605 lui a2,0x1 + 80204254: 6cac ld a1,88(s1) + 80204256: ffffc097 auipc ra,0xffffc + 8020425a: 568080e7 jalr 1384(ra) # 802007be <memmove> for (int i = 0; i < PX(2, MAXUVA); i++) { kpagetable[i] = 0; - 80203f42: 000b3023 sd zero,0(s6) - 80203f46: 000b3423 sd zero,8(s6) + 8020425e: 000b3023 sd zero,0(s6) + 80204262: 000b3423 sd zero,8(s6) } if((ep = ename(path)) == NULL) { - 80203f4a: 854a mv a0,s2 - 80203f4c: 00003097 auipc ra,0x3 - 80203f50: a9a080e7 jalr -1382(ra) # 802069e6 <ename> - 80203f54: 8a2a mv s4,a0 - 80203f56: 3a050e63 beqz a0,80204312 <exec+0x42a> + 80204266: 854a mv a0,s2 + 80204268: 00003097 auipc ra,0x3 + 8020426c: ace080e7 jalr -1330(ra) # 80206d36 <ename> + 80204270: 8a2a mv s4,a0 + 80204272: 3a050e63 beqz a0,8020462e <exec+0x42a> #ifdef DEBUG printf("[exec] %s not found\n", path); #endif goto bad; } elock(ep); - 80203f5a: 00002097 auipc ra,0x2 - 80203f5e: 2e4080e7 jalr 740(ra) # 8020623e <elock> + 80204276: 00002097 auipc ra,0x2 + 8020427a: 318080e7 jalr 792(ra) # 8020658e <elock> // Check ELF header if(eread(ep, 0, (uint64) &elf, 0, sizeof(elf)) != sizeof(elf)) - 80203f62: 04000713 li a4,64 - 80203f66: 4681 li a3,0 - 80203f68: e4840613 addi a2,s0,-440 - 80203f6c: 4581 li a1,0 - 80203f6e: 8552 mv a0,s4 - 80203f70: 00002097 auipc ra,0x2 - 80203f74: 9ca080e7 jalr -1590(ra) # 8020593a <eread> - 80203f78: 04000793 li a5,64 - 80203f7c: 00f51a63 bne a0,a5,80203f90 <exec+0xa8> + 8020427e: 04000713 li a4,64 + 80204282: 4681 li a3,0 + 80204284: e4840613 addi a2,s0,-440 + 80204288: 4581 li a1,0 + 8020428a: 8552 mv a0,s4 + 8020428c: 00002097 auipc ra,0x2 + 80204290: 9fe080e7 jalr -1538(ra) # 80205c8a <eread> + 80204294: 04000793 li a5,64 + 80204298: 00f51a63 bne a0,a5,802042ac <exec+0xa8> goto bad; if(elf.magic != ELF_MAGIC) - 80203f80: e4842703 lw a4,-440(s0) - 80203f84: 464c47b7 lui a5,0x464c4 - 80203f88: 57f78793 addi a5,a5,1407 # 464c457f <_entry-0x39d3ba81> - 80203f8c: 00f70963 beq a4,a5,80203f9e <exec+0xb6> + 8020429c: e4842703 lw a4,-440(s0) + 802042a0: 464c47b7 lui a5,0x464c4 + 802042a4: 57f78793 addi a5,a5,1407 # 464c457f <_entry-0x39d3ba81> + 802042a8: 00f70963 beq a4,a5,802042ba <exec+0xb6> printf("[exec] reach bad\n"); #endif if(pagetable) proc_freepagetable(pagetable, sz); if(kpagetable) kvmfree(kpagetable, 0); - 80203f90: 4581 li a1,0 - 80203f92: 855a mv a0,s6 - 80203f94: ffffd097 auipc ra,0xffffd - 80203f98: 6de080e7 jalr 1758(ra) # 80201672 <kvmfree> + 802042ac: 4581 li a1,0 + 802042ae: 855a mv a0,s6 + 802042b0: ffffd097 auipc ra,0xffffd + 802042b4: 3c2080e7 jalr 962(ra) # 80201672 <kvmfree> if(ep){ - 80203f9c: a4bd j 8020420a <exec+0x322> + 802042b8: a4bd j 80204526 <exec+0x322> if((pagetable = proc_pagetable(p)) == NULL) - 80203f9e: 8526 mv a0,s1 - 80203fa0: ffffe097 auipc ra,0xffffe - 80203fa4: b80080e7 jalr -1152(ra) # 80201b20 <proc_pagetable> - 80203fa8: e0a43423 sd a0,-504(s0) - 80203fac: d175 beqz a0,80203f90 <exec+0xa8> + 802042ba: 8526 mv a0,s1 + 802042bc: ffffe097 auipc ra,0xffffe + 802042c0: 864080e7 jalr -1948(ra) # 80201b20 <proc_pagetable> + 802042c4: e0a43423 sd a0,-504(s0) + 802042c8: d175 beqz a0,802042ac <exec+0xa8> for(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof(ph)){ - 80203fae: e6842783 lw a5,-408(s0) - 80203fb2: e8045703 lhu a4,-384(s0) - 80203fb6: cb3d beqz a4,8020402c <exec+0x144> + 802042ca: e6842783 lw a5,-408(s0) + 802042ce: e8045703 lhu a4,-384(s0) + 802042d2: cb3d beqz a4,80204348 <exec+0x144> uint64 argc, sz = 0, sp, ustack[MAXARG+1], stackbase; - 80203fb8: 4481 li s1,0 + 802042d4: 4481 li s1,0 for(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof(ph)){ - 80203fba: e0043023 sd zero,-512(s0) + 802042d6: e0043023 sd zero,-512(s0) if(eread(ep, 0, (uint64)&ph, off, sizeof(ph)) != sizeof(ph)) - 80203fbe: e1040713 addi a4,s0,-496 - 80203fc2: dee43023 sd a4,-544(s0) + 802042da: e1040713 addi a4,s0,-496 + 802042de: dee43023 sd a4,-544(s0) if(ph.vaddr % PGSIZE != 0) - 80203fc6: 6a85 lui s5,0x1 - 80203fc8: fffa8713 addi a4,s5,-1 # fff <_entry-0x801ff001> - 80203fcc: dce43823 sd a4,-560(s0) + 802042e2: 6a85 lui s5,0x1 + 802042e4: fffa8713 addi a4,s5,-1 # fff <_entry-0x801ff001> + 802042e8: dce43823 sd a4,-560(s0) for(i = 0; i < sz; i += PGSIZE){ - 80203fd0: 6d85 lui s11,0x1 - 80203fd2: 7d7d lui s10,0xfffff - 80203fd4: a4c9 j 80204296 <exec+0x3ae> + 802042ec: 6d85 lui s11,0x1 + 802042ee: 7d7d lui s10,0xfffff + 802042f0: a4c9 j 802045b2 <exec+0x3ae> panic("loadseg: address should exist"); - 80203fd6: 00006517 auipc a0,0x6 - 80203fda: b7a50513 addi a0,a0,-1158 # 80209b50 <digits+0x7d0> - 80203fde: ffffc097 auipc ra,0xffffc - 80203fe2: 166080e7 jalr 358(ra) # 80200144 <panic> + 802042f2: 00006517 auipc a0,0x6 + 802042f6: 89650513 addi a0,a0,-1898 # 80209b88 <digits+0x808> + 802042fa: ffffc097 auipc ra,0xffffc + 802042fe: e4a080e7 jalr -438(ra) # 80200144 <panic> if(eread(ep, 0, (uint64)pa, offset+i, n) != n) - 80203fe6: 874a mv a4,s2 - 80203fe8: 009c86bb addw a3,s9,s1 - 80203fec: 4581 li a1,0 - 80203fee: 8552 mv a0,s4 - 80203ff0: 00002097 auipc ra,0x2 - 80203ff4: 94a080e7 jalr -1718(ra) # 8020593a <eread> - 80203ff8: 2501 sext.w a0,a0 - 80203ffa: 1ea91763 bne s2,a0,802041e8 <exec+0x300> + 80204302: 874a mv a4,s2 + 80204304: 009c86bb addw a3,s9,s1 + 80204308: 4581 li a1,0 + 8020430a: 8552 mv a0,s4 + 8020430c: 00002097 auipc ra,0x2 + 80204310: 97e080e7 jalr -1666(ra) # 80205c8a <eread> + 80204314: 2501 sext.w a0,a0 + 80204316: 1ea91763 bne s2,a0,80204504 <exec+0x300> for(i = 0; i < sz; i += PGSIZE){ - 80203ffe: 009d84bb addw s1,s11,s1 - 80204002: 013d09bb addw s3,s10,s3 - 80204006: 2774f863 bgeu s1,s7,80204276 <exec+0x38e> + 8020431a: 009d84bb addw s1,s11,s1 + 8020431e: 013d09bb addw s3,s10,s3 + 80204322: 2774f863 bgeu s1,s7,80204592 <exec+0x38e> pa = walkaddr(pagetable, va + i); - 8020400a: 02049593 slli a1,s1,0x20 - 8020400e: 9181 srli a1,a1,0x20 - 80204010: 95e2 add a1,a1,s8 - 80204012: e0843503 ld a0,-504(s0) - 80204016: ffffd097 auipc ra,0xffffd - 8020401a: b98080e7 jalr -1128(ra) # 80200bae <walkaddr> - 8020401e: 862a mv a2,a0 + 80204326: 02049593 slli a1,s1,0x20 + 8020432a: 9181 srli a1,a1,0x20 + 8020432c: 95e2 add a1,a1,s8 + 8020432e: e0843503 ld a0,-504(s0) + 80204332: ffffd097 auipc ra,0xffffd + 80204336: 87c080e7 jalr -1924(ra) # 80200bae <walkaddr> + 8020433a: 862a mv a2,a0 if(pa == NULL) - 80204020: d95d beqz a0,80203fd6 <exec+0xee> + 8020433c: d95d beqz a0,802042f2 <exec+0xee> n = PGSIZE; - 80204022: 8956 mv s2,s5 + 8020433e: 8956 mv s2,s5 if(sz - i < PGSIZE) - 80204024: fd59f1e3 bgeu s3,s5,80203fe6 <exec+0xfe> + 80204340: fd59f1e3 bgeu s3,s5,80204302 <exec+0xfe> n = sz - i; - 80204028: 894e mv s2,s3 - 8020402a: bf75 j 80203fe6 <exec+0xfe> + 80204344: 894e mv s2,s3 + 80204346: bf75 j 80204302 <exec+0xfe> uint64 argc, sz = 0, sp, ustack[MAXARG+1], stackbase; - 8020402c: 4481 li s1,0 + 80204348: 4481 li s1,0 eunlock(ep); - 8020402e: 8552 mv a0,s4 - 80204030: 00002097 auipc ra,0x2 - 80204034: 244080e7 jalr 580(ra) # 80206274 <eunlock> + 8020434a: 8552 mv a0,s4 + 8020434c: 00002097 auipc ra,0x2 + 80204350: 278080e7 jalr 632(ra) # 802065c4 <eunlock> eput(ep); - 80204038: 8552 mv a0,s4 - 8020403a: 00002097 auipc ra,0x2 - 8020403e: 288080e7 jalr 648(ra) # 802062c2 <eput> + 80204354: 8552 mv a0,s4 + 80204356: 00002097 auipc ra,0x2 + 8020435a: 2bc080e7 jalr 700(ra) # 80206612 <eput> p = myproc(); - 80204042: ffffe097 auipc ra,0xffffe - 80204046: 9fa080e7 jalr -1542(ra) # 80201a3c <myproc> - 8020404a: 8aaa mv s5,a0 + 8020435e: ffffd097 auipc ra,0xffffd + 80204362: 6de080e7 jalr 1758(ra) # 80201a3c <myproc> + 80204366: 8aaa mv s5,a0 uint64 oldsz = p->sz; - 8020404c: 04853d03 ld s10,72(a0) + 80204368: 04853d03 ld s10,72(a0) sz = PGROUNDUP(sz); - 80204050: 6785 lui a5,0x1 - 80204052: 17fd addi a5,a5,-1 # fff <_entry-0x801ff001> - 80204054: 97a6 add a5,a5,s1 - 80204056: 777d lui a4,0xfffff - 80204058: 8ff9 and a5,a5,a4 - 8020405a: def43823 sd a5,-528(s0) + 8020436c: 6785 lui a5,0x1 + 8020436e: 17fd addi a5,a5,-1 # fff <_entry-0x801ff001> + 80204370: 97a6 add a5,a5,s1 + 80204372: 777d lui a4,0xfffff + 80204374: 8ff9 and a5,a5,a4 + 80204376: def43823 sd a5,-528(s0) if((sz1 = uvmalloc(pagetable, kpagetable, sz, sz + 2*PGSIZE)) == 0) - 8020405e: 6689 lui a3,0x2 - 80204060: 96be add a3,a3,a5 - 80204062: 863e mv a2,a5 - 80204064: 85da mv a1,s6 - 80204066: e0843483 ld s1,-504(s0) - 8020406a: 8526 mv a0,s1 - 8020406c: ffffd097 auipc ra,0xffffd - 80204070: f9e080e7 jalr -98(ra) # 8020100a <uvmalloc> - 80204074: 8caa mv s9,a0 + 8020437a: 6689 lui a3,0x2 + 8020437c: 96be add a3,a3,a5 + 8020437e: 863e mv a2,a5 + 80204380: 85da mv a1,s6 + 80204382: e0843483 ld s1,-504(s0) + 80204386: 8526 mv a0,s1 + 80204388: ffffd097 auipc ra,0xffffd + 8020438c: c82080e7 jalr -894(ra) # 8020100a <uvmalloc> + 80204390: 8caa mv s9,a0 ep = 0; - 80204076: 4a01 li s4,0 + 80204392: 4a01 li s4,0 if((sz1 = uvmalloc(pagetable, kpagetable, sz, sz + 2*PGSIZE)) == 0) - 80204078: 16050863 beqz a0,802041e8 <exec+0x300> + 80204394: 16050863 beqz a0,80204504 <exec+0x300> uvmclear(pagetable, sz-2*PGSIZE); - 8020407c: 75f9 lui a1,0xffffe - 8020407e: 95aa add a1,a1,a0 - 80204080: 8526 mv a0,s1 - 80204082: ffffd097 auipc ra,0xffffd - 80204086: 232080e7 jalr 562(ra) # 802012b4 <uvmclear> + 80204398: 75f9 lui a1,0xffffe + 8020439a: 95aa add a1,a1,a0 + 8020439c: 8526 mv a0,s1 + 8020439e: ffffd097 auipc ra,0xffffd + 802043a2: f16080e7 jalr -234(ra) # 802012b4 <uvmclear> stackbase = sp - PGSIZE; - 8020408a: 7bfd lui s7,0xfffff - 8020408c: 9be6 add s7,s7,s9 + 802043a6: 7bfd lui s7,0xfffff + 802043a8: 9be6 add s7,s7,s9 for(argc = 0; argv[argc]; argc++) { - 8020408e: de843783 ld a5,-536(s0) - 80204092: 6388 ld a0,0(a5) - 80204094: c92d beqz a0,80204106 <exec+0x21e> - 80204096: e8840993 addi s3,s0,-376 - 8020409a: f8840c13 addi s8,s0,-120 + 802043aa: de843783 ld a5,-536(s0) + 802043ae: 6388 ld a0,0(a5) + 802043b0: c92d beqz a0,80204422 <exec+0x21e> + 802043b2: e8840993 addi s3,s0,-376 + 802043b6: f8840c13 addi s8,s0,-120 sp = sz; - 8020409e: 8966 mv s2,s9 + 802043ba: 8966 mv s2,s9 for(argc = 0; argv[argc]; argc++) { - 802040a0: 4481 li s1,0 + 802043bc: 4481 li s1,0 sp -= strlen(argv[argc]) + 1; - 802040a2: ffffd097 auipc ra,0xffffd - 802040a6: 844080e7 jalr -1980(ra) # 802008e6 <strlen> - 802040aa: 0015079b addiw a5,a0,1 - 802040ae: 40f907b3 sub a5,s2,a5 + 802043be: ffffc097 auipc ra,0xffffc + 802043c2: 528080e7 jalr 1320(ra) # 802008e6 <strlen> + 802043c6: 0015079b addiw a5,a0,1 + 802043ca: 40f907b3 sub a5,s2,a5 sp -= sp % 16; // riscv sp must be 16-byte aligned - 802040b2: ff07f913 andi s2,a5,-16 + 802043ce: ff07f913 andi s2,a5,-16 if(sp < stackbase) - 802040b6: 1b796463 bltu s2,s7,8020425e <exec+0x376> + 802043d2: 1b796463 bltu s2,s7,8020457a <exec+0x376> if(copyout(pagetable, sp, argv[argc], strlen(argv[argc]) + 1) < 0) - 802040ba: de843d83 ld s11,-536(s0) - 802040be: 000dba03 ld s4,0(s11) # 1000 <_entry-0x801ff000> - 802040c2: 8552 mv a0,s4 - 802040c4: ffffd097 auipc ra,0xffffd - 802040c8: 822080e7 jalr -2014(ra) # 802008e6 <strlen> - 802040cc: 0015069b addiw a3,a0,1 - 802040d0: 8652 mv a2,s4 - 802040d2: 85ca mv a1,s2 - 802040d4: e0843503 ld a0,-504(s0) - 802040d8: ffffd097 auipc ra,0xffffd - 802040dc: 20e080e7 jalr 526(ra) # 802012e6 <copyout> - 802040e0: 18054363 bltz a0,80204266 <exec+0x37e> + 802043d6: de843d83 ld s11,-536(s0) + 802043da: 000dba03 ld s4,0(s11) # 1000 <_entry-0x801ff000> + 802043de: 8552 mv a0,s4 + 802043e0: ffffc097 auipc ra,0xffffc + 802043e4: 506080e7 jalr 1286(ra) # 802008e6 <strlen> + 802043e8: 0015069b addiw a3,a0,1 + 802043ec: 8652 mv a2,s4 + 802043ee: 85ca mv a1,s2 + 802043f0: e0843503 ld a0,-504(s0) + 802043f4: ffffd097 auipc ra,0xffffd + 802043f8: ef2080e7 jalr -270(ra) # 802012e6 <copyout> + 802043fc: 18054363 bltz a0,80204582 <exec+0x37e> ustack[argc] = sp; - 802040e4: 0129b023 sd s2,0(s3) + 80204400: 0129b023 sd s2,0(s3) for(argc = 0; argv[argc]; argc++) { - 802040e8: 0485 addi s1,s1,1 - 802040ea: 008d8793 addi a5,s11,8 - 802040ee: def43423 sd a5,-536(s0) - 802040f2: 008db503 ld a0,8(s11) - 802040f6: c911 beqz a0,8020410a <exec+0x222> + 80204404: 0485 addi s1,s1,1 + 80204406: 008d8793 addi a5,s11,8 + 8020440a: def43423 sd a5,-536(s0) + 8020440e: 008db503 ld a0,8(s11) + 80204412: c911 beqz a0,80204426 <exec+0x222> if(argc >= MAXARG) - 802040f8: 09a1 addi s3,s3,8 - 802040fa: fb3c14e3 bne s8,s3,802040a2 <exec+0x1ba> + 80204414: 09a1 addi s3,s3,8 + 80204416: fb3c14e3 bne s8,s3,802043be <exec+0x1ba> sz = sz1; - 802040fe: df943823 sd s9,-528(s0) + 8020441a: df943823 sd s9,-528(s0) ep = 0; - 80204102: 4a01 li s4,0 - 80204104: a0d5 j 802041e8 <exec+0x300> + 8020441e: 4a01 li s4,0 + 80204420: a0d5 j 80204504 <exec+0x300> sp = sz; - 80204106: 8966 mv s2,s9 + 80204422: 8966 mv s2,s9 for(argc = 0; argv[argc]; argc++) { - 80204108: 4481 li s1,0 + 80204424: 4481 li s1,0 ustack[argc] = 0; - 8020410a: 00349793 slli a5,s1,0x3 - 8020410e: f9078793 addi a5,a5,-112 - 80204112: 97a2 add a5,a5,s0 - 80204114: ee07bc23 sd zero,-264(a5) + 80204426: 00349793 slli a5,s1,0x3 + 8020442a: f9078793 addi a5,a5,-112 + 8020442e: 97a2 add a5,a5,s0 + 80204430: ee07bc23 sd zero,-264(a5) sp -= (argc+1) * sizeof(uint64); - 80204118: 00148693 addi a3,s1,1 - 8020411c: 068e slli a3,a3,0x3 - 8020411e: 40d90933 sub s2,s2,a3 + 80204434: 00148693 addi a3,s1,1 + 80204438: 068e slli a3,a3,0x3 + 8020443a: 40d90933 sub s2,s2,a3 sp -= sp % 16; - 80204122: ff097913 andi s2,s2,-16 + 8020443e: ff097913 andi s2,s2,-16 if(sp < stackbase) - 80204126: 01797663 bgeu s2,s7,80204132 <exec+0x24a> + 80204442: 01797663 bgeu s2,s7,8020444e <exec+0x24a> sz = sz1; - 8020412a: df943823 sd s9,-528(s0) + 80204446: df943823 sd s9,-528(s0) ep = 0; - 8020412e: 4a01 li s4,0 - 80204130: a865 j 802041e8 <exec+0x300> + 8020444a: 4a01 li s4,0 + 8020444c: a865 j 80204504 <exec+0x300> if(copyout(pagetable, sp, (char *)ustack, (argc+1)*sizeof(uint64)) < 0) - 80204132: e8840613 addi a2,s0,-376 - 80204136: 85ca mv a1,s2 - 80204138: e0843503 ld a0,-504(s0) - 8020413c: ffffd097 auipc ra,0xffffd - 80204140: 1aa080e7 jalr 426(ra) # 802012e6 <copyout> - 80204144: 12054563 bltz a0,8020426e <exec+0x386> + 8020444e: e8840613 addi a2,s0,-376 + 80204452: 85ca mv a1,s2 + 80204454: e0843503 ld a0,-504(s0) + 80204458: ffffd097 auipc ra,0xffffd + 8020445c: e8e080e7 jalr -370(ra) # 802012e6 <copyout> + 80204460: 12054563 bltz a0,8020458a <exec+0x386> p->trapframe->a1 = sp; - 80204148: 060ab783 ld a5,96(s5) - 8020414c: 0727bc23 sd s2,120(a5) + 80204464: 060ab783 ld a5,96(s5) + 80204468: 0727bc23 sd s2,120(a5) for(last=s=path; *s; s++) - 80204150: dd843783 ld a5,-552(s0) - 80204154: 0007c703 lbu a4,0(a5) - 80204158: cf11 beqz a4,80204174 <exec+0x28c> - 8020415a: 0785 addi a5,a5,1 + 8020446c: dd843783 ld a5,-552(s0) + 80204470: 0007c703 lbu a4,0(a5) + 80204474: cf11 beqz a4,80204490 <exec+0x28c> + 80204476: 0785 addi a5,a5,1 if(*s == '/') - 8020415c: 02f00693 li a3,47 - 80204160: a039 j 8020416e <exec+0x286> + 80204478: 02f00693 li a3,47 + 8020447c: a039 j 8020448a <exec+0x286> last = s+1; - 80204162: dcf43c23 sd a5,-552(s0) + 8020447e: dcf43c23 sd a5,-552(s0) for(last=s=path; *s; s++) - 80204166: 0785 addi a5,a5,1 - 80204168: fff7c703 lbu a4,-1(a5) - 8020416c: c701 beqz a4,80204174 <exec+0x28c> + 80204482: 0785 addi a5,a5,1 + 80204484: fff7c703 lbu a4,-1(a5) + 80204488: c701 beqz a4,80204490 <exec+0x28c> if(*s == '/') - 8020416e: fed71ce3 bne a4,a3,80204166 <exec+0x27e> - 80204172: bfc5 j 80204162 <exec+0x27a> + 8020448a: fed71ce3 bne a4,a3,80204482 <exec+0x27e> + 8020448e: bfc5 j 8020447e <exec+0x27a> safestrcpy(p->name, last, sizeof(p->name)); - 80204174: 4641 li a2,16 - 80204176: dd843583 ld a1,-552(s0) - 8020417a: 160a8513 addi a0,s5,352 - 8020417e: ffffc097 auipc ra,0xffffc - 80204182: 736080e7 jalr 1846(ra) # 802008b4 <safestrcpy> + 80204490: 4641 li a2,16 + 80204492: dd843583 ld a1,-552(s0) + 80204496: 160a8513 addi a0,s5,352 + 8020449a: ffffc097 auipc ra,0xffffc + 8020449e: 41a080e7 jalr 1050(ra) # 802008b4 <safestrcpy> oldpagetable = p->pagetable; - 80204186: 050ab503 ld a0,80(s5) + 802044a2: 050ab503 ld a0,80(s5) oldkpagetable = p->kpagetable; - 8020418a: 058ab983 ld s3,88(s5) + 802044a6: 058ab983 ld s3,88(s5) p->pagetable = pagetable; - 8020418e: e0843783 ld a5,-504(s0) - 80204192: 04fab823 sd a5,80(s5) + 802044aa: e0843783 ld a5,-504(s0) + 802044ae: 04fab823 sd a5,80(s5) p->kpagetable = kpagetable; - 80204196: 056abc23 sd s6,88(s5) + 802044b2: 056abc23 sd s6,88(s5) p->sz = sz; - 8020419a: 059ab423 sd s9,72(s5) + 802044b6: 059ab423 sd s9,72(s5) p->trapframe->epc = elf.entry; // initial program counter = main - 8020419e: 060ab783 ld a5,96(s5) - 802041a2: e6043703 ld a4,-416(s0) - 802041a6: ef98 sd a4,24(a5) + 802044ba: 060ab783 ld a5,96(s5) + 802044be: e6043703 ld a4,-416(s0) + 802044c2: ef98 sd a4,24(a5) p->trapframe->sp = sp; // initial stack pointer - 802041a8: 060ab783 ld a5,96(s5) - 802041ac: 0327b823 sd s2,48(a5) + 802044c4: 060ab783 ld a5,96(s5) + 802044c8: 0327b823 sd s2,48(a5) proc_freepagetable(oldpagetable, oldsz); - 802041b0: 85ea mv a1,s10 - 802041b2: ffffe097 auipc ra,0xffffe - 802041b6: a0a080e7 jalr -1526(ra) # 80201bbc <proc_freepagetable> + 802044cc: 85ea mv a1,s10 + 802044ce: ffffd097 auipc ra,0xffffd + 802044d2: 6ee080e7 jalr 1774(ra) # 80201bbc <proc_freepagetable> w_satp(MAKE_SATP(p->kpagetable)); - 802041ba: 058ab783 ld a5,88(s5) - 802041be: 83b1 srli a5,a5,0xc - 802041c0: 577d li a4,-1 - 802041c2: 177e slli a4,a4,0x3f - 802041c4: 8fd9 or a5,a5,a4 + 802044d6: 058ab783 ld a5,88(s5) + 802044da: 83b1 srli a5,a5,0xc + 802044dc: 577d li a4,-1 + 802044de: 177e slli a4,a4,0x3f + 802044e0: 8fd9 or a5,a5,a4 asm volatile("csrw satp, %0" : : "r" (x)); - 802041c6: 18079073 csrw satp,a5 + 802044e2: 18079073 csrw satp,a5 asm volatile("sfence.vma"); - 802041ca: 12000073 sfence.vma + 802044e6: 12000073 sfence.vma kvmfree(oldkpagetable, 0); - 802041ce: 4581 li a1,0 - 802041d0: 854e mv a0,s3 - 802041d2: ffffd097 auipc ra,0xffffd - 802041d6: 4a0080e7 jalr 1184(ra) # 80201672 <kvmfree> + 802044ea: 4581 li a1,0 + 802044ec: 854e mv a0,s3 + 802044ee: ffffd097 auipc ra,0xffffd + 802044f2: 184080e7 jalr 388(ra) # 80201672 <kvmfree> return argc; // this ends up in a0, the first argument to main(argc, argv) - 802041da: 0004851b sext.w a0,s1 - 802041de: a089 j 80204220 <exec+0x338> + 802044f6: 0004851b sext.w a0,s1 + 802044fa: a089 j 8020453c <exec+0x338> return -1; - 802041e0: 557d li a0,-1 - 802041e2: a83d j 80204220 <exec+0x338> - 802041e4: de943823 sd s1,-528(s0) + 802044fc: 557d li a0,-1 + 802044fe: a83d j 8020453c <exec+0x338> + 80204500: de943823 sd s1,-528(s0) proc_freepagetable(pagetable, sz); - 802041e8: df043583 ld a1,-528(s0) - 802041ec: e0843503 ld a0,-504(s0) - 802041f0: ffffe097 auipc ra,0xffffe - 802041f4: 9cc080e7 jalr -1588(ra) # 80201bbc <proc_freepagetable> + 80204504: df043583 ld a1,-528(s0) + 80204508: e0843503 ld a0,-504(s0) + 8020450c: ffffd097 auipc ra,0xffffd + 80204510: 6b0080e7 jalr 1712(ra) # 80201bbc <proc_freepagetable> kvmfree(kpagetable, 0); - 802041f8: 4581 li a1,0 - 802041fa: 855a mv a0,s6 - 802041fc: ffffd097 auipc ra,0xffffd - 80204200: 476080e7 jalr 1142(ra) # 80201672 <kvmfree> + 80204514: 4581 li a1,0 + 80204516: 855a mv a0,s6 + 80204518: ffffd097 auipc ra,0xffffd + 8020451c: 15a080e7 jalr 346(ra) # 80201672 <kvmfree> eunlock(ep); eput(ep); } return -1; - 80204204: 557d li a0,-1 + 80204520: 557d li a0,-1 if(ep){ - 80204206: 000a0d63 beqz s4,80204220 <exec+0x338> + 80204522: 000a0d63 beqz s4,8020453c <exec+0x338> eunlock(ep); - 8020420a: 8552 mv a0,s4 - 8020420c: 00002097 auipc ra,0x2 - 80204210: 068080e7 jalr 104(ra) # 80206274 <eunlock> + 80204526: 8552 mv a0,s4 + 80204528: 00002097 auipc ra,0x2 + 8020452c: 09c080e7 jalr 156(ra) # 802065c4 <eunlock> eput(ep); - 80204214: 8552 mv a0,s4 - 80204216: 00002097 auipc ra,0x2 - 8020421a: 0ac080e7 jalr 172(ra) # 802062c2 <eput> + 80204530: 8552 mv a0,s4 + 80204532: 00002097 auipc ra,0x2 + 80204536: 0e0080e7 jalr 224(ra) # 80206612 <eput> return -1; - 8020421e: 557d li a0,-1 -} - 80204220: 22813083 ld ra,552(sp) - 80204224: 22013403 ld s0,544(sp) - 80204228: 21813483 ld s1,536(sp) - 8020422c: 21013903 ld s2,528(sp) - 80204230: 20813983 ld s3,520(sp) - 80204234: 20013a03 ld s4,512(sp) - 80204238: 7afe ld s5,504(sp) - 8020423a: 7b5e ld s6,496(sp) - 8020423c: 7bbe ld s7,488(sp) - 8020423e: 7c1e ld s8,480(sp) - 80204240: 6cfe ld s9,472(sp) - 80204242: 6d5e ld s10,464(sp) - 80204244: 6dbe ld s11,456(sp) - 80204246: 23010113 addi sp,sp,560 - 8020424a: 8082 ret - 8020424c: de943823 sd s1,-528(s0) - 80204250: bf61 j 802041e8 <exec+0x300> - 80204252: de943823 sd s1,-528(s0) - 80204256: bf49 j 802041e8 <exec+0x300> - 80204258: de943823 sd s1,-528(s0) - 8020425c: b771 j 802041e8 <exec+0x300> + 8020453a: 557d li a0,-1 +} + 8020453c: 22813083 ld ra,552(sp) + 80204540: 22013403 ld s0,544(sp) + 80204544: 21813483 ld s1,536(sp) + 80204548: 21013903 ld s2,528(sp) + 8020454c: 20813983 ld s3,520(sp) + 80204550: 20013a03 ld s4,512(sp) + 80204554: 7afe ld s5,504(sp) + 80204556: 7b5e ld s6,496(sp) + 80204558: 7bbe ld s7,488(sp) + 8020455a: 7c1e ld s8,480(sp) + 8020455c: 6cfe ld s9,472(sp) + 8020455e: 6d5e ld s10,464(sp) + 80204560: 6dbe ld s11,456(sp) + 80204562: 23010113 addi sp,sp,560 + 80204566: 8082 ret + 80204568: de943823 sd s1,-528(s0) + 8020456c: bf61 j 80204504 <exec+0x300> + 8020456e: de943823 sd s1,-528(s0) + 80204572: bf49 j 80204504 <exec+0x300> + 80204574: de943823 sd s1,-528(s0) + 80204578: b771 j 80204504 <exec+0x300> sz = sz1; - 8020425e: df943823 sd s9,-528(s0) + 8020457a: df943823 sd s9,-528(s0) ep = 0; - 80204262: 4a01 li s4,0 - 80204264: b751 j 802041e8 <exec+0x300> + 8020457e: 4a01 li s4,0 + 80204580: b751 j 80204504 <exec+0x300> sz = sz1; - 80204266: df943823 sd s9,-528(s0) + 80204582: df943823 sd s9,-528(s0) ep = 0; - 8020426a: 4a01 li s4,0 - 8020426c: bfb5 j 802041e8 <exec+0x300> + 80204586: 4a01 li s4,0 + 80204588: bfb5 j 80204504 <exec+0x300> sz = sz1; - 8020426e: df943823 sd s9,-528(s0) + 8020458a: df943823 sd s9,-528(s0) ep = 0; - 80204272: 4a01 li s4,0 - 80204274: bf95 j 802041e8 <exec+0x300> + 8020458e: 4a01 li s4,0 + 80204590: bf95 j 80204504 <exec+0x300> if((sz1 = uvmalloc(pagetable, kpagetable, sz, ph.vaddr + ph.memsz)) == 0) - 80204276: df043483 ld s1,-528(s0) + 80204592: df043483 ld s1,-528(s0) for(i=0, off=elf.phoff; i<elf.phnum; i++, off+=sizeof(ph)){ - 8020427a: e0043783 ld a5,-512(s0) - 8020427e: 0017869b addiw a3,a5,1 - 80204282: e0d43023 sd a3,-512(s0) - 80204286: df843783 ld a5,-520(s0) - 8020428a: 0387879b addiw a5,a5,56 - 8020428e: e8045703 lhu a4,-384(s0) - 80204292: d8e6dee3 bge a3,a4,8020402e <exec+0x146> + 80204596: e0043783 ld a5,-512(s0) + 8020459a: 0017869b addiw a3,a5,1 + 8020459e: e0d43023 sd a3,-512(s0) + 802045a2: df843783 ld a5,-520(s0) + 802045a6: 0387879b addiw a5,a5,56 + 802045aa: e8045703 lhu a4,-384(s0) + 802045ae: d8e6dee3 bge a3,a4,8020434a <exec+0x146> if(eread(ep, 0, (uint64)&ph, off, sizeof(ph)) != sizeof(ph)) - 80204296: 2781 sext.w a5,a5 - 80204298: def43c23 sd a5,-520(s0) - 8020429c: 03800713 li a4,56 - 802042a0: 86be mv a3,a5 - 802042a2: de043603 ld a2,-544(s0) - 802042a6: 4581 li a1,0 - 802042a8: 8552 mv a0,s4 - 802042aa: 00001097 auipc ra,0x1 - 802042ae: 690080e7 jalr 1680(ra) # 8020593a <eread> - 802042b2: 03800793 li a5,56 - 802042b6: f2f517e3 bne a0,a5,802041e4 <exec+0x2fc> + 802045b2: 2781 sext.w a5,a5 + 802045b4: def43c23 sd a5,-520(s0) + 802045b8: 03800713 li a4,56 + 802045bc: 86be mv a3,a5 + 802045be: de043603 ld a2,-544(s0) + 802045c2: 4581 li a1,0 + 802045c4: 8552 mv a0,s4 + 802045c6: 00001097 auipc ra,0x1 + 802045ca: 6c4080e7 jalr 1732(ra) # 80205c8a <eread> + 802045ce: 03800793 li a5,56 + 802045d2: f2f517e3 bne a0,a5,80204500 <exec+0x2fc> if(ph.type != ELF_PROG_LOAD) - 802042ba: e1042783 lw a5,-496(s0) - 802042be: 4705 li a4,1 - 802042c0: fae79de3 bne a5,a4,8020427a <exec+0x392> + 802045d6: e1042783 lw a5,-496(s0) + 802045da: 4705 li a4,1 + 802045dc: fae79de3 bne a5,a4,80204596 <exec+0x392> if(ph.memsz < ph.filesz) - 802042c4: e3843683 ld a3,-456(s0) - 802042c8: e3043783 ld a5,-464(s0) - 802042cc: f8f6e0e3 bltu a3,a5,8020424c <exec+0x364> + 802045e0: e3843683 ld a3,-456(s0) + 802045e4: e3043783 ld a5,-464(s0) + 802045e8: f8f6e0e3 bltu a3,a5,80204568 <exec+0x364> if(ph.vaddr + ph.memsz < ph.vaddr) - 802042d0: e2043783 ld a5,-480(s0) - 802042d4: 96be add a3,a3,a5 - 802042d6: f6f6eee3 bltu a3,a5,80204252 <exec+0x36a> + 802045ec: e2043783 ld a5,-480(s0) + 802045f0: 96be add a3,a3,a5 + 802045f2: f6f6eee3 bltu a3,a5,8020456e <exec+0x36a> if((sz1 = uvmalloc(pagetable, kpagetable, sz, ph.vaddr + ph.memsz)) == 0) - 802042da: 8626 mv a2,s1 - 802042dc: 85da mv a1,s6 - 802042de: e0843503 ld a0,-504(s0) - 802042e2: ffffd097 auipc ra,0xffffd - 802042e6: d28080e7 jalr -728(ra) # 8020100a <uvmalloc> - 802042ea: dea43823 sd a0,-528(s0) - 802042ee: d52d beqz a0,80204258 <exec+0x370> + 802045f6: 8626 mv a2,s1 + 802045f8: 85da mv a1,s6 + 802045fa: e0843503 ld a0,-504(s0) + 802045fe: ffffd097 auipc ra,0xffffd + 80204602: a0c080e7 jalr -1524(ra) # 8020100a <uvmalloc> + 80204606: dea43823 sd a0,-528(s0) + 8020460a: d52d beqz a0,80204574 <exec+0x370> if(ph.vaddr % PGSIZE != 0) - 802042f0: e2043c03 ld s8,-480(s0) - 802042f4: dd043783 ld a5,-560(s0) - 802042f8: 00fc77b3 and a5,s8,a5 - 802042fc: ee0796e3 bnez a5,802041e8 <exec+0x300> + 8020460c: e2043c03 ld s8,-480(s0) + 80204610: dd043783 ld a5,-560(s0) + 80204614: 00fc77b3 and a5,s8,a5 + 80204618: ee0796e3 bnez a5,80204504 <exec+0x300> if(loadseg(pagetable, ph.vaddr, ep, ph.off, ph.filesz) < 0) - 80204300: e1842c83 lw s9,-488(s0) - 80204304: e3042b83 lw s7,-464(s0) + 8020461c: e1842c83 lw s9,-488(s0) + 80204620: e3042b83 lw s7,-464(s0) for(i = 0; i < sz; i += PGSIZE){ - 80204308: f60b87e3 beqz s7,80204276 <exec+0x38e> - 8020430c: 89de mv s3,s7 - 8020430e: 4481 li s1,0 - 80204310: b9ed j 8020400a <exec+0x122> + 80204624: f60b87e3 beqz s7,80204592 <exec+0x38e> + 80204628: 89de mv s3,s7 + 8020462a: 4481 li s1,0 + 8020462c: b9ed j 80204326 <exec+0x122> kvmfree(kpagetable, 0); - 80204312: 4581 li a1,0 - 80204314: 855a mv a0,s6 - 80204316: ffffd097 auipc ra,0xffffd - 8020431a: 35c080e7 jalr 860(ra) # 80201672 <kvmfree> + 8020462e: 4581 li a1,0 + 80204630: 855a mv a0,s6 + 80204632: ffffd097 auipc ra,0xffffd + 80204636: 040080e7 jalr 64(ra) # 80201672 <kvmfree> return -1; - 8020431e: 557d li a0,-1 - 80204320: b701 j 80204220 <exec+0x338> + 8020463a: 557d li a0,-1 + 8020463c: b701 j 8020453c <exec+0x338> -0000000080204322 <argfd>: +000000008020463e <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) { - 80204322: 7179 addi sp,sp,-48 - 80204324: f406 sd ra,40(sp) - 80204326: f022 sd s0,32(sp) - 80204328: ec26 sd s1,24(sp) - 8020432a: e84a sd s2,16(sp) - 8020432c: 1800 addi s0,sp,48 - 8020432e: 892e mv s2,a1 - 80204330: 84b2 mv s1,a2 + 8020463e: 7179 addi sp,sp,-48 + 80204640: f406 sd ra,40(sp) + 80204642: f022 sd s0,32(sp) + 80204644: ec26 sd s1,24(sp) + 80204646: e84a sd s2,16(sp) + 80204648: 1800 addi s0,sp,48 + 8020464a: 892e mv s2,a1 + 8020464c: 84b2 mv s1,a2 int fd; struct file *f; if(argint(n, &fd) < 0) - 80204332: fdc40593 addi a1,s0,-36 - 80204336: fffff097 auipc ra,0xfffff - 8020433a: a88080e7 jalr -1400(ra) # 80202dbe <argint> - 8020433e: 04054063 bltz a0,8020437e <argfd+0x5c> + 8020464e: fdc40593 addi a1,s0,-36 + 80204652: fffff097 auipc ra,0xfffff + 80204656: 9c0080e7 jalr -1600(ra) # 80203012 <argint> + 8020465a: 04054063 bltz a0,8020469a <argfd+0x5c> return -1; if(fd < 0 || fd >= NOFILE || (f=myproc()->ofile[fd]) == NULL) - 80204342: fdc42703 lw a4,-36(s0) - 80204346: 47bd li a5,15 - 80204348: 02e7ed63 bltu a5,a4,80204382 <argfd+0x60> - 8020434c: ffffd097 auipc ra,0xffffd - 80204350: 6f0080e7 jalr 1776(ra) # 80201a3c <myproc> - 80204354: fdc42703 lw a4,-36(s0) - 80204358: 01a70793 addi a5,a4,26 # fffffffffffff01a <ebss_clear+0xffffffff7fdd901a> - 8020435c: 078e slli a5,a5,0x3 - 8020435e: 953e add a0,a0,a5 - 80204360: 651c ld a5,8(a0) - 80204362: c395 beqz a5,80204386 <argfd+0x64> + 8020465e: fdc42703 lw a4,-36(s0) + 80204662: 47bd li a5,15 + 80204664: 02e7ed63 bltu a5,a4,8020469e <argfd+0x60> + 80204668: ffffd097 auipc ra,0xffffd + 8020466c: 3d4080e7 jalr 980(ra) # 80201a3c <myproc> + 80204670: fdc42703 lw a4,-36(s0) + 80204674: 01a70793 addi a5,a4,26 # fffffffffffff01a <ebss_clear+0xffffffff7fdd901a> + 80204678: 078e slli a5,a5,0x3 + 8020467a: 953e add a0,a0,a5 + 8020467c: 651c ld a5,8(a0) + 8020467e: c395 beqz a5,802046a2 <argfd+0x64> return -1; if(pfd) - 80204364: 00090463 beqz s2,8020436c <argfd+0x4a> + 80204680: 00090463 beqz s2,80204688 <argfd+0x4a> *pfd = fd; - 80204368: 00e92023 sw a4,0(s2) + 80204684: 00e92023 sw a4,0(s2) if(pf) *pf = f; return 0; - 8020436c: 4501 li a0,0 + 80204688: 4501 li a0,0 if(pf) - 8020436e: c091 beqz s1,80204372 <argfd+0x50> + 8020468a: c091 beqz s1,8020468e <argfd+0x50> *pf = f; - 80204370: e09c sd a5,0(s1) -} - 80204372: 70a2 ld ra,40(sp) - 80204374: 7402 ld s0,32(sp) - 80204376: 64e2 ld s1,24(sp) - 80204378: 6942 ld s2,16(sp) - 8020437a: 6145 addi sp,sp,48 - 8020437c: 8082 ret + 8020468c: e09c sd a5,0(s1) +} + 8020468e: 70a2 ld ra,40(sp) + 80204690: 7402 ld s0,32(sp) + 80204692: 64e2 ld s1,24(sp) + 80204694: 6942 ld s2,16(sp) + 80204696: 6145 addi sp,sp,48 + 80204698: 8082 ret return -1; - 8020437e: 557d li a0,-1 - 80204380: bfcd j 80204372 <argfd+0x50> + 8020469a: 557d li a0,-1 + 8020469c: bfcd j 8020468e <argfd+0x50> return -1; - 80204382: 557d li a0,-1 - 80204384: b7fd j 80204372 <argfd+0x50> - 80204386: 557d li a0,-1 - 80204388: b7ed j 80204372 <argfd+0x50> + 8020469e: 557d li a0,-1 + 802046a0: b7fd j 8020468e <argfd+0x50> + 802046a2: 557d li a0,-1 + 802046a4: b7ed j 8020468e <argfd+0x50> -000000008020438a <fdalloc>: +00000000802046a6 <fdalloc>: // Allocate a file descriptor for the given file. // Takes over file reference from caller on success. static int fdalloc(struct file *f) { - 8020438a: 1101 addi sp,sp,-32 - 8020438c: ec06 sd ra,24(sp) - 8020438e: e822 sd s0,16(sp) - 80204390: e426 sd s1,8(sp) - 80204392: 1000 addi s0,sp,32 - 80204394: 84aa mv s1,a0 + 802046a6: 1101 addi sp,sp,-32 + 802046a8: ec06 sd ra,24(sp) + 802046aa: e822 sd s0,16(sp) + 802046ac: e426 sd s1,8(sp) + 802046ae: 1000 addi s0,sp,32 + 802046b0: 84aa mv s1,a0 int fd; struct proc *p = myproc(); - 80204396: ffffd097 auipc ra,0xffffd - 8020439a: 6a6080e7 jalr 1702(ra) # 80201a3c <myproc> - 8020439e: 862a mv a2,a0 + 802046b2: ffffd097 auipc ra,0xffffd + 802046b6: 38a080e7 jalr 906(ra) # 80201a3c <myproc> + 802046ba: 862a mv a2,a0 for(fd = 0; fd < NOFILE; fd++){ - 802043a0: 0d850793 addi a5,a0,216 - 802043a4: 4501 li a0,0 - 802043a6: 46c1 li a3,16 + 802046bc: 0d850793 addi a5,a0,216 + 802046c0: 4501 li a0,0 + 802046c2: 46c1 li a3,16 if(p->ofile[fd] == 0){ - 802043a8: 6398 ld a4,0(a5) - 802043aa: cb19 beqz a4,802043c0 <fdalloc+0x36> + 802046c4: 6398 ld a4,0(a5) + 802046c6: cb19 beqz a4,802046dc <fdalloc+0x36> for(fd = 0; fd < NOFILE; fd++){ - 802043ac: 2505 addiw a0,a0,1 - 802043ae: 07a1 addi a5,a5,8 - 802043b0: fed51ce3 bne a0,a3,802043a8 <fdalloc+0x1e> + 802046c8: 2505 addiw a0,a0,1 + 802046ca: 07a1 addi a5,a5,8 + 802046cc: fed51ce3 bne a0,a3,802046c4 <fdalloc+0x1e> p->ofile[fd] = f; return fd; } } return -1; - 802043b4: 557d li a0,-1 + 802046d0: 557d li a0,-1 } - 802043b6: 60e2 ld ra,24(sp) - 802043b8: 6442 ld s0,16(sp) - 802043ba: 64a2 ld s1,8(sp) - 802043bc: 6105 addi sp,sp,32 - 802043be: 8082 ret + 802046d2: 60e2 ld ra,24(sp) + 802046d4: 6442 ld s0,16(sp) + 802046d6: 64a2 ld s1,8(sp) + 802046d8: 6105 addi sp,sp,32 + 802046da: 8082 ret p->ofile[fd] = f; - 802043c0: 01a50793 addi a5,a0,26 - 802043c4: 078e slli a5,a5,0x3 - 802043c6: 963e add a2,a2,a5 - 802043c8: e604 sd s1,8(a2) + 802046dc: 01a50793 addi a5,a0,26 + 802046e0: 078e slli a5,a5,0x3 + 802046e2: 963e add a2,a2,a5 + 802046e4: e604 sd s1,8(a2) return fd; - 802043ca: b7f5 j 802043b6 <fdalloc+0x2c> + 802046e6: b7f5 j 802046d2 <fdalloc+0x2c> -00000000802043cc <create>: +00000000802046e8 <create>: return filestat(f, st); } static struct dirent* create(char *path, short type, int mode) { - 802043cc: 7169 addi sp,sp,-304 - 802043ce: f606 sd ra,296(sp) - 802043d0: f222 sd s0,288(sp) - 802043d2: ee26 sd s1,280(sp) - 802043d4: ea4a sd s2,272(sp) - 802043d6: e64e sd s3,264(sp) - 802043d8: 1a00 addi s0,sp,304 - 802043da: 892e mv s2,a1 + 802046e8: 7169 addi sp,sp,-304 + 802046ea: f606 sd ra,296(sp) + 802046ec: f222 sd s0,288(sp) + 802046ee: ee26 sd s1,280(sp) + 802046f0: ea4a sd s2,272(sp) + 802046f2: e64e sd s3,264(sp) + 802046f4: 1a00 addi s0,sp,304 + 802046f6: 892e mv s2,a1 struct dirent *ep, *dp; char name[FAT32_MAX_FILENAME + 1]; if((dp = enameparent(path, name)) == NULL) - 802043dc: ed040593 addi a1,s0,-304 - 802043e0: 00002097 auipc ra,0x2 - 802043e4: 624080e7 jalr 1572(ra) # 80206a04 <enameparent> - 802043e8: 84aa mv s1,a0 - 802043ea: c945 beqz a0,8020449a <create+0xce> + 802046f8: ed040593 addi a1,s0,-304 + 802046fc: 00002097 auipc ra,0x2 + 80204700: 658080e7 jalr 1624(ra) # 80206d54 <enameparent> + 80204704: 84aa mv s1,a0 + 80204706: c945 beqz a0,802047b6 <create+0xce> mode = ATTR_READ_ONLY; } else { mode = 0; } elock(dp); - 802043ec: 00002097 auipc ra,0x2 - 802043f0: e52080e7 jalr -430(ra) # 8020623e <elock> + 80204708: 00002097 auipc ra,0x2 + 8020470c: e86080e7 jalr -378(ra) # 8020658e <elock> if (type == T_DIR) { - 802043f4: fff90613 addi a2,s2,-1 - 802043f8: 00163613 seqz a2,a2 + 80204710: fff90613 addi a2,s2,-1 + 80204714: 00163613 seqz a2,a2 if ((ep = ealloc(dp, name, mode)) == NULL) { - 802043fc: 0046161b slliw a2,a2,0x4 - 80204400: ed040593 addi a1,s0,-304 - 80204404: 8526 mv a0,s1 - 80204406: 00002097 auipc ra,0x2 - 8020440a: 324080e7 jalr 804(ra) # 8020672a <ealloc> - 8020440e: 89aa mv s3,a0 - 80204410: c529 beqz a0,8020445a <create+0x8e> + 80204718: 0046161b slliw a2,a2,0x4 + 8020471c: ed040593 addi a1,s0,-304 + 80204720: 8526 mv a0,s1 + 80204722: 00002097 auipc ra,0x2 + 80204726: 358080e7 jalr 856(ra) # 80206a7a <ealloc> + 8020472a: 89aa mv s3,a0 + 8020472c: c529 beqz a0,80204776 <create+0x8e> eunlock(dp); eput(dp); return NULL; } if ((type == T_DIR && !(ep->attribute & ATTR_DIRECTORY)) || - 80204412: 0009079b sext.w a5,s2 - 80204416: 4705 li a4,1 - 80204418: 04e78c63 beq a5,a4,80204470 <create+0xa4> - 8020441c: 2901 sext.w s2,s2 - 8020441e: 4789 li a5,2 - 80204420: 00f91663 bne s2,a5,8020442c <create+0x60> + 8020472e: 0009079b sext.w a5,s2 + 80204732: 4705 li a4,1 + 80204734: 04e78c63 beq a5,a4,8020478c <create+0xa4> + 80204738: 2901 sext.w s2,s2 + 8020473a: 4789 li a5,2 + 8020473c: 00f91663 bne s2,a5,80204748 <create+0x60> (type == T_FILE && (ep->attribute & ATTR_DIRECTORY))) { - 80204424: 10054783 lbu a5,256(a0) - 80204428: 8bc1 andi a5,a5,16 - 8020442a: e7b9 bnez a5,80204478 <create+0xac> + 80204740: 10054783 lbu a5,256(a0) + 80204744: 8bc1 andi a5,a5,16 + 80204746: e7b9 bnez a5,80204794 <create+0xac> eput(ep); eput(dp); return NULL; } eunlock(dp); - 8020442c: 8526 mv a0,s1 - 8020442e: 00002097 auipc ra,0x2 - 80204432: e46080e7 jalr -442(ra) # 80206274 <eunlock> + 80204748: 8526 mv a0,s1 + 8020474a: 00002097 auipc ra,0x2 + 8020474e: e7a080e7 jalr -390(ra) # 802065c4 <eunlock> eput(dp); - 80204436: 8526 mv a0,s1 - 80204438: 00002097 auipc ra,0x2 - 8020443c: e8a080e7 jalr -374(ra) # 802062c2 <eput> + 80204752: 8526 mv a0,s1 + 80204754: 00002097 auipc ra,0x2 + 80204758: ebe080e7 jalr -322(ra) # 80206612 <eput> elock(ep); - 80204440: 854e mv a0,s3 - 80204442: 00002097 auipc ra,0x2 - 80204446: dfc080e7 jalr -516(ra) # 8020623e <elock> + 8020475c: 854e mv a0,s3 + 8020475e: 00002097 auipc ra,0x2 + 80204762: e30080e7 jalr -464(ra) # 8020658e <elock> return ep; } - 8020444a: 854e mv a0,s3 - 8020444c: 70b2 ld ra,296(sp) - 8020444e: 7412 ld s0,288(sp) - 80204450: 64f2 ld s1,280(sp) - 80204452: 6952 ld s2,272(sp) - 80204454: 69b2 ld s3,264(sp) - 80204456: 6155 addi sp,sp,304 - 80204458: 8082 ret + 80204766: 854e mv a0,s3 + 80204768: 70b2 ld ra,296(sp) + 8020476a: 7412 ld s0,288(sp) + 8020476c: 64f2 ld s1,280(sp) + 8020476e: 6952 ld s2,272(sp) + 80204770: 69b2 ld s3,264(sp) + 80204772: 6155 addi sp,sp,304 + 80204774: 8082 ret eunlock(dp); - 8020445a: 8526 mv a0,s1 - 8020445c: 00002097 auipc ra,0x2 - 80204460: e18080e7 jalr -488(ra) # 80206274 <eunlock> + 80204776: 8526 mv a0,s1 + 80204778: 00002097 auipc ra,0x2 + 8020477c: e4c080e7 jalr -436(ra) # 802065c4 <eunlock> eput(dp); - 80204464: 8526 mv a0,s1 - 80204466: 00002097 auipc ra,0x2 - 8020446a: e5c080e7 jalr -420(ra) # 802062c2 <eput> + 80204780: 8526 mv a0,s1 + 80204782: 00002097 auipc ra,0x2 + 80204786: e90080e7 jalr -368(ra) # 80206612 <eput> return NULL; - 8020446e: bff1 j 8020444a <create+0x7e> + 8020478a: bff1 j 80204766 <create+0x7e> if ((type == T_DIR && !(ep->attribute & ATTR_DIRECTORY)) || - 80204470: 10054783 lbu a5,256(a0) - 80204474: 8bc1 andi a5,a5,16 - 80204476: fbdd bnez a5,8020442c <create+0x60> + 8020478c: 10054783 lbu a5,256(a0) + 80204790: 8bc1 andi a5,a5,16 + 80204792: fbdd bnez a5,80204748 <create+0x60> eunlock(dp); - 80204478: 8526 mv a0,s1 - 8020447a: 00002097 auipc ra,0x2 - 8020447e: dfa080e7 jalr -518(ra) # 80206274 <eunlock> + 80204794: 8526 mv a0,s1 + 80204796: 00002097 auipc ra,0x2 + 8020479a: e2e080e7 jalr -466(ra) # 802065c4 <eunlock> eput(ep); - 80204482: 854e mv a0,s3 - 80204484: 00002097 auipc ra,0x2 - 80204488: e3e080e7 jalr -450(ra) # 802062c2 <eput> + 8020479e: 854e mv a0,s3 + 802047a0: 00002097 auipc ra,0x2 + 802047a4: e72080e7 jalr -398(ra) # 80206612 <eput> eput(dp); - 8020448c: 8526 mv a0,s1 - 8020448e: 00002097 auipc ra,0x2 - 80204492: e34080e7 jalr -460(ra) # 802062c2 <eput> + 802047a8: 8526 mv a0,s1 + 802047aa: 00002097 auipc ra,0x2 + 802047ae: e68080e7 jalr -408(ra) # 80206612 <eput> return NULL; - 80204496: 4981 li s3,0 - 80204498: bf4d j 8020444a <create+0x7e> + 802047b2: 4981 li s3,0 + 802047b4: bf4d j 80204766 <create+0x7e> return NULL; - 8020449a: 89aa mv s3,a0 - 8020449c: b77d j 8020444a <create+0x7e> + 802047b6: 89aa mv s3,a0 + 802047b8: b77d j 80204766 <create+0x7e> -000000008020449e <sys_dup>: +00000000802047ba <sys_dup>: { - 8020449e: 7179 addi sp,sp,-48 - 802044a0: f406 sd ra,40(sp) - 802044a2: f022 sd s0,32(sp) - 802044a4: ec26 sd s1,24(sp) - 802044a6: e84a sd s2,16(sp) - 802044a8: 1800 addi s0,sp,48 + 802047ba: 7179 addi sp,sp,-48 + 802047bc: f406 sd ra,40(sp) + 802047be: f022 sd s0,32(sp) + 802047c0: ec26 sd s1,24(sp) + 802047c2: e84a sd s2,16(sp) + 802047c4: 1800 addi s0,sp,48 if(argfd(0, 0, &f) < 0) - 802044aa: fd840613 addi a2,s0,-40 - 802044ae: 4581 li a1,0 - 802044b0: 4501 li a0,0 - 802044b2: 00000097 auipc ra,0x0 - 802044b6: e70080e7 jalr -400(ra) # 80204322 <argfd> + 802047c6: fd840613 addi a2,s0,-40 + 802047ca: 4581 li a1,0 + 802047cc: 4501 li a0,0 + 802047ce: 00000097 auipc ra,0x0 + 802047d2: e70080e7 jalr -400(ra) # 8020463e <argfd> return -1; - 802044ba: 57fd li a5,-1 + 802047d6: 57fd li a5,-1 if(argfd(0, 0, &f) < 0) - 802044bc: 02054363 bltz a0,802044e2 <sys_dup+0x44> + 802047d8: 02054363 bltz a0,802047fe <sys_dup+0x44> if((fd=fdalloc(f)) < 0) - 802044c0: fd843903 ld s2,-40(s0) - 802044c4: 854a mv a0,s2 - 802044c6: 00000097 auipc ra,0x0 - 802044ca: ec4080e7 jalr -316(ra) # 8020438a <fdalloc> - 802044ce: 84aa mv s1,a0 + 802047dc: fd843903 ld s2,-40(s0) + 802047e0: 854a mv a0,s2 + 802047e2: 00000097 auipc ra,0x0 + 802047e6: ec4080e7 jalr -316(ra) # 802046a6 <fdalloc> + 802047ea: 84aa mv s1,a0 return -1; - 802044d0: 57fd li a5,-1 + 802047ec: 57fd li a5,-1 if((fd=fdalloc(f)) < 0) - 802044d2: 00054863 bltz a0,802044e2 <sys_dup+0x44> + 802047ee: 00054863 bltz a0,802047fe <sys_dup+0x44> filedup(f); - 802044d6: 854a mv a0,s2 - 802044d8: fffff097 auipc ra,0xfffff - 802044dc: 318080e7 jalr 792(ra) # 802037f0 <filedup> + 802047f2: 854a mv a0,s2 + 802047f4: fffff097 auipc ra,0xfffff + 802047f8: 318080e7 jalr 792(ra) # 80203b0c <filedup> return fd; - 802044e0: 87a6 mv a5,s1 -} - 802044e2: 853e mv a0,a5 - 802044e4: 70a2 ld ra,40(sp) - 802044e6: 7402 ld s0,32(sp) - 802044e8: 64e2 ld s1,24(sp) - 802044ea: 6942 ld s2,16(sp) - 802044ec: 6145 addi sp,sp,48 - 802044ee: 8082 ret - -00000000802044f0 <sys_dup3>: -{ - 802044f0: 7179 addi sp,sp,-48 - 802044f2: f406 sd ra,40(sp) - 802044f4: f022 sd s0,32(sp) - 802044f6: ec26 sd s1,24(sp) - 802044f8: 1800 addi s0,sp,48 + 802047fc: 87a6 mv a5,s1 +} + 802047fe: 853e mv a0,a5 + 80204800: 70a2 ld ra,40(sp) + 80204802: 7402 ld s0,32(sp) + 80204804: 64e2 ld s1,24(sp) + 80204806: 6942 ld s2,16(sp) + 80204808: 6145 addi sp,sp,48 + 8020480a: 8082 ret + +000000008020480c <sys_dup3>: +{ + 8020480c: 7179 addi sp,sp,-48 + 8020480e: f406 sd ra,40(sp) + 80204810: f022 sd s0,32(sp) + 80204812: ec26 sd s1,24(sp) + 80204814: 1800 addi s0,sp,48 if (argfd(0, 0, &file_ptr) < 0 || argint(1, &fd) < 0) { - 802044fa: fd840613 addi a2,s0,-40 - 802044fe: 4581 li a1,0 - 80204500: 4501 li a0,0 - 80204502: 00000097 auipc ra,0x0 - 80204506: e20080e7 jalr -480(ra) # 80204322 <argfd> + 80204816: fd840613 addi a2,s0,-40 + 8020481a: 4581 li a1,0 + 8020481c: 4501 li a0,0 + 8020481e: 00000097 auipc ra,0x0 + 80204822: e20080e7 jalr -480(ra) # 8020463e <argfd> return -1; // 如果获å–失败,返回错误ç -1 - 8020450a: 57fd li a5,-1 + 80204826: 57fd li a5,-1 if (argfd(0, 0, &file_ptr) < 0 || argint(1, &fd) < 0) { - 8020450c: 04054f63 bltz a0,8020456a <sys_dup3+0x7a> - 80204510: fd440593 addi a1,s0,-44 - 80204514: 4505 li a0,1 - 80204516: fffff097 auipc ra,0xfffff - 8020451a: 8a8080e7 jalr -1880(ra) # 80202dbe <argint> - 8020451e: 04054c63 bltz a0,80204576 <sys_dup3+0x86> + 80204828: 04054f63 bltz a0,80204886 <sys_dup3+0x7a> + 8020482c: fd440593 addi a1,s0,-44 + 80204830: 4505 li a0,1 + 80204832: ffffe097 auipc ra,0xffffe + 80204836: 7e0080e7 jalr 2016(ra) # 80203012 <argint> + 8020483a: 04054c63 bltz a0,80204892 <sys_dup3+0x86> if (fd < 0 || fd >= NOFILE) { - 80204522: fd442683 lw a3,-44(s0) - 80204526: 473d li a4,15 + 8020483e: fd442683 lw a3,-44(s0) + 80204842: 473d li a4,15 return -1; // 如果文件æè¿°ç¬¦æ— 效,返回错误ç -1 - 80204528: 57fd li a5,-1 + 80204844: 57fd li a5,-1 if (fd < 0 || fd >= NOFILE) { - 8020452a: 04d76063 bltu a4,a3,8020456a <sys_dup3+0x7a> + 80204846: 04d76063 bltu a4,a3,80204886 <sys_dup3+0x7a> struct proc *current_proc = myproc(); - 8020452e: ffffd097 auipc ra,0xffffd - 80204532: 50e080e7 jalr 1294(ra) # 80201a3c <myproc> - 80204536: 84aa mv s1,a0 + 8020484a: ffffd097 auipc ra,0xffffd + 8020484e: 1f2080e7 jalr 498(ra) # 80201a3c <myproc> + 80204852: 84aa mv s1,a0 if (current_proc->ofile[fd]) { - 80204538: fd442783 lw a5,-44(s0) - 8020453c: 07e9 addi a5,a5,26 - 8020453e: 078e slli a5,a5,0x3 - 80204540: 97aa add a5,a5,a0 - 80204542: 6788 ld a0,8(a5) - 80204544: c509 beqz a0,8020454e <sys_dup3+0x5e> + 80204854: fd442783 lw a5,-44(s0) + 80204858: 07e9 addi a5,a5,26 + 8020485a: 078e slli a5,a5,0x3 + 8020485c: 97aa add a5,a5,a0 + 8020485e: 6788 ld a0,8(a5) + 80204860: c509 beqz a0,8020486a <sys_dup3+0x5e> fileclose(current_proc->ofile[fd]); - 80204546: fffff097 auipc ra,0xfffff - 8020454a: 2fc080e7 jalr 764(ra) # 80203842 <fileclose> + 80204862: fffff097 auipc ra,0xfffff + 80204866: 2fc080e7 jalr 764(ra) # 80203b5e <fileclose> current_proc->ofile[fd] = file_ptr; - 8020454e: fd843503 ld a0,-40(s0) - 80204552: fd442783 lw a5,-44(s0) - 80204556: 07e9 addi a5,a5,26 - 80204558: 078e slli a5,a5,0x3 - 8020455a: 94be add s1,s1,a5 - 8020455c: e488 sd a0,8(s1) + 8020486a: fd843503 ld a0,-40(s0) + 8020486e: fd442783 lw a5,-44(s0) + 80204872: 07e9 addi a5,a5,26 + 80204874: 078e slli a5,a5,0x3 + 80204876: 94be add s1,s1,a5 + 80204878: e488 sd a0,8(s1) filedup(file_ptr); - 8020455e: fffff097 auipc ra,0xfffff - 80204562: 292080e7 jalr 658(ra) # 802037f0 <filedup> + 8020487a: fffff097 auipc ra,0xfffff + 8020487e: 292080e7 jalr 658(ra) # 80203b0c <filedup> return fd; - 80204566: fd442783 lw a5,-44(s0) -} - 8020456a: 853e mv a0,a5 - 8020456c: 70a2 ld ra,40(sp) - 8020456e: 7402 ld s0,32(sp) - 80204570: 64e2 ld s1,24(sp) - 80204572: 6145 addi sp,sp,48 - 80204574: 8082 ret + 80204882: fd442783 lw a5,-44(s0) +} + 80204886: 853e mv a0,a5 + 80204888: 70a2 ld ra,40(sp) + 8020488a: 7402 ld s0,32(sp) + 8020488c: 64e2 ld s1,24(sp) + 8020488e: 6145 addi sp,sp,48 + 80204890: 8082 ret return -1; // 如果获å–失败,返回错误ç -1 - 80204576: 57fd li a5,-1 - 80204578: bfcd j 8020456a <sys_dup3+0x7a> + 80204892: 57fd li a5,-1 + 80204894: bfcd j 80204886 <sys_dup3+0x7a> -000000008020457a <sys_read>: +0000000080204896 <sys_read>: { - 8020457a: 7179 addi sp,sp,-48 - 8020457c: f406 sd ra,40(sp) - 8020457e: f022 sd s0,32(sp) - 80204580: 1800 addi s0,sp,48 + 80204896: 7179 addi sp,sp,-48 + 80204898: f406 sd ra,40(sp) + 8020489a: f022 sd s0,32(sp) + 8020489c: 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: d98080e7 jalr -616(ra) # 80204322 <argfd> + 8020489e: fe840613 addi a2,s0,-24 + 802048a2: 4581 li a1,0 + 802048a4: 4501 li a0,0 + 802048a6: 00000097 auipc ra,0x0 + 802048aa: d98080e7 jalr -616(ra) # 8020463e <argfd> return -1; - 80204592: 57fd li a5,-1 + 802048ae: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 80204594: 04054163 bltz a0,802045d6 <sys_read+0x5c> - 80204598: fe440593 addi a1,s0,-28 - 8020459c: 4509 li a0,2 - 8020459e: fffff097 auipc ra,0xfffff - 802045a2: 820080e7 jalr -2016(ra) # 80202dbe <argint> + 802048b0: 04054163 bltz a0,802048f2 <sys_read+0x5c> + 802048b4: fe440593 addi a1,s0,-28 + 802048b8: 4509 li a0,2 + 802048ba: ffffe097 auipc ra,0xffffe + 802048be: 758080e7 jalr 1880(ra) # 80203012 <argint> return -1; - 802045a6: 57fd li a5,-1 + 802048c2: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 802045a8: 02054763 bltz a0,802045d6 <sys_read+0x5c> - 802045ac: fd840593 addi a1,s0,-40 - 802045b0: 4505 li a0,1 - 802045b2: fffff097 auipc ra,0xfffff - 802045b6: 86e080e7 jalr -1938(ra) # 80202e20 <argaddr> + 802048c4: 02054763 bltz a0,802048f2 <sys_read+0x5c> + 802048c8: fd840593 addi a1,s0,-40 + 802048cc: 4505 li a0,1 + 802048ce: ffffe097 auipc ra,0xffffe + 802048d2: 7a6080e7 jalr 1958(ra) # 80203074 <argaddr> return -1; - 802045ba: 57fd li a5,-1 + 802048d6: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 802045bc: 00054d63 bltz a0,802045d6 <sys_read+0x5c> + 802048d8: 00054d63 bltz a0,802048f2 <sys_read+0x5c> return fileread(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: 390080e7 jalr 912(ra) # 8020395c <fileread> - 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_write>: -{ - 802045e0: 7179 addi sp,sp,-48 - 802045e2: f406 sd ra,40(sp) - 802045e4: f022 sd s0,32(sp) - 802045e6: 1800 addi s0,sp,48 + 802048dc: fe442603 lw a2,-28(s0) + 802048e0: fd843583 ld a1,-40(s0) + 802048e4: fe843503 ld a0,-24(s0) + 802048e8: fffff097 auipc ra,0xfffff + 802048ec: 390080e7 jalr 912(ra) # 80203c78 <fileread> + 802048f0: 87aa mv a5,a0 +} + 802048f2: 853e mv a0,a5 + 802048f4: 70a2 ld ra,40(sp) + 802048f6: 7402 ld s0,32(sp) + 802048f8: 6145 addi sp,sp,48 + 802048fa: 8082 ret + +00000000802048fc <sys_write>: +{ + 802048fc: 7179 addi sp,sp,-48 + 802048fe: f406 sd ra,40(sp) + 80204900: f022 sd s0,32(sp) + 80204902: 1800 addi s0,sp,48 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 802045e8: fe840613 addi a2,s0,-24 - 802045ec: 4581 li a1,0 - 802045ee: 4501 li a0,0 - 802045f0: 00000097 auipc ra,0x0 - 802045f4: d32080e7 jalr -718(ra) # 80204322 <argfd> + 80204904: fe840613 addi a2,s0,-24 + 80204908: 4581 li a1,0 + 8020490a: 4501 li a0,0 + 8020490c: 00000097 auipc ra,0x0 + 80204910: d32080e7 jalr -718(ra) # 8020463e <argfd> return -1; - 802045f8: 57fd li a5,-1 + 80204914: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 802045fa: 04054163 bltz a0,8020463c <sys_write+0x5c> - 802045fe: fe440593 addi a1,s0,-28 - 80204602: 4509 li a0,2 - 80204604: ffffe097 auipc ra,0xffffe - 80204608: 7ba080e7 jalr 1978(ra) # 80202dbe <argint> + 80204916: 04054163 bltz a0,80204958 <sys_write+0x5c> + 8020491a: fe440593 addi a1,s0,-28 + 8020491e: 4509 li a0,2 + 80204920: ffffe097 auipc ra,0xffffe + 80204924: 6f2080e7 jalr 1778(ra) # 80203012 <argint> return -1; - 8020460c: 57fd li a5,-1 + 80204928: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 8020460e: 02054763 bltz a0,8020463c <sys_write+0x5c> - 80204612: fd840593 addi a1,s0,-40 - 80204616: 4505 li a0,1 - 80204618: fffff097 auipc ra,0xfffff - 8020461c: 808080e7 jalr -2040(ra) # 80202e20 <argaddr> + 8020492a: 02054763 bltz a0,80204958 <sys_write+0x5c> + 8020492e: fd840593 addi a1,s0,-40 + 80204932: 4505 li a0,1 + 80204934: ffffe097 auipc ra,0xffffe + 80204938: 740080e7 jalr 1856(ra) # 80203074 <argaddr> return -1; - 80204620: 57fd li a5,-1 + 8020493c: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argint(2, &n) < 0 || argaddr(1, &p) < 0) - 80204622: 00054d63 bltz a0,8020463c <sys_write+0x5c> + 8020493e: 00054d63 bltz a0,80204958 <sys_write+0x5c> return filewrite(f, p, n); - 80204626: fe442603 lw a2,-28(s0) - 8020462a: fd843583 ld a1,-40(s0) - 8020462e: fe843503 ld a0,-24(s0) - 80204632: fffff097 auipc ra,0xfffff - 80204636: 3ec080e7 jalr 1004(ra) # 80203a1e <filewrite> - 8020463a: 87aa mv a5,a0 -} - 8020463c: 853e mv a0,a5 - 8020463e: 70a2 ld ra,40(sp) - 80204640: 7402 ld s0,32(sp) - 80204642: 6145 addi sp,sp,48 - 80204644: 8082 ret - -0000000080204646 <sys_close>: -{ - 80204646: 1101 addi sp,sp,-32 - 80204648: ec06 sd ra,24(sp) - 8020464a: e822 sd s0,16(sp) - 8020464c: 1000 addi s0,sp,32 + 80204942: fe442603 lw a2,-28(s0) + 80204946: fd843583 ld a1,-40(s0) + 8020494a: fe843503 ld a0,-24(s0) + 8020494e: fffff097 auipc ra,0xfffff + 80204952: 3ec080e7 jalr 1004(ra) # 80203d3a <filewrite> + 80204956: 87aa mv a5,a0 +} + 80204958: 853e mv a0,a5 + 8020495a: 70a2 ld ra,40(sp) + 8020495c: 7402 ld s0,32(sp) + 8020495e: 6145 addi sp,sp,48 + 80204960: 8082 ret + +0000000080204962 <sys_close>: +{ + 80204962: 1101 addi sp,sp,-32 + 80204964: ec06 sd ra,24(sp) + 80204966: e822 sd s0,16(sp) + 80204968: 1000 addi s0,sp,32 if(argfd(0, &fd, &f) < 0) - 8020464e: fe040613 addi a2,s0,-32 - 80204652: fec40593 addi a1,s0,-20 - 80204656: 4501 li a0,0 - 80204658: 00000097 auipc ra,0x0 - 8020465c: cca080e7 jalr -822(ra) # 80204322 <argfd> + 8020496a: fe040613 addi a2,s0,-32 + 8020496e: fec40593 addi a1,s0,-20 + 80204972: 4501 li a0,0 + 80204974: 00000097 auipc ra,0x0 + 80204978: cca080e7 jalr -822(ra) # 8020463e <argfd> return -1; - 80204660: 57fd li a5,-1 + 8020497c: 57fd li a5,-1 if(argfd(0, &fd, &f) < 0) - 80204662: 02054463 bltz a0,8020468a <sys_close+0x44> + 8020497e: 02054463 bltz a0,802049a6 <sys_close+0x44> myproc()->ofile[fd] = 0; - 80204666: ffffd097 auipc ra,0xffffd - 8020466a: 3d6080e7 jalr 982(ra) # 80201a3c <myproc> - 8020466e: fec42783 lw a5,-20(s0) - 80204672: 07e9 addi a5,a5,26 - 80204674: 078e slli a5,a5,0x3 - 80204676: 953e add a0,a0,a5 - 80204678: 00053423 sd zero,8(a0) + 80204982: ffffd097 auipc ra,0xffffd + 80204986: 0ba080e7 jalr 186(ra) # 80201a3c <myproc> + 8020498a: fec42783 lw a5,-20(s0) + 8020498e: 07e9 addi a5,a5,26 + 80204990: 078e slli a5,a5,0x3 + 80204992: 953e add a0,a0,a5 + 80204994: 00053423 sd zero,8(a0) fileclose(f); - 8020467c: fe043503 ld a0,-32(s0) - 80204680: fffff097 auipc ra,0xfffff - 80204684: 1c2080e7 jalr 450(ra) # 80203842 <fileclose> + 80204998: fe043503 ld a0,-32(s0) + 8020499c: fffff097 auipc ra,0xfffff + 802049a0: 1c2080e7 jalr 450(ra) # 80203b5e <fileclose> return 0; - 80204688: 4781 li a5,0 + 802049a4: 4781 li a5,0 } - 8020468a: 853e mv a0,a5 - 8020468c: 60e2 ld ra,24(sp) - 8020468e: 6442 ld s0,16(sp) - 80204690: 6105 addi sp,sp,32 - 80204692: 8082 ret + 802049a6: 853e mv a0,a5 + 802049a8: 60e2 ld ra,24(sp) + 802049aa: 6442 ld s0,16(sp) + 802049ac: 6105 addi sp,sp,32 + 802049ae: 8082 ret -0000000080204694 <sys_fstat>: +00000000802049b0 <sys_fstat>: { - 80204694: 1101 addi sp,sp,-32 - 80204696: ec06 sd ra,24(sp) - 80204698: e822 sd s0,16(sp) - 8020469a: 1000 addi s0,sp,32 + 802049b0: 1101 addi sp,sp,-32 + 802049b2: ec06 sd ra,24(sp) + 802049b4: e822 sd s0,16(sp) + 802049b6: 1000 addi s0,sp,32 if(argfd(0, 0, &f) < 0 || argaddr(1, &st) < 0) - 8020469c: fe840613 addi a2,s0,-24 - 802046a0: 4581 li a1,0 - 802046a2: 4501 li a0,0 - 802046a4: 00000097 auipc ra,0x0 - 802046a8: c7e080e7 jalr -898(ra) # 80204322 <argfd> + 802049b8: fe840613 addi a2,s0,-24 + 802049bc: 4581 li a1,0 + 802049be: 4501 li a0,0 + 802049c0: 00000097 auipc ra,0x0 + 802049c4: c7e080e7 jalr -898(ra) # 8020463e <argfd> return -1; - 802046ac: 57fd li a5,-1 + 802049c8: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argaddr(1, &st) < 0) - 802046ae: 02054563 bltz a0,802046d8 <sys_fstat+0x44> - 802046b2: fe040593 addi a1,s0,-32 - 802046b6: 4505 li a0,1 - 802046b8: ffffe097 auipc ra,0xffffe - 802046bc: 768080e7 jalr 1896(ra) # 80202e20 <argaddr> + 802049ca: 02054563 bltz a0,802049f4 <sys_fstat+0x44> + 802049ce: fe040593 addi a1,s0,-32 + 802049d2: 4505 li a0,1 + 802049d4: ffffe097 auipc ra,0xffffe + 802049d8: 6a0080e7 jalr 1696(ra) # 80203074 <argaddr> return -1; - 802046c0: 57fd li a5,-1 + 802049dc: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argaddr(1, &st) < 0) - 802046c2: 00054b63 bltz a0,802046d8 <sys_fstat+0x44> + 802049de: 00054b63 bltz a0,802049f4 <sys_fstat+0x44> return filestat(f, st); - 802046c6: fe043583 ld a1,-32(s0) - 802046ca: fe843503 ld a0,-24(s0) - 802046ce: fffff097 auipc ra,0xfffff - 802046d2: 22a080e7 jalr 554(ra) # 802038f8 <filestat> - 802046d6: 87aa mv a5,a0 + 802049e2: fe043583 ld a1,-32(s0) + 802049e6: fe843503 ld a0,-24(s0) + 802049ea: fffff097 auipc ra,0xfffff + 802049ee: 22a080e7 jalr 554(ra) # 80203c14 <filestat> + 802049f2: 87aa mv a5,a0 } - 802046d8: 853e mv a0,a5 - 802046da: 60e2 ld ra,24(sp) - 802046dc: 6442 ld s0,16(sp) - 802046de: 6105 addi sp,sp,32 - 802046e0: 8082 ret + 802049f4: 853e mv a0,a5 + 802049f6: 60e2 ld ra,24(sp) + 802049f8: 6442 ld s0,16(sp) + 802049fa: 6105 addi sp,sp,32 + 802049fc: 8082 ret -00000000802046e2 <sys_open>: +00000000802049fe <sys_open>: uint64 sys_open(void) { - 802046e2: 7129 addi sp,sp,-320 - 802046e4: fe06 sd ra,312(sp) - 802046e6: fa22 sd s0,304(sp) - 802046e8: f626 sd s1,296(sp) - 802046ea: f24a sd s2,288(sp) - 802046ec: ee4e sd s3,280(sp) - 802046ee: 0280 addi s0,sp,320 + 802049fe: 7129 addi sp,sp,-320 + 80204a00: fe06 sd ra,312(sp) + 80204a02: fa22 sd s0,304(sp) + 80204a04: f626 sd s1,296(sp) + 80204a06: f24a sd s2,288(sp) + 80204a08: ee4e sd s3,280(sp) + 80204a0a: 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) - 802046f0: 10400613 li a2,260 - 802046f4: ec840593 addi a1,s0,-312 - 802046f8: 4501 li a0,0 - 802046fa: ffffe097 auipc ra,0xffffe - 802046fe: 748080e7 jalr 1864(ra) # 80202e42 <argstr> - 80204702: 87aa mv a5,a0 + 80204a0c: 10400613 li a2,260 + 80204a10: ec840593 addi a1,s0,-312 + 80204a14: 4501 li a0,0 + 80204a16: ffffe097 auipc ra,0xffffe + 80204a1a: 680080e7 jalr 1664(ra) # 80203096 <argstr> + 80204a1e: 87aa mv a5,a0 return -1; - 80204704: 557d li a0,-1 + 80204a20: 557d li a0,-1 if(argstr(0, path, FAT32_MAX_PATH) < 0 || argint(1, &omode) < 0) - 80204706: 0807ce63 bltz a5,802047a2 <sys_open+0xc0> - 8020470a: ec440593 addi a1,s0,-316 - 8020470e: 4505 li a0,1 - 80204710: ffffe097 auipc ra,0xffffe - 80204714: 6ae080e7 jalr 1710(ra) # 80202dbe <argint> - 80204718: 0e054163 bltz a0,802047fa <sys_open+0x118> + 80204a22: 0807ce63 bltz a5,80204abe <sys_open+0xc0> + 80204a26: ec440593 addi a1,s0,-316 + 80204a2a: 4505 li a0,1 + 80204a2c: ffffe097 auipc ra,0xffffe + 80204a30: 5e6080e7 jalr 1510(ra) # 80203012 <argint> + 80204a34: 0e054163 bltz a0,80204b16 <sys_open+0x118> if(omode & O_CREATE){ - 8020471c: ec442603 lw a2,-316(s0) - 80204720: 20067793 andi a5,a2,512 - 80204724: c7d1 beqz a5,802047b0 <sys_open+0xce> + 80204a38: ec442603 lw a2,-316(s0) + 80204a3c: 20067793 andi a5,a2,512 + 80204a40: c7d1 beqz a5,80204acc <sys_open+0xce> ep = create(path, T_FILE, omode); - 80204726: 4589 li a1,2 - 80204728: ec840513 addi a0,s0,-312 - 8020472c: 00000097 auipc ra,0x0 - 80204730: ca0080e7 jalr -864(ra) # 802043cc <create> - 80204734: 892a mv s2,a0 + 80204a42: 4589 li a1,2 + 80204a44: ec840513 addi a0,s0,-312 + 80204a48: 00000097 auipc ra,0x0 + 80204a4c: ca0080e7 jalr -864(ra) # 802046e8 <create> + 80204a50: 892a mv s2,a0 if(ep == NULL){ - 80204736: c561 beqz a0,802047fe <sys_open+0x11c> + 80204a52: c561 beqz a0,80204b1a <sys_open+0x11c> eput(ep); return -1; } } if((f = filealloc()) == NULL || (fd = fdalloc(f)) < 0){ - 80204738: fffff097 auipc ra,0xfffff - 8020473c: 04e080e7 jalr 78(ra) # 80203786 <filealloc> - 80204740: 89aa mv s3,a0 - 80204742: c579 beqz a0,80204810 <sys_open+0x12e> - 80204744: 00000097 auipc ra,0x0 - 80204748: c46080e7 jalr -954(ra) # 8020438a <fdalloc> - 8020474c: 84aa mv s1,a0 - 8020474e: 0a054c63 bltz a0,80204806 <sys_open+0x124> + 80204a54: fffff097 auipc ra,0xfffff + 80204a58: 04e080e7 jalr 78(ra) # 80203aa2 <filealloc> + 80204a5c: 89aa mv s3,a0 + 80204a5e: c579 beqz a0,80204b2c <sys_open+0x12e> + 80204a60: 00000097 auipc ra,0x0 + 80204a64: c46080e7 jalr -954(ra) # 802046a6 <fdalloc> + 80204a68: 84aa mv s1,a0 + 80204a6a: 0a054c63 bltz a0,80204b22 <sys_open+0x124> eunlock(ep); eput(ep); return -1; } if(!(ep->attribute & ATTR_DIRECTORY) && (omode & O_TRUNC)){ - 80204752: 10094783 lbu a5,256(s2) - 80204756: 8bc1 andi a5,a5,16 - 80204758: e791 bnez a5,80204764 <sys_open+0x82> - 8020475a: ec442783 lw a5,-316(s0) - 8020475e: 4007f793 andi a5,a5,1024 - 80204762: e7d1 bnez a5,802047ee <sys_open+0x10c> + 80204a6e: 10094783 lbu a5,256(s2) + 80204a72: 8bc1 andi a5,a5,16 + 80204a74: e791 bnez a5,80204a80 <sys_open+0x82> + 80204a76: ec442783 lw a5,-316(s0) + 80204a7a: 4007f793 andi a5,a5,1024 + 80204a7e: e7d1 bnez a5,80204b0a <sys_open+0x10c> etrunc(ep); } f->type = FD_ENTRY; - 80204764: 4789 li a5,2 - 80204766: 00f9a023 sw a5,0(s3) + 80204a80: 4789 li a5,2 + 80204a82: 00f9a023 sw a5,0(s3) f->off = (omode & O_APPEND) ? ep->file_size : 0; - 8020476a: ec442783 lw a5,-316(s0) - 8020476e: 0047f693 andi a3,a5,4 - 80204772: 4701 li a4,0 - 80204774: c299 beqz a3,8020477a <sys_open+0x98> - 80204776: 10892703 lw a4,264(s2) - 8020477a: 02e9a023 sw a4,32(s3) + 80204a86: ec442783 lw a5,-316(s0) + 80204a8a: 0047f693 andi a3,a5,4 + 80204a8e: 4701 li a4,0 + 80204a90: c299 beqz a3,80204a96 <sys_open+0x98> + 80204a92: 10892703 lw a4,264(s2) + 80204a96: 02e9a023 sw a4,32(s3) f->ep = ep; - 8020477e: 0129bc23 sd s2,24(s3) + 80204a9a: 0129bc23 sd s2,24(s3) f->readable = !(omode & O_WRONLY); - 80204782: 0017c713 xori a4,a5,1 - 80204786: 8b05 andi a4,a4,1 - 80204788: 00e98423 sb a4,8(s3) + 80204a9e: 0017c713 xori a4,a5,1 + 80204aa2: 8b05 andi a4,a4,1 + 80204aa4: 00e98423 sb a4,8(s3) f->writable = (omode & O_WRONLY) || (omode & O_RDWR); - 8020478c: 8b8d andi a5,a5,3 - 8020478e: 00f037b3 snez a5,a5 - 80204792: 00f984a3 sb a5,9(s3) + 80204aa8: 8b8d andi a5,a5,3 + 80204aaa: 00f037b3 snez a5,a5 + 80204aae: 00f984a3 sb a5,9(s3) eunlock(ep); - 80204796: 854a mv a0,s2 - 80204798: 00002097 auipc ra,0x2 - 8020479c: adc080e7 jalr -1316(ra) # 80206274 <eunlock> + 80204ab2: 854a mv a0,s2 + 80204ab4: 00002097 auipc ra,0x2 + 80204ab8: b10080e7 jalr -1264(ra) # 802065c4 <eunlock> return fd; - 802047a0: 8526 mv a0,s1 -} - 802047a2: 70f2 ld ra,312(sp) - 802047a4: 7452 ld s0,304(sp) - 802047a6: 74b2 ld s1,296(sp) - 802047a8: 7912 ld s2,288(sp) - 802047aa: 69f2 ld s3,280(sp) - 802047ac: 6131 addi sp,sp,320 - 802047ae: 8082 ret + 80204abc: 8526 mv a0,s1 +} + 80204abe: 70f2 ld ra,312(sp) + 80204ac0: 7452 ld s0,304(sp) + 80204ac2: 74b2 ld s1,296(sp) + 80204ac4: 7912 ld s2,288(sp) + 80204ac6: 69f2 ld s3,280(sp) + 80204ac8: 6131 addi sp,sp,320 + 80204aca: 8082 ret if((ep = ename(path)) == NULL){ - 802047b0: ec840513 addi a0,s0,-312 - 802047b4: 00002097 auipc ra,0x2 - 802047b8: 232080e7 jalr 562(ra) # 802069e6 <ename> - 802047bc: 892a mv s2,a0 - 802047be: c131 beqz a0,80204802 <sys_open+0x120> + 80204acc: ec840513 addi a0,s0,-312 + 80204ad0: 00002097 auipc ra,0x2 + 80204ad4: 266080e7 jalr 614(ra) # 80206d36 <ename> + 80204ad8: 892a mv s2,a0 + 80204ada: c131 beqz a0,80204b1e <sys_open+0x120> elock(ep); - 802047c0: 00002097 auipc ra,0x2 - 802047c4: a7e080e7 jalr -1410(ra) # 8020623e <elock> + 80204adc: 00002097 auipc ra,0x2 + 80204ae0: ab2080e7 jalr -1358(ra) # 8020658e <elock> if((ep->attribute & ATTR_DIRECTORY) && omode != O_RDONLY){ - 802047c8: 10094783 lbu a5,256(s2) - 802047cc: 8bc1 andi a5,a5,16 - 802047ce: d7ad beqz a5,80204738 <sys_open+0x56> - 802047d0: ec442783 lw a5,-316(s0) - 802047d4: d3b5 beqz a5,80204738 <sys_open+0x56> + 80204ae4: 10094783 lbu a5,256(s2) + 80204ae8: 8bc1 andi a5,a5,16 + 80204aea: d7ad beqz a5,80204a54 <sys_open+0x56> + 80204aec: ec442783 lw a5,-316(s0) + 80204af0: d3b5 beqz a5,80204a54 <sys_open+0x56> eunlock(ep); - 802047d6: 854a mv a0,s2 - 802047d8: 00002097 auipc ra,0x2 - 802047dc: a9c080e7 jalr -1380(ra) # 80206274 <eunlock> + 80204af2: 854a mv a0,s2 + 80204af4: 00002097 auipc ra,0x2 + 80204af8: ad0080e7 jalr -1328(ra) # 802065c4 <eunlock> eput(ep); - 802047e0: 854a mv a0,s2 - 802047e2: 00002097 auipc ra,0x2 - 802047e6: ae0080e7 jalr -1312(ra) # 802062c2 <eput> + 80204afc: 854a mv a0,s2 + 80204afe: 00002097 auipc ra,0x2 + 80204b02: b14080e7 jalr -1260(ra) # 80206612 <eput> return -1; - 802047ea: 557d li a0,-1 - 802047ec: bf5d j 802047a2 <sys_open+0xc0> + 80204b06: 557d li a0,-1 + 80204b08: bf5d j 80204abe <sys_open+0xc0> etrunc(ep); - 802047ee: 854a mv a0,s2 - 802047f0: 00002097 auipc ra,0x2 - 802047f4: 9e4080e7 jalr -1564(ra) # 802061d4 <etrunc> - 802047f8: b7b5 j 80204764 <sys_open+0x82> + 80204b0a: 854a mv a0,s2 + 80204b0c: 00002097 auipc ra,0x2 + 80204b10: a18080e7 jalr -1512(ra) # 80206524 <etrunc> + 80204b14: b7b5 j 80204a80 <sys_open+0x82> return -1; - 802047fa: 557d li a0,-1 - 802047fc: b75d j 802047a2 <sys_open+0xc0> + 80204b16: 557d li a0,-1 + 80204b18: b75d j 80204abe <sys_open+0xc0> return -1; - 802047fe: 557d li a0,-1 - 80204800: b74d j 802047a2 <sys_open+0xc0> + 80204b1a: 557d li a0,-1 + 80204b1c: b74d j 80204abe <sys_open+0xc0> return -1; - 80204802: 557d li a0,-1 - 80204804: bf79 j 802047a2 <sys_open+0xc0> + 80204b1e: 557d li a0,-1 + 80204b20: bf79 j 80204abe <sys_open+0xc0> fileclose(f); - 80204806: 854e mv a0,s3 - 80204808: fffff097 auipc ra,0xfffff - 8020480c: 03a080e7 jalr 58(ra) # 80203842 <fileclose> + 80204b22: 854e mv a0,s3 + 80204b24: fffff097 auipc ra,0xfffff + 80204b28: 03a080e7 jalr 58(ra) # 80203b5e <fileclose> eunlock(ep); - 80204810: 854a mv a0,s2 - 80204812: 00002097 auipc ra,0x2 - 80204816: a62080e7 jalr -1438(ra) # 80206274 <eunlock> + 80204b2c: 854a mv a0,s2 + 80204b2e: 00002097 auipc ra,0x2 + 80204b32: a96080e7 jalr -1386(ra) # 802065c4 <eunlock> eput(ep); - 8020481a: 854a mv a0,s2 - 8020481c: 00002097 auipc ra,0x2 - 80204820: aa6080e7 jalr -1370(ra) # 802062c2 <eput> + 80204b36: 854a mv a0,s2 + 80204b38: 00002097 auipc ra,0x2 + 80204b3c: ada080e7 jalr -1318(ra) # 80206612 <eput> return -1; - 80204824: 557d li a0,-1 - 80204826: bfb5 j 802047a2 <sys_open+0xc0> + 80204b40: 557d li a0,-1 + 80204b42: bfb5 j 80204abe <sys_open+0xc0> -0000000080204828 <sys_mkdir>: +0000000080204b44 <sys_mkdir>: uint64 sys_mkdir(void) { - 80204828: 7169 addi sp,sp,-304 - 8020482a: f606 sd ra,296(sp) - 8020482c: f222 sd s0,288(sp) - 8020482e: ee26 sd s1,280(sp) - 80204830: 1a00 addi s0,sp,304 + 80204b44: 7169 addi sp,sp,-304 + 80204b46: f606 sd ra,296(sp) + 80204b48: f222 sd s0,288(sp) + 80204b4a: ee26 sd s1,280(sp) + 80204b4c: 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){ - 80204832: 10400613 li a2,260 - 80204836: ed840593 addi a1,s0,-296 - 8020483a: 4501 li a0,0 - 8020483c: ffffe097 auipc ra,0xffffe - 80204840: 606080e7 jalr 1542(ra) # 80202e42 <argstr> + 80204b4e: 10400613 li a2,260 + 80204b52: ed840593 addi a1,s0,-296 + 80204b56: 4501 li a0,0 + 80204b58: ffffe097 auipc ra,0xffffe + 80204b5c: 53e080e7 jalr 1342(ra) # 80203096 <argstr> return -1; - 80204844: 57fd li a5,-1 + 80204b60: 57fd li a5,-1 if(argstr(0, path, FAT32_MAX_PATH) < 0 || (ep = create(path, T_DIR, 0)) == 0){ - 80204846: 02054663 bltz a0,80204872 <sys_mkdir+0x4a> - 8020484a: 4601 li a2,0 - 8020484c: 4585 li a1,1 - 8020484e: ed840513 addi a0,s0,-296 - 80204852: 00000097 auipc ra,0x0 - 80204856: b7a080e7 jalr -1158(ra) # 802043cc <create> - 8020485a: 84aa mv s1,a0 - 8020485c: c10d beqz a0,8020487e <sys_mkdir+0x56> + 80204b62: 02054663 bltz a0,80204b8e <sys_mkdir+0x4a> + 80204b66: 4601 li a2,0 + 80204b68: 4585 li a1,1 + 80204b6a: ed840513 addi a0,s0,-296 + 80204b6e: 00000097 auipc ra,0x0 + 80204b72: b7a080e7 jalr -1158(ra) # 802046e8 <create> + 80204b76: 84aa mv s1,a0 + 80204b78: c10d beqz a0,80204b9a <sys_mkdir+0x56> } eunlock(ep); - 8020485e: 00002097 auipc ra,0x2 - 80204862: a16080e7 jalr -1514(ra) # 80206274 <eunlock> + 80204b7a: 00002097 auipc ra,0x2 + 80204b7e: a4a080e7 jalr -1462(ra) # 802065c4 <eunlock> eput(ep); - 80204866: 8526 mv a0,s1 - 80204868: 00002097 auipc ra,0x2 - 8020486c: a5a080e7 jalr -1446(ra) # 802062c2 <eput> + 80204b82: 8526 mv a0,s1 + 80204b84: 00002097 auipc ra,0x2 + 80204b88: a8e080e7 jalr -1394(ra) # 80206612 <eput> return 0; - 80204870: 4781 li a5,0 -} - 80204872: 853e mv a0,a5 - 80204874: 70b2 ld ra,296(sp) - 80204876: 7412 ld s0,288(sp) - 80204878: 64f2 ld s1,280(sp) - 8020487a: 6155 addi sp,sp,304 - 8020487c: 8082 ret + 80204b8c: 4781 li a5,0 +} + 80204b8e: 853e mv a0,a5 + 80204b90: 70b2 ld ra,296(sp) + 80204b92: 7412 ld s0,288(sp) + 80204b94: 64f2 ld s1,280(sp) + 80204b96: 6155 addi sp,sp,304 + 80204b98: 8082 ret return -1; - 8020487e: 57fd li a5,-1 - 80204880: bfcd j 80204872 <sys_mkdir+0x4a> + 80204b9a: 57fd li a5,-1 + 80204b9c: bfcd j 80204b8e <sys_mkdir+0x4a> -0000000080204882 <sys_chdir>: +0000000080204b9e <sys_chdir>: uint64 sys_chdir(void) { - 80204882: 7169 addi sp,sp,-304 - 80204884: f606 sd ra,296(sp) - 80204886: f222 sd s0,288(sp) - 80204888: ee26 sd s1,280(sp) - 8020488a: ea4a sd s2,272(sp) - 8020488c: 1a00 addi s0,sp,304 + 80204b9e: 7169 addi sp,sp,-304 + 80204ba0: f606 sd ra,296(sp) + 80204ba2: f222 sd s0,288(sp) + 80204ba4: ee26 sd s1,280(sp) + 80204ba6: ea4a sd s2,272(sp) + 80204ba8: 1a00 addi s0,sp,304 char path[FAT32_MAX_PATH]; struct dirent *ep; struct proc *p = myproc(); - 8020488e: ffffd097 auipc ra,0xffffd - 80204892: 1ae080e7 jalr 430(ra) # 80201a3c <myproc> - 80204896: 892a mv s2,a0 + 80204baa: ffffd097 auipc ra,0xffffd + 80204bae: e92080e7 jalr -366(ra) # 80201a3c <myproc> + 80204bb2: 892a mv s2,a0 if(argstr(0, path, FAT32_MAX_PATH) < 0 || (ep = ename(path)) == NULL){ - 80204898: 10400613 li a2,260 - 8020489c: ed840593 addi a1,s0,-296 - 802048a0: 4501 li a0,0 - 802048a2: ffffe097 auipc ra,0xffffe - 802048a6: 5a0080e7 jalr 1440(ra) # 80202e42 <argstr> + 80204bb4: 10400613 li a2,260 + 80204bb8: ed840593 addi a1,s0,-296 + 80204bbc: 4501 li a0,0 + 80204bbe: ffffe097 auipc ra,0xffffe + 80204bc2: 4d8080e7 jalr 1240(ra) # 80203096 <argstr> return -1; - 802048aa: 57fd li a5,-1 + 80204bc6: 57fd li a5,-1 if(argstr(0, path, FAT32_MAX_PATH) < 0 || (ep = ename(path)) == NULL){ - 802048ac: 04054063 bltz a0,802048ec <sys_chdir+0x6a> - 802048b0: ed840513 addi a0,s0,-296 - 802048b4: 00002097 auipc ra,0x2 - 802048b8: 132080e7 jalr 306(ra) # 802069e6 <ename> - 802048bc: 84aa mv s1,a0 - 802048be: c931 beqz a0,80204912 <sys_chdir+0x90> + 80204bc8: 04054063 bltz a0,80204c08 <sys_chdir+0x6a> + 80204bcc: ed840513 addi a0,s0,-296 + 80204bd0: 00002097 auipc ra,0x2 + 80204bd4: 166080e7 jalr 358(ra) # 80206d36 <ename> + 80204bd8: 84aa mv s1,a0 + 80204bda: c931 beqz a0,80204c2e <sys_chdir+0x90> } elock(ep); - 802048c0: 00002097 auipc ra,0x2 - 802048c4: 97e080e7 jalr -1666(ra) # 8020623e <elock> + 80204bdc: 00002097 auipc ra,0x2 + 80204be0: 9b2080e7 jalr -1614(ra) # 8020658e <elock> if(!(ep->attribute & ATTR_DIRECTORY)){ - 802048c8: 1004c783 lbu a5,256(s1) - 802048cc: 8bc1 andi a5,a5,16 - 802048ce: c795 beqz a5,802048fa <sys_chdir+0x78> + 80204be4: 1004c783 lbu a5,256(s1) + 80204be8: 8bc1 andi a5,a5,16 + 80204bea: c795 beqz a5,80204c16 <sys_chdir+0x78> eunlock(ep); eput(ep); return -1; } eunlock(ep); - 802048d0: 8526 mv a0,s1 - 802048d2: 00002097 auipc ra,0x2 - 802048d6: 9a2080e7 jalr -1630(ra) # 80206274 <eunlock> + 80204bec: 8526 mv a0,s1 + 80204bee: 00002097 auipc ra,0x2 + 80204bf2: 9d6080e7 jalr -1578(ra) # 802065c4 <eunlock> eput(p->cwd); - 802048da: 15893503 ld a0,344(s2) - 802048de: 00002097 auipc ra,0x2 - 802048e2: 9e4080e7 jalr -1564(ra) # 802062c2 <eput> + 80204bf6: 15893503 ld a0,344(s2) + 80204bfa: 00002097 auipc ra,0x2 + 80204bfe: a18080e7 jalr -1512(ra) # 80206612 <eput> p->cwd = ep; - 802048e6: 14993c23 sd s1,344(s2) + 80204c02: 14993c23 sd s1,344(s2) return 0; - 802048ea: 4781 li a5,0 -} - 802048ec: 853e mv a0,a5 - 802048ee: 70b2 ld ra,296(sp) - 802048f0: 7412 ld s0,288(sp) - 802048f2: 64f2 ld s1,280(sp) - 802048f4: 6952 ld s2,272(sp) - 802048f6: 6155 addi sp,sp,304 - 802048f8: 8082 ret + 80204c06: 4781 li a5,0 +} + 80204c08: 853e mv a0,a5 + 80204c0a: 70b2 ld ra,296(sp) + 80204c0c: 7412 ld s0,288(sp) + 80204c0e: 64f2 ld s1,280(sp) + 80204c10: 6952 ld s2,272(sp) + 80204c12: 6155 addi sp,sp,304 + 80204c14: 8082 ret eunlock(ep); - 802048fa: 8526 mv a0,s1 - 802048fc: 00002097 auipc ra,0x2 - 80204900: 978080e7 jalr -1672(ra) # 80206274 <eunlock> + 80204c16: 8526 mv a0,s1 + 80204c18: 00002097 auipc ra,0x2 + 80204c1c: 9ac080e7 jalr -1620(ra) # 802065c4 <eunlock> eput(ep); - 80204904: 8526 mv a0,s1 - 80204906: 00002097 auipc ra,0x2 - 8020490a: 9bc080e7 jalr -1604(ra) # 802062c2 <eput> + 80204c20: 8526 mv a0,s1 + 80204c22: 00002097 auipc ra,0x2 + 80204c26: 9f0080e7 jalr -1552(ra) # 80206612 <eput> return -1; - 8020490e: 57fd li a5,-1 - 80204910: bff1 j 802048ec <sys_chdir+0x6a> + 80204c2a: 57fd li a5,-1 + 80204c2c: bff1 j 80204c08 <sys_chdir+0x6a> return -1; - 80204912: 57fd li a5,-1 - 80204914: bfe1 j 802048ec <sys_chdir+0x6a> + 80204c2e: 57fd li a5,-1 + 80204c30: bfe1 j 80204c08 <sys_chdir+0x6a> -0000000080204916 <sys_pipe>: +0000000080204c32 <sys_pipe>: uint64 sys_pipe(void) { - 80204916: 7139 addi sp,sp,-64 - 80204918: fc06 sd ra,56(sp) - 8020491a: f822 sd s0,48(sp) - 8020491c: f426 sd s1,40(sp) - 8020491e: 0080 addi s0,sp,64 + 80204c32: 7139 addi sp,sp,-64 + 80204c34: fc06 sd ra,56(sp) + 80204c36: f822 sd s0,48(sp) + 80204c38: f426 sd s1,40(sp) + 80204c3a: 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(); - 80204920: ffffd097 auipc ra,0xffffd - 80204924: 11c080e7 jalr 284(ra) # 80201a3c <myproc> - 80204928: 84aa mv s1,a0 + 80204c3c: ffffd097 auipc ra,0xffffd + 80204c40: e00080e7 jalr -512(ra) # 80201a3c <myproc> + 80204c44: 84aa mv s1,a0 if(argaddr(0, &fdarray) < 0) - 8020492a: fd840593 addi a1,s0,-40 - 8020492e: 4501 li a0,0 - 80204930: ffffe097 auipc ra,0xffffe - 80204934: 4f0080e7 jalr 1264(ra) # 80202e20 <argaddr> + 80204c46: fd840593 addi a1,s0,-40 + 80204c4a: 4501 li a0,0 + 80204c4c: ffffe097 auipc ra,0xffffe + 80204c50: 428080e7 jalr 1064(ra) # 80203074 <argaddr> return -1; - 80204938: 57fd li a5,-1 + 80204c54: 57fd li a5,-1 if(argaddr(0, &fdarray) < 0) - 8020493a: 0c054e63 bltz a0,80204a16 <sys_pipe+0x100> + 80204c56: 0c054e63 bltz a0,80204d32 <sys_pipe+0x100> if(pipealloc(&rf, &wf) < 0) - 8020493e: fc840593 addi a1,s0,-56 - 80204942: fd040513 addi a0,s0,-48 - 80204946: fffff097 auipc ra,0xfffff - 8020494a: 26e080e7 jalr 622(ra) # 80203bb4 <pipealloc> + 80204c5a: fc840593 addi a1,s0,-56 + 80204c5e: fd040513 addi a0,s0,-48 + 80204c62: fffff097 auipc ra,0xfffff + 80204c66: 26e080e7 jalr 622(ra) # 80203ed0 <pipealloc> return -1; - 8020494e: 57fd li a5,-1 + 80204c6a: 57fd li a5,-1 if(pipealloc(&rf, &wf) < 0) - 80204950: 0c054363 bltz a0,80204a16 <sys_pipe+0x100> + 80204c6c: 0c054363 bltz a0,80204d32 <sys_pipe+0x100> fd0 = -1; - 80204954: fcf42223 sw a5,-60(s0) + 80204c70: fcf42223 sw a5,-60(s0) if((fd0 = fdalloc(rf)) < 0 || (fd1 = fdalloc(wf)) < 0){ - 80204958: fd043503 ld a0,-48(s0) - 8020495c: 00000097 auipc ra,0x0 - 80204960: a2e080e7 jalr -1490(ra) # 8020438a <fdalloc> - 80204964: fca42223 sw a0,-60(s0) - 80204968: 08054a63 bltz a0,802049fc <sys_pipe+0xe6> - 8020496c: fc843503 ld a0,-56(s0) - 80204970: 00000097 auipc ra,0x0 - 80204974: a1a080e7 jalr -1510(ra) # 8020438a <fdalloc> - 80204978: fca42023 sw a0,-64(s0) - 8020497c: 06054763 bltz a0,802049ea <sys_pipe+0xd4> + 80204c74: fd043503 ld a0,-48(s0) + 80204c78: 00000097 auipc ra,0x0 + 80204c7c: a2e080e7 jalr -1490(ra) # 802046a6 <fdalloc> + 80204c80: fca42223 sw a0,-60(s0) + 80204c84: 08054a63 bltz a0,80204d18 <sys_pipe+0xe6> + 80204c88: fc843503 ld a0,-56(s0) + 80204c8c: 00000097 auipc ra,0x0 + 80204c90: a1a080e7 jalr -1510(ra) # 802046a6 <fdalloc> + 80204c94: fca42023 sw a0,-64(s0) + 80204c98: 06054763 bltz a0,80204d06 <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 || - 80204980: 4611 li a2,4 - 80204982: fc440593 addi a1,s0,-60 - 80204986: fd843503 ld a0,-40(s0) - 8020498a: ffffd097 auipc ra,0xffffd - 8020498e: 9e8080e7 jalr -1560(ra) # 80201372 <copyout2> - 80204992: 00054f63 bltz a0,802049b0 <sys_pipe+0x9a> + 80204c9c: 4611 li a2,4 + 80204c9e: fc440593 addi a1,s0,-60 + 80204ca2: fd843503 ld a0,-40(s0) + 80204ca6: ffffc097 auipc ra,0xffffc + 80204caa: 6cc080e7 jalr 1740(ra) # 80201372 <copyout2> + 80204cae: 00054f63 bltz a0,80204ccc <sys_pipe+0x9a> copyout2(fdarray+sizeof(fd0), (char *)&fd1, sizeof(fd1)) < 0){ - 80204996: 4611 li a2,4 - 80204998: fc040593 addi a1,s0,-64 - 8020499c: fd843503 ld a0,-40(s0) - 802049a0: 0511 addi a0,a0,4 - 802049a2: ffffd097 auipc ra,0xffffd - 802049a6: 9d0080e7 jalr -1584(ra) # 80201372 <copyout2> + 80204cb2: 4611 li a2,4 + 80204cb4: fc040593 addi a1,s0,-64 + 80204cb8: fd843503 ld a0,-40(s0) + 80204cbc: 0511 addi a0,a0,4 + 80204cbe: ffffc097 auipc ra,0xffffc + 80204cc2: 6b4080e7 jalr 1716(ra) # 80201372 <copyout2> p->ofile[fd1] = 0; fileclose(rf); fileclose(wf); return -1; } return 0; - 802049aa: 4781 li a5,0 + 80204cc6: 4781 li a5,0 if(copyout2(fdarray, (char*)&fd0, sizeof(fd0)) < 0 || - 802049ac: 06055563 bgez a0,80204a16 <sys_pipe+0x100> + 80204cc8: 06055563 bgez a0,80204d32 <sys_pipe+0x100> p->ofile[fd0] = 0; - 802049b0: fc442783 lw a5,-60(s0) - 802049b4: 07e9 addi a5,a5,26 - 802049b6: 078e slli a5,a5,0x3 - 802049b8: 97a6 add a5,a5,s1 - 802049ba: 0007b423 sd zero,8(a5) + 80204ccc: fc442783 lw a5,-60(s0) + 80204cd0: 07e9 addi a5,a5,26 + 80204cd2: 078e slli a5,a5,0x3 + 80204cd4: 97a6 add a5,a5,s1 + 80204cd6: 0007b423 sd zero,8(a5) p->ofile[fd1] = 0; - 802049be: fc042783 lw a5,-64(s0) - 802049c2: 07e9 addi a5,a5,26 - 802049c4: 078e slli a5,a5,0x3 - 802049c6: 00f48533 add a0,s1,a5 - 802049ca: 00053423 sd zero,8(a0) + 80204cda: fc042783 lw a5,-64(s0) + 80204cde: 07e9 addi a5,a5,26 + 80204ce0: 078e slli a5,a5,0x3 + 80204ce2: 00f48533 add a0,s1,a5 + 80204ce6: 00053423 sd zero,8(a0) fileclose(rf); - 802049ce: fd043503 ld a0,-48(s0) - 802049d2: fffff097 auipc ra,0xfffff - 802049d6: e70080e7 jalr -400(ra) # 80203842 <fileclose> + 80204cea: fd043503 ld a0,-48(s0) + 80204cee: fffff097 auipc ra,0xfffff + 80204cf2: e70080e7 jalr -400(ra) # 80203b5e <fileclose> fileclose(wf); - 802049da: fc843503 ld a0,-56(s0) - 802049de: fffff097 auipc ra,0xfffff - 802049e2: e64080e7 jalr -412(ra) # 80203842 <fileclose> + 80204cf6: fc843503 ld a0,-56(s0) + 80204cfa: fffff097 auipc ra,0xfffff + 80204cfe: e64080e7 jalr -412(ra) # 80203b5e <fileclose> return -1; - 802049e6: 57fd li a5,-1 - 802049e8: a03d j 80204a16 <sys_pipe+0x100> + 80204d02: 57fd li a5,-1 + 80204d04: a03d j 80204d32 <sys_pipe+0x100> if(fd0 >= 0) - 802049ea: fc442783 lw a5,-60(s0) - 802049ee: 0007c763 bltz a5,802049fc <sys_pipe+0xe6> + 80204d06: fc442783 lw a5,-60(s0) + 80204d0a: 0007c763 bltz a5,80204d18 <sys_pipe+0xe6> p->ofile[fd0] = 0; - 802049f2: 07e9 addi a5,a5,26 - 802049f4: 078e slli a5,a5,0x3 - 802049f6: 97a6 add a5,a5,s1 - 802049f8: 0007b423 sd zero,8(a5) + 80204d0e: 07e9 addi a5,a5,26 + 80204d10: 078e slli a5,a5,0x3 + 80204d12: 97a6 add a5,a5,s1 + 80204d14: 0007b423 sd zero,8(a5) fileclose(rf); - 802049fc: fd043503 ld a0,-48(s0) - 80204a00: fffff097 auipc ra,0xfffff - 80204a04: e42080e7 jalr -446(ra) # 80203842 <fileclose> + 80204d18: fd043503 ld a0,-48(s0) + 80204d1c: fffff097 auipc ra,0xfffff + 80204d20: e42080e7 jalr -446(ra) # 80203b5e <fileclose> fileclose(wf); - 80204a08: fc843503 ld a0,-56(s0) - 80204a0c: fffff097 auipc ra,0xfffff - 80204a10: e36080e7 jalr -458(ra) # 80203842 <fileclose> + 80204d24: fc843503 ld a0,-56(s0) + 80204d28: fffff097 auipc ra,0xfffff + 80204d2c: e36080e7 jalr -458(ra) # 80203b5e <fileclose> return -1; - 80204a14: 57fd li a5,-1 + 80204d30: 57fd li a5,-1 } - 80204a16: 853e mv a0,a5 - 80204a18: 70e2 ld ra,56(sp) - 80204a1a: 7442 ld s0,48(sp) - 80204a1c: 74a2 ld s1,40(sp) - 80204a1e: 6121 addi sp,sp,64 - 80204a20: 8082 ret + 80204d32: 853e mv a0,a5 + 80204d34: 70e2 ld ra,56(sp) + 80204d36: 7442 ld s0,48(sp) + 80204d38: 74a2 ld s1,40(sp) + 80204d3a: 6121 addi sp,sp,64 + 80204d3c: 8082 ret -0000000080204a22 <sys_dev>: +0000000080204d3e <sys_dev>: // To open console device. uint64 sys_dev(void) { - 80204a22: 7179 addi sp,sp,-48 - 80204a24: f406 sd ra,40(sp) - 80204a26: f022 sd s0,32(sp) - 80204a28: ec26 sd s1,24(sp) - 80204a2a: 1800 addi s0,sp,48 + 80204d3e: 7179 addi sp,sp,-48 + 80204d40: f406 sd ra,40(sp) + 80204d42: f022 sd s0,32(sp) + 80204d44: ec26 sd s1,24(sp) + 80204d46: 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){ - 80204a2c: fdc40593 addi a1,s0,-36 - 80204a30: 4501 li a0,0 - 80204a32: ffffe097 auipc ra,0xffffe - 80204a36: 38c080e7 jalr 908(ra) # 80202dbe <argint> - 80204a3a: 08054a63 bltz a0,80204ace <sys_dev+0xac> - 80204a3e: fd840593 addi a1,s0,-40 - 80204a42: 4505 li a0,1 - 80204a44: ffffe097 auipc ra,0xffffe - 80204a48: 37a080e7 jalr 890(ra) # 80202dbe <argint> - 80204a4c: 08054763 bltz a0,80204ada <sys_dev+0xb8> - 80204a50: fd440593 addi a1,s0,-44 - 80204a54: 4509 li a0,2 - 80204a56: ffffe097 auipc ra,0xffffe - 80204a5a: 368080e7 jalr 872(ra) # 80202dbe <argint> - 80204a5e: 08054063 bltz a0,80204ade <sys_dev+0xbc> + 80204d48: fdc40593 addi a1,s0,-36 + 80204d4c: 4501 li a0,0 + 80204d4e: ffffe097 auipc ra,0xffffe + 80204d52: 2c4080e7 jalr 708(ra) # 80203012 <argint> + 80204d56: 08054a63 bltz a0,80204dea <sys_dev+0xac> + 80204d5a: fd840593 addi a1,s0,-40 + 80204d5e: 4505 li a0,1 + 80204d60: ffffe097 auipc ra,0xffffe + 80204d64: 2b2080e7 jalr 690(ra) # 80203012 <argint> + 80204d68: 08054763 bltz a0,80204df6 <sys_dev+0xb8> + 80204d6c: fd440593 addi a1,s0,-44 + 80204d70: 4509 li a0,2 + 80204d72: ffffe097 auipc ra,0xffffe + 80204d76: 2a0080e7 jalr 672(ra) # 80203012 <argint> + 80204d7a: 08054063 bltz a0,80204dfa <sys_dev+0xbc> return -1; } if(omode & O_CREATE){ - 80204a62: fdc42783 lw a5,-36(s0) - 80204a66: 2007f793 andi a5,a5,512 - 80204a6a: ebb1 bnez a5,80204abe <sys_dev+0x9c> + 80204d7e: fdc42783 lw a5,-36(s0) + 80204d82: 2007f793 andi a5,a5,512 + 80204d86: ebb1 bnez a5,80204dda <sys_dev+0x9c> panic("dev file on FAT"); } if(major < 0 || major >= NDEV) - 80204a6c: fd842703 lw a4,-40(s0) - 80204a70: 47a5 li a5,9 + 80204d88: fd842703 lw a4,-40(s0) + 80204d8c: 47a5 li a5,9 return -1; - 80204a72: 557d li a0,-1 + 80204d8e: 557d li a0,-1 if(major < 0 || major >= NDEV) - 80204a74: 04e7ee63 bltu a5,a4,80204ad0 <sys_dev+0xae> + 80204d90: 04e7ee63 bltu a5,a4,80204dec <sys_dev+0xae> if((f = filealloc()) == NULL || (fd = fdalloc(f)) < 0){ - 80204a78: fffff097 auipc ra,0xfffff - 80204a7c: d0e080e7 jalr -754(ra) # 80203786 <filealloc> - 80204a80: 84aa mv s1,a0 - 80204a82: c125 beqz a0,80204ae2 <sys_dev+0xc0> - 80204a84: 00000097 auipc ra,0x0 - 80204a88: 906080e7 jalr -1786(ra) # 8020438a <fdalloc> - 80204a8c: 04054d63 bltz a0,80204ae6 <sys_dev+0xc4> + 80204d94: fffff097 auipc ra,0xfffff + 80204d98: d0e080e7 jalr -754(ra) # 80203aa2 <filealloc> + 80204d9c: 84aa mv s1,a0 + 80204d9e: c125 beqz a0,80204dfe <sys_dev+0xc0> + 80204da0: 00000097 auipc ra,0x0 + 80204da4: 906080e7 jalr -1786(ra) # 802046a6 <fdalloc> + 80204da8: 04054d63 bltz a0,80204e02 <sys_dev+0xc4> if(f) fileclose(f); return -1; } f->type = FD_DEVICE; - 80204a90: 478d li a5,3 - 80204a92: c09c sw a5,0(s1) + 80204dac: 478d li a5,3 + 80204dae: c09c sw a5,0(s1) f->off = 0; - 80204a94: 0204a023 sw zero,32(s1) + 80204db0: 0204a023 sw zero,32(s1) f->ep = 0; - 80204a98: 0004bc23 sd zero,24(s1) + 80204db4: 0004bc23 sd zero,24(s1) f->major = major; - 80204a9c: fd842783 lw a5,-40(s0) - 80204aa0: 02f49223 sh a5,36(s1) + 80204db8: fd842783 lw a5,-40(s0) + 80204dbc: 02f49223 sh a5,36(s1) f->readable = !(omode & O_WRONLY); - 80204aa4: fdc42783 lw a5,-36(s0) - 80204aa8: 0017c713 xori a4,a5,1 - 80204aac: 8b05 andi a4,a4,1 - 80204aae: 00e48423 sb a4,8(s1) + 80204dc0: fdc42783 lw a5,-36(s0) + 80204dc4: 0017c713 xori a4,a5,1 + 80204dc8: 8b05 andi a4,a4,1 + 80204dca: 00e48423 sb a4,8(s1) f->writable = (omode & O_WRONLY) || (omode & O_RDWR); - 80204ab2: 8b8d andi a5,a5,3 - 80204ab4: 00f037b3 snez a5,a5 - 80204ab8: 00f484a3 sb a5,9(s1) + 80204dce: 8b8d andi a5,a5,3 + 80204dd0: 00f037b3 snez a5,a5 + 80204dd4: 00f484a3 sb a5,9(s1) return fd; - 80204abc: a811 j 80204ad0 <sys_dev+0xae> + 80204dd8: a811 j 80204dec <sys_dev+0xae> panic("dev file on FAT"); - 80204abe: 00005517 auipc a0,0x5 - 80204ac2: 0b250513 addi a0,a0,178 # 80209b70 <digits+0x7f0> - 80204ac6: ffffb097 auipc ra,0xffffb - 80204aca: 67e080e7 jalr 1662(ra) # 80200144 <panic> + 80204dda: 00005517 auipc a0,0x5 + 80204dde: dce50513 addi a0,a0,-562 # 80209ba8 <digits+0x828> + 80204de2: ffffb097 auipc ra,0xffffb + 80204de6: 362080e7 jalr 866(ra) # 80200144 <panic> return -1; - 80204ace: 557d li a0,-1 + 80204dea: 557d li a0,-1 } - 80204ad0: 70a2 ld ra,40(sp) - 80204ad2: 7402 ld s0,32(sp) - 80204ad4: 64e2 ld s1,24(sp) - 80204ad6: 6145 addi sp,sp,48 - 80204ad8: 8082 ret + 80204dec: 70a2 ld ra,40(sp) + 80204dee: 7402 ld s0,32(sp) + 80204df0: 64e2 ld s1,24(sp) + 80204df2: 6145 addi sp,sp,48 + 80204df4: 8082 ret return -1; - 80204ada: 557d li a0,-1 - 80204adc: bfd5 j 80204ad0 <sys_dev+0xae> - 80204ade: 557d li a0,-1 - 80204ae0: bfc5 j 80204ad0 <sys_dev+0xae> + 80204df6: 557d li a0,-1 + 80204df8: bfd5 j 80204dec <sys_dev+0xae> + 80204dfa: 557d li a0,-1 + 80204dfc: bfc5 j 80204dec <sys_dev+0xae> return -1; - 80204ae2: 557d li a0,-1 - 80204ae4: b7f5 j 80204ad0 <sys_dev+0xae> + 80204dfe: 557d li a0,-1 + 80204e00: b7f5 j 80204dec <sys_dev+0xae> fileclose(f); - 80204ae6: 8526 mv a0,s1 - 80204ae8: fffff097 auipc ra,0xfffff - 80204aec: d5a080e7 jalr -678(ra) # 80203842 <fileclose> + 80204e02: 8526 mv a0,s1 + 80204e04: fffff097 auipc ra,0xfffff + 80204e08: d5a080e7 jalr -678(ra) # 80203b5e <fileclose> return -1; - 80204af0: 557d li a0,-1 - 80204af2: bff9 j 80204ad0 <sys_dev+0xae> + 80204e0c: 557d li a0,-1 + 80204e0e: bff9 j 80204dec <sys_dev+0xae> -0000000080204af4 <sys_readdir>: +0000000080204e10 <sys_readdir>: // To support ls command uint64 sys_readdir(void) { - 80204af4: 1101 addi sp,sp,-32 - 80204af6: ec06 sd ra,24(sp) - 80204af8: e822 sd s0,16(sp) - 80204afa: 1000 addi s0,sp,32 + 80204e10: 1101 addi sp,sp,-32 + 80204e12: ec06 sd ra,24(sp) + 80204e14: e822 sd s0,16(sp) + 80204e16: 1000 addi s0,sp,32 struct file *f; uint64 p; if(argfd(0, 0, &f) < 0 || argaddr(1, &p) < 0) - 80204afc: fe840613 addi a2,s0,-24 - 80204b00: 4581 li a1,0 - 80204b02: 4501 li a0,0 - 80204b04: 00000097 auipc ra,0x0 - 80204b08: 81e080e7 jalr -2018(ra) # 80204322 <argfd> + 80204e18: fe840613 addi a2,s0,-24 + 80204e1c: 4581 li a1,0 + 80204e1e: 4501 li a0,0 + 80204e20: 00000097 auipc ra,0x0 + 80204e24: 81e080e7 jalr -2018(ra) # 8020463e <argfd> return -1; - 80204b0c: 57fd li a5,-1 + 80204e28: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argaddr(1, &p) < 0) - 80204b0e: 02054563 bltz a0,80204b38 <sys_readdir+0x44> - 80204b12: fe040593 addi a1,s0,-32 - 80204b16: 4505 li a0,1 - 80204b18: ffffe097 auipc ra,0xffffe - 80204b1c: 308080e7 jalr 776(ra) # 80202e20 <argaddr> + 80204e2a: 02054563 bltz a0,80204e54 <sys_readdir+0x44> + 80204e2e: fe040593 addi a1,s0,-32 + 80204e32: 4505 li a0,1 + 80204e34: ffffe097 auipc ra,0xffffe + 80204e38: 240080e7 jalr 576(ra) # 80203074 <argaddr> return -1; - 80204b20: 57fd li a5,-1 + 80204e3c: 57fd li a5,-1 if(argfd(0, 0, &f) < 0 || argaddr(1, &p) < 0) - 80204b22: 00054b63 bltz a0,80204b38 <sys_readdir+0x44> + 80204e3e: 00054b63 bltz a0,80204e54 <sys_readdir+0x44> return dirnext(f, p); - 80204b26: fe043583 ld a1,-32(s0) - 80204b2a: fe843503 ld a0,-24(s0) - 80204b2e: fffff097 auipc ra,0xfffff - 80204b32: fc0080e7 jalr -64(ra) # 80203aee <dirnext> - 80204b36: 87aa mv a5,a0 + 80204e42: fe043583 ld a1,-32(s0) + 80204e46: fe843503 ld a0,-24(s0) + 80204e4a: fffff097 auipc ra,0xfffff + 80204e4e: fc0080e7 jalr -64(ra) # 80203e0a <dirnext> + 80204e52: 87aa mv a5,a0 } - 80204b38: 853e mv a0,a5 - 80204b3a: 60e2 ld ra,24(sp) - 80204b3c: 6442 ld s0,16(sp) - 80204b3e: 6105 addi sp,sp,32 - 80204b40: 8082 ret + 80204e54: 853e mv a0,a5 + 80204e56: 60e2 ld ra,24(sp) + 80204e58: 6442 ld s0,16(sp) + 80204e5a: 6105 addi sp,sp,32 + 80204e5c: 8082 ret -0000000080204b42 <sys_getcwd>: +0000000080204e5e <sys_getcwd>: // get absolute cwd string uint64 sys_getcwd(void) { - 80204b42: 714d addi sp,sp,-336 - 80204b44: e686 sd ra,328(sp) - 80204b46: e2a2 sd s0,320(sp) - 80204b48: fe26 sd s1,312(sp) - 80204b4a: fa4a sd s2,304(sp) - 80204b4c: f64e sd s3,296(sp) - 80204b4e: f252 sd s4,288(sp) - 80204b50: ee56 sd s5,280(sp) - 80204b52: 0a80 addi s0,sp,336 + 80204e5e: 714d addi sp,sp,-336 + 80204e60: e686 sd ra,328(sp) + 80204e62: e2a2 sd s0,320(sp) + 80204e64: fe26 sd s1,312(sp) + 80204e66: fa4a sd s2,304(sp) + 80204e68: f64e sd s3,296(sp) + 80204e6a: f252 sd s4,288(sp) + 80204e6c: ee56 sd s5,280(sp) + 80204e6e: 0a80 addi s0,sp,336 uint64 addr; if (argaddr(0, &addr) < 0) - 80204b54: fb840593 addi a1,s0,-72 - 80204b58: 4501 li a0,0 - 80204b5a: ffffe097 auipc ra,0xffffe - 80204b5e: 2c6080e7 jalr 710(ra) # 80202e20 <argaddr> - 80204b62: 87aa mv a5,a0 + 80204e70: fb840593 addi a1,s0,-72 + 80204e74: 4501 li a0,0 + 80204e76: ffffe097 auipc ra,0xffffe + 80204e7a: 1fe080e7 jalr 510(ra) # 80203074 <argaddr> + 80204e7e: 87aa mv a5,a0 return -1; - 80204b64: 557d li a0,-1 + 80204e80: 557d li a0,-1 if (argaddr(0, &addr) < 0) - 80204b66: 0607cc63 bltz a5,80204bde <sys_getcwd+0x9c> + 80204e82: 0607cc63 bltz a5,80204efa <sys_getcwd+0x9c> struct dirent *de = myproc()->cwd; - 80204b6a: ffffd097 auipc ra,0xffffd - 80204b6e: ed2080e7 jalr -302(ra) # 80201a3c <myproc> - 80204b72: 15853483 ld s1,344(a0) + 80204e86: ffffd097 auipc ra,0xffffd + 80204e8a: bb6080e7 jalr -1098(ra) # 80201a3c <myproc> + 80204e8e: 15853483 ld s1,344(a0) char path[FAT32_MAX_PATH]; char *s; int len; if (de->parent == NULL) { - 80204b76: 1204b783 ld a5,288(s1) - 80204b7a: cbbd beqz a5,80204bf0 <sys_getcwd+0xae> + 80204e92: 1204b783 ld a5,288(s1) + 80204e96: cbbd beqz a5,80204f0c <sys_getcwd+0xae> s = "/"; } else { s = path + FAT32_MAX_PATH - 1; *s = '\0'; - 80204b7c: fa0409a3 sb zero,-77(s0) + 80204e98: fa0409a3 sb zero,-77(s0) s = path + FAT32_MAX_PATH - 1; - 80204b80: fb340993 addi s3,s0,-77 + 80204e9c: fb340993 addi s3,s0,-77 while (de->parent) { len = strlen(de->filename); s -= len; if (s <= path) // can't reach root "/" - 80204b84: eb040a13 addi s4,s0,-336 + 80204ea0: eb040a13 addi s4,s0,-336 return -1; strncpy(s, de->filename, len); *--s = '/'; - 80204b88: 02f00a93 li s5,47 + 80204ea4: 02f00a93 li s5,47 len = strlen(de->filename); - 80204b8c: 8526 mv a0,s1 - 80204b8e: ffffc097 auipc ra,0xffffc - 80204b92: d58080e7 jalr -680(ra) # 802008e6 <strlen> - 80204b96: 862a mv a2,a0 + 80204ea8: 8526 mv a0,s1 + 80204eaa: ffffc097 auipc ra,0xffffc + 80204eae: a3c080e7 jalr -1476(ra) # 802008e6 <strlen> + 80204eb2: 862a mv a2,a0 s -= len; - 80204b98: 40a98933 sub s2,s3,a0 + 80204eb4: 40a98933 sub s2,s3,a0 if (s <= path) // can't reach root "/" - 80204b9c: 052a7f63 bgeu s4,s2,80204bfa <sys_getcwd+0xb8> + 80204eb8: 052a7f63 bgeu s4,s2,80204f16 <sys_getcwd+0xb8> strncpy(s, de->filename, len); - 80204ba0: 85a6 mv a1,s1 - 80204ba2: 854a mv a0,s2 - 80204ba4: ffffc097 auipc ra,0xffffc - 80204ba8: cd2080e7 jalr -814(ra) # 80200876 <strncpy> + 80204ebc: 85a6 mv a1,s1 + 80204ebe: 854a mv a0,s2 + 80204ec0: ffffc097 auipc ra,0xffffc + 80204ec4: 9b6080e7 jalr -1610(ra) # 80200876 <strncpy> *--s = '/'; - 80204bac: fff90993 addi s3,s2,-1 - 80204bb0: ff590fa3 sb s5,-1(s2) + 80204ec8: fff90993 addi s3,s2,-1 + 80204ecc: ff590fa3 sb s5,-1(s2) de = de->parent; - 80204bb4: 1204b483 ld s1,288(s1) + 80204ed0: 1204b483 ld s1,288(s1) while (de->parent) { - 80204bb8: 1204b783 ld a5,288(s1) - 80204bbc: fbe1 bnez a5,80204b8c <sys_getcwd+0x4a> + 80204ed4: 1204b783 ld a5,288(s1) + 80204ed8: fbe1 bnez a5,80204ea8 <sys_getcwd+0x4a> } } // if (copyout(myproc()->pagetable, addr, s, strlen(s) + 1) < 0) if (copyout2(addr, s, strlen(s) + 1) < 0) - 80204bbe: fb843483 ld s1,-72(s0) - 80204bc2: 854e mv a0,s3 - 80204bc4: ffffc097 auipc ra,0xffffc - 80204bc8: d22080e7 jalr -734(ra) # 802008e6 <strlen> - 80204bcc: 0015061b addiw a2,a0,1 - 80204bd0: 85ce mv a1,s3 - 80204bd2: 8526 mv a0,s1 - 80204bd4: ffffc097 auipc ra,0xffffc - 80204bd8: 79e080e7 jalr 1950(ra) # 80201372 <copyout2> - 80204bdc: 957d srai a0,a0,0x3f + 80204eda: fb843483 ld s1,-72(s0) + 80204ede: 854e mv a0,s3 + 80204ee0: ffffc097 auipc ra,0xffffc + 80204ee4: a06080e7 jalr -1530(ra) # 802008e6 <strlen> + 80204ee8: 0015061b addiw a2,a0,1 + 80204eec: 85ce mv a1,s3 + 80204eee: 8526 mv a0,s1 + 80204ef0: ffffc097 auipc ra,0xffffc + 80204ef4: 482080e7 jalr 1154(ra) # 80201372 <copyout2> + 80204ef8: 957d srai a0,a0,0x3f return -1; return 0; } - 80204bde: 60b6 ld ra,328(sp) - 80204be0: 6416 ld s0,320(sp) - 80204be2: 74f2 ld s1,312(sp) - 80204be4: 7952 ld s2,304(sp) - 80204be6: 79b2 ld s3,296(sp) - 80204be8: 7a12 ld s4,288(sp) - 80204bea: 6af2 ld s5,280(sp) - 80204bec: 6171 addi sp,sp,336 - 80204bee: 8082 ret + 80204efa: 60b6 ld ra,328(sp) + 80204efc: 6416 ld s0,320(sp) + 80204efe: 74f2 ld s1,312(sp) + 80204f00: 7952 ld s2,304(sp) + 80204f02: 79b2 ld s3,296(sp) + 80204f04: 7a12 ld s4,288(sp) + 80204f06: 6af2 ld s5,280(sp) + 80204f08: 6171 addi sp,sp,336 + 80204f0a: 8082 ret s = "/"; - 80204bf0: 00005997 auipc s3,0x5 - 80204bf4: a4098993 addi s3,s3,-1472 # 80209630 <digits+0x2b0> - 80204bf8: b7d9 j 80204bbe <sys_getcwd+0x7c> + 80204f0c: 00004997 auipc s3,0x4 + 80204f10: 72498993 addi s3,s3,1828 # 80209630 <digits+0x2b0> + 80204f14: b7d9 j 80204eda <sys_getcwd+0x7c> return -1; - 80204bfa: 557d li a0,-1 - 80204bfc: b7cd j 80204bde <sys_getcwd+0x9c> + 80204f16: 557d li a0,-1 + 80204f18: b7cd j 80204efa <sys_getcwd+0x9c> -0000000080204bfe <sys_remove>: +0000000080204f1a <sys_remove>: return ret == -1; } uint64 sys_remove(void) { - 80204bfe: d6010113 addi sp,sp,-672 - 80204c02: 28113c23 sd ra,664(sp) - 80204c06: 28813823 sd s0,656(sp) - 80204c0a: 28913423 sd s1,648(sp) - 80204c0e: 1500 addi s0,sp,672 + 80204f1a: d6010113 addi sp,sp,-672 + 80204f1e: 28113c23 sd ra,664(sp) + 80204f22: 28813823 sd s0,656(sp) + 80204f26: 28913423 sd s1,648(sp) + 80204f2a: 1500 addi s0,sp,672 char path[FAT32_MAX_PATH]; struct dirent *ep; int len; if((len = argstr(0, path, FAT32_MAX_PATH)) <= 0) - 80204c10: 10400613 li a2,260 - 80204c14: ed840593 addi a1,s0,-296 - 80204c18: 4501 li a0,0 - 80204c1a: ffffe097 auipc ra,0xffffe - 80204c1e: 228080e7 jalr 552(ra) # 80202e42 <argstr> - 80204c22: 0ea05a63 blez a0,80204d16 <sys_remove+0x118> + 80204f2c: 10400613 li a2,260 + 80204f30: ed840593 addi a1,s0,-296 + 80204f34: 4501 li a0,0 + 80204f36: ffffe097 auipc ra,0xffffe + 80204f3a: 160080e7 jalr 352(ra) # 80203096 <argstr> + 80204f3e: 0ea05a63 blez a0,80205032 <sys_remove+0x118> return -1; char *s = path + len - 1; - 80204c26: 157d addi a0,a0,-1 - 80204c28: ed840713 addi a4,s0,-296 - 80204c2c: 00a707b3 add a5,a4,a0 + 80204f42: 157d addi a0,a0,-1 + 80204f44: ed840713 addi a4,s0,-296 + 80204f48: 00a707b3 add a5,a4,a0 while (s >= path && *s == '/') { - 80204c30: 02f00693 li a3,47 - 80204c34: 863a mv a2,a4 - 80204c36: 00e7e963 bltu a5,a4,80204c48 <sys_remove+0x4a> - 80204c3a: 0007c703 lbu a4,0(a5) - 80204c3e: 08d71a63 bne a4,a3,80204cd2 <sys_remove+0xd4> + 80204f4c: 02f00693 li a3,47 + 80204f50: 863a mv a2,a4 + 80204f52: 00e7e963 bltu a5,a4,80204f64 <sys_remove+0x4a> + 80204f56: 0007c703 lbu a4,0(a5) + 80204f5a: 08d71a63 bne a4,a3,80204fee <sys_remove+0xd4> s--; - 80204c42: 17fd addi a5,a5,-1 + 80204f5e: 17fd addi a5,a5,-1 while (s >= path && *s == '/') { - 80204c44: fec7fbe3 bgeu a5,a2,80204c3a <sys_remove+0x3c> + 80204f60: fec7fbe3 bgeu a5,a2,80204f56 <sys_remove+0x3c> } if (s >= path && *s == '.' && (s == path || *--s == '/')) { return -1; } if((ep = ename(path)) == NULL){ - 80204c48: ed840513 addi a0,s0,-296 - 80204c4c: 00002097 auipc ra,0x2 - 80204c50: d9a080e7 jalr -614(ra) # 802069e6 <ename> - 80204c54: 84aa mv s1,a0 - 80204c56: c561 beqz a0,80204d1e <sys_remove+0x120> + 80204f64: ed840513 addi a0,s0,-296 + 80204f68: 00002097 auipc ra,0x2 + 80204f6c: dce080e7 jalr -562(ra) # 80206d36 <ename> + 80204f70: 84aa mv s1,a0 + 80204f72: c561 beqz a0,8020503a <sys_remove+0x120> return -1; } elock(ep); - 80204c58: 00001097 auipc ra,0x1 - 80204c5c: 5e6080e7 jalr 1510(ra) # 8020623e <elock> + 80204f74: 00001097 auipc ra,0x1 + 80204f78: 61a080e7 jalr 1562(ra) # 8020658e <elock> if((ep->attribute & ATTR_DIRECTORY) && !isdirempty(ep)){ - 80204c60: 1004c783 lbu a5,256(s1) - 80204c64: 8bc1 andi a5,a5,16 - 80204c66: c38d beqz a5,80204c88 <sys_remove+0x8a> + 80204f7c: 1004c783 lbu a5,256(s1) + 80204f80: 8bc1 andi a5,a5,16 + 80204f82: c38d beqz a5,80204fa4 <sys_remove+0x8a> ep.valid = 0; - 80204c68: e8041323 sh zero,-378(s0) + 80204f84: e8041323 sh zero,-378(s0) ret = enext(dp, &ep, 2 * 32, &count); // skip the "." and ".." - 80204c6c: d6c40693 addi a3,s0,-660 - 80204c70: 04000613 li a2,64 - 80204c74: d7040593 addi a1,s0,-656 - 80204c78: 8526 mv a0,s1 - 80204c7a: 00001097 auipc ra,0x1 - 80204c7e: 7c8080e7 jalr 1992(ra) # 80206442 <enext> + 80204f88: d6c40693 addi a3,s0,-660 + 80204f8c: 04000613 li a2,64 + 80204f90: d7040593 addi a1,s0,-656 + 80204f94: 8526 mv a0,s1 + 80204f96: 00001097 auipc ra,0x1 + 80204f9a: 7fc080e7 jalr 2044(ra) # 80206792 <enext> if((ep->attribute & ATTR_DIRECTORY) && !isdirempty(ep)){ - 80204c82: 57fd li a5,-1 - 80204c84: 06f51d63 bne a0,a5,80204cfe <sys_remove+0x100> + 80204f9e: 57fd li a5,-1 + 80204fa0: 06f51d63 bne a0,a5,8020501a <sys_remove+0x100> eunlock(ep); eput(ep); return -1; } elock(ep->parent); // Will this lead to deadlock? - 80204c88: 1204b503 ld a0,288(s1) - 80204c8c: 00001097 auipc ra,0x1 - 80204c90: 5b2080e7 jalr 1458(ra) # 8020623e <elock> + 80204fa4: 1204b503 ld a0,288(s1) + 80204fa8: 00001097 auipc ra,0x1 + 80204fac: 5e6080e7 jalr 1510(ra) # 8020658e <elock> eremove(ep); - 80204c94: 8526 mv a0,s1 - 80204c96: 00001097 auipc ra,0x1 - 80204c9a: 474080e7 jalr 1140(ra) # 8020610a <eremove> + 80204fb0: 8526 mv a0,s1 + 80204fb2: 00001097 auipc ra,0x1 + 80204fb6: 4a8080e7 jalr 1192(ra) # 8020645a <eremove> eunlock(ep->parent); - 80204c9e: 1204b503 ld a0,288(s1) - 80204ca2: 00001097 auipc ra,0x1 - 80204ca6: 5d2080e7 jalr 1490(ra) # 80206274 <eunlock> + 80204fba: 1204b503 ld a0,288(s1) + 80204fbe: 00001097 auipc ra,0x1 + 80204fc2: 606080e7 jalr 1542(ra) # 802065c4 <eunlock> eunlock(ep); - 80204caa: 8526 mv a0,s1 - 80204cac: 00001097 auipc ra,0x1 - 80204cb0: 5c8080e7 jalr 1480(ra) # 80206274 <eunlock> + 80204fc6: 8526 mv a0,s1 + 80204fc8: 00001097 auipc ra,0x1 + 80204fcc: 5fc080e7 jalr 1532(ra) # 802065c4 <eunlock> eput(ep); - 80204cb4: 8526 mv a0,s1 - 80204cb6: 00001097 auipc ra,0x1 - 80204cba: 60c080e7 jalr 1548(ra) # 802062c2 <eput> + 80204fd0: 8526 mv a0,s1 + 80204fd2: 00001097 auipc ra,0x1 + 80204fd6: 640080e7 jalr 1600(ra) # 80206612 <eput> return 0; - 80204cbe: 4501 li a0,0 + 80204fda: 4501 li a0,0 } - 80204cc0: 29813083 ld ra,664(sp) - 80204cc4: 29013403 ld s0,656(sp) - 80204cc8: 28813483 ld s1,648(sp) - 80204ccc: 2a010113 addi sp,sp,672 - 80204cd0: 8082 ret + 80204fdc: 29813083 ld ra,664(sp) + 80204fe0: 29013403 ld s0,656(sp) + 80204fe4: 28813483 ld s1,648(sp) + 80204fe8: 2a010113 addi sp,sp,672 + 80204fec: 8082 ret if (s >= path && *s == '.' && (s == path || *--s == '/')) { - 80204cd2: ed840713 addi a4,s0,-296 - 80204cd6: f6e7e9e3 bltu a5,a4,80204c48 <sys_remove+0x4a> - 80204cda: 0007c683 lbu a3,0(a5) - 80204cde: 02e00713 li a4,46 - 80204ce2: f6e693e3 bne a3,a4,80204c48 <sys_remove+0x4a> - 80204ce6: ed840713 addi a4,s0,-296 - 80204cea: 02e78863 beq a5,a4,80204d1a <sys_remove+0x11c> - 80204cee: fff7c703 lbu a4,-1(a5) - 80204cf2: 02f00793 li a5,47 - 80204cf6: f4f719e3 bne a4,a5,80204c48 <sys_remove+0x4a> + 80204fee: ed840713 addi a4,s0,-296 + 80204ff2: f6e7e9e3 bltu a5,a4,80204f64 <sys_remove+0x4a> + 80204ff6: 0007c683 lbu a3,0(a5) + 80204ffa: 02e00713 li a4,46 + 80204ffe: f6e693e3 bne a3,a4,80204f64 <sys_remove+0x4a> + 80205002: ed840713 addi a4,s0,-296 + 80205006: 02e78863 beq a5,a4,80205036 <sys_remove+0x11c> + 8020500a: fff7c703 lbu a4,-1(a5) + 8020500e: 02f00793 li a5,47 + 80205012: f4f719e3 bne a4,a5,80204f64 <sys_remove+0x4a> return -1; - 80204cfa: 557d li a0,-1 - 80204cfc: b7d1 j 80204cc0 <sys_remove+0xc2> + 80205016: 557d li a0,-1 + 80205018: b7d1 j 80204fdc <sys_remove+0xc2> eunlock(ep); - 80204cfe: 8526 mv a0,s1 - 80204d00: 00001097 auipc ra,0x1 - 80204d04: 574080e7 jalr 1396(ra) # 80206274 <eunlock> + 8020501a: 8526 mv a0,s1 + 8020501c: 00001097 auipc ra,0x1 + 80205020: 5a8080e7 jalr 1448(ra) # 802065c4 <eunlock> eput(ep); - 80204d08: 8526 mv a0,s1 - 80204d0a: 00001097 auipc ra,0x1 - 80204d0e: 5b8080e7 jalr 1464(ra) # 802062c2 <eput> + 80205024: 8526 mv a0,s1 + 80205026: 00001097 auipc ra,0x1 + 8020502a: 5ec080e7 jalr 1516(ra) # 80206612 <eput> return -1; - 80204d12: 557d li a0,-1 - 80204d14: b775 j 80204cc0 <sys_remove+0xc2> + 8020502e: 557d li a0,-1 + 80205030: b775 j 80204fdc <sys_remove+0xc2> return -1; - 80204d16: 557d li a0,-1 - 80204d18: b765 j 80204cc0 <sys_remove+0xc2> + 80205032: 557d li a0,-1 + 80205034: b765 j 80204fdc <sys_remove+0xc2> return -1; - 80204d1a: 557d li a0,-1 - 80204d1c: b755 j 80204cc0 <sys_remove+0xc2> + 80205036: 557d li a0,-1 + 80205038: b755 j 80204fdc <sys_remove+0xc2> return -1; - 80204d1e: 557d li a0,-1 - 80204d20: b745 j 80204cc0 <sys_remove+0xc2> + 8020503a: 557d li a0,-1 + 8020503c: b745 j 80204fdc <sys_remove+0xc2> -0000000080204d22 <sys_rename>: +000000008020503e <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) { - 80204d22: c4010113 addi sp,sp,-960 - 80204d26: 3a113c23 sd ra,952(sp) - 80204d2a: 3a813823 sd s0,944(sp) - 80204d2e: 3a913423 sd s1,936(sp) - 80204d32: 3b213023 sd s2,928(sp) - 80204d36: 39313c23 sd s3,920(sp) - 80204d3a: 39413823 sd s4,912(sp) - 80204d3e: 0780 addi s0,sp,960 + 8020503e: c4010113 addi sp,sp,-960 + 80205042: 3a113c23 sd ra,952(sp) + 80205046: 3a813823 sd s0,944(sp) + 8020504a: 3a913423 sd s1,936(sp) + 8020504e: 3b213023 sd s2,928(sp) + 80205052: 39313c23 sd s3,920(sp) + 80205056: 39413823 sd s4,912(sp) + 8020505a: 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) { - 80204d40: 10400613 li a2,260 - 80204d44: ec840593 addi a1,s0,-312 - 80204d48: 4501 li a0,0 - 80204d4a: ffffe097 auipc ra,0xffffe - 80204d4e: 0f8080e7 jalr 248(ra) # 80202e42 <argstr> + 8020505c: 10400613 li a2,260 + 80205060: ec840593 addi a1,s0,-312 + 80205064: 4501 li a0,0 + 80205066: ffffe097 auipc ra,0xffffe + 8020506a: 030080e7 jalr 48(ra) # 80203096 <argstr> return -1; - 80204d52: 57fd li a5,-1 + 8020506e: 57fd li a5,-1 if (argstr(0, old, FAT32_MAX_PATH) < 0 || argstr(1, new, FAT32_MAX_PATH) < 0) { - 80204d54: 0c054d63 bltz a0,80204e2e <sys_rename+0x10c> - 80204d58: 10400613 li a2,260 - 80204d5c: dc040593 addi a1,s0,-576 - 80204d60: 4505 li a0,1 - 80204d62: ffffe097 auipc ra,0xffffe - 80204d66: 0e0080e7 jalr 224(ra) # 80202e42 <argstr> + 80205070: 0c054d63 bltz a0,8020514a <sys_rename+0x10c> + 80205074: 10400613 li a2,260 + 80205078: dc040593 addi a1,s0,-576 + 8020507c: 4505 li a0,1 + 8020507e: ffffe097 auipc ra,0xffffe + 80205082: 018080e7 jalr 24(ra) # 80203096 <argstr> return -1; - 80204d6a: 57fd li a5,-1 + 80205086: 57fd li a5,-1 if (argstr(0, old, FAT32_MAX_PATH) < 0 || argstr(1, new, FAT32_MAX_PATH) < 0) { - 80204d6c: 0c054163 bltz a0,80204e2e <sys_rename+0x10c> + 80205088: 0c054163 bltz a0,8020514a <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 - 80204d70: ec840513 addi a0,s0,-312 - 80204d74: 00002097 auipc ra,0x2 - 80204d78: c72080e7 jalr -910(ra) # 802069e6 <ename> - 80204d7c: 84aa mv s1,a0 - 80204d7e: 1c050963 beqz a0,80204f50 <sys_rename+0x22e> - 80204d82: ec840593 addi a1,s0,-312 - 80204d86: dc040513 addi a0,s0,-576 - 80204d8a: 00002097 auipc ra,0x2 - 80204d8e: c7a080e7 jalr -902(ra) # 80206a04 <enameparent> - 80204d92: 892a mv s2,a0 - 80204d94: cd35 beqz a0,80204e10 <sys_rename+0xee> + 8020508c: ec840513 addi a0,s0,-312 + 80205090: 00002097 auipc ra,0x2 + 80205094: ca6080e7 jalr -858(ra) # 80206d36 <ename> + 80205098: 84aa mv s1,a0 + 8020509a: 1c050963 beqz a0,8020526c <sys_rename+0x22e> + 8020509e: ec840593 addi a1,s0,-312 + 802050a2: dc040513 addi a0,s0,-576 + 802050a6: 00002097 auipc ra,0x2 + 802050aa: cae080e7 jalr -850(ra) # 80206d54 <enameparent> + 802050ae: 892a mv s2,a0 + 802050b0: cd35 beqz a0,8020512c <sys_rename+0xee> || (name = formatname(old)) == NULL) { - 80204d96: ec840513 addi a0,s0,-312 - 80204d9a: 00001097 auipc ra,0x1 - 80204d9e: dc4080e7 jalr -572(ra) # 80205b5e <formatname> - 80204da2: 89aa mv s3,a0 - 80204da4: c535 beqz a0,80204e10 <sys_rename+0xee> + 802050b2: ec840513 addi a0,s0,-312 + 802050b6: 00001097 auipc ra,0x1 + 802050ba: df8080e7 jalr -520(ra) # 80205eae <formatname> + 802050be: 89aa mv s3,a0 + 802050c0: c535 beqz a0,8020512c <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? - 80204da6: 07248563 beq s1,s2,80204e10 <sys_rename+0xee> + 802050c2: 07248563 beq s1,s2,8020512c <sys_rename+0xee> for (struct dirent *ep = pdst; ep != NULL; ep = ep->parent) { - 80204daa: 87ca mv a5,s2 - 80204dac: 1207b783 ld a5,288(a5) - 80204db0: c781 beqz a5,80204db8 <sys_rename+0x96> + 802050c6: 87ca mv a5,s2 + 802050c8: 1207b783 ld a5,288(a5) + 802050cc: c781 beqz a5,802050d4 <sys_rename+0x96> if (ep == src) { // In what universe can we move a directory into its child? - 80204db2: fef49de3 bne s1,a5,80204dac <sys_rename+0x8a> - 80204db6: a8a9 j 80204e10 <sys_rename+0xee> + 802050ce: fef49de3 bne s1,a5,802050c8 <sys_rename+0x8a> + 802050d2: a8a9 j 8020512c <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 - 80204db8: 8526 mv a0,s1 - 80204dba: 00001097 auipc ra,0x1 - 80204dbe: 484080e7 jalr 1156(ra) # 8020623e <elock> + 802050d4: 8526 mv a0,s1 + 802050d6: 00001097 auipc ra,0x1 + 802050da: 4b8080e7 jalr 1208(ra) # 8020658e <elock> srclock = 1; elock(pdst); - 80204dc2: 854a mv a0,s2 - 80204dc4: 00001097 auipc ra,0x1 - 80204dc8: 47a080e7 jalr 1146(ra) # 8020623e <elock> + 802050de: 854a mv a0,s2 + 802050e0: 00001097 auipc ra,0x1 + 802050e4: 4ae080e7 jalr 1198(ra) # 8020658e <elock> dst = dirlookup(pdst, name, &off); - 80204dcc: dbc40613 addi a2,s0,-580 - 80204dd0: 85ce mv a1,s3 - 80204dd2: 854a mv a0,s2 - 80204dd4: 00001097 auipc ra,0x1 - 80204dd8: 7f8080e7 jalr 2040(ra) # 802065cc <dirlookup> - 80204ddc: 8a2a mv s4,a0 + 802050e8: dbc40613 addi a2,s0,-580 + 802050ec: 85ce mv a1,s3 + 802050ee: 854a mv a0,s2 + 802050f0: 00002097 auipc ra,0x2 + 802050f4: 82c080e7 jalr -2004(ra) # 8020691c <dirlookup> + 802050f8: 8a2a mv s4,a0 if (dst != NULL) { - 80204dde: cd45 beqz a0,80204e96 <sys_rename+0x174> + 802050fa: cd45 beqz a0,802051b2 <sys_rename+0x174> eunlock(pdst); - 80204de0: 854a mv a0,s2 - 80204de2: 00001097 auipc ra,0x1 - 80204de6: 492080e7 jalr 1170(ra) # 80206274 <eunlock> + 802050fc: 854a mv a0,s2 + 802050fe: 00001097 auipc ra,0x1 + 80205102: 4c6080e7 jalr 1222(ra) # 802065c4 <eunlock> if (src == dst) { - 80204dea: 01448963 beq s1,s4,80204dfc <sys_rename+0xda> + 80205106: 01448963 beq s1,s4,80205118 <sys_rename+0xda> goto fail; } else if (src->attribute & dst->attribute & ATTR_DIRECTORY) { - 80204dee: 1004c783 lbu a5,256(s1) - 80204df2: 100a4703 lbu a4,256(s4) - 80204df6: 8ff9 and a5,a5,a4 - 80204df8: 8bc1 andi a5,a5,16 - 80204dfa: ebb1 bnez a5,80204e4e <sys_rename+0x12c> + 8020510a: 1004c783 lbu a5,256(s1) + 8020510e: 100a4703 lbu a4,256(s4) + 80205112: 8ff9 and a5,a5,a4 + 80205114: 8bc1 andi a5,a5,16 + 80205116: ebb1 bnez a5,8020516a <sys_rename+0x12c> return 0; fail: if (srclock) eunlock(src); - 80204dfc: 8526 mv a0,s1 - 80204dfe: 00001097 auipc ra,0x1 - 80204e02: 476080e7 jalr 1142(ra) # 80206274 <eunlock> + 80205118: 8526 mv a0,s1 + 8020511a: 00001097 auipc ra,0x1 + 8020511e: 4aa080e7 jalr 1194(ra) # 802065c4 <eunlock> if (dst) eput(dst); - 80204e06: 8552 mv a0,s4 - 80204e08: 00001097 auipc ra,0x1 - 80204e0c: 4ba080e7 jalr 1210(ra) # 802062c2 <eput> + 80205122: 8552 mv a0,s4 + 80205124: 00001097 auipc ra,0x1 + 80205128: 4ee080e7 jalr 1262(ra) # 80206612 <eput> if (pdst) - 80204e10: 00090763 beqz s2,80204e1e <sys_rename+0xfc> + 8020512c: 00090763 beqz s2,8020513a <sys_rename+0xfc> eput(pdst); - 80204e14: 854a mv a0,s2 - 80204e16: 00001097 auipc ra,0x1 - 80204e1a: 4ac080e7 jalr 1196(ra) # 802062c2 <eput> + 80205130: 854a mv a0,s2 + 80205132: 00001097 auipc ra,0x1 + 80205136: 4e0080e7 jalr 1248(ra) # 80206612 <eput> if (src) eput(src); return -1; - 80204e1e: 57fd li a5,-1 + 8020513a: 57fd li a5,-1 if (src) - 80204e20: c499 beqz s1,80204e2e <sys_rename+0x10c> + 8020513c: c499 beqz s1,8020514a <sys_rename+0x10c> eput(src); - 80204e22: 8526 mv a0,s1 - 80204e24: 00001097 auipc ra,0x1 - 80204e28: 49e080e7 jalr 1182(ra) # 802062c2 <eput> + 8020513e: 8526 mv a0,s1 + 80205140: 00001097 auipc ra,0x1 + 80205144: 4d2080e7 jalr 1234(ra) # 80206612 <eput> return -1; - 80204e2c: 57fd li a5,-1 -} - 80204e2e: 853e mv a0,a5 - 80204e30: 3b813083 ld ra,952(sp) - 80204e34: 3b013403 ld s0,944(sp) - 80204e38: 3a813483 ld s1,936(sp) - 80204e3c: 3a013903 ld s2,928(sp) - 80204e40: 39813983 ld s3,920(sp) - 80204e44: 39013a03 ld s4,912(sp) - 80204e48: 3c010113 addi sp,sp,960 - 80204e4c: 8082 ret + 80205148: 57fd li a5,-1 +} + 8020514a: 853e mv a0,a5 + 8020514c: 3b813083 ld ra,952(sp) + 80205150: 3b013403 ld s0,944(sp) + 80205154: 3a813483 ld s1,936(sp) + 80205158: 3a013903 ld s2,928(sp) + 8020515c: 39813983 ld s3,920(sp) + 80205160: 39013a03 ld s4,912(sp) + 80205164: 3c010113 addi sp,sp,960 + 80205168: 8082 ret elock(dst); - 80204e4e: 8552 mv a0,s4 - 80204e50: 00001097 auipc ra,0x1 - 80204e54: 3ee080e7 jalr 1006(ra) # 8020623e <elock> + 8020516a: 8552 mv a0,s4 + 8020516c: 00001097 auipc ra,0x1 + 80205170: 422080e7 jalr 1058(ra) # 8020658e <elock> ep.valid = 0; - 80204e58: d6041323 sh zero,-666(s0) + 80205174: d6041323 sh zero,-666(s0) ret = enext(dp, &ep, 2 * 32, &count); // skip the "." and ".." - 80204e5c: c4c40693 addi a3,s0,-948 - 80204e60: 04000613 li a2,64 - 80204e64: c5040593 addi a1,s0,-944 - 80204e68: 8552 mv a0,s4 - 80204e6a: 00001097 auipc ra,0x1 - 80204e6e: 5d8080e7 jalr 1496(ra) # 80206442 <enext> + 80205178: c4c40693 addi a3,s0,-948 + 8020517c: 04000613 li a2,64 + 80205180: c5040593 addi a1,s0,-944 + 80205184: 8552 mv a0,s4 + 80205186: 00001097 auipc ra,0x1 + 8020518a: 60c080e7 jalr 1548(ra) # 80206792 <enext> if (!isdirempty(dst)) { // it's ok to overwrite an empty dir - 80204e72: 57fd li a5,-1 - 80204e74: 0cf51863 bne a0,a5,80204f44 <sys_rename+0x222> + 8020518e: 57fd li a5,-1 + 80205190: 0cf51863 bne a0,a5,80205260 <sys_rename+0x222> elock(pdst); - 80204e78: 854a mv a0,s2 - 80204e7a: 00001097 auipc ra,0x1 - 80204e7e: 3c4080e7 jalr 964(ra) # 8020623e <elock> + 80205194: 854a mv a0,s2 + 80205196: 00001097 auipc ra,0x1 + 8020519a: 3f8080e7 jalr 1016(ra) # 8020658e <elock> eremove(dst); - 80204e82: 8552 mv a0,s4 - 80204e84: 00001097 auipc ra,0x1 - 80204e88: 286080e7 jalr 646(ra) # 8020610a <eremove> + 8020519e: 8552 mv a0,s4 + 802051a0: 00001097 auipc ra,0x1 + 802051a4: 2ba080e7 jalr 698(ra) # 8020645a <eremove> eunlock(dst); - 80204e8c: 8552 mv a0,s4 - 80204e8e: 00001097 auipc ra,0x1 - 80204e92: 3e6080e7 jalr 998(ra) # 80206274 <eunlock> + 802051a8: 8552 mv a0,s4 + 802051aa: 00001097 auipc ra,0x1 + 802051ae: 41a080e7 jalr 1050(ra) # 802065c4 <eunlock> memmove(src->filename, name, FAT32_MAX_FILENAME); - 80204e96: 0ff00613 li a2,255 - 80204e9a: 85ce mv a1,s3 - 80204e9c: 8526 mv a0,s1 - 80204e9e: ffffc097 auipc ra,0xffffc - 80204ea2: 920080e7 jalr -1760(ra) # 802007be <memmove> + 802051b2: 0ff00613 li a2,255 + 802051b6: 85ce mv a1,s3 + 802051b8: 8526 mv a0,s1 + 802051ba: ffffb097 auipc ra,0xffffb + 802051be: 604080e7 jalr 1540(ra) # 802007be <memmove> emake(pdst, src, off); - 80204ea6: dbc42603 lw a2,-580(s0) - 80204eaa: 85a6 mv a1,s1 - 80204eac: 854a mv a0,s2 - 80204eae: 00001097 auipc ra,0x1 - 80204eb2: d68080e7 jalr -664(ra) # 80205c16 <emake> + 802051c2: dbc42603 lw a2,-580(s0) + 802051c6: 85a6 mv a1,s1 + 802051c8: 854a mv a0,s2 + 802051ca: 00001097 auipc ra,0x1 + 802051ce: d9c080e7 jalr -612(ra) # 80205f66 <emake> if (src->parent != pdst) { - 80204eb6: 1204b783 ld a5,288(s1) - 80204eba: 01278d63 beq a5,s2,80204ed4 <sys_rename+0x1b2> + 802051d2: 1204b783 ld a5,288(s1) + 802051d6: 01278d63 beq a5,s2,802051f0 <sys_rename+0x1b2> eunlock(pdst); - 80204ebe: 854a mv a0,s2 - 80204ec0: 00001097 auipc ra,0x1 - 80204ec4: 3b4080e7 jalr 948(ra) # 80206274 <eunlock> + 802051da: 854a mv a0,s2 + 802051dc: 00001097 auipc ra,0x1 + 802051e0: 3e8080e7 jalr 1000(ra) # 802065c4 <eunlock> elock(src->parent); - 80204ec8: 1204b503 ld a0,288(s1) - 80204ecc: 00001097 auipc ra,0x1 - 80204ed0: 372080e7 jalr 882(ra) # 8020623e <elock> + 802051e4: 1204b503 ld a0,288(s1) + 802051e8: 00001097 auipc ra,0x1 + 802051ec: 3a6080e7 jalr 934(ra) # 8020658e <elock> eremove(src); - 80204ed4: 8526 mv a0,s1 - 80204ed6: 00001097 auipc ra,0x1 - 80204eda: 234080e7 jalr 564(ra) # 8020610a <eremove> + 802051f0: 8526 mv a0,s1 + 802051f2: 00001097 auipc ra,0x1 + 802051f6: 268080e7 jalr 616(ra) # 8020645a <eremove> eunlock(src->parent); - 80204ede: 1204b503 ld a0,288(s1) - 80204ee2: 00001097 auipc ra,0x1 - 80204ee6: 392080e7 jalr 914(ra) # 80206274 <eunlock> + 802051fa: 1204b503 ld a0,288(s1) + 802051fe: 00001097 auipc ra,0x1 + 80205202: 3c6080e7 jalr 966(ra) # 802065c4 <eunlock> struct dirent *psrc = src->parent; // src must not be root, or it won't pass the for-loop test - 80204eea: 1204b983 ld s3,288(s1) + 80205206: 1204b983 ld s3,288(s1) src->parent = edup(pdst); - 80204eee: 854a mv a0,s2 - 80204ef0: 00001097 auipc ra,0x1 - 80204ef4: 0f0080e7 jalr 240(ra) # 80205fe0 <edup> - 80204ef8: 12a4b023 sd a0,288(s1) + 8020520a: 854a mv a0,s2 + 8020520c: 00001097 auipc ra,0x1 + 80205210: 124080e7 jalr 292(ra) # 80206330 <edup> + 80205214: 12a4b023 sd a0,288(s1) src->off = off; - 80204efc: dbc42783 lw a5,-580(s0) - 80204f00: 10f4ae23 sw a5,284(s1) + 80205218: dbc42783 lw a5,-580(s0) + 8020521c: 10f4ae23 sw a5,284(s1) src->valid = 1; - 80204f04: 4785 li a5,1 - 80204f06: 10f49b23 sh a5,278(s1) + 80205220: 4785 li a5,1 + 80205222: 10f49b23 sh a5,278(s1) eunlock(src); - 80204f0a: 8526 mv a0,s1 - 80204f0c: 00001097 auipc ra,0x1 - 80204f10: 368080e7 jalr 872(ra) # 80206274 <eunlock> + 80205226: 8526 mv a0,s1 + 80205228: 00001097 auipc ra,0x1 + 8020522c: 39c080e7 jalr 924(ra) # 802065c4 <eunlock> eput(psrc); - 80204f14: 854e mv a0,s3 - 80204f16: 00001097 auipc ra,0x1 - 80204f1a: 3ac080e7 jalr 940(ra) # 802062c2 <eput> + 80205230: 854e mv a0,s3 + 80205232: 00001097 auipc ra,0x1 + 80205236: 3e0080e7 jalr 992(ra) # 80206612 <eput> if (dst) { - 80204f1e: 000a0763 beqz s4,80204f2c <sys_rename+0x20a> + 8020523a: 000a0763 beqz s4,80205248 <sys_rename+0x20a> eput(dst); - 80204f22: 8552 mv a0,s4 - 80204f24: 00001097 auipc ra,0x1 - 80204f28: 39e080e7 jalr 926(ra) # 802062c2 <eput> + 8020523e: 8552 mv a0,s4 + 80205240: 00001097 auipc ra,0x1 + 80205244: 3d2080e7 jalr 978(ra) # 80206612 <eput> eput(pdst); - 80204f2c: 854a mv a0,s2 - 80204f2e: 00001097 auipc ra,0x1 - 80204f32: 394080e7 jalr 916(ra) # 802062c2 <eput> + 80205248: 854a mv a0,s2 + 8020524a: 00001097 auipc ra,0x1 + 8020524e: 3c8080e7 jalr 968(ra) # 80206612 <eput> eput(src); - 80204f36: 8526 mv a0,s1 - 80204f38: 00001097 auipc ra,0x1 - 80204f3c: 38a080e7 jalr 906(ra) # 802062c2 <eput> + 80205252: 8526 mv a0,s1 + 80205254: 00001097 auipc ra,0x1 + 80205258: 3be080e7 jalr 958(ra) # 80206612 <eput> return 0; - 80204f40: 4781 li a5,0 - 80204f42: b5f5 j 80204e2e <sys_rename+0x10c> + 8020525c: 4781 li a5,0 + 8020525e: b5f5 j 8020514a <sys_rename+0x10c> eunlock(dst); - 80204f44: 8552 mv a0,s4 - 80204f46: 00001097 auipc ra,0x1 - 80204f4a: 32e080e7 jalr 814(ra) # 80206274 <eunlock> + 80205260: 8552 mv a0,s4 + 80205262: 00001097 auipc ra,0x1 + 80205266: 362080e7 jalr 866(ra) # 802065c4 <eunlock> goto fail; - 80204f4e: b57d j 80204dfc <sys_rename+0xda> + 8020526a: b57d j 80205118 <sys_rename+0xda> struct dirent *src = NULL, *dst = NULL, *pdst = NULL; - 80204f50: 892a mv s2,a0 + 8020526c: 892a mv s2,a0 if (dst) - 80204f52: bd7d j 80204e10 <sys_rename+0xee> + 8020526e: bd7d j 8020512c <sys_rename+0xee> + +0000000080205270 <sys_umount>: + +uint64 +sys_umount(void) +{ + 80205270: 1141 addi sp,sp,-16 + 80205272: e422 sd s0,8(sp) + 80205274: 0800 addi s0,sp,16 + return 0; +} + 80205276: 4501 li a0,0 + 80205278: 6422 ld s0,8(sp) + 8020527a: 0141 addi sp,sp,16 + 8020527c: 8082 ret + +000000008020527e <sys_mount>: + +uint64 +sys_mount(void) +{ + 8020527e: 1141 addi sp,sp,-16 + 80205280: e422 sd s0,8(sp) + 80205282: 0800 addi s0,sp,16 + return 0; +} + 80205284: 4501 li a0,0 + 80205286: 6422 ld s0,8(sp) + 80205288: 0141 addi sp,sp,16 + 8020528a: 8082 ret + +000000008020528c <sys_munmap>: + +uint64 +sys_munmap(void) +{ + 8020528c: 1141 addi sp,sp,-16 + 8020528e: e422 sd s0,8(sp) + 80205290: 0800 addi s0,sp,16 + return 0; +} + 80205292: 4501 li a0,0 + 80205294: 6422 ld s0,8(sp) + 80205296: 0141 addi sp,sp,16 + 80205298: 8082 ret + +000000008020529a <sys_mmap>: + +uint64 +sys_mmap(void) +{ + 8020529a: 1141 addi sp,sp,-16 + 8020529c: e422 sd s0,8(sp) + 8020529e: 0800 addi s0,sp,16 + return 0; +} + 802052a0: 4501 li a0,0 + 802052a2: 6422 ld s0,8(sp) + 802052a4: 0141 addi sp,sp,16 + 802052a6: 8082 ret ... -0000000080204f60 <kernelvec>: - 80204f60: 7111 addi sp,sp,-256 - 80204f62: e006 sd ra,0(sp) - 80204f64: e40a sd sp,8(sp) - 80204f66: e80e sd gp,16(sp) - 80204f68: ec12 sd tp,24(sp) - 80204f6a: f016 sd t0,32(sp) - 80204f6c: f41a sd t1,40(sp) - 80204f6e: f81e sd t2,48(sp) - 80204f70: fc22 sd s0,56(sp) - 80204f72: e0a6 sd s1,64(sp) - 80204f74: e4aa sd a0,72(sp) - 80204f76: e8ae sd a1,80(sp) - 80204f78: ecb2 sd a2,88(sp) - 80204f7a: f0b6 sd a3,96(sp) - 80204f7c: f4ba sd a4,104(sp) - 80204f7e: f8be sd a5,112(sp) - 80204f80: fcc2 sd a6,120(sp) - 80204f82: e146 sd a7,128(sp) - 80204f84: e54a sd s2,136(sp) - 80204f86: e94e sd s3,144(sp) - 80204f88: ed52 sd s4,152(sp) - 80204f8a: f156 sd s5,160(sp) - 80204f8c: f55a sd s6,168(sp) - 80204f8e: f95e sd s7,176(sp) - 80204f90: fd62 sd s8,184(sp) - 80204f92: e1e6 sd s9,192(sp) - 80204f94: e5ea sd s10,200(sp) - 80204f96: e9ee sd s11,208(sp) - 80204f98: edf2 sd t3,216(sp) - 80204f9a: f1f6 sd t4,224(sp) - 80204f9c: f5fa sd t5,232(sp) - 80204f9e: f9fe sd t6,240(sp) - 80204fa0: 9a1fd0ef jal ra,80202940 <kerneltrap> - 80204fa4: 6082 ld ra,0(sp) - 80204fa6: 6122 ld sp,8(sp) - 80204fa8: 61c2 ld gp,16(sp) - 80204faa: 7282 ld t0,32(sp) - 80204fac: 7322 ld t1,40(sp) - 80204fae: 73c2 ld t2,48(sp) - 80204fb0: 7462 ld s0,56(sp) - 80204fb2: 6486 ld s1,64(sp) - 80204fb4: 6526 ld a0,72(sp) - 80204fb6: 65c6 ld a1,80(sp) - 80204fb8: 6666 ld a2,88(sp) - 80204fba: 7686 ld a3,96(sp) - 80204fbc: 7726 ld a4,104(sp) - 80204fbe: 77c6 ld a5,112(sp) - 80204fc0: 7866 ld a6,120(sp) - 80204fc2: 688a ld a7,128(sp) - 80204fc4: 692a ld s2,136(sp) - 80204fc6: 69ca ld s3,144(sp) - 80204fc8: 6a6a ld s4,152(sp) - 80204fca: 7a8a ld s5,160(sp) - 80204fcc: 7b2a ld s6,168(sp) - 80204fce: 7bca ld s7,176(sp) - 80204fd0: 7c6a ld s8,184(sp) - 80204fd2: 6c8e ld s9,192(sp) - 80204fd4: 6d2e ld s10,200(sp) - 80204fd6: 6dce ld s11,208(sp) - 80204fd8: 6e6e ld t3,216(sp) - 80204fda: 7e8e ld t4,224(sp) - 80204fdc: 7f2e ld t5,232(sp) - 80204fde: 7fce ld t6,240(sp) - 80204fe0: 6111 addi sp,sp,256 - 80204fe2: 10200073 sret +00000000802052b0 <kernelvec>: + 802052b0: 7111 addi sp,sp,-256 + 802052b2: e006 sd ra,0(sp) + 802052b4: e40a sd sp,8(sp) + 802052b6: e80e sd gp,16(sp) + 802052b8: ec12 sd tp,24(sp) + 802052ba: f016 sd t0,32(sp) + 802052bc: f41a sd t1,40(sp) + 802052be: f81e sd t2,48(sp) + 802052c0: fc22 sd s0,56(sp) + 802052c2: e0a6 sd s1,64(sp) + 802052c4: e4aa sd a0,72(sp) + 802052c6: e8ae sd a1,80(sp) + 802052c8: ecb2 sd a2,88(sp) + 802052ca: f0b6 sd a3,96(sp) + 802052cc: f4ba sd a4,104(sp) + 802052ce: f8be sd a5,112(sp) + 802052d0: fcc2 sd a6,120(sp) + 802052d2: e146 sd a7,128(sp) + 802052d4: e54a sd s2,136(sp) + 802052d6: e94e sd s3,144(sp) + 802052d8: ed52 sd s4,152(sp) + 802052da: f156 sd s5,160(sp) + 802052dc: f55a sd s6,168(sp) + 802052de: f95e sd s7,176(sp) + 802052e0: fd62 sd s8,184(sp) + 802052e2: e1e6 sd s9,192(sp) + 802052e4: e5ea sd s10,200(sp) + 802052e6: e9ee sd s11,208(sp) + 802052e8: edf2 sd t3,216(sp) + 802052ea: f1f6 sd t4,224(sp) + 802052ec: f5fa sd t5,232(sp) + 802052ee: f9fe sd t6,240(sp) + 802052f0: 8a5fd0ef jal ra,80202b94 <kerneltrap> + 802052f4: 6082 ld ra,0(sp) + 802052f6: 6122 ld sp,8(sp) + 802052f8: 61c2 ld gp,16(sp) + 802052fa: 7282 ld t0,32(sp) + 802052fc: 7322 ld t1,40(sp) + 802052fe: 73c2 ld t2,48(sp) + 80205300: 7462 ld s0,56(sp) + 80205302: 6486 ld s1,64(sp) + 80205304: 6526 ld a0,72(sp) + 80205306: 65c6 ld a1,80(sp) + 80205308: 6666 ld a2,88(sp) + 8020530a: 7686 ld a3,96(sp) + 8020530c: 7726 ld a4,104(sp) + 8020530e: 77c6 ld a5,112(sp) + 80205310: 7866 ld a6,120(sp) + 80205312: 688a ld a7,128(sp) + 80205314: 692a ld s2,136(sp) + 80205316: 69ca ld s3,144(sp) + 80205318: 6a6a ld s4,152(sp) + 8020531a: 7a8a ld s5,160(sp) + 8020531c: 7b2a ld s6,168(sp) + 8020531e: 7bca ld s7,176(sp) + 80205320: 7c6a ld s8,184(sp) + 80205322: 6c8e ld s9,192(sp) + 80205324: 6d2e ld s10,200(sp) + 80205326: 6dce ld s11,208(sp) + 80205328: 6e6e ld t3,216(sp) + 8020532a: 7e8e ld t4,224(sp) + 8020532c: 7f2e ld t5,232(sp) + 8020532e: 7fce ld t6,240(sp) + 80205330: 6111 addi sp,sp,256 + 80205332: 10200073 sret ... -0000000080204fee <timerinit>: +000000008020533e <timerinit>: #include "include/proc.h" struct spinlock tickslock; uint ticks; void timerinit() { - 80204fee: 1141 addi sp,sp,-16 - 80204ff0: e406 sd ra,8(sp) - 80204ff2: e022 sd s0,0(sp) - 80204ff4: 0800 addi s0,sp,16 + 8020533e: 1141 addi sp,sp,-16 + 80205340: e406 sd ra,8(sp) + 80205342: e022 sd s0,0(sp) + 80205344: 0800 addi s0,sp,16 initlock(&tickslock, "time"); - 80204ff6: 00005597 auipc a1,0x5 - 80204ffa: b8a58593 addi a1,a1,-1142 # 80209b80 <digits+0x800> - 80204ffe: 00019517 auipc a0,0x19 - 80205002: 40a50513 addi a0,a0,1034 # 8021e408 <tickslock> - 80205006: ffffb097 auipc ra,0xffffb - 8020500a: 67c080e7 jalr 1660(ra) # 80200682 <initlock> + 80205346: 00005597 auipc a1,0x5 + 8020534a: 87258593 addi a1,a1,-1934 # 80209bb8 <digits+0x838> + 8020534e: 00019517 auipc a0,0x19 + 80205352: 0ba50513 addi a0,a0,186 # 8021e408 <tickslock> + 80205356: ffffb097 auipc ra,0xffffb + 8020535a: 32c080e7 jalr 812(ra) # 80200682 <initlock> #ifdef DEBUG printf("timerinit\n"); #endif } - 8020500e: 60a2 ld ra,8(sp) - 80205010: 6402 ld s0,0(sp) - 80205012: 0141 addi sp,sp,16 - 80205014: 8082 ret + 8020535e: 60a2 ld ra,8(sp) + 80205360: 6402 ld s0,0(sp) + 80205362: 0141 addi sp,sp,16 + 80205364: 8082 ret -0000000080205016 <set_next_timeout>: +0000000080205366 <set_next_timeout>: void set_next_timeout() { - 80205016: 1141 addi sp,sp,-16 - 80205018: e422 sd s0,8(sp) - 8020501a: 0800 addi s0,sp,16 + 80205366: 1141 addi sp,sp,-16 + 80205368: e422 sd s0,8(sp) + 8020536a: 0800 addi s0,sp,16 asm volatile("rdtime %0" : "=r" (x) ); - 8020501c: c0102573 rdtime a0 + 8020536c: 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); - 80205020: 001dc7b7 lui a5,0x1dc - 80205024: 13078793 addi a5,a5,304 # 1dc130 <_entry-0x80023ed0> - 80205028: 953e add a0,a0,a5 + 80205370: 001dc7b7 lui a5,0x1dc + 80205374: 13078793 addi a5,a5,304 # 1dc130 <_entry-0x80023ed0> + 80205378: 953e add a0,a0,a5 SBI_CALL_1(SBI_SET_TIMER, stime_value); - 8020502a: 4581 li a1,0 - 8020502c: 4601 li a2,0 - 8020502e: 4681 li a3,0 - 80205030: 4881 li a7,0 - 80205032: 00000073 ecall + 8020537a: 4581 li a1,0 + 8020537c: 4601 li a2,0 + 8020537e: 4681 li a3,0 + 80205380: 4881 li a7,0 + 80205382: 00000073 ecall } - 80205036: 6422 ld s0,8(sp) - 80205038: 0141 addi sp,sp,16 - 8020503a: 8082 ret + 80205386: 6422 ld s0,8(sp) + 80205388: 0141 addi sp,sp,16 + 8020538a: 8082 ret -000000008020503c <timer_tick>: +000000008020538c <timer_tick>: void timer_tick() { - 8020503c: 1101 addi sp,sp,-32 - 8020503e: ec06 sd ra,24(sp) - 80205040: e822 sd s0,16(sp) - 80205042: e426 sd s1,8(sp) - 80205044: 1000 addi s0,sp,32 + 8020538c: 1101 addi sp,sp,-32 + 8020538e: ec06 sd ra,24(sp) + 80205390: e822 sd s0,16(sp) + 80205392: e426 sd s1,8(sp) + 80205394: 1000 addi s0,sp,32 acquire(&tickslock); - 80205046: 00019497 auipc s1,0x19 - 8020504a: 3c248493 addi s1,s1,962 # 8021e408 <tickslock> - 8020504e: 8526 mv a0,s1 - 80205050: ffffb097 auipc ra,0xffffb - 80205054: 676080e7 jalr 1654(ra) # 802006c6 <acquire> + 80205396: 00019497 auipc s1,0x19 + 8020539a: 07248493 addi s1,s1,114 # 8021e408 <tickslock> + 8020539e: 8526 mv a0,s1 + 802053a0: ffffb097 auipc ra,0xffffb + 802053a4: 326080e7 jalr 806(ra) # 802006c6 <acquire> ticks++; - 80205058: 4c9c lw a5,24(s1) - 8020505a: 2785 addiw a5,a5,1 - 8020505c: cc9c sw a5,24(s1) + 802053a8: 4c9c lw a5,24(s1) + 802053aa: 2785 addiw a5,a5,1 + 802053ac: cc9c sw a5,24(s1) wakeup(&ticks); - 8020505e: 00019517 auipc a0,0x19 - 80205062: 3c250513 addi a0,a0,962 # 8021e420 <ticks> - 80205066: ffffd097 auipc ra,0xffffd - 8020506a: 3d2080e7 jalr 978(ra) # 80202438 <wakeup> + 802053ae: 00019517 auipc a0,0x19 + 802053b2: 07250513 addi a0,a0,114 # 8021e420 <ticks> + 802053b6: ffffd097 auipc ra,0xffffd + 802053ba: 082080e7 jalr 130(ra) # 80202438 <wakeup> release(&tickslock); - 8020506e: 8526 mv a0,s1 - 80205070: ffffb097 auipc ra,0xffffb - 80205074: 6aa080e7 jalr 1706(ra) # 8020071a <release> + 802053be: 8526 mv a0,s1 + 802053c0: ffffb097 auipc ra,0xffffb + 802053c4: 35a080e7 jalr 858(ra) # 8020071a <release> set_next_timeout(); - 80205078: 00000097 auipc ra,0x0 - 8020507c: f9e080e7 jalr -98(ra) # 80205016 <set_next_timeout> + 802053c8: 00000097 auipc ra,0x0 + 802053cc: f9e080e7 jalr -98(ra) # 80205366 <set_next_timeout> } - 80205080: 60e2 ld ra,24(sp) - 80205082: 6442 ld s0,16(sp) - 80205084: 64a2 ld s1,8(sp) - 80205086: 6105 addi sp,sp,32 - 80205088: 8082 ret + 802053d0: 60e2 ld ra,24(sp) + 802053d2: 6442 ld s0,16(sp) + 802053d4: 64a2 ld s1,8(sp) + 802053d6: 6105 addi sp,sp,32 + 802053d8: 8082 ret -000000008020508a <disk_init>: +00000000802053da <disk_init>: #else #include "include/virtio.h" #endif void disk_init(void) { - 8020508a: 1141 addi sp,sp,-16 - 8020508c: e406 sd ra,8(sp) - 8020508e: e022 sd s0,0(sp) - 80205090: 0800 addi s0,sp,16 + 802053da: 1141 addi sp,sp,-16 + 802053dc: e406 sd ra,8(sp) + 802053de: e022 sd s0,0(sp) + 802053e0: 0800 addi s0,sp,16 #ifdef QEMU virtio_disk_init(); - 80205092: 00002097 auipc ra,0x2 - 80205096: e8e080e7 jalr -370(ra) # 80206f20 <virtio_disk_init> + 802053e2: 00002097 auipc ra,0x2 + 802053e6: e8e080e7 jalr -370(ra) # 80207270 <virtio_disk_init> #else sdcard_init(); #endif } - 8020509a: 60a2 ld ra,8(sp) - 8020509c: 6402 ld s0,0(sp) - 8020509e: 0141 addi sp,sp,16 - 802050a0: 8082 ret + 802053ea: 60a2 ld ra,8(sp) + 802053ec: 6402 ld s0,0(sp) + 802053ee: 0141 addi sp,sp,16 + 802053f0: 8082 ret -00000000802050a2 <disk_read>: +00000000802053f2 <disk_read>: void disk_read(struct buf *b) { - 802050a2: 1141 addi sp,sp,-16 - 802050a4: e406 sd ra,8(sp) - 802050a6: e022 sd s0,0(sp) - 802050a8: 0800 addi s0,sp,16 + 802053f2: 1141 addi sp,sp,-16 + 802053f4: e406 sd ra,8(sp) + 802053f6: e022 sd s0,0(sp) + 802053f8: 0800 addi s0,sp,16 #ifdef QEMU virtio_disk_rw(b, 0); - 802050aa: 4581 li a1,0 - 802050ac: 00002097 auipc ra,0x2 - 802050b0: ffa080e7 jalr -6(ra) # 802070a6 <virtio_disk_rw> + 802053fa: 4581 li a1,0 + 802053fc: 00002097 auipc ra,0x2 + 80205400: ffa080e7 jalr -6(ra) # 802073f6 <virtio_disk_rw> #else sdcard_read_sector(b->data, b->sectorno); #endif } - 802050b4: 60a2 ld ra,8(sp) - 802050b6: 6402 ld s0,0(sp) - 802050b8: 0141 addi sp,sp,16 - 802050ba: 8082 ret + 80205404: 60a2 ld ra,8(sp) + 80205406: 6402 ld s0,0(sp) + 80205408: 0141 addi sp,sp,16 + 8020540a: 8082 ret -00000000802050bc <disk_write>: +000000008020540c <disk_write>: void disk_write(struct buf *b) { - 802050bc: 1141 addi sp,sp,-16 - 802050be: e406 sd ra,8(sp) - 802050c0: e022 sd s0,0(sp) - 802050c2: 0800 addi s0,sp,16 + 8020540c: 1141 addi sp,sp,-16 + 8020540e: e406 sd ra,8(sp) + 80205410: e022 sd s0,0(sp) + 80205412: 0800 addi s0,sp,16 #ifdef QEMU virtio_disk_rw(b, 1); - 802050c4: 4585 li a1,1 - 802050c6: 00002097 auipc ra,0x2 - 802050ca: fe0080e7 jalr -32(ra) # 802070a6 <virtio_disk_rw> + 80205414: 4585 li a1,1 + 80205416: 00002097 auipc ra,0x2 + 8020541a: fe0080e7 jalr -32(ra) # 802073f6 <virtio_disk_rw> #else sdcard_write_sector(b->data, b->sectorno); #endif } - 802050ce: 60a2 ld ra,8(sp) - 802050d0: 6402 ld s0,0(sp) - 802050d2: 0141 addi sp,sp,16 - 802050d4: 8082 ret + 8020541e: 60a2 ld ra,8(sp) + 80205420: 6402 ld s0,0(sp) + 80205422: 0141 addi sp,sp,16 + 80205424: 8082 ret -00000000802050d6 <disk_intr>: +0000000080205426 <disk_intr>: void disk_intr(void) { - 802050d6: 1141 addi sp,sp,-16 - 802050d8: e406 sd ra,8(sp) - 802050da: e022 sd s0,0(sp) - 802050dc: 0800 addi s0,sp,16 + 80205426: 1141 addi sp,sp,-16 + 80205428: e406 sd ra,8(sp) + 8020542a: e022 sd s0,0(sp) + 8020542c: 0800 addi s0,sp,16 #ifdef QEMU virtio_disk_intr(); - 802050de: 00002097 auipc ra,0x2 - 802050e2: 254080e7 jalr 596(ra) # 80207332 <virtio_disk_intr> + 8020542e: 00002097 auipc ra,0x2 + 80205432: 254080e7 jalr 596(ra) # 80207682 <virtio_disk_intr> #else dmac_intr(DMAC_CHANNEL0); #endif } - 802050e6: 60a2 ld ra,8(sp) - 802050e8: 6402 ld s0,0(sp) - 802050ea: 0141 addi sp,sp,16 - 802050ec: 8082 ret + 80205436: 60a2 ld ra,8(sp) + 80205438: 6402 ld s0,0(sp) + 8020543a: 0141 addi sp,sp,16 + 8020543c: 8082 ret -00000000802050ee <read_fat>: +000000008020543e <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) { - 802050ee: 1101 addi sp,sp,-32 - 802050f0: ec06 sd ra,24(sp) - 802050f2: e822 sd s0,16(sp) - 802050f4: e426 sd s1,8(sp) - 802050f6: e04a sd s2,0(sp) - 802050f8: 1000 addi s0,sp,32 + 8020543e: 1101 addi sp,sp,-32 + 80205440: ec06 sd ra,24(sp) + 80205442: e822 sd s0,16(sp) + 80205444: e426 sd s1,8(sp) + 80205446: e04a sd s2,0(sp) + 80205448: 1000 addi s0,sp,32 if (cluster >= FAT32_EOC) { - 802050fa: 100007b7 lui a5,0x10000 - 802050fe: 17dd addi a5,a5,-9 # ffffff7 <_entry-0x70200009> + 8020544a: 100007b7 lui a5,0x10000 + 8020544e: 17dd addi a5,a5,-9 # ffffff7 <_entry-0x70200009> return cluster; - 80205100: 84aa mv s1,a0 + 80205450: 84aa mv s1,a0 if (cluster >= FAT32_EOC) { - 80205102: 00a7ea63 bltu a5,a0,80205116 <read_fat+0x28> + 80205452: 00a7ea63 bltu a5,a0,80205466 <read_fat+0x28> } if (cluster > fat.data_clus_cnt + 1) { // because cluster number starts at 2, not 0 - 80205106: 00019797 auipc a5,0x19 - 8020510a: 32a7a783 lw a5,810(a5) # 8021e430 <fat+0x8> - 8020510e: 2785 addiw a5,a5,1 + 80205456: 00019797 auipc a5,0x19 + 8020545a: fda7a783 lw a5,-38(a5) # 8021e430 <fat+0x8> + 8020545e: 2785 addiw a5,a5,1 return 0; - 80205110: 4481 li s1,0 + 80205460: 4481 li s1,0 if (cluster > fat.data_clus_cnt + 1) { // because cluster number starts at 2, not 0 - 80205112: 00a7f963 bgeu a5,a0,80205124 <read_fat+0x36> + 80205462: 00a7f963 bgeu a5,a0,80205474 <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; } - 80205116: 8526 mv a0,s1 - 80205118: 60e2 ld ra,24(sp) - 8020511a: 6442 ld s0,16(sp) - 8020511c: 64a2 ld s1,8(sp) - 8020511e: 6902 ld s2,0(sp) - 80205120: 6105 addi sp,sp,32 - 80205122: 8082 ret + 80205466: 8526 mv a0,s1 + 80205468: 60e2 ld ra,24(sp) + 8020546a: 6442 ld s0,16(sp) + 8020546c: 64a2 ld s1,8(sp) + 8020546e: 6902 ld s2,0(sp) + 80205470: 6105 addi sp,sp,32 + 80205472: 8082 ret return fat.bpb.rsvd_sec_cnt + (cluster << 2) / fat.bpb.byts_per_sec + fat.bpb.fat_sz * (fat_num - 1); - 80205124: 0025149b slliw s1,a0,0x2 - 80205128: 00019917 auipc s2,0x19 - 8020512c: 30090913 addi s2,s2,768 # 8021e428 <fat> - 80205130: 01095783 lhu a5,16(s2) - 80205134: 02f4d7bb divuw a5,s1,a5 - 80205138: 01495583 lhu a1,20(s2) + 80205474: 0025149b slliw s1,a0,0x2 + 80205478: 00019917 auipc s2,0x19 + 8020547c: fb090913 addi s2,s2,-80 # 8021e428 <fat> + 80205480: 01095783 lhu a5,16(s2) + 80205484: 02f4d7bb divuw a5,s1,a5 + 80205488: 01495583 lhu a1,20(s2) struct buf *b = bread(0, fat_sec); - 8020513c: 9dbd addw a1,a1,a5 - 8020513e: 4501 li a0,0 - 80205140: ffffe097 auipc ra,0xffffe - 80205144: 282080e7 jalr 642(ra) # 802033c2 <bread> + 8020548c: 9dbd addw a1,a1,a5 + 8020548e: 4501 li a0,0 + 80205490: ffffe097 auipc ra,0xffffe + 80205494: 24e080e7 jalr 590(ra) # 802036de <bread> return (cluster << 2) % fat.bpb.byts_per_sec; - 80205148: 01095783 lhu a5,16(s2) - 8020514c: 02f4f4bb remuw s1,s1,a5 + 80205498: 01095783 lhu a5,16(s2) + 8020549c: 02f4f4bb remuw s1,s1,a5 uint32 next_clus = *(uint32 *)(b->data + fat_offset_of_clus(cluster)); - 80205150: 1482 slli s1,s1,0x20 - 80205152: 9081 srli s1,s1,0x20 - 80205154: 009507b3 add a5,a0,s1 - 80205158: 4fa4 lw s1,88(a5) + 802054a0: 1482 slli s1,s1,0x20 + 802054a2: 9081 srli s1,s1,0x20 + 802054a4: 009507b3 add a5,a0,s1 + 802054a8: 4fa4 lw s1,88(a5) brelse(b); - 8020515a: ffffe097 auipc ra,0xffffe - 8020515e: 394080e7 jalr 916(ra) # 802034ee <brelse> + 802054aa: ffffe097 auipc ra,0xffffe + 802054ae: 360080e7 jalr 864(ra) # 8020380a <brelse> return next_clus; - 80205162: bf55 j 80205116 <read_fat+0x28> + 802054b2: bf55 j 80205466 <read_fat+0x28> -0000000080205164 <alloc_clus>: +00000000802054b4 <alloc_clus>: brelse(b); } } static uint32 alloc_clus(uint8 dev) { - 80205164: 711d addi sp,sp,-96 - 80205166: ec86 sd ra,88(sp) - 80205168: e8a2 sd s0,80(sp) - 8020516a: e4a6 sd s1,72(sp) - 8020516c: e0ca sd s2,64(sp) - 8020516e: fc4e sd s3,56(sp) - 80205170: f852 sd s4,48(sp) - 80205172: f456 sd s5,40(sp) - 80205174: f05a sd s6,32(sp) - 80205176: ec5e sd s7,24(sp) - 80205178: e862 sd s8,16(sp) - 8020517a: e466 sd s9,8(sp) - 8020517c: 1080 addi s0,sp,96 + 802054b4: 711d addi sp,sp,-96 + 802054b6: ec86 sd ra,88(sp) + 802054b8: e8a2 sd s0,80(sp) + 802054ba: e4a6 sd s1,72(sp) + 802054bc: e0ca sd s2,64(sp) + 802054be: fc4e sd s3,56(sp) + 802054c0: f852 sd s4,48(sp) + 802054c2: f456 sd s5,40(sp) + 802054c4: f05a sd s6,32(sp) + 802054c6: ec5e sd s7,24(sp) + 802054c8: e862 sd s8,16(sp) + 802054ca: e466 sd s9,8(sp) + 802054cc: 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; - 8020517e: 00019797 auipc a5,0x19 - 80205182: 2aa78793 addi a5,a5,682 # 8021e428 <fat> - 80205186: 0147db83 lhu s7,20(a5) + 802054ce: 00019797 auipc a5,0x19 + 802054d2: f5a78793 addi a5,a5,-166 # 8021e428 <fat> + 802054d6: 0147db83 lhu s7,20(a5) uint32 const ent_per_sec = fat.bpb.byts_per_sec / sizeof(uint32); - 8020518a: 0107d903 lhu s2,16(a5) + 802054da: 0107d903 lhu s2,16(a5) for (uint32 i = 0; i < fat.bpb.fat_sz; i++, sec++) { - 8020518e: 539c lw a5,32(a5) - 80205190: 10078363 beqz a5,80205296 <alloc_clus+0x132> - 80205194: 0029591b srliw s2,s2,0x2 - 80205198: 0009099b sext.w s3,s2 - 8020519c: 4b01 li s6,0 + 802054de: 539c lw a5,32(a5) + 802054e0: 10078363 beqz a5,802055e6 <alloc_clus+0x132> + 802054e4: 0029591b srliw s2,s2,0x2 + 802054e8: 0009099b sext.w s3,s2 + 802054ec: 4b01 li s6,0 b = bread(dev, sec); - 8020519e: 00050a9b sext.w s5,a0 + 802054ee: 00050a9b sext.w s5,a0 for (uint32 j = 0; j < ent_per_sec; j++) { - 802051a2: 4c01 li s8,0 + 802054f2: 4c01 li s8,0 for (uint32 i = 0; i < fat.bpb.fat_sz; i++, sec++) { - 802051a4: 00019c97 auipc s9,0x19 - 802051a8: 284c8c93 addi s9,s9,644 # 8021e428 <fat> - 802051ac: a0c9 j 8020526e <alloc_clus+0x10a> + 802054f4: 00019c97 auipc s9,0x19 + 802054f8: f34c8c93 addi s9,s9,-204 # 8021e428 <fat> + 802054fc: a0c9 j 802055be <alloc_clus+0x10a> if (((uint32 *)(b->data))[j] == 0) { ((uint32 *)(b->data))[j] = FAT32_EOC + 7; - 802051ae: 100007b7 lui a5,0x10000 - 802051b2: 17fd addi a5,a5,-1 # fffffff <_entry-0x70200001> - 802051b4: c29c sw a5,0(a3) + 802054fe: 100007b7 lui a5,0x10000 + 80205502: 17fd addi a5,a5,-1 # fffffff <_entry-0x70200001> + 80205504: c29c sw a5,0(a3) bwrite(b); - 802051b6: 8552 mv a0,s4 - 802051b8: ffffe097 auipc ra,0xffffe - 802051bc: 2fa080e7 jalr 762(ra) # 802034b2 <bwrite> + 80205506: 8552 mv a0,s4 + 80205508: ffffe097 auipc ra,0xffffe + 8020550c: 2c6080e7 jalr 710(ra) # 802037ce <bwrite> brelse(b); - 802051c0: 8552 mv a0,s4 - 802051c2: ffffe097 auipc ra,0xffffe - 802051c6: 32c080e7 jalr 812(ra) # 802034ee <brelse> + 80205510: 8552 mv a0,s4 + 80205512: ffffe097 auipc ra,0xffffe + 80205516: 2f8080e7 jalr 760(ra) # 8020380a <brelse> uint32 clus = i * ent_per_sec + j; - 802051ca: 0369093b mulw s2,s2,s6 - 802051ce: 0099093b addw s2,s2,s1 - 802051d2: 00090a9b sext.w s5,s2 + 8020551a: 0369093b mulw s2,s2,s6 + 8020551e: 0099093b addw s2,s2,s1 + 80205522: 00090a9b sext.w s5,s2 return ((cluster - 2) * fat.bpb.sec_per_clus) + fat.first_data_sec; - 802051d6: 00019717 auipc a4,0x19 - 802051da: 25270713 addi a4,a4,594 # 8021e428 <fat> - 802051de: 01274783 lbu a5,18(a4) - 802051e2: ffe9099b addiw s3,s2,-2 - 802051e6: 02f989bb mulw s3,s3,a5 - 802051ea: 4318 lw a4,0(a4) - 802051ec: 00e989bb addw s3,s3,a4 + 80205526: 00019717 auipc a4,0x19 + 8020552a: f0270713 addi a4,a4,-254 # 8021e428 <fat> + 8020552e: 01274783 lbu a5,18(a4) + 80205532: ffe9099b addiw s3,s2,-2 + 80205536: 02f989bb mulw s3,s3,a5 + 8020553a: 4318 lw a4,0(a4) + 8020553c: 00e989bb addw s3,s3,a4 for (int i = 0; i < fat.bpb.sec_per_clus; i++) { - 802051f0: c7b1 beqz a5,8020523c <alloc_clus+0xd8> - 802051f2: 4901 li s2,0 - 802051f4: 00019a17 auipc s4,0x19 - 802051f8: 234a0a13 addi s4,s4,564 # 8021e428 <fat> + 80205540: c7b1 beqz a5,8020558c <alloc_clus+0xd8> + 80205542: 4901 li s2,0 + 80205544: 00019a17 auipc s4,0x19 + 80205548: ee4a0a13 addi s4,s4,-284 # 8021e428 <fat> b = bread(0, sec++); - 802051fc: 013905bb addw a1,s2,s3 - 80205200: 4501 li a0,0 - 80205202: ffffe097 auipc ra,0xffffe - 80205206: 1c0080e7 jalr 448(ra) # 802033c2 <bread> - 8020520a: 84aa mv s1,a0 + 8020554c: 013905bb addw a1,s2,s3 + 80205550: 4501 li a0,0 + 80205552: ffffe097 auipc ra,0xffffe + 80205556: 18c080e7 jalr 396(ra) # 802036de <bread> + 8020555a: 84aa mv s1,a0 memset(b->data, 0, BSIZE); - 8020520c: 20000613 li a2,512 - 80205210: 4581 li a1,0 - 80205212: 05850513 addi a0,a0,88 - 80205216: ffffb097 auipc ra,0xffffb - 8020521a: 54c080e7 jalr 1356(ra) # 80200762 <memset> + 8020555c: 20000613 li a2,512 + 80205560: 4581 li a1,0 + 80205562: 05850513 addi a0,a0,88 + 80205566: ffffb097 auipc ra,0xffffb + 8020556a: 1fc080e7 jalr 508(ra) # 80200762 <memset> bwrite(b); - 8020521e: 8526 mv a0,s1 - 80205220: ffffe097 auipc ra,0xffffe - 80205224: 292080e7 jalr 658(ra) # 802034b2 <bwrite> + 8020556e: 8526 mv a0,s1 + 80205570: ffffe097 auipc ra,0xffffe + 80205574: 25e080e7 jalr 606(ra) # 802037ce <bwrite> brelse(b); - 80205228: 8526 mv a0,s1 - 8020522a: ffffe097 auipc ra,0xffffe - 8020522e: 2c4080e7 jalr 708(ra) # 802034ee <brelse> + 80205578: 8526 mv a0,s1 + 8020557a: ffffe097 auipc ra,0xffffe + 8020557e: 290080e7 jalr 656(ra) # 8020380a <brelse> for (int i = 0; i < fat.bpb.sec_per_clus; i++) { - 80205232: 2905 addiw s2,s2,1 - 80205234: 012a4783 lbu a5,18(s4) - 80205238: fcf942e3 blt s2,a5,802051fc <alloc_clus+0x98> + 80205582: 2905 addiw s2,s2,1 + 80205584: 012a4783 lbu a5,18(s4) + 80205588: fcf942e3 blt s2,a5,8020554c <alloc_clus+0x98> } } brelse(b); } panic("no clusters"); } - 8020523c: 8556 mv a0,s5 - 8020523e: 60e6 ld ra,88(sp) - 80205240: 6446 ld s0,80(sp) - 80205242: 64a6 ld s1,72(sp) - 80205244: 6906 ld s2,64(sp) - 80205246: 79e2 ld s3,56(sp) - 80205248: 7a42 ld s4,48(sp) - 8020524a: 7aa2 ld s5,40(sp) - 8020524c: 7b02 ld s6,32(sp) - 8020524e: 6be2 ld s7,24(sp) - 80205250: 6c42 ld s8,16(sp) - 80205252: 6ca2 ld s9,8(sp) - 80205254: 6125 addi sp,sp,96 - 80205256: 8082 ret + 8020558c: 8556 mv a0,s5 + 8020558e: 60e6 ld ra,88(sp) + 80205590: 6446 ld s0,80(sp) + 80205592: 64a6 ld s1,72(sp) + 80205594: 6906 ld s2,64(sp) + 80205596: 79e2 ld s3,56(sp) + 80205598: 7a42 ld s4,48(sp) + 8020559a: 7aa2 ld s5,40(sp) + 8020559c: 7b02 ld s6,32(sp) + 8020559e: 6be2 ld s7,24(sp) + 802055a0: 6c42 ld s8,16(sp) + 802055a2: 6ca2 ld s9,8(sp) + 802055a4: 6125 addi sp,sp,96 + 802055a6: 8082 ret brelse(b); - 80205258: 8552 mv a0,s4 - 8020525a: ffffe097 auipc ra,0xffffe - 8020525e: 294080e7 jalr 660(ra) # 802034ee <brelse> + 802055a8: 8552 mv a0,s4 + 802055aa: ffffe097 auipc ra,0xffffe + 802055ae: 260080e7 jalr 608(ra) # 8020380a <brelse> for (uint32 i = 0; i < fat.bpb.fat_sz; i++, sec++) { - 80205262: 2b05 addiw s6,s6,1 - 80205264: 2b85 addiw s7,s7,1 # fffffffffffff001 <ebss_clear+0xffffffff7fdd9001> - 80205266: 020ca783 lw a5,32(s9) - 8020526a: 02fb7663 bgeu s6,a5,80205296 <alloc_clus+0x132> + 802055b2: 2b05 addiw s6,s6,1 + 802055b4: 2b85 addiw s7,s7,1 # fffffffffffff001 <ebss_clear+0xffffffff7fdd9001> + 802055b6: 020ca783 lw a5,32(s9) + 802055ba: 02fb7663 bgeu s6,a5,802055e6 <alloc_clus+0x132> b = bread(dev, sec); - 8020526e: 85de mv a1,s7 - 80205270: 8556 mv a0,s5 - 80205272: ffffe097 auipc ra,0xffffe - 80205276: 150080e7 jalr 336(ra) # 802033c2 <bread> - 8020527a: 8a2a mv s4,a0 + 802055be: 85de mv a1,s7 + 802055c0: 8556 mv a0,s5 + 802055c2: ffffe097 auipc ra,0xffffe + 802055c6: 11c080e7 jalr 284(ra) # 802036de <bread> + 802055ca: 8a2a mv s4,a0 for (uint32 j = 0; j < ent_per_sec; j++) { - 8020527c: fc098ee3 beqz s3,80205258 <alloc_clus+0xf4> - 80205280: 05850793 addi a5,a0,88 - 80205284: 84e2 mv s1,s8 + 802055cc: fc098ee3 beqz s3,802055a8 <alloc_clus+0xf4> + 802055d0: 05850793 addi a5,a0,88 + 802055d4: 84e2 mv s1,s8 if (((uint32 *)(b->data))[j] == 0) { - 80205286: 86be mv a3,a5 - 80205288: 4398 lw a4,0(a5) - 8020528a: d315 beqz a4,802051ae <alloc_clus+0x4a> + 802055d6: 86be mv a3,a5 + 802055d8: 4398 lw a4,0(a5) + 802055da: d315 beqz a4,802054fe <alloc_clus+0x4a> for (uint32 j = 0; j < ent_per_sec; j++) { - 8020528c: 2485 addiw s1,s1,1 - 8020528e: 0791 addi a5,a5,4 - 80205290: fe999be3 bne s3,s1,80205286 <alloc_clus+0x122> - 80205294: b7d1 j 80205258 <alloc_clus+0xf4> + 802055dc: 2485 addiw s1,s1,1 + 802055de: 0791 addi a5,a5,4 + 802055e0: fe999be3 bne s3,s1,802055d6 <alloc_clus+0x122> + 802055e4: b7d1 j 802055a8 <alloc_clus+0xf4> panic("no clusters"); - 80205296: 00005517 auipc a0,0x5 - 8020529a: 8f250513 addi a0,a0,-1806 # 80209b88 <digits+0x808> - 8020529e: ffffb097 auipc ra,0xffffb - 802052a2: ea6080e7 jalr -346(ra) # 80200144 <panic> + 802055e6: 00004517 auipc a0,0x4 + 802055ea: 5da50513 addi a0,a0,1498 # 80209bc0 <digits+0x840> + 802055ee: ffffb097 auipc ra,0xffffb + 802055f2: b56080e7 jalr -1194(ra) # 80200144 <panic> -00000000802052a6 <write_fat>: +00000000802055f6 <write_fat>: if (cluster > fat.data_clus_cnt + 1) { - 802052a6: 00019797 auipc a5,0x19 - 802052aa: 18a7a783 lw a5,394(a5) # 8021e430 <fat+0x8> - 802052ae: 2785 addiw a5,a5,1 - 802052b0: 06a7e963 bltu a5,a0,80205322 <write_fat+0x7c> -{ - 802052b4: 7179 addi sp,sp,-48 - 802052b6: f406 sd ra,40(sp) - 802052b8: f022 sd s0,32(sp) - 802052ba: ec26 sd s1,24(sp) - 802052bc: e84a sd s2,16(sp) - 802052be: e44e sd s3,8(sp) - 802052c0: e052 sd s4,0(sp) - 802052c2: 1800 addi s0,sp,48 - 802052c4: 89ae mv s3,a1 + 802055f6: 00019797 auipc a5,0x19 + 802055fa: e3a7a783 lw a5,-454(a5) # 8021e430 <fat+0x8> + 802055fe: 2785 addiw a5,a5,1 + 80205600: 06a7e963 bltu a5,a0,80205672 <write_fat+0x7c> +{ + 80205604: 7179 addi sp,sp,-48 + 80205606: f406 sd ra,40(sp) + 80205608: f022 sd s0,32(sp) + 8020560a: ec26 sd s1,24(sp) + 8020560c: e84a sd s2,16(sp) + 8020560e: e44e sd s3,8(sp) + 80205610: e052 sd s4,0(sp) + 80205612: 1800 addi s0,sp,48 + 80205614: 89ae mv s3,a1 return fat.bpb.rsvd_sec_cnt + (cluster << 2) / fat.bpb.byts_per_sec + fat.bpb.fat_sz * (fat_num - 1); - 802052c6: 0025149b slliw s1,a0,0x2 - 802052ca: 00019a17 auipc s4,0x19 - 802052ce: 15ea0a13 addi s4,s4,350 # 8021e428 <fat> - 802052d2: 010a5783 lhu a5,16(s4) - 802052d6: 02f4d7bb divuw a5,s1,a5 - 802052da: 014a5583 lhu a1,20(s4) + 80205616: 0025149b slliw s1,a0,0x2 + 8020561a: 00019a17 auipc s4,0x19 + 8020561e: e0ea0a13 addi s4,s4,-498 # 8021e428 <fat> + 80205622: 010a5783 lhu a5,16(s4) + 80205626: 02f4d7bb divuw a5,s1,a5 + 8020562a: 014a5583 lhu a1,20(s4) struct buf *b = bread(0, fat_sec); - 802052de: 9dbd addw a1,a1,a5 - 802052e0: 4501 li a0,0 - 802052e2: ffffe097 auipc ra,0xffffe - 802052e6: 0e0080e7 jalr 224(ra) # 802033c2 <bread> - 802052ea: 892a mv s2,a0 + 8020562e: 9dbd addw a1,a1,a5 + 80205630: 4501 li a0,0 + 80205632: ffffe097 auipc ra,0xffffe + 80205636: 0ac080e7 jalr 172(ra) # 802036de <bread> + 8020563a: 892a mv s2,a0 return (cluster << 2) % fat.bpb.byts_per_sec; - 802052ec: 010a5783 lhu a5,16(s4) - 802052f0: 02f4f4bb remuw s1,s1,a5 + 8020563c: 010a5783 lhu a5,16(s4) + 80205640: 02f4f4bb remuw s1,s1,a5 *(uint32 *)(b->data + off) = content; - 802052f4: 1482 slli s1,s1,0x20 - 802052f6: 9081 srli s1,s1,0x20 - 802052f8: 94aa add s1,s1,a0 - 802052fa: 0534ac23 sw s3,88(s1) + 80205644: 1482 slli s1,s1,0x20 + 80205646: 9081 srli s1,s1,0x20 + 80205648: 94aa add s1,s1,a0 + 8020564a: 0534ac23 sw s3,88(s1) bwrite(b); - 802052fe: ffffe097 auipc ra,0xffffe - 80205302: 1b4080e7 jalr 436(ra) # 802034b2 <bwrite> + 8020564e: ffffe097 auipc ra,0xffffe + 80205652: 180080e7 jalr 384(ra) # 802037ce <bwrite> brelse(b); - 80205306: 854a mv a0,s2 - 80205308: ffffe097 auipc ra,0xffffe - 8020530c: 1e6080e7 jalr 486(ra) # 802034ee <brelse> + 80205656: 854a mv a0,s2 + 80205658: ffffe097 auipc ra,0xffffe + 8020565c: 1b2080e7 jalr 434(ra) # 8020380a <brelse> return 0; - 80205310: 4501 li a0,0 -} - 80205312: 70a2 ld ra,40(sp) - 80205314: 7402 ld s0,32(sp) - 80205316: 64e2 ld s1,24(sp) - 80205318: 6942 ld s2,16(sp) - 8020531a: 69a2 ld s3,8(sp) - 8020531c: 6a02 ld s4,0(sp) - 8020531e: 6145 addi sp,sp,48 - 80205320: 8082 ret + 80205660: 4501 li a0,0 +} + 80205662: 70a2 ld ra,40(sp) + 80205664: 7402 ld s0,32(sp) + 80205666: 64e2 ld s1,24(sp) + 80205668: 6942 ld s2,16(sp) + 8020566a: 69a2 ld s3,8(sp) + 8020566c: 6a02 ld s4,0(sp) + 8020566e: 6145 addi sp,sp,48 + 80205670: 8082 ret return -1; - 80205322: 557d li a0,-1 + 80205672: 557d li a0,-1 } - 80205324: 8082 ret + 80205674: 8082 ret -0000000080205326 <reloc_clus>: +0000000080205676 <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) { - 80205326: 715d addi sp,sp,-80 - 80205328: e486 sd ra,72(sp) - 8020532a: e0a2 sd s0,64(sp) - 8020532c: fc26 sd s1,56(sp) - 8020532e: f84a sd s2,48(sp) - 80205330: f44e sd s3,40(sp) - 80205332: f052 sd s4,32(sp) - 80205334: ec56 sd s5,24(sp) - 80205336: e85a sd s6,16(sp) - 80205338: e45e sd s7,8(sp) - 8020533a: 0880 addi s0,sp,80 - 8020533c: 84aa mv s1,a0 - 8020533e: 8a2e mv s4,a1 + 80205676: 715d addi sp,sp,-80 + 80205678: e486 sd ra,72(sp) + 8020567a: e0a2 sd s0,64(sp) + 8020567c: fc26 sd s1,56(sp) + 8020567e: f84a sd s2,48(sp) + 80205680: f44e sd s3,40(sp) + 80205682: f052 sd s4,32(sp) + 80205684: ec56 sd s5,24(sp) + 80205686: e85a sd s6,16(sp) + 80205688: e45e sd s7,8(sp) + 8020568a: 0880 addi s0,sp,80 + 8020568c: 84aa mv s1,a0 + 8020568e: 8a2e mv s4,a1 int clus_num = off / fat.byts_per_clus; - 80205340: 00019b97 auipc s7,0x19 - 80205344: 0f4bab83 lw s7,244(s7) # 8021e434 <fat+0xc> - 80205348: 0375d9bb divuw s3,a1,s7 + 80205690: 00019b97 auipc s7,0x19 + 80205694: da4bab83 lw s7,-604(s7) # 8021e434 <fat+0xc> + 80205698: 0375d9bb divuw s3,a1,s7 while (clus_num > entry->clus_cnt) { - 8020534c: 11052703 lw a4,272(a0) - 80205350: 07377563 bgeu a4,s3,802053ba <reloc_clus+0x94> - 80205354: 8b32 mv s6,a2 + 8020569c: 11052703 lw a4,272(a0) + 802056a0: 07377563 bgeu a4,s3,8020570a <reloc_clus+0x94> + 802056a4: 8b32 mv s6,a2 int clus = read_fat(entry->cur_clus); if (clus >= FAT32_EOC) { - 80205356: 10000ab7 lui s5,0x10000 - 8020535a: 1add addi s5,s5,-9 # ffffff7 <_entry-0x70200009> - 8020535c: a81d j 80205392 <reloc_clus+0x6c> + 802056a6: 10000ab7 lui s5,0x10000 + 802056aa: 1add addi s5,s5,-9 # ffffff7 <_entry-0x70200009> + 802056ac: a81d j 802056e2 <reloc_clus+0x6c> if (alloc) { clus = alloc_clus(entry->dev); - 8020535e: 1144c503 lbu a0,276(s1) - 80205362: 00000097 auipc ra,0x0 - 80205366: e02080e7 jalr -510(ra) # 80205164 <alloc_clus> - 8020536a: 0005091b sext.w s2,a0 + 802056ae: 1144c503 lbu a0,276(s1) + 802056b2: 00000097 auipc ra,0x0 + 802056b6: e02080e7 jalr -510(ra) # 802054b4 <alloc_clus> + 802056ba: 0005091b sext.w s2,a0 write_fat(entry->cur_clus, clus); - 8020536e: 85ca mv a1,s2 - 80205370: 10c4a503 lw a0,268(s1) - 80205374: 00000097 auipc ra,0x0 - 80205378: f32080e7 jalr -206(ra) # 802052a6 <write_fat> + 802056be: 85ca mv a1,s2 + 802056c0: 10c4a503 lw a0,268(s1) + 802056c4: 00000097 auipc ra,0x0 + 802056c8: f32080e7 jalr -206(ra) # 802055f6 <write_fat> entry->cur_clus = entry->first_clus; entry->clus_cnt = 0; return -1; } } entry->cur_clus = clus; - 8020537c: 1124a623 sw s2,268(s1) + 802056cc: 1124a623 sw s2,268(s1) entry->clus_cnt++; - 80205380: 1104a783 lw a5,272(s1) - 80205384: 2785 addiw a5,a5,1 - 80205386: 0007871b sext.w a4,a5 - 8020538a: 10f4a823 sw a5,272(s1) + 802056d0: 1104a783 lw a5,272(s1) + 802056d4: 2785 addiw a5,a5,1 + 802056d6: 0007871b sext.w a4,a5 + 802056da: 10f4a823 sw a5,272(s1) while (clus_num > entry->clus_cnt) { - 8020538e: 03377663 bgeu a4,s3,802053ba <reloc_clus+0x94> + 802056de: 03377663 bgeu a4,s3,8020570a <reloc_clus+0x94> int clus = read_fat(entry->cur_clus); - 80205392: 10c4a503 lw a0,268(s1) - 80205396: 00000097 auipc ra,0x0 - 8020539a: d58080e7 jalr -680(ra) # 802050ee <read_fat> - 8020539e: 0005091b sext.w s2,a0 + 802056e2: 10c4a503 lw a0,268(s1) + 802056e6: 00000097 auipc ra,0x0 + 802056ea: d58080e7 jalr -680(ra) # 8020543e <read_fat> + 802056ee: 0005091b sext.w s2,a0 if (clus >= FAT32_EOC) { - 802053a2: fd2adde3 bge s5,s2,8020537c <reloc_clus+0x56> + 802056f2: fd2adde3 bge s5,s2,802056cc <reloc_clus+0x56> if (alloc) { - 802053a6: fa0b1ce3 bnez s6,8020535e <reloc_clus+0x38> + 802056f6: fa0b1ce3 bnez s6,802056ae <reloc_clus+0x38> entry->cur_clus = entry->first_clus; - 802053aa: 1044a783 lw a5,260(s1) - 802053ae: 10f4a623 sw a5,268(s1) + 802056fa: 1044a783 lw a5,260(s1) + 802056fe: 10f4a623 sw a5,268(s1) entry->clus_cnt = 0; - 802053b2: 1004a823 sw zero,272(s1) + 80205702: 1004a823 sw zero,272(s1) return -1; - 802053b6: 557d li a0,-1 - 802053b8: a881 j 80205408 <reloc_clus+0xe2> + 80205706: 557d li a0,-1 + 80205708: a881 j 80205758 <reloc_clus+0xe2> } if (clus_num < entry->clus_cnt) { - 802053ba: 04e9f163 bgeu s3,a4,802053fc <reloc_clus+0xd6> + 8020570a: 04e9f163 bgeu s3,a4,8020574c <reloc_clus+0xd6> entry->cur_clus = entry->first_clus; - 802053be: 1044a783 lw a5,260(s1) - 802053c2: 10f4a623 sw a5,268(s1) + 8020570e: 1044a783 lw a5,260(s1) + 80205712: 10f4a623 sw a5,268(s1) entry->clus_cnt = 0; - 802053c6: 1004a823 sw zero,272(s1) + 80205716: 1004a823 sw zero,272(s1) while (entry->clus_cnt < clus_num) { - 802053ca: 037a6963 bltu s4,s7,802053fc <reloc_clus+0xd6> + 8020571a: 037a6963 bltu s4,s7,8020574c <reloc_clus+0xd6> entry->cur_clus = read_fat(entry->cur_clus); if (entry->cur_clus >= FAT32_EOC) { - 802053ce: 10000937 lui s2,0x10000 - 802053d2: 195d addi s2,s2,-9 # ffffff7 <_entry-0x70200009> + 8020571e: 10000937 lui s2,0x10000 + 80205722: 195d addi s2,s2,-9 # ffffff7 <_entry-0x70200009> entry->cur_clus = read_fat(entry->cur_clus); - 802053d4: 10c4a503 lw a0,268(s1) - 802053d8: 00000097 auipc ra,0x0 - 802053dc: d16080e7 jalr -746(ra) # 802050ee <read_fat> - 802053e0: 2501 sext.w a0,a0 - 802053e2: 10a4a623 sw a0,268(s1) + 80205724: 10c4a503 lw a0,268(s1) + 80205728: 00000097 auipc ra,0x0 + 8020572c: d16080e7 jalr -746(ra) # 8020543e <read_fat> + 80205730: 2501 sext.w a0,a0 + 80205732: 10a4a623 sw a0,268(s1) if (entry->cur_clus >= FAT32_EOC) { - 802053e6: 02a96c63 bltu s2,a0,8020541e <reloc_clus+0xf8> + 80205736: 02a96c63 bltu s2,a0,8020576e <reloc_clus+0xf8> panic("reloc_clus"); } entry->clus_cnt++; - 802053ea: 1104a783 lw a5,272(s1) - 802053ee: 2785 addiw a5,a5,1 - 802053f0: 0007871b sext.w a4,a5 - 802053f4: 10f4a823 sw a5,272(s1) + 8020573a: 1104a783 lw a5,272(s1) + 8020573e: 2785 addiw a5,a5,1 + 80205740: 0007871b sext.w a4,a5 + 80205744: 10f4a823 sw a5,272(s1) while (entry->clus_cnt < clus_num) { - 802053f8: fd376ee3 bltu a4,s3,802053d4 <reloc_clus+0xae> + 80205748: fd376ee3 bltu a4,s3,80205724 <reloc_clus+0xae> } } return off % fat.byts_per_clus; - 802053fc: 00019797 auipc a5,0x19 - 80205400: 0387a783 lw a5,56(a5) # 8021e434 <fat+0xc> - 80205404: 02fa753b remuw a0,s4,a5 -} - 80205408: 60a6 ld ra,72(sp) - 8020540a: 6406 ld s0,64(sp) - 8020540c: 74e2 ld s1,56(sp) - 8020540e: 7942 ld s2,48(sp) - 80205410: 79a2 ld s3,40(sp) - 80205412: 7a02 ld s4,32(sp) - 80205414: 6ae2 ld s5,24(sp) - 80205416: 6b42 ld s6,16(sp) - 80205418: 6ba2 ld s7,8(sp) - 8020541a: 6161 addi sp,sp,80 - 8020541c: 8082 ret + 8020574c: 00019797 auipc a5,0x19 + 80205750: ce87a783 lw a5,-792(a5) # 8021e434 <fat+0xc> + 80205754: 02fa753b remuw a0,s4,a5 +} + 80205758: 60a6 ld ra,72(sp) + 8020575a: 6406 ld s0,64(sp) + 8020575c: 74e2 ld s1,56(sp) + 8020575e: 7942 ld s2,48(sp) + 80205760: 79a2 ld s3,40(sp) + 80205762: 7a02 ld s4,32(sp) + 80205764: 6ae2 ld s5,24(sp) + 80205766: 6b42 ld s6,16(sp) + 80205768: 6ba2 ld s7,8(sp) + 8020576a: 6161 addi sp,sp,80 + 8020576c: 8082 ret panic("reloc_clus"); - 8020541e: 00004517 auipc a0,0x4 - 80205422: 77a50513 addi a0,a0,1914 # 80209b98 <digits+0x818> - 80205426: ffffb097 auipc ra,0xffffb - 8020542a: d1e080e7 jalr -738(ra) # 80200144 <panic> - -000000008020542e <rw_clus>: -{ - 8020542e: 7119 addi sp,sp,-128 - 80205430: fc86 sd ra,120(sp) - 80205432: f8a2 sd s0,112(sp) - 80205434: f4a6 sd s1,104(sp) - 80205436: f0ca sd s2,96(sp) - 80205438: ecce sd s3,88(sp) - 8020543a: e8d2 sd s4,80(sp) - 8020543c: e4d6 sd s5,72(sp) - 8020543e: e0da sd s6,64(sp) - 80205440: fc5e sd s7,56(sp) - 80205442: f862 sd s8,48(sp) - 80205444: f466 sd s9,40(sp) - 80205446: f06a sd s10,32(sp) - 80205448: ec6e sd s11,24(sp) - 8020544a: 0100 addi s0,sp,128 - 8020544c: f8c43423 sd a2,-120(s0) - 80205450: 8b36 mv s6,a3 - 80205452: 8c3e mv s8,a5 + 8020576e: 00004517 auipc a0,0x4 + 80205772: 46250513 addi a0,a0,1122 # 80209bd0 <digits+0x850> + 80205776: ffffb097 auipc ra,0xffffb + 8020577a: 9ce080e7 jalr -1586(ra) # 80200144 <panic> + +000000008020577e <rw_clus>: +{ + 8020577e: 7119 addi sp,sp,-128 + 80205780: fc86 sd ra,120(sp) + 80205782: f8a2 sd s0,112(sp) + 80205784: f4a6 sd s1,104(sp) + 80205786: f0ca sd s2,96(sp) + 80205788: ecce sd s3,88(sp) + 8020578a: e8d2 sd s4,80(sp) + 8020578c: e4d6 sd s5,72(sp) + 8020578e: e0da sd s6,64(sp) + 80205790: fc5e sd s7,56(sp) + 80205792: f862 sd s8,48(sp) + 80205794: f466 sd s9,40(sp) + 80205796: f06a sd s10,32(sp) + 80205798: ec6e sd s11,24(sp) + 8020579a: 0100 addi s0,sp,128 + 8020579c: f8c43423 sd a2,-120(s0) + 802057a0: 8b36 mv s6,a3 + 802057a2: 8c3e mv s8,a5 if (off + n > fat.byts_per_clus) - 80205454: 00f706bb addw a3,a4,a5 - 80205458: 00019797 auipc a5,0x19 - 8020545c: fdc7a783 lw a5,-36(a5) # 8021e434 <fat+0xc> - 80205460: 02d7ef63 bltu a5,a3,8020549e <rw_clus+0x70> - 80205464: 8cae mv s9,a1 + 802057a4: 00f706bb addw a3,a4,a5 + 802057a8: 00019797 auipc a5,0x19 + 802057ac: c8c7a783 lw a5,-884(a5) # 8021e434 <fat+0xc> + 802057b0: 02d7ef63 bltu a5,a3,802057ee <rw_clus+0x70> + 802057b4: 8cae mv s9,a1 uint sec = first_sec_of_clus(cluster) + off / fat.bpb.byts_per_sec; - 80205466: 00019797 auipc a5,0x19 - 8020546a: fc278793 addi a5,a5,-62 # 8021e428 <fat> - 8020546e: 0107d683 lhu a3,16(a5) + 802057b6: 00019797 auipc a5,0x19 + 802057ba: c7278793 addi a5,a5,-910 # 8021e428 <fat> + 802057be: 0107d683 lhu a3,16(a5) return ((cluster - 2) * fat.bpb.sec_per_clus) + fat.first_data_sec; - 80205472: ffe5099b addiw s3,a0,-2 - 80205476: 0127c603 lbu a2,18(a5) - 8020547a: 02c989bb mulw s3,s3,a2 - 8020547e: 439c lw a5,0(a5) - 80205480: 00f989bb addw s3,s3,a5 + 802057c2: ffe5099b addiw s3,a0,-2 + 802057c6: 0127c603 lbu a2,18(a5) + 802057ca: 02c989bb mulw s3,s3,a2 + 802057ce: 439c lw a5,0(a5) + 802057d0: 00f989bb addw s3,s3,a5 uint sec = first_sec_of_clus(cluster) + off / fat.bpb.byts_per_sec; - 80205484: 02d757bb divuw a5,a4,a3 - 80205488: 00f989bb addw s3,s3,a5 + 802057d4: 02d757bb divuw a5,a4,a3 + 802057d8: 00f989bb addw s3,s3,a5 off = off % fat.bpb.byts_per_sec; - 8020548c: 02d77abb remuw s5,a4,a3 + 802057dc: 02d77abb remuw s5,a4,a3 for (tot = 0; tot < n; tot += m, off += m, data += m, sec++) { - 80205490: 0e0c0363 beqz s8,80205576 <rw_clus+0x148> - 80205494: 4a01 li s4,0 + 802057e0: 0e0c0363 beqz s8,802058c6 <rw_clus+0x148> + 802057e4: 4a01 li s4,0 m = BSIZE - off % BSIZE; - 80205496: 20000d93 li s11,512 + 802057e6: 20000d93 li s11,512 if (bad == -1) { - 8020549a: 5d7d li s10,-1 - 8020549c: a095 j 80205500 <rw_clus+0xd2> + 802057ea: 5d7d li s10,-1 + 802057ec: a095 j 80205850 <rw_clus+0xd2> panic("offset out of range"); - 8020549e: 00004517 auipc a0,0x4 - 802054a2: 70a50513 addi a0,a0,1802 # 80209ba8 <digits+0x828> - 802054a6: ffffb097 auipc ra,0xffffb - 802054aa: c9e080e7 jalr -866(ra) # 80200144 <panic> + 802057ee: 00004517 auipc a0,0x4 + 802057f2: 3f250513 addi a0,a0,1010 # 80209be0 <digits+0x860> + 802057f6: ffffb097 auipc ra,0xffffb + 802057fa: 94e080e7 jalr -1714(ra) # 80200144 <panic> bwrite(bp); - 802054ae: 854a mv a0,s2 - 802054b0: ffffe097 auipc ra,0xffffe - 802054b4: 002080e7 jalr 2(ra) # 802034b2 <bwrite> + 802057fe: 854a mv a0,s2 + 80205800: ffffe097 auipc ra,0xffffe + 80205804: fce080e7 jalr -50(ra) # 802037ce <bwrite> brelse(bp); - 802054b8: 854a mv a0,s2 - 802054ba: ffffe097 auipc ra,0xffffe - 802054be: 034080e7 jalr 52(ra) # 802034ee <brelse> + 80205808: 854a mv a0,s2 + 8020580a: ffffe097 auipc ra,0xffffe + 8020580e: 000080e7 jalr ra # 8020380a <brelse> if (bad == -1) { - 802054c2: a02d j 802054ec <rw_clus+0xbe> + 80205812: a02d j 8020583c <rw_clus+0xbe> bad = either_copyout(user, data, bp->data + (off % BSIZE), m); - 802054c4: 05890613 addi a2,s2,88 - 802054c8: 1682 slli a3,a3,0x20 - 802054ca: 9281 srli a3,a3,0x20 - 802054cc: 963a add a2,a2,a4 - 802054ce: 85da mv a1,s6 - 802054d0: f8843503 ld a0,-120(s0) - 802054d4: ffffd097 auipc ra,0xffffd - 802054d8: 03e080e7 jalr 62(ra) # 80202512 <either_copyout> - 802054dc: 8baa mv s7,a0 + 80205814: 05890613 addi a2,s2,88 + 80205818: 1682 slli a3,a3,0x20 + 8020581a: 9281 srli a3,a3,0x20 + 8020581c: 963a add a2,a2,a4 + 8020581e: 85da mv a1,s6 + 80205820: f8843503 ld a0,-120(s0) + 80205824: ffffd097 auipc ra,0xffffd + 80205828: cee080e7 jalr -786(ra) # 80202512 <either_copyout> + 8020582c: 8baa mv s7,a0 brelse(bp); - 802054de: 854a mv a0,s2 - 802054e0: ffffe097 auipc ra,0xffffe - 802054e4: 00e080e7 jalr 14(ra) # 802034ee <brelse> + 8020582e: 854a mv a0,s2 + 80205830: ffffe097 auipc ra,0xffffe + 80205834: fda080e7 jalr -38(ra) # 8020380a <brelse> if (bad == -1) { - 802054e8: 07ab8763 beq s7,s10,80205556 <rw_clus+0x128> + 80205838: 07ab8763 beq s7,s10,802058a6 <rw_clus+0x128> for (tot = 0; tot < n; tot += m, off += m, data += m, sec++) { - 802054ec: 01448a3b addw s4,s1,s4 - 802054f0: 01548abb addw s5,s1,s5 - 802054f4: 1482 slli s1,s1,0x20 - 802054f6: 9081 srli s1,s1,0x20 - 802054f8: 9b26 add s6,s6,s1 - 802054fa: 2985 addiw s3,s3,1 - 802054fc: 058a7d63 bgeu s4,s8,80205556 <rw_clus+0x128> + 8020583c: 01448a3b addw s4,s1,s4 + 80205840: 01548abb addw s5,s1,s5 + 80205844: 1482 slli s1,s1,0x20 + 80205846: 9081 srli s1,s1,0x20 + 80205848: 9b26 add s6,s6,s1 + 8020584a: 2985 addiw s3,s3,1 + 8020584c: 058a7d63 bgeu s4,s8,802058a6 <rw_clus+0x128> bp = bread(0, sec); - 80205500: 85ce mv a1,s3 - 80205502: 4501 li a0,0 - 80205504: ffffe097 auipc ra,0xffffe - 80205508: ebe080e7 jalr -322(ra) # 802033c2 <bread> - 8020550c: 892a mv s2,a0 + 80205850: 85ce mv a1,s3 + 80205852: 4501 li a0,0 + 80205854: ffffe097 auipc ra,0xffffe + 80205858: e8a080e7 jalr -374(ra) # 802036de <bread> + 8020585c: 892a mv s2,a0 m = BSIZE - off % BSIZE; - 8020550e: 1ffaf713 andi a4,s5,511 + 8020585e: 1ffaf713 andi a4,s5,511 if (n - tot < m) { - 80205512: 414c07bb subw a5,s8,s4 + 80205862: 414c07bb subw a5,s8,s4 m = BSIZE - off % BSIZE; - 80205516: 40ed863b subw a2,s11,a4 - 8020551a: 86be mv a3,a5 - 8020551c: 2781 sext.w a5,a5 - 8020551e: 0006059b sext.w a1,a2 - 80205522: 00f5f363 bgeu a1,a5,80205528 <rw_clus+0xfa> - 80205526: 86b2 mv a3,a2 - 80205528: 0006849b sext.w s1,a3 + 80205866: 40ed863b subw a2,s11,a4 + 8020586a: 86be mv a3,a5 + 8020586c: 2781 sext.w a5,a5 + 8020586e: 0006059b sext.w a1,a2 + 80205872: 00f5f363 bgeu a1,a5,80205878 <rw_clus+0xfa> + 80205876: 86b2 mv a3,a2 + 80205878: 0006849b sext.w s1,a3 if (write) { - 8020552c: f80c8ce3 beqz s9,802054c4 <rw_clus+0x96> + 8020587c: f80c8ce3 beqz s9,80205814 <rw_clus+0x96> if ((bad = either_copyin(bp->data + (off % BSIZE), user, data, m)) != -1) { - 80205530: 05890513 addi a0,s2,88 - 80205534: 1682 slli a3,a3,0x20 - 80205536: 9281 srli a3,a3,0x20 - 80205538: 865a mv a2,s6 - 8020553a: f8843583 ld a1,-120(s0) - 8020553e: 953a add a0,a0,a4 - 80205540: ffffd097 auipc ra,0xffffd - 80205544: 008080e7 jalr 8(ra) # 80202548 <either_copyin> - 80205548: f7a513e3 bne a0,s10,802054ae <rw_clus+0x80> + 80205880: 05890513 addi a0,s2,88 + 80205884: 1682 slli a3,a3,0x20 + 80205886: 9281 srli a3,a3,0x20 + 80205888: 865a mv a2,s6 + 8020588a: f8843583 ld a1,-120(s0) + 8020588e: 953a add a0,a0,a4 + 80205890: ffffd097 auipc ra,0xffffd + 80205894: cb8080e7 jalr -840(ra) # 80202548 <either_copyin> + 80205898: f7a513e3 bne a0,s10,802057fe <rw_clus+0x80> brelse(bp); - 8020554c: 854a mv a0,s2 - 8020554e: ffffe097 auipc ra,0xffffe - 80205552: fa0080e7 jalr -96(ra) # 802034ee <brelse> -} - 80205556: 8552 mv a0,s4 - 80205558: 70e6 ld ra,120(sp) - 8020555a: 7446 ld s0,112(sp) - 8020555c: 74a6 ld s1,104(sp) - 8020555e: 7906 ld s2,96(sp) - 80205560: 69e6 ld s3,88(sp) - 80205562: 6a46 ld s4,80(sp) - 80205564: 6aa6 ld s5,72(sp) - 80205566: 6b06 ld s6,64(sp) - 80205568: 7be2 ld s7,56(sp) - 8020556a: 7c42 ld s8,48(sp) - 8020556c: 7ca2 ld s9,40(sp) - 8020556e: 7d02 ld s10,32(sp) - 80205570: 6de2 ld s11,24(sp) - 80205572: 6109 addi sp,sp,128 - 80205574: 8082 ret + 8020589c: 854a mv a0,s2 + 8020589e: ffffe097 auipc ra,0xffffe + 802058a2: f6c080e7 jalr -148(ra) # 8020380a <brelse> +} + 802058a6: 8552 mv a0,s4 + 802058a8: 70e6 ld ra,120(sp) + 802058aa: 7446 ld s0,112(sp) + 802058ac: 74a6 ld s1,104(sp) + 802058ae: 7906 ld s2,96(sp) + 802058b0: 69e6 ld s3,88(sp) + 802058b2: 6a46 ld s4,80(sp) + 802058b4: 6aa6 ld s5,72(sp) + 802058b6: 6b06 ld s6,64(sp) + 802058b8: 7be2 ld s7,56(sp) + 802058ba: 7c42 ld s8,48(sp) + 802058bc: 7ca2 ld s9,40(sp) + 802058be: 7d02 ld s10,32(sp) + 802058c0: 6de2 ld s11,24(sp) + 802058c2: 6109 addi sp,sp,128 + 802058c4: 8082 ret for (tot = 0; tot < n; tot += m, off += m, data += m, sec++) { - 80205576: 8a62 mv s4,s8 - 80205578: bff9 j 80205556 <rw_clus+0x128> + 802058c6: 8a62 mv s4,s8 + 802058c8: bff9 j 802058a6 <rw_clus+0x128> -000000008020557a <eget>: +00000000802058ca <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) { - 8020557a: 7139 addi sp,sp,-64 - 8020557c: fc06 sd ra,56(sp) - 8020557e: f822 sd s0,48(sp) - 80205580: f426 sd s1,40(sp) - 80205582: f04a sd s2,32(sp) - 80205584: ec4e sd s3,24(sp) - 80205586: e852 sd s4,16(sp) - 80205588: e456 sd s5,8(sp) - 8020558a: 0080 addi s0,sp,64 - 8020558c: 8a2a mv s4,a0 - 8020558e: 8aae mv s5,a1 + 802058ca: 7139 addi sp,sp,-64 + 802058cc: fc06 sd ra,56(sp) + 802058ce: f822 sd s0,48(sp) + 802058d0: f426 sd s1,40(sp) + 802058d2: f04a sd s2,32(sp) + 802058d4: ec4e sd s3,24(sp) + 802058d6: e852 sd s4,16(sp) + 802058d8: e456 sd s5,8(sp) + 802058da: 0080 addi s0,sp,64 + 802058dc: 8a2a mv s4,a0 + 802058de: 8aae mv s5,a1 struct dirent *ep; acquire(&ecache.lock); - 80205590: 00019517 auipc a0,0x19 - 80205594: 02850513 addi a0,a0,40 # 8021e5b8 <ecache> - 80205598: ffffb097 auipc ra,0xffffb - 8020559c: 12e080e7 jalr 302(ra) # 802006c6 <acquire> + 802058e0: 00019517 auipc a0,0x19 + 802058e4: cd850513 addi a0,a0,-808 # 8021e5b8 <ecache> + 802058e8: ffffb097 auipc ra,0xffffb + 802058ec: dde080e7 jalr -546(ra) # 802006c6 <acquire> if (name) { - 802055a0: 060a8b63 beqz s5,80205616 <eget+0x9c> + 802058f0: 060a8b63 beqz s5,80205966 <eget+0x9c> for (ep = root.next; ep != &root; ep = ep->next) { // LRU algo - 802055a4: 00019497 auipc s1,0x19 - 802055a8: fd44b483 ld s1,-44(s1) # 8021e578 <root+0x128> - 802055ac: 00019797 auipc a5,0x19 - 802055b0: ea478793 addi a5,a5,-348 # 8021e450 <root> - 802055b4: 06f48163 beq s1,a5,80205616 <eget+0x9c> + 802058f4: 00019497 auipc s1,0x19 + 802058f8: c844b483 ld s1,-892(s1) # 8021e578 <root+0x128> + 802058fc: 00019797 auipc a5,0x19 + 80205900: b5478793 addi a5,a5,-1196 # 8021e450 <root> + 80205904: 06f48163 beq s1,a5,80205966 <eget+0x9c> if (ep->valid == 1 && ep->parent == parent - 802055b8: 4905 li s2,1 + 80205908: 4905 li s2,1 for (ep = root.next; ep != &root; ep = ep->next) { // LRU algo - 802055ba: 89be mv s3,a5 - 802055bc: a029 j 802055c6 <eget+0x4c> - 802055be: 1284b483 ld s1,296(s1) - 802055c2: 05348a63 beq s1,s3,80205616 <eget+0x9c> + 8020590a: 89be mv s3,a5 + 8020590c: a029 j 80205916 <eget+0x4c> + 8020590e: 1284b483 ld s1,296(s1) + 80205912: 05348a63 beq s1,s3,80205966 <eget+0x9c> if (ep->valid == 1 && ep->parent == parent - 802055c6: 11649783 lh a5,278(s1) - 802055ca: ff279ae3 bne a5,s2,802055be <eget+0x44> - 802055ce: 1204b783 ld a5,288(s1) - 802055d2: ff4796e3 bne a5,s4,802055be <eget+0x44> + 80205916: 11649783 lh a5,278(s1) + 8020591a: ff279ae3 bne a5,s2,8020590e <eget+0x44> + 8020591e: 1204b783 ld a5,288(s1) + 80205922: ff4796e3 bne a5,s4,8020590e <eget+0x44> && strncmp(ep->filename, name, FAT32_MAX_FILENAME) == 0) { - 802055d6: 0ff00613 li a2,255 - 802055da: 85d6 mv a1,s5 - 802055dc: 8526 mv a0,s1 - 802055de: ffffb097 auipc ra,0xffffb - 802055e2: 25c080e7 jalr 604(ra) # 8020083a <strncmp> - 802055e6: fd61 bnez a0,802055be <eget+0x44> + 80205926: 0ff00613 li a2,255 + 8020592a: 85d6 mv a1,s5 + 8020592c: 8526 mv a0,s1 + 8020592e: ffffb097 auipc ra,0xffffb + 80205932: f0c080e7 jalr -244(ra) # 8020083a <strncmp> + 80205936: fd61 bnez a0,8020590e <eget+0x44> if (ep->ref++ == 0) { - 802055e8: 1184a783 lw a5,280(s1) - 802055ec: 0017871b addiw a4,a5,1 - 802055f0: 10e4ac23 sw a4,280(s1) - 802055f4: eb81 bnez a5,80205604 <eget+0x8a> + 80205938: 1184a783 lw a5,280(s1) + 8020593c: 0017871b addiw a4,a5,1 + 80205940: 10e4ac23 sw a4,280(s1) + 80205944: eb81 bnez a5,80205954 <eget+0x8a> ep->parent->ref++; - 802055f6: 1204b703 ld a4,288(s1) - 802055fa: 11872783 lw a5,280(a4) - 802055fe: 2785 addiw a5,a5,1 - 80205600: 10f72c23 sw a5,280(a4) + 80205946: 1204b703 ld a4,288(s1) + 8020594a: 11872783 lw a5,280(a4) + 8020594e: 2785 addiw a5,a5,1 + 80205950: 10f72c23 sw a5,280(a4) } release(&ecache.lock); - 80205604: 00019517 auipc a0,0x19 - 80205608: fb450513 addi a0,a0,-76 # 8021e5b8 <ecache> - 8020560c: ffffb097 auipc ra,0xffffb - 80205610: 10e080e7 jalr 270(ra) # 8020071a <release> + 80205954: 00019517 auipc a0,0x19 + 80205958: c6450513 addi a0,a0,-924 # 8021e5b8 <ecache> + 8020595c: ffffb097 auipc ra,0xffffb + 80205960: dbe080e7 jalr -578(ra) # 8020071a <release> // edup(ep->parent); return ep; - 80205614: a085 j 80205674 <eget+0xfa> + 80205964: a085 j 802059c4 <eget+0xfa> } } } for (ep = root.prev; ep != &root; ep = ep->prev) { // LRU algo - 80205616: 00019497 auipc s1,0x19 - 8020561a: f6a4b483 ld s1,-150(s1) # 8021e580 <root+0x130> - 8020561e: 00019797 auipc a5,0x19 - 80205622: e3278793 addi a5,a5,-462 # 8021e450 <root> - 80205626: 00f48a63 beq s1,a5,8020563a <eget+0xc0> - 8020562a: 873e mv a4,a5 + 80205966: 00019497 auipc s1,0x19 + 8020596a: c1a4b483 ld s1,-998(s1) # 8021e580 <root+0x130> + 8020596e: 00019797 auipc a5,0x19 + 80205972: ae278793 addi a5,a5,-1310 # 8021e450 <root> + 80205976: 00f48a63 beq s1,a5,8020598a <eget+0xc0> + 8020597a: 873e mv a4,a5 if (ep->ref == 0) { - 8020562c: 1184a783 lw a5,280(s1) - 80205630: cf89 beqz a5,8020564a <eget+0xd0> + 8020597c: 1184a783 lw a5,280(s1) + 80205980: cf89 beqz a5,8020599a <eget+0xd0> for (ep = root.prev; ep != &root; ep = ep->prev) { // LRU algo - 80205632: 1304b483 ld s1,304(s1) - 80205636: fee49be3 bne s1,a4,8020562c <eget+0xb2> + 80205982: 1304b483 ld s1,304(s1) + 80205986: fee49be3 bne s1,a4,8020597c <eget+0xb2> ep->dirty = 0; release(&ecache.lock); return ep; } } panic("eget: insufficient ecache"); - 8020563a: 00004517 auipc a0,0x4 - 8020563e: 58650513 addi a0,a0,1414 # 80209bc0 <digits+0x840> - 80205642: ffffb097 auipc ra,0xffffb - 80205646: b02080e7 jalr -1278(ra) # 80200144 <panic> + 8020598a: 00004517 auipc a0,0x4 + 8020598e: 26e50513 addi a0,a0,622 # 80209bf8 <digits+0x878> + 80205992: ffffa097 auipc ra,0xffffa + 80205996: 7b2080e7 jalr 1970(ra) # 80200144 <panic> ep->ref = 1; - 8020564a: 4785 li a5,1 - 8020564c: 10f4ac23 sw a5,280(s1) + 8020599a: 4785 li a5,1 + 8020599c: 10f4ac23 sw a5,280(s1) ep->dev = parent->dev; - 80205650: 114a4783 lbu a5,276(s4) - 80205654: 10f48a23 sb a5,276(s1) + 802059a0: 114a4783 lbu a5,276(s4) + 802059a4: 10f48a23 sb a5,276(s1) ep->off = 0; - 80205658: 1004ae23 sw zero,284(s1) + 802059a8: 1004ae23 sw zero,284(s1) ep->valid = 0; - 8020565c: 10049b23 sh zero,278(s1) + 802059ac: 10049b23 sh zero,278(s1) ep->dirty = 0; - 80205660: 10048aa3 sb zero,277(s1) + 802059b0: 10048aa3 sb zero,277(s1) release(&ecache.lock); - 80205664: 00019517 auipc a0,0x19 - 80205668: f5450513 addi a0,a0,-172 # 8021e5b8 <ecache> - 8020566c: ffffb097 auipc ra,0xffffb - 80205670: 0ae080e7 jalr 174(ra) # 8020071a <release> + 802059b4: 00019517 auipc a0,0x19 + 802059b8: c0450513 addi a0,a0,-1020 # 8021e5b8 <ecache> + 802059bc: ffffb097 auipc ra,0xffffb + 802059c0: d5e080e7 jalr -674(ra) # 8020071a <release> return 0; } - 80205674: 8526 mv a0,s1 - 80205676: 70e2 ld ra,56(sp) - 80205678: 7442 ld s0,48(sp) - 8020567a: 74a2 ld s1,40(sp) - 8020567c: 7902 ld s2,32(sp) - 8020567e: 69e2 ld s3,24(sp) - 80205680: 6a42 ld s4,16(sp) - 80205682: 6aa2 ld s5,8(sp) - 80205684: 6121 addi sp,sp,64 - 80205686: 8082 ret - -0000000080205688 <read_entry_name>: + 802059c4: 8526 mv a0,s1 + 802059c6: 70e2 ld ra,56(sp) + 802059c8: 7442 ld s0,48(sp) + 802059ca: 74a2 ld s1,40(sp) + 802059cc: 7902 ld s2,32(sp) + 802059ce: 69e2 ld s3,24(sp) + 802059d0: 6a42 ld s4,16(sp) + 802059d2: 6aa2 ld s5,8(sp) + 802059d4: 6121 addi sp,sp,64 + 802059d6: 8082 ret + +00000000802059d8 <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) { - 80205688: 7139 addi sp,sp,-64 - 8020568a: fc06 sd ra,56(sp) - 8020568c: f822 sd s0,48(sp) - 8020568e: f426 sd s1,40(sp) - 80205690: f04a sd s2,32(sp) - 80205692: ec4e sd s3,24(sp) - 80205694: 0080 addi s0,sp,64 - 80205696: 84aa mv s1,a0 - 80205698: 892e mv s2,a1 + 802059d8: 7139 addi sp,sp,-64 + 802059da: fc06 sd ra,56(sp) + 802059dc: f822 sd s0,48(sp) + 802059de: f426 sd s1,40(sp) + 802059e0: f04a sd s2,32(sp) + 802059e2: ec4e sd s3,24(sp) + 802059e4: 0080 addi s0,sp,64 + 802059e6: 84aa mv s1,a0 + 802059e8: 892e mv s2,a1 if (d->lne.attr == ATTR_LONG_NAME) { // long entry branch - 8020569a: 00b5c703 lbu a4,11(a1) - 8020569e: 47bd li a5,15 - 802056a0: 08f70563 beq a4,a5,8020572a <read_entry_name+0xa2> + 802059ea: 00b5c703 lbu a4,11(a1) + 802059ee: 47bd li a5,15 + 802059f0: 08f70563 beq a4,a5,80205a7a <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' - 802056a4: 4635 li a2,13 - 802056a6: 4581 li a1,0 - 802056a8: ffffb097 auipc ra,0xffffb - 802056ac: 0ba080e7 jalr 186(ra) # 80200762 <memset> + 802059f4: 4635 li a2,13 + 802059f6: 4581 li a1,0 + 802059f8: ffffb097 auipc ra,0xffffb + 802059fc: d6a080e7 jalr -662(ra) # 80200762 <memset> int i; for (i = 0; d->sne.name[i] != ' ' && i < 8; i++) { - 802056b0: 00094703 lbu a4,0(s2) - 802056b4: 02000793 li a5,32 - 802056b8: 0af70c63 beq a4,a5,80205770 <read_entry_name+0xe8> - 802056bc: 4785 li a5,1 - 802056be: 02000613 li a2,32 - 802056c2: 45a5 li a1,9 + 80205a00: 00094703 lbu a4,0(s2) + 80205a04: 02000793 li a5,32 + 80205a08: 0af70c63 beq a4,a5,80205ac0 <read_entry_name+0xe8> + 80205a0c: 4785 li a5,1 + 80205a0e: 02000613 li a2,32 + 80205a12: 45a5 li a1,9 buffer[i] = d->sne.name[i]; - 802056c4: 00f486b3 add a3,s1,a5 - 802056c8: fee68fa3 sb a4,-1(a3) # 1fff <_entry-0x801fe001> + 80205a14: 00f486b3 add a3,s1,a5 + 80205a18: fee68fa3 sb a4,-1(a3) # 1fff <_entry-0x801fe001> for (i = 0; d->sne.name[i] != ' ' && i < 8; i++) { - 802056cc: 0007869b sext.w a3,a5 - 802056d0: 00f90733 add a4,s2,a5 - 802056d4: 00074703 lbu a4,0(a4) - 802056d8: 00c70563 beq a4,a2,802056e2 <read_entry_name+0x5a> - 802056dc: 0785 addi a5,a5,1 - 802056de: feb793e3 bne a5,a1,802056c4 <read_entry_name+0x3c> + 80205a1c: 0007869b sext.w a3,a5 + 80205a20: 00f90733 add a4,s2,a5 + 80205a24: 00074703 lbu a4,0(a4) + 80205a28: 00c70563 beq a4,a2,80205a32 <read_entry_name+0x5a> + 80205a2c: 0785 addi a5,a5,1 + 80205a2e: feb793e3 bne a5,a1,80205a14 <read_entry_name+0x3c> } if (d->sne.name[8] != ' ') { - 802056e2: 00894703 lbu a4,8(s2) - 802056e6: 02000793 li a5,32 - 802056ea: 00f70963 beq a4,a5,802056fc <read_entry_name+0x74> + 80205a32: 00894703 lbu a4,8(s2) + 80205a36: 02000793 li a5,32 + 80205a3a: 00f70963 beq a4,a5,80205a4c <read_entry_name+0x74> buffer[i++] = '.'; - 802056ee: 00d487b3 add a5,s1,a3 - 802056f2: 02e00713 li a4,46 - 802056f6: 00e78023 sb a4,0(a5) - 802056fa: 2685 addiw a3,a3,1 + 80205a3e: 00d487b3 add a5,s1,a3 + 80205a42: 02e00713 li a4,46 + 80205a46: 00e78023 sb a4,0(a5) + 80205a4a: 2685 addiw a3,a3,1 } for (int j = 8; j < CHAR_SHORT_NAME; j++, i++) { - 802056fc: 00890793 addi a5,s2,8 - 80205700: 94b6 add s1,s1,a3 - 80205702: 092d addi s2,s2,11 + 80205a4c: 00890793 addi a5,s2,8 + 80205a50: 94b6 add s1,s1,a3 + 80205a52: 092d addi s2,s2,11 if (d->sne.name[j] == ' ') { break; } - 80205704: 02000693 li a3,32 - 80205708: 0007c703 lbu a4,0(a5) - 8020570c: 00d70863 beq a4,a3,8020571c <read_entry_name+0x94> + 80205a54: 02000693 li a3,32 + 80205a58: 0007c703 lbu a4,0(a5) + 80205a5c: 00d70863 beq a4,a3,80205a6c <read_entry_name+0x94> buffer[i] = d->sne.name[j]; - 80205710: 00e48023 sb a4,0(s1) + 80205a60: 00e48023 sb a4,0(s1) for (int j = 8; j < CHAR_SHORT_NAME; j++, i++) { - 80205714: 0785 addi a5,a5,1 - 80205716: 0485 addi s1,s1,1 - 80205718: ff2798e3 bne a5,s2,80205708 <read_entry_name+0x80> + 80205a64: 0785 addi a5,a5,1 + 80205a66: 0485 addi s1,s1,1 + 80205a68: ff2798e3 bne a5,s2,80205a58 <read_entry_name+0x80> } } } - 8020571c: 70e2 ld ra,56(sp) - 8020571e: 7442 ld s0,48(sp) - 80205720: 74a2 ld s1,40(sp) - 80205722: 7902 ld s2,32(sp) - 80205724: 69e2 ld s3,24(sp) - 80205726: 6121 addi sp,sp,64 - 80205728: 8082 ret + 80205a6c: 70e2 ld ra,56(sp) + 80205a6e: 7442 ld s0,48(sp) + 80205a70: 74a2 ld s1,40(sp) + 80205a72: 7902 ld s2,32(sp) + 80205a74: 69e2 ld s3,24(sp) + 80205a76: 6121 addi sp,sp,64 + 80205a78: 8082 ret memmove(temp, d->lne.name1, sizeof(temp)); - 8020572a: 4629 li a2,10 - 8020572c: 0585 addi a1,a1,1 - 8020572e: fc040993 addi s3,s0,-64 - 80205732: 854e mv a0,s3 - 80205734: ffffb097 auipc ra,0xffffb - 80205738: 08a080e7 jalr 138(ra) # 802007be <memmove> + 80205a7a: 4629 li a2,10 + 80205a7c: 0585 addi a1,a1,1 + 80205a7e: fc040993 addi s3,s0,-64 + 80205a82: 854e mv a0,s3 + 80205a84: ffffb097 auipc ra,0xffffb + 80205a88: d3a080e7 jalr -710(ra) # 802007be <memmove> snstr(buffer, temp, NELEM(d->lne.name1)); - 8020573c: 4615 li a2,5 - 8020573e: 85ce mv a1,s3 - 80205740: 8526 mv a0,s1 - 80205742: ffffb097 auipc ra,0xffffb - 80205746: 200080e7 jalr 512(ra) # 80200942 <snstr> + 80205a8c: 4615 li a2,5 + 80205a8e: 85ce mv a1,s3 + 80205a90: 8526 mv a0,s1 + 80205a92: ffffb097 auipc ra,0xffffb + 80205a96: eb0080e7 jalr -336(ra) # 80200942 <snstr> snstr(buffer, d->lne.name2, NELEM(d->lne.name2)); - 8020574a: 4619 li a2,6 - 8020574c: 00e90593 addi a1,s2,14 - 80205750: 00548513 addi a0,s1,5 - 80205754: ffffb097 auipc ra,0xffffb - 80205758: 1ee080e7 jalr 494(ra) # 80200942 <snstr> + 80205a9a: 4619 li a2,6 + 80205a9c: 00e90593 addi a1,s2,14 + 80205aa0: 00548513 addi a0,s1,5 + 80205aa4: ffffb097 auipc ra,0xffffb + 80205aa8: e9e080e7 jalr -354(ra) # 80200942 <snstr> snstr(buffer, d->lne.name3, NELEM(d->lne.name3)); - 8020575c: 4609 li a2,2 - 8020575e: 01c90593 addi a1,s2,28 - 80205762: 00b48513 addi a0,s1,11 - 80205766: ffffb097 auipc ra,0xffffb - 8020576a: 1dc080e7 jalr 476(ra) # 80200942 <snstr> - 8020576e: b77d j 8020571c <read_entry_name+0x94> + 80205aac: 4609 li a2,2 + 80205aae: 01c90593 addi a1,s2,28 + 80205ab2: 00b48513 addi a0,s1,11 + 80205ab6: ffffb097 auipc ra,0xffffb + 80205aba: e8c080e7 jalr -372(ra) # 80200942 <snstr> + 80205abe: b77d j 80205a6c <read_entry_name+0x94> for (i = 0; d->sne.name[i] != ' ' && i < 8; i++) { - 80205770: 4681 li a3,0 - 80205772: bf85 j 802056e2 <read_entry_name+0x5a> - -0000000080205774 <fat32_init>: -{ - 80205774: 7139 addi sp,sp,-64 - 80205776: fc06 sd ra,56(sp) - 80205778: f822 sd s0,48(sp) - 8020577a: f426 sd s1,40(sp) - 8020577c: f04a sd s2,32(sp) - 8020577e: ec4e sd s3,24(sp) - 80205780: e852 sd s4,16(sp) - 80205782: e456 sd s5,8(sp) - 80205784: 0080 addi s0,sp,64 + 80205ac0: 4681 li a3,0 + 80205ac2: bf85 j 80205a32 <read_entry_name+0x5a> + +0000000080205ac4 <fat32_init>: +{ + 80205ac4: 7139 addi sp,sp,-64 + 80205ac6: fc06 sd ra,56(sp) + 80205ac8: f822 sd s0,48(sp) + 80205aca: f426 sd s1,40(sp) + 80205acc: f04a sd s2,32(sp) + 80205ace: ec4e sd s3,24(sp) + 80205ad0: e852 sd s4,16(sp) + 80205ad2: e456 sd s5,8(sp) + 80205ad4: 0080 addi s0,sp,64 struct buf *b = bread(0, 0); - 80205786: 4581 li a1,0 - 80205788: 4501 li a0,0 - 8020578a: ffffe097 auipc ra,0xffffe - 8020578e: c38080e7 jalr -968(ra) # 802033c2 <bread> - 80205792: 892a mv s2,a0 + 80205ad6: 4581 li a1,0 + 80205ad8: 4501 li a0,0 + 80205ada: ffffe097 auipc ra,0xffffe + 80205ade: c04080e7 jalr -1020(ra) # 802036de <bread> + 80205ae2: 892a mv s2,a0 if (strncmp((char const*)(b->data + 82), "FAT32", 5)) - 80205794: 4615 li a2,5 - 80205796: 00004597 auipc a1,0x4 - 8020579a: 44a58593 addi a1,a1,1098 # 80209be0 <digits+0x860> - 8020579e: 0aa50513 addi a0,a0,170 - 802057a2: ffffb097 auipc ra,0xffffb - 802057a6: 098080e7 jalr 152(ra) # 8020083a <strncmp> - 802057aa: 16051863 bnez a0,8020591a <fat32_init+0x1a6> + 80205ae4: 4615 li a2,5 + 80205ae6: 00004597 auipc a1,0x4 + 80205aea: 13258593 addi a1,a1,306 # 80209c18 <digits+0x898> + 80205aee: 0aa50513 addi a0,a0,170 + 80205af2: ffffb097 auipc ra,0xffffb + 80205af6: d48080e7 jalr -696(ra) # 8020083a <strncmp> + 80205afa: 16051863 bnez a0,80205c6a <fat32_init+0x1a6> memmove(&fat.bpb.byts_per_sec, b->data + 11, 2); // avoid misaligned load on k210 - 802057ae: 00019497 auipc s1,0x19 - 802057b2: c7a48493 addi s1,s1,-902 # 8021e428 <fat> - 802057b6: 4609 li a2,2 - 802057b8: 06390593 addi a1,s2,99 - 802057bc: 00019517 auipc a0,0x19 - 802057c0: c7c50513 addi a0,a0,-900 # 8021e438 <fat+0x10> - 802057c4: ffffb097 auipc ra,0xffffb - 802057c8: ffa080e7 jalr -6(ra) # 802007be <memmove> + 80205afe: 00019497 auipc s1,0x19 + 80205b02: 92a48493 addi s1,s1,-1750 # 8021e428 <fat> + 80205b06: 4609 li a2,2 + 80205b08: 06390593 addi a1,s2,99 + 80205b0c: 00019517 auipc a0,0x19 + 80205b10: 92c50513 addi a0,a0,-1748 # 8021e438 <fat+0x10> + 80205b14: ffffb097 auipc ra,0xffffb + 80205b18: caa080e7 jalr -854(ra) # 802007be <memmove> fat.bpb.sec_per_clus = *(b->data + 13); - 802057cc: 06594683 lbu a3,101(s2) - 802057d0: 00d48923 sb a3,18(s1) + 80205b1c: 06594683 lbu a3,101(s2) + 80205b20: 00d48923 sb a3,18(s1) fat.bpb.rsvd_sec_cnt = *(uint16 *)(b->data + 14); - 802057d4: 06695603 lhu a2,102(s2) - 802057d8: 00c49a23 sh a2,20(s1) + 80205b24: 06695603 lhu a2,102(s2) + 80205b28: 00c49a23 sh a2,20(s1) fat.bpb.fat_cnt = *(b->data + 16); - 802057dc: 06894703 lbu a4,104(s2) - 802057e0: 00e48b23 sb a4,22(s1) + 80205b2c: 06894703 lbu a4,104(s2) + 80205b30: 00e48b23 sb a4,22(s1) fat.bpb.hidd_sec = *(uint32 *)(b->data + 28); - 802057e4: 07492783 lw a5,116(s2) - 802057e8: cc9c sw a5,24(s1) + 80205b34: 07492783 lw a5,116(s2) + 80205b38: cc9c sw a5,24(s1) fat.bpb.tot_sec = *(uint32 *)(b->data + 32); - 802057ea: 07892783 lw a5,120(s2) - 802057ee: ccdc sw a5,28(s1) + 80205b3a: 07892783 lw a5,120(s2) + 80205b3e: ccdc sw a5,28(s1) fat.bpb.fat_sz = *(uint32 *)(b->data + 36); - 802057f0: 07c92583 lw a1,124(s2) - 802057f4: d08c sw a1,32(s1) + 80205b40: 07c92583 lw a1,124(s2) + 80205b44: d08c sw a1,32(s1) fat.bpb.root_clus = *(uint32 *)(b->data + 44); - 802057f6: 08492503 lw a0,132(s2) - 802057fa: d0c8 sw a0,36(s1) + 80205b46: 08492503 lw a0,132(s2) + 80205b4a: d0c8 sw a0,36(s1) fat.first_data_sec = fat.bpb.rsvd_sec_cnt + fat.bpb.fat_cnt * fat.bpb.fat_sz; - 802057fc: 02b7073b mulw a4,a4,a1 - 80205800: 9f31 addw a4,a4,a2 - 80205802: c098 sw a4,0(s1) + 80205b4c: 02b7073b mulw a4,a4,a1 + 80205b50: 9f31 addw a4,a4,a2 + 80205b52: c098 sw a4,0(s1) fat.data_sec_cnt = fat.bpb.tot_sec - fat.first_data_sec; - 80205804: 9f99 subw a5,a5,a4 - 80205806: c0dc sw a5,4(s1) + 80205b54: 9f99 subw a5,a5,a4 + 80205b56: c0dc sw a5,4(s1) fat.data_clus_cnt = fat.data_sec_cnt / fat.bpb.sec_per_clus; - 80205808: 02d7d7bb divuw a5,a5,a3 - 8020580c: c49c sw a5,8(s1) + 80205b58: 02d7d7bb divuw a5,a5,a3 + 80205b5c: c49c sw a5,8(s1) fat.byts_per_clus = fat.bpb.sec_per_clus * fat.bpb.byts_per_sec; - 8020580e: 0104d783 lhu a5,16(s1) - 80205812: 02d787bb mulw a5,a5,a3 - 80205816: c4dc sw a5,12(s1) + 80205b5e: 0104d783 lhu a5,16(s1) + 80205b62: 02d787bb mulw a5,a5,a3 + 80205b66: c4dc sw a5,12(s1) brelse(b); - 80205818: 854a mv a0,s2 - 8020581a: ffffe097 auipc ra,0xffffe - 8020581e: cd4080e7 jalr -812(ra) # 802034ee <brelse> + 80205b68: 854a mv a0,s2 + 80205b6a: ffffe097 auipc ra,0xffffe + 80205b6e: ca0080e7 jalr -864(ra) # 8020380a <brelse> if (BSIZE != fat.bpb.byts_per_sec) - 80205822: 0104d703 lhu a4,16(s1) - 80205826: 20000793 li a5,512 - 8020582a: 10f71063 bne a4,a5,8020592a <fat32_init+0x1b6> + 80205b72: 0104d703 lhu a4,16(s1) + 80205b76: 20000793 li a5,512 + 80205b7a: 10f71063 bne a4,a5,80205c7a <fat32_init+0x1b6> initlock(&ecache.lock, "ecache"); - 8020582e: 00004597 auipc a1,0x4 - 80205832: 3ea58593 addi a1,a1,1002 # 80209c18 <digits+0x898> - 80205836: 00019517 auipc a0,0x19 - 8020583a: d8250513 addi a0,a0,-638 # 8021e5b8 <ecache> - 8020583e: ffffb097 auipc ra,0xffffb - 80205842: e44080e7 jalr -444(ra) # 80200682 <initlock> + 80205b7e: 00004597 auipc a1,0x4 + 80205b82: 0d258593 addi a1,a1,210 # 80209c50 <digits+0x8d0> + 80205b86: 00019517 auipc a0,0x19 + 80205b8a: a3250513 addi a0,a0,-1486 # 8021e5b8 <ecache> + 80205b8e: ffffb097 auipc ra,0xffffb + 80205b92: af4080e7 jalr -1292(ra) # 80200682 <initlock> memset(&root, 0, sizeof(root)); - 80205846: 00019497 auipc s1,0x19 - 8020584a: be248493 addi s1,s1,-1054 # 8021e428 <fat> - 8020584e: 00019917 auipc s2,0x19 - 80205852: c0290913 addi s2,s2,-1022 # 8021e450 <root> - 80205856: 16800613 li a2,360 - 8020585a: 4581 li a1,0 - 8020585c: 854a mv a0,s2 - 8020585e: ffffb097 auipc ra,0xffffb - 80205862: f04080e7 jalr -252(ra) # 80200762 <memset> + 80205b96: 00019497 auipc s1,0x19 + 80205b9a: 89248493 addi s1,s1,-1902 # 8021e428 <fat> + 80205b9e: 00019917 auipc s2,0x19 + 80205ba2: 8b290913 addi s2,s2,-1870 # 8021e450 <root> + 80205ba6: 16800613 li a2,360 + 80205baa: 4581 li a1,0 + 80205bac: 854a mv a0,s2 + 80205bae: ffffb097 auipc ra,0xffffb + 80205bb2: bb4080e7 jalr -1100(ra) # 80200762 <memset> initsleeplock(&root.lock, "entry"); - 80205866: 00004597 auipc a1,0x4 - 8020586a: 3ba58593 addi a1,a1,954 # 80209c20 <digits+0x8a0> - 8020586e: 00019517 auipc a0,0x19 - 80205872: d1a50513 addi a0,a0,-742 # 8021e588 <root+0x138> - 80205876: ffffe097 auipc ra,0xffffe - 8020587a: d8e080e7 jalr -626(ra) # 80203604 <initsleeplock> + 80205bb6: 00004597 auipc a1,0x4 + 80205bba: 0a258593 addi a1,a1,162 # 80209c58 <digits+0x8d8> + 80205bbe: 00019517 auipc a0,0x19 + 80205bc2: 9ca50513 addi a0,a0,-1590 # 8021e588 <root+0x138> + 80205bc6: ffffe097 auipc ra,0xffffe + 80205bca: d5a080e7 jalr -678(ra) # 80203920 <initsleeplock> root.attribute = (ATTR_DIRECTORY | ATTR_SYSTEM); - 8020587e: 47d1 li a5,20 - 80205880: 12f48423 sb a5,296(s1) + 80205bce: 47d1 li a5,20 + 80205bd0: 12f48423 sb a5,296(s1) root.first_clus = root.cur_clus = fat.bpb.root_clus; - 80205884: 50dc lw a5,36(s1) - 80205886: 12f4aa23 sw a5,308(s1) - 8020588a: 12f4a623 sw a5,300(s1) + 80205bd4: 50dc lw a5,36(s1) + 80205bd6: 12f4aa23 sw a5,308(s1) + 80205bda: 12f4a623 sw a5,300(s1) root.valid = 1; - 8020588e: 4785 li a5,1 - 80205890: 12f49f23 sh a5,318(s1) + 80205bde: 4785 li a5,1 + 80205be0: 12f49f23 sh a5,318(s1) root.prev = &root; - 80205894: 1524bc23 sd s2,344(s1) + 80205be4: 1524bc23 sd s2,344(s1) root.next = &root; - 80205898: 1524b823 sd s2,336(s1) + 80205be8: 1524b823 sd s2,336(s1) for(struct dirent *de = ecache.entries; de < ecache.entries + ENTRY_CACHE_NUM; de++) { - 8020589c: 00019497 auipc s1,0x19 - 802058a0: d3448493 addi s1,s1,-716 # 8021e5d0 <ecache+0x18> + 80205bec: 00019497 auipc s1,0x19 + 80205bf0: 9e448493 addi s1,s1,-1564 # 8021e5d0 <ecache+0x18> de->next = root.next; - 802058a4: 00019917 auipc s2,0x19 - 802058a8: b8490913 addi s2,s2,-1148 # 8021e428 <fat> + 80205bf4: 00019917 auipc s2,0x19 + 80205bf8: 83490913 addi s2,s2,-1996 # 8021e428 <fat> de->prev = &root; - 802058ac: 00019a97 auipc s5,0x19 - 802058b0: ba4a8a93 addi s5,s5,-1116 # 8021e450 <root> + 80205bfc: 00019a97 auipc s5,0x19 + 80205c00: 854a8a93 addi s5,s5,-1964 # 8021e450 <root> initsleeplock(&de->lock, "entry"); - 802058b4: 00004a17 auipc s4,0x4 - 802058b8: 36ca0a13 addi s4,s4,876 # 80209c20 <digits+0x8a0> + 80205c04: 00004a17 auipc s4,0x4 + 80205c08: 054a0a13 addi s4,s4,84 # 80209c58 <digits+0x8d8> for(struct dirent *de = ecache.entries; de < ecache.entries + ENTRY_CACHE_NUM; de++) { - 802058bc: 0001d997 auipc s3,0x1d - 802058c0: 36498993 addi s3,s3,868 # 80222c20 <cons> + 80205c0c: 0001d997 auipc s3,0x1d + 80205c10: 01498993 addi s3,s3,20 # 80222c20 <cons> de->dev = 0; - 802058c4: 10048a23 sb zero,276(s1) + 80205c14: 10048a23 sb zero,276(s1) de->valid = 0; - 802058c8: 10049b23 sh zero,278(s1) + 80205c18: 10049b23 sh zero,278(s1) de->ref = 0; - 802058cc: 1004ac23 sw zero,280(s1) + 80205c1c: 1004ac23 sw zero,280(s1) de->dirty = 0; - 802058d0: 10048aa3 sb zero,277(s1) + 80205c20: 10048aa3 sb zero,277(s1) de->parent = 0; - 802058d4: 1204b023 sd zero,288(s1) + 80205c24: 1204b023 sd zero,288(s1) de->next = root.next; - 802058d8: 15093783 ld a5,336(s2) - 802058dc: 12f4b423 sd a5,296(s1) + 80205c28: 15093783 ld a5,336(s2) + 80205c2c: 12f4b423 sd a5,296(s1) de->prev = &root; - 802058e0: 1354b823 sd s5,304(s1) + 80205c30: 1354b823 sd s5,304(s1) initsleeplock(&de->lock, "entry"); - 802058e4: 85d2 mv a1,s4 - 802058e6: 13848513 addi a0,s1,312 - 802058ea: ffffe097 auipc ra,0xffffe - 802058ee: d1a080e7 jalr -742(ra) # 80203604 <initsleeplock> + 80205c34: 85d2 mv a1,s4 + 80205c36: 13848513 addi a0,s1,312 + 80205c3a: ffffe097 auipc ra,0xffffe + 80205c3e: ce6080e7 jalr -794(ra) # 80203920 <initsleeplock> root.next->prev = de; - 802058f2: 15093783 ld a5,336(s2) - 802058f6: 1297b823 sd s1,304(a5) + 80205c42: 15093783 ld a5,336(s2) + 80205c46: 1297b823 sd s1,304(a5) root.next = de; - 802058fa: 14993823 sd s1,336(s2) + 80205c4a: 14993823 sd s1,336(s2) for(struct dirent *de = ecache.entries; de < ecache.entries + ENTRY_CACHE_NUM; de++) { - 802058fe: 16848493 addi s1,s1,360 - 80205902: fd3491e3 bne s1,s3,802058c4 <fat32_init+0x150> -} - 80205906: 4501 li a0,0 - 80205908: 70e2 ld ra,56(sp) - 8020590a: 7442 ld s0,48(sp) - 8020590c: 74a2 ld s1,40(sp) - 8020590e: 7902 ld s2,32(sp) - 80205910: 69e2 ld s3,24(sp) - 80205912: 6a42 ld s4,16(sp) - 80205914: 6aa2 ld s5,8(sp) - 80205916: 6121 addi sp,sp,64 - 80205918: 8082 ret + 80205c4e: 16848493 addi s1,s1,360 + 80205c52: fd3491e3 bne s1,s3,80205c14 <fat32_init+0x150> +} + 80205c56: 4501 li a0,0 + 80205c58: 70e2 ld ra,56(sp) + 80205c5a: 7442 ld s0,48(sp) + 80205c5c: 74a2 ld s1,40(sp) + 80205c5e: 7902 ld s2,32(sp) + 80205c60: 69e2 ld s3,24(sp) + 80205c62: 6a42 ld s4,16(sp) + 80205c64: 6aa2 ld s5,8(sp) + 80205c66: 6121 addi sp,sp,64 + 80205c68: 8082 ret panic("not FAT32 volume"); - 8020591a: 00004517 auipc a0,0x4 - 8020591e: 2ce50513 addi a0,a0,718 # 80209be8 <digits+0x868> - 80205922: ffffb097 auipc ra,0xffffb - 80205926: 822080e7 jalr -2014(ra) # 80200144 <panic> + 80205c6a: 00004517 auipc a0,0x4 + 80205c6e: fb650513 addi a0,a0,-74 # 80209c20 <digits+0x8a0> + 80205c72: ffffa097 auipc ra,0xffffa + 80205c76: 4d2080e7 jalr 1234(ra) # 80200144 <panic> panic("byts_per_sec != BSIZE"); - 8020592a: 00004517 auipc a0,0x4 - 8020592e: 2d650513 addi a0,a0,726 # 80209c00 <digits+0x880> - 80205932: ffffb097 auipc ra,0xffffb - 80205936: 812080e7 jalr -2030(ra) # 80200144 <panic> + 80205c7a: 00004517 auipc a0,0x4 + 80205c7e: fbe50513 addi a0,a0,-66 # 80209c38 <digits+0x8b8> + 80205c82: ffffa097 auipc ra,0xffffa + 80205c86: 4c2080e7 jalr 1218(ra) # 80200144 <panic> -000000008020593a <eread>: +0000000080205c8a <eread>: if (off > entry->file_size || off + n < off || (entry->attribute & ATTR_DIRECTORY)) { - 8020593a: 10852783 lw a5,264(a0) - 8020593e: 0ed7e863 bltu a5,a3,80205a2e <eread+0xf4> -{ - 80205942: 711d addi sp,sp,-96 - 80205944: ec86 sd ra,88(sp) - 80205946: e8a2 sd s0,80(sp) - 80205948: e4a6 sd s1,72(sp) - 8020594a: e0ca sd s2,64(sp) - 8020594c: fc4e sd s3,56(sp) - 8020594e: f852 sd s4,48(sp) - 80205950: f456 sd s5,40(sp) - 80205952: f05a sd s6,32(sp) - 80205954: ec5e sd s7,24(sp) - 80205956: e862 sd s8,16(sp) - 80205958: e466 sd s9,8(sp) - 8020595a: e06a sd s10,0(sp) - 8020595c: 1080 addi s0,sp,96 - 8020595e: 8a2a mv s4,a0 - 80205960: 8bae mv s7,a1 - 80205962: 8ab2 mv s5,a2 - 80205964: 8936 mv s2,a3 - 80205966: 8b3a mv s6,a4 + 80205c8a: 10852783 lw a5,264(a0) + 80205c8e: 0ed7e863 bltu a5,a3,80205d7e <eread+0xf4> +{ + 80205c92: 711d addi sp,sp,-96 + 80205c94: ec86 sd ra,88(sp) + 80205c96: e8a2 sd s0,80(sp) + 80205c98: e4a6 sd s1,72(sp) + 80205c9a: e0ca sd s2,64(sp) + 80205c9c: fc4e sd s3,56(sp) + 80205c9e: f852 sd s4,48(sp) + 80205ca0: f456 sd s5,40(sp) + 80205ca2: f05a sd s6,32(sp) + 80205ca4: ec5e sd s7,24(sp) + 80205ca6: e862 sd s8,16(sp) + 80205ca8: e466 sd s9,8(sp) + 80205caa: e06a sd s10,0(sp) + 80205cac: 1080 addi s0,sp,96 + 80205cae: 8a2a mv s4,a0 + 80205cb0: 8bae mv s7,a1 + 80205cb2: 8ab2 mv s5,a2 + 80205cb4: 8936 mv s2,a3 + 80205cb6: 8b3a mv s6,a4 if (off > entry->file_size || off + n < off || (entry->attribute & ATTR_DIRECTORY)) { - 80205968: 9eb9 addw a3,a3,a4 + 80205cb8: 9eb9 addw a3,a3,a4 return 0; - 8020596a: 4501 li a0,0 + 80205cba: 4501 li a0,0 if (off > entry->file_size || off + n < off || (entry->attribute & ATTR_DIRECTORY)) { - 8020596c: 0b26e163 bltu a3,s2,80205a0e <eread+0xd4> - 80205970: 100a4703 lbu a4,256(s4) - 80205974: 8b41 andi a4,a4,16 - 80205976: ef41 bnez a4,80205a0e <eread+0xd4> + 80205cbc: 0b26e163 bltu a3,s2,80205d5e <eread+0xd4> + 80205cc0: 100a4703 lbu a4,256(s4) + 80205cc4: 8b41 andi a4,a4,16 + 80205cc6: ef41 bnez a4,80205d5e <eread+0xd4> if (off + n > entry->file_size) { - 80205978: 00d7f463 bgeu a5,a3,80205980 <eread+0x46> + 80205cc8: 00d7f463 bgeu a5,a3,80205cd0 <eread+0x46> n = entry->file_size - off; - 8020597c: 41278b3b subw s6,a5,s2 + 80205ccc: 41278b3b subw s6,a5,s2 for (tot = 0; entry->cur_clus < FAT32_EOC && tot < n; tot += m, off += m, dst += m) { - 80205980: 10ca2703 lw a4,268(s4) - 80205984: 100007b7 lui a5,0x10000 - 80205988: 17dd addi a5,a5,-9 # ffffff7 <_entry-0x70200009> - 8020598a: 06e7ef63 bltu a5,a4,80205a08 <eread+0xce> - 8020598e: 080b0e63 beqz s6,80205a2a <eread+0xf0> - 80205992: 4981 li s3,0 + 80205cd0: 10ca2703 lw a4,268(s4) + 80205cd4: 100007b7 lui a5,0x10000 + 80205cd8: 17dd addi a5,a5,-9 # ffffff7 <_entry-0x70200009> + 80205cda: 06e7ef63 bltu a5,a4,80205d58 <eread+0xce> + 80205cde: 080b0e63 beqz s6,80205d7a <eread+0xf0> + 80205ce2: 4981 li s3,0 m = fat.byts_per_clus - off % fat.byts_per_clus; - 80205994: 00019c97 auipc s9,0x19 - 80205998: a94c8c93 addi s9,s9,-1388 # 8021e428 <fat> + 80205ce4: 00018c97 auipc s9,0x18 + 80205ce8: 744c8c93 addi s9,s9,1860 # 8021e428 <fat> for (tot = 0; entry->cur_clus < FAT32_EOC && tot < n; tot += m, off += m, dst += m) { - 8020599c: 8c3e mv s8,a5 - 8020599e: a82d j 802059d8 <eread+0x9e> - 802059a0: 00048d1b sext.w s10,s1 + 80205cec: 8c3e mv s8,a5 + 80205cee: a82d j 80205d28 <eread+0x9e> + 80205cf0: 00048d1b sext.w s10,s1 if (rw_clus(entry->cur_clus, 0, user_dst, dst, off % fat.byts_per_clus, m) != m) { - 802059a4: 87ea mv a5,s10 - 802059a6: 86d6 mv a3,s5 - 802059a8: 865e mv a2,s7 - 802059aa: 4581 li a1,0 - 802059ac: 10ca2503 lw a0,268(s4) - 802059b0: 00000097 auipc ra,0x0 - 802059b4: a7e080e7 jalr -1410(ra) # 8020542e <rw_clus> - 802059b8: 2501 sext.w a0,a0 - 802059ba: 04ad1863 bne s10,a0,80205a0a <eread+0xd0> + 80205cf4: 87ea mv a5,s10 + 80205cf6: 86d6 mv a3,s5 + 80205cf8: 865e mv a2,s7 + 80205cfa: 4581 li a1,0 + 80205cfc: 10ca2503 lw a0,268(s4) + 80205d00: 00000097 auipc ra,0x0 + 80205d04: a7e080e7 jalr -1410(ra) # 8020577e <rw_clus> + 80205d08: 2501 sext.w a0,a0 + 80205d0a: 04ad1863 bne s10,a0,80205d5a <eread+0xd0> for (tot = 0; entry->cur_clus < FAT32_EOC && tot < n; tot += m, off += m, dst += m) { - 802059be: 013489bb addw s3,s1,s3 - 802059c2: 0124893b addw s2,s1,s2 - 802059c6: 1482 slli s1,s1,0x20 - 802059c8: 9081 srli s1,s1,0x20 - 802059ca: 9aa6 add s5,s5,s1 - 802059cc: 10ca2783 lw a5,268(s4) - 802059d0: 02fc6d63 bltu s8,a5,80205a0a <eread+0xd0> - 802059d4: 0369fb63 bgeu s3,s6,80205a0a <eread+0xd0> + 80205d0e: 013489bb addw s3,s1,s3 + 80205d12: 0124893b addw s2,s1,s2 + 80205d16: 1482 slli s1,s1,0x20 + 80205d18: 9081 srli s1,s1,0x20 + 80205d1a: 9aa6 add s5,s5,s1 + 80205d1c: 10ca2783 lw a5,268(s4) + 80205d20: 02fc6d63 bltu s8,a5,80205d5a <eread+0xd0> + 80205d24: 0369fb63 bgeu s3,s6,80205d5a <eread+0xd0> reloc_clus(entry, off, 0); - 802059d8: 4601 li a2,0 - 802059da: 85ca mv a1,s2 - 802059dc: 8552 mv a0,s4 - 802059de: 00000097 auipc ra,0x0 - 802059e2: 948080e7 jalr -1720(ra) # 80205326 <reloc_clus> + 80205d28: 4601 li a2,0 + 80205d2a: 85ca mv a1,s2 + 80205d2c: 8552 mv a0,s4 + 80205d2e: 00000097 auipc ra,0x0 + 80205d32: 948080e7 jalr -1720(ra) # 80205676 <reloc_clus> m = fat.byts_per_clus - off % fat.byts_per_clus; - 802059e6: 00cca683 lw a3,12(s9) - 802059ea: 02d9763b remuw a2,s2,a3 - 802059ee: 0006071b sext.w a4,a2 + 80205d36: 00cca683 lw a3,12(s9) + 80205d3a: 02d9763b remuw a2,s2,a3 + 80205d3e: 0006071b sext.w a4,a2 if (n - tot < m) { - 802059f2: 413b07bb subw a5,s6,s3 + 80205d42: 413b07bb subw a5,s6,s3 m = fat.byts_per_clus - off % fat.byts_per_clus; - 802059f6: 9e91 subw a3,a3,a2 - 802059f8: 84be mv s1,a5 - 802059fa: 2781 sext.w a5,a5 - 802059fc: 0006861b sext.w a2,a3 - 80205a00: faf670e3 bgeu a2,a5,802059a0 <eread+0x66> - 80205a04: 84b6 mv s1,a3 - 80205a06: bf69 j 802059a0 <eread+0x66> + 80205d46: 9e91 subw a3,a3,a2 + 80205d48: 84be mv s1,a5 + 80205d4a: 2781 sext.w a5,a5 + 80205d4c: 0006861b sext.w a2,a3 + 80205d50: faf670e3 bgeu a2,a5,80205cf0 <eread+0x66> + 80205d54: 84b6 mv s1,a3 + 80205d56: bf69 j 80205cf0 <eread+0x66> for (tot = 0; entry->cur_clus < FAT32_EOC && tot < n; tot += m, off += m, dst += m) { - 80205a08: 4981 li s3,0 + 80205d58: 4981 li s3,0 return tot; - 80205a0a: 0009851b sext.w a0,s3 -} - 80205a0e: 60e6 ld ra,88(sp) - 80205a10: 6446 ld s0,80(sp) - 80205a12: 64a6 ld s1,72(sp) - 80205a14: 6906 ld s2,64(sp) - 80205a16: 79e2 ld s3,56(sp) - 80205a18: 7a42 ld s4,48(sp) - 80205a1a: 7aa2 ld s5,40(sp) - 80205a1c: 7b02 ld s6,32(sp) - 80205a1e: 6be2 ld s7,24(sp) - 80205a20: 6c42 ld s8,16(sp) - 80205a22: 6ca2 ld s9,8(sp) - 80205a24: 6d02 ld s10,0(sp) - 80205a26: 6125 addi sp,sp,96 - 80205a28: 8082 ret + 80205d5a: 0009851b sext.w a0,s3 +} + 80205d5e: 60e6 ld ra,88(sp) + 80205d60: 6446 ld s0,80(sp) + 80205d62: 64a6 ld s1,72(sp) + 80205d64: 6906 ld s2,64(sp) + 80205d66: 79e2 ld s3,56(sp) + 80205d68: 7a42 ld s4,48(sp) + 80205d6a: 7aa2 ld s5,40(sp) + 80205d6c: 7b02 ld s6,32(sp) + 80205d6e: 6be2 ld s7,24(sp) + 80205d70: 6c42 ld s8,16(sp) + 80205d72: 6ca2 ld s9,8(sp) + 80205d74: 6d02 ld s10,0(sp) + 80205d76: 6125 addi sp,sp,96 + 80205d78: 8082 ret for (tot = 0; entry->cur_clus < FAT32_EOC && tot < n; tot += m, off += m, dst += m) { - 80205a2a: 89da mv s3,s6 - 80205a2c: bff9 j 80205a0a <eread+0xd0> + 80205d7a: 89da mv s3,s6 + 80205d7c: bff9 j 80205d5a <eread+0xd0> return 0; - 80205a2e: 4501 li a0,0 + 80205d7e: 4501 li a0,0 } - 80205a30: 8082 ret + 80205d80: 8082 ret -0000000080205a32 <ewrite>: +0000000080205d82 <ewrite>: if (off > entry->file_size || off + n < off || (uint64)off + n > 0xffffffff - 80205a32: 10852783 lw a5,264(a0) - 80205a36: 0ed7e463 bltu a5,a3,80205b1e <ewrite+0xec> -{ - 80205a3a: 711d addi sp,sp,-96 - 80205a3c: ec86 sd ra,88(sp) - 80205a3e: e8a2 sd s0,80(sp) - 80205a40: e4a6 sd s1,72(sp) - 80205a42: e0ca sd s2,64(sp) - 80205a44: fc4e sd s3,56(sp) - 80205a46: f852 sd s4,48(sp) - 80205a48: f456 sd s5,40(sp) - 80205a4a: f05a sd s6,32(sp) - 80205a4c: ec5e sd s7,24(sp) - 80205a4e: e862 sd s8,16(sp) - 80205a50: e466 sd s9,8(sp) - 80205a52: 1080 addi s0,sp,96 - 80205a54: 8aaa mv s5,a0 - 80205a56: 8bae mv s7,a1 - 80205a58: 8a32 mv s4,a2 - 80205a5a: 8936 mv s2,a3 - 80205a5c: 8b3a mv s6,a4 + 80205d82: 10852783 lw a5,264(a0) + 80205d86: 0ed7e463 bltu a5,a3,80205e6e <ewrite+0xec> +{ + 80205d8a: 711d addi sp,sp,-96 + 80205d8c: ec86 sd ra,88(sp) + 80205d8e: e8a2 sd s0,80(sp) + 80205d90: e4a6 sd s1,72(sp) + 80205d92: e0ca sd s2,64(sp) + 80205d94: fc4e sd s3,56(sp) + 80205d96: f852 sd s4,48(sp) + 80205d98: f456 sd s5,40(sp) + 80205d9a: f05a sd s6,32(sp) + 80205d9c: ec5e sd s7,24(sp) + 80205d9e: e862 sd s8,16(sp) + 80205da0: e466 sd s9,8(sp) + 80205da2: 1080 addi s0,sp,96 + 80205da4: 8aaa mv s5,a0 + 80205da6: 8bae mv s7,a1 + 80205da8: 8a32 mv s4,a2 + 80205daa: 8936 mv s2,a3 + 80205dac: 8b3a mv s6,a4 if (off > entry->file_size || off + n < off || (uint64)off + n > 0xffffffff - 80205a5e: 00e687bb addw a5,a3,a4 - 80205a62: 0cd7e063 bltu a5,a3,80205b22 <ewrite+0xf0> - 80205a66: 02069793 slli a5,a3,0x20 - 80205a6a: 9381 srli a5,a5,0x20 - 80205a6c: 1702 slli a4,a4,0x20 - 80205a6e: 9301 srli a4,a4,0x20 - 80205a70: 97ba add a5,a5,a4 - 80205a72: 577d li a4,-1 - 80205a74: 9301 srli a4,a4,0x20 - 80205a76: 0af76863 bltu a4,a5,80205b26 <ewrite+0xf4> + 80205dae: 00e687bb addw a5,a3,a4 + 80205db2: 0cd7e063 bltu a5,a3,80205e72 <ewrite+0xf0> + 80205db6: 02069793 slli a5,a3,0x20 + 80205dba: 9381 srli a5,a5,0x20 + 80205dbc: 1702 slli a4,a4,0x20 + 80205dbe: 9301 srli a4,a4,0x20 + 80205dc0: 97ba add a5,a5,a4 + 80205dc2: 577d li a4,-1 + 80205dc4: 9301 srli a4,a4,0x20 + 80205dc6: 0af76863 bltu a4,a5,80205e76 <ewrite+0xf4> || (entry->attribute & ATTR_READ_ONLY)) { - 80205a7a: 10054783 lbu a5,256(a0) - 80205a7e: 8b85 andi a5,a5,1 - 80205a80: e7cd bnez a5,80205b2a <ewrite+0xf8> + 80205dca: 10054783 lbu a5,256(a0) + 80205dce: 8b85 andi a5,a5,1 + 80205dd0: e7cd bnez a5,80205e7a <ewrite+0xf8> if (entry->first_clus == 0) { // so file_size if 0 too, which requests off == 0 - 80205a82: 10452783 lw a5,260(a0) - 80205a86: cb89 beqz a5,80205a98 <ewrite+0x66> + 80205dd2: 10452783 lw a5,260(a0) + 80205dd6: cb89 beqz a5,80205de8 <ewrite+0x66> for (tot = 0; tot < n; tot += m, off += m, src += m) { - 80205a88: 080b0963 beqz s6,80205b1a <ewrite+0xe8> - 80205a8c: 4981 li s3,0 + 80205dd8: 080b0963 beqz s6,80205e6a <ewrite+0xe8> + 80205ddc: 4981 li s3,0 m = fat.byts_per_clus - off % fat.byts_per_clus; - 80205a8e: 00019c17 auipc s8,0x19 - 80205a92: 99ac0c13 addi s8,s8,-1638 # 8021e428 <fat> - 80205a96: a891 j 80205aea <ewrite+0xb8> + 80205dde: 00018c17 auipc s8,0x18 + 80205de2: 64ac0c13 addi s8,s8,1610 # 8021e428 <fat> + 80205de6: a891 j 80205e3a <ewrite+0xb8> entry->cur_clus = entry->first_clus = alloc_clus(entry->dev); - 80205a98: 11454503 lbu a0,276(a0) - 80205a9c: fffff097 auipc ra,0xfffff - 80205aa0: 6c8080e7 jalr 1736(ra) # 80205164 <alloc_clus> - 80205aa4: 2501 sext.w a0,a0 - 80205aa6: 10aaa223 sw a0,260(s5) - 80205aaa: 10aaa623 sw a0,268(s5) + 80205de8: 11454503 lbu a0,276(a0) + 80205dec: fffff097 auipc ra,0xfffff + 80205df0: 6c8080e7 jalr 1736(ra) # 802054b4 <alloc_clus> + 80205df4: 2501 sext.w a0,a0 + 80205df6: 10aaa223 sw a0,260(s5) + 80205dfa: 10aaa623 sw a0,268(s5) entry->clus_cnt = 0; - 80205aae: 100aa823 sw zero,272(s5) + 80205dfe: 100aa823 sw zero,272(s5) entry->dirty = 1; - 80205ab2: 4785 li a5,1 - 80205ab4: 10fa8aa3 sb a5,277(s5) - 80205ab8: bfc1 j 80205a88 <ewrite+0x56> - 80205aba: 00048c9b sext.w s9,s1 + 80205e02: 4785 li a5,1 + 80205e04: 10fa8aa3 sb a5,277(s5) + 80205e08: bfc1 j 80205dd8 <ewrite+0x56> + 80205e0a: 00048c9b sext.w s9,s1 if (rw_clus(entry->cur_clus, 1, user_src, src, off % fat.byts_per_clus, m) != m) { - 80205abe: 87e6 mv a5,s9 - 80205ac0: 86d2 mv a3,s4 - 80205ac2: 865e mv a2,s7 - 80205ac4: 4585 li a1,1 - 80205ac6: 10caa503 lw a0,268(s5) - 80205aca: 00000097 auipc ra,0x0 - 80205ace: 964080e7 jalr -1692(ra) # 8020542e <rw_clus> - 80205ad2: 2501 sext.w a0,a0 - 80205ad4: 04ac9d63 bne s9,a0,80205b2e <ewrite+0xfc> + 80205e0e: 87e6 mv a5,s9 + 80205e10: 86d2 mv a3,s4 + 80205e12: 865e mv a2,s7 + 80205e14: 4585 li a1,1 + 80205e16: 10caa503 lw a0,268(s5) + 80205e1a: 00000097 auipc ra,0x0 + 80205e1e: 964080e7 jalr -1692(ra) # 8020577e <rw_clus> + 80205e22: 2501 sext.w a0,a0 + 80205e24: 04ac9d63 bne s9,a0,80205e7e <ewrite+0xfc> for (tot = 0; tot < n; tot += m, off += m, src += m) { - 80205ad8: 013489bb addw s3,s1,s3 - 80205adc: 0124893b addw s2,s1,s2 - 80205ae0: 1482 slli s1,s1,0x20 - 80205ae2: 9081 srli s1,s1,0x20 - 80205ae4: 9a26 add s4,s4,s1 - 80205ae6: 0569f463 bgeu s3,s6,80205b2e <ewrite+0xfc> + 80205e28: 013489bb addw s3,s1,s3 + 80205e2c: 0124893b addw s2,s1,s2 + 80205e30: 1482 slli s1,s1,0x20 + 80205e32: 9081 srli s1,s1,0x20 + 80205e34: 9a26 add s4,s4,s1 + 80205e36: 0569f463 bgeu s3,s6,80205e7e <ewrite+0xfc> reloc_clus(entry, off, 1); - 80205aea: 4605 li a2,1 - 80205aec: 85ca mv a1,s2 - 80205aee: 8556 mv a0,s5 - 80205af0: 00000097 auipc ra,0x0 - 80205af4: 836080e7 jalr -1994(ra) # 80205326 <reloc_clus> + 80205e3a: 4605 li a2,1 + 80205e3c: 85ca mv a1,s2 + 80205e3e: 8556 mv a0,s5 + 80205e40: 00000097 auipc ra,0x0 + 80205e44: 836080e7 jalr -1994(ra) # 80205676 <reloc_clus> m = fat.byts_per_clus - off % fat.byts_per_clus; - 80205af8: 00cc2683 lw a3,12(s8) - 80205afc: 02d9763b remuw a2,s2,a3 - 80205b00: 0006071b sext.w a4,a2 + 80205e48: 00cc2683 lw a3,12(s8) + 80205e4c: 02d9763b remuw a2,s2,a3 + 80205e50: 0006071b sext.w a4,a2 if (n - tot < m) { - 80205b04: 413b07bb subw a5,s6,s3 + 80205e54: 413b07bb subw a5,s6,s3 m = fat.byts_per_clus - off % fat.byts_per_clus; - 80205b08: 9e91 subw a3,a3,a2 - 80205b0a: 84be mv s1,a5 - 80205b0c: 2781 sext.w a5,a5 - 80205b0e: 0006861b sext.w a2,a3 - 80205b12: faf674e3 bgeu a2,a5,80205aba <ewrite+0x88> - 80205b16: 84b6 mv s1,a3 - 80205b18: b74d j 80205aba <ewrite+0x88> + 80205e58: 9e91 subw a3,a3,a2 + 80205e5a: 84be mv s1,a5 + 80205e5c: 2781 sext.w a5,a5 + 80205e5e: 0006861b sext.w a2,a3 + 80205e62: faf674e3 bgeu a2,a5,80205e0a <ewrite+0x88> + 80205e66: 84b6 mv s1,a3 + 80205e68: b74d j 80205e0a <ewrite+0x88> for (tot = 0; tot < n; tot += m, off += m, src += m) { - 80205b1a: 89da mv s3,s6 - 80205b1c: a015 j 80205b40 <ewrite+0x10e> + 80205e6a: 89da mv s3,s6 + 80205e6c: a015 j 80205e90 <ewrite+0x10e> return -1; - 80205b1e: 557d li a0,-1 + 80205e6e: 557d li a0,-1 } - 80205b20: 8082 ret + 80205e70: 8082 ret return -1; - 80205b22: 557d li a0,-1 - 80205b24: a005 j 80205b44 <ewrite+0x112> - 80205b26: 557d li a0,-1 - 80205b28: a831 j 80205b44 <ewrite+0x112> - 80205b2a: 557d li a0,-1 - 80205b2c: a821 j 80205b44 <ewrite+0x112> + 80205e72: 557d li a0,-1 + 80205e74: a005 j 80205e94 <ewrite+0x112> + 80205e76: 557d li a0,-1 + 80205e78: a831 j 80205e94 <ewrite+0x112> + 80205e7a: 557d li a0,-1 + 80205e7c: a821 j 80205e94 <ewrite+0x112> if(off > entry->file_size) { - 80205b2e: 108aa783 lw a5,264(s5) - 80205b32: 0127f763 bgeu a5,s2,80205b40 <ewrite+0x10e> + 80205e7e: 108aa783 lw a5,264(s5) + 80205e82: 0127f763 bgeu a5,s2,80205e90 <ewrite+0x10e> entry->file_size = off; - 80205b36: 112aa423 sw s2,264(s5) + 80205e86: 112aa423 sw s2,264(s5) entry->dirty = 1; - 80205b3a: 4785 li a5,1 - 80205b3c: 10fa8aa3 sb a5,277(s5) + 80205e8a: 4785 li a5,1 + 80205e8c: 10fa8aa3 sb a5,277(s5) return tot; - 80205b40: 0009851b sext.w a0,s3 -} - 80205b44: 60e6 ld ra,88(sp) - 80205b46: 6446 ld s0,80(sp) - 80205b48: 64a6 ld s1,72(sp) - 80205b4a: 6906 ld s2,64(sp) - 80205b4c: 79e2 ld s3,56(sp) - 80205b4e: 7a42 ld s4,48(sp) - 80205b50: 7aa2 ld s5,40(sp) - 80205b52: 7b02 ld s6,32(sp) - 80205b54: 6be2 ld s7,24(sp) - 80205b56: 6c42 ld s8,16(sp) - 80205b58: 6ca2 ld s9,8(sp) - 80205b5a: 6125 addi sp,sp,96 - 80205b5c: 8082 ret - -0000000080205b5e <formatname>: -{ - 80205b5e: 7179 addi sp,sp,-48 - 80205b60: f406 sd ra,40(sp) - 80205b62: f022 sd s0,32(sp) - 80205b64: ec26 sd s1,24(sp) - 80205b66: e84a sd s2,16(sp) - 80205b68: e44e sd s3,8(sp) - 80205b6a: e052 sd s4,0(sp) - 80205b6c: 1800 addi s0,sp,48 - 80205b6e: 84aa mv s1,a0 + 80205e90: 0009851b sext.w a0,s3 +} + 80205e94: 60e6 ld ra,88(sp) + 80205e96: 6446 ld s0,80(sp) + 80205e98: 64a6 ld s1,72(sp) + 80205e9a: 6906 ld s2,64(sp) + 80205e9c: 79e2 ld s3,56(sp) + 80205e9e: 7a42 ld s4,48(sp) + 80205ea0: 7aa2 ld s5,40(sp) + 80205ea2: 7b02 ld s6,32(sp) + 80205ea4: 6be2 ld s7,24(sp) + 80205ea6: 6c42 ld s8,16(sp) + 80205ea8: 6ca2 ld s9,8(sp) + 80205eaa: 6125 addi sp,sp,96 + 80205eac: 8082 ret + +0000000080205eae <formatname>: +{ + 80205eae: 7179 addi sp,sp,-48 + 80205eb0: f406 sd ra,40(sp) + 80205eb2: f022 sd s0,32(sp) + 80205eb4: ec26 sd s1,24(sp) + 80205eb6: e84a sd s2,16(sp) + 80205eb8: e44e sd s3,8(sp) + 80205eba: e052 sd s4,0(sp) + 80205ebc: 1800 addi s0,sp,48 + 80205ebe: 84aa mv s1,a0 while (*name == ' ' || *name == '.') { name++; } - 80205b70: 02000793 li a5,32 - 80205b74: 02e00713 li a4,46 - 80205b78: a011 j 80205b7c <formatname+0x1e> - 80205b7a: 0485 addi s1,s1,1 - 80205b7c: 0004c583 lbu a1,0(s1) - 80205b80: fef58de3 beq a1,a5,80205b7a <formatname+0x1c> - 80205b84: fee58be3 beq a1,a4,80205b7a <formatname+0x1c> + 80205ec0: 02000793 li a5,32 + 80205ec4: 02e00713 li a4,46 + 80205ec8: a011 j 80205ecc <formatname+0x1e> + 80205eca: 0485 addi s1,s1,1 + 80205ecc: 0004c583 lbu a1,0(s1) + 80205ed0: fef58de3 beq a1,a5,80205eca <formatname+0x1c> + 80205ed4: fee58be3 beq a1,a4,80205eca <formatname+0x1c> for (p = name; *p; p++) { - 80205b88: c1b9 beqz a1,80205bce <formatname+0x70> - 80205b8a: 8926 mv s2,s1 + 80205ed8: c1b9 beqz a1,80205f1e <formatname+0x70> + 80205eda: 8926 mv s2,s1 if (c < 0x20 || strchr(illegal, c)) { - 80205b8c: 49fd li s3,31 - 80205b8e: 00006a17 auipc s4,0x6 - 80205b92: e8aa0a13 addi s4,s4,-374 # 8020ba18 <illegal.1> - 80205b96: 02b9fe63 bgeu s3,a1,80205bd2 <formatname+0x74> - 80205b9a: 8552 mv a0,s4 - 80205b9c: ffffb097 auipc ra,0xffffb - 80205ba0: e24080e7 jalr -476(ra) # 802009c0 <strchr> - 80205ba4: e121 bnez a0,80205be4 <formatname+0x86> + 80205edc: 49fd li s3,31 + 80205ede: 00006a17 auipc s4,0x6 + 80205ee2: daaa0a13 addi s4,s4,-598 # 8020bc88 <illegal.1> + 80205ee6: 02b9fe63 bgeu s3,a1,80205f22 <formatname+0x74> + 80205eea: 8552 mv a0,s4 + 80205eec: ffffb097 auipc ra,0xffffb + 80205ef0: ad4080e7 jalr -1324(ra) # 802009c0 <strchr> + 80205ef4: e121 bnez a0,80205f34 <formatname+0x86> for (p = name; *p; p++) { - 80205ba6: 0905 addi s2,s2,1 - 80205ba8: 00094583 lbu a1,0(s2) - 80205bac: f5ed bnez a1,80205b96 <formatname+0x38> + 80205ef6: 0905 addi s2,s2,1 + 80205ef8: 00094583 lbu a1,0(s2) + 80205efc: f5ed bnez a1,80205ee6 <formatname+0x38> if (*p != ' ') { - 80205bae: 02000693 li a3,32 - 80205bb2: 874a mv a4,s2 + 80205efe: 02000693 li a3,32 + 80205f02: 874a mv a4,s2 while (p-- > name) { - 80205bb4: 0124fb63 bgeu s1,s2,80205bca <formatname+0x6c> + 80205f04: 0124fb63 bgeu s1,s2,80205f1a <formatname+0x6c> if (*p != ' ') { - 80205bb8: 197d addi s2,s2,-1 - 80205bba: 00094783 lbu a5,0(s2) - 80205bbe: fed78ae3 beq a5,a3,80205bb2 <formatname+0x54> + 80205f08: 197d addi s2,s2,-1 + 80205f0a: 00094783 lbu a5,0(s2) + 80205f0e: fed78ae3 beq a5,a3,80205f02 <formatname+0x54> p[1] = '\0'; - 80205bc2: 00070023 sb zero,0(a4) + 80205f12: 00070023 sb zero,0(a4) break; - 80205bc6: 8526 mv a0,s1 - 80205bc8: a031 j 80205bd4 <formatname+0x76> - 80205bca: 8526 mv a0,s1 - 80205bcc: a021 j 80205bd4 <formatname+0x76> + 80205f16: 8526 mv a0,s1 + 80205f18: a031 j 80205f24 <formatname+0x76> + 80205f1a: 8526 mv a0,s1 + 80205f1c: a021 j 80205f24 <formatname+0x76> for (p = name; *p; p++) { - 80205bce: 8526 mv a0,s1 - 80205bd0: a011 j 80205bd4 <formatname+0x76> + 80205f1e: 8526 mv a0,s1 + 80205f20: a011 j 80205f24 <formatname+0x76> return 0; - 80205bd2: 4501 li a0,0 -} - 80205bd4: 70a2 ld ra,40(sp) - 80205bd6: 7402 ld s0,32(sp) - 80205bd8: 64e2 ld s1,24(sp) - 80205bda: 6942 ld s2,16(sp) - 80205bdc: 69a2 ld s3,8(sp) - 80205bde: 6a02 ld s4,0(sp) - 80205be0: 6145 addi sp,sp,48 - 80205be2: 8082 ret + 80205f22: 4501 li a0,0 +} + 80205f24: 70a2 ld ra,40(sp) + 80205f26: 7402 ld s0,32(sp) + 80205f28: 64e2 ld s1,24(sp) + 80205f2a: 6942 ld s2,16(sp) + 80205f2c: 69a2 ld s3,8(sp) + 80205f2e: 6a02 ld s4,0(sp) + 80205f30: 6145 addi sp,sp,48 + 80205f32: 8082 ret return 0; - 80205be4: 4501 li a0,0 - 80205be6: b7fd j 80205bd4 <formatname+0x76> + 80205f34: 4501 li a0,0 + 80205f36: b7fd j 80205f24 <formatname+0x76> -0000000080205be8 <cal_checksum>: +0000000080205f38 <cal_checksum>: { - 80205be8: 1141 addi sp,sp,-16 - 80205bea: e422 sd s0,8(sp) - 80205bec: 0800 addi s0,sp,16 - 80205bee: 87aa mv a5,a0 + 80205f38: 1141 addi sp,sp,-16 + 80205f3a: e422 sd s0,8(sp) + 80205f3c: 0800 addi s0,sp,16 + 80205f3e: 87aa mv a5,a0 for (int i = CHAR_SHORT_NAME; i != 0; i--) { - 80205bf0: 00b50613 addi a2,a0,11 + 80205f40: 00b50613 addi a2,a0,11 uint8 sum = 0; - 80205bf4: 4501 li a0,0 + 80205f44: 4501 li a0,0 sum = ((sum & 1) ? 0x80 : 0) + (sum >> 1) + *shortname++; - 80205bf6: 0075171b slliw a4,a0,0x7 - 80205bfa: 0785 addi a5,a5,1 - 80205bfc: 0015551b srliw a0,a0,0x1 - 80205c00: fff7c683 lbu a3,-1(a5) - 80205c04: 9d35 addw a0,a0,a3 - 80205c06: 953a add a0,a0,a4 - 80205c08: 0ff57513 zext.b a0,a0 + 80205f46: 0075171b slliw a4,a0,0x7 + 80205f4a: 0785 addi a5,a5,1 + 80205f4c: 0015551b srliw a0,a0,0x1 + 80205f50: fff7c683 lbu a3,-1(a5) + 80205f54: 9d35 addw a0,a0,a3 + 80205f56: 953a add a0,a0,a4 + 80205f58: 0ff57513 zext.b a0,a0 for (int i = CHAR_SHORT_NAME; i != 0; i--) { - 80205c0c: fef615e3 bne a2,a5,80205bf6 <cal_checksum+0xe> -} - 80205c10: 6422 ld s0,8(sp) - 80205c12: 0141 addi sp,sp,16 - 80205c14: 8082 ret - -0000000080205c16 <emake>: -{ - 80205c16: 7131 addi sp,sp,-192 - 80205c18: fd06 sd ra,184(sp) - 80205c1a: f922 sd s0,176(sp) - 80205c1c: f526 sd s1,168(sp) - 80205c1e: f14a sd s2,160(sp) - 80205c20: ed4e sd s3,152(sp) - 80205c22: e952 sd s4,144(sp) - 80205c24: e556 sd s5,136(sp) - 80205c26: e15a sd s6,128(sp) - 80205c28: fcde sd s7,120(sp) - 80205c2a: f8e2 sd s8,112(sp) - 80205c2c: f4e6 sd s9,104(sp) - 80205c2e: f0ea sd s10,96(sp) - 80205c30: ecee sd s11,88(sp) - 80205c32: 0180 addi s0,sp,192 + 80205f5c: fef615e3 bne a2,a5,80205f46 <cal_checksum+0xe> +} + 80205f60: 6422 ld s0,8(sp) + 80205f62: 0141 addi sp,sp,16 + 80205f64: 8082 ret + +0000000080205f66 <emake>: +{ + 80205f66: 7131 addi sp,sp,-192 + 80205f68: fd06 sd ra,184(sp) + 80205f6a: f922 sd s0,176(sp) + 80205f6c: f526 sd s1,168(sp) + 80205f6e: f14a sd s2,160(sp) + 80205f70: ed4e sd s3,152(sp) + 80205f72: e952 sd s4,144(sp) + 80205f74: e556 sd s5,136(sp) + 80205f76: e15a sd s6,128(sp) + 80205f78: fcde sd s7,120(sp) + 80205f7a: f8e2 sd s8,112(sp) + 80205f7c: f4e6 sd s9,104(sp) + 80205f7e: f0ea sd s10,96(sp) + 80205f80: ecee sd s11,88(sp) + 80205f82: 0180 addi s0,sp,192 if (!(dp->attribute & ATTR_DIRECTORY)) - 80205c34: 10054783 lbu a5,256(a0) - 80205c38: 8bc1 andi a5,a5,16 - 80205c3a: c3d5 beqz a5,80205cde <emake+0xc8> - 80205c3c: 8b2a mv s6,a0 - 80205c3e: 8d2e mv s10,a1 - 80205c40: 8cb2 mv s9,a2 + 80205f84: 10054783 lbu a5,256(a0) + 80205f88: 8bc1 andi a5,a5,16 + 80205f8a: c3d5 beqz a5,8020602e <emake+0xc8> + 80205f8c: 8b2a mv s6,a0 + 80205f8e: 8d2e mv s10,a1 + 80205f90: 8cb2 mv s9,a2 if (off % sizeof(union dentry)) - 80205c42: 01f67793 andi a5,a2,31 - 80205c46: e7c5 bnez a5,80205cee <emake+0xd8> + 80205f92: 01f67793 andi a5,a2,31 + 80205f96: e7c5 bnez a5,8020603e <emake+0xd8> memset(&de, 0, sizeof(de)); - 80205c48: 02000613 li a2,32 - 80205c4c: 4581 li a1,0 - 80205c4e: f7040513 addi a0,s0,-144 - 80205c52: ffffb097 auipc ra,0xffffb - 80205c56: b10080e7 jalr -1264(ra) # 80200762 <memset> + 80205f98: 02000613 li a2,32 + 80205f9c: 4581 li a1,0 + 80205f9e: f7040513 addi a0,s0,-144 + 80205fa2: ffffa097 auipc ra,0xffffa + 80205fa6: 7c0080e7 jalr 1984(ra) # 80200762 <memset> if (off <= 32) { - 80205c5a: 02000793 li a5,32 - 80205c5e: 0b97ec63 bltu a5,s9,80205d16 <emake+0x100> + 80205faa: 02000793 li a5,32 + 80205fae: 0b97ec63 bltu a5,s9,80206066 <emake+0x100> if (off == 0) { - 80205c62: 080c9e63 bnez s9,80205cfe <emake+0xe8> + 80205fb2: 080c9e63 bnez s9,8020604e <emake+0xe8> strncpy(de.sne.name, ". ", sizeof(de.sne.name)); - 80205c66: 462d li a2,11 - 80205c68: 00004597 auipc a1,0x4 - 80205c6c: fe858593 addi a1,a1,-24 # 80209c50 <digits+0x8d0> - 80205c70: f7040513 addi a0,s0,-144 - 80205c74: ffffb097 auipc ra,0xffffb - 80205c78: c02080e7 jalr -1022(ra) # 80200876 <strncpy> + 80205fb6: 462d li a2,11 + 80205fb8: 00004597 auipc a1,0x4 + 80205fbc: cd058593 addi a1,a1,-816 # 80209c88 <digits+0x908> + 80205fc0: f7040513 addi a0,s0,-144 + 80205fc4: ffffb097 auipc ra,0xffffb + 80205fc8: 8b2080e7 jalr -1870(ra) # 80200876 <strncpy> de.sne.attr = ATTR_DIRECTORY; - 80205c7c: 47c1 li a5,16 - 80205c7e: f6f40da3 sb a5,-133(s0) + 80205fcc: 47c1 li a5,16 + 80205fce: f6f40da3 sb a5,-133(s0) de.sne.fst_clus_hi = (uint16)(ep->first_clus >> 16); // first clus high 16 bits - 80205c82: 104d2783 lw a5,260(s10) # fffffffffffff104 <ebss_clear+0xffffffff7fdd9104> - 80205c86: 0107d71b srliw a4,a5,0x10 - 80205c8a: f8e41223 sh a4,-124(s0) + 80205fd2: 104d2783 lw a5,260(s10) # fffffffffffff104 <ebss_clear+0xffffffff7fdd9104> + 80205fd6: 0107d71b srliw a4,a5,0x10 + 80205fda: f8e41223 sh a4,-124(s0) de.sne.fst_clus_lo = (uint16)(ep->first_clus & 0xffff); // low 16 bits - 80205c8e: f8f41523 sh a5,-118(s0) + 80205fde: f8f41523 sh a5,-118(s0) de.sne.file_size = 0; // filesize is updated in eupdate() - 80205c92: f8042623 sw zero,-116(s0) + 80205fe2: f8042623 sw zero,-116(s0) off = reloc_clus(dp, off, 1); - 80205c96: 4605 li a2,1 - 80205c98: 85e6 mv a1,s9 - 80205c9a: 855a mv a0,s6 - 80205c9c: fffff097 auipc ra,0xfffff - 80205ca0: 68a080e7 jalr 1674(ra) # 80205326 <reloc_clus> + 80205fe6: 4605 li a2,1 + 80205fe8: 85e6 mv a1,s9 + 80205fea: 855a mv a0,s6 + 80205fec: fffff097 auipc ra,0xfffff + 80205ff0: 68a080e7 jalr 1674(ra) # 80205676 <reloc_clus> rw_clus(dp->cur_clus, 1, 0, (uint64)&de, off, sizeof(de)); - 80205ca4: 02000793 li a5,32 - 80205ca8: 0005071b sext.w a4,a0 - 80205cac: f7040693 addi a3,s0,-144 - 80205cb0: 4601 li a2,0 - 80205cb2: 4585 li a1,1 - 80205cb4: 10cb2503 lw a0,268(s6) - 80205cb8: fffff097 auipc ra,0xfffff - 80205cbc: 776080e7 jalr 1910(ra) # 8020542e <rw_clus> -} - 80205cc0: 70ea ld ra,184(sp) - 80205cc2: 744a ld s0,176(sp) - 80205cc4: 74aa ld s1,168(sp) - 80205cc6: 790a ld s2,160(sp) - 80205cc8: 69ea ld s3,152(sp) - 80205cca: 6a4a ld s4,144(sp) - 80205ccc: 6aaa ld s5,136(sp) - 80205cce: 6b0a ld s6,128(sp) - 80205cd0: 7be6 ld s7,120(sp) - 80205cd2: 7c46 ld s8,112(sp) - 80205cd4: 7ca6 ld s9,104(sp) - 80205cd6: 7d06 ld s10,96(sp) - 80205cd8: 6de6 ld s11,88(sp) - 80205cda: 6129 addi sp,sp,192 - 80205cdc: 8082 ret + 80205ff4: 02000793 li a5,32 + 80205ff8: 0005071b sext.w a4,a0 + 80205ffc: f7040693 addi a3,s0,-144 + 80206000: 4601 li a2,0 + 80206002: 4585 li a1,1 + 80206004: 10cb2503 lw a0,268(s6) + 80206008: fffff097 auipc ra,0xfffff + 8020600c: 776080e7 jalr 1910(ra) # 8020577e <rw_clus> +} + 80206010: 70ea ld ra,184(sp) + 80206012: 744a ld s0,176(sp) + 80206014: 74aa ld s1,168(sp) + 80206016: 790a ld s2,160(sp) + 80206018: 69ea ld s3,152(sp) + 8020601a: 6a4a ld s4,144(sp) + 8020601c: 6aaa ld s5,136(sp) + 8020601e: 6b0a ld s6,128(sp) + 80206020: 7be6 ld s7,120(sp) + 80206022: 7c46 ld s8,112(sp) + 80206024: 7ca6 ld s9,104(sp) + 80206026: 7d06 ld s10,96(sp) + 80206028: 6de6 ld s11,88(sp) + 8020602a: 6129 addi sp,sp,192 + 8020602c: 8082 ret panic("emake: not dir"); - 80205cde: 00004517 auipc a0,0x4 - 80205ce2: f4a50513 addi a0,a0,-182 # 80209c28 <digits+0x8a8> - 80205ce6: ffffa097 auipc ra,0xffffa - 80205cea: 45e080e7 jalr 1118(ra) # 80200144 <panic> + 8020602e: 00004517 auipc a0,0x4 + 80206032: c3250513 addi a0,a0,-974 # 80209c60 <digits+0x8e0> + 80206036: ffffa097 auipc ra,0xffffa + 8020603a: 10e080e7 jalr 270(ra) # 80200144 <panic> panic("emake: not aligned"); - 80205cee: 00004517 auipc a0,0x4 - 80205cf2: f4a50513 addi a0,a0,-182 # 80209c38 <digits+0x8b8> - 80205cf6: ffffa097 auipc ra,0xffffa - 80205cfa: 44e080e7 jalr 1102(ra) # 80200144 <panic> + 8020603e: 00004517 auipc a0,0x4 + 80206042: c3250513 addi a0,a0,-974 # 80209c70 <digits+0x8f0> + 80206046: ffffa097 auipc ra,0xffffa + 8020604a: 0fe080e7 jalr 254(ra) # 80200144 <panic> strncpy(de.sne.name, ".. ", sizeof(de.sne.name)); - 80205cfe: 462d li a2,11 - 80205d00: 00004597 auipc a1,0x4 - 80205d04: f6058593 addi a1,a1,-160 # 80209c60 <digits+0x8e0> - 80205d08: f7040513 addi a0,s0,-144 - 80205d0c: ffffb097 auipc ra,0xffffb - 80205d10: b6a080e7 jalr -1174(ra) # 80200876 <strncpy> - 80205d14: b7a5 j 80205c7c <emake+0x66> + 8020604e: 462d li a2,11 + 80206050: 00004597 auipc a1,0x4 + 80206054: c4858593 addi a1,a1,-952 # 80209c98 <digits+0x918> + 80206058: f7040513 addi a0,s0,-144 + 8020605c: ffffb097 auipc ra,0xffffb + 80206060: 81a080e7 jalr -2022(ra) # 80200876 <strncpy> + 80206064: b7a5 j 80205fcc <emake+0x66> int entcnt = (strlen(ep->filename) + CHAR_LONG_NAME - 1) / CHAR_LONG_NAME; // count of l-n-entries, rounds up - 80205d16: 896a mv s2,s10 - 80205d18: 856a mv a0,s10 - 80205d1a: ffffb097 auipc ra,0xffffb - 80205d1e: bcc080e7 jalr -1076(ra) # 802008e6 <strlen> - 80205d22: f4a43423 sd a0,-184(s0) - 80205d26: 00c5071b addiw a4,a0,12 - 80205d2a: 47b5 li a5,13 - 80205d2c: 02f747bb divw a5,a4,a5 - 80205d30: f4f42c23 sw a5,-168(s0) - 80205d34: 00078d9b sext.w s11,a5 + 80206066: 896a mv s2,s10 + 80206068: 856a mv a0,s10 + 8020606a: ffffb097 auipc ra,0xffffb + 8020606e: 87c080e7 jalr -1924(ra) # 802008e6 <strlen> + 80206072: f4a43423 sd a0,-184(s0) + 80206076: 00c5071b addiw a4,a0,12 + 8020607a: 47b5 li a5,13 + 8020607c: 02f747bb divw a5,a4,a5 + 80206080: f4f42c23 sw a5,-168(s0) + 80206084: 00078d9b sext.w s11,a5 memset(shortname, 0, sizeof(shortname)); - 80205d38: 4631 li a2,12 - 80205d3a: 4581 li a1,0 - 80205d3c: f6040513 addi a0,s0,-160 - 80205d40: ffffb097 auipc ra,0xffffb - 80205d44: a22080e7 jalr -1502(ra) # 80200762 <memset> + 80206088: 4631 li a2,12 + 8020608a: 4581 li a1,0 + 8020608c: f6040513 addi a0,s0,-160 + 80206090: ffffa097 auipc ra,0xffffa + 80206094: 6d2080e7 jalr 1746(ra) # 80200762 <memset> for (int j = strlen(name) - 1; j >= 0; j--) { - 80205d48: 856a mv a0,s10 - 80205d4a: ffffb097 auipc ra,0xffffb - 80205d4e: b9c080e7 jalr -1124(ra) # 802008e6 <strlen> - 80205d52: fff5079b addiw a5,a0,-1 - 80205d56: 0207cf63 bltz a5,80205d94 <emake+0x17e> - 80205d5a: 97ea add a5,a5,s10 - 80205d5c: ffed0693 addi a3,s10,-2 - 80205d60: 96aa add a3,a3,a0 - 80205d62: fff5071b addiw a4,a0,-1 - 80205d66: 1702 slli a4,a4,0x20 - 80205d68: 9301 srli a4,a4,0x20 - 80205d6a: 8e99 sub a3,a3,a4 + 80206098: 856a mv a0,s10 + 8020609a: ffffb097 auipc ra,0xffffb + 8020609e: 84c080e7 jalr -1972(ra) # 802008e6 <strlen> + 802060a2: fff5079b addiw a5,a0,-1 + 802060a6: 0207cf63 bltz a5,802060e4 <emake+0x17e> + 802060aa: 97ea add a5,a5,s10 + 802060ac: ffed0693 addi a3,s10,-2 + 802060b0: 96aa add a3,a3,a0 + 802060b2: fff5071b addiw a4,a0,-1 + 802060b6: 1702 slli a4,a4,0x20 + 802060b8: 9301 srli a4,a4,0x20 + 802060ba: 8e99 sub a3,a3,a4 if (name[j] == '.') { - 80205d6c: 02e00613 li a2,46 - 80205d70: 89be mv s3,a5 - 80205d72: 0007c703 lbu a4,0(a5) - 80205d76: 00c70663 beq a4,a2,80205d82 <emake+0x16c> + 802060bc: 02e00613 li a2,46 + 802060c0: 89be mv s3,a5 + 802060c2: 0007c703 lbu a4,0(a5) + 802060c6: 00c70663 beq a4,a2,802060d2 <emake+0x16c> for (int j = strlen(name) - 1; j >= 0; j--) { - 80205d7a: 17fd addi a5,a5,-1 - 80205d7c: fed79ae3 bne a5,a3,80205d70 <emake+0x15a> + 802060ca: 17fd addi a5,a5,-1 + 802060cc: fed79ae3 bne a5,a3,802060c0 <emake+0x15a> char c, *p = name; - 80205d80: 89ea mv s3,s10 + 802060d0: 89ea mv s3,s10 shortname[i++] = c; - 80205d82: 4481 li s1,0 + 802060d2: 4481 li s1,0 if (i == 8 && p) { - 80205d84: 4aa1 li s5,8 + 802060d4: 4aa1 li s5,8 while (i < CHAR_SHORT_NAME && (c = *name++)) { - 80205d86: 4ba9 li s7,10 + 802060d6: 4ba9 li s7,10 if (c >= 'a' && c <= 'z') { - 80205d88: 4c65 li s8,25 + 802060d8: 4c65 li s8,25 memset(shortname + i, ' ', 8 - i); - 80205d8a: f6040793 addi a5,s0,-160 - 80205d8e: f4f43823 sd a5,-176(s0) - 80205d92: a8d9 j 80205e68 <emake+0x252> + 802060da: f6040793 addi a5,s0,-160 + 802060de: f4f43823 sd a5,-176(s0) + 802060e2: a8d9 j 802061b8 <emake+0x252> char c, *p = name; - 80205d94: 89ea mv s3,s10 - 80205d96: b7f5 j 80205d82 <emake+0x16c> + 802060e4: 89ea mv s3,s10 + 802060e6: b7f5 j 802060d2 <emake+0x16c> if (i == 8 && p) { - 80205d98: 22098b63 beqz s3,80205fce <emake+0x3b8> + 802060e8: 22098b63 beqz s3,8020631e <emake+0x3b8> if (p + 1 < name) { break; } // no '.' - 80205d9c: 0985 addi s3,s3,1 - 80205d9e: 0949fc63 bgeu s3,s4,80205e36 <emake+0x220> - 80205da2: f6040793 addi a5,s0,-160 - 80205da6: 97a6 add a5,a5,s1 + 802060ec: 0985 addi s3,s3,1 + 802060ee: 0949fc63 bgeu s3,s4,80206186 <emake+0x220> + 802060f2: f6040793 addi a5,s0,-160 + 802060f6: 97a6 add a5,a5,s1 shortname[i++] = ' '; - 80205da8: 02000693 li a3,32 + 802060f8: 02000693 li a3,32 while (i < CHAR_SHORT_NAME) { - 80205dac: 4729 li a4,10 + 802060fc: 4729 li a4,10 shortname[i++] = ' '; - 80205dae: 2485 addiw s1,s1,1 - 80205db0: 00d78023 sb a3,0(a5) + 802060fe: 2485 addiw s1,s1,1 + 80206100: 00d78023 sb a3,0(a5) while (i < CHAR_SHORT_NAME) { - 80205db4: 0785 addi a5,a5,1 - 80205db6: fe975ce3 bge a4,s1,80205dae <emake+0x198> + 80206104: 0785 addi a5,a5,1 + 80206106: fe975ce3 bge a4,s1,802060fe <emake+0x198> de.lne.checksum = cal_checksum((uchar *)shortname); - 80205dba: f6040513 addi a0,s0,-160 - 80205dbe: 00000097 auipc ra,0x0 - 80205dc2: e2a080e7 jalr -470(ra) # 80205be8 <cal_checksum> - 80205dc6: f6a40ea3 sb a0,-131(s0) + 8020610a: f6040513 addi a0,s0,-160 + 8020610e: 00000097 auipc ra,0x0 + 80206112: e2a080e7 jalr -470(ra) # 80205f38 <cal_checksum> + 80206116: f6a40ea3 sb a0,-131(s0) de.lne.attr = ATTR_LONG_NAME; - 80205dca: 47bd li a5,15 - 80205dcc: f6f40da3 sb a5,-133(s0) + 8020611a: 47bd li a5,15 + 8020611c: f6f40da3 sb a5,-133(s0) for (int i = entcnt; i > 0; i--) { - 80205dd0: f4843783 ld a5,-184(s0) - 80205dd4: 14f05c63 blez a5,80205f2c <emake+0x316> - 80205dd8: f5842783 lw a5,-168(s0) - 80205ddc: 37fd addiw a5,a5,-1 - 80205dde: f4f42223 sw a5,-188(s0) - 80205de2: 00179b9b slliw s7,a5,0x1 - 80205de6: 00fb8bbb addw s7,s7,a5 - 80205dea: 002b9b9b slliw s7,s7,0x2 - 80205dee: 00fb8bbb addw s7,s7,a5 - 80205df2: 9bea add s7,s7,s10 - 80205df4: 8aee mv s5,s11 - 80205df6: 8c66 mv s8,s9 + 80206120: f4843783 ld a5,-184(s0) + 80206124: 14f05c63 blez a5,8020627c <emake+0x316> + 80206128: f5842783 lw a5,-168(s0) + 8020612c: 37fd addiw a5,a5,-1 + 8020612e: f4f42223 sw a5,-188(s0) + 80206132: 00179b9b slliw s7,a5,0x1 + 80206136: 00fb8bbb addw s7,s7,a5 + 8020613a: 002b9b9b slliw s7,s7,0x2 + 8020613e: 00fb8bbb addw s7,s7,a5 + 80206142: 9bea add s7,s7,s10 + 80206144: 8aee mv s5,s11 + 80206146: 8c66 mv s8,s9 int end = 0; - 80205df8: 4981 li s3,0 + 80206148: 4981 li s3,0 uint8 *w = (uint8 *)de.lne.name1; - 80205dfa: f7140793 addi a5,s0,-143 - 80205dfe: f4f43823 sd a5,-176(s0) - 80205e02: 0ff00913 li s2,255 + 8020614a: f7140793 addi a5,s0,-143 + 8020614e: f4f43823 sd a5,-176(s0) + 80206152: 0ff00913 li s2,255 case 5: w = (uint8 *)de.lne.name2; break; - 80205e06: f7e40793 addi a5,s0,-130 - 80205e0a: f4f43c23 sd a5,-168(s0) + 80206156: f7e40793 addi a5,s0,-130 + 8020615a: f4f43c23 sd a5,-168(s0) switch (j) { - 80205e0e: 44ad li s1,11 - 80205e10: f8c40a13 addi s4,s0,-116 - 80205e14: a0c5 j 80205ef4 <emake+0x2de> + 8020615e: 44ad li s1,11 + 80206160: f8c40a13 addi s4,s0,-116 + 80206164: a0c5 j 80206244 <emake+0x2de> if (name > p) { // last '.' - 80205e16: 0549f663 bgeu s3,s4,80205e62 <emake+0x24c> + 80206166: 0549f663 bgeu s3,s4,802061b2 <emake+0x24c> memset(shortname + i, ' ', 8 - i); - 80205e1a: 47a1 li a5,8 - 80205e1c: 4097863b subw a2,a5,s1 - 80205e20: 02000593 li a1,32 - 80205e24: f5043783 ld a5,-176(s0) - 80205e28: 00978533 add a0,a5,s1 - 80205e2c: ffffb097 auipc ra,0xffffb - 80205e30: 936080e7 jalr -1738(ra) # 80200762 <memset> + 8020616a: 47a1 li a5,8 + 8020616c: 4097863b subw a2,a5,s1 + 80206170: 02000593 li a1,32 + 80206174: f5043783 ld a5,-176(s0) + 80206178: 00978533 add a0,a5,s1 + 8020617c: ffffa097 auipc ra,0xffffa + 80206180: 5e6080e7 jalr 1510(ra) # 80200762 <memset> while (i < CHAR_SHORT_NAME && (c = *name++)) { - 80205e34: 89d2 mv s3,s4 + 80206184: 89d2 mv s3,s4 shortname[i++] = c; - 80205e36: 8a4e mv s4,s3 - 80205e38: 84d6 mv s1,s5 - 80205e3a: 4981 li s3,0 - 80205e3c: a02d j 80205e66 <emake+0x250> + 80206186: 8a4e mv s4,s3 + 80206188: 84d6 mv s1,s5 + 8020618a: 4981 li s3,0 + 8020618c: a02d j 802061b6 <emake+0x250> if (strchr(illegal, c) != NULL) { - 80205e3e: 85ca mv a1,s2 - 80205e40: 00006517 auipc a0,0x6 - 80205e44: be850513 addi a0,a0,-1048 # 8020ba28 <illegal.0> - 80205e48: ffffb097 auipc ra,0xffffb - 80205e4c: b78080e7 jalr -1160(ra) # 802009c0 <strchr> - 80205e50: c119 beqz a0,80205e56 <emake+0x240> + 8020618e: 85ca mv a1,s2 + 80206190: 00006517 auipc a0,0x6 + 80206194: b0850513 addi a0,a0,-1272 # 8020bc98 <illegal.0> + 80206198: ffffb097 auipc ra,0xffffb + 8020619c: 828080e7 jalr -2008(ra) # 802009c0 <strchr> + 802061a0: c119 beqz a0,802061a6 <emake+0x240> c = '_'; - 80205e52: 05f00913 li s2,95 + 802061a2: 05f00913 li s2,95 shortname[i++] = c; - 80205e56: f9048793 addi a5,s1,-112 - 80205e5a: 97a2 add a5,a5,s0 - 80205e5c: fd278823 sb s2,-48(a5) - 80205e60: 2485 addiw s1,s1,1 + 802061a6: f9048793 addi a5,s1,-112 + 802061aa: 97a2 add a5,a5,s0 + 802061ac: fd278823 sb s2,-48(a5) + 802061b0: 2485 addiw s1,s1,1 while (i < CHAR_SHORT_NAME && (c = *name++)) { - 80205e62: f49bcce3 blt s7,s1,80205dba <emake+0x1a4> + 802061b2: f49bcce3 blt s7,s1,8020610a <emake+0x1a4> shortname[i++] = c; - 80205e66: 8952 mv s2,s4 + 802061b6: 8952 mv s2,s4 while (i < CHAR_SHORT_NAME && (c = *name++)) { - 80205e68: 00190a13 addi s4,s2,1 - 80205e6c: 00094903 lbu s2,0(s2) - 80205e70: 02090663 beqz s2,80205e9c <emake+0x286> + 802061b8: 00190a13 addi s4,s2,1 + 802061bc: 00094903 lbu s2,0(s2) + 802061c0: 02090663 beqz s2,802061ec <emake+0x286> if (i == 8 && p) { - 80205e74: f35482e3 beq s1,s5,80205d98 <emake+0x182> + 802061c4: f35482e3 beq s1,s5,802060e8 <emake+0x182> if (c == ' ') { continue; } - 80205e78: 02000793 li a5,32 - 80205e7c: fef903e3 beq s2,a5,80205e62 <emake+0x24c> + 802061c8: 02000793 li a5,32 + 802061cc: fef903e3 beq s2,a5,802061b2 <emake+0x24c> if (c == '.') { - 80205e80: 02e00793 li a5,46 - 80205e84: f8f909e3 beq s2,a5,80205e16 <emake+0x200> + 802061d0: 02e00793 li a5,46 + 802061d4: f8f909e3 beq s2,a5,80206166 <emake+0x200> if (c >= 'a' && c <= 'z') { - 80205e88: f9f9079b addiw a5,s2,-97 - 80205e8c: 0ff7f793 zext.b a5,a5 - 80205e90: fafc67e3 bltu s8,a5,80205e3e <emake+0x228> + 802061d8: f9f9079b addiw a5,s2,-97 + 802061dc: 0ff7f793 zext.b a5,a5 + 802061e0: fafc67e3 bltu s8,a5,8020618e <emake+0x228> c += 'A' - 'a'; - 80205e94: 3901 addiw s2,s2,-32 - 80205e96: 0ff97913 zext.b s2,s2 - 80205e9a: bf75 j 80205e56 <emake+0x240> + 802061e4: 3901 addiw s2,s2,-32 + 802061e6: 0ff97913 zext.b s2,s2 + 802061ea: bf75 j 802061a6 <emake+0x240> while (i < CHAR_SHORT_NAME) { - 80205e9c: 47a9 li a5,10 - 80205e9e: f097d2e3 bge a5,s1,80205da2 <emake+0x18c> - 80205ea2: bf21 j 80205dba <emake+0x1a4> + 802061ec: 47a9 li a5,10 + 802061ee: f097d2e3 bge a5,s1,802060f2 <emake+0x18c> + 802061f2: bf21 j 8020610a <emake+0x1a4> de.lne.order |= LAST_LONG_ENTRY; - 80205ea4: 0407e793 ori a5,a5,64 - 80205ea8: f6f40823 sb a5,-144(s0) - 80205eac: a891 j 80205f00 <emake+0x2ea> + 802061f4: 0407e793 ori a5,a5,64 + 802061f8: f6f40823 sb a5,-144(s0) + 802061fc: a891 j 80206250 <emake+0x2ea> if ((*w++ = *p++) == 0) { - 80205eae: 00084603 lbu a2,0(a6) + 802061fe: 00084603 lbu a2,0(a6) end = 1; - 80205eb2: 00163513 seqz a0,a2 + 80206202: 00163513 seqz a0,a2 *w++ = 0; - 80205eb6: 00278893 addi a7,a5,2 + 80206206: 00278893 addi a7,a5,2 if ((*w++ = *p++) == 0) { - 80205eba: 0805 addi a6,a6,1 + 8020620a: 0805 addi a6,a6,1 *w++ = 0; - 80205ebc: 85ce mv a1,s3 - 80205ebe: a8d5 j 80205fb2 <emake+0x39c> + 8020620c: 85ce mv a1,s3 + 8020620e: a8d5 j 80206302 <emake+0x39c> uint off2 = reloc_clus(dp, off, 1); - 80205ec0: 4605 li a2,1 - 80205ec2: 85e2 mv a1,s8 - 80205ec4: 855a mv a0,s6 - 80205ec6: fffff097 auipc ra,0xfffff - 80205eca: 460080e7 jalr 1120(ra) # 80205326 <reloc_clus> + 80206210: 4605 li a2,1 + 80206212: 85e2 mv a1,s8 + 80206214: 855a mv a0,s6 + 80206216: fffff097 auipc ra,0xfffff + 8020621a: 460080e7 jalr 1120(ra) # 80205676 <reloc_clus> rw_clus(dp->cur_clus, 1, 0, (uint64)&de, off2, sizeof(de)); - 80205ece: 02000793 li a5,32 - 80205ed2: 0005071b sext.w a4,a0 - 80205ed6: f7040693 addi a3,s0,-144 - 80205eda: 864e mv a2,s3 - 80205edc: 4585 li a1,1 - 80205ede: 10cb2503 lw a0,268(s6) - 80205ee2: fffff097 auipc ra,0xfffff - 80205ee6: 54c080e7 jalr 1356(ra) # 8020542e <rw_clus> + 8020621e: 02000793 li a5,32 + 80206222: 0005071b sext.w a4,a0 + 80206226: f7040693 addi a3,s0,-144 + 8020622a: 864e mv a2,s3 + 8020622c: 4585 li a1,1 + 8020622e: 10cb2503 lw a0,268(s6) + 80206232: fffff097 auipc ra,0xfffff + 80206236: 54c080e7 jalr 1356(ra) # 8020577e <rw_clus> off += sizeof(de); - 80205eea: 020c0c1b addiw s8,s8,32 + 8020623a: 020c0c1b addiw s8,s8,32 for (int i = entcnt; i > 0; i--) { - 80205eee: 1bcd addi s7,s7,-13 - 80205ef0: 03505163 blez s5,80205f12 <emake+0x2fc> + 8020623e: 1bcd addi s7,s7,-13 + 80206240: 03505163 blez s5,80206262 <emake+0x2fc> if ((de.lne.order = i) == entcnt) { - 80205ef4: 0ffaf793 zext.b a5,s5 - 80205ef8: fafd86e3 beq s11,a5,80205ea4 <emake+0x28e> - 80205efc: f6f40823 sb a5,-144(s0) + 80206244: 0ffaf793 zext.b a5,s5 + 80206248: fafd86e3 beq s11,a5,802061f4 <emake+0x28e> + 8020624c: f6f40823 sb a5,-144(s0) char *p = ep->filename + (i - 1) * CHAR_LONG_NAME; - 80205f00: 3afd addiw s5,s5,-1 - 80205f02: 885e mv a6,s7 - 80205f04: 4709 li a4,2 + 80206250: 3afd addiw s5,s5,-1 + 80206252: 885e mv a6,s7 + 80206254: 4709 li a4,2 int end = 0; - 80205f06: 854e mv a0,s3 + 80206256: 854e mv a0,s3 uint8 *w = (uint8 *)de.lne.name1; - 80205f08: f5043783 ld a5,-176(s0) + 80206258: f5043783 ld a5,-176(s0) switch (j) { - 80205f0c: 4315 li t1,5 + 8020625c: 4315 li t1,5 for (int j = 1; j <= CHAR_LONG_NAME; j++) { - 80205f0e: 4e35 li t3,13 - 80205f10: a851 j 80205fa4 <emake+0x38e> - 80205f12: 020c8c9b addiw s9,s9,32 + 8020625e: 4e35 li t3,13 + 80206260: a851 j 802062f4 <emake+0x38e> + 80206262: 020c8c9b addiw s9,s9,32 off += sizeof(de); - 80205f16: 4781 li a5,0 - 80205f18: f4843703 ld a4,-184(s0) - 80205f1c: 00e05663 blez a4,80205f28 <emake+0x312> - 80205f20: f4442783 lw a5,-188(s0) - 80205f24: 0057979b slliw a5,a5,0x5 - 80205f28: 01978cbb addw s9,a5,s9 + 80206266: 4781 li a5,0 + 80206268: f4843703 ld a4,-184(s0) + 8020626c: 00e05663 blez a4,80206278 <emake+0x312> + 80206270: f4442783 lw a5,-188(s0) + 80206274: 0057979b slliw a5,a5,0x5 + 80206278: 01978cbb addw s9,a5,s9 memset(&de, 0, sizeof(de)); - 80205f2c: 02000613 li a2,32 - 80205f30: 4581 li a1,0 - 80205f32: f7040493 addi s1,s0,-144 - 80205f36: 8526 mv a0,s1 - 80205f38: ffffb097 auipc ra,0xffffb - 80205f3c: 82a080e7 jalr -2006(ra) # 80200762 <memset> + 8020627c: 02000613 li a2,32 + 80206280: 4581 li a1,0 + 80206282: f7040493 addi s1,s0,-144 + 80206286: 8526 mv a0,s1 + 80206288: ffffa097 auipc ra,0xffffa + 8020628c: 4da080e7 jalr 1242(ra) # 80200762 <memset> strncpy(de.sne.name, shortname, sizeof(de.sne.name)); - 80205f40: 462d li a2,11 - 80205f42: f6040593 addi a1,s0,-160 - 80205f46: 8526 mv a0,s1 - 80205f48: ffffb097 auipc ra,0xffffb - 80205f4c: 92e080e7 jalr -1746(ra) # 80200876 <strncpy> + 80206290: 462d li a2,11 + 80206292: f6040593 addi a1,s0,-160 + 80206296: 8526 mv a0,s1 + 80206298: ffffa097 auipc ra,0xffffa + 8020629c: 5de080e7 jalr 1502(ra) # 80200876 <strncpy> de.sne.attr = ep->attribute; - 80205f50: 100d4783 lbu a5,256(s10) - 80205f54: f6f40da3 sb a5,-133(s0) + 802062a0: 100d4783 lbu a5,256(s10) + 802062a4: f6f40da3 sb a5,-133(s0) de.sne.fst_clus_hi = (uint16)(ep->first_clus >> 16); // first clus high 16 bits - 80205f58: 104d2783 lw a5,260(s10) - 80205f5c: 0107d71b srliw a4,a5,0x10 - 80205f60: f8e41223 sh a4,-124(s0) + 802062a8: 104d2783 lw a5,260(s10) + 802062ac: 0107d71b srliw a4,a5,0x10 + 802062b0: f8e41223 sh a4,-124(s0) de.sne.fst_clus_lo = (uint16)(ep->first_clus & 0xffff); // low 16 bits - 80205f64: f8f41523 sh a5,-118(s0) + 802062b4: f8f41523 sh a5,-118(s0) de.sne.file_size = ep->file_size; // filesize is updated in eupdate() - 80205f68: 108d2783 lw a5,264(s10) - 80205f6c: f8f42623 sw a5,-116(s0) + 802062b8: 108d2783 lw a5,264(s10) + 802062bc: f8f42623 sw a5,-116(s0) off = reloc_clus(dp, off, 1); - 80205f70: 4605 li a2,1 - 80205f72: 85e6 mv a1,s9 - 80205f74: 855a mv a0,s6 - 80205f76: fffff097 auipc ra,0xfffff - 80205f7a: 3b0080e7 jalr 944(ra) # 80205326 <reloc_clus> + 802062c0: 4605 li a2,1 + 802062c2: 85e6 mv a1,s9 + 802062c4: 855a mv a0,s6 + 802062c6: fffff097 auipc ra,0xfffff + 802062ca: 3b0080e7 jalr 944(ra) # 80205676 <reloc_clus> rw_clus(dp->cur_clus, 1, 0, (uint64)&de, off, sizeof(de)); - 80205f7e: 02000793 li a5,32 - 80205f82: 0005071b sext.w a4,a0 - 80205f86: 86a6 mv a3,s1 - 80205f88: 4601 li a2,0 - 80205f8a: 4585 li a1,1 - 80205f8c: 10cb2503 lw a0,268(s6) - 80205f90: fffff097 auipc ra,0xfffff - 80205f94: 49e080e7 jalr 1182(ra) # 8020542e <rw_clus> -} - 80205f98: b325 j 80205cc0 <emake+0xaa> + 802062ce: 02000793 li a5,32 + 802062d2: 0005071b sext.w a4,a0 + 802062d6: 86a6 mv a3,s1 + 802062d8: 4601 li a2,0 + 802062da: 4585 li a1,1 + 802062dc: 10cb2503 lw a0,268(s6) + 802062e0: fffff097 auipc ra,0xfffff + 802062e4: 49e080e7 jalr 1182(ra) # 8020577e <rw_clus> +} + 802062e8: b325 j 80206010 <emake+0xaa> case 5: w = (uint8 *)de.lne.name2; break; - 80205f9a: f5843783 ld a5,-168(s0) - 80205f9e: a011 j 80205fa2 <emake+0x38c> + 802062ea: f5843783 ld a5,-168(s0) + 802062ee: a011 j 802062f2 <emake+0x38c> switch (j) { - 80205fa0: 87d2 mv a5,s4 + 802062f0: 87d2 mv a5,s4 for (int j = 1; j <= CHAR_LONG_NAME; j++) { - 80205fa2: 2705 addiw a4,a4,1 - 80205fa4: fff7069b addiw a3,a4,-1 + 802062f2: 2705 addiw a4,a4,1 + 802062f4: fff7069b addiw a3,a4,-1 if (end) { - 80205fa8: d119 beqz a0,80205eae <emake+0x298> + 802062f8: d119 beqz a0,802061fe <emake+0x298> *w++ = 0xff; - 80205faa: 00278893 addi a7,a5,2 - 80205fae: 864a mv a2,s2 - 80205fb0: 85ca mv a1,s2 + 802062fa: 00278893 addi a7,a5,2 + 802062fe: 864a mv a2,s2 + 80206300: 85ca mv a1,s2 *w++ = 0xff; // on k210, unaligned reading is illegal - 80205fb2: 00c78023 sb a2,0(a5) + 80206302: 00c78023 sb a2,0(a5) *w++ = 0xff; - 80205fb6: 00b780a3 sb a1,1(a5) + 80206306: 00b780a3 sb a1,1(a5) switch (j) { - 80205fba: fe6680e3 beq a3,t1,80205f9a <emake+0x384> - 80205fbe: fe9681e3 beq a3,s1,80205fa0 <emake+0x38a> + 8020630a: fe6680e3 beq a3,t1,802062ea <emake+0x384> + 8020630e: fe9681e3 beq a3,s1,802062f0 <emake+0x38a> for (int j = 1; j <= CHAR_LONG_NAME; j++) { - 80205fc2: 0007079b sext.w a5,a4 - 80205fc6: eefe4de3 blt t3,a5,80205ec0 <emake+0x2aa> - 80205fca: 87c6 mv a5,a7 - 80205fcc: bfd9 j 80205fa2 <emake+0x38c> + 80206312: 0007079b sext.w a5,a4 + 80206316: eefe4de3 blt t3,a5,80206210 <emake+0x2aa> + 8020631a: 87c6 mv a5,a7 + 8020631c: bfd9 j 802062f2 <emake+0x38c> if (c == ' ') { continue; } - 80205fce: 02000793 li a5,32 - 80205fd2: e8f90ae3 beq s2,a5,80205e66 <emake+0x250> + 8020631e: 02000793 li a5,32 + 80206322: e8f90ae3 beq s2,a5,802061b6 <emake+0x250> if (c == '.') { - 80205fd6: 02e00793 li a5,46 - 80205fda: eaf917e3 bne s2,a5,80205e88 <emake+0x272> - 80205fde: bd35 j 80205e1a <emake+0x204> - -0000000080205fe0 <edup>: -{ - 80205fe0: 1101 addi sp,sp,-32 - 80205fe2: ec06 sd ra,24(sp) - 80205fe4: e822 sd s0,16(sp) - 80205fe6: e426 sd s1,8(sp) - 80205fe8: 1000 addi s0,sp,32 - 80205fea: 84aa mv s1,a0 + 80206326: 02e00793 li a5,46 + 8020632a: eaf917e3 bne s2,a5,802061d8 <emake+0x272> + 8020632e: bd35 j 8020616a <emake+0x204> + +0000000080206330 <edup>: +{ + 80206330: 1101 addi sp,sp,-32 + 80206332: ec06 sd ra,24(sp) + 80206334: e822 sd s0,16(sp) + 80206336: e426 sd s1,8(sp) + 80206338: 1000 addi s0,sp,32 + 8020633a: 84aa mv s1,a0 if (entry != 0) { - 80205fec: c515 beqz a0,80206018 <edup+0x38> + 8020633c: c515 beqz a0,80206368 <edup+0x38> acquire(&ecache.lock); - 80205fee: 00018517 auipc a0,0x18 - 80205ff2: 5ca50513 addi a0,a0,1482 # 8021e5b8 <ecache> - 80205ff6: ffffa097 auipc ra,0xffffa - 80205ffa: 6d0080e7 jalr 1744(ra) # 802006c6 <acquire> + 8020633e: 00018517 auipc a0,0x18 + 80206342: 27a50513 addi a0,a0,634 # 8021e5b8 <ecache> + 80206346: ffffa097 auipc ra,0xffffa + 8020634a: 380080e7 jalr 896(ra) # 802006c6 <acquire> entry->ref++; - 80205ffe: 1184a783 lw a5,280(s1) - 80206002: 2785 addiw a5,a5,1 - 80206004: 10f4ac23 sw a5,280(s1) + 8020634e: 1184a783 lw a5,280(s1) + 80206352: 2785 addiw a5,a5,1 + 80206354: 10f4ac23 sw a5,280(s1) release(&ecache.lock); - 80206008: 00018517 auipc a0,0x18 - 8020600c: 5b050513 addi a0,a0,1456 # 8021e5b8 <ecache> - 80206010: ffffa097 auipc ra,0xffffa - 80206014: 70a080e7 jalr 1802(ra) # 8020071a <release> -} - 80206018: 8526 mv a0,s1 - 8020601a: 60e2 ld ra,24(sp) - 8020601c: 6442 ld s0,16(sp) - 8020601e: 64a2 ld s1,8(sp) - 80206020: 6105 addi sp,sp,32 - 80206022: 8082 ret - -0000000080206024 <eupdate>: + 80206358: 00018517 auipc a0,0x18 + 8020635c: 26050513 addi a0,a0,608 # 8021e5b8 <ecache> + 80206360: ffffa097 auipc ra,0xffffa + 80206364: 3ba080e7 jalr 954(ra) # 8020071a <release> +} + 80206368: 8526 mv a0,s1 + 8020636a: 60e2 ld ra,24(sp) + 8020636c: 6442 ld s0,16(sp) + 8020636e: 64a2 ld s1,8(sp) + 80206370: 6105 addi sp,sp,32 + 80206372: 8082 ret + +0000000080206374 <eupdate>: if (!entry->dirty || entry->valid != 1) { return; } - 80206024: 11554783 lbu a5,277(a0) - 80206028: c3e5 beqz a5,80206108 <eupdate+0xe4> -{ - 8020602a: 711d addi sp,sp,-96 - 8020602c: ec86 sd ra,88(sp) - 8020602e: e8a2 sd s0,80(sp) - 80206030: e4a6 sd s1,72(sp) - 80206032: e0ca sd s2,64(sp) - 80206034: fc4e sd s3,56(sp) - 80206036: 1080 addi s0,sp,96 - 80206038: 84aa mv s1,a0 + 80206374: 11554783 lbu a5,277(a0) + 80206378: c3e5 beqz a5,80206458 <eupdate+0xe4> +{ + 8020637a: 711d addi sp,sp,-96 + 8020637c: ec86 sd ra,88(sp) + 8020637e: e8a2 sd s0,80(sp) + 80206380: e4a6 sd s1,72(sp) + 80206382: e0ca sd s2,64(sp) + 80206384: fc4e sd s3,56(sp) + 80206386: 1080 addi s0,sp,96 + 80206388: 84aa mv s1,a0 if (!entry->dirty || entry->valid != 1) { return; } - 8020603a: 11651703 lh a4,278(a0) - 8020603e: 4785 li a5,1 - 80206040: 00f70963 beq a4,a5,80206052 <eupdate+0x2e> -} - 80206044: 60e6 ld ra,88(sp) - 80206046: 6446 ld s0,80(sp) - 80206048: 64a6 ld s1,72(sp) - 8020604a: 6906 ld s2,64(sp) - 8020604c: 79e2 ld s3,56(sp) - 8020604e: 6125 addi sp,sp,96 - 80206050: 8082 ret + 8020638a: 11651703 lh a4,278(a0) + 8020638e: 4785 li a5,1 + 80206390: 00f70963 beq a4,a5,802063a2 <eupdate+0x2e> +} + 80206394: 60e6 ld ra,88(sp) + 80206396: 6446 ld s0,80(sp) + 80206398: 64a6 ld s1,72(sp) + 8020639a: 6906 ld s2,64(sp) + 8020639c: 79e2 ld s3,56(sp) + 8020639e: 6125 addi sp,sp,96 + 802063a0: 8082 ret uint entcnt = 0; - 80206052: fc042623 sw zero,-52(s0) + 802063a2: fc042623 sw zero,-52(s0) uint32 off = reloc_clus(entry->parent, entry->off, 0); - 80206056: 4601 li a2,0 - 80206058: 11c52583 lw a1,284(a0) - 8020605c: 12053503 ld a0,288(a0) - 80206060: fffff097 auipc ra,0xfffff - 80206064: 2c6080e7 jalr 710(ra) # 80205326 <reloc_clus> + 802063a6: 4601 li a2,0 + 802063a8: 11c52583 lw a1,284(a0) + 802063ac: 12053503 ld a0,288(a0) + 802063b0: fffff097 auipc ra,0xfffff + 802063b4: 2c6080e7 jalr 710(ra) # 80205676 <reloc_clus> rw_clus(entry->parent->cur_clus, 0, 0, (uint64) &entcnt, off, 1); - 80206068: 1204b803 ld a6,288(s1) - 8020606c: 4785 li a5,1 - 8020606e: 0005071b sext.w a4,a0 - 80206072: fcc40693 addi a3,s0,-52 - 80206076: 4601 li a2,0 - 80206078: 4581 li a1,0 - 8020607a: 10c82503 lw a0,268(a6) - 8020607e: fffff097 auipc ra,0xfffff - 80206082: 3b0080e7 jalr 944(ra) # 8020542e <rw_clus> + 802063b8: 1204b803 ld a6,288(s1) + 802063bc: 4785 li a5,1 + 802063be: 0005071b sext.w a4,a0 + 802063c2: fcc40693 addi a3,s0,-52 + 802063c6: 4601 li a2,0 + 802063c8: 4581 li a1,0 + 802063ca: 10c82503 lw a0,268(a6) + 802063ce: fffff097 auipc ra,0xfffff + 802063d2: 3b0080e7 jalr 944(ra) # 8020577e <rw_clus> entcnt &= ~LAST_LONG_ENTRY; - 80206086: fcc42583 lw a1,-52(s0) - 8020608a: fbf5f593 andi a1,a1,-65 - 8020608e: fcb42623 sw a1,-52(s0) + 802063d6: fcc42583 lw a1,-52(s0) + 802063da: fbf5f593 andi a1,a1,-65 + 802063de: fcb42623 sw a1,-52(s0) off = reloc_clus(entry->parent, entry->off + (entcnt << 5), 0); - 80206092: 0055959b slliw a1,a1,0x5 - 80206096: 11c4a783 lw a5,284(s1) - 8020609a: 4601 li a2,0 - 8020609c: 9dbd addw a1,a1,a5 - 8020609e: 1204b503 ld a0,288(s1) - 802060a2: fffff097 auipc ra,0xfffff - 802060a6: 284080e7 jalr 644(ra) # 80205326 <reloc_clus> - 802060aa: 0005099b sext.w s3,a0 + 802063e2: 0055959b slliw a1,a1,0x5 + 802063e6: 11c4a783 lw a5,284(s1) + 802063ea: 4601 li a2,0 + 802063ec: 9dbd addw a1,a1,a5 + 802063ee: 1204b503 ld a0,288(s1) + 802063f2: fffff097 auipc ra,0xfffff + 802063f6: 284080e7 jalr 644(ra) # 80205676 <reloc_clus> + 802063fa: 0005099b sext.w s3,a0 rw_clus(entry->parent->cur_clus, 0, 0, (uint64)&de, off, sizeof(de)); - 802060ae: 1204b503 ld a0,288(s1) - 802060b2: 02000793 li a5,32 - 802060b6: 874e mv a4,s3 - 802060b8: fa840913 addi s2,s0,-88 - 802060bc: 86ca mv a3,s2 - 802060be: 4601 li a2,0 - 802060c0: 4581 li a1,0 - 802060c2: 10c52503 lw a0,268(a0) - 802060c6: fffff097 auipc ra,0xfffff - 802060ca: 368080e7 jalr 872(ra) # 8020542e <rw_clus> + 802063fe: 1204b503 ld a0,288(s1) + 80206402: 02000793 li a5,32 + 80206406: 874e mv a4,s3 + 80206408: fa840913 addi s2,s0,-88 + 8020640c: 86ca mv a3,s2 + 8020640e: 4601 li a2,0 + 80206410: 4581 li a1,0 + 80206412: 10c52503 lw a0,268(a0) + 80206416: fffff097 auipc ra,0xfffff + 8020641a: 368080e7 jalr 872(ra) # 8020577e <rw_clus> de.sne.fst_clus_hi = (uint16)(entry->first_clus >> 16); - 802060ce: 1044a783 lw a5,260(s1) - 802060d2: 0107d71b srliw a4,a5,0x10 - 802060d6: fae41e23 sh a4,-68(s0) + 8020641e: 1044a783 lw a5,260(s1) + 80206422: 0107d71b srliw a4,a5,0x10 + 80206426: fae41e23 sh a4,-68(s0) de.sne.fst_clus_lo = (uint16)(entry->first_clus & 0xffff); - 802060da: fcf41123 sh a5,-62(s0) + 8020642a: fcf41123 sh a5,-62(s0) de.sne.file_size = entry->file_size; - 802060de: 1084a783 lw a5,264(s1) - 802060e2: fcf42223 sw a5,-60(s0) + 8020642e: 1084a783 lw a5,264(s1) + 80206432: fcf42223 sw a5,-60(s0) rw_clus(entry->parent->cur_clus, 1, 0, (uint64)&de, off, sizeof(de)); - 802060e6: 1204b503 ld a0,288(s1) - 802060ea: 02000793 li a5,32 - 802060ee: 874e mv a4,s3 - 802060f0: 86ca mv a3,s2 - 802060f2: 4601 li a2,0 - 802060f4: 4585 li a1,1 - 802060f6: 10c52503 lw a0,268(a0) - 802060fa: fffff097 auipc ra,0xfffff - 802060fe: 334080e7 jalr 820(ra) # 8020542e <rw_clus> + 80206436: 1204b503 ld a0,288(s1) + 8020643a: 02000793 li a5,32 + 8020643e: 874e mv a4,s3 + 80206440: 86ca mv a3,s2 + 80206442: 4601 li a2,0 + 80206444: 4585 li a1,1 + 80206446: 10c52503 lw a0,268(a0) + 8020644a: fffff097 auipc ra,0xfffff + 8020644e: 334080e7 jalr 820(ra) # 8020577e <rw_clus> entry->dirty = 0; - 80206102: 10048aa3 sb zero,277(s1) - 80206106: bf3d j 80206044 <eupdate+0x20> - 80206108: 8082 ret + 80206452: 10048aa3 sb zero,277(s1) + 80206456: bf3d j 80206394 <eupdate+0x20> + 80206458: 8082 ret -000000008020610a <eremove>: +000000008020645a <eremove>: if (entry->valid != 1) { return; } - 8020610a: 11651703 lh a4,278(a0) - 8020610e: 4785 li a5,1 - 80206110: 00f70363 beq a4,a5,80206116 <eremove+0xc> - 80206114: 8082 ret -{ - 80206116: 715d addi sp,sp,-80 - 80206118: e486 sd ra,72(sp) - 8020611a: e0a2 sd s0,64(sp) - 8020611c: fc26 sd s1,56(sp) - 8020611e: f84a sd s2,48(sp) - 80206120: f44e sd s3,40(sp) - 80206122: f052 sd s4,32(sp) - 80206124: ec56 sd s5,24(sp) - 80206126: 0880 addi s0,sp,80 - 80206128: 89aa mv s3,a0 + 8020645a: 11651703 lh a4,278(a0) + 8020645e: 4785 li a5,1 + 80206460: 00f70363 beq a4,a5,80206466 <eremove+0xc> + 80206464: 8082 ret +{ + 80206466: 715d addi sp,sp,-80 + 80206468: e486 sd ra,72(sp) + 8020646a: e0a2 sd s0,64(sp) + 8020646c: fc26 sd s1,56(sp) + 8020646e: f84a sd s2,48(sp) + 80206470: f44e sd s3,40(sp) + 80206472: f052 sd s4,32(sp) + 80206474: ec56 sd s5,24(sp) + 80206476: 0880 addi s0,sp,80 + 80206478: 89aa mv s3,a0 uint entcnt = 0; - 8020612a: fa042e23 sw zero,-68(s0) + 8020647a: fa042e23 sw zero,-68(s0) uint32 off = entry->off; - 8020612e: 11c52a03 lw s4,284(a0) + 8020647e: 11c52a03 lw s4,284(a0) uint32 off2 = reloc_clus(entry->parent, off, 0); - 80206132: 4601 li a2,0 - 80206134: 85d2 mv a1,s4 - 80206136: 12053503 ld a0,288(a0) - 8020613a: fffff097 auipc ra,0xfffff - 8020613e: 1ec080e7 jalr 492(ra) # 80205326 <reloc_clus> - 80206142: 0005049b sext.w s1,a0 + 80206482: 4601 li a2,0 + 80206484: 85d2 mv a1,s4 + 80206486: 12053503 ld a0,288(a0) + 8020648a: fffff097 auipc ra,0xfffff + 8020648e: 1ec080e7 jalr 492(ra) # 80205676 <reloc_clus> + 80206492: 0005049b sext.w s1,a0 rw_clus(entry->parent->cur_clus, 0, 0, (uint64) &entcnt, off2, 1); - 80206146: 1209b503 ld a0,288(s3) - 8020614a: 4785 li a5,1 - 8020614c: 8726 mv a4,s1 - 8020614e: fbc40693 addi a3,s0,-68 - 80206152: 4601 li a2,0 - 80206154: 4581 li a1,0 - 80206156: 10c52503 lw a0,268(a0) - 8020615a: fffff097 auipc ra,0xfffff - 8020615e: 2d4080e7 jalr 724(ra) # 8020542e <rw_clus> + 80206496: 1209b503 ld a0,288(s3) + 8020649a: 4785 li a5,1 + 8020649c: 8726 mv a4,s1 + 8020649e: fbc40693 addi a3,s0,-68 + 802064a2: 4601 li a2,0 + 802064a4: 4581 li a1,0 + 802064a6: 10c52503 lw a0,268(a0) + 802064aa: fffff097 auipc ra,0xfffff + 802064ae: 2d4080e7 jalr 724(ra) # 8020577e <rw_clus> entcnt &= ~LAST_LONG_ENTRY; - 80206162: fbc42783 lw a5,-68(s0) - 80206166: fbf7f793 andi a5,a5,-65 - 8020616a: faf42e23 sw a5,-68(s0) + 802064b2: fbc42783 lw a5,-68(s0) + 802064b6: fbf7f793 andi a5,a5,-65 + 802064ba: faf42e23 sw a5,-68(s0) uint8 flag = EMPTY_ENTRY; - 8020616e: 5795 li a5,-27 - 80206170: faf40da3 sb a5,-69(s0) + 802064be: 5795 li a5,-27 + 802064c0: faf40da3 sb a5,-69(s0) for (int i = 0; i <= entcnt; i++) { - 80206174: 4901 li s2,0 + 802064c4: 4901 li s2,0 rw_clus(entry->parent->cur_clus, 1, 0, (uint64) &flag, off2, 1); - 80206176: fbb40a93 addi s5,s0,-69 - 8020617a: 1209b503 ld a0,288(s3) - 8020617e: 4785 li a5,1 - 80206180: 8726 mv a4,s1 - 80206182: 86d6 mv a3,s5 - 80206184: 4601 li a2,0 - 80206186: 4585 li a1,1 - 80206188: 10c52503 lw a0,268(a0) - 8020618c: fffff097 auipc ra,0xfffff - 80206190: 2a2080e7 jalr 674(ra) # 8020542e <rw_clus> + 802064c6: fbb40a93 addi s5,s0,-69 + 802064ca: 1209b503 ld a0,288(s3) + 802064ce: 4785 li a5,1 + 802064d0: 8726 mv a4,s1 + 802064d2: 86d6 mv a3,s5 + 802064d4: 4601 li a2,0 + 802064d6: 4585 li a1,1 + 802064d8: 10c52503 lw a0,268(a0) + 802064dc: fffff097 auipc ra,0xfffff + 802064e0: 2a2080e7 jalr 674(ra) # 8020577e <rw_clus> off += 32; - 80206194: 020a0a1b addiw s4,s4,32 + 802064e4: 020a0a1b addiw s4,s4,32 off2 = reloc_clus(entry->parent, off, 0); - 80206198: 4601 li a2,0 - 8020619a: 85d2 mv a1,s4 - 8020619c: 1209b503 ld a0,288(s3) - 802061a0: fffff097 auipc ra,0xfffff - 802061a4: 186080e7 jalr 390(ra) # 80205326 <reloc_clus> - 802061a8: 0005049b sext.w s1,a0 + 802064e8: 4601 li a2,0 + 802064ea: 85d2 mv a1,s4 + 802064ec: 1209b503 ld a0,288(s3) + 802064f0: fffff097 auipc ra,0xfffff + 802064f4: 186080e7 jalr 390(ra) # 80205676 <reloc_clus> + 802064f8: 0005049b sext.w s1,a0 for (int i = 0; i <= entcnt; i++) { - 802061ac: 0019079b addiw a5,s2,1 - 802061b0: 0007891b sext.w s2,a5 - 802061b4: fbc42703 lw a4,-68(s0) - 802061b8: fd2771e3 bgeu a4,s2,8020617a <eremove+0x70> + 802064fc: 0019079b addiw a5,s2,1 + 80206500: 0007891b sext.w s2,a5 + 80206504: fbc42703 lw a4,-68(s0) + 80206508: fd2771e3 bgeu a4,s2,802064ca <eremove+0x70> entry->valid = -1; - 802061bc: 57fd li a5,-1 - 802061be: 10f99b23 sh a5,278(s3) -} - 802061c2: 60a6 ld ra,72(sp) - 802061c4: 6406 ld s0,64(sp) - 802061c6: 74e2 ld s1,56(sp) - 802061c8: 7942 ld s2,48(sp) - 802061ca: 79a2 ld s3,40(sp) - 802061cc: 7a02 ld s4,32(sp) - 802061ce: 6ae2 ld s5,24(sp) - 802061d0: 6161 addi sp,sp,80 - 802061d2: 8082 ret - -00000000802061d4 <etrunc>: -{ - 802061d4: 7179 addi sp,sp,-48 - 802061d6: f406 sd ra,40(sp) - 802061d8: f022 sd s0,32(sp) - 802061da: ec26 sd s1,24(sp) - 802061dc: e84a sd s2,16(sp) - 802061de: e44e sd s3,8(sp) - 802061e0: e052 sd s4,0(sp) - 802061e2: 1800 addi s0,sp,48 - 802061e4: 8a2a mv s4,a0 + 8020650c: 57fd li a5,-1 + 8020650e: 10f99b23 sh a5,278(s3) +} + 80206512: 60a6 ld ra,72(sp) + 80206514: 6406 ld s0,64(sp) + 80206516: 74e2 ld s1,56(sp) + 80206518: 7942 ld s2,48(sp) + 8020651a: 79a2 ld s3,40(sp) + 8020651c: 7a02 ld s4,32(sp) + 8020651e: 6ae2 ld s5,24(sp) + 80206520: 6161 addi sp,sp,80 + 80206522: 8082 ret + +0000000080206524 <etrunc>: +{ + 80206524: 7179 addi sp,sp,-48 + 80206526: f406 sd ra,40(sp) + 80206528: f022 sd s0,32(sp) + 8020652a: ec26 sd s1,24(sp) + 8020652c: e84a sd s2,16(sp) + 8020652e: e44e sd s3,8(sp) + 80206530: e052 sd s4,0(sp) + 80206532: 1800 addi s0,sp,48 + 80206534: 8a2a mv s4,a0 for (uint32 clus = entry->first_clus; clus >= 2 && clus < FAT32_EOC; ) { - 802061e6: 10452483 lw s1,260(a0) - 802061ea: ffe4871b addiw a4,s1,-2 - 802061ee: 100007b7 lui a5,0x10000 - 802061f2: 17d5 addi a5,a5,-11 # ffffff5 <_entry-0x7020000b> - 802061f4: 02e7e663 bltu a5,a4,80206220 <etrunc+0x4c> - 802061f8: 89be mv s3,a5 + 80206536: 10452483 lw s1,260(a0) + 8020653a: ffe4871b addiw a4,s1,-2 + 8020653e: 100007b7 lui a5,0x10000 + 80206542: 17d5 addi a5,a5,-11 # ffffff5 <_entry-0x7020000b> + 80206544: 02e7e663 bltu a5,a4,80206570 <etrunc+0x4c> + 80206548: 89be mv s3,a5 uint32 next = read_fat(clus); - 802061fa: 0004891b sext.w s2,s1 - 802061fe: 8526 mv a0,s1 - 80206200: fffff097 auipc ra,0xfffff - 80206204: eee080e7 jalr -274(ra) # 802050ee <read_fat> - 80206208: 0005049b sext.w s1,a0 + 8020654a: 0004891b sext.w s2,s1 + 8020654e: 8526 mv a0,s1 + 80206550: fffff097 auipc ra,0xfffff + 80206554: eee080e7 jalr -274(ra) # 8020543e <read_fat> + 80206558: 0005049b sext.w s1,a0 write_fat(cluster, 0); - 8020620c: 4581 li a1,0 - 8020620e: 854a mv a0,s2 - 80206210: fffff097 auipc ra,0xfffff - 80206214: 096080e7 jalr 150(ra) # 802052a6 <write_fat> + 8020655c: 4581 li a1,0 + 8020655e: 854a mv a0,s2 + 80206560: fffff097 auipc ra,0xfffff + 80206564: 096080e7 jalr 150(ra) # 802055f6 <write_fat> for (uint32 clus = entry->first_clus; clus >= 2 && clus < FAT32_EOC; ) { - 80206218: ffe4879b addiw a5,s1,-2 - 8020621c: fcf9ffe3 bgeu s3,a5,802061fa <etrunc+0x26> + 80206568: ffe4879b addiw a5,s1,-2 + 8020656c: fcf9ffe3 bgeu s3,a5,8020654a <etrunc+0x26> entry->file_size = 0; - 80206220: 100a2423 sw zero,264(s4) + 80206570: 100a2423 sw zero,264(s4) entry->first_clus = 0; - 80206224: 100a2223 sw zero,260(s4) + 80206574: 100a2223 sw zero,260(s4) entry->dirty = 1; - 80206228: 4785 li a5,1 - 8020622a: 10fa0aa3 sb a5,277(s4) -} - 8020622e: 70a2 ld ra,40(sp) - 80206230: 7402 ld s0,32(sp) - 80206232: 64e2 ld s1,24(sp) - 80206234: 6942 ld s2,16(sp) - 80206236: 69a2 ld s3,8(sp) - 80206238: 6a02 ld s4,0(sp) - 8020623a: 6145 addi sp,sp,48 - 8020623c: 8082 ret - -000000008020623e <elock>: -{ - 8020623e: 1141 addi sp,sp,-16 - 80206240: e406 sd ra,8(sp) - 80206242: e022 sd s0,0(sp) - 80206244: 0800 addi s0,sp,16 + 80206578: 4785 li a5,1 + 8020657a: 10fa0aa3 sb a5,277(s4) +} + 8020657e: 70a2 ld ra,40(sp) + 80206580: 7402 ld s0,32(sp) + 80206582: 64e2 ld s1,24(sp) + 80206584: 6942 ld s2,16(sp) + 80206586: 69a2 ld s3,8(sp) + 80206588: 6a02 ld s4,0(sp) + 8020658a: 6145 addi sp,sp,48 + 8020658c: 8082 ret + +000000008020658e <elock>: +{ + 8020658e: 1141 addi sp,sp,-16 + 80206590: e406 sd ra,8(sp) + 80206592: e022 sd s0,0(sp) + 80206594: 0800 addi s0,sp,16 if (entry == 0 || entry->ref < 1) - 80206246: cd19 beqz a0,80206264 <elock+0x26> - 80206248: 11852783 lw a5,280(a0) - 8020624c: 00f05c63 blez a5,80206264 <elock+0x26> + 80206596: cd19 beqz a0,802065b4 <elock+0x26> + 80206598: 11852783 lw a5,280(a0) + 8020659c: 00f05c63 blez a5,802065b4 <elock+0x26> acquiresleep(&entry->lock); - 80206250: 13850513 addi a0,a0,312 - 80206254: ffffd097 auipc ra,0xffffd - 80206258: 3ea080e7 jalr 1002(ra) # 8020363e <acquiresleep> -} - 8020625c: 60a2 ld ra,8(sp) - 8020625e: 6402 ld s0,0(sp) - 80206260: 0141 addi sp,sp,16 - 80206262: 8082 ret + 802065a0: 13850513 addi a0,a0,312 + 802065a4: ffffd097 auipc ra,0xffffd + 802065a8: 3b6080e7 jalr 950(ra) # 8020395a <acquiresleep> +} + 802065ac: 60a2 ld ra,8(sp) + 802065ae: 6402 ld s0,0(sp) + 802065b0: 0141 addi sp,sp,16 + 802065b2: 8082 ret panic("elock"); - 80206264: 00004517 auipc a0,0x4 - 80206268: a0c50513 addi a0,a0,-1524 # 80209c70 <digits+0x8f0> - 8020626c: ffffa097 auipc ra,0xffffa - 80206270: ed8080e7 jalr -296(ra) # 80200144 <panic> - -0000000080206274 <eunlock>: -{ - 80206274: 1101 addi sp,sp,-32 - 80206276: ec06 sd ra,24(sp) - 80206278: e822 sd s0,16(sp) - 8020627a: e426 sd s1,8(sp) - 8020627c: e04a sd s2,0(sp) - 8020627e: 1000 addi s0,sp,32 + 802065b4: 00003517 auipc a0,0x3 + 802065b8: 6f450513 addi a0,a0,1780 # 80209ca8 <digits+0x928> + 802065bc: ffffa097 auipc ra,0xffffa + 802065c0: b88080e7 jalr -1144(ra) # 80200144 <panic> + +00000000802065c4 <eunlock>: +{ + 802065c4: 1101 addi sp,sp,-32 + 802065c6: ec06 sd ra,24(sp) + 802065c8: e822 sd s0,16(sp) + 802065ca: e426 sd s1,8(sp) + 802065cc: e04a sd s2,0(sp) + 802065ce: 1000 addi s0,sp,32 if (entry == 0 || !holdingsleep(&entry->lock) || entry->ref < 1) - 80206280: c90d beqz a0,802062b2 <eunlock+0x3e> - 80206282: 84aa mv s1,a0 - 80206284: 13850913 addi s2,a0,312 - 80206288: 854a mv a0,s2 - 8020628a: ffffd097 auipc ra,0xffffd - 8020628e: 44e080e7 jalr 1102(ra) # 802036d8 <holdingsleep> - 80206292: c105 beqz a0,802062b2 <eunlock+0x3e> - 80206294: 1184a783 lw a5,280(s1) - 80206298: 00f05d63 blez a5,802062b2 <eunlock+0x3e> + 802065d0: c90d beqz a0,80206602 <eunlock+0x3e> + 802065d2: 84aa mv s1,a0 + 802065d4: 13850913 addi s2,a0,312 + 802065d8: 854a mv a0,s2 + 802065da: ffffd097 auipc ra,0xffffd + 802065de: 41a080e7 jalr 1050(ra) # 802039f4 <holdingsleep> + 802065e2: c105 beqz a0,80206602 <eunlock+0x3e> + 802065e4: 1184a783 lw a5,280(s1) + 802065e8: 00f05d63 blez a5,80206602 <eunlock+0x3e> releasesleep(&entry->lock); - 8020629c: 854a mv a0,s2 - 8020629e: ffffd097 auipc ra,0xffffd - 802062a2: 3f6080e7 jalr 1014(ra) # 80203694 <releasesleep> -} - 802062a6: 60e2 ld ra,24(sp) - 802062a8: 6442 ld s0,16(sp) - 802062aa: 64a2 ld s1,8(sp) - 802062ac: 6902 ld s2,0(sp) - 802062ae: 6105 addi sp,sp,32 - 802062b0: 8082 ret + 802065ec: 854a mv a0,s2 + 802065ee: ffffd097 auipc ra,0xffffd + 802065f2: 3c2080e7 jalr 962(ra) # 802039b0 <releasesleep> +} + 802065f6: 60e2 ld ra,24(sp) + 802065f8: 6442 ld s0,16(sp) + 802065fa: 64a2 ld s1,8(sp) + 802065fc: 6902 ld s2,0(sp) + 802065fe: 6105 addi sp,sp,32 + 80206600: 8082 ret panic("eunlock"); - 802062b2: 00004517 auipc a0,0x4 - 802062b6: 9c650513 addi a0,a0,-1594 # 80209c78 <digits+0x8f8> - 802062ba: ffffa097 auipc ra,0xffffa - 802062be: e8a080e7 jalr -374(ra) # 80200144 <panic> - -00000000802062c2 <eput>: -{ - 802062c2: 1101 addi sp,sp,-32 - 802062c4: ec06 sd ra,24(sp) - 802062c6: e822 sd s0,16(sp) - 802062c8: e426 sd s1,8(sp) - 802062ca: e04a sd s2,0(sp) - 802062cc: 1000 addi s0,sp,32 - 802062ce: 84aa mv s1,a0 + 80206602: 00003517 auipc a0,0x3 + 80206606: 6ae50513 addi a0,a0,1710 # 80209cb0 <digits+0x930> + 8020660a: ffffa097 auipc ra,0xffffa + 8020660e: b3a080e7 jalr -1222(ra) # 80200144 <panic> + +0000000080206612 <eput>: +{ + 80206612: 1101 addi sp,sp,-32 + 80206614: ec06 sd ra,24(sp) + 80206616: e822 sd s0,16(sp) + 80206618: e426 sd s1,8(sp) + 8020661a: e04a sd s2,0(sp) + 8020661c: 1000 addi s0,sp,32 + 8020661e: 84aa mv s1,a0 acquire(&ecache.lock); - 802062d0: 00018517 auipc a0,0x18 - 802062d4: 2e850513 addi a0,a0,744 # 8021e5b8 <ecache> - 802062d8: ffffa097 auipc ra,0xffffa - 802062dc: 3ee080e7 jalr 1006(ra) # 802006c6 <acquire> + 80206620: 00018517 auipc a0,0x18 + 80206624: f9850513 addi a0,a0,-104 # 8021e5b8 <ecache> + 80206628: ffffa097 auipc ra,0xffffa + 8020662c: 09e080e7 jalr 158(ra) # 802006c6 <acquire> if (entry != &root && entry->valid != 0 && entry->ref == 1) { - 802062e0: 00018797 auipc a5,0x18 - 802062e4: 17078793 addi a5,a5,368 # 8021e450 <root> - 802062e8: 00f48a63 beq s1,a5,802062fc <eput+0x3a> - 802062ec: 11649783 lh a5,278(s1) - 802062f0: c791 beqz a5,802062fc <eput+0x3a> - 802062f2: 1184a703 lw a4,280(s1) - 802062f6: 4785 li a5,1 - 802062f8: 02f70563 beq a4,a5,80206322 <eput+0x60> + 80206630: 00018797 auipc a5,0x18 + 80206634: e2078793 addi a5,a5,-480 # 8021e450 <root> + 80206638: 00f48a63 beq s1,a5,8020664c <eput+0x3a> + 8020663c: 11649783 lh a5,278(s1) + 80206640: c791 beqz a5,8020664c <eput+0x3a> + 80206642: 1184a703 lw a4,280(s1) + 80206646: 4785 li a5,1 + 80206648: 02f70563 beq a4,a5,80206672 <eput+0x60> entry->ref--; - 802062fc: 1184a783 lw a5,280(s1) - 80206300: 37fd addiw a5,a5,-1 - 80206302: 10f4ac23 sw a5,280(s1) + 8020664c: 1184a783 lw a5,280(s1) + 80206650: 37fd addiw a5,a5,-1 + 80206652: 10f4ac23 sw a5,280(s1) release(&ecache.lock); - 80206306: 00018517 auipc a0,0x18 - 8020630a: 2b250513 addi a0,a0,690 # 8021e5b8 <ecache> - 8020630e: ffffa097 auipc ra,0xffffa - 80206312: 40c080e7 jalr 1036(ra) # 8020071a <release> -} - 80206316: 60e2 ld ra,24(sp) - 80206318: 6442 ld s0,16(sp) - 8020631a: 64a2 ld s1,8(sp) - 8020631c: 6902 ld s2,0(sp) - 8020631e: 6105 addi sp,sp,32 - 80206320: 8082 ret + 80206656: 00018517 auipc a0,0x18 + 8020665a: f6250513 addi a0,a0,-158 # 8021e5b8 <ecache> + 8020665e: ffffa097 auipc ra,0xffffa + 80206662: 0bc080e7 jalr 188(ra) # 8020071a <release> +} + 80206666: 60e2 ld ra,24(sp) + 80206668: 6442 ld s0,16(sp) + 8020666a: 64a2 ld s1,8(sp) + 8020666c: 6902 ld s2,0(sp) + 8020666e: 6105 addi sp,sp,32 + 80206670: 8082 ret acquiresleep(&entry->lock); - 80206322: 13848913 addi s2,s1,312 - 80206326: 854a mv a0,s2 - 80206328: ffffd097 auipc ra,0xffffd - 8020632c: 316080e7 jalr 790(ra) # 8020363e <acquiresleep> + 80206672: 13848913 addi s2,s1,312 + 80206676: 854a mv a0,s2 + 80206678: ffffd097 auipc ra,0xffffd + 8020667c: 2e2080e7 jalr 738(ra) # 8020395a <acquiresleep> entry->next->prev = entry->prev; - 80206330: 1284b703 ld a4,296(s1) - 80206334: 1304b783 ld a5,304(s1) - 80206338: 12f73823 sd a5,304(a4) + 80206680: 1284b703 ld a4,296(s1) + 80206684: 1304b783 ld a5,304(s1) + 80206688: 12f73823 sd a5,304(a4) entry->prev->next = entry->next; - 8020633c: 1284b703 ld a4,296(s1) - 80206340: 12e7b423 sd a4,296(a5) + 8020668c: 1284b703 ld a4,296(s1) + 80206690: 12e7b423 sd a4,296(a5) entry->next = root.next; - 80206344: 00018797 auipc a5,0x18 - 80206348: 0e478793 addi a5,a5,228 # 8021e428 <fat> - 8020634c: 1507b703 ld a4,336(a5) - 80206350: 12e4b423 sd a4,296(s1) + 80206694: 00018797 auipc a5,0x18 + 80206698: d9478793 addi a5,a5,-620 # 8021e428 <fat> + 8020669c: 1507b703 ld a4,336(a5) + 802066a0: 12e4b423 sd a4,296(s1) entry->prev = &root; - 80206354: 00018697 auipc a3,0x18 - 80206358: 0fc68693 addi a3,a3,252 # 8021e450 <root> - 8020635c: 12d4b823 sd a3,304(s1) + 802066a4: 00018697 auipc a3,0x18 + 802066a8: dac68693 addi a3,a3,-596 # 8021e450 <root> + 802066ac: 12d4b823 sd a3,304(s1) root.next->prev = entry; - 80206360: 12973823 sd s1,304(a4) + 802066b0: 12973823 sd s1,304(a4) root.next = entry; - 80206364: 1497b823 sd s1,336(a5) + 802066b4: 1497b823 sd s1,336(a5) release(&ecache.lock); - 80206368: 00018517 auipc a0,0x18 - 8020636c: 25050513 addi a0,a0,592 # 8021e5b8 <ecache> - 80206370: ffffa097 auipc ra,0xffffa - 80206374: 3aa080e7 jalr 938(ra) # 8020071a <release> + 802066b8: 00018517 auipc a0,0x18 + 802066bc: f0050513 addi a0,a0,-256 # 8021e5b8 <ecache> + 802066c0: ffffa097 auipc ra,0xffffa + 802066c4: 05a080e7 jalr 90(ra) # 8020071a <release> if (entry->valid == -1) { // this means some one has called eremove() - 80206378: 11649703 lh a4,278(s1) - 8020637c: 57fd li a5,-1 - 8020637e: 06f70863 beq a4,a5,802063ee <eput+0x12c> + 802066c8: 11649703 lh a4,278(s1) + 802066cc: 57fd li a5,-1 + 802066ce: 06f70863 beq a4,a5,8020673e <eput+0x12c> elock(entry->parent); - 80206382: 1204b503 ld a0,288(s1) - 80206386: 00000097 auipc ra,0x0 - 8020638a: eb8080e7 jalr -328(ra) # 8020623e <elock> + 802066d2: 1204b503 ld a0,288(s1) + 802066d6: 00000097 auipc ra,0x0 + 802066da: eb8080e7 jalr -328(ra) # 8020658e <elock> eupdate(entry); - 8020638e: 8526 mv a0,s1 - 80206390: 00000097 auipc ra,0x0 - 80206394: c94080e7 jalr -876(ra) # 80206024 <eupdate> + 802066de: 8526 mv a0,s1 + 802066e0: 00000097 auipc ra,0x0 + 802066e4: c94080e7 jalr -876(ra) # 80206374 <eupdate> eunlock(entry->parent); - 80206398: 1204b503 ld a0,288(s1) - 8020639c: 00000097 auipc ra,0x0 - 802063a0: ed8080e7 jalr -296(ra) # 80206274 <eunlock> + 802066e8: 1204b503 ld a0,288(s1) + 802066ec: 00000097 auipc ra,0x0 + 802066f0: ed8080e7 jalr -296(ra) # 802065c4 <eunlock> releasesleep(&entry->lock); - 802063a4: 854a mv a0,s2 - 802063a6: ffffd097 auipc ra,0xffffd - 802063aa: 2ee080e7 jalr 750(ra) # 80203694 <releasesleep> + 802066f4: 854a mv a0,s2 + 802066f6: ffffd097 auipc ra,0xffffd + 802066fa: 2ba080e7 jalr 698(ra) # 802039b0 <releasesleep> struct dirent *eparent = entry->parent; - 802063ae: 1204b903 ld s2,288(s1) + 802066fe: 1204b903 ld s2,288(s1) acquire(&ecache.lock); - 802063b2: 00018517 auipc a0,0x18 - 802063b6: 20650513 addi a0,a0,518 # 8021e5b8 <ecache> - 802063ba: ffffa097 auipc ra,0xffffa - 802063be: 30c080e7 jalr 780(ra) # 802006c6 <acquire> + 80206702: 00018517 auipc a0,0x18 + 80206706: eb650513 addi a0,a0,-330 # 8021e5b8 <ecache> + 8020670a: ffffa097 auipc ra,0xffffa + 8020670e: fbc080e7 jalr -68(ra) # 802006c6 <acquire> entry->ref--; - 802063c2: 1184a783 lw a5,280(s1) - 802063c6: 37fd addiw a5,a5,-1 - 802063c8: 10f4ac23 sw a5,280(s1) + 80206712: 1184a783 lw a5,280(s1) + 80206716: 37fd addiw a5,a5,-1 + 80206718: 10f4ac23 sw a5,280(s1) release(&ecache.lock); - 802063cc: 00018517 auipc a0,0x18 - 802063d0: 1ec50513 addi a0,a0,492 # 8021e5b8 <ecache> - 802063d4: ffffa097 auipc ra,0xffffa - 802063d8: 346080e7 jalr 838(ra) # 8020071a <release> + 8020671c: 00018517 auipc a0,0x18 + 80206720: e9c50513 addi a0,a0,-356 # 8021e5b8 <ecache> + 80206724: ffffa097 auipc ra,0xffffa + 80206728: ff6080e7 jalr -10(ra) # 8020071a <release> if (entry->ref == 0) { - 802063dc: 1184a783 lw a5,280(s1) - 802063e0: fb9d bnez a5,80206316 <eput+0x54> + 8020672c: 1184a783 lw a5,280(s1) + 80206730: fb9d bnez a5,80206666 <eput+0x54> eput(eparent); - 802063e2: 854a mv a0,s2 - 802063e4: 00000097 auipc ra,0x0 - 802063e8: ede080e7 jalr -290(ra) # 802062c2 <eput> - 802063ec: b72d j 80206316 <eput+0x54> + 80206732: 854a mv a0,s2 + 80206734: 00000097 auipc ra,0x0 + 80206738: ede080e7 jalr -290(ra) # 80206612 <eput> + 8020673c: b72d j 80206666 <eput+0x54> etrunc(entry); - 802063ee: 8526 mv a0,s1 - 802063f0: 00000097 auipc ra,0x0 - 802063f4: de4080e7 jalr -540(ra) # 802061d4 <etrunc> - 802063f8: b775 j 802063a4 <eput+0xe2> - -00000000802063fa <estat>: -{ - 802063fa: 1101 addi sp,sp,-32 - 802063fc: ec06 sd ra,24(sp) - 802063fe: e822 sd s0,16(sp) - 80206400: e426 sd s1,8(sp) - 80206402: e04a sd s2,0(sp) - 80206404: 1000 addi s0,sp,32 - 80206406: 892a mv s2,a0 - 80206408: 84ae mv s1,a1 + 8020673e: 8526 mv a0,s1 + 80206740: 00000097 auipc ra,0x0 + 80206744: de4080e7 jalr -540(ra) # 80206524 <etrunc> + 80206748: b775 j 802066f4 <eput+0xe2> + +000000008020674a <estat>: +{ + 8020674a: 1101 addi sp,sp,-32 + 8020674c: ec06 sd ra,24(sp) + 8020674e: e822 sd s0,16(sp) + 80206750: e426 sd s1,8(sp) + 80206752: e04a sd s2,0(sp) + 80206754: 1000 addi s0,sp,32 + 80206756: 892a mv s2,a0 + 80206758: 84ae mv s1,a1 strncpy(st->name, de->filename, STAT_MAX_NAME); - 8020640a: 02000613 li a2,32 - 8020640e: 85aa mv a1,a0 - 80206410: 8526 mv a0,s1 - 80206412: ffffa097 auipc ra,0xffffa - 80206416: 464080e7 jalr 1124(ra) # 80200876 <strncpy> + 8020675a: 02000613 li a2,32 + 8020675e: 85aa mv a1,a0 + 80206760: 8526 mv a0,s1 + 80206762: ffffa097 auipc ra,0xffffa + 80206766: 114080e7 jalr 276(ra) # 80200876 <strncpy> st->type = (de->attribute & ATTR_DIRECTORY) ? T_DIR : T_FILE; - 8020641a: 10094783 lbu a5,256(s2) - 8020641e: 8bc1 andi a5,a5,16 - 80206420: 0017b793 seqz a5,a5 - 80206424: 0785 addi a5,a5,1 - 80206426: 02f49423 sh a5,40(s1) + 8020676a: 10094783 lbu a5,256(s2) + 8020676e: 8bc1 andi a5,a5,16 + 80206770: 0017b793 seqz a5,a5 + 80206774: 0785 addi a5,a5,1 + 80206776: 02f49423 sh a5,40(s1) st->dev = de->dev; - 8020642a: 11494783 lbu a5,276(s2) - 8020642e: d0dc sw a5,36(s1) + 8020677a: 11494783 lbu a5,276(s2) + 8020677e: d0dc sw a5,36(s1) st->size = de->file_size; - 80206430: 10896783 lwu a5,264(s2) - 80206434: f89c sd a5,48(s1) + 80206780: 10896783 lwu a5,264(s2) + 80206784: f89c sd a5,48(s1) } - 80206436: 60e2 ld ra,24(sp) - 80206438: 6442 ld s0,16(sp) - 8020643a: 64a2 ld s1,8(sp) - 8020643c: 6902 ld s2,0(sp) - 8020643e: 6105 addi sp,sp,32 - 80206440: 8082 ret + 80206786: 60e2 ld ra,24(sp) + 80206788: 6442 ld s0,16(sp) + 8020678a: 64a2 ld s1,8(sp) + 8020678c: 6902 ld s2,0(sp) + 8020678e: 6105 addi sp,sp,32 + 80206790: 8082 ret -0000000080206442 <enext>: +0000000080206792 <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) { - 80206442: 7119 addi sp,sp,-128 - 80206444: fc86 sd ra,120(sp) - 80206446: f8a2 sd s0,112(sp) - 80206448: f4a6 sd s1,104(sp) - 8020644a: f0ca sd s2,96(sp) - 8020644c: ecce sd s3,88(sp) - 8020644e: e8d2 sd s4,80(sp) - 80206450: e4d6 sd s5,72(sp) - 80206452: e0da sd s6,64(sp) - 80206454: fc5e sd s7,56(sp) - 80206456: f862 sd s8,48(sp) - 80206458: f466 sd s9,40(sp) - 8020645a: 0100 addi s0,sp,128 + 80206792: 7119 addi sp,sp,-128 + 80206794: fc86 sd ra,120(sp) + 80206796: f8a2 sd s0,112(sp) + 80206798: f4a6 sd s1,104(sp) + 8020679a: f0ca sd s2,96(sp) + 8020679c: ecce sd s3,88(sp) + 8020679e: e8d2 sd s4,80(sp) + 802067a0: e4d6 sd s5,72(sp) + 802067a2: e0da sd s6,64(sp) + 802067a4: fc5e sd s7,56(sp) + 802067a6: f862 sd s8,48(sp) + 802067a8: f466 sd s9,40(sp) + 802067aa: 0100 addi s0,sp,128 if (!(dp->attribute & ATTR_DIRECTORY)) - 8020645c: 10054783 lbu a5,256(a0) - 80206460: 8bc1 andi a5,a5,16 - 80206462: cf95 beqz a5,8020649e <enext+0x5c> - 80206464: 892a mv s2,a0 - 80206466: 89ae mv s3,a1 - 80206468: 84b2 mv s1,a2 - 8020646a: 8ab6 mv s5,a3 + 802067ac: 10054783 lbu a5,256(a0) + 802067b0: 8bc1 andi a5,a5,16 + 802067b2: cf95 beqz a5,802067ee <enext+0x5c> + 802067b4: 892a mv s2,a0 + 802067b6: 89ae mv s3,a1 + 802067b8: 84b2 mv s1,a2 + 802067ba: 8ab6 mv s5,a3 panic("enext not dir"); if (ep->valid) - 8020646c: 11659783 lh a5,278(a1) - 80206470: ef9d bnez a5,802064ae <enext+0x6c> + 802067bc: 11659783 lh a5,278(a1) + 802067c0: ef9d bnez a5,802067fe <enext+0x6c> panic("enext ep valid"); if (off % 32) - 80206472: 01f67793 andi a5,a2,31 - 80206476: e7a1 bnez a5,802064be <enext+0x7c> + 802067c2: 01f67793 andi a5,a2,31 + 802067c6: e7a1 bnez a5,8020680e <enext+0x7c> panic("enext not align"); if (dp->valid != 1) { return -1; } - 80206478: 11651703 lh a4,278(a0) - 8020647c: 4785 li a5,1 - 8020647e: 557d li a0,-1 - 80206480: 04f70763 beq a4,a5,802064ce <enext+0x8c> + 802067c8: 11651703 lh a4,278(a0) + 802067cc: 4785 li a5,1 + 802067ce: 557d li a0,-1 + 802067d0: 04f70763 beq a4,a5,8020681e <enext+0x8c> read_entry_info(ep, &de); return 1; } } return -1; } - 80206484: 70e6 ld ra,120(sp) - 80206486: 7446 ld s0,112(sp) - 80206488: 74a6 ld s1,104(sp) - 8020648a: 7906 ld s2,96(sp) - 8020648c: 69e6 ld s3,88(sp) - 8020648e: 6a46 ld s4,80(sp) - 80206490: 6aa6 ld s5,72(sp) - 80206492: 6b06 ld s6,64(sp) - 80206494: 7be2 ld s7,56(sp) - 80206496: 7c42 ld s8,48(sp) - 80206498: 7ca2 ld s9,40(sp) - 8020649a: 6109 addi sp,sp,128 - 8020649c: 8082 ret + 802067d4: 70e6 ld ra,120(sp) + 802067d6: 7446 ld s0,112(sp) + 802067d8: 74a6 ld s1,104(sp) + 802067da: 7906 ld s2,96(sp) + 802067dc: 69e6 ld s3,88(sp) + 802067de: 6a46 ld s4,80(sp) + 802067e0: 6aa6 ld s5,72(sp) + 802067e2: 6b06 ld s6,64(sp) + 802067e4: 7be2 ld s7,56(sp) + 802067e6: 7c42 ld s8,48(sp) + 802067e8: 7ca2 ld s9,40(sp) + 802067ea: 6109 addi sp,sp,128 + 802067ec: 8082 ret panic("enext not dir"); - 8020649e: 00003517 auipc a0,0x3 - 802064a2: 7e250513 addi a0,a0,2018 # 80209c80 <digits+0x900> - 802064a6: ffffa097 auipc ra,0xffffa - 802064aa: c9e080e7 jalr -866(ra) # 80200144 <panic> + 802067ee: 00003517 auipc a0,0x3 + 802067f2: 4ca50513 addi a0,a0,1226 # 80209cb8 <digits+0x938> + 802067f6: ffffa097 auipc ra,0xffffa + 802067fa: 94e080e7 jalr -1714(ra) # 80200144 <panic> panic("enext ep valid"); - 802064ae: 00003517 auipc a0,0x3 - 802064b2: 7e250513 addi a0,a0,2018 # 80209c90 <digits+0x910> - 802064b6: ffffa097 auipc ra,0xffffa - 802064ba: c8e080e7 jalr -882(ra) # 80200144 <panic> + 802067fe: 00003517 auipc a0,0x3 + 80206802: 4ca50513 addi a0,a0,1226 # 80209cc8 <digits+0x948> + 80206806: ffffa097 auipc ra,0xffffa + 8020680a: 93e080e7 jalr -1730(ra) # 80200144 <panic> panic("enext not align"); - 802064be: 00003517 auipc a0,0x3 - 802064c2: 7e250513 addi a0,a0,2018 # 80209ca0 <digits+0x920> - 802064c6: ffffa097 auipc ra,0xffffa - 802064ca: c7e080e7 jalr -898(ra) # 80200144 <panic> + 8020680e: 00003517 auipc a0,0x3 + 80206812: 4ca50513 addi a0,a0,1226 # 80209cd8 <digits+0x958> + 80206816: ffffa097 auipc ra,0xffffa + 8020681a: 92e080e7 jalr -1746(ra) # 80200144 <panic> memset(ep->filename, 0, FAT32_MAX_FILENAME + 1); - 802064ce: 10000613 li a2,256 - 802064d2: 4581 li a1,0 - 802064d4: 854e mv a0,s3 - 802064d6: ffffa097 auipc ra,0xffffa - 802064da: 28c080e7 jalr 652(ra) # 80200762 <memset> + 8020681e: 10000613 li a2,256 + 80206822: 4581 li a1,0 + 80206824: 854e mv a0,s3 + 80206826: ffffa097 auipc ra,0xffffa + 8020682a: f3c080e7 jalr -196(ra) # 80200762 <memset> int cnt = 0; - 802064de: 4b01 li s6,0 + 8020682e: 4b01 li s6,0 for (int off2; (off2 = reloc_clus(dp, off, 0)) != -1; off += 32) { - 802064e0: 5bfd li s7,-1 + 80206830: 5bfd li s7,-1 if (rw_clus(dp->cur_clus, 0, 0, (uint64)&de, off2, 32) != 32 || de.lne.order == END_OF_ENTRY) { - 802064e2: f8040a13 addi s4,s0,-128 + 80206832: f8040a13 addi s4,s0,-128 if (de.lne.order == EMPTY_ENTRY) { - 802064e6: 0e500c13 li s8,229 + 80206836: 0e500c13 li s8,229 if (de.lne.attr == ATTR_LONG_NAME) { - 802064ea: 4cbd li s9,15 + 8020683a: 4cbd li s9,15 for (int off2; (off2 = reloc_clus(dp, off, 0)) != -1; off += 32) { - 802064ec: a03d j 8020651a <enext+0xd8> + 8020683c: a03d j 8020686a <enext+0xd8> cnt++; - 802064ee: 2b05 addiw s6,s6,1 + 8020683e: 2b05 addiw s6,s6,1 continue; - 802064f0: a01d j 80206516 <enext+0xd4> + 80206840: a01d j 80206866 <enext+0xd4> *count = cnt; - 802064f2: 016aa023 sw s6,0(s5) + 80206842: 016aa023 sw s6,0(s5) return 0; - 802064f6: 4501 li a0,0 - 802064f8: b771 j 80206484 <enext+0x42> + 80206846: 4501 li a0,0 + 80206848: b771 j 802067d4 <enext+0x42> read_entry_name(ep->filename + (lcnt - 1) * CHAR_LONG_NAME, &de); - 802064fa: fff7079b addiw a5,a4,-1 - 802064fe: 0017951b slliw a0,a5,0x1 - 80206502: 9d3d addw a0,a0,a5 - 80206504: 0025151b slliw a0,a0,0x2 - 80206508: 9d3d addw a0,a0,a5 - 8020650a: 85d2 mv a1,s4 - 8020650c: 954e add a0,a0,s3 - 8020650e: fffff097 auipc ra,0xfffff - 80206512: 17a080e7 jalr 378(ra) # 80205688 <read_entry_name> + 8020684a: fff7079b addiw a5,a4,-1 + 8020684e: 0017951b slliw a0,a5,0x1 + 80206852: 9d3d addw a0,a0,a5 + 80206854: 0025151b slliw a0,a0,0x2 + 80206858: 9d3d addw a0,a0,a5 + 8020685a: 85d2 mv a1,s4 + 8020685c: 954e add a0,a0,s3 + 8020685e: fffff097 auipc ra,0xfffff + 80206862: 17a080e7 jalr 378(ra) # 802059d8 <read_entry_name> for (int off2; (off2 = reloc_clus(dp, off, 0)) != -1; off += 32) { - 80206516: 0204849b addiw s1,s1,32 - 8020651a: 4601 li a2,0 - 8020651c: 85a6 mv a1,s1 - 8020651e: 854a mv a0,s2 - 80206520: fffff097 auipc ra,0xfffff - 80206524: e06080e7 jalr -506(ra) # 80205326 <reloc_clus> - 80206528: f5750ee3 beq a0,s7,80206484 <enext+0x42> + 80206866: 0204849b addiw s1,s1,32 + 8020686a: 4601 li a2,0 + 8020686c: 85a6 mv a1,s1 + 8020686e: 854a mv a0,s2 + 80206870: fffff097 auipc ra,0xfffff + 80206874: e06080e7 jalr -506(ra) # 80205676 <reloc_clus> + 80206878: f5750ee3 beq a0,s7,802067d4 <enext+0x42> if (rw_clus(dp->cur_clus, 0, 0, (uint64)&de, off2, 32) != 32 || de.lne.order == END_OF_ENTRY) { - 8020652c: 02000793 li a5,32 - 80206530: 0005071b sext.w a4,a0 - 80206534: 86d2 mv a3,s4 - 80206536: 4601 li a2,0 - 80206538: 4581 li a1,0 - 8020653a: 10c92503 lw a0,268(s2) - 8020653e: fffff097 auipc ra,0xfffff - 80206542: ef0080e7 jalr -272(ra) # 8020542e <rw_clus> - 80206546: 2501 sext.w a0,a0 - 80206548: 02000793 li a5,32 - 8020654c: 06f51c63 bne a0,a5,802065c4 <enext+0x182> - 80206550: f8044783 lbu a5,-128(s0) - 80206554: cbb5 beqz a5,802065c8 <enext+0x186> + 8020687c: 02000793 li a5,32 + 80206880: 0005071b sext.w a4,a0 + 80206884: 86d2 mv a3,s4 + 80206886: 4601 li a2,0 + 80206888: 4581 li a1,0 + 8020688a: 10c92503 lw a0,268(s2) + 8020688e: fffff097 auipc ra,0xfffff + 80206892: ef0080e7 jalr -272(ra) # 8020577e <rw_clus> + 80206896: 2501 sext.w a0,a0 + 80206898: 02000793 li a5,32 + 8020689c: 06f51c63 bne a0,a5,80206914 <enext+0x182> + 802068a0: f8044783 lbu a5,-128(s0) + 802068a4: cbb5 beqz a5,80206918 <enext+0x186> if (de.lne.order == EMPTY_ENTRY) { - 80206556: f9878ce3 beq a5,s8,802064ee <enext+0xac> + 802068a6: f9878ce3 beq a5,s8,8020683e <enext+0xac> } else if (cnt) { - 8020655a: f80b1ce3 bnez s6,802064f2 <enext+0xb0> + 802068aa: f80b1ce3 bnez s6,80206842 <enext+0xb0> if (de.lne.attr == ATTR_LONG_NAME) { - 8020655e: f8b44703 lbu a4,-117(s0) - 80206562: 01971d63 bne a4,s9,8020657c <enext+0x13a> + 802068ae: f8b44703 lbu a4,-117(s0) + 802068b2: 01971d63 bne a4,s9,802068cc <enext+0x13a> int lcnt = de.lne.order & ~LAST_LONG_ENTRY; - 80206566: 0bf7f713 andi a4,a5,191 + 802068b6: 0bf7f713 andi a4,a5,191 if (de.lne.order & LAST_LONG_ENTRY) { - 8020656a: 0407f793 andi a5,a5,64 - 8020656e: d7d1 beqz a5,802064fa <enext+0xb8> + 802068ba: 0407f793 andi a5,a5,64 + 802068be: d7d1 beqz a5,8020684a <enext+0xb8> *count = lcnt + 1; // plus the s-n-e; - 80206570: 0017079b addiw a5,a4,1 - 80206574: 00faa023 sw a5,0(s5) + 802068c0: 0017079b addiw a5,a4,1 + 802068c4: 00faa023 sw a5,0(s5) count = 0; - 80206578: 4a81 li s5,0 - 8020657a: b741 j 802064fa <enext+0xb8> + 802068c8: 4a81 li s5,0 + 802068ca: b741 j 8020684a <enext+0xb8> if (count) { - 8020657c: 000a8c63 beqz s5,80206594 <enext+0x152> + 802068cc: 000a8c63 beqz s5,802068e4 <enext+0x152> *count = 1; - 80206580: 4785 li a5,1 - 80206582: 00faa023 sw a5,0(s5) + 802068d0: 4785 li a5,1 + 802068d2: 00faa023 sw a5,0(s5) read_entry_name(ep->filename, &de); - 80206586: f8040593 addi a1,s0,-128 - 8020658a: 854e mv a0,s3 - 8020658c: fffff097 auipc ra,0xfffff - 80206590: 0fc080e7 jalr 252(ra) # 80205688 <read_entry_name> + 802068d6: f8040593 addi a1,s0,-128 + 802068da: 854e mv a0,s3 + 802068dc: fffff097 auipc ra,0xfffff + 802068e0: 0fc080e7 jalr 252(ra) # 802059d8 <read_entry_name> entry->attribute = d->sne.attr; - 80206594: f8b44783 lbu a5,-117(s0) - 80206598: 10f98023 sb a5,256(s3) + 802068e4: f8b44783 lbu a5,-117(s0) + 802068e8: 10f98023 sb a5,256(s3) entry->first_clus = ((uint32)d->sne.fst_clus_hi << 16) | d->sne.fst_clus_lo; - 8020659c: f9445783 lhu a5,-108(s0) - 802065a0: 0107979b slliw a5,a5,0x10 - 802065a4: f9a45703 lhu a4,-102(s0) - 802065a8: 8fd9 or a5,a5,a4 - 802065aa: 2781 sext.w a5,a5 - 802065ac: 10f9a223 sw a5,260(s3) + 802068ec: f9445783 lhu a5,-108(s0) + 802068f0: 0107979b slliw a5,a5,0x10 + 802068f4: f9a45703 lhu a4,-102(s0) + 802068f8: 8fd9 or a5,a5,a4 + 802068fa: 2781 sext.w a5,a5 + 802068fc: 10f9a223 sw a5,260(s3) entry->file_size = d->sne.file_size; - 802065b0: f9c42703 lw a4,-100(s0) - 802065b4: 10e9a423 sw a4,264(s3) + 80206900: f9c42703 lw a4,-100(s0) + 80206904: 10e9a423 sw a4,264(s3) entry->cur_clus = entry->first_clus; - 802065b8: 10f9a623 sw a5,268(s3) + 80206908: 10f9a623 sw a5,268(s3) entry->clus_cnt = 0; - 802065bc: 1009a823 sw zero,272(s3) + 8020690c: 1009a823 sw zero,272(s3) return 1; - 802065c0: 4505 li a0,1 + 80206910: 4505 li a0,1 } - 802065c2: b5c9 j 80206484 <enext+0x42> + 80206912: b5c9 j 802067d4 <enext+0x42> return -1; - 802065c4: 557d li a0,-1 - 802065c6: bd7d j 80206484 <enext+0x42> - 802065c8: 557d li a0,-1 - 802065ca: bd6d j 80206484 <enext+0x42> + 80206914: 557d li a0,-1 + 80206916: bd7d j 802067d4 <enext+0x42> + 80206918: 557d li a0,-1 + 8020691a: bd6d j 802067d4 <enext+0x42> -00000000802065cc <dirlookup>: +000000008020691c <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) { - 802065cc: 711d addi sp,sp,-96 - 802065ce: ec86 sd ra,88(sp) - 802065d0: e8a2 sd s0,80(sp) - 802065d2: e4a6 sd s1,72(sp) - 802065d4: e0ca sd s2,64(sp) - 802065d6: fc4e sd s3,56(sp) - 802065d8: f852 sd s4,48(sp) - 802065da: f456 sd s5,40(sp) - 802065dc: f05a sd s6,32(sp) - 802065de: ec5e sd s7,24(sp) - 802065e0: 1080 addi s0,sp,96 + 8020691c: 711d addi sp,sp,-96 + 8020691e: ec86 sd ra,88(sp) + 80206920: e8a2 sd s0,80(sp) + 80206922: e4a6 sd s1,72(sp) + 80206924: e0ca sd s2,64(sp) + 80206926: fc4e sd s3,56(sp) + 80206928: f852 sd s4,48(sp) + 8020692a: f456 sd s5,40(sp) + 8020692c: f05a sd s6,32(sp) + 8020692e: ec5e sd s7,24(sp) + 80206930: 1080 addi s0,sp,96 if (!(dp->attribute & ATTR_DIRECTORY)) - 802065e2: 10054783 lbu a5,256(a0) - 802065e6: 8bc1 andi a5,a5,16 - 802065e8: cbb1 beqz a5,8020663c <dirlookup+0x70> - 802065ea: 84aa mv s1,a0 - 802065ec: 89ae mv s3,a1 - 802065ee: 8ab2 mv s5,a2 + 80206932: 10054783 lbu a5,256(a0) + 80206936: 8bc1 andi a5,a5,16 + 80206938: cbb1 beqz a5,8020698c <dirlookup+0x70> + 8020693a: 84aa mv s1,a0 + 8020693c: 89ae mv s3,a1 + 8020693e: 8ab2 mv s5,a2 panic("dirlookup not DIR"); if (strncmp(filename, ".", FAT32_MAX_FILENAME) == 0) { - 802065f0: 0ff00613 li a2,255 - 802065f4: 00003597 auipc a1,0x3 - 802065f8: 6d458593 addi a1,a1,1748 # 80209cc8 <digits+0x948> - 802065fc: 854e mv a0,s3 - 802065fe: ffffa097 auipc ra,0xffffa - 80206602: 23c080e7 jalr 572(ra) # 8020083a <strncmp> - 80206606: c139 beqz a0,8020664c <dirlookup+0x80> + 80206940: 0ff00613 li a2,255 + 80206944: 00003597 auipc a1,0x3 + 80206948: 3bc58593 addi a1,a1,956 # 80209d00 <digits+0x980> + 8020694c: 854e mv a0,s3 + 8020694e: ffffa097 auipc ra,0xffffa + 80206952: eec080e7 jalr -276(ra) # 8020083a <strncmp> + 80206956: c139 beqz a0,8020699c <dirlookup+0x80> return edup(dp); } else if (strncmp(filename, "..", FAT32_MAX_FILENAME) == 0) { - 80206608: 0ff00613 li a2,255 - 8020660c: 00003597 auipc a1,0x3 - 80206610: 6c458593 addi a1,a1,1732 # 80209cd0 <digits+0x950> - 80206614: 854e mv a0,s3 - 80206616: ffffa097 auipc ra,0xffffa - 8020661a: 224080e7 jalr 548(ra) # 8020083a <strncmp> - 8020661e: e125 bnez a0,8020667e <dirlookup+0xb2> + 80206958: 0ff00613 li a2,255 + 8020695c: 00003597 auipc a1,0x3 + 80206960: 3ac58593 addi a1,a1,940 # 80209d08 <digits+0x988> + 80206964: 854e mv a0,s3 + 80206966: ffffa097 auipc ra,0xffffa + 8020696a: ed4080e7 jalr -300(ra) # 8020083a <strncmp> + 8020696e: e125 bnez a0,802069ce <dirlookup+0xb2> if (dp == &root) { - 80206620: 00018797 auipc a5,0x18 - 80206624: e3078793 addi a5,a5,-464 # 8021e450 <root> - 80206628: 04f48463 beq s1,a5,80206670 <dirlookup+0xa4> + 80206970: 00018797 auipc a5,0x18 + 80206974: ae078793 addi a5,a5,-1312 # 8021e450 <root> + 80206978: 04f48463 beq s1,a5,802069c0 <dirlookup+0xa4> return edup(&root); } return edup(dp->parent); - 8020662c: 1204b503 ld a0,288(s1) - 80206630: 00000097 auipc ra,0x0 - 80206634: 9b0080e7 jalr -1616(ra) # 80205fe0 <edup> - 80206638: 892a mv s2,a0 - 8020663a: a839 j 80206658 <dirlookup+0x8c> + 8020697c: 1204b503 ld a0,288(s1) + 80206980: 00000097 auipc ra,0x0 + 80206984: 9b0080e7 jalr -1616(ra) # 80206330 <edup> + 80206988: 892a mv s2,a0 + 8020698a: a839 j 802069a8 <dirlookup+0x8c> panic("dirlookup not DIR"); - 8020663c: 00003517 auipc a0,0x3 - 80206640: 67450513 addi a0,a0,1652 # 80209cb0 <digits+0x930> - 80206644: ffffa097 auipc ra,0xffffa - 80206648: b00080e7 jalr -1280(ra) # 80200144 <panic> + 8020698c: 00003517 auipc a0,0x3 + 80206990: 35c50513 addi a0,a0,860 # 80209ce8 <digits+0x968> + 80206994: ffff9097 auipc ra,0xffff9 + 80206998: 7b0080e7 jalr 1968(ra) # 80200144 <panic> return edup(dp); - 8020664c: 8526 mv a0,s1 - 8020664e: 00000097 auipc ra,0x0 - 80206652: 992080e7 jalr -1646(ra) # 80205fe0 <edup> - 80206656: 892a mv s2,a0 + 8020699c: 8526 mv a0,s1 + 8020699e: 00000097 auipc ra,0x0 + 802069a2: 992080e7 jalr -1646(ra) # 80206330 <edup> + 802069a6: 892a mv s2,a0 if (poff) { *poff = off; } eput(ep); return NULL; } - 80206658: 854a mv a0,s2 - 8020665a: 60e6 ld ra,88(sp) - 8020665c: 6446 ld s0,80(sp) - 8020665e: 64a6 ld s1,72(sp) - 80206660: 6906 ld s2,64(sp) - 80206662: 79e2 ld s3,56(sp) - 80206664: 7a42 ld s4,48(sp) - 80206666: 7aa2 ld s5,40(sp) - 80206668: 7b02 ld s6,32(sp) - 8020666a: 6be2 ld s7,24(sp) - 8020666c: 6125 addi sp,sp,96 - 8020666e: 8082 ret + 802069a8: 854a mv a0,s2 + 802069aa: 60e6 ld ra,88(sp) + 802069ac: 6446 ld s0,80(sp) + 802069ae: 64a6 ld s1,72(sp) + 802069b0: 6906 ld s2,64(sp) + 802069b2: 79e2 ld s3,56(sp) + 802069b4: 7a42 ld s4,48(sp) + 802069b6: 7aa2 ld s5,40(sp) + 802069b8: 7b02 ld s6,32(sp) + 802069ba: 6be2 ld s7,24(sp) + 802069bc: 6125 addi sp,sp,96 + 802069be: 8082 ret return edup(&root); - 80206670: 853e mv a0,a5 - 80206672: 00000097 auipc ra,0x0 - 80206676: 96e080e7 jalr -1682(ra) # 80205fe0 <edup> - 8020667a: 892a mv s2,a0 - 8020667c: bff1 j 80206658 <dirlookup+0x8c> + 802069c0: 853e mv a0,a5 + 802069c2: 00000097 auipc ra,0x0 + 802069c6: 96e080e7 jalr -1682(ra) # 80206330 <edup> + 802069ca: 892a mv s2,a0 + 802069cc: bff1 j 802069a8 <dirlookup+0x8c> if (dp->valid != 1) { - 8020667e: 11649703 lh a4,278(s1) - 80206682: 4785 li a5,1 + 802069ce: 11649703 lh a4,278(s1) + 802069d2: 4785 li a5,1 return NULL; - 80206684: 4901 li s2,0 + 802069d4: 4901 li s2,0 if (dp->valid != 1) { - 80206686: fcf719e3 bne a4,a5,80206658 <dirlookup+0x8c> + 802069d6: fcf719e3 bne a4,a5,802069a8 <dirlookup+0x8c> struct dirent *ep = eget(dp, filename); - 8020668a: 85ce mv a1,s3 - 8020668c: 8526 mv a0,s1 - 8020668e: fffff097 auipc ra,0xfffff - 80206692: eec080e7 jalr -276(ra) # 8020557a <eget> - 80206696: 892a mv s2,a0 + 802069da: 85ce mv a1,s3 + 802069dc: 8526 mv a0,s1 + 802069de: fffff097 auipc ra,0xfffff + 802069e2: eec080e7 jalr -276(ra) # 802058ca <eget> + 802069e6: 892a mv s2,a0 if (ep->valid == 1) { return ep; } // ecache hits - 80206698: 11651703 lh a4,278(a0) - 8020669c: 4785 li a5,1 - 8020669e: faf70de3 beq a4,a5,80206658 <dirlookup+0x8c> + 802069e8: 11651703 lh a4,278(a0) + 802069ec: 4785 li a5,1 + 802069ee: faf70de3 beq a4,a5,802069a8 <dirlookup+0x8c> int len = strlen(filename); - 802066a2: 854e mv a0,s3 - 802066a4: ffffa097 auipc ra,0xffffa - 802066a8: 242080e7 jalr 578(ra) # 802008e6 <strlen> + 802069f2: 854e mv a0,s3 + 802069f4: ffffa097 auipc ra,0xffffa + 802069f8: ef2080e7 jalr -270(ra) # 802008e6 <strlen> int count = 0; - 802066ac: fa042623 sw zero,-84(s0) + 802069fc: fa042623 sw zero,-84(s0) reloc_clus(dp, 0, 0); - 802066b0: 4601 li a2,0 - 802066b2: 4581 li a1,0 - 802066b4: 8526 mv a0,s1 - 802066b6: fffff097 auipc ra,0xfffff - 802066ba: c70080e7 jalr -912(ra) # 80205326 <reloc_clus> + 80206a00: 4601 li a2,0 + 80206a02: 4581 li a1,0 + 80206a04: 8526 mv a0,s1 + 80206a06: fffff097 auipc ra,0xfffff + 80206a0a: c70080e7 jalr -912(ra) # 80205676 <reloc_clus> uint off = 0; - 802066be: 4a01 li s4,0 + 80206a0e: 4a01 li s4,0 while ((type = enext(dp, ep, off, &count) != -1)) { - 802066c0: fac40b93 addi s7,s0,-84 - 802066c4: 5b7d li s6,-1 - 802066c6: 86de mv a3,s7 - 802066c8: 8652 mv a2,s4 - 802066ca: 85ca mv a1,s2 - 802066cc: 8526 mv a0,s1 - 802066ce: 00000097 auipc ra,0x0 - 802066d2: d74080e7 jalr -652(ra) # 80206442 <enext> - 802066d6: 03650f63 beq a0,s6,80206714 <dirlookup+0x148> + 80206a10: fac40b93 addi s7,s0,-84 + 80206a14: 5b7d li s6,-1 + 80206a16: 86de mv a3,s7 + 80206a18: 8652 mv a2,s4 + 80206a1a: 85ca mv a1,s2 + 80206a1c: 8526 mv a0,s1 + 80206a1e: 00000097 auipc ra,0x0 + 80206a22: d74080e7 jalr -652(ra) # 80206792 <enext> + 80206a26: 03650f63 beq a0,s6,80206a64 <dirlookup+0x148> } else if (strncmp(filename, ep->filename, FAT32_MAX_FILENAME) == 0) { - 802066da: 0ff00613 li a2,255 - 802066de: 85ca mv a1,s2 - 802066e0: 854e mv a0,s3 - 802066e2: ffffa097 auipc ra,0xffffa - 802066e6: 158080e7 jalr 344(ra) # 8020083a <strncmp> - 802066ea: c901 beqz a0,802066fa <dirlookup+0x12e> + 80206a2a: 0ff00613 li a2,255 + 80206a2e: 85ca mv a1,s2 + 80206a30: 854e mv a0,s3 + 80206a32: ffffa097 auipc ra,0xffffa + 80206a36: e08080e7 jalr -504(ra) # 8020083a <strncmp> + 80206a3a: c901 beqz a0,80206a4a <dirlookup+0x12e> off += count << 5; - 802066ec: fac42783 lw a5,-84(s0) - 802066f0: 0057979b slliw a5,a5,0x5 - 802066f4: 01478a3b addw s4,a5,s4 - 802066f8: b7f9 j 802066c6 <dirlookup+0xfa> + 80206a3c: fac42783 lw a5,-84(s0) + 80206a40: 0057979b slliw a5,a5,0x5 + 80206a44: 01478a3b addw s4,a5,s4 + 80206a48: b7f9 j 80206a16 <dirlookup+0xfa> ep->parent = edup(dp); - 802066fa: 8526 mv a0,s1 - 802066fc: 00000097 auipc ra,0x0 - 80206700: 8e4080e7 jalr -1820(ra) # 80205fe0 <edup> - 80206704: 12a93023 sd a0,288(s2) + 80206a4a: 8526 mv a0,s1 + 80206a4c: 00000097 auipc ra,0x0 + 80206a50: 8e4080e7 jalr -1820(ra) # 80206330 <edup> + 80206a54: 12a93023 sd a0,288(s2) ep->off = off; - 80206708: 11492e23 sw s4,284(s2) + 80206a58: 11492e23 sw s4,284(s2) ep->valid = 1; - 8020670c: 4785 li a5,1 - 8020670e: 10f91b23 sh a5,278(s2) + 80206a5c: 4785 li a5,1 + 80206a5e: 10f91b23 sh a5,278(s2) return ep; - 80206712: b799 j 80206658 <dirlookup+0x8c> + 80206a62: b799 j 802069a8 <dirlookup+0x8c> if (poff) { - 80206714: 000a8463 beqz s5,8020671c <dirlookup+0x150> + 80206a64: 000a8463 beqz s5,80206a6c <dirlookup+0x150> *poff = off; - 80206718: 014aa023 sw s4,0(s5) + 80206a68: 014aa023 sw s4,0(s5) eput(ep); - 8020671c: 854a mv a0,s2 - 8020671e: 00000097 auipc ra,0x0 - 80206722: ba4080e7 jalr -1116(ra) # 802062c2 <eput> + 80206a6c: 854a mv a0,s2 + 80206a6e: 00000097 auipc ra,0x0 + 80206a72: ba4080e7 jalr -1116(ra) # 80206612 <eput> return NULL; - 80206726: 4901 li s2,0 - 80206728: bf05 j 80206658 <dirlookup+0x8c> - -000000008020672a <ealloc>: -{ - 8020672a: 715d addi sp,sp,-80 - 8020672c: e486 sd ra,72(sp) - 8020672e: e0a2 sd s0,64(sp) - 80206730: fc26 sd s1,56(sp) - 80206732: f84a sd s2,48(sp) - 80206734: f44e sd s3,40(sp) - 80206736: f052 sd s4,32(sp) - 80206738: ec56 sd s5,24(sp) - 8020673a: 0880 addi s0,sp,80 - 8020673c: 892a mv s2,a0 + 80206a76: 4901 li s2,0 + 80206a78: bf05 j 802069a8 <dirlookup+0x8c> + +0000000080206a7a <ealloc>: +{ + 80206a7a: 715d addi sp,sp,-80 + 80206a7c: e486 sd ra,72(sp) + 80206a7e: e0a2 sd s0,64(sp) + 80206a80: fc26 sd s1,56(sp) + 80206a82: f84a sd s2,48(sp) + 80206a84: f44e sd s3,40(sp) + 80206a86: f052 sd s4,32(sp) + 80206a88: ec56 sd s5,24(sp) + 80206a8a: 0880 addi s0,sp,80 + 80206a8c: 892a mv s2,a0 if (!(dp->attribute & ATTR_DIRECTORY)) { - 8020673e: 10054783 lbu a5,256(a0) - 80206742: 8bc1 andi a5,a5,16 - 80206744: c7b1 beqz a5,80206790 <ealloc+0x66> - 80206746: 852e mv a0,a1 - 80206748: 8a32 mv s4,a2 + 80206a8e: 10054783 lbu a5,256(a0) + 80206a92: 8bc1 andi a5,a5,16 + 80206a94: c7b1 beqz a5,80206ae0 <ealloc+0x66> + 80206a96: 852e mv a0,a1 + 80206a98: 8a32 mv s4,a2 if (dp->valid != 1 || !(name = formatname(name))) { // detect illegal character - 8020674a: 11691703 lh a4,278(s2) - 8020674e: 4785 li a5,1 + 80206a9a: 11691703 lh a4,278(s2) + 80206a9e: 4785 li a5,1 return NULL; - 80206750: 4481 li s1,0 + 80206aa0: 4481 li s1,0 if (dp->valid != 1 || !(name = formatname(name))) { // detect illegal character - 80206752: 02f71563 bne a4,a5,8020677c <ealloc+0x52> - 80206756: fffff097 auipc ra,0xfffff - 8020675a: 408080e7 jalr 1032(ra) # 80205b5e <formatname> - 8020675e: 89aa mv s3,a0 - 80206760: 10050663 beqz a0,8020686c <ealloc+0x142> + 80206aa2: 02f71563 bne a4,a5,80206acc <ealloc+0x52> + 80206aa6: fffff097 auipc ra,0xfffff + 80206aaa: 408080e7 jalr 1032(ra) # 80205eae <formatname> + 80206aae: 89aa mv s3,a0 + 80206ab0: 10050663 beqz a0,80206bbc <ealloc+0x142> uint off = 0; - 80206764: fa042e23 sw zero,-68(s0) + 80206ab4: fa042e23 sw zero,-68(s0) if ((ep = dirlookup(dp, name, &off)) != 0) { // entry exists - 80206768: fbc40613 addi a2,s0,-68 - 8020676c: 85aa mv a1,a0 - 8020676e: 854a mv a0,s2 - 80206770: 00000097 auipc ra,0x0 - 80206774: e5c080e7 jalr -420(ra) # 802065cc <dirlookup> - 80206778: 84aa mv s1,a0 - 8020677a: c11d beqz a0,802067a0 <ealloc+0x76> -} - 8020677c: 8526 mv a0,s1 - 8020677e: 60a6 ld ra,72(sp) - 80206780: 6406 ld s0,64(sp) - 80206782: 74e2 ld s1,56(sp) - 80206784: 7942 ld s2,48(sp) - 80206786: 79a2 ld s3,40(sp) - 80206788: 7a02 ld s4,32(sp) - 8020678a: 6ae2 ld s5,24(sp) - 8020678c: 6161 addi sp,sp,80 - 8020678e: 8082 ret + 80206ab8: fbc40613 addi a2,s0,-68 + 80206abc: 85aa mv a1,a0 + 80206abe: 854a mv a0,s2 + 80206ac0: 00000097 auipc ra,0x0 + 80206ac4: e5c080e7 jalr -420(ra) # 8020691c <dirlookup> + 80206ac8: 84aa mv s1,a0 + 80206aca: c11d beqz a0,80206af0 <ealloc+0x76> +} + 80206acc: 8526 mv a0,s1 + 80206ace: 60a6 ld ra,72(sp) + 80206ad0: 6406 ld s0,64(sp) + 80206ad2: 74e2 ld s1,56(sp) + 80206ad4: 7942 ld s2,48(sp) + 80206ad6: 79a2 ld s3,40(sp) + 80206ad8: 7a02 ld s4,32(sp) + 80206ada: 6ae2 ld s5,24(sp) + 80206adc: 6161 addi sp,sp,80 + 80206ade: 8082 ret panic("ealloc not dir"); - 80206790: 00003517 auipc a0,0x3 - 80206794: 54850513 addi a0,a0,1352 # 80209cd8 <digits+0x958> - 80206798: ffffa097 auipc ra,0xffffa - 8020679c: 9ac080e7 jalr -1620(ra) # 80200144 <panic> + 80206ae0: 00003517 auipc a0,0x3 + 80206ae4: 23050513 addi a0,a0,560 # 80209d10 <digits+0x990> + 80206ae8: ffff9097 auipc ra,0xffff9 + 80206aec: 65c080e7 jalr 1628(ra) # 80200144 <panic> ep = eget(dp, name); - 802067a0: 85ce mv a1,s3 - 802067a2: 854a mv a0,s2 - 802067a4: fffff097 auipc ra,0xfffff - 802067a8: dd6080e7 jalr -554(ra) # 8020557a <eget> - 802067ac: 84aa mv s1,a0 + 80206af0: 85ce mv a1,s3 + 80206af2: 854a mv a0,s2 + 80206af4: fffff097 auipc ra,0xfffff + 80206af8: dd6080e7 jalr -554(ra) # 802058ca <eget> + 80206afc: 84aa mv s1,a0 elock(ep); - 802067ae: 00000097 auipc ra,0x0 - 802067b2: a90080e7 jalr -1392(ra) # 8020623e <elock> + 80206afe: 00000097 auipc ra,0x0 + 80206b02: a90080e7 jalr -1392(ra) # 8020658e <elock> ep->attribute = attr; - 802067b6: 11448023 sb s4,256(s1) + 80206b06: 11448023 sb s4,256(s1) ep->file_size = 0; - 802067ba: 1004a423 sw zero,264(s1) + 80206b0a: 1004a423 sw zero,264(s1) ep->first_clus = 0; - 802067be: 1004a223 sw zero,260(s1) + 80206b0e: 1004a223 sw zero,260(s1) ep->parent = edup(dp); - 802067c2: 854a mv a0,s2 - 802067c4: 00000097 auipc ra,0x0 - 802067c8: 81c080e7 jalr -2020(ra) # 80205fe0 <edup> - 802067cc: 12a4b023 sd a0,288(s1) + 80206b12: 854a mv a0,s2 + 80206b14: 00000097 auipc ra,0x0 + 80206b18: 81c080e7 jalr -2020(ra) # 80206330 <edup> + 80206b1c: 12a4b023 sd a0,288(s1) ep->off = off; - 802067d0: fbc42a83 lw s5,-68(s0) - 802067d4: 1154ae23 sw s5,284(s1) + 80206b20: fbc42a83 lw s5,-68(s0) + 80206b24: 1154ae23 sw s5,284(s1) ep->clus_cnt = 0; - 802067d8: 1004a823 sw zero,272(s1) + 80206b28: 1004a823 sw zero,272(s1) ep->cur_clus = 0; - 802067dc: 1004a623 sw zero,268(s1) + 80206b2c: 1004a623 sw zero,268(s1) ep->dirty = 0; - 802067e0: 10048aa3 sb zero,277(s1) + 80206b30: 10048aa3 sb zero,277(s1) strncpy(ep->filename, name, FAT32_MAX_FILENAME); - 802067e4: 0ff00613 li a2,255 - 802067e8: 85ce mv a1,s3 - 802067ea: 8526 mv a0,s1 - 802067ec: ffffa097 auipc ra,0xffffa - 802067f0: 08a080e7 jalr 138(ra) # 80200876 <strncpy> + 80206b34: 0ff00613 li a2,255 + 80206b38: 85ce mv a1,s3 + 80206b3a: 8526 mv a0,s1 + 80206b3c: ffffa097 auipc ra,0xffffa + 80206b40: d3a080e7 jalr -710(ra) # 80200876 <strncpy> ep->filename[FAT32_MAX_FILENAME] = '\0'; - 802067f4: 0e048fa3 sb zero,255(s1) + 80206b44: 0e048fa3 sb zero,255(s1) if (attr == ATTR_DIRECTORY) { // generate "." and ".." for ep - 802067f8: 47c1 li a5,16 - 802067fa: 02fa0863 beq s4,a5,8020682a <ealloc+0x100> + 80206b48: 47c1 li a5,16 + 80206b4a: 02fa0863 beq s4,a5,80206b7a <ealloc+0x100> ep->attribute |= ATTR_ARCHIVE; - 802067fe: 1004c783 lbu a5,256(s1) - 80206802: 0207e793 ori a5,a5,32 - 80206806: 10f48023 sb a5,256(s1) + 80206b4e: 1004c783 lbu a5,256(s1) + 80206b52: 0207e793 ori a5,a5,32 + 80206b56: 10f48023 sb a5,256(s1) emake(dp, ep, off); - 8020680a: 8656 mv a2,s5 - 8020680c: 85a6 mv a1,s1 - 8020680e: 854a mv a0,s2 - 80206810: fffff097 auipc ra,0xfffff - 80206814: 406080e7 jalr 1030(ra) # 80205c16 <emake> + 80206b5a: 8656 mv a2,s5 + 80206b5c: 85a6 mv a1,s1 + 80206b5e: 854a mv a0,s2 + 80206b60: fffff097 auipc ra,0xfffff + 80206b64: 406080e7 jalr 1030(ra) # 80205f66 <emake> ep->valid = 1; - 80206818: 4785 li a5,1 - 8020681a: 10f49b23 sh a5,278(s1) + 80206b68: 4785 li a5,1 + 80206b6a: 10f49b23 sh a5,278(s1) eunlock(ep); - 8020681e: 8526 mv a0,s1 - 80206820: 00000097 auipc ra,0x0 - 80206824: a54080e7 jalr -1452(ra) # 80206274 <eunlock> + 80206b6e: 8526 mv a0,s1 + 80206b70: 00000097 auipc ra,0x0 + 80206b74: a54080e7 jalr -1452(ra) # 802065c4 <eunlock> return ep; - 80206828: bf91 j 8020677c <ealloc+0x52> + 80206b78: bf91 j 80206acc <ealloc+0x52> ep->attribute |= ATTR_DIRECTORY; - 8020682a: 1004c783 lbu a5,256(s1) - 8020682e: 0107e793 ori a5,a5,16 - 80206832: 10f48023 sb a5,256(s1) + 80206b7a: 1004c783 lbu a5,256(s1) + 80206b7e: 0107e793 ori a5,a5,16 + 80206b82: 10f48023 sb a5,256(s1) ep->cur_clus = ep->first_clus = alloc_clus(dp->dev); - 80206836: 11494503 lbu a0,276(s2) - 8020683a: fffff097 auipc ra,0xfffff - 8020683e: 92a080e7 jalr -1750(ra) # 80205164 <alloc_clus> - 80206842: 2501 sext.w a0,a0 - 80206844: 10a4a223 sw a0,260(s1) - 80206848: 10a4a623 sw a0,268(s1) + 80206b86: 11494503 lbu a0,276(s2) + 80206b8a: fffff097 auipc ra,0xfffff + 80206b8e: 92a080e7 jalr -1750(ra) # 802054b4 <alloc_clus> + 80206b92: 2501 sext.w a0,a0 + 80206b94: 10a4a223 sw a0,260(s1) + 80206b98: 10a4a623 sw a0,268(s1) emake(ep, ep, 0); - 8020684c: 4601 li a2,0 - 8020684e: 85a6 mv a1,s1 - 80206850: 8526 mv a0,s1 - 80206852: fffff097 auipc ra,0xfffff - 80206856: 3c4080e7 jalr 964(ra) # 80205c16 <emake> + 80206b9c: 4601 li a2,0 + 80206b9e: 85a6 mv a1,s1 + 80206ba0: 8526 mv a0,s1 + 80206ba2: fffff097 auipc ra,0xfffff + 80206ba6: 3c4080e7 jalr 964(ra) # 80205f66 <emake> emake(ep, dp, 32); - 8020685a: 02000613 li a2,32 - 8020685e: 85ca mv a1,s2 - 80206860: 8526 mv a0,s1 - 80206862: fffff097 auipc ra,0xfffff - 80206866: 3b4080e7 jalr 948(ra) # 80205c16 <emake> - 8020686a: b745 j 8020680a <ealloc+0xe0> + 80206baa: 02000613 li a2,32 + 80206bae: 85ca mv a1,s2 + 80206bb0: 8526 mv a0,s1 + 80206bb2: fffff097 auipc ra,0xfffff + 80206bb6: 3b4080e7 jalr 948(ra) # 80205f66 <emake> + 80206bba: b745 j 80206b5a <ealloc+0xe0> return NULL; - 8020686c: 84aa mv s1,a0 - 8020686e: b739 j 8020677c <ealloc+0x52> + 80206bbc: 84aa mv s1,a0 + 80206bbe: b739 j 80206acc <ealloc+0x52> -0000000080206870 <lookup_path>: +0000000080206bc0 <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) { - 80206870: 715d addi sp,sp,-80 - 80206872: e486 sd ra,72(sp) - 80206874: e0a2 sd s0,64(sp) - 80206876: fc26 sd s1,56(sp) - 80206878: f84a sd s2,48(sp) - 8020687a: f44e sd s3,40(sp) - 8020687c: f052 sd s4,32(sp) - 8020687e: ec56 sd s5,24(sp) - 80206880: e85a sd s6,16(sp) - 80206882: e45e sd s7,8(sp) - 80206884: e062 sd s8,0(sp) - 80206886: 0880 addi s0,sp,80 - 80206888: 892a mv s2,a0 - 8020688a: 8b2e mv s6,a1 - 8020688c: 8ab2 mv s5,a2 + 80206bc0: 715d addi sp,sp,-80 + 80206bc2: e486 sd ra,72(sp) + 80206bc4: e0a2 sd s0,64(sp) + 80206bc6: fc26 sd s1,56(sp) + 80206bc8: f84a sd s2,48(sp) + 80206bca: f44e sd s3,40(sp) + 80206bcc: f052 sd s4,32(sp) + 80206bce: ec56 sd s5,24(sp) + 80206bd0: e85a sd s6,16(sp) + 80206bd2: e45e sd s7,8(sp) + 80206bd4: e062 sd s8,0(sp) + 80206bd6: 0880 addi s0,sp,80 + 80206bd8: 892a mv s2,a0 + 80206bda: 8b2e mv s6,a1 + 80206bdc: 8ab2 mv s5,a2 struct dirent *entry, *next; if (*path == '/') { - 8020688e: 00054783 lbu a5,0(a0) - 80206892: 02f00713 li a4,47 - 80206896: 02e78663 beq a5,a4,802068c2 <lookup_path+0x52> + 80206bde: 00054783 lbu a5,0(a0) + 80206be2: 02f00713 li a4,47 + 80206be6: 02e78663 beq a5,a4,80206c12 <lookup_path+0x52> entry = edup(&root); } else if (*path != '\0') { entry = edup(myproc()->cwd); } else { return NULL; - 8020689a: 4a01 li s4,0 + 80206bea: 4a01 li s4,0 } else if (*path != '\0') { - 8020689c: cba1 beqz a5,802068ec <lookup_path+0x7c> + 80206bec: cba1 beqz a5,80206c3c <lookup_path+0x7c> entry = edup(myproc()->cwd); - 8020689e: ffffb097 auipc ra,0xffffb - 802068a2: 19e080e7 jalr 414(ra) # 80201a3c <myproc> - 802068a6: 15853503 ld a0,344(a0) - 802068aa: fffff097 auipc ra,0xfffff - 802068ae: 736080e7 jalr 1846(ra) # 80205fe0 <edup> - 802068b2: 8a2a mv s4,a0 + 80206bee: ffffb097 auipc ra,0xffffb + 80206bf2: e4e080e7 jalr -434(ra) # 80201a3c <myproc> + 80206bf6: 15853503 ld a0,344(a0) + 80206bfa: fffff097 auipc ra,0xfffff + 80206bfe: 736080e7 jalr 1846(ra) # 80206330 <edup> + 80206c02: 8a2a mv s4,a0 while (*path == '/') { - 802068b4: 02f00993 li s3,47 - 802068b8: 0ff00b93 li s7,255 - 802068bc: 0ff00c13 li s8,255 - 802068c0: a0e5 j 802069a8 <lookup_path+0x138> + 80206c04: 02f00993 li s3,47 + 80206c08: 0ff00b93 li s7,255 + 80206c0c: 0ff00c13 li s8,255 + 80206c10: a0e5 j 80206cf8 <lookup_path+0x138> entry = edup(&root); - 802068c2: 00018517 auipc a0,0x18 - 802068c6: b8e50513 addi a0,a0,-1138 # 8021e450 <root> - 802068ca: fffff097 auipc ra,0xfffff - 802068ce: 716080e7 jalr 1814(ra) # 80205fe0 <edup> - 802068d2: 8a2a mv s4,a0 - 802068d4: b7c5 j 802068b4 <lookup_path+0x44> + 80206c12: 00018517 auipc a0,0x18 + 80206c16: 83e50513 addi a0,a0,-1986 # 8021e450 <root> + 80206c1a: fffff097 auipc ra,0xfffff + 80206c1e: 716080e7 jalr 1814(ra) # 80206330 <edup> + 80206c22: 8a2a mv s4,a0 + 80206c24: b7c5 j 80206c04 <lookup_path+0x44> } while ((path = skipelem(path, name)) != 0) { elock(entry); if (!(entry->attribute & ATTR_DIRECTORY)) { eunlock(entry); - 802068d6: 8552 mv a0,s4 - 802068d8: 00000097 auipc ra,0x0 - 802068dc: 99c080e7 jalr -1636(ra) # 80206274 <eunlock> + 80206c26: 8552 mv a0,s4 + 80206c28: 00000097 auipc ra,0x0 + 80206c2c: 99c080e7 jalr -1636(ra) # 802065c4 <eunlock> eput(entry); - 802068e0: 8552 mv a0,s4 - 802068e2: 00000097 auipc ra,0x0 - 802068e6: 9e0080e7 jalr -1568(ra) # 802062c2 <eput> + 80206c30: 8552 mv a0,s4 + 80206c32: 00000097 auipc ra,0x0 + 80206c36: 9e0080e7 jalr -1568(ra) # 80206612 <eput> return NULL; - 802068ea: 4a01 li s4,0 + 80206c3a: 4a01 li s4,0 if (parent) { eput(entry); return NULL; } return entry; } - 802068ec: 8552 mv a0,s4 - 802068ee: 60a6 ld ra,72(sp) - 802068f0: 6406 ld s0,64(sp) - 802068f2: 74e2 ld s1,56(sp) - 802068f4: 7942 ld s2,48(sp) - 802068f6: 79a2 ld s3,40(sp) - 802068f8: 7a02 ld s4,32(sp) - 802068fa: 6ae2 ld s5,24(sp) - 802068fc: 6b42 ld s6,16(sp) - 802068fe: 6ba2 ld s7,8(sp) - 80206900: 6c02 ld s8,0(sp) - 80206902: 6161 addi sp,sp,80 - 80206904: 8082 ret + 80206c3c: 8552 mv a0,s4 + 80206c3e: 60a6 ld ra,72(sp) + 80206c40: 6406 ld s0,64(sp) + 80206c42: 74e2 ld s1,56(sp) + 80206c44: 7942 ld s2,48(sp) + 80206c46: 79a2 ld s3,40(sp) + 80206c48: 7a02 ld s4,32(sp) + 80206c4a: 6ae2 ld s5,24(sp) + 80206c4c: 6b42 ld s6,16(sp) + 80206c4e: 6ba2 ld s7,8(sp) + 80206c50: 6c02 ld s8,0(sp) + 80206c52: 6161 addi sp,sp,80 + 80206c54: 8082 ret eunlock(entry); - 80206906: 8552 mv a0,s4 - 80206908: 00000097 auipc ra,0x0 - 8020690c: 96c080e7 jalr -1684(ra) # 80206274 <eunlock> + 80206c56: 8552 mv a0,s4 + 80206c58: 00000097 auipc ra,0x0 + 80206c5c: 96c080e7 jalr -1684(ra) # 802065c4 <eunlock> return entry; - 80206910: bff1 j 802068ec <lookup_path+0x7c> + 80206c60: bff1 j 80206c3c <lookup_path+0x7c> eunlock(entry); - 80206912: 8552 mv a0,s4 - 80206914: 00000097 auipc ra,0x0 - 80206918: 960080e7 jalr -1696(ra) # 80206274 <eunlock> + 80206c62: 8552 mv a0,s4 + 80206c64: 00000097 auipc ra,0x0 + 80206c68: 960080e7 jalr -1696(ra) # 802065c4 <eunlock> eput(entry); - 8020691c: 8552 mv a0,s4 - 8020691e: 00000097 auipc ra,0x0 - 80206922: 9a4080e7 jalr -1628(ra) # 802062c2 <eput> + 80206c6c: 8552 mv a0,s4 + 80206c6e: 00000097 auipc ra,0x0 + 80206c72: 9a4080e7 jalr -1628(ra) # 80206612 <eput> return NULL; - 80206926: 8a4a mv s4,s2 - 80206928: b7d1 j 802068ec <lookup_path+0x7c> + 80206c76: 8a4a mv s4,s2 + 80206c78: b7d1 j 80206c3c <lookup_path+0x7c> int len = path - s; - 8020692a: 412487b3 sub a5,s1,s2 - 8020692e: 863e mv a2,a5 - 80206930: 2781 sext.w a5,a5 - 80206932: 00fbd363 bge s7,a5,80206938 <lookup_path+0xc8> - 80206936: 8662 mv a2,s8 - 80206938: 0006079b sext.w a5,a2 + 80206c7a: 412487b3 sub a5,s1,s2 + 80206c7e: 863e mv a2,a5 + 80206c80: 2781 sext.w a5,a5 + 80206c82: 00fbd363 bge s7,a5,80206c88 <lookup_path+0xc8> + 80206c86: 8662 mv a2,s8 + 80206c88: 0006079b sext.w a5,a2 name[len] = 0; - 8020693c: 97d6 add a5,a5,s5 - 8020693e: 00078023 sb zero,0(a5) + 80206c8c: 97d6 add a5,a5,s5 + 80206c8e: 00078023 sb zero,0(a5) memmove(name, s, len); - 80206942: 2601 sext.w a2,a2 - 80206944: 85ca mv a1,s2 - 80206946: 8556 mv a0,s5 - 80206948: ffffa097 auipc ra,0xffffa - 8020694c: e76080e7 jalr -394(ra) # 802007be <memmove> + 80206c92: 2601 sext.w a2,a2 + 80206c94: 85ca mv a1,s2 + 80206c96: 8556 mv a0,s5 + 80206c98: ffffa097 auipc ra,0xffffa + 80206c9c: b26080e7 jalr -1242(ra) # 802007be <memmove> while (*path == '/') { - 80206950: 0004c783 lbu a5,0(s1) - 80206954: 01379763 bne a5,s3,80206962 <lookup_path+0xf2> + 80206ca0: 0004c783 lbu a5,0(s1) + 80206ca4: 01379763 bne a5,s3,80206cb2 <lookup_path+0xf2> path++; - 80206958: 0485 addi s1,s1,1 + 80206ca8: 0485 addi s1,s1,1 while (*path == '/') { - 8020695a: 0004c783 lbu a5,0(s1) - 8020695e: ff378de3 beq a5,s3,80206958 <lookup_path+0xe8> + 80206caa: 0004c783 lbu a5,0(s1) + 80206cae: ff378de3 beq a5,s3,80206ca8 <lookup_path+0xe8> elock(entry); - 80206962: 8552 mv a0,s4 - 80206964: 00000097 auipc ra,0x0 - 80206968: 8da080e7 jalr -1830(ra) # 8020623e <elock> + 80206cb2: 8552 mv a0,s4 + 80206cb4: 00000097 auipc ra,0x0 + 80206cb8: 8da080e7 jalr -1830(ra) # 8020658e <elock> if (!(entry->attribute & ATTR_DIRECTORY)) { - 8020696c: 100a4783 lbu a5,256(s4) - 80206970: 8bc1 andi a5,a5,16 - 80206972: d3b5 beqz a5,802068d6 <lookup_path+0x66> + 80206cbc: 100a4783 lbu a5,256(s4) + 80206cc0: 8bc1 andi a5,a5,16 + 80206cc2: d3b5 beqz a5,80206c26 <lookup_path+0x66> if (parent && *path == '\0') { - 80206974: 000b0563 beqz s6,8020697e <lookup_path+0x10e> - 80206978: 0004c783 lbu a5,0(s1) - 8020697c: d7c9 beqz a5,80206906 <lookup_path+0x96> + 80206cc4: 000b0563 beqz s6,80206cce <lookup_path+0x10e> + 80206cc8: 0004c783 lbu a5,0(s1) + 80206ccc: d7c9 beqz a5,80206c56 <lookup_path+0x96> if ((next = dirlookup(entry, name, 0)) == 0) { - 8020697e: 4601 li a2,0 - 80206980: 85d6 mv a1,s5 - 80206982: 8552 mv a0,s4 - 80206984: 00000097 auipc ra,0x0 - 80206988: c48080e7 jalr -952(ra) # 802065cc <dirlookup> - 8020698c: 892a mv s2,a0 - 8020698e: d151 beqz a0,80206912 <lookup_path+0xa2> + 80206cce: 4601 li a2,0 + 80206cd0: 85d6 mv a1,s5 + 80206cd2: 8552 mv a0,s4 + 80206cd4: 00000097 auipc ra,0x0 + 80206cd8: c48080e7 jalr -952(ra) # 8020691c <dirlookup> + 80206cdc: 892a mv s2,a0 + 80206cde: d151 beqz a0,80206c62 <lookup_path+0xa2> eunlock(entry); - 80206990: 8552 mv a0,s4 - 80206992: 00000097 auipc ra,0x0 - 80206996: 8e2080e7 jalr -1822(ra) # 80206274 <eunlock> + 80206ce0: 8552 mv a0,s4 + 80206ce2: 00000097 auipc ra,0x0 + 80206ce6: 8e2080e7 jalr -1822(ra) # 802065c4 <eunlock> eput(entry); - 8020699a: 8552 mv a0,s4 - 8020699c: 00000097 auipc ra,0x0 - 802069a0: 926080e7 jalr -1754(ra) # 802062c2 <eput> + 80206cea: 8552 mv a0,s4 + 80206cec: 00000097 auipc ra,0x0 + 80206cf0: 926080e7 jalr -1754(ra) # 80206612 <eput> entry = next; - 802069a4: 8a4a mv s4,s2 + 80206cf4: 8a4a mv s4,s2 eput(entry); - 802069a6: 8926 mv s2,s1 + 80206cf6: 8926 mv s2,s1 while (*path == '/') { - 802069a8: 00094783 lbu a5,0(s2) - 802069ac: 03379363 bne a5,s3,802069d2 <lookup_path+0x162> + 80206cf8: 00094783 lbu a5,0(s2) + 80206cfc: 03379363 bne a5,s3,80206d22 <lookup_path+0x162> path++; - 802069b0: 0905 addi s2,s2,1 + 80206d00: 0905 addi s2,s2,1 while (*path == '/') { - 802069b2: 00094783 lbu a5,0(s2) - 802069b6: ff378de3 beq a5,s3,802069b0 <lookup_path+0x140> + 80206d02: 00094783 lbu a5,0(s2) + 80206d06: ff378de3 beq a5,s3,80206d00 <lookup_path+0x140> if (*path == 0) { return NULL; } - 802069ba: cf89 beqz a5,802069d4 <lookup_path+0x164> + 80206d0a: cf89 beqz a5,80206d24 <lookup_path+0x164> path++; - 802069bc: 84ca mv s1,s2 + 80206d0c: 84ca mv s1,s2 while (*path != '/' && *path != 0) { - 802069be: f73786e3 beq a5,s3,8020692a <lookup_path+0xba> + 80206d0e: f73786e3 beq a5,s3,80206c7a <lookup_path+0xba> eput(entry); - 802069c2: 84ca mv s1,s2 + 80206d12: 84ca mv s1,s2 while (*path != '/' && *path != 0) { - 802069c4: d3bd beqz a5,8020692a <lookup_path+0xba> + 80206d14: d3bd beqz a5,80206c7a <lookup_path+0xba> path++; - 802069c6: 0485 addi s1,s1,1 + 80206d16: 0485 addi s1,s1,1 while (*path != '/' && *path != 0) { - 802069c8: 0004c783 lbu a5,0(s1) - 802069cc: ff379ce3 bne a5,s3,802069c4 <lookup_path+0x154> - 802069d0: bfa9 j 8020692a <lookup_path+0xba> + 80206d18: 0004c783 lbu a5,0(s1) + 80206d1c: ff379ce3 bne a5,s3,80206d14 <lookup_path+0x154> + 80206d20: bfa9 j 80206c7a <lookup_path+0xba> if (*path == 0) { return NULL; } - 802069d2: fbe5 bnez a5,802069c2 <lookup_path+0x152> + 80206d22: fbe5 bnez a5,80206d12 <lookup_path+0x152> if (parent) { - 802069d4: f00b0ce3 beqz s6,802068ec <lookup_path+0x7c> + 80206d24: f00b0ce3 beqz s6,80206c3c <lookup_path+0x7c> eput(entry); - 802069d8: 8552 mv a0,s4 - 802069da: 00000097 auipc ra,0x0 - 802069de: 8e8080e7 jalr -1816(ra) # 802062c2 <eput> + 80206d28: 8552 mv a0,s4 + 80206d2a: 00000097 auipc ra,0x0 + 80206d2e: 8e8080e7 jalr -1816(ra) # 80206612 <eput> return NULL; - 802069e2: 4a01 li s4,0 - 802069e4: b721 j 802068ec <lookup_path+0x7c> + 80206d32: 4a01 li s4,0 + 80206d34: b721 j 80206c3c <lookup_path+0x7c> -00000000802069e6 <ename>: +0000000080206d36 <ename>: struct dirent *ename(char *path) { - 802069e6: 716d addi sp,sp,-272 - 802069e8: e606 sd ra,264(sp) - 802069ea: e222 sd s0,256(sp) - 802069ec: 0a00 addi s0,sp,272 + 80206d36: 716d addi sp,sp,-272 + 80206d38: e606 sd ra,264(sp) + 80206d3a: e222 sd s0,256(sp) + 80206d3c: 0a00 addi s0,sp,272 char name[FAT32_MAX_FILENAME + 1]; return lookup_path(path, 0, name); - 802069ee: ef040613 addi a2,s0,-272 - 802069f2: 4581 li a1,0 - 802069f4: 00000097 auipc ra,0x0 - 802069f8: e7c080e7 jalr -388(ra) # 80206870 <lookup_path> + 80206d3e: ef040613 addi a2,s0,-272 + 80206d42: 4581 li a1,0 + 80206d44: 00000097 auipc ra,0x0 + 80206d48: e7c080e7 jalr -388(ra) # 80206bc0 <lookup_path> } - 802069fc: 60b2 ld ra,264(sp) - 802069fe: 6412 ld s0,256(sp) - 80206a00: 6151 addi sp,sp,272 - 80206a02: 8082 ret + 80206d4c: 60b2 ld ra,264(sp) + 80206d4e: 6412 ld s0,256(sp) + 80206d50: 6151 addi sp,sp,272 + 80206d52: 8082 ret -0000000080206a04 <enameparent>: +0000000080206d54 <enameparent>: struct dirent *enameparent(char *path, char *name) { - 80206a04: 1141 addi sp,sp,-16 - 80206a06: e406 sd ra,8(sp) - 80206a08: e022 sd s0,0(sp) - 80206a0a: 0800 addi s0,sp,16 - 80206a0c: 862e mv a2,a1 + 80206d54: 1141 addi sp,sp,-16 + 80206d56: e406 sd ra,8(sp) + 80206d58: e022 sd s0,0(sp) + 80206d5a: 0800 addi s0,sp,16 + 80206d5c: 862e mv a2,a1 return lookup_path(path, 1, name); - 80206a0e: 4585 li a1,1 - 80206a10: 00000097 auipc ra,0x0 - 80206a14: e60080e7 jalr -416(ra) # 80206870 <lookup_path> + 80206d5e: 4585 li a1,1 + 80206d60: 00000097 auipc ra,0x0 + 80206d64: e60080e7 jalr -416(ra) # 80206bc0 <lookup_path> } - 80206a18: 60a2 ld ra,8(sp) - 80206a1a: 6402 ld s0,0(sp) - 80206a1c: 0141 addi sp,sp,16 - 80206a1e: 8082 ret + 80206d68: 60a2 ld ra,8(sp) + 80206d6a: 6402 ld s0,0(sp) + 80206d6c: 0141 addi sp,sp,16 + 80206d6e: 8082 ret -0000000080206a20 <plicinit>: +0000000080206d70 <plicinit>: // // the riscv Platform Level Interrupt Controller (PLIC). // void plicinit(void) { - 80206a20: 1141 addi sp,sp,-16 - 80206a22: e422 sd s0,8(sp) - 80206a24: 0800 addi s0,sp,16 + 80206d70: 1141 addi sp,sp,-16 + 80206d72: e422 sd s0,8(sp) + 80206d74: 0800 addi s0,sp,16 writed(1, PLIC_V + DISK_IRQ * sizeof(uint32)); - 80206a26: 00fc37b7 lui a5,0xfc3 - 80206a2a: 07ba slli a5,a5,0xe - 80206a2c: 4705 li a4,1 - 80206a2e: c3d8 sw a4,4(a5) + 80206d76: 00fc37b7 lui a5,0xfc3 + 80206d7a: 07ba slli a5,a5,0xe + 80206d7c: 4705 li a4,1 + 80206d7e: c3d8 sw a4,4(a5) writed(1, PLIC_V + UART_IRQ * sizeof(uint32)); - 80206a30: d798 sw a4,40(a5) + 80206d80: d798 sw a4,40(a5) #ifdef DEBUG printf("plicinit\n"); #endif } - 80206a32: 6422 ld s0,8(sp) - 80206a34: 0141 addi sp,sp,16 - 80206a36: 8082 ret + 80206d82: 6422 ld s0,8(sp) + 80206d84: 0141 addi sp,sp,16 + 80206d86: 8082 ret -0000000080206a38 <plicinithart>: +0000000080206d88 <plicinithart>: void plicinithart(void) { - 80206a38: 1141 addi sp,sp,-16 - 80206a3a: e406 sd ra,8(sp) - 80206a3c: e022 sd s0,0(sp) - 80206a3e: 0800 addi s0,sp,16 + 80206d88: 1141 addi sp,sp,-16 + 80206d8a: e406 sd ra,8(sp) + 80206d8c: e022 sd s0,0(sp) + 80206d8e: 0800 addi s0,sp,16 int hart = cpuid(); - 80206a40: ffffb097 auipc ra,0xffffb - 80206a44: fd0080e7 jalr -48(ra) # 80201a10 <cpuid> + 80206d90: ffffb097 auipc ra,0xffffb + 80206d94: c80080e7 jalr -896(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); - 80206a48: 0085171b slliw a4,a0,0x8 - 80206a4c: 01f867b7 lui a5,0x1f86 - 80206a50: 0785 addi a5,a5,1 # 1f86001 <_entry-0x7e279fff> - 80206a52: 07b6 slli a5,a5,0xd - 80206a54: 97ba add a5,a5,a4 - 80206a56: 40200713 li a4,1026 - 80206a5a: 08e7a023 sw a4,128(a5) + 80206d98: 0085171b slliw a4,a0,0x8 + 80206d9c: 01f867b7 lui a5,0x1f86 + 80206da0: 0785 addi a5,a5,1 # 1f86001 <_entry-0x7e279fff> + 80206da2: 07b6 slli a5,a5,0xd + 80206da4: 97ba add a5,a5,a4 + 80206da6: 40200713 li a4,1026 + 80206daa: 08e7a023 sw a4,128(a5) // set this hart's S-mode priority threshold to 0. *(uint32*)PLIC_SPRIORITY(hart) = 0; - 80206a5e: 00d5151b slliw a0,a0,0xd - 80206a62: 03f0c7b7 lui a5,0x3f0c - 80206a66: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> - 80206a6a: 07b2 slli a5,a5,0xc - 80206a6c: 97aa add a5,a5,a0 - 80206a6e: 0007a023 sw zero,0(a5) + 80206dae: 00d5151b slliw a0,a0,0xd + 80206db2: 03f0c7b7 lui a5,0x3f0c + 80206db6: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> + 80206dba: 07b2 slli a5,a5,0xc + 80206dbc: 97aa add a5,a5,a0 + 80206dbe: 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 } - 80206a72: 60a2 ld ra,8(sp) - 80206a74: 6402 ld s0,0(sp) - 80206a76: 0141 addi sp,sp,16 - 80206a78: 8082 ret + 80206dc2: 60a2 ld ra,8(sp) + 80206dc4: 6402 ld s0,0(sp) + 80206dc6: 0141 addi sp,sp,16 + 80206dc8: 8082 ret -0000000080206a7a <plic_claim>: +0000000080206dca <plic_claim>: // ask the PLIC what interrupt we should serve. int plic_claim(void) { - 80206a7a: 1141 addi sp,sp,-16 - 80206a7c: e406 sd ra,8(sp) - 80206a7e: e022 sd s0,0(sp) - 80206a80: 0800 addi s0,sp,16 + 80206dca: 1141 addi sp,sp,-16 + 80206dcc: e406 sd ra,8(sp) + 80206dce: e022 sd s0,0(sp) + 80206dd0: 0800 addi s0,sp,16 int hart = cpuid(); - 80206a82: ffffb097 auipc ra,0xffffb - 80206a86: f8e080e7 jalr -114(ra) # 80201a10 <cpuid> + 80206dd2: ffffb097 auipc ra,0xffffb + 80206dd6: c3e080e7 jalr -962(ra) # 80201a10 <cpuid> int irq; #ifndef QEMU irq = *(uint32*)PLIC_MCLAIM(hart); #else irq = *(uint32*)PLIC_SCLAIM(hart); - 80206a8a: 00d5151b slliw a0,a0,0xd - 80206a8e: 03f0c7b7 lui a5,0x3f0c - 80206a92: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> - 80206a96: 07b2 slli a5,a5,0xc - 80206a98: 97aa add a5,a5,a0 + 80206dda: 00d5151b slliw a0,a0,0xd + 80206dde: 03f0c7b7 lui a5,0x3f0c + 80206de2: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> + 80206de6: 07b2 slli a5,a5,0xc + 80206de8: 97aa add a5,a5,a0 #endif return irq; } - 80206a9a: 43c8 lw a0,4(a5) - 80206a9c: 60a2 ld ra,8(sp) - 80206a9e: 6402 ld s0,0(sp) - 80206aa0: 0141 addi sp,sp,16 - 80206aa2: 8082 ret + 80206dea: 43c8 lw a0,4(a5) + 80206dec: 60a2 ld ra,8(sp) + 80206dee: 6402 ld s0,0(sp) + 80206df0: 0141 addi sp,sp,16 + 80206df2: 8082 ret -0000000080206aa4 <plic_complete>: +0000000080206df4 <plic_complete>: // tell the PLIC we've served this IRQ. void plic_complete(int irq) { - 80206aa4: 1101 addi sp,sp,-32 - 80206aa6: ec06 sd ra,24(sp) - 80206aa8: e822 sd s0,16(sp) - 80206aaa: e426 sd s1,8(sp) - 80206aac: 1000 addi s0,sp,32 - 80206aae: 84aa mv s1,a0 + 80206df4: 1101 addi sp,sp,-32 + 80206df6: ec06 sd ra,24(sp) + 80206df8: e822 sd s0,16(sp) + 80206dfa: e426 sd s1,8(sp) + 80206dfc: 1000 addi s0,sp,32 + 80206dfe: 84aa mv s1,a0 int hart = cpuid(); - 80206ab0: ffffb097 auipc ra,0xffffb - 80206ab4: f60080e7 jalr -160(ra) # 80201a10 <cpuid> + 80206e00: ffffb097 auipc ra,0xffffb + 80206e04: c10080e7 jalr -1008(ra) # 80201a10 <cpuid> #ifndef QEMU *(uint32*)PLIC_MCLAIM(hart) = irq; #else *(uint32*)PLIC_SCLAIM(hart) = irq; - 80206ab8: 00d5151b slliw a0,a0,0xd - 80206abc: 03f0c7b7 lui a5,0x3f0c - 80206ac0: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> - 80206ac4: 07b2 slli a5,a5,0xc - 80206ac6: 97aa add a5,a5,a0 - 80206ac8: c3c4 sw s1,4(a5) + 80206e08: 00d5151b slliw a0,a0,0xd + 80206e0c: 03f0c7b7 lui a5,0x3f0c + 80206e10: 20178793 addi a5,a5,513 # 3f0c201 <_entry-0x7c2f3dff> + 80206e14: 07b2 slli a5,a5,0xc + 80206e16: 97aa add a5,a5,a0 + 80206e18: c3c4 sw s1,4(a5) #endif } - 80206aca: 60e2 ld ra,24(sp) - 80206acc: 6442 ld s0,16(sp) - 80206ace: 64a2 ld s1,8(sp) - 80206ad0: 6105 addi sp,sp,32 - 80206ad2: 8082 ret + 80206e1a: 60e2 ld ra,24(sp) + 80206e1c: 6442 ld s0,16(sp) + 80206e1e: 64a2 ld s1,8(sp) + 80206e20: 6105 addi sp,sp,32 + 80206e22: 8082 ret -0000000080206ad4 <consolewrite>: +0000000080206e24 <consolewrite>: // // user write()s to the console go here. // int consolewrite(int user_src, uint64 src, int n) { - 80206ad4: 715d addi sp,sp,-80 - 80206ad6: e486 sd ra,72(sp) - 80206ad8: e0a2 sd s0,64(sp) - 80206ada: fc26 sd s1,56(sp) - 80206adc: f84a sd s2,48(sp) - 80206ade: f44e sd s3,40(sp) - 80206ae0: f052 sd s4,32(sp) - 80206ae2: ec56 sd s5,24(sp) - 80206ae4: e85a sd s6,16(sp) - 80206ae6: 0880 addi s0,sp,80 - 80206ae8: 8a2a mv s4,a0 - 80206aea: 84ae mv s1,a1 - 80206aec: 89b2 mv s3,a2 + 80206e24: 715d addi sp,sp,-80 + 80206e26: e486 sd ra,72(sp) + 80206e28: e0a2 sd s0,64(sp) + 80206e2a: fc26 sd s1,56(sp) + 80206e2c: f84a sd s2,48(sp) + 80206e2e: f44e sd s3,40(sp) + 80206e30: f052 sd s4,32(sp) + 80206e32: ec56 sd s5,24(sp) + 80206e34: e85a sd s6,16(sp) + 80206e36: 0880 addi s0,sp,80 + 80206e38: 8a2a mv s4,a0 + 80206e3a: 84ae mv s1,a1 + 80206e3c: 89b2 mv s3,a2 int i; acquire(&cons.lock); - 80206aee: 0001c517 auipc a0,0x1c - 80206af2: 13250513 addi a0,a0,306 # 80222c20 <cons> - 80206af6: ffffa097 auipc ra,0xffffa - 80206afa: bd0080e7 jalr -1072(ra) # 802006c6 <acquire> + 80206e3e: 0001c517 auipc a0,0x1c + 80206e42: de250513 addi a0,a0,-542 # 80222c20 <cons> + 80206e46: ffffa097 auipc ra,0xffffa + 80206e4a: 880080e7 jalr -1920(ra) # 802006c6 <acquire> for(i = 0; i < n; i++){ - 80206afe: 07305063 blez s3,80206b5e <consolewrite+0x8a> - 80206b02: 4901 li s2,0 + 80206e4e: 07305063 blez s3,80206eae <consolewrite+0x8a> + 80206e52: 4901 li s2,0 char c; if(either_copyin(&c, user_src, src+i, 1) == -1) - 80206b04: fbf40b13 addi s6,s0,-65 - 80206b08: 5afd li s5,-1 - 80206b0a: 4685 li a3,1 - 80206b0c: 8626 mv a2,s1 - 80206b0e: 85d2 mv a1,s4 - 80206b10: 855a mv a0,s6 - 80206b12: ffffc097 auipc ra,0xffffc - 80206b16: a36080e7 jalr -1482(ra) # 80202548 <either_copyin> - 80206b1a: 01550f63 beq a0,s5,80206b38 <consolewrite+0x64> + 80206e54: fbf40b13 addi s6,s0,-65 + 80206e58: 5afd li s5,-1 + 80206e5a: 4685 li a3,1 + 80206e5c: 8626 mv a2,s1 + 80206e5e: 85d2 mv a1,s4 + 80206e60: 855a mv a0,s6 + 80206e62: ffffb097 auipc ra,0xffffb + 80206e66: 6e6080e7 jalr 1766(ra) # 80202548 <either_copyin> + 80206e6a: 01550f63 beq a0,s5,80206e88 <consolewrite+0x64> SBI_CALL_1(SBI_CONSOLE_PUTCHAR, ch); - 80206b1e: fbf44503 lbu a0,-65(s0) - 80206b22: 4581 li a1,0 - 80206b24: 4601 li a2,0 - 80206b26: 4681 li a3,0 - 80206b28: 4885 li a7,1 - 80206b2a: 00000073 ecall + 80206e6e: fbf44503 lbu a0,-65(s0) + 80206e72: 4581 li a1,0 + 80206e74: 4601 li a2,0 + 80206e76: 4681 li a3,0 + 80206e78: 4885 li a7,1 + 80206e7a: 00000073 ecall for(i = 0; i < n; i++){ - 80206b2e: 2905 addiw s2,s2,1 - 80206b30: 0485 addi s1,s1,1 - 80206b32: fd299ce3 bne s3,s2,80206b0a <consolewrite+0x36> - 80206b36: 894e mv s2,s3 + 80206e7e: 2905 addiw s2,s2,1 + 80206e80: 0485 addi s1,s1,1 + 80206e82: fd299ce3 bne s3,s2,80206e5a <consolewrite+0x36> + 80206e86: 894e mv s2,s3 break; sbi_console_putchar(c); } release(&cons.lock); - 80206b38: 0001c517 auipc a0,0x1c - 80206b3c: 0e850513 addi a0,a0,232 # 80222c20 <cons> - 80206b40: ffffa097 auipc ra,0xffffa - 80206b44: bda080e7 jalr -1062(ra) # 8020071a <release> + 80206e88: 0001c517 auipc a0,0x1c + 80206e8c: d9850513 addi a0,a0,-616 # 80222c20 <cons> + 80206e90: ffffa097 auipc ra,0xffffa + 80206e94: 88a080e7 jalr -1910(ra) # 8020071a <release> return i; } - 80206b48: 854a mv a0,s2 - 80206b4a: 60a6 ld ra,72(sp) - 80206b4c: 6406 ld s0,64(sp) - 80206b4e: 74e2 ld s1,56(sp) - 80206b50: 7942 ld s2,48(sp) - 80206b52: 79a2 ld s3,40(sp) - 80206b54: 7a02 ld s4,32(sp) - 80206b56: 6ae2 ld s5,24(sp) - 80206b58: 6b42 ld s6,16(sp) - 80206b5a: 6161 addi sp,sp,80 - 80206b5c: 8082 ret + 80206e98: 854a mv a0,s2 + 80206e9a: 60a6 ld ra,72(sp) + 80206e9c: 6406 ld s0,64(sp) + 80206e9e: 74e2 ld s1,56(sp) + 80206ea0: 7942 ld s2,48(sp) + 80206ea2: 79a2 ld s3,40(sp) + 80206ea4: 7a02 ld s4,32(sp) + 80206ea6: 6ae2 ld s5,24(sp) + 80206ea8: 6b42 ld s6,16(sp) + 80206eaa: 6161 addi sp,sp,80 + 80206eac: 8082 ret for(i = 0; i < n; i++){ - 80206b5e: 4901 li s2,0 - 80206b60: bfe1 j 80206b38 <consolewrite+0x64> + 80206eae: 4901 li s2,0 + 80206eb0: bfe1 j 80206e88 <consolewrite+0x64> -0000000080206b62 <consoleread>: +0000000080206eb2 <consoleread>: // user_dist indicates whether dst is a user // or kernel address. // int consoleread(int user_dst, uint64 dst, int n) { - 80206b62: 7119 addi sp,sp,-128 - 80206b64: fc86 sd ra,120(sp) - 80206b66: f8a2 sd s0,112(sp) - 80206b68: f4a6 sd s1,104(sp) - 80206b6a: f0ca sd s2,96(sp) - 80206b6c: ecce sd s3,88(sp) - 80206b6e: e8d2 sd s4,80(sp) - 80206b70: e4d6 sd s5,72(sp) - 80206b72: e0da sd s6,64(sp) - 80206b74: fc5e sd s7,56(sp) - 80206b76: f862 sd s8,48(sp) - 80206b78: f466 sd s9,40(sp) - 80206b7a: f06a sd s10,32(sp) - 80206b7c: ec6e sd s11,24(sp) - 80206b7e: 0100 addi s0,sp,128 - 80206b80: 8aaa mv s5,a0 - 80206b82: 8a2e mv s4,a1 - 80206b84: 89b2 mv s3,a2 + 80206eb2: 7119 addi sp,sp,-128 + 80206eb4: fc86 sd ra,120(sp) + 80206eb6: f8a2 sd s0,112(sp) + 80206eb8: f4a6 sd s1,104(sp) + 80206eba: f0ca sd s2,96(sp) + 80206ebc: ecce sd s3,88(sp) + 80206ebe: e8d2 sd s4,80(sp) + 80206ec0: e4d6 sd s5,72(sp) + 80206ec2: e0da sd s6,64(sp) + 80206ec4: fc5e sd s7,56(sp) + 80206ec6: f862 sd s8,48(sp) + 80206ec8: f466 sd s9,40(sp) + 80206eca: f06a sd s10,32(sp) + 80206ecc: ec6e sd s11,24(sp) + 80206ece: 0100 addi s0,sp,128 + 80206ed0: 8aaa mv s5,a0 + 80206ed2: 8a2e mv s4,a1 + 80206ed4: 89b2 mv s3,a2 uint target; int c; char cbuf; target = n; - 80206b86: 00060b1b sext.w s6,a2 + 80206ed6: 00060b1b sext.w s6,a2 acquire(&cons.lock); - 80206b8a: 0001c517 auipc a0,0x1c - 80206b8e: 09650513 addi a0,a0,150 # 80222c20 <cons> - 80206b92: ffffa097 auipc ra,0xffffa - 80206b96: b34080e7 jalr -1228(ra) # 802006c6 <acquire> + 80206eda: 0001c517 auipc a0,0x1c + 80206ede: d4650513 addi a0,a0,-698 # 80222c20 <cons> + 80206ee2: ffff9097 auipc ra,0xffff9 + 80206ee6: 7e4080e7 jalr 2020(ra) # 802006c6 <acquire> while(n > 0){ // wait until interrupt handler has put some // input into cons.buffer. while(cons.r == cons.w){ - 80206b9a: 0001c497 auipc s1,0x1c - 80206b9e: 08648493 addi s1,s1,134 # 80222c20 <cons> + 80206eea: 0001c497 auipc s1,0x1c + 80206eee: d3648493 addi s1,s1,-714 # 80222c20 <cons> if(myproc()->killed){ release(&cons.lock); return -1; } sleep(&cons.r, &cons.lock); - 80206ba2: 0001c917 auipc s2,0x1c - 80206ba6: 11690913 addi s2,s2,278 # 80222cb8 <cons+0x98> + 80206ef2: 0001c917 auipc s2,0x1c + 80206ef6: dc690913 addi s2,s2,-570 # 80222cb8 <cons+0x98> } c = cons.buf[cons.r++ % INPUT_BUF]; if(c == C('D')){ // end-of-file - 80206baa: 4c11 li s8,4 + 80206efa: 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) - 80206bac: f8f40d13 addi s10,s0,-113 - 80206bb0: 5cfd li s9,-1 + 80206efc: f8f40d13 addi s10,s0,-113 + 80206f00: 5cfd li s9,-1 break; dst++; --n; if(c == '\n'){ - 80206bb2: 4da9 li s11,10 + 80206f02: 4da9 li s11,10 while(n > 0){ - 80206bb4: 07305763 blez s3,80206c22 <consoleread+0xc0> + 80206f04: 07305763 blez s3,80206f72 <consoleread+0xc0> while(cons.r == cons.w){ - 80206bb8: 0984a783 lw a5,152(s1) - 80206bbc: 09c4a703 lw a4,156(s1) - 80206bc0: 02f71463 bne a4,a5,80206be8 <consoleread+0x86> + 80206f08: 0984a783 lw a5,152(s1) + 80206f0c: 09c4a703 lw a4,156(s1) + 80206f10: 02f71463 bne a4,a5,80206f38 <consoleread+0x86> if(myproc()->killed){ - 80206bc4: ffffb097 auipc ra,0xffffb - 80206bc8: e78080e7 jalr -392(ra) # 80201a3c <myproc> - 80206bcc: 591c lw a5,48(a0) - 80206bce: e7ad bnez a5,80206c38 <consoleread+0xd6> + 80206f14: ffffb097 auipc ra,0xffffb + 80206f18: b28080e7 jalr -1240(ra) # 80201a3c <myproc> + 80206f1c: 591c lw a5,48(a0) + 80206f1e: e7ad bnez a5,80206f88 <consoleread+0xd6> sleep(&cons.r, &cons.lock); - 80206bd0: 85a6 mv a1,s1 - 80206bd2: 854a mv a0,s2 - 80206bd4: ffffb097 auipc ra,0xffffb - 80206bd8: 6e8080e7 jalr 1768(ra) # 802022bc <sleep> + 80206f20: 85a6 mv a1,s1 + 80206f22: 854a mv a0,s2 + 80206f24: ffffb097 auipc ra,0xffffb + 80206f28: 398080e7 jalr 920(ra) # 802022bc <sleep> while(cons.r == cons.w){ - 80206bdc: 0984a783 lw a5,152(s1) - 80206be0: 09c4a703 lw a4,156(s1) - 80206be4: fef700e3 beq a4,a5,80206bc4 <consoleread+0x62> + 80206f2c: 0984a783 lw a5,152(s1) + 80206f30: 09c4a703 lw a4,156(s1) + 80206f34: fef700e3 beq a4,a5,80206f14 <consoleread+0x62> c = cons.buf[cons.r++ % INPUT_BUF]; - 80206be8: 0017871b addiw a4,a5,1 - 80206bec: 08e4ac23 sw a4,152(s1) - 80206bf0: 07f7f713 andi a4,a5,127 - 80206bf4: 9726 add a4,a4,s1 - 80206bf6: 01874703 lbu a4,24(a4) - 80206bfa: 00070b9b sext.w s7,a4 + 80206f38: 0017871b addiw a4,a5,1 + 80206f3c: 08e4ac23 sw a4,152(s1) + 80206f40: 07f7f713 andi a4,a5,127 + 80206f44: 9726 add a4,a4,s1 + 80206f46: 01874703 lbu a4,24(a4) + 80206f4a: 00070b9b sext.w s7,a4 if(c == C('D')){ // end-of-file - 80206bfe: 078b8563 beq s7,s8,80206c68 <consoleread+0x106> + 80206f4e: 078b8563 beq s7,s8,80206fb8 <consoleread+0x106> cbuf = c; - 80206c02: f8e407a3 sb a4,-113(s0) + 80206f52: f8e407a3 sb a4,-113(s0) if(either_copyout(user_dst, dst, &cbuf, 1) == -1) - 80206c06: 4685 li a3,1 - 80206c08: 866a mv a2,s10 - 80206c0a: 85d2 mv a1,s4 - 80206c0c: 8556 mv a0,s5 - 80206c0e: ffffc097 auipc ra,0xffffc - 80206c12: 904080e7 jalr -1788(ra) # 80202512 <either_copyout> - 80206c16: 01950663 beq a0,s9,80206c22 <consoleread+0xc0> + 80206f56: 4685 li a3,1 + 80206f58: 866a mv a2,s10 + 80206f5a: 85d2 mv a1,s4 + 80206f5c: 8556 mv a0,s5 + 80206f5e: ffffb097 auipc ra,0xffffb + 80206f62: 5b4080e7 jalr 1460(ra) # 80202512 <either_copyout> + 80206f66: 01950663 beq a0,s9,80206f72 <consoleread+0xc0> dst++; - 80206c1a: 0a05 addi s4,s4,1 + 80206f6a: 0a05 addi s4,s4,1 --n; - 80206c1c: 39fd addiw s3,s3,-1 + 80206f6c: 39fd addiw s3,s3,-1 if(c == '\n'){ - 80206c1e: f9bb9be3 bne s7,s11,80206bb4 <consoleread+0x52> + 80206f6e: f9bb9be3 bne s7,s11,80206f04 <consoleread+0x52> // a whole line has arrived, return to // the user-level read(). break; } } release(&cons.lock); - 80206c22: 0001c517 auipc a0,0x1c - 80206c26: ffe50513 addi a0,a0,-2 # 80222c20 <cons> - 80206c2a: ffffa097 auipc ra,0xffffa - 80206c2e: af0080e7 jalr -1296(ra) # 8020071a <release> + 80206f72: 0001c517 auipc a0,0x1c + 80206f76: cae50513 addi a0,a0,-850 # 80222c20 <cons> + 80206f7a: ffff9097 auipc ra,0xffff9 + 80206f7e: 7a0080e7 jalr 1952(ra) # 8020071a <release> return target - n; - 80206c32: 413b053b subw a0,s6,s3 - 80206c36: a811 j 80206c4a <consoleread+0xe8> + 80206f82: 413b053b subw a0,s6,s3 + 80206f86: a811 j 80206f9a <consoleread+0xe8> release(&cons.lock); - 80206c38: 0001c517 auipc a0,0x1c - 80206c3c: fe850513 addi a0,a0,-24 # 80222c20 <cons> - 80206c40: ffffa097 auipc ra,0xffffa - 80206c44: ada080e7 jalr -1318(ra) # 8020071a <release> + 80206f88: 0001c517 auipc a0,0x1c + 80206f8c: c9850513 addi a0,a0,-872 # 80222c20 <cons> + 80206f90: ffff9097 auipc ra,0xffff9 + 80206f94: 78a080e7 jalr 1930(ra) # 8020071a <release> return -1; - 80206c48: 557d li a0,-1 -} - 80206c4a: 70e6 ld ra,120(sp) - 80206c4c: 7446 ld s0,112(sp) - 80206c4e: 74a6 ld s1,104(sp) - 80206c50: 7906 ld s2,96(sp) - 80206c52: 69e6 ld s3,88(sp) - 80206c54: 6a46 ld s4,80(sp) - 80206c56: 6aa6 ld s5,72(sp) - 80206c58: 6b06 ld s6,64(sp) - 80206c5a: 7be2 ld s7,56(sp) - 80206c5c: 7c42 ld s8,48(sp) - 80206c5e: 7ca2 ld s9,40(sp) - 80206c60: 7d02 ld s10,32(sp) - 80206c62: 6de2 ld s11,24(sp) - 80206c64: 6109 addi sp,sp,128 - 80206c66: 8082 ret + 80206f98: 557d li a0,-1 +} + 80206f9a: 70e6 ld ra,120(sp) + 80206f9c: 7446 ld s0,112(sp) + 80206f9e: 74a6 ld s1,104(sp) + 80206fa0: 7906 ld s2,96(sp) + 80206fa2: 69e6 ld s3,88(sp) + 80206fa4: 6a46 ld s4,80(sp) + 80206fa6: 6aa6 ld s5,72(sp) + 80206fa8: 6b06 ld s6,64(sp) + 80206faa: 7be2 ld s7,56(sp) + 80206fac: 7c42 ld s8,48(sp) + 80206fae: 7ca2 ld s9,40(sp) + 80206fb0: 7d02 ld s10,32(sp) + 80206fb2: 6de2 ld s11,24(sp) + 80206fb4: 6109 addi sp,sp,128 + 80206fb6: 8082 ret if(n < target){ - 80206c68: 0009871b sext.w a4,s3 - 80206c6c: fb677be3 bgeu a4,s6,80206c22 <consoleread+0xc0> + 80206fb8: 0009871b sext.w a4,s3 + 80206fbc: fb677be3 bgeu a4,s6,80206f72 <consoleread+0xc0> cons.r--; - 80206c70: 0001c717 auipc a4,0x1c - 80206c74: 04f72423 sw a5,72(a4) # 80222cb8 <cons+0x98> - 80206c78: b76d j 80206c22 <consoleread+0xc0> + 80206fc0: 0001c717 auipc a4,0x1c + 80206fc4: cef72c23 sw a5,-776(a4) # 80222cb8 <cons+0x98> + 80206fc8: b76d j 80206f72 <consoleread+0xc0> -0000000080206c7a <consputc>: +0000000080206fca <consputc>: void consputc(int c) { - 80206c7a: 1141 addi sp,sp,-16 - 80206c7c: e422 sd s0,8(sp) - 80206c7e: 0800 addi s0,sp,16 + 80206fca: 1141 addi sp,sp,-16 + 80206fcc: e422 sd s0,8(sp) + 80206fce: 0800 addi s0,sp,16 if(c == BACKSPACE){ - 80206c80: 10000793 li a5,256 - 80206c84: 00f50b63 beq a0,a5,80206c9a <consputc+0x20> - 80206c88: 4581 li a1,0 - 80206c8a: 4601 li a2,0 - 80206c8c: 4681 li a3,0 - 80206c8e: 4885 li a7,1 - 80206c90: 00000073 ecall -} - 80206c94: 6422 ld s0,8(sp) - 80206c96: 0141 addi sp,sp,16 - 80206c98: 8082 ret - 80206c9a: 4521 li a0,8 - 80206c9c: 4581 li a1,0 - 80206c9e: 4601 li a2,0 - 80206ca0: 4681 li a3,0 - 80206ca2: 4885 li a7,1 - 80206ca4: 00000073 ecall - 80206ca8: 02000513 li a0,32 - 80206cac: 00000073 ecall - 80206cb0: 4521 li a0,8 - 80206cb2: 00000073 ecall -} - 80206cb6: bff9 j 80206c94 <consputc+0x1a> - -0000000080206cb8 <consoleintr>: + 80206fd0: 10000793 li a5,256 + 80206fd4: 00f50b63 beq a0,a5,80206fea <consputc+0x20> + 80206fd8: 4581 li a1,0 + 80206fda: 4601 li a2,0 + 80206fdc: 4681 li a3,0 + 80206fde: 4885 li a7,1 + 80206fe0: 00000073 ecall +} + 80206fe4: 6422 ld s0,8(sp) + 80206fe6: 0141 addi sp,sp,16 + 80206fe8: 8082 ret + 80206fea: 4521 li a0,8 + 80206fec: 4581 li a1,0 + 80206fee: 4601 li a2,0 + 80206ff0: 4681 li a3,0 + 80206ff2: 4885 li a7,1 + 80206ff4: 00000073 ecall + 80206ff8: 02000513 li a0,32 + 80206ffc: 00000073 ecall + 80207000: 4521 li a0,8 + 80207002: 00000073 ecall +} + 80207006: bff9 j 80206fe4 <consputc+0x1a> + +0000000080207008 <consoleintr>: // do erase/kill processing, append to cons.buf, // wake up consoleread() if a whole line has arrived. // void consoleintr(int c) { - 80206cb8: 1101 addi sp,sp,-32 - 80206cba: ec06 sd ra,24(sp) - 80206cbc: e822 sd s0,16(sp) - 80206cbe: e426 sd s1,8(sp) - 80206cc0: e04a sd s2,0(sp) - 80206cc2: 1000 addi s0,sp,32 - 80206cc4: 84aa mv s1,a0 + 80207008: 1101 addi sp,sp,-32 + 8020700a: ec06 sd ra,24(sp) + 8020700c: e822 sd s0,16(sp) + 8020700e: e426 sd s1,8(sp) + 80207010: e04a sd s2,0(sp) + 80207012: 1000 addi s0,sp,32 + 80207014: 84aa mv s1,a0 acquire(&cons.lock); - 80206cc6: 0001c517 auipc a0,0x1c - 80206cca: f5a50513 addi a0,a0,-166 # 80222c20 <cons> - 80206cce: ffffa097 auipc ra,0xffffa - 80206cd2: 9f8080e7 jalr -1544(ra) # 802006c6 <acquire> + 80207016: 0001c517 auipc a0,0x1c + 8020701a: c0a50513 addi a0,a0,-1014 # 80222c20 <cons> + 8020701e: ffff9097 auipc ra,0xffff9 + 80207022: 6a8080e7 jalr 1704(ra) # 802006c6 <acquire> switch(c){ - 80206cd6: 47d5 li a5,21 - 80206cd8: 0af48663 beq s1,a5,80206d84 <consoleintr+0xcc> - 80206cdc: 0297ca63 blt a5,s1,80206d10 <consoleintr+0x58> - 80206ce0: 47a1 li a5,8 - 80206ce2: 0ef48763 beq s1,a5,80206dd0 <consoleintr+0x118> - 80206ce6: 47c1 li a5,16 - 80206ce8: 10f49a63 bne s1,a5,80206dfc <consoleintr+0x144> + 80207026: 47d5 li a5,21 + 80207028: 0af48663 beq s1,a5,802070d4 <consoleintr+0xcc> + 8020702c: 0297ca63 blt a5,s1,80207060 <consoleintr+0x58> + 80207030: 47a1 li a5,8 + 80207032: 0ef48763 beq s1,a5,80207120 <consoleintr+0x118> + 80207036: 47c1 li a5,16 + 80207038: 10f49a63 bne s1,a5,8020714c <consoleintr+0x144> case C('P'): // Print process list. procdump(); - 80206cec: ffffc097 auipc ra,0xffffc - 80206cf0: 890080e7 jalr -1904(ra) # 8020257c <procdump> + 8020703c: ffffb097 auipc ra,0xffffb + 80207040: 540080e7 jalr 1344(ra) # 8020257c <procdump> } } break; } release(&cons.lock); - 80206cf4: 0001c517 auipc a0,0x1c - 80206cf8: f2c50513 addi a0,a0,-212 # 80222c20 <cons> - 80206cfc: ffffa097 auipc ra,0xffffa - 80206d00: a1e080e7 jalr -1506(ra) # 8020071a <release> -} - 80206d04: 60e2 ld ra,24(sp) - 80206d06: 6442 ld s0,16(sp) - 80206d08: 64a2 ld s1,8(sp) - 80206d0a: 6902 ld s2,0(sp) - 80206d0c: 6105 addi sp,sp,32 - 80206d0e: 8082 ret + 80207044: 0001c517 auipc a0,0x1c + 80207048: bdc50513 addi a0,a0,-1060 # 80222c20 <cons> + 8020704c: ffff9097 auipc ra,0xffff9 + 80207050: 6ce080e7 jalr 1742(ra) # 8020071a <release> +} + 80207054: 60e2 ld ra,24(sp) + 80207056: 6442 ld s0,16(sp) + 80207058: 64a2 ld s1,8(sp) + 8020705a: 6902 ld s2,0(sp) + 8020705c: 6105 addi sp,sp,32 + 8020705e: 8082 ret switch(c){ - 80206d10: 07f00793 li a5,127 - 80206d14: 0af48e63 beq s1,a5,80206dd0 <consoleintr+0x118> + 80207060: 07f00793 li a5,127 + 80207064: 0af48e63 beq s1,a5,80207120 <consoleintr+0x118> if(c != 0 && cons.e-cons.r < INPUT_BUF){ - 80206d18: 0001c717 auipc a4,0x1c - 80206d1c: f0870713 addi a4,a4,-248 # 80222c20 <cons> - 80206d20: 0a072783 lw a5,160(a4) - 80206d24: 09872703 lw a4,152(a4) - 80206d28: 9f99 subw a5,a5,a4 - 80206d2a: 07f00713 li a4,127 - 80206d2e: fcf763e3 bltu a4,a5,80206cf4 <consoleintr+0x3c> + 80207068: 0001c717 auipc a4,0x1c + 8020706c: bb870713 addi a4,a4,-1096 # 80222c20 <cons> + 80207070: 0a072783 lw a5,160(a4) + 80207074: 09872703 lw a4,152(a4) + 80207078: 9f99 subw a5,a5,a4 + 8020707a: 07f00713 li a4,127 + 8020707e: fcf763e3 bltu a4,a5,80207044 <consoleintr+0x3c> c = (c == '\r') ? '\n' : c; - 80206d32: 47b5 li a5,13 - 80206d34: 0cf48763 beq s1,a5,80206e02 <consoleintr+0x14a> + 80207082: 47b5 li a5,13 + 80207084: 0cf48763 beq s1,a5,80207152 <consoleintr+0x14a> consputc(c); - 80206d38: 8526 mv a0,s1 - 80206d3a: 00000097 auipc ra,0x0 - 80206d3e: f40080e7 jalr -192(ra) # 80206c7a <consputc> + 80207088: 8526 mv a0,s1 + 8020708a: 00000097 auipc ra,0x0 + 8020708e: f40080e7 jalr -192(ra) # 80206fca <consputc> cons.buf[cons.e++ % INPUT_BUF] = c; - 80206d42: 0001c797 auipc a5,0x1c - 80206d46: ede78793 addi a5,a5,-290 # 80222c20 <cons> - 80206d4a: 0a07a703 lw a4,160(a5) - 80206d4e: 0017069b addiw a3,a4,1 - 80206d52: 0006861b sext.w a2,a3 - 80206d56: 0ad7a023 sw a3,160(a5) - 80206d5a: 07f77713 andi a4,a4,127 - 80206d5e: 97ba add a5,a5,a4 - 80206d60: 00978c23 sb s1,24(a5) + 80207092: 0001c797 auipc a5,0x1c + 80207096: b8e78793 addi a5,a5,-1138 # 80222c20 <cons> + 8020709a: 0a07a703 lw a4,160(a5) + 8020709e: 0017069b addiw a3,a4,1 + 802070a2: 0006861b sext.w a2,a3 + 802070a6: 0ad7a023 sw a3,160(a5) + 802070aa: 07f77713 andi a4,a4,127 + 802070ae: 97ba add a5,a5,a4 + 802070b0: 00978c23 sb s1,24(a5) if(c == '\n' || c == C('D') || cons.e == cons.r+INPUT_BUF){ - 80206d64: 47a9 li a5,10 - 80206d66: 0cf48563 beq s1,a5,80206e30 <consoleintr+0x178> - 80206d6a: 4791 li a5,4 - 80206d6c: 0cf48263 beq s1,a5,80206e30 <consoleintr+0x178> - 80206d70: 0001c797 auipc a5,0x1c - 80206d74: f487a783 lw a5,-184(a5) # 80222cb8 <cons+0x98> - 80206d78: 0807879b addiw a5,a5,128 - 80206d7c: f6f61ce3 bne a2,a5,80206cf4 <consoleintr+0x3c> + 802070b4: 47a9 li a5,10 + 802070b6: 0cf48563 beq s1,a5,80207180 <consoleintr+0x178> + 802070ba: 4791 li a5,4 + 802070bc: 0cf48263 beq s1,a5,80207180 <consoleintr+0x178> + 802070c0: 0001c797 auipc a5,0x1c + 802070c4: bf87a783 lw a5,-1032(a5) # 80222cb8 <cons+0x98> + 802070c8: 0807879b addiw a5,a5,128 + 802070cc: f6f61ce3 bne a2,a5,80207044 <consoleintr+0x3c> cons.buf[cons.e++ % INPUT_BUF] = c; - 80206d80: 863e mv a2,a5 - 80206d82: a07d j 80206e30 <consoleintr+0x178> + 802070d0: 863e mv a2,a5 + 802070d2: a07d j 80207180 <consoleintr+0x178> while(cons.e != cons.w && - 80206d84: 0001c717 auipc a4,0x1c - 80206d88: e9c70713 addi a4,a4,-356 # 80222c20 <cons> - 80206d8c: 0a072783 lw a5,160(a4) - 80206d90: 09c72703 lw a4,156(a4) + 802070d4: 0001c717 auipc a4,0x1c + 802070d8: b4c70713 addi a4,a4,-1204 # 80222c20 <cons> + 802070dc: 0a072783 lw a5,160(a4) + 802070e0: 09c72703 lw a4,156(a4) cons.buf[(cons.e-1) % INPUT_BUF] != '\n'){ - 80206d94: 0001c497 auipc s1,0x1c - 80206d98: e8c48493 addi s1,s1,-372 # 80222c20 <cons> + 802070e4: 0001c497 auipc s1,0x1c + 802070e8: b3c48493 addi s1,s1,-1220 # 80222c20 <cons> while(cons.e != cons.w && - 80206d9c: 4929 li s2,10 - 80206d9e: f4f70be3 beq a4,a5,80206cf4 <consoleintr+0x3c> + 802070ec: 4929 li s2,10 + 802070ee: f4f70be3 beq a4,a5,80207044 <consoleintr+0x3c> cons.buf[(cons.e-1) % INPUT_BUF] != '\n'){ - 80206da2: 37fd addiw a5,a5,-1 - 80206da4: 07f7f713 andi a4,a5,127 - 80206da8: 9726 add a4,a4,s1 + 802070f2: 37fd addiw a5,a5,-1 + 802070f4: 07f7f713 andi a4,a5,127 + 802070f8: 9726 add a4,a4,s1 while(cons.e != cons.w && - 80206daa: 01874703 lbu a4,24(a4) - 80206dae: f52703e3 beq a4,s2,80206cf4 <consoleintr+0x3c> + 802070fa: 01874703 lbu a4,24(a4) + 802070fe: f52703e3 beq a4,s2,80207044 <consoleintr+0x3c> cons.e--; - 80206db2: 0af4a023 sw a5,160(s1) + 80207102: 0af4a023 sw a5,160(s1) consputc(BACKSPACE); - 80206db6: 10000513 li a0,256 - 80206dba: 00000097 auipc ra,0x0 - 80206dbe: ec0080e7 jalr -320(ra) # 80206c7a <consputc> + 80207106: 10000513 li a0,256 + 8020710a: 00000097 auipc ra,0x0 + 8020710e: ec0080e7 jalr -320(ra) # 80206fca <consputc> while(cons.e != cons.w && - 80206dc2: 0a04a783 lw a5,160(s1) - 80206dc6: 09c4a703 lw a4,156(s1) - 80206dca: fcf71ce3 bne a4,a5,80206da2 <consoleintr+0xea> - 80206dce: b71d j 80206cf4 <consoleintr+0x3c> + 80207112: 0a04a783 lw a5,160(s1) + 80207116: 09c4a703 lw a4,156(s1) + 8020711a: fcf71ce3 bne a4,a5,802070f2 <consoleintr+0xea> + 8020711e: b71d j 80207044 <consoleintr+0x3c> if(cons.e != cons.w){ - 80206dd0: 0001c717 auipc a4,0x1c - 80206dd4: e5070713 addi a4,a4,-432 # 80222c20 <cons> - 80206dd8: 0a072783 lw a5,160(a4) - 80206ddc: 09c72703 lw a4,156(a4) - 80206de0: f0f70ae3 beq a4,a5,80206cf4 <consoleintr+0x3c> + 80207120: 0001c717 auipc a4,0x1c + 80207124: b0070713 addi a4,a4,-1280 # 80222c20 <cons> + 80207128: 0a072783 lw a5,160(a4) + 8020712c: 09c72703 lw a4,156(a4) + 80207130: f0f70ae3 beq a4,a5,80207044 <consoleintr+0x3c> cons.e--; - 80206de4: 37fd addiw a5,a5,-1 - 80206de6: 0001c717 auipc a4,0x1c - 80206dea: ecf72d23 sw a5,-294(a4) # 80222cc0 <cons+0xa0> + 80207134: 37fd addiw a5,a5,-1 + 80207136: 0001c717 auipc a4,0x1c + 8020713a: b8f72523 sw a5,-1142(a4) # 80222cc0 <cons+0xa0> consputc(BACKSPACE); - 80206dee: 10000513 li a0,256 - 80206df2: 00000097 auipc ra,0x0 - 80206df6: e88080e7 jalr -376(ra) # 80206c7a <consputc> - 80206dfa: bded j 80206cf4 <consoleintr+0x3c> + 8020713e: 10000513 li a0,256 + 80207142: 00000097 auipc ra,0x0 + 80207146: e88080e7 jalr -376(ra) # 80206fca <consputc> + 8020714a: bded j 80207044 <consoleintr+0x3c> if(c != 0 && cons.e-cons.r < INPUT_BUF){ - 80206dfc: ee048ce3 beqz s1,80206cf4 <consoleintr+0x3c> - 80206e00: bf21 j 80206d18 <consoleintr+0x60> + 8020714c: ee048ce3 beqz s1,80207044 <consoleintr+0x3c> + 80207150: bf21 j 80207068 <consoleintr+0x60> consputc(c); - 80206e02: 4529 li a0,10 - 80206e04: 00000097 auipc ra,0x0 - 80206e08: e76080e7 jalr -394(ra) # 80206c7a <consputc> + 80207152: 4529 li a0,10 + 80207154: 00000097 auipc ra,0x0 + 80207158: e76080e7 jalr -394(ra) # 80206fca <consputc> cons.buf[cons.e++ % INPUT_BUF] = c; - 80206e0c: 0001c797 auipc a5,0x1c - 80206e10: e1478793 addi a5,a5,-492 # 80222c20 <cons> - 80206e14: 0a07a703 lw a4,160(a5) - 80206e18: 0017069b addiw a3,a4,1 - 80206e1c: 0006861b sext.w a2,a3 - 80206e20: 0ad7a023 sw a3,160(a5) - 80206e24: 07f77713 andi a4,a4,127 - 80206e28: 97ba add a5,a5,a4 - 80206e2a: 4729 li a4,10 - 80206e2c: 00e78c23 sb a4,24(a5) + 8020715c: 0001c797 auipc a5,0x1c + 80207160: ac478793 addi a5,a5,-1340 # 80222c20 <cons> + 80207164: 0a07a703 lw a4,160(a5) + 80207168: 0017069b addiw a3,a4,1 + 8020716c: 0006861b sext.w a2,a3 + 80207170: 0ad7a023 sw a3,160(a5) + 80207174: 07f77713 andi a4,a4,127 + 80207178: 97ba add a5,a5,a4 + 8020717a: 4729 li a4,10 + 8020717c: 00e78c23 sb a4,24(a5) cons.w = cons.e; - 80206e30: 0001c797 auipc a5,0x1c - 80206e34: e8c7a623 sw a2,-372(a5) # 80222cbc <cons+0x9c> + 80207180: 0001c797 auipc a5,0x1c + 80207184: b2c7ae23 sw a2,-1220(a5) # 80222cbc <cons+0x9c> wakeup(&cons.r); - 80206e38: 0001c517 auipc a0,0x1c - 80206e3c: e8050513 addi a0,a0,-384 # 80222cb8 <cons+0x98> - 80206e40: ffffb097 auipc ra,0xffffb - 80206e44: 5f8080e7 jalr 1528(ra) # 80202438 <wakeup> - 80206e48: b575 j 80206cf4 <consoleintr+0x3c> + 80207188: 0001c517 auipc a0,0x1c + 8020718c: b3050513 addi a0,a0,-1232 # 80222cb8 <cons+0x98> + 80207190: ffffb097 auipc ra,0xffffb + 80207194: 2a8080e7 jalr 680(ra) # 80202438 <wakeup> + 80207198: b575 j 80207044 <consoleintr+0x3c> -0000000080206e4a <consoleinit>: +000000008020719a <consoleinit>: void consoleinit(void) { - 80206e4a: 1101 addi sp,sp,-32 - 80206e4c: ec06 sd ra,24(sp) - 80206e4e: e822 sd s0,16(sp) - 80206e50: e426 sd s1,8(sp) - 80206e52: 1000 addi s0,sp,32 + 8020719a: 1101 addi sp,sp,-32 + 8020719c: ec06 sd ra,24(sp) + 8020719e: e822 sd s0,16(sp) + 802071a0: e426 sd s1,8(sp) + 802071a2: 1000 addi s0,sp,32 initlock(&cons.lock, "cons"); - 80206e54: 0001c497 auipc s1,0x1c - 80206e58: dcc48493 addi s1,s1,-564 # 80222c20 <cons> - 80206e5c: 00003597 auipc a1,0x3 - 80206e60: e8c58593 addi a1,a1,-372 # 80209ce8 <digits+0x968> - 80206e64: 8526 mv a0,s1 - 80206e66: ffffa097 auipc ra,0xffffa - 80206e6a: 81c080e7 jalr -2020(ra) # 80200682 <initlock> + 802071a4: 0001c497 auipc s1,0x1c + 802071a8: a7c48493 addi s1,s1,-1412 # 80222c20 <cons> + 802071ac: 00003597 auipc a1,0x3 + 802071b0: b7458593 addi a1,a1,-1164 # 80209d20 <digits+0x9a0> + 802071b4: 8526 mv a0,s1 + 802071b6: ffff9097 auipc ra,0xffff9 + 802071ba: 4cc080e7 jalr 1228(ra) # 80200682 <initlock> cons.e = cons.w = cons.r = 0; - 80206e6e: 0804ac23 sw zero,152(s1) - 80206e72: 0804ae23 sw zero,156(s1) - 80206e76: 0a04a023 sw zero,160(s1) + 802071be: 0804ac23 sw zero,152(s1) + 802071c2: 0804ae23 sw zero,156(s1) + 802071c6: 0a04a023 sw zero,160(s1) // connect read and write system calls // to consoleread and consolewrite. devsw[CONSOLE].read = consoleread; - 80206e7a: 00005797 auipc a5,0x5 - 80206e7e: c0e7b783 ld a5,-1010(a5) # 8020ba88 <_GLOBAL_OFFSET_TABLE_+0x58> - 80206e82: 00000717 auipc a4,0x0 - 80206e86: ce070713 addi a4,a4,-800 # 80206b62 <consoleread> - 80206e8a: eb98 sd a4,16(a5) + 802071ca: 00005797 auipc a5,0x5 + 802071ce: b2e7b783 ld a5,-1234(a5) # 8020bcf8 <_GLOBAL_OFFSET_TABLE_+0x58> + 802071d2: 00000717 auipc a4,0x0 + 802071d6: ce070713 addi a4,a4,-800 # 80206eb2 <consoleread> + 802071da: eb98 sd a4,16(a5) devsw[CONSOLE].write = consolewrite; - 80206e8c: 00000717 auipc a4,0x0 - 80206e90: c4870713 addi a4,a4,-952 # 80206ad4 <consolewrite> - 80206e94: ef98 sd a4,24(a5) + 802071dc: 00000717 auipc a4,0x0 + 802071e0: c4870713 addi a4,a4,-952 # 80206e24 <consolewrite> + 802071e4: ef98 sd a4,24(a5) } - 80206e96: 60e2 ld ra,24(sp) - 80206e98: 6442 ld s0,16(sp) - 80206e9a: 64a2 ld s1,8(sp) - 80206e9c: 6105 addi sp,sp,32 - 80206e9e: 8082 ret + 802071e6: 60e2 ld ra,24(sp) + 802071e8: 6442 ld s0,16(sp) + 802071ea: 64a2 ld s1,8(sp) + 802071ec: 6105 addi sp,sp,32 + 802071ee: 8082 ret -0000000080206ea0 <free_desc>: +00000000802071f0 <free_desc>: } // mark a descriptor as free. static void free_desc(int i) { - 80206ea0: 1141 addi sp,sp,-16 - 80206ea2: e406 sd ra,8(sp) - 80206ea4: e022 sd s0,0(sp) - 80206ea6: 0800 addi s0,sp,16 + 802071f0: 1141 addi sp,sp,-16 + 802071f2: e406 sd ra,8(sp) + 802071f4: e022 sd s0,0(sp) + 802071f6: 0800 addi s0,sp,16 if(i >= NUM) - 80206ea8: 479d li a5,7 - 80206eaa: 04a7cb63 blt a5,a0,80206f00 <free_desc+0x60> + 802071f8: 479d li a5,7 + 802071fa: 04a7cb63 blt a5,a0,80207250 <free_desc+0x60> panic("virtio_disk_intr 1"); if(disk.free[i]) - 80206eae: 0001c717 auipc a4,0x1c - 80206eb2: 15270713 addi a4,a4,338 # 80223000 <disk> - 80206eb6: 972a add a4,a4,a0 - 80206eb8: 6789 lui a5,0x2 - 80206eba: 97ba add a5,a5,a4 - 80206ebc: 0187c783 lbu a5,24(a5) # 2018 <_entry-0x801fdfe8> - 80206ec0: eba1 bnez a5,80206f10 <free_desc+0x70> + 802071fe: 0001c717 auipc a4,0x1c + 80207202: e0270713 addi a4,a4,-510 # 80223000 <disk> + 80207206: 972a add a4,a4,a0 + 80207208: 6789 lui a5,0x2 + 8020720a: 97ba add a5,a5,a4 + 8020720c: 0187c783 lbu a5,24(a5) # 2018 <_entry-0x801fdfe8> + 80207210: eba1 bnez a5,80207260 <free_desc+0x70> panic("virtio_disk_intr 2"); disk.desc[i].addr = 0; - 80206ec2: 00451713 slli a4,a0,0x4 - 80206ec6: 0001e797 auipc a5,0x1e - 80206eca: 13a7b783 ld a5,314(a5) # 80225000 <disk+0x2000> - 80206ece: 97ba add a5,a5,a4 - 80206ed0: 0007b023 sd zero,0(a5) + 80207212: 00451713 slli a4,a0,0x4 + 80207216: 0001e797 auipc a5,0x1e + 8020721a: dea7b783 ld a5,-534(a5) # 80225000 <disk+0x2000> + 8020721e: 97ba add a5,a5,a4 + 80207220: 0007b023 sd zero,0(a5) disk.free[i] = 1; - 80206ed4: 0001c717 auipc a4,0x1c - 80206ed8: 12c70713 addi a4,a4,300 # 80223000 <disk> - 80206edc: 972a add a4,a4,a0 - 80206ede: 6789 lui a5,0x2 - 80206ee0: 97ba add a5,a5,a4 - 80206ee2: 4705 li a4,1 - 80206ee4: 00e78c23 sb a4,24(a5) # 2018 <_entry-0x801fdfe8> + 80207224: 0001c717 auipc a4,0x1c + 80207228: ddc70713 addi a4,a4,-548 # 80223000 <disk> + 8020722c: 972a add a4,a4,a0 + 8020722e: 6789 lui a5,0x2 + 80207230: 97ba add a5,a5,a4 + 80207232: 4705 li a4,1 + 80207234: 00e78c23 sb a4,24(a5) # 2018 <_entry-0x801fdfe8> wakeup(&disk.free[0]); - 80206ee8: 0001e517 auipc a0,0x1e - 80206eec: 13050513 addi a0,a0,304 # 80225018 <disk+0x2018> - 80206ef0: ffffb097 auipc ra,0xffffb - 80206ef4: 548080e7 jalr 1352(ra) # 80202438 <wakeup> -} - 80206ef8: 60a2 ld ra,8(sp) - 80206efa: 6402 ld s0,0(sp) - 80206efc: 0141 addi sp,sp,16 - 80206efe: 8082 ret + 80207238: 0001e517 auipc a0,0x1e + 8020723c: de050513 addi a0,a0,-544 # 80225018 <disk+0x2018> + 80207240: ffffb097 auipc ra,0xffffb + 80207244: 1f8080e7 jalr 504(ra) # 80202438 <wakeup> +} + 80207248: 60a2 ld ra,8(sp) + 8020724a: 6402 ld s0,0(sp) + 8020724c: 0141 addi sp,sp,16 + 8020724e: 8082 ret panic("virtio_disk_intr 1"); - 80206f00: 00003517 auipc a0,0x3 - 80206f04: df050513 addi a0,a0,-528 # 80209cf0 <digits+0x970> - 80206f08: ffff9097 auipc ra,0xffff9 - 80206f0c: 23c080e7 jalr 572(ra) # 80200144 <panic> + 80207250: 00003517 auipc a0,0x3 + 80207254: ad850513 addi a0,a0,-1320 # 80209d28 <digits+0x9a8> + 80207258: ffff9097 auipc ra,0xffff9 + 8020725c: eec080e7 jalr -276(ra) # 80200144 <panic> panic("virtio_disk_intr 2"); - 80206f10: 00003517 auipc a0,0x3 - 80206f14: df850513 addi a0,a0,-520 # 80209d08 <digits+0x988> - 80206f18: ffff9097 auipc ra,0xffff9 - 80206f1c: 22c080e7 jalr 556(ra) # 80200144 <panic> + 80207260: 00003517 auipc a0,0x3 + 80207264: ae050513 addi a0,a0,-1312 # 80209d40 <digits+0x9c0> + 80207268: ffff9097 auipc ra,0xffff9 + 8020726c: edc080e7 jalr -292(ra) # 80200144 <panic> -0000000080206f20 <virtio_disk_init>: +0000000080207270 <virtio_disk_init>: { - 80206f20: 1141 addi sp,sp,-16 - 80206f22: e406 sd ra,8(sp) - 80206f24: e022 sd s0,0(sp) - 80206f26: 0800 addi s0,sp,16 + 80207270: 1141 addi sp,sp,-16 + 80207272: e406 sd ra,8(sp) + 80207274: e022 sd s0,0(sp) + 80207276: 0800 addi s0,sp,16 initlock(&disk.vdisk_lock, "virtio_disk"); - 80206f28: 00003597 auipc a1,0x3 - 80206f2c: df858593 addi a1,a1,-520 # 80209d20 <digits+0x9a0> - 80206f30: 0001e517 auipc a0,0x1e - 80206f34: 17850513 addi a0,a0,376 # 802250a8 <disk+0x20a8> - 80206f38: ffff9097 auipc ra,0xffff9 - 80206f3c: 74a080e7 jalr 1866(ra) # 80200682 <initlock> + 80207278: 00003597 auipc a1,0x3 + 8020727c: ae058593 addi a1,a1,-1312 # 80209d58 <digits+0x9d8> + 80207280: 0001e517 auipc a0,0x1e + 80207284: e2850513 addi a0,a0,-472 # 802250a8 <disk+0x20a8> + 80207288: ffff9097 auipc ra,0xffff9 + 8020728c: 3fa080e7 jalr 1018(ra) # 80200682 <initlock> if(*R(VIRTIO_MMIO_MAGIC_VALUE) != 0x74726976 || - 80206f40: 03f107b7 lui a5,0x3f10 - 80206f44: 0785 addi a5,a5,1 # 3f10001 <_entry-0x7c2effff> - 80206f46: 07b2 slli a5,a5,0xc - 80206f48: 4398 lw a4,0(a5) - 80206f4a: 2701 sext.w a4,a4 - 80206f4c: 747277b7 lui a5,0x74727 - 80206f50: 97678793 addi a5,a5,-1674 # 74726976 <_entry-0xbad968a> - 80206f54: 12f71163 bne a4,a5,80207076 <virtio_disk_init+0x156> + 80207290: 03f107b7 lui a5,0x3f10 + 80207294: 0785 addi a5,a5,1 # 3f10001 <_entry-0x7c2effff> + 80207296: 07b2 slli a5,a5,0xc + 80207298: 4398 lw a4,0(a5) + 8020729a: 2701 sext.w a4,a4 + 8020729c: 747277b7 lui a5,0x74727 + 802072a0: 97678793 addi a5,a5,-1674 # 74726976 <_entry-0xbad968a> + 802072a4: 12f71163 bne a4,a5,802073c6 <virtio_disk_init+0x156> *R(VIRTIO_MMIO_VERSION) != 1 || - 80206f58: 00003797 auipc a5,0x3 - 80206f5c: e507b783 ld a5,-432(a5) # 80209da8 <digits+0xa28> - 80206f60: 439c lw a5,0(a5) - 80206f62: 2781 sext.w a5,a5 + 802072a8: 00003797 auipc a5,0x3 + 802072ac: b387b783 ld a5,-1224(a5) # 80209de0 <digits+0xa60> + 802072b0: 439c lw a5,0(a5) + 802072b2: 2781 sext.w a5,a5 if(*R(VIRTIO_MMIO_MAGIC_VALUE) != 0x74726976 || - 80206f64: 4705 li a4,1 - 80206f66: 10e79863 bne a5,a4,80207076 <virtio_disk_init+0x156> + 802072b4: 4705 li a4,1 + 802072b6: 10e79863 bne a5,a4,802073c6 <virtio_disk_init+0x156> *R(VIRTIO_MMIO_DEVICE_ID) != 2 || - 80206f6a: 00003797 auipc a5,0x3 - 80206f6e: e467b783 ld a5,-442(a5) # 80209db0 <digits+0xa30> - 80206f72: 439c lw a5,0(a5) - 80206f74: 2781 sext.w a5,a5 + 802072ba: 00003797 auipc a5,0x3 + 802072be: b2e7b783 ld a5,-1234(a5) # 80209de8 <digits+0xa68> + 802072c2: 439c lw a5,0(a5) + 802072c4: 2781 sext.w a5,a5 *R(VIRTIO_MMIO_VERSION) != 1 || - 80206f76: 4709 li a4,2 - 80206f78: 0ee79f63 bne a5,a4,80207076 <virtio_disk_init+0x156> + 802072c6: 4709 li a4,2 + 802072c8: 0ee79f63 bne a5,a4,802073c6 <virtio_disk_init+0x156> *R(VIRTIO_MMIO_VENDOR_ID) != 0x554d4551){ - 80206f7c: 00003797 auipc a5,0x3 - 80206f80: e3c7b783 ld a5,-452(a5) # 80209db8 <digits+0xa38> - 80206f84: 4398 lw a4,0(a5) - 80206f86: 2701 sext.w a4,a4 + 802072cc: 00003797 auipc a5,0x3 + 802072d0: b247b783 ld a5,-1244(a5) # 80209df0 <digits+0xa70> + 802072d4: 4398 lw a4,0(a5) + 802072d6: 2701 sext.w a4,a4 *R(VIRTIO_MMIO_DEVICE_ID) != 2 || - 80206f88: 554d47b7 lui a5,0x554d4 - 80206f8c: 55178793 addi a5,a5,1361 # 554d4551 <_entry-0x2ad2baaf> - 80206f90: 0ef71363 bne a4,a5,80207076 <virtio_disk_init+0x156> + 802072d8: 554d47b7 lui a5,0x554d4 + 802072dc: 55178793 addi a5,a5,1361 # 554d4551 <_entry-0x2ad2baaf> + 802072e0: 0ef71363 bne a4,a5,802073c6 <virtio_disk_init+0x156> *R(VIRTIO_MMIO_STATUS) = status; - 80206f94: 00003797 auipc a5,0x3 - 80206f98: e2c7b783 ld a5,-468(a5) # 80209dc0 <digits+0xa40> - 80206f9c: 4705 li a4,1 - 80206f9e: c398 sw a4,0(a5) + 802072e4: 00003797 auipc a5,0x3 + 802072e8: b147b783 ld a5,-1260(a5) # 80209df8 <digits+0xa78> + 802072ec: 4705 li a4,1 + 802072ee: c398 sw a4,0(a5) *R(VIRTIO_MMIO_STATUS) = status; - 80206fa0: 470d li a4,3 - 80206fa2: c398 sw a4,0(a5) + 802072f0: 470d li a4,3 + 802072f2: c398 sw a4,0(a5) uint64 features = *R(VIRTIO_MMIO_DEVICE_FEATURES); - 80206fa4: 00003717 auipc a4,0x3 - 80206fa8: e2473703 ld a4,-476(a4) # 80209dc8 <digits+0xa48> - 80206fac: 4318 lw a4,0(a4) + 802072f4: 00003717 auipc a4,0x3 + 802072f8: b0c73703 ld a4,-1268(a4) # 80209e00 <digits+0xa80> + 802072fc: 4318 lw a4,0(a4) *R(VIRTIO_MMIO_DRIVER_FEATURES) = features; - 80206fae: c7ffe6b7 lui a3,0xc7ffe - 80206fb2: 75f68693 addi a3,a3,1887 # ffffffffc7ffe75f <ebss_clear+0xffffffff47dd875f> - 80206fb6: 8f75 and a4,a4,a3 - 80206fb8: 00003697 auipc a3,0x3 - 80206fbc: e186b683 ld a3,-488(a3) # 80209dd0 <digits+0xa50> - 80206fc0: c298 sw a4,0(a3) + 802072fe: c7ffe6b7 lui a3,0xc7ffe + 80207302: 75f68693 addi a3,a3,1887 # ffffffffc7ffe75f <ebss_clear+0xffffffff47dd875f> + 80207306: 8f75 and a4,a4,a3 + 80207308: 00003697 auipc a3,0x3 + 8020730c: b006b683 ld a3,-1280(a3) # 80209e08 <digits+0xa88> + 80207310: c298 sw a4,0(a3) *R(VIRTIO_MMIO_STATUS) = status; - 80206fc2: 472d li a4,11 - 80206fc4: c398 sw a4,0(a5) + 80207312: 472d li a4,11 + 80207314: c398 sw a4,0(a5) *R(VIRTIO_MMIO_STATUS) = status; - 80206fc6: 473d li a4,15 - 80206fc8: c398 sw a4,0(a5) + 80207316: 473d li a4,15 + 80207318: c398 sw a4,0(a5) *R(VIRTIO_MMIO_GUEST_PAGE_SIZE) = PGSIZE; - 80206fca: 00003797 auipc a5,0x3 - 80206fce: e0e7b783 ld a5,-498(a5) # 80209dd8 <digits+0xa58> - 80206fd2: 6705 lui a4,0x1 - 80206fd4: c398 sw a4,0(a5) + 8020731a: 00003797 auipc a5,0x3 + 8020731e: af67b783 ld a5,-1290(a5) # 80209e10 <digits+0xa90> + 80207322: 6705 lui a4,0x1 + 80207324: c398 sw a4,0(a5) *R(VIRTIO_MMIO_QUEUE_SEL) = 0; - 80206fd6: 00003797 auipc a5,0x3 - 80206fda: e0a7b783 ld a5,-502(a5) # 80209de0 <digits+0xa60> - 80206fde: 0007a023 sw zero,0(a5) + 80207326: 00003797 auipc a5,0x3 + 8020732a: af27b783 ld a5,-1294(a5) # 80209e18 <digits+0xa98> + 8020732e: 0007a023 sw zero,0(a5) uint32 max = *R(VIRTIO_MMIO_QUEUE_NUM_MAX); - 80206fe2: 00003797 auipc a5,0x3 - 80206fe6: e067b783 ld a5,-506(a5) # 80209de8 <digits+0xa68> - 80206fea: 439c lw a5,0(a5) - 80206fec: 2781 sext.w a5,a5 + 80207332: 00003797 auipc a5,0x3 + 80207336: aee7b783 ld a5,-1298(a5) # 80209e20 <digits+0xaa0> + 8020733a: 439c lw a5,0(a5) + 8020733c: 2781 sext.w a5,a5 if(max == 0) - 80206fee: cfc1 beqz a5,80207086 <virtio_disk_init+0x166> + 8020733e: cfc1 beqz a5,802073d6 <virtio_disk_init+0x166> if(max < NUM) - 80206ff0: 471d li a4,7 - 80206ff2: 0af77263 bgeu a4,a5,80207096 <virtio_disk_init+0x176> + 80207340: 471d li a4,7 + 80207342: 0af77263 bgeu a4,a5,802073e6 <virtio_disk_init+0x176> *R(VIRTIO_MMIO_QUEUE_NUM) = NUM; - 80206ff6: 00003797 auipc a5,0x3 - 80206ffa: dfa7b783 ld a5,-518(a5) # 80209df0 <digits+0xa70> - 80206ffe: 4721 li a4,8 - 80207000: c398 sw a4,0(a5) + 80207346: 00003797 auipc a5,0x3 + 8020734a: ae27b783 ld a5,-1310(a5) # 80209e28 <digits+0xaa8> + 8020734e: 4721 li a4,8 + 80207350: c398 sw a4,0(a5) memset(disk.pages, 0, sizeof(disk.pages)); - 80207002: 6609 lui a2,0x2 - 80207004: 4581 li a1,0 - 80207006: 0001c517 auipc a0,0x1c - 8020700a: ffa50513 addi a0,a0,-6 # 80223000 <disk> - 8020700e: ffff9097 auipc ra,0xffff9 - 80207012: 754080e7 jalr 1876(ra) # 80200762 <memset> + 80207352: 6609 lui a2,0x2 + 80207354: 4581 li a1,0 + 80207356: 0001c517 auipc a0,0x1c + 8020735a: caa50513 addi a0,a0,-854 # 80223000 <disk> + 8020735e: ffff9097 auipc ra,0xffff9 + 80207362: 404080e7 jalr 1028(ra) # 80200762 <memset> *R(VIRTIO_MMIO_QUEUE_PFN) = ((uint64)disk.pages) >> PGSHIFT; - 80207016: 0001c717 auipc a4,0x1c - 8020701a: fea70713 addi a4,a4,-22 # 80223000 <disk> - 8020701e: 00c75793 srli a5,a4,0xc - 80207022: 2781 sext.w a5,a5 - 80207024: 00003697 auipc a3,0x3 - 80207028: dd46b683 ld a3,-556(a3) # 80209df8 <digits+0xa78> - 8020702c: c29c sw a5,0(a3) + 80207366: 0001c717 auipc a4,0x1c + 8020736a: c9a70713 addi a4,a4,-870 # 80223000 <disk> + 8020736e: 00c75793 srli a5,a4,0xc + 80207372: 2781 sext.w a5,a5 + 80207374: 00003697 auipc a3,0x3 + 80207378: abc6b683 ld a3,-1348(a3) # 80209e30 <digits+0xab0> + 8020737c: c29c sw a5,0(a3) disk.desc = (struct VRingDesc *) disk.pages; - 8020702e: 0001e797 auipc a5,0x1e - 80207032: fd278793 addi a5,a5,-46 # 80225000 <disk+0x2000> - 80207036: e398 sd a4,0(a5) + 8020737e: 0001e797 auipc a5,0x1e + 80207382: c8278793 addi a5,a5,-894 # 80225000 <disk+0x2000> + 80207386: e398 sd a4,0(a5) disk.avail = (uint16*)(((char*)disk.desc) + NUM*sizeof(struct VRingDesc)); - 80207038: 0001c717 auipc a4,0x1c - 8020703c: 04870713 addi a4,a4,72 # 80223080 <disk+0x80> - 80207040: e798 sd a4,8(a5) + 80207388: 0001c717 auipc a4,0x1c + 8020738c: cf870713 addi a4,a4,-776 # 80223080 <disk+0x80> + 80207390: e798 sd a4,8(a5) disk.used = (struct UsedArea *) (disk.pages + PGSIZE); - 80207042: 0001d717 auipc a4,0x1d - 80207046: fbe70713 addi a4,a4,-66 # 80224000 <disk+0x1000> - 8020704a: eb98 sd a4,16(a5) + 80207392: 0001d717 auipc a4,0x1d + 80207396: c6e70713 addi a4,a4,-914 # 80224000 <disk+0x1000> + 8020739a: eb98 sd a4,16(a5) disk.free[i] = 1; - 8020704c: 4705 li a4,1 - 8020704e: 00e78c23 sb a4,24(a5) - 80207052: 00e78ca3 sb a4,25(a5) - 80207056: 00e78d23 sb a4,26(a5) - 8020705a: 00e78da3 sb a4,27(a5) - 8020705e: 00e78e23 sb a4,28(a5) - 80207062: 00e78ea3 sb a4,29(a5) - 80207066: 00e78f23 sb a4,30(a5) - 8020706a: 00e78fa3 sb a4,31(a5) -} - 8020706e: 60a2 ld ra,8(sp) - 80207070: 6402 ld s0,0(sp) - 80207072: 0141 addi sp,sp,16 - 80207074: 8082 ret + 8020739c: 4705 li a4,1 + 8020739e: 00e78c23 sb a4,24(a5) + 802073a2: 00e78ca3 sb a4,25(a5) + 802073a6: 00e78d23 sb a4,26(a5) + 802073aa: 00e78da3 sb a4,27(a5) + 802073ae: 00e78e23 sb a4,28(a5) + 802073b2: 00e78ea3 sb a4,29(a5) + 802073b6: 00e78f23 sb a4,30(a5) + 802073ba: 00e78fa3 sb a4,31(a5) +} + 802073be: 60a2 ld ra,8(sp) + 802073c0: 6402 ld s0,0(sp) + 802073c2: 0141 addi sp,sp,16 + 802073c4: 8082 ret panic("could not find virtio disk"); - 80207076: 00003517 auipc a0,0x3 - 8020707a: cba50513 addi a0,a0,-838 # 80209d30 <digits+0x9b0> - 8020707e: ffff9097 auipc ra,0xffff9 - 80207082: 0c6080e7 jalr 198(ra) # 80200144 <panic> + 802073c6: 00003517 auipc a0,0x3 + 802073ca: 9a250513 addi a0,a0,-1630 # 80209d68 <digits+0x9e8> + 802073ce: ffff9097 auipc ra,0xffff9 + 802073d2: d76080e7 jalr -650(ra) # 80200144 <panic> panic("virtio disk has no queue 0"); - 80207086: 00003517 auipc a0,0x3 - 8020708a: cca50513 addi a0,a0,-822 # 80209d50 <digits+0x9d0> - 8020708e: ffff9097 auipc ra,0xffff9 - 80207092: 0b6080e7 jalr 182(ra) # 80200144 <panic> + 802073d6: 00003517 auipc a0,0x3 + 802073da: 9b250513 addi a0,a0,-1614 # 80209d88 <digits+0xa08> + 802073de: ffff9097 auipc ra,0xffff9 + 802073e2: d66080e7 jalr -666(ra) # 80200144 <panic> panic("virtio disk max queue too short"); - 80207096: 00003517 auipc a0,0x3 - 8020709a: cda50513 addi a0,a0,-806 # 80209d70 <digits+0x9f0> - 8020709e: ffff9097 auipc ra,0xffff9 - 802070a2: 0a6080e7 jalr 166(ra) # 80200144 <panic> + 802073e6: 00003517 auipc a0,0x3 + 802073ea: 9c250513 addi a0,a0,-1598 # 80209da8 <digits+0xa28> + 802073ee: ffff9097 auipc ra,0xffff9 + 802073f2: d56080e7 jalr -682(ra) # 80200144 <panic> -00000000802070a6 <virtio_disk_rw>: +00000000802073f6 <virtio_disk_rw>: return 0; } void virtio_disk_rw(struct buf *b, int write) { - 802070a6: 7175 addi sp,sp,-144 - 802070a8: e506 sd ra,136(sp) - 802070aa: e122 sd s0,128(sp) - 802070ac: fca6 sd s1,120(sp) - 802070ae: f8ca sd s2,112(sp) - 802070b0: f4ce sd s3,104(sp) - 802070b2: f0d2 sd s4,96(sp) - 802070b4: ecd6 sd s5,88(sp) - 802070b6: e8da sd s6,80(sp) - 802070b8: e4de sd s7,72(sp) - 802070ba: e0e2 sd s8,64(sp) - 802070bc: fc66 sd s9,56(sp) - 802070be: f86a sd s10,48(sp) - 802070c0: f46e sd s11,40(sp) - 802070c2: 0900 addi s0,sp,144 - 802070c4: 8aaa mv s5,a0 - 802070c6: 8cae mv s9,a1 + 802073f6: 7175 addi sp,sp,-144 + 802073f8: e506 sd ra,136(sp) + 802073fa: e122 sd s0,128(sp) + 802073fc: fca6 sd s1,120(sp) + 802073fe: f8ca sd s2,112(sp) + 80207400: f4ce sd s3,104(sp) + 80207402: f0d2 sd s4,96(sp) + 80207404: ecd6 sd s5,88(sp) + 80207406: e8da sd s6,80(sp) + 80207408: e4de sd s7,72(sp) + 8020740a: e0e2 sd s8,64(sp) + 8020740c: fc66 sd s9,56(sp) + 8020740e: f86a sd s10,48(sp) + 80207410: f46e sd s11,40(sp) + 80207412: 0900 addi s0,sp,144 + 80207414: 8aaa mv s5,a0 + 80207416: 8cae mv s9,a1 uint64 sector = b->sectorno; - 802070c8: 00c56d03 lwu s10,12(a0) + 80207418: 00c56d03 lwu s10,12(a0) acquire(&disk.vdisk_lock); - 802070cc: 0001e517 auipc a0,0x1e - 802070d0: fdc50513 addi a0,a0,-36 # 802250a8 <disk+0x20a8> - 802070d4: ffff9097 auipc ra,0xffff9 - 802070d8: 5f2080e7 jalr 1522(ra) # 802006c6 <acquire> + 8020741c: 0001e517 auipc a0,0x1e + 80207420: c8c50513 addi a0,a0,-884 # 802250a8 <disk+0x20a8> + 80207424: ffff9097 auipc ra,0xffff9 + 80207428: 2a2080e7 jalr 674(ra) # 802006c6 <acquire> for(int i = 0; i < 3; i++){ - 802070dc: 4981 li s3,0 + 8020742c: 4981 li s3,0 for(int i = 0; i < NUM; i++){ - 802070de: 44a1 li s1,8 + 8020742e: 44a1 li s1,8 disk.free[i] = 0; - 802070e0: 0001cc17 auipc s8,0x1c - 802070e4: f20c0c13 addi s8,s8,-224 # 80223000 <disk> - 802070e8: 6b89 lui s7,0x2 + 80207430: 0001cc17 auipc s8,0x1c + 80207434: bd0c0c13 addi s8,s8,-1072 # 80223000 <disk> + 80207438: 6b89 lui s7,0x2 for(int i = 0; i < 3; i++){ - 802070ea: 4b0d li s6,3 - 802070ec: a0ad j 80207156 <virtio_disk_rw+0xb0> + 8020743a: 4b0d li s6,3 + 8020743c: a0ad j 802074a6 <virtio_disk_rw+0xb0> disk.free[i] = 0; - 802070ee: 00fc0733 add a4,s8,a5 - 802070f2: 975e add a4,a4,s7 - 802070f4: 00070c23 sb zero,24(a4) + 8020743e: 00fc0733 add a4,s8,a5 + 80207442: 975e add a4,a4,s7 + 80207444: 00070c23 sb zero,24(a4) idx[i] = alloc_desc(); - 802070f8: c19c sw a5,0(a1) + 80207448: c19c sw a5,0(a1) if(idx[i] < 0){ - 802070fa: 0207c563 bltz a5,80207124 <virtio_disk_rw+0x7e> + 8020744a: 0207c563 bltz a5,80207474 <virtio_disk_rw+0x7e> for(int i = 0; i < 3; i++){ - 802070fe: 2905 addiw s2,s2,1 - 80207100: 0611 addi a2,a2,4 # 2004 <_entry-0x801fdffc> - 80207102: 19690e63 beq s2,s6,8020729e <virtio_disk_rw+0x1f8> + 8020744e: 2905 addiw s2,s2,1 + 80207450: 0611 addi a2,a2,4 # 2004 <_entry-0x801fdffc> + 80207452: 19690e63 beq s2,s6,802075ee <virtio_disk_rw+0x1f8> idx[i] = alloc_desc(); - 80207106: 85b2 mv a1,a2 + 80207456: 85b2 mv a1,a2 for(int i = 0; i < NUM; i++){ - 80207108: 0001e717 auipc a4,0x1e - 8020710c: f1070713 addi a4,a4,-240 # 80225018 <disk+0x2018> - 80207110: 87ce mv a5,s3 + 80207458: 0001e717 auipc a4,0x1e + 8020745c: bc070713 addi a4,a4,-1088 # 80225018 <disk+0x2018> + 80207460: 87ce mv a5,s3 if(disk.free[i]){ - 80207112: 00074683 lbu a3,0(a4) - 80207116: fee1 bnez a3,802070ee <virtio_disk_rw+0x48> + 80207462: 00074683 lbu a3,0(a4) + 80207466: fee1 bnez a3,8020743e <virtio_disk_rw+0x48> for(int i = 0; i < NUM; i++){ - 80207118: 2785 addiw a5,a5,1 - 8020711a: 0705 addi a4,a4,1 - 8020711c: fe979be3 bne a5,s1,80207112 <virtio_disk_rw+0x6c> + 80207468: 2785 addiw a5,a5,1 + 8020746a: 0705 addi a4,a4,1 + 8020746c: fe979be3 bne a5,s1,80207462 <virtio_disk_rw+0x6c> idx[i] = alloc_desc(); - 80207120: 57fd li a5,-1 - 80207122: c19c sw a5,0(a1) + 80207470: 57fd li a5,-1 + 80207472: c19c sw a5,0(a1) for(int j = 0; j < i; j++) - 80207124: 01205d63 blez s2,8020713e <virtio_disk_rw+0x98> - 80207128: 8dce mv s11,s3 + 80207474: 01205d63 blez s2,8020748e <virtio_disk_rw+0x98> + 80207478: 8dce mv s11,s3 free_desc(idx[j]); - 8020712a: 000a2503 lw a0,0(s4) - 8020712e: 00000097 auipc ra,0x0 - 80207132: d72080e7 jalr -654(ra) # 80206ea0 <free_desc> + 8020747a: 000a2503 lw a0,0(s4) + 8020747e: 00000097 auipc ra,0x0 + 80207482: d72080e7 jalr -654(ra) # 802071f0 <free_desc> for(int j = 0; j < i; j++) - 80207136: 2d85 addiw s11,s11,1 - 80207138: 0a11 addi s4,s4,4 - 8020713a: ff2d98e3 bne s11,s2,8020712a <virtio_disk_rw+0x84> + 80207486: 2d85 addiw s11,s11,1 + 80207488: 0a11 addi s4,s4,4 + 8020748a: ff2d98e3 bne s11,s2,8020747a <virtio_disk_rw+0x84> int idx[3]; while(1){ if(alloc3_desc(idx) == 0) { break; } sleep(&disk.free[0], &disk.vdisk_lock); - 8020713e: 0001e597 auipc a1,0x1e - 80207142: f6a58593 addi a1,a1,-150 # 802250a8 <disk+0x20a8> - 80207146: 0001e517 auipc a0,0x1e - 8020714a: ed250513 addi a0,a0,-302 # 80225018 <disk+0x2018> - 8020714e: ffffb097 auipc ra,0xffffb - 80207152: 16e080e7 jalr 366(ra) # 802022bc <sleep> + 8020748e: 0001e597 auipc a1,0x1e + 80207492: c1a58593 addi a1,a1,-998 # 802250a8 <disk+0x20a8> + 80207496: 0001e517 auipc a0,0x1e + 8020749a: b8250513 addi a0,a0,-1150 # 80225018 <disk+0x2018> + 8020749e: ffffb097 auipc ra,0xffffb + 802074a2: e1e080e7 jalr -482(ra) # 802022bc <sleep> for(int i = 0; i < 3; i++){ - 80207156: f8040a13 addi s4,s0,-128 + 802074a6: f8040a13 addi s4,s0,-128 { - 8020715a: 8652 mv a2,s4 + 802074aa: 8652 mv a2,s4 for(int i = 0; i < 3; i++){ - 8020715c: 894e mv s2,s3 - 8020715e: b765 j 80207106 <virtio_disk_rw+0x60> + 802074ac: 894e mv s2,s3 + 802074ae: b765 j 80207456 <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 - 80207160: 0001e717 auipc a4,0x1e - 80207164: ea073703 ld a4,-352(a4) # 80225000 <disk+0x2000> - 80207168: 973e add a4,a4,a5 - 8020716a: 00071623 sh zero,12(a4) + 802074b0: 0001e717 auipc a4,0x1e + 802074b4: b5073703 ld a4,-1200(a4) # 80225000 <disk+0x2000> + 802074b8: 973e add a4,a4,a5 + 802074ba: 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; - 8020716e: 0001c517 auipc a0,0x1c - 80207172: e9250513 addi a0,a0,-366 # 80223000 <disk> - 80207176: 0001e717 auipc a4,0x1e - 8020717a: e8a70713 addi a4,a4,-374 # 80225000 <disk+0x2000> - 8020717e: 6314 ld a3,0(a4) - 80207180: 96be add a3,a3,a5 - 80207182: 00c6d603 lhu a2,12(a3) - 80207186: 00166613 ori a2,a2,1 - 8020718a: 00c69623 sh a2,12(a3) + 802074be: 0001c517 auipc a0,0x1c + 802074c2: b4250513 addi a0,a0,-1214 # 80223000 <disk> + 802074c6: 0001e717 auipc a4,0x1e + 802074ca: b3a70713 addi a4,a4,-1222 # 80225000 <disk+0x2000> + 802074ce: 6314 ld a3,0(a4) + 802074d0: 96be add a3,a3,a5 + 802074d2: 00c6d603 lhu a2,12(a3) + 802074d6: 00166613 ori a2,a2,1 + 802074da: 00c69623 sh a2,12(a3) disk.desc[idx[1]].next = idx[2]; - 8020718e: f8842683 lw a3,-120(s0) - 80207192: 6310 ld a2,0(a4) - 80207194: 97b2 add a5,a5,a2 - 80207196: 00d79723 sh a3,14(a5) + 802074de: f8842683 lw a3,-120(s0) + 802074e2: 6310 ld a2,0(a4) + 802074e4: 97b2 add a5,a5,a2 + 802074e6: 00d79723 sh a3,14(a5) disk.info[idx[0]].status = 0; - 8020719a: 20048613 addi a2,s1,512 - 8020719e: 0612 slli a2,a2,0x4 - 802071a0: 962a add a2,a2,a0 - 802071a2: 02060823 sb zero,48(a2) + 802074ea: 20048613 addi a2,s1,512 + 802074ee: 0612 slli a2,a2,0x4 + 802074f0: 962a add a2,a2,a0 + 802074f2: 02060823 sb zero,48(a2) disk.desc[idx[2]].addr = (uint64) &disk.info[idx[0]].status; - 802071a6: 00469793 slli a5,a3,0x4 - 802071aa: 630c ld a1,0(a4) - 802071ac: 95be add a1,a1,a5 - 802071ae: 6689 lui a3,0x2 - 802071b0: 03068693 addi a3,a3,48 # 2030 <_entry-0x801fdfd0> - 802071b4: 96ca add a3,a3,s2 - 802071b6: 96aa add a3,a3,a0 - 802071b8: e194 sd a3,0(a1) + 802074f6: 00469793 slli a5,a3,0x4 + 802074fa: 630c ld a1,0(a4) + 802074fc: 95be add a1,a1,a5 + 802074fe: 6689 lui a3,0x2 + 80207500: 03068693 addi a3,a3,48 # 2030 <_entry-0x801fdfd0> + 80207504: 96ca add a3,a3,s2 + 80207506: 96aa add a3,a3,a0 + 80207508: e194 sd a3,0(a1) disk.desc[idx[2]].len = 1; - 802071ba: 6314 ld a3,0(a4) - 802071bc: 96be add a3,a3,a5 - 802071be: 4585 li a1,1 - 802071c0: c68c sw a1,8(a3) + 8020750a: 6314 ld a3,0(a4) + 8020750c: 96be add a3,a3,a5 + 8020750e: 4585 li a1,1 + 80207510: c68c sw a1,8(a3) disk.desc[idx[2]].flags = VRING_DESC_F_WRITE; // device writes the status - 802071c2: 6314 ld a3,0(a4) - 802071c4: 96be add a3,a3,a5 - 802071c6: 4509 li a0,2 - 802071c8: 00a69623 sh a0,12(a3) + 80207512: 6314 ld a3,0(a4) + 80207514: 96be add a3,a3,a5 + 80207516: 4509 li a0,2 + 80207518: 00a69623 sh a0,12(a3) disk.desc[idx[2]].next = 0; - 802071cc: 6314 ld a3,0(a4) - 802071ce: 97b6 add a5,a5,a3 - 802071d0: 00079723 sh zero,14(a5) + 8020751c: 6314 ld a3,0(a4) + 8020751e: 97b6 add a5,a5,a3 + 80207520: 00079723 sh zero,14(a5) // record struct buf for virtio_disk_intr(). b->disk = 1; - 802071d4: 00baa223 sw a1,4(s5) + 80207524: 00baa223 sw a1,4(s5) disk.info[idx[0]].b = b; - 802071d8: 03563423 sd s5,40(a2) + 80207528: 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]; - 802071dc: 6714 ld a3,8(a4) - 802071de: 0026d783 lhu a5,2(a3) - 802071e2: 8b9d andi a5,a5,7 - 802071e4: 0789 addi a5,a5,2 - 802071e6: 0786 slli a5,a5,0x1 - 802071e8: 96be add a3,a3,a5 - 802071ea: 00969023 sh s1,0(a3) + 8020752c: 6714 ld a3,8(a4) + 8020752e: 0026d783 lhu a5,2(a3) + 80207532: 8b9d andi a5,a5,7 + 80207534: 0789 addi a5,a5,2 + 80207536: 0786 slli a5,a5,0x1 + 80207538: 96be add a3,a3,a5 + 8020753a: 00969023 sh s1,0(a3) __sync_synchronize(); - 802071ee: 0ff0000f fence + 8020753e: 0ff0000f fence disk.avail[1] = disk.avail[1] + 1; - 802071f2: 6718 ld a4,8(a4) - 802071f4: 00275783 lhu a5,2(a4) - 802071f8: 2785 addiw a5,a5,1 - 802071fa: 00f71123 sh a5,2(a4) + 80207542: 6718 ld a4,8(a4) + 80207544: 00275783 lhu a5,2(a4) + 80207548: 2785 addiw a5,a5,1 + 8020754a: 00f71123 sh a5,2(a4) *R(VIRTIO_MMIO_QUEUE_NOTIFY) = 0; // value is queue number - 802071fe: 00003797 auipc a5,0x3 - 80207202: c027b783 ld a5,-1022(a5) # 80209e00 <digits+0xa80> - 80207206: 0007a023 sw zero,0(a5) + 8020754e: 00003797 auipc a5,0x3 + 80207552: 8ea7b783 ld a5,-1814(a5) # 80209e38 <digits+0xab8> + 80207556: 0007a023 sw zero,0(a5) // Wait for virtio_disk_intr() to say request has finished. while(b->disk == 1) { - 8020720a: 004aa783 lw a5,4(s5) - 8020720e: 02b79163 bne a5,a1,80207230 <virtio_disk_rw+0x18a> + 8020755a: 004aa783 lw a5,4(s5) + 8020755e: 02b79163 bne a5,a1,80207580 <virtio_disk_rw+0x18a> sleep(b, &disk.vdisk_lock); - 80207212: 0001e917 auipc s2,0x1e - 80207216: e9690913 addi s2,s2,-362 # 802250a8 <disk+0x20a8> + 80207562: 0001e917 auipc s2,0x1e + 80207566: b4690913 addi s2,s2,-1210 # 802250a8 <disk+0x20a8> while(b->disk == 1) { - 8020721a: 4485 li s1,1 + 8020756a: 4485 li s1,1 sleep(b, &disk.vdisk_lock); - 8020721c: 85ca mv a1,s2 - 8020721e: 8556 mv a0,s5 - 80207220: ffffb097 auipc ra,0xffffb - 80207224: 09c080e7 jalr 156(ra) # 802022bc <sleep> + 8020756c: 85ca mv a1,s2 + 8020756e: 8556 mv a0,s5 + 80207570: ffffb097 auipc ra,0xffffb + 80207574: d4c080e7 jalr -692(ra) # 802022bc <sleep> while(b->disk == 1) { - 80207228: 004aa783 lw a5,4(s5) - 8020722c: fe9788e3 beq a5,s1,8020721c <virtio_disk_rw+0x176> + 80207578: 004aa783 lw a5,4(s5) + 8020757c: fe9788e3 beq a5,s1,8020756c <virtio_disk_rw+0x176> } disk.info[idx[0]].b = 0; - 80207230: f8042483 lw s1,-128(s0) - 80207234: 20048713 addi a4,s1,512 - 80207238: 0712 slli a4,a4,0x4 - 8020723a: 0001c797 auipc a5,0x1c - 8020723e: dc678793 addi a5,a5,-570 # 80223000 <disk> - 80207242: 97ba add a5,a5,a4 - 80207244: 0207b423 sd zero,40(a5) + 80207580: f8042483 lw s1,-128(s0) + 80207584: 20048713 addi a4,s1,512 + 80207588: 0712 slli a4,a4,0x4 + 8020758a: 0001c797 auipc a5,0x1c + 8020758e: a7678793 addi a5,a5,-1418 # 80223000 <disk> + 80207592: 97ba add a5,a5,a4 + 80207594: 0207b423 sd zero,40(a5) if(disk.desc[i].flags & VRING_DESC_F_NEXT) - 80207248: 0001e917 auipc s2,0x1e - 8020724c: db890913 addi s2,s2,-584 # 80225000 <disk+0x2000> - 80207250: a019 j 80207256 <virtio_disk_rw+0x1b0> + 80207598: 0001e917 auipc s2,0x1e + 8020759c: a6890913 addi s2,s2,-1432 # 80225000 <disk+0x2000> + 802075a0: a019 j 802075a6 <virtio_disk_rw+0x1b0> i = disk.desc[i].next; - 80207252: 00e7d483 lhu s1,14(a5) + 802075a2: 00e7d483 lhu s1,14(a5) free_desc(i); - 80207256: 8526 mv a0,s1 - 80207258: 00000097 auipc ra,0x0 - 8020725c: c48080e7 jalr -952(ra) # 80206ea0 <free_desc> + 802075a6: 8526 mv a0,s1 + 802075a8: 00000097 auipc ra,0x0 + 802075ac: c48080e7 jalr -952(ra) # 802071f0 <free_desc> if(disk.desc[i].flags & VRING_DESC_F_NEXT) - 80207260: 0492 slli s1,s1,0x4 - 80207262: 00093783 ld a5,0(s2) - 80207266: 97a6 add a5,a5,s1 - 80207268: 00c7d703 lhu a4,12(a5) - 8020726c: 8b05 andi a4,a4,1 - 8020726e: f375 bnez a4,80207252 <virtio_disk_rw+0x1ac> + 802075b0: 0492 slli s1,s1,0x4 + 802075b2: 00093783 ld a5,0(s2) + 802075b6: 97a6 add a5,a5,s1 + 802075b8: 00c7d703 lhu a4,12(a5) + 802075bc: 8b05 andi a4,a4,1 + 802075be: f375 bnez a4,802075a2 <virtio_disk_rw+0x1ac> free_chain(idx[0]); release(&disk.vdisk_lock); - 80207270: 0001e517 auipc a0,0x1e - 80207274: e3850513 addi a0,a0,-456 # 802250a8 <disk+0x20a8> - 80207278: ffff9097 auipc ra,0xffff9 - 8020727c: 4a2080e7 jalr 1186(ra) # 8020071a <release> -} - 80207280: 60aa ld ra,136(sp) - 80207282: 640a ld s0,128(sp) - 80207284: 74e6 ld s1,120(sp) - 80207286: 7946 ld s2,112(sp) - 80207288: 79a6 ld s3,104(sp) - 8020728a: 7a06 ld s4,96(sp) - 8020728c: 6ae6 ld s5,88(sp) - 8020728e: 6b46 ld s6,80(sp) - 80207290: 6ba6 ld s7,72(sp) - 80207292: 6c06 ld s8,64(sp) - 80207294: 7ce2 ld s9,56(sp) - 80207296: 7d42 ld s10,48(sp) - 80207298: 7da2 ld s11,40(sp) - 8020729a: 6149 addi sp,sp,144 - 8020729c: 8082 ret + 802075c0: 0001e517 auipc a0,0x1e + 802075c4: ae850513 addi a0,a0,-1304 # 802250a8 <disk+0x20a8> + 802075c8: ffff9097 auipc ra,0xffff9 + 802075cc: 152080e7 jalr 338(ra) # 8020071a <release> +} + 802075d0: 60aa ld ra,136(sp) + 802075d2: 640a ld s0,128(sp) + 802075d4: 74e6 ld s1,120(sp) + 802075d6: 7946 ld s2,112(sp) + 802075d8: 79a6 ld s3,104(sp) + 802075da: 7a06 ld s4,96(sp) + 802075dc: 6ae6 ld s5,88(sp) + 802075de: 6b46 ld s6,80(sp) + 802075e0: 6ba6 ld s7,72(sp) + 802075e2: 6c06 ld s8,64(sp) + 802075e4: 7ce2 ld s9,56(sp) + 802075e6: 7d42 ld s10,48(sp) + 802075e8: 7da2 ld s11,40(sp) + 802075ea: 6149 addi sp,sp,144 + 802075ec: 8082 ret if(write) - 8020729e: 019037b3 snez a5,s9 - 802072a2: f6f42823 sw a5,-144(s0) + 802075ee: 019037b3 snez a5,s9 + 802075f2: f6f42823 sw a5,-144(s0) buf0.reserved = 0; - 802072a6: f6042a23 sw zero,-140(s0) + 802075f6: f6042a23 sw zero,-140(s0) buf0.sector = sector; - 802072aa: f7a43c23 sd s10,-136(s0) + 802075fa: f7a43c23 sd s10,-136(s0) disk.desc[idx[0]].addr = (uint64) kwalkaddr(myproc()->kpagetable, (uint64) &buf0); - 802072ae: ffffa097 auipc ra,0xffffa - 802072b2: 78e080e7 jalr 1934(ra) # 80201a3c <myproc> - 802072b6: f8042483 lw s1,-128(s0) - 802072ba: 00449913 slli s2,s1,0x4 - 802072be: 0001e997 auipc s3,0x1e - 802072c2: d4298993 addi s3,s3,-702 # 80225000 <disk+0x2000> - 802072c6: 0009ba03 ld s4,0(s3) - 802072ca: 9a4a add s4,s4,s2 - 802072cc: f7040593 addi a1,s0,-144 - 802072d0: 6d28 ld a0,88(a0) - 802072d2: ffffa097 auipc ra,0xffffa - 802072d6: 91e080e7 jalr -1762(ra) # 80200bf0 <kwalkaddr> - 802072da: 00aa3023 sd a0,0(s4) + 802075fe: ffffa097 auipc ra,0xffffa + 80207602: 43e080e7 jalr 1086(ra) # 80201a3c <myproc> + 80207606: f8042483 lw s1,-128(s0) + 8020760a: 00449913 slli s2,s1,0x4 + 8020760e: 0001e997 auipc s3,0x1e + 80207612: 9f298993 addi s3,s3,-1550 # 80225000 <disk+0x2000> + 80207616: 0009ba03 ld s4,0(s3) + 8020761a: 9a4a add s4,s4,s2 + 8020761c: f7040593 addi a1,s0,-144 + 80207620: 6d28 ld a0,88(a0) + 80207622: ffff9097 auipc ra,0xffff9 + 80207626: 5ce080e7 jalr 1486(ra) # 80200bf0 <kwalkaddr> + 8020762a: 00aa3023 sd a0,0(s4) disk.desc[idx[0]].len = sizeof(buf0); - 802072de: 0009b783 ld a5,0(s3) - 802072e2: 97ca add a5,a5,s2 - 802072e4: 4741 li a4,16 - 802072e6: c798 sw a4,8(a5) + 8020762e: 0009b783 ld a5,0(s3) + 80207632: 97ca add a5,a5,s2 + 80207634: 4741 li a4,16 + 80207636: c798 sw a4,8(a5) disk.desc[idx[0]].flags = VRING_DESC_F_NEXT; - 802072e8: 0009b783 ld a5,0(s3) - 802072ec: 97ca add a5,a5,s2 - 802072ee: 4705 li a4,1 - 802072f0: 00e79623 sh a4,12(a5) + 80207638: 0009b783 ld a5,0(s3) + 8020763c: 97ca add a5,a5,s2 + 8020763e: 4705 li a4,1 + 80207640: 00e79623 sh a4,12(a5) disk.desc[idx[0]].next = idx[1]; - 802072f4: f8442783 lw a5,-124(s0) - 802072f8: 0009b703 ld a4,0(s3) - 802072fc: 974a add a4,a4,s2 - 802072fe: 00f71723 sh a5,14(a4) + 80207644: f8442783 lw a5,-124(s0) + 80207648: 0009b703 ld a4,0(s3) + 8020764c: 974a add a4,a4,s2 + 8020764e: 00f71723 sh a5,14(a4) disk.desc[idx[1]].addr = (uint64) b->data; - 80207302: 0792 slli a5,a5,0x4 - 80207304: 0009b703 ld a4,0(s3) - 80207308: 973e add a4,a4,a5 - 8020730a: 058a8693 addi a3,s5,88 - 8020730e: e314 sd a3,0(a4) + 80207652: 0792 slli a5,a5,0x4 + 80207654: 0009b703 ld a4,0(s3) + 80207658: 973e add a4,a4,a5 + 8020765a: 058a8693 addi a3,s5,88 + 8020765e: e314 sd a3,0(a4) disk.desc[idx[1]].len = BSIZE; - 80207310: 0009b703 ld a4,0(s3) - 80207314: 973e add a4,a4,a5 - 80207316: 20000693 li a3,512 - 8020731a: c714 sw a3,8(a4) + 80207660: 0009b703 ld a4,0(s3) + 80207664: 973e add a4,a4,a5 + 80207666: 20000693 li a3,512 + 8020766a: c714 sw a3,8(a4) if(write) - 8020731c: e40c92e3 bnez s9,80207160 <virtio_disk_rw+0xba> + 8020766c: e40c92e3 bnez s9,802074b0 <virtio_disk_rw+0xba> disk.desc[idx[1]].flags = VRING_DESC_F_WRITE; // device writes b->data - 80207320: 0001e717 auipc a4,0x1e - 80207324: ce073703 ld a4,-800(a4) # 80225000 <disk+0x2000> - 80207328: 973e add a4,a4,a5 - 8020732a: 4689 li a3,2 - 8020732c: 00d71623 sh a3,12(a4) - 80207330: bd3d j 8020716e <virtio_disk_rw+0xc8> + 80207670: 0001e717 auipc a4,0x1e + 80207674: 99073703 ld a4,-1648(a4) # 80225000 <disk+0x2000> + 80207678: 973e add a4,a4,a5 + 8020767a: 4689 li a3,2 + 8020767c: 00d71623 sh a3,12(a4) + 80207680: bd3d j 802074be <virtio_disk_rw+0xc8> -0000000080207332 <virtio_disk_intr>: +0000000080207682 <virtio_disk_intr>: void virtio_disk_intr() { - 80207332: 1101 addi sp,sp,-32 - 80207334: ec06 sd ra,24(sp) - 80207336: e822 sd s0,16(sp) - 80207338: e426 sd s1,8(sp) - 8020733a: e04a sd s2,0(sp) - 8020733c: 1000 addi s0,sp,32 + 80207682: 1101 addi sp,sp,-32 + 80207684: ec06 sd ra,24(sp) + 80207686: e822 sd s0,16(sp) + 80207688: e426 sd s1,8(sp) + 8020768a: e04a sd s2,0(sp) + 8020768c: 1000 addi s0,sp,32 acquire(&disk.vdisk_lock); - 8020733e: 0001e517 auipc a0,0x1e - 80207342: d6a50513 addi a0,a0,-662 # 802250a8 <disk+0x20a8> - 80207346: ffff9097 auipc ra,0xffff9 - 8020734a: 380080e7 jalr 896(ra) # 802006c6 <acquire> + 8020768e: 0001e517 auipc a0,0x1e + 80207692: a1a50513 addi a0,a0,-1510 # 802250a8 <disk+0x20a8> + 80207696: ffff9097 auipc ra,0xffff9 + 8020769a: 030080e7 jalr 48(ra) # 802006c6 <acquire> while((disk.used_idx % NUM) != (disk.used->id % NUM)){ - 8020734e: 0001e717 auipc a4,0x1e - 80207352: cb270713 addi a4,a4,-846 # 80225000 <disk+0x2000> - 80207356: 02075783 lhu a5,32(a4) - 8020735a: 6b18 ld a4,16(a4) - 8020735c: 00275683 lhu a3,2(a4) - 80207360: 8ebd xor a3,a3,a5 - 80207362: 8a9d andi a3,a3,7 - 80207364: cab9 beqz a3,802073ba <virtio_disk_intr+0x88> + 8020769e: 0001e717 auipc a4,0x1e + 802076a2: 96270713 addi a4,a4,-1694 # 80225000 <disk+0x2000> + 802076a6: 02075783 lhu a5,32(a4) + 802076aa: 6b18 ld a4,16(a4) + 802076ac: 00275683 lhu a3,2(a4) + 802076b0: 8ebd xor a3,a3,a5 + 802076b2: 8a9d andi a3,a3,7 + 802076b4: cab9 beqz a3,8020770a <virtio_disk_intr+0x88> int id = disk.used->elems[disk.used_idx].id; if(disk.info[id].status != 0) - 80207366: 0001c917 auipc s2,0x1c - 8020736a: c9a90913 addi s2,s2,-870 # 80223000 <disk> + 802076b6: 0001c917 auipc s2,0x1c + 802076ba: 94a90913 addi s2,s2,-1718 # 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; - 8020736e: 0001e497 auipc s1,0x1e - 80207372: c9248493 addi s1,s1,-878 # 80225000 <disk+0x2000> + 802076be: 0001e497 auipc s1,0x1e + 802076c2: 94248493 addi s1,s1,-1726 # 80225000 <disk+0x2000> int id = disk.used->elems[disk.used_idx].id; - 80207376: 078e slli a5,a5,0x3 - 80207378: 973e add a4,a4,a5 - 8020737a: 435c lw a5,4(a4) + 802076c6: 078e slli a5,a5,0x3 + 802076c8: 973e add a4,a4,a5 + 802076ca: 435c lw a5,4(a4) if(disk.info[id].status != 0) - 8020737c: 20078713 addi a4,a5,512 - 80207380: 0712 slli a4,a4,0x4 - 80207382: 974a add a4,a4,s2 - 80207384: 03074703 lbu a4,48(a4) - 80207388: e335 bnez a4,802073ec <virtio_disk_intr+0xba> + 802076cc: 20078713 addi a4,a5,512 + 802076d0: 0712 slli a4,a4,0x4 + 802076d2: 974a add a4,a4,s2 + 802076d4: 03074703 lbu a4,48(a4) + 802076d8: e335 bnez a4,8020773c <virtio_disk_intr+0xba> disk.info[id].b->disk = 0; // disk is done with buf - 8020738a: 20078793 addi a5,a5,512 - 8020738e: 0792 slli a5,a5,0x4 - 80207390: 97ca add a5,a5,s2 - 80207392: 7798 ld a4,40(a5) - 80207394: 00072223 sw zero,4(a4) + 802076da: 20078793 addi a5,a5,512 + 802076de: 0792 slli a5,a5,0x4 + 802076e0: 97ca add a5,a5,s2 + 802076e2: 7798 ld a4,40(a5) + 802076e4: 00072223 sw zero,4(a4) wakeup(disk.info[id].b); - 80207398: 7788 ld a0,40(a5) - 8020739a: ffffb097 auipc ra,0xffffb - 8020739e: 09e080e7 jalr 158(ra) # 80202438 <wakeup> + 802076e8: 7788 ld a0,40(a5) + 802076ea: ffffb097 auipc ra,0xffffb + 802076ee: d4e080e7 jalr -690(ra) # 80202438 <wakeup> disk.used_idx = (disk.used_idx + 1) % NUM; - 802073a2: 0204d783 lhu a5,32(s1) - 802073a6: 2785 addiw a5,a5,1 - 802073a8: 8b9d andi a5,a5,7 - 802073aa: 02f49023 sh a5,32(s1) + 802076f2: 0204d783 lhu a5,32(s1) + 802076f6: 2785 addiw a5,a5,1 + 802076f8: 8b9d andi a5,a5,7 + 802076fa: 02f49023 sh a5,32(s1) while((disk.used_idx % NUM) != (disk.used->id % NUM)){ - 802073ae: 6898 ld a4,16(s1) - 802073b0: 00275683 lhu a3,2(a4) - 802073b4: 8a9d andi a3,a3,7 - 802073b6: fcf690e3 bne a3,a5,80207376 <virtio_disk_intr+0x44> + 802076fe: 6898 ld a4,16(s1) + 80207700: 00275683 lhu a3,2(a4) + 80207704: 8a9d andi a3,a3,7 + 80207706: fcf690e3 bne a3,a5,802076c6 <virtio_disk_intr+0x44> } *R(VIRTIO_MMIO_INTERRUPT_ACK) = *R(VIRTIO_MMIO_INTERRUPT_STATUS) & 0x3; - 802073ba: 00003797 auipc a5,0x3 - 802073be: a4e7b783 ld a5,-1458(a5) # 80209e08 <digits+0xa88> - 802073c2: 439c lw a5,0(a5) - 802073c4: 8b8d andi a5,a5,3 - 802073c6: 00003717 auipc a4,0x3 - 802073ca: a4a73703 ld a4,-1462(a4) # 80209e10 <digits+0xa90> - 802073ce: c31c sw a5,0(a4) + 8020770a: 00002797 auipc a5,0x2 + 8020770e: 7367b783 ld a5,1846(a5) # 80209e40 <digits+0xac0> + 80207712: 439c lw a5,0(a5) + 80207714: 8b8d andi a5,a5,3 + 80207716: 00002717 auipc a4,0x2 + 8020771a: 73273703 ld a4,1842(a4) # 80209e48 <digits+0xac8> + 8020771e: c31c sw a5,0(a4) release(&disk.vdisk_lock); - 802073d0: 0001e517 auipc a0,0x1e - 802073d4: cd850513 addi a0,a0,-808 # 802250a8 <disk+0x20a8> - 802073d8: ffff9097 auipc ra,0xffff9 - 802073dc: 342080e7 jalr 834(ra) # 8020071a <release> -} - 802073e0: 60e2 ld ra,24(sp) - 802073e2: 6442 ld s0,16(sp) - 802073e4: 64a2 ld s1,8(sp) - 802073e6: 6902 ld s2,0(sp) - 802073e8: 6105 addi sp,sp,32 - 802073ea: 8082 ret + 80207720: 0001e517 auipc a0,0x1e + 80207724: 98850513 addi a0,a0,-1656 # 802250a8 <disk+0x20a8> + 80207728: ffff9097 auipc ra,0xffff9 + 8020772c: ff2080e7 jalr -14(ra) # 8020071a <release> +} + 80207730: 60e2 ld ra,24(sp) + 80207732: 6442 ld s0,16(sp) + 80207734: 64a2 ld s1,8(sp) + 80207736: 6902 ld s2,0(sp) + 80207738: 6105 addi sp,sp,32 + 8020773a: 8082 ret panic("virtio_disk_intr status"); - 802073ec: 00003517 auipc a0,0x3 - 802073f0: 9a450513 addi a0,a0,-1628 # 80209d90 <digits+0xa10> - 802073f4: ffff9097 auipc ra,0xffff9 - 802073f8: d50080e7 jalr -688(ra) # 80200144 <panic> + 8020773c: 00002517 auipc a0,0x2 + 80207740: 68c50513 addi a0,a0,1676 # 80209dc8 <digits+0xa48> + 80207744: ffff9097 auipc ra,0xffff9 + 80207748: a00080e7 jalr -1536(ra) # 80200144 <panic> ... 0000000080208000 <_trampoline>: diff --git a/target/kernel.sym b/target/kernel.sym index 76dd84a..26384d2 100644 --- a/target/kernel.sym +++ b/target/kernel.sym @@ -1,8 +1,8 @@ 0000000080200000 .text 0000000080209000 .rodata 000000008020a000 .data -000000008020ba30 .got -000000008020ba90 .got.plt +000000008020bca0 .got +000000008020bd00 .got.plt 000000008020c000 .bss 0000000000000000 .riscv.attributes 0000000000000000 .comment @@ -37,9 +37,9 @@ 0000000000000000 swtch.o 0000000000000000 trap.c 0000000000000000 syscall.c -0000000080202c8c argraw +0000000080202ee0 argraw 000000008020ac38 syscalls -000000008020b328 sysnames +000000008020b460 sysnames 0000000000000000 sysproc.c 0000000000000000 bio.c 0000000000000000 sleeplock.c @@ -47,101 +47,106 @@ 0000000000000000 pipe.c 0000000000000000 exec.c 0000000000000000 sysfile.c -0000000080204322 argfd -000000008020438a fdalloc -00000000802043cc create +000000008020463e argfd +00000000802046a6 fdalloc +00000000802046e8 create 0000000000000000 kernelvec.o 0000000000000000 timer.c 0000000000000000 disk.c 0000000000000000 fat32.c -00000000802050ee read_fat -0000000080205164 alloc_clus -00000000802052a6 write_fat -0000000080205326 reloc_clus -000000008020542e rw_clus -000000008020557a eget +000000008020543e read_fat +00000000802054b4 alloc_clus +00000000802055f6 write_fat +0000000080205676 reloc_clus +000000008020577e rw_clus +00000000802058ca eget 000000008021e5b8 ecache -0000000080205688 read_entry_name -0000000080206870 lookup_path -000000008020ba18 illegal.1 -000000008020ba28 illegal.0 +00000000802059d8 read_entry_name +0000000080206bc0 lookup_path +000000008020bc88 illegal.1 +000000008020bc98 illegal.0 000000008021e428 fat 000000008021e450 root 0000000000000000 plic.c 0000000000000000 console.c 0000000000000000 virtio_disk.c -0000000080206ea0 free_desc +00000000802071f0 free_desc 0000000080223000 disk -000000008020ba30 _GLOBAL_OFFSET_TABLE_ -0000000080204bfe sys_remove -0000000080205fe0 edup +000000008020bca0 _GLOBAL_OFFSET_TABLE_ +0000000080204f1a sys_remove +0000000080206330 edup 0000000080200c68 mappages 00000000802014a4 copyinstr -0000000080206b62 consoleread +0000000080206eb2 consoleread 00000000802008b4 safestrcpy -0000000080204646 sys_close +0000000080204962 sys_close 0000000080202280 yield 0000000080214028 kmem 0000000080202512 either_copyout -0000000080204fee timerinit +000000008020533e timerinit 0000000080214180 proc 00000000802016cc proc_kpagetable -000000008020395c fileread +0000000080203c78 fileread 000000008020018e printf -000000008020310c sys_sbrk +0000000080203360 sys_sbrk +0000000080203624 sys_yield 0000000080208000 trampoline 0000000080214000 panicked -0000000080205c16 emake -0000000080206a7a plic_claim -0000000080204a22 sys_dev -0000000080206a20 plicinit -0000000080206aa4 plic_complete +0000000080205f66 emake +0000000080206dca plic_claim +0000000080204d3e sys_dev +0000000080206d70 plicinit +0000000080206df4 plic_complete 00000000802020aa sched 00000000802007be memmove -0000000080202e72 syscall -00000000802044f0 sys_dup3 +00000000802030c6 syscall +000000008020480c sys_dup3 0000000080201a10 cpuid -00000000802030c2 sys_fork +0000000080203316 sys_fork 0000000080218af0 bcache -0000000080204828 sys_mkdir -00000000802061d4 etrunc -0000000080206a38 plicinithart +0000000080204b44 sys_mkdir +0000000080206524 etrunc +0000000080206d88 plicinithart 0000000080201f5a reparent -0000000080205774 fat32_init -0000000080206a04 enameparent -0000000080202e42 argstr +0000000080205ac4 fat32_init +0000000080206d54 enameparent +0000000080203096 argstr 0000000080200f9e uvmdealloc +000000008020358e sys_clone 000000008020a000 sdata -00000000802037f0 filedup -0000000080203322 binit +0000000080203b0c filedup +000000008020363e binit 00000000802012b4 uvmclear -000000008020610a eremove -000000008020457a sys_read +000000008020645a eremove +0000000080204896 sys_read +000000008020527e sys_mount 0000000080200822 memcpy 0000000080200cf6 kvmmap 0000000080200440 kfree 0000000080201a20 mycpu -00000000802027a4 devintr -000000008020593a eread +00000000802029f8 devintr +0000000080205c8a eread 000000008020a004 nextpid -000000008020372e fileinit +0000000080203a4a fileinit 0000000080208090 userret 0000000080200682 initlock -0000000080205b5e formatname +0000000080205eae formatname 00000000802012e6 copyout 00000000802022bc sleep +000000008020528c sys_munmap 00000000802000b8 printstring -0000000080204f60 kernelvec -000000008020ba2f edata +00000000802052b0 kernelvec +000000008020bc9f edata 0000000080200988 wcsncmp -0000000080203258 sys_kill -0000000080203c8e pipeclose -0000000080204694 sys_fstat -0000000080206ad4 consolewrite +00000000802034ac sys_kill +0000000080203faa pipeclose +00000000802049b0 sys_fstat +0000000080206e24 consolewrite 0000000080209000 rodata_start -00000000802069e6 ename +0000000080206d36 ename 00000000802004c2 freerange -000000008020623e elock +000000008020529a sys_mmap +000000008020658e elock 0000000080200ae4 kvminithart 000000008020100a uvmalloc 0000000080200f14 uvminit @@ -150,61 +155,64 @@ 0000000080201bbc proc_freepagetable 0000000080201894 reg_info 0000000080201b20 proc_pagetable -00000000802031a8 sys_sleep +00000000802033fc sys_sleep 0000000080201672 kvmfree -000000008020508a disk_init -0000000080203aee dirnext -0000000080203786 filealloc +00000000802053da disk_init +0000000080203e0a dirnext +0000000080203aa2 filealloc 0000000080202438 wakeup -0000000080206f20 virtio_disk_init +0000000080207270 virtio_disk_init 0000000080201a3c myproc 0000000080200000 BASE_ADDRESS -0000000080204af4 sys_readdir +0000000080202660 wait4 +0000000080204e10 sys_readdir 0000000080200b08 walk -00000000802046e2 sys_open +00000000802049fe sys_open 00000000802000e4 backtrace -0000000080206cb8 consoleintr -0000000080206c7a consputc +0000000080207008 consoleintr +0000000080206fca consputc 00000000802024a2 kill 0000000080201ada allocpid 00000000802013c4 copyin 0000000080200910 wnstr 000000008020116c uvmfree 0000000080201372 copyout2 -0000000080203a1e filewrite +0000000080203d3a filewrite 0000000080200942 snstr -0000000080202dbe argint +0000000080203012 argint 0000000080209000 srodata 0000000080200e22 vmunmap -00000000802032ce sys_trace -0000000080203ee8 exec +0000000080203522 sys_times +000000008020353a sys_trace +0000000080204204 exec 0000000080209000 etext -00000000802045e0 sys_write +00000000802048fc sys_write 000000008020071a release -0000000080202d8e fetchstr +0000000080202fe2 fetchstr 000000008020233a wait -00000000802062c2 eput +0000000080206612 eput 0000000080214000 boot_stack_top -0000000080202706 usertrapret +000000008020295a usertrapret 0000000080201fc0 scheduler -0000000080205be8 cal_checksum +0000000080205f38 cal_checksum 0000000080208000 _trampoline 0000000080226000 kernel_end -00000000802065cc dirlookup -0000000080203842 fileclose -000000008020672a ealloc +000000008020691c dirlookup +00000000802035c0 sys_wait4 +0000000080203b5e fileclose +0000000080206a7a ealloc 0000000080200bf0 kwalkaddr 00000000802005c0 freemem_amount -0000000080202848 usertrap +0000000080202a9c usertrap 000000008020083a strncmp 000000008021e408 tickslock -0000000080203cfe pipewrite -00000000802050d6 disk_intr +000000008020401a pipewrite +0000000080205426 disk_intr 0000000080200876 strncpy 000000008021d450 ftable -0000000080207332 virtio_disk_intr -0000000080209e18 erodata -000000008020449e sys_dup +0000000080207682 virtio_disk_intr +0000000080209e50 erodata +00000000802047ba sys_dup 0000000080201452 copyin2 0000000080200144 panic 000000008020c000 bss_start @@ -212,88 +220,90 @@ 000000008020050e kinit 0000000080200784 memcmp 0000000080202548 either_copyin +0000000080205270 sys_umount 0000000080201e42 fork 0000000080214078 cpus -0000000080203694 releasesleep +00000000802039b0 releasesleep 0000000080200000 _entry 0000000080200698 holding 00000000802006c6 acquire 0000000080214000 sbss_clear 000000008020a008 initcode -00000000802026ca trapinithart +000000008020291e trapinithart 0000000080200762 memset -0000000080202de0 sys_test_proc +0000000080203034 sys_test_proc 00000000802009e4 main -000000008020363e acquiresleep +000000008020395a acquiresleep 0000000080208000 uservec 0000000080200d2e kvminit 00000000802015c4 kfreewalk -00000000802035c8 bunpin -0000000080202e20 argaddr +00000000802038e4 bunpin +0000000080203074 argaddr 0000000080200000 text_start -0000000080203306 sys_shutdown -0000000080203156 sys_brk -000000008020328a sys_uptime +0000000080203572 sys_shutdown +00000000802033aa sys_brk +00000000802034de sys_uptime 000000008020a000 data_start -0000000080204b42 sys_getcwd +0000000080204e5e sys_getcwd 000000008020036e printfinit 0000000080201732 vmprint 0000000080200ee6 uvmcreate -0000000080205a32 ewrite +0000000080205d82 ewrite 0000000080201dc6 growproc -00000000802036d8 holdingsleep +00000000802039f4 holdingsleep 0000000080201554 copyinstr2 0000000080201d4a userinit -00000000802033c2 bread -0000000080203e02 piperead +00000000802036de bread +000000008020411e piperead 00000000802003a0 print_logo 000000008021e420 ticks -0000000080206e4a consoleinit +000000008020719a consoleinit 0000000080200bae walkaddr -0000000080202a2e trapframedump +0000000080202c82 trapframedump 000000008020257c procdump -00000000802034ee brelse -0000000080202cf4 sys_sysinfo -0000000080205016 set_next_timeout -0000000080202f16 sys_exec +000000008020380a brelse +0000000080202f48 sys_sysinfo +0000000080205366 set_next_timeout +000000008020316a sys_exec 0000000080200c46 kvmpa -00000000802063fa estat -0000000080202660 swtch +000000008020674a estat +00000000802028b4 swtch 0000000080226000 ebss_clear 00000000802005d6 push_off -0000000080204d22 sys_rename +000000008020503e sys_rename 0000000080200622 pop_off -00000000802034b2 bwrite -000000008020503c timer_tick -00000000802050bc disk_write +00000000802037ce bwrite +000000008020538c timer_tick +000000008020540c disk_write 0000000080202180 exit 0000000080201100 freewalk -00000000802030da sys_wait -0000000080203058 sys_exit -0000000080203604 initsleeplock -0000000080206274 eunlock +000000008020332e sys_wait +00000000802032ac sys_exit +0000000080203920 initsleeplock +00000000802065c4 eunlock 0000000080214058 kernel_pagetable -00000000802070a6 virtio_disk_rw +00000000802073f6 virtio_disk_rw 00000000802008e6 strlen -00000000802050a2 disk_read -0000000080204916 sys_pipe +00000000802053f2 disk_read +0000000080204c32 sys_pipe +000000008020277c clone 000000008020c000 boot_stack 0000000080202630 procnum 00000000802009c0 strchr -0000000080206442 enext +0000000080206792 enext 0000000080201620 kvmfreeusr 0000000080222c20 cons 000000008020055a kalloc -0000000080202d3e fetchaddr +0000000080202f92 fetchaddr 000000008021d3b0 devsw -000000008020308c sys_getpid -0000000080203bb4 pipealloc -00000000802030a6 sys_getppid +00000000802032e0 sys_getpid +0000000080203ed0 pipealloc +00000000802032fa sys_getppid 0000000080200000 kernel_start -0000000080204882 sys_chdir -0000000080206024 eupdate -0000000080202940 kerneltrap -000000008020358c bpin +0000000080204b9e sys_chdir +0000000080206374 eupdate +0000000080202b94 kerneltrap +00000000802038a8 bpin 000000008020199a procinit -00000000802038f8 filestat +0000000080203c14 filestat 0000000080214060 pid_lock -- GitLab