From dbba25aa24f86c1f8c3a0589c82985840adc1b6b Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Wed, 31 Dec 2025 18:00:55 +0800 Subject: dev:Refactor Memory Management and Process Management --- build/src/kernel/mm/pmm.o | Bin 5128 -> 90424 bytes build/src/kernel/mm/slab.o | Bin 0 -> 67304 bytes build/src/kernel/mm/vm.o | Bin 135304 -> 213776 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 build/src/kernel/mm/slab.o (limited to 'build/src/kernel/mm') diff --git a/build/src/kernel/mm/pmm.o b/build/src/kernel/mm/pmm.o index 7065343..c77cdc9 100644 Binary files a/build/src/kernel/mm/pmm.o and b/build/src/kernel/mm/pmm.o differ diff --git a/build/src/kernel/mm/slab.o b/build/src/kernel/mm/slab.o new file mode 100644 index 0000000..23305aa Binary files /dev/null and b/build/src/kernel/mm/slab.o differ diff --git a/build/src/kernel/mm/vm.o b/build/src/kernel/mm/vm.o index 22cbbe3..2e3c0de 100644 Binary files a/build/src/kernel/mm/vm.o and b/build/src/kernel/mm/vm.o differ -- cgit v1.2.3 From 2dde56422dcfb94affee2baffc8d240ad16ad4b2 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Thu, 1 Jan 2026 15:04:47 +0800 Subject: dev(device): implement VirtIO See dev log for detail --- Makefile | 19 +- build/kernel.elf | Bin 156920 -> 184056 bytes build/src/drivers/plic.o | Bin 13800 -> 19656 bytes build/src/drivers/uart.o | Bin 57352 -> 92888 bytes build/src/drivers/virtio_dist.o | Bin 0 -> 93248 bytes build/src/kernel/initcode.o | Bin 2448 -> 3952 bytes build/src/kernel/main.o | Bin 17744 -> 19608 bytes build/src/kernel/mm/pmm.o | Bin 90424 -> 90424 bytes build/src/kernel/mm/slab.o | Bin 67304 -> 67664 bytes build/src/kernel/mm/vm.o | Bin 213776 -> 214608 bytes build/src/kernel/proc/proc.o | Bin 205000 -> 212272 bytes build/src/kernel/spinlock.o | Bin 99920 -> 99920 bytes build/src/kernel/syscall.o | Bin 47560 -> 61936 bytes build/src/kernel/trap/handler.o | Bin 66984 -> 70200 bytes build/user/entry.o | Bin 0 -> 3344 bytes build/user/init.o | Bin 45880 -> 112536 bytes build/user/initcode | Bin 1424 -> 2928 bytes build/user/initcode.asm | 1326 ++++++++++++++++++++++++++++----------- build/user/initcode.out | Bin 14168 -> 22440 bytes build/user/usys.o | Bin 5160 -> 5280 bytes docs/dev/dev_device.md | 23 + docs/dev/dev_memory.md | 37 ++ docs/dev/dev_memoty.md | 37 -- fs.img | Bin 0 -> 1048576 bytes include/drivers/plic.h | 2 +- include/drivers/uart.h | 26 +- include/drivers/virtio.h | 102 +++ include/kernel/proc.h | 2 + include/kernel/syscall.h | 1 + include/user/user.h | 3 +- src/drivers/plic.cc | 55 +- src/drivers/uart.cc | 226 +++++-- src/drivers/virtio_dist.cc | 338 ++++++++++ src/kernel/main.cc | 7 +- src/kernel/mm/pmm.cc | 67 -- src/kernel/mm/slab.cc | 11 +- src/kernel/mm/vm.cc | 3 +- src/kernel/proc/proc.cc | 33 +- src/kernel/syscall.cc | 53 +- src/kernel/trap/handler.cc | 13 +- src/user/entry.S | 12 + src/user/init.cc | 191 ++++-- src/user/usys.S | 3 +- 43 files changed, 1934 insertions(+), 656 deletions(-) create mode 100644 build/src/drivers/virtio_dist.o create mode 100644 build/user/entry.o create mode 100644 docs/dev/dev_device.md create mode 100644 docs/dev/dev_memory.md delete mode 100644 docs/dev/dev_memoty.md create mode 100644 fs.img create mode 100644 include/drivers/virtio.h create mode 100644 src/drivers/virtio_dist.cc create mode 100644 src/user/entry.S (limited to 'build/src/kernel/mm') diff --git a/Makefile b/Makefile index 7c3de2d..715fff8 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ CXXFLAGS := $(CFLAGS) -fno-exceptions -fno-rtti -fno-use-cxa-atexit LINKER_SCRIPT := linker.ld UPROGS_SRC := $(SRC_DIR)/user/init.cc -UPROGS_OBJ := $(BUILD_DIR)/user/init.o +UPROGS_OBJ := $(BUILD_DIR)/user/entry.o $(BUILD_DIR)/user/init.o ULIB_OBJ := $(BUILD_DIR)/user/usys.o USER_LD := $(SRC_DIR)/user/user.ld INITCODE_BIN := $(BUILD_DIR)/user/initcode @@ -24,6 +24,9 @@ OBJS := $(SRCS_S:%.S=$(BUILD_DIR)/%.o) $(SRCS_CXX:%.cc=$(BUILD_DIR)/%.o) TARGET := $(BUILD_DIR)/kernel.elf +QEMUOPTS = -drive file=fs.img,if=none,format=raw,id=x0 +QEMUOPTS += -device virtio-blk-device,drive=x0 -global virtio-mmio.force-legacy=false + .PHONY: all clean run debug all: $(TARGET) @@ -63,15 +66,19 @@ $(BUILD_DIR)/%.o: %.cc @echo " CXX $<" @$(CXX) $(CXXFLAGS) -c $< -o $@ -run: $(TARGET) +fs.img: + @echo " IMG Generating fs.img (1MB)" + @dd if=/dev/zero of=fs.img bs=1M count=1 2>/dev/null + +run: $(TARGET) fs.img @echo " QEMU Running..." @qemu-system-riscv64 -machine virt -nographic \ - -kernel $(TARGET) -m 128M + -kernel $(TARGET) -m 128M $(QEMUOPTS) -debug: $(TARGET) +debug: $(TARGET) fs.img @echo " QEMU (DEBUG) Waiting for GDB..." @qemu-system-riscv64 -machine virt -nographic \ - -kernel $(TARGET) -m 128M -s -S + -kernel $(TARGET) -m 128M -s -S $(QEMUOPTS) clean: - rm -rf $(BUILD_DIR) + rm -rf $(BUILD_DIR) fs.img diff --git a/build/kernel.elf b/build/kernel.elf index db7f94d..902f32b 100755 Binary files a/build/kernel.elf and b/build/kernel.elf differ diff --git a/build/src/drivers/plic.o b/build/src/drivers/plic.o index 846035b..cf2c85d 100644 Binary files a/build/src/drivers/plic.o and b/build/src/drivers/plic.o differ diff --git a/build/src/drivers/uart.o b/build/src/drivers/uart.o index 34a0840..e771c9f 100644 Binary files a/build/src/drivers/uart.o and b/build/src/drivers/uart.o differ diff --git a/build/src/drivers/virtio_dist.o b/build/src/drivers/virtio_dist.o new file mode 100644 index 0000000..cc608ca Binary files /dev/null and b/build/src/drivers/virtio_dist.o differ diff --git a/build/src/kernel/initcode.o b/build/src/kernel/initcode.o index e29dda3..a1c9bd8 100644 Binary files a/build/src/kernel/initcode.o and b/build/src/kernel/initcode.o differ diff --git a/build/src/kernel/main.o b/build/src/kernel/main.o index 54ee210..df27b46 100644 Binary files a/build/src/kernel/main.o and b/build/src/kernel/main.o differ diff --git a/build/src/kernel/mm/pmm.o b/build/src/kernel/mm/pmm.o index c77cdc9..db30140 100644 Binary files a/build/src/kernel/mm/pmm.o and b/build/src/kernel/mm/pmm.o differ diff --git a/build/src/kernel/mm/slab.o b/build/src/kernel/mm/slab.o index 23305aa..2d97ca1 100644 Binary files a/build/src/kernel/mm/slab.o and b/build/src/kernel/mm/slab.o differ diff --git a/build/src/kernel/mm/vm.o b/build/src/kernel/mm/vm.o index 2e3c0de..5d30dcd 100644 Binary files a/build/src/kernel/mm/vm.o and b/build/src/kernel/mm/vm.o differ diff --git a/build/src/kernel/proc/proc.o b/build/src/kernel/proc/proc.o index 63506e7..ad606f0 100644 Binary files a/build/src/kernel/proc/proc.o and b/build/src/kernel/proc/proc.o differ diff --git a/build/src/kernel/spinlock.o b/build/src/kernel/spinlock.o index f4a24bf..769f5e7 100644 Binary files a/build/src/kernel/spinlock.o and b/build/src/kernel/spinlock.o differ diff --git a/build/src/kernel/syscall.o b/build/src/kernel/syscall.o index a3df126..d398c30 100644 Binary files a/build/src/kernel/syscall.o and b/build/src/kernel/syscall.o differ diff --git a/build/src/kernel/trap/handler.o b/build/src/kernel/trap/handler.o index 43346a1..9949470 100644 Binary files a/build/src/kernel/trap/handler.o and b/build/src/kernel/trap/handler.o differ diff --git a/build/user/entry.o b/build/user/entry.o new file mode 100644 index 0000000..0130c78 Binary files /dev/null and b/build/user/entry.o differ diff --git a/build/user/init.o b/build/user/init.o index 13021f2..aea18f2 100644 Binary files a/build/user/init.o and b/build/user/init.o differ diff --git a/build/user/initcode b/build/user/initcode index 7d139ad..b6ac9a3 100755 Binary files a/build/user/initcode and b/build/user/initcode differ diff --git a/build/user/initcode.asm b/build/user/initcode.asm index c04fbab..1cb4088 100644 --- a/build/user/initcode.asm +++ b/build/user/initcode.asm @@ -4,482 +4,1050 @@ build/user/initcode.out: file format elf64-littleriscv Disassembly of section .text: -0000000000000000 <_Z6strlenPKc>: -#include "user/user.h" +0000000000000000 <_start>: +.section .text +.global _start + +_start: + li a0, 0 + 0: 4501 li a0,0 + li a1, 0 + 2: 4581 li a1,0 + + call main + 4: 578000ef jal 57c
+ + call exit + 8: 648000ef jal 650 + + c: a001 j c <_start+0xc> + +000000000000000e <_Z6strlenPKc>: +// ============================================================= int strlen(const char *s) { int n = 0; while (s[n]) - 0: 00054783 lbu a5,0(a0) - 4: cf81 beqz a5,1c <_Z6strlenPKc+0x1c> - 6: 0505 addi a0,a0,1 - 8: 87aa mv a5,a0 - a: 0007c703 lbu a4,0(a5) - e: 86be mv a3,a5 - 10: 0785 addi a5,a5,1 - 12: ff65 bnez a4,a <_Z6strlenPKc+0xa> + e: 00054783 lbu a5,0(a0) + 12: cf81 beqz a5,2a <_Z6strlenPKc+0x1c> + 14: 0505 addi a0,a0,1 + 16: 87aa mv a5,a0 + 18: 0007c703 lbu a4,0(a5) + 1c: 86be mv a3,a5 + 1e: 0785 addi a5,a5,1 + 20: ff65 bnez a4,18 <_Z6strlenPKc+0xa> n++; - 14: 40a6853b subw a0,a3,a0 - 18: 2505 addiw a0,a0,1 - 1a: 8082 ret + 22: 40a6853b subw a0,a3,a0 + 26: 2505 addiw a0,a0,1 + 28: 8082 ret int n = 0; - 1c: 4501 li a0,0 + 2a: 4501 li a0,0 return n; } - 1e: 8082 ret + 2c: 8082 ret -0000000000000020 <_Z5printPKc>: +000000000000002e <_Z5printPKc>: while (s[n]) - 20: 00054783 lbu a5,0(a0) + 2e: 00054783 lbu a5,0(a0) void print(const char *s) { - 24: 85aa mv a1,a0 - while (s[n]) - 26: cf89 beqz a5,40 <_Z5printPKc+0x20> - 28: 00150693 addi a3,a0,1 - 2c: 87b6 mv a5,a3 - 2e: 0007c703 lbu a4,0(a5) - 32: 863e mv a2,a5 - 34: 0785 addi a5,a5,1 - 36: ff65 bnez a4,2e <_Z5printPKc+0xe> + 32: 85aa mv a1,a0 + while (s[n]) + 34: cf89 beqz a5,4e <_Z5printPKc+0x20> + 36: 00150693 addi a3,a0,1 + 3a: 87b6 mv a5,a3 + 3c: 0007c703 lbu a4,0(a5) + 40: 863e mv a2,a5 + 42: 0785 addi a5,a5,1 + 44: ff65 bnez a4,3c <_Z5printPKc+0xe> n++; - 38: 9e15 subw a2,a2,a3 - 3a: 2605 addiw a2,a2,1 + 46: 9e15 subw a2,a2,a3 + 48: 2605 addiw a2,a2,1 write(1, s, strlen(s)); - 3c: 4505 li a0,1 - 3e: a491 j 282 + 4a: 4505 li a0,1 + 4c: a515 j 670 int n = 0; - 40: 4601 li a2,0 + 4e: 4601 li a2,0 write(1, s, strlen(s)); - 42: 4505 li a0,1 - 44: ac3d j 282 - -0000000000000046 <_Z9print_inti>: + 50: 4505 li a0,1 + 52: ad39 j 670 -void print_int(int val) +0000000000000054 <_Z9print_inti>: +void print_int(int n) { char buf[16]; int i = 0; - if (val == 0) - 46: c159 beqz a0,cc <_Z9print_inti+0x86> + int neg = 0; + if (n == 0) + 54: c149 beqz a0,d6 <_Z9print_inti+0x82> { - 48: 7139 addi sp,sp,-64 - 4a: f822 sd s0,48(sp) - 4c: fc06 sd ra,56(sp) - 4e: f426 sd s1,40(sp) - 50: f04a sd s2,32(sp) - 52: 842a mv s0,a0 + 56: 7179 addi sp,sp,-48 + 58: f406 sd ra,40(sp) + 5a: f022 sd s0,32(sp) + 5c: ec26 sd s1,24(sp) + int neg = 0; + 5e: 4801 li a6,0 { - print("0"); + write(1, "0", 1); return; } - if (val < 0) - 54: 06054163 bltz a0,b6 <_Z9print_inti+0x70> - 58: 081c addi a5,sp,16 -{ - 5a: 873e mv a4,a5 - print("-"); - val = -val; + if (n < 0) + 60: 04054c63 bltz a0,b8 <_Z9print_inti+0x64> + 64: 840a mv s0,sp + { + neg = 1; + 66: 86a2 mv a3,s0 + 68: 4701 li a4,0 + n = -n; } - while (val > 0) + while (n > 0) { - buf[i++] = (val % 10) + '0'; - 5c: 4629 li a2,10 - 5e: 02c466bb remw a3,s0,a2 - 62: 85ba mv a1,a4 - while (val > 0) - 64: 0705 addi a4,a4,1 - val /= 10; - 66: 02c4443b divw s0,s0,a2 - buf[i++] = (val % 10) + '0'; - 6a: 0306869b addiw a3,a3,48 - 6e: fed70fa3 sb a3,-1(a4) - while (val > 0) - 72: f475 bnez s0,5e <_Z9print_inti+0x18> - 74: 9d9d subw a1,a1,a5 - 76: 0015871b addiw a4,a1,1 - 7a: fff7059b addiw a1,a4,-1 - 7e: fff78493 addi s1,a5,-1 - 82: 1582 slli a1,a1,0x20 - 84: 94ba add s1,s1,a4 - 86: 9181 srli a1,a1,0x20 - 88: 00e78433 add s0,a5,a4 - 8c: 8c8d sub s1,s1,a1 - 8e: 00f10913 addi s2,sp,15 + buf[i++] = (n % 10) + '0'; + 6a: 4629 li a2,10 + 6c: 02c567bb remw a5,a0,a2 + while (n > 0) + 70: 0685 addi a3,a3,1 + 72: 85ba mv a1,a4 + buf[i++] = (n % 10) + '0'; + 74: 2705 addiw a4,a4,1 + n /= 10; + 76: 02c5453b divw a0,a0,a2 + buf[i++] = (n % 10) + '0'; + 7a: 0307879b addiw a5,a5,48 + 7e: fef68fa3 sb a5,-1(a3) + while (n > 0) + 82: f56d bnez a0,6c <_Z9print_inti+0x18> } + if (neg) + 84: 02081e63 bnez a6,c0 <_Z9print_inti+0x6c> + 88: fff7079b addiw a5,a4,-1 + 8c: ffe40493 addi s1,s0,-2 + 90: 1782 slli a5,a5,0x20 + 92: fff70693 addi a3,a4,-1 + 96: 94ba add s1,s1,a4 + 98: 9381 srli a5,a5,0x20 + 9a: 9436 add s0,s0,a3 + 9c: 8c9d sub s1,s1,a5 + buf[i++] = '-'; while (i > 0) - { - char c = buf[--i]; - 92: fff44783 lbu a5,-1(s0) - write(1, &c, 1); - 96: 4605 li a2,1 - 98: 85ca mv a1,s2 - 9a: 4505 li a0,1 + write(1, &buf[--i], 1); + 9e: 85a2 mv a1,s0 + a0: 4605 li a2,1 + a2: 4505 li a0,1 while (i > 0) - 9c: 147d addi s0,s0,-1 - char c = buf[--i]; - 9e: 00f107a3 sb a5,15(sp) - write(1, &c, 1); - a2: 1e0000ef jal 282 + a4: 147d addi s0,s0,-1 + write(1, &buf[--i], 1); + a6: 5ca000ef jal 670 while (i > 0) - a6: fe9416e3 bne s0,s1,92 <_Z9print_inti+0x4c> - } + aa: fe849ae3 bne s1,s0,9e <_Z9print_inti+0x4a> } - aa: 70e2 ld ra,56(sp) - ac: 7442 ld s0,48(sp) - ae: 74a2 ld s1,40(sp) - b0: 7902 ld s2,32(sp) - b2: 6121 addi sp,sp,64 - b4: 8082 ret - write(1, s, strlen(s)); - b6: 4605 li a2,1 - b8: 00000597 auipc a1,0x0 - bc: 26058593 addi a1,a1,608 # 318 - c0: 4505 li a0,1 - c2: 1c0000ef jal 282 - val = -val; - c6: 4080043b negw s0,s0 - while (val > 0) - ca: b779 j 58 <_Z9print_inti+0x12> - write(1, s, strlen(s)); - cc: 4605 li a2,1 - ce: 00000597 auipc a1,0x0 - d2: 24258593 addi a1,a1,578 # 310 - d6: 4505 li a0,1 - d8: a26d j 282 - -00000000000000da <_Z4passv>: - while (s[n]) - da: 00000697 auipc a3,0x0 - de: 24668693 addi a3,a3,582 # 320 - -void pass() { print(" -> [PASS]\n"); } - e2: 87b6 mv a5,a3 - while (s[n]) - e4: 0017c703 lbu a4,1(a5) - e8: 863e mv a2,a5 - ea: 0785 addi a5,a5,1 - ec: ff65 bnez a4,e4 <_Z4passv+0xa> - n++; - ee: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - f0: 2605 addiw a2,a2,1 - f2: 00000597 auipc a1,0x0 - f6: 22e58593 addi a1,a1,558 # 320 - fa: 4505 li a0,1 - fc: a259 j 282 + ae: 70a2 ld ra,40(sp) + b0: 7402 ld s0,32(sp) + b2: 64e2 ld s1,24(sp) + b4: 6145 addi sp,sp,48 + b6: 8082 ret + n = -n; + b8: 40a0053b negw a0,a0 + neg = 1; + bc: 4805 li a6,1 + be: b75d j 64 <_Z9print_inti+0x10> + buf[i++] = '-'; + c0: 01070793 addi a5,a4,16 + c4: 00278733 add a4,a5,sp + c8: 02d00793 li a5,45 + cc: fef70823 sb a5,-16(a4) + d0: 0025871b addiw a4,a1,2 + d4: bf55 j 88 <_Z9print_inti+0x34> + write(1, "0", 1); + d6: 4605 li a2,1 + d8: 00000597 auipc a1,0x0 + dc: 62858593 addi a1,a1,1576 # 700 + e0: 4505 li a0,1 + e2: a379 j 670 -00000000000000fe <_Z4failv>: -void fail() +00000000000000e4 <_Z9print_hexy>: + +void print_hex(uint64 n) { - fe: 1141 addi sp,sp,-16 - 100: 00000697 auipc a3,0x0 - 104: 23068693 addi a3,a3,560 # 330 - 108: e406 sd ra,8(sp) - 10a: 87b6 mv a5,a3 - while (s[n]) - 10c: 0017c703 lbu a4,1(a5) - 110: 863e mv a2,a5 - 112: 0785 addi a5,a5,1 - 114: ff65 bnez a4,10c <_Z4failv+0xe> - n++; - 116: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 118: 2605 addiw a2,a2,1 - 11a: 00000597 auipc a1,0x0 - 11e: 21658593 addi a1,a1,534 # 330 - 122: 4505 li a0,1 - 124: 15e000ef jal 282 - print(" -> [FAIL]\n"); - exit(1); + char buf[16]; + char digits[] = "0123456789ABCDEF"; + e4: 00000797 auipc a5,0x0 + e8: 62c78793 addi a5,a5,1580 # 710 + ec: 6394 ld a3,0(a5) + ee: 6798 ld a4,8(a5) + f0: 0107c783 lbu a5,16(a5) +{ + f4: 715d addi sp,sp,-80 + f6: fc26 sd s1,56(sp) + write(1, "0x", 2); + f8: 4609 li a2,2 +{ + fa: 84aa mv s1,a0 + write(1, "0x", 2); + fc: 00000597 auipc a1,0x0 + 100: 60c58593 addi a1,a1,1548 # 708 + 104: 4505 li a0,1 +{ + 106: e486 sd ra,72(sp) + char digits[] = "0123456789ABCDEF"; + 108: ec36 sd a3,24(sp) + 10a: f03a sd a4,32(sp) + 10c: 02f10423 sb a5,40(sp) + write(1, "0x", 2); + 110: 560000ef jal 670 + if (n == 0) + 114: cca1 beqz s1,16c <_Z9print_hexy+0x88> + 116: e0a2 sd s0,64(sp) + 118: 0020 addi s0,sp,8 + 11a: 87a2 mv a5,s0 + return; + } + int i = 0; + while (n > 0) + { + buf[i++] = digits[n % 16]; + 11c: 00f4f713 andi a4,s1,15 + 120: 03070713 addi a4,a4,48 + 124: 970a add a4,a4,sp + 126: fe874683 lbu a3,-24(a4) + n /= 16; + 12a: 8091 srli s1,s1,0x4 + 12c: 873e mv a4,a5 + buf[i++] = digits[n % 16]; + 12e: 00d78023 sb a3,0(a5) + while (n > 0) + 132: 0785 addi a5,a5,1 + 134: f4e5 bnez s1,11c <_Z9print_hexy+0x38> + 136: 9f01 subw a4,a4,s0 + 138: 0017079b addiw a5,a4,1 + 13c: fff7871b addiw a4,a5,-1 + 140: ffe40493 addi s1,s0,-2 + 144: 1702 slli a4,a4,0x20 + 146: fff78693 addi a3,a5,-1 + 14a: 94be add s1,s1,a5 + 14c: 9301 srli a4,a4,0x20 + 14e: 9436 add s0,s0,a3 + 150: 8c99 sub s1,s1,a4 + } + while (i > 0) + write(1, &buf[--i], 1); + 152: 85a2 mv a1,s0 + 154: 4605 li a2,1 + 156: 4505 li a0,1 + while (i > 0) + 158: 147d addi s0,s0,-1 + write(1, &buf[--i], 1); + 15a: 516000ef jal 670 + while (i > 0) + 15e: fe941ae3 bne s0,s1,152 <_Z9print_hexy+0x6e> + 162: 6406 ld s0,64(sp) } - 128: 60a2 ld ra,8(sp) - exit(1); - 12a: 4505 li a0,1 + 164: 60a6 ld ra,72(sp) + 166: 74e2 ld s1,56(sp) + 168: 6161 addi sp,sp,80 + 16a: 8082 ret + 16c: 60a6 ld ra,72(sp) + 16e: 74e2 ld s1,56(sp) + write(1, "0", 1); + 170: 4605 li a2,1 + 172: 00000597 auipc a1,0x0 + 176: 58e58593 addi a1,a1,1422 # 700 + 17a: 4505 li a0,1 } - 12c: 0141 addi sp,sp,16 - exit(1); - 12e: aa15 j 262 + 17c: 6161 addi sp,sp,80 + write(1, "0", 1); + 17e: a9cd j 670 -0000000000000130
: +0000000000000180 <_Z13test_syscallsv>: +// ============================================================= +// 系统调用测试套件 +// ============================================================= -int main() +void test_syscalls() { - 130: 1141 addi sp,sp,-16 - print("\n=== Lume OS Full Validation ===\n"); - 132: 00000517 auipc a0,0x0 - 136: 20e50513 addi a0,a0,526 # 340 -{ - 13a: e406 sd ra,8(sp) - 13c: e022 sd s0,0(sp) - print("\n=== Lume OS Full Validation ===\n"); - 13e: ee3ff0ef jal 20 <_Z5printPKc> - - print("[TEST 1] Write\n"); - 142: 00000517 auipc a0,0x0 - 146: 22650513 addi a0,a0,550 # 368 - 14a: ed7ff0ef jal 20 <_Z5printPKc> - print(" System call write is working."); - 14e: 00000517 auipc a0,0x0 - 152: 22a50513 addi a0,a0,554 # 378 - 156: ecbff0ef jal 20 <_Z5printPKc> -void pass() { print(" -> [PASS]\n"); } - 15a: 00000517 auipc a0,0x0 - 15e: 1c650513 addi a0,a0,454 # 320 - 162: ebfff0ef jal 20 <_Z5printPKc> - pass(); - - print("[TEST 2] GetPID\n"); - 166: 00000517 auipc a0,0x0 - 16a: 23250513 addi a0,a0,562 # 398 - 16e: eb3ff0ef jal 20 <_Z5printPKc> - int parent_pid = getpid(); - 172: 170000ef jal 2e2 - 176: 842a mv s0,a0 - print(" Parent PID: "); - 178: 00000517 auipc a0,0x0 - 17c: 23850513 addi a0,a0,568 # 3b0 - 180: ea1ff0ef jal 20 <_Z5printPKc> - print_int(parent_pid); - 184: 8522 mv a0,s0 - 186: ec1ff0ef jal 46 <_Z9print_inti> - if (parent_pid > 0) - 18a: 0c805563 blez s0,254 -void pass() { print(" -> [PASS]\n"); } - 18e: 00000517 auipc a0,0x0 - 192: 19250513 addi a0,a0,402 # 320 - 196: e8bff0ef jal 20 <_Z5printPKc> - pass(); + 180: 1101 addi sp,sp,-32 + 182: 00000697 auipc a3,0x0 + 186: 5a668693 addi a3,a3,1446 # 728 + 18a: ec06 sd ra,24(sp) + 18c: e822 sd s0,16(sp) + 18e: e426 sd s1,8(sp) + 190: 87b6 mv a5,a3 + while (s[n]) + 192: 0017c703 lbu a4,1(a5) + 196: 863e mv a2,a5 + 198: 0785 addi a5,a5,1 + 19a: ff65 bnez a4,192 <_Z13test_syscallsv+0x12> + n++; + 19c: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 19e: 2605 addiw a2,a2,1 + 1a0: 00000597 auipc a1,0x0 + 1a4: 58858593 addi a1,a1,1416 # 728 + 1a8: 4505 li a0,1 + 1aa: 4c6000ef jal 670 + while (s[n]) + 1ae: 00000697 auipc a3,0x0 + 1b2: 5aa68693 addi a3,a3,1450 # 758 + write(1, s, strlen(s)); + 1b6: 87b6 mv a5,a3 + while (s[n]) + 1b8: 0017c703 lbu a4,1(a5) + 1bc: 863e mv a2,a5 + 1be: 0785 addi a5,a5,1 + 1c0: ff65 bnez a4,1b8 <_Z13test_syscallsv+0x38> + n++; + 1c2: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 1c4: 2605 addiw a2,a2,1 + 1c6: 00000597 auipc a1,0x0 + 1ca: 59258593 addi a1,a1,1426 # 758 + 1ce: 4505 li a0,1 + 1d0: 4a0000ef jal 670 + print("\n=== [Test] Starting System Call Check ===\n"); + + // 1. 测试 getpid + print("[1/4] Checking getpid()... "); + int my_pid = getpid(); + 1d4: 4fc000ef jal 6d0 + 1d8: 842a mv s0,a0 + if (my_pid > 0) + 1da: 2aa05463 blez a0,482 <_Z13test_syscallsv+0x302> + 1de: 00000697 auipc a3,0x0 + 1e2: 59a68693 addi a3,a3,1434 # 778 + 1e6: 87b6 mv a5,a3 + while (s[n]) + 1e8: 0017c703 lbu a4,1(a5) + 1ec: 863e mv a2,a5 + 1ee: 0785 addi a5,a5,1 + 1f0: ff65 bnez a4,1e8 <_Z13test_syscallsv+0x68> + n++; + 1f2: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 1f4: 2605 addiw a2,a2,1 + 1f6: 00000597 auipc a1,0x0 + 1fa: 58258593 addi a1,a1,1410 # 778 + 1fe: 4505 li a0,1 + 200: 470000ef jal 670 + { + print("PASS (PID="); + print_int(my_pid); + 204: 8522 mv a0,s0 + 206: e4fff0ef jal 54 <_Z9print_inti> + while (s[n]) + 20a: 00000697 auipc a3,0x0 + 20e: 57e68693 addi a3,a3,1406 # 788 + print_int(my_pid); + 212: 87b6 mv a5,a3 + while (s[n]) + 214: 0017c703 lbu a4,1(a5) + 218: 863e mv a2,a5 + 21a: 0785 addi a5,a5,1 + 21c: ff65 bnez a4,214 <_Z13test_syscallsv+0x94> + n++; + 21e: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 220: 2605 addiw a2,a2,1 + 222: 00000597 auipc a1,0x0 + 226: 56658593 addi a1,a1,1382 # 788 + 22a: 4505 li a0,1 + 22c: 444000ef jal 670 + while (s[n]) + 230: 00000697 auipc a3,0x0 + 234: 57868693 addi a3,a3,1400 # 7a8 + if (my_pid > 0) + 238: 87b6 mv a5,a3 + while (s[n]) + 23a: 0017c703 lbu a4,1(a5) + 23e: 863e mv a2,a5 + 240: 0785 addi a5,a5,1 + 242: ff65 bnez a4,23a <_Z13test_syscallsv+0xba> + n++; + 244: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 246: 2605 addiw a2,a2,1 + 248: 00000597 auipc a1,0x0 + 24c: 56058593 addi a1,a1,1376 # 7a8 + 250: 4505 li a0,1 + 252: 41e000ef jal 670 + print("FAIL (Invalid PID)\n"); + } + + // 2. 测试 sbrk (内存分配) + print("[2/4] Checking sbrk() heap allocation... "); + char *p = sbrk(4096); // 分配 4KB + 256: 6505 lui a0,0x1 + 258: 480000ef jal 6d8 + if (p == (char *)-1) + 25c: 57fd li a5,-1 + char *p = sbrk(4096); // 分配 4KB + 25e: 84aa mv s1,a0 + if (p == (char *)-1) + 260: 24f50563 beq a0,a5,4aa <_Z13test_syscallsv+0x32a> + print("FAIL (sbrk returned error)\n"); + } else - fail(); + { + // 写入测试,确保映射了物理页 + p[0] = 'A'; + 264: 04100793 li a5,65 + 268: 00f50023 sb a5,0(a0) # 1000 + p[4095] = 'Z'; + 26c: 6785 lui a5,0x1 + 26e: 97aa add a5,a5,a0 + 270: 00000697 auipc a3,0x0 + 274: 58868693 addi a3,a3,1416 # 7f8 + 278: 05a00713 li a4,90 + 27c: fee78fa3 sb a4,-1(a5) # fff + 280: 87b6 mv a5,a3 + while (s[n]) + 282: 0017c703 lbu a4,1(a5) + 286: 863e mv a2,a5 + 288: 0785 addi a5,a5,1 + 28a: ff65 bnez a4,282 <_Z13test_syscallsv+0x102> + n++; + 28c: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 28e: 2605 addiw a2,a2,1 + 290: 00000597 auipc a1,0x0 + 294: 56858593 addi a1,a1,1384 # 7f8 + 298: 4505 li a0,1 + 29a: 3d6000ef jal 670 + if (p[0] == 'A' && p[4095] == 'Z') + { + print("PASS (Allocated at "); + print_hex((uint64)p); + 29e: 8526 mv a0,s1 + 2a0: e45ff0ef jal e4 <_Z9print_hexy> + while (s[n]) + 2a4: 00000697 auipc a3,0x0 + 2a8: 4e468693 addi a3,a3,1252 # 788 + print_hex((uint64)p); + 2ac: 87b6 mv a5,a3 + while (s[n]) + 2ae: 0017c703 lbu a4,1(a5) + 2b2: 863e mv a2,a5 + 2b4: 0785 addi a5,a5,1 + 2b6: ff65 bnez a4,2ae <_Z13test_syscallsv+0x12e> + n++; + 2b8: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 2ba: 2605 addiw a2,a2,1 + 2bc: 00000597 auipc a1,0x0 + 2c0: 4cc58593 addi a1,a1,1228 # 788 + 2c4: 4505 li a0,1 + 2c6: 3aa000ef jal 670 + while (s[n]) + 2ca: 00000697 auipc a3,0x0 + 2ce: 54668693 addi a3,a3,1350 # 810 + print_hex((uint64)p); + 2d2: 87b6 mv a5,a3 + while (s[n]) + 2d4: 0017c703 lbu a4,1(a5) + 2d8: 863e mv a2,a5 + 2da: 0785 addi a5,a5,1 + 2dc: ff65 bnez a4,2d4 <_Z13test_syscallsv+0x154> + n++; + 2de: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 2e0: 2605 addiw a2,a2,1 + 2e2: 00000597 auipc a1,0x0 + 2e6: 52e58593 addi a1,a1,1326 # 810 + 2ea: 4505 li a0,1 + 2ec: 384000ef jal 670 + } + } - print("[TEST 3] Fork, Wait & COW\n"); - 19a: 00000517 auipc a0,0x0 - 19e: 22650513 addi a0,a0,550 # 3c0 - 1a2: e7fff0ef jal 20 <_Z5printPKc> - int val = 100; + // 3. 测试 fork 和 wait + print("[3/4] Checking fork() and wait()...\n"); int pid = fork(); - 1a6: 0b4000ef jal 25a + 2f0: 358000ef jal 648 + 2f4: 84aa mv s1,a0 if (pid < 0) - 1aa: 04054363 bltz a0,1f0 + 2f6: 1c054e63 bltz a0,4d2 <_Z13test_syscallsv+0x352> { - print(" Fork Failed\n"); - fail(); + print(" FAIL: fork error\n"); } - - if (pid == 0) - 1ae: e929 bnez a0,200 + else if (pid == 0) + 2fa: e179 bnez a0,3c0 <_Z13test_syscallsv+0x240> { - print(" [Child] PID: "); - 1b0: 00000517 auipc a0,0x0 - 1b4: 24050513 addi a0,a0,576 # 3f0 - 1b8: e69ff0ef jal 20 <_Z5printPKc> - print_int(getpid()); - 1bc: 126000ef jal 2e2 - 1c0: e87ff0ef jal 46 <_Z9print_inti> - print("\n"); - 1c4: 00000517 auipc a0,0x0 - 1c8: 23c50513 addi a0,a0,572 # 400 - 1cc: e55ff0ef jal 20 <_Z5printPKc> - print(" [Child] Data corruption!\n"); + // --- 子进程 --- + int child_pid = getpid(); + 2fc: 3d4000ef jal 6d0 + 300: 84aa mv s1,a0 + if (child_pid == my_pid) + 302: 24a40563 beq s0,a0,54c <_Z13test_syscallsv+0x3cc> + while (s[n]) + 306: 00000697 auipc a3,0x0 + 30a: 57a68693 addi a3,a3,1402 # 880 + if (child_pid == my_pid) + 30e: 87b6 mv a5,a3 + while (s[n]) + 310: 0017c703 lbu a4,1(a5) + 314: 863e mv a2,a5 + 316: 0785 addi a5,a5,1 + 318: ff65 bnez a4,310 <_Z13test_syscallsv+0x190> + n++; + 31a: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 31c: 2605 addiw a2,a2,1 + 31e: 00000597 auipc a1,0x0 + 322: 56258593 addi a1,a1,1378 # 880 + 326: 4505 li a0,1 + 328: 348000ef jal 670 + { + print(" FAIL: Child has same PID as parent\n"); exit(1); } - - val = 200; - print(" [Child] Modified val to 200. Exiting.\n"); - 1d0: 00000517 auipc a0,0x0 - 1d4: 23850513 addi a0,a0,568 # 408 - 1d8: e49ff0ef jal 20 <_Z5printPKc> + print(" [Child] I am alive. PID="); + print_int(child_pid); + 32c: 8526 mv a0,s1 + 32e: d27ff0ef jal 54 <_Z9print_inti> + write(1, s, strlen(s)); + 332: 4605 li a2,1 + 334: 00000597 auipc a1,0x0 + 338: 56c58593 addi a1,a1,1388 # 8a0 + 33c: 4505 li a0,1 + 33e: 332000ef jal 670 + while (s[n]) + 342: 00000697 auipc a3,0x0 + 346: 56668693 addi a3,a3,1382 # 8a8 + write(1, s, strlen(s)); + 34a: 87b6 mv a5,a3 + while (s[n]) + 34c: 0017c703 lbu a4,1(a5) + 350: 863e mv a2,a5 + 352: 0785 addi a5,a5,1 + 354: ff65 bnez a4,34c <_Z13test_syscallsv+0x1cc> + n++; + 356: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 358: 2605 addiw a2,a2,1 + 35a: 00000597 auipc a1,0x0 + 35e: 54e58593 addi a1,a1,1358 # 8a8 + 362: 4505 li a0,1 + 364: 30c000ef jal 670 + print("\n"); + print(" [Child] Exiting now.\n"); exit(0); - 1dc: 4501 li a0,0 - 1de: 084000ef jal 262 - print_int(val); - fail(); + 368: 4501 li a0,0 + 36a: 2e6000ef jal 650 + while (s[n]) + 36e: 00000697 auipc a3,0x0 + 372: 60a68693 addi a3,a3,1546 # 978 + print("PASS (Fork/Wait cycle)\n"); } - } + else + { + print("FAIL (Wait returned "); + print_int(waited_pid); + 376: 87b6 mv a5,a3 + while (s[n]) + 378: 0017c703 lbu a4,1(a5) + 37c: 863e mv a2,a5 + 37e: 0785 addi a5,a5,1 + 380: ff65 bnez a4,378 <_Z13test_syscallsv+0x1f8> + n++; + 382: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 384: 2605 addiw a2,a2,1 + 386: 00000597 auipc a1,0x0 + 38a: 5f258593 addi a1,a1,1522 # 978 + 38e: 4505 li a0,1 + 390: 2e0000ef jal 670 + while (s[n]) + 394: 00000697 auipc a3,0x0 + 398: 61468693 addi a3,a3,1556 # 9a8 + write(1, s, strlen(s)); + 39c: 87b6 mv a5,a3 + while (s[n]) + 39e: 0017c703 lbu a4,1(a5) + 3a2: 863e mv a2,a5 + 3a4: 0785 addi a5,a5,1 + 3a6: ff65 bnez a4,39e <_Z13test_syscallsv+0x21e> + + // 4. 测试 write (如果是能看到这些输出,说明 write 已经正常了) + print("[4/4] Checking write()... PASS (Self-evident)\n"); + + print("=== [Test] All Tests Finished ===\n"); +} + 3a8: 6442 ld s0,16(sp) + 3aa: 60e2 ld ra,24(sp) + 3ac: 64a2 ld s1,8(sp) + n++; + 3ae: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 3b0: 2605 addiw a2,a2,1 + 3b2: 00000597 auipc a1,0x0 + 3b6: 5f658593 addi a1,a1,1526 # 9a8 + 3ba: 4505 li a0,1 +} + 3bc: 6105 addi sp,sp,32 + write(1, s, strlen(s)); + 3be: ac4d j 670 + 3c0: 00000697 auipc a3,0x0 + 3c4: 50868693 addi a3,a3,1288 # 8c8 + else if (pid == 0) + 3c8: 87b6 mv a5,a3 + while (s[n]) + 3ca: 0017c703 lbu a4,1(a5) + 3ce: 863e mv a2,a5 + 3d0: 0785 addi a5,a5,1 + 3d2: ff65 bnez a4,3ca <_Z13test_syscallsv+0x24a> + n++; + 3d4: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 3d6: 2605 addiw a2,a2,1 + 3d8: 00000597 auipc a1,0x0 + 3dc: 4f058593 addi a1,a1,1264 # 8c8 + 3e0: 4505 li a0,1 + 3e2: 28e000ef jal 670 + print_int(pid); + 3e6: 8526 mv a0,s1 + 3e8: c6dff0ef jal 54 <_Z9print_inti> + write(1, s, strlen(s)); + 3ec: 4605 li a2,1 + 3ee: 00000597 auipc a1,0x0 + 3f2: 4b258593 addi a1,a1,1202 # 8a0 + 3f6: 4505 li a0,1 + 3f8: 278000ef jal 670 + while (s[n]) + 3fc: 00000697 auipc a3,0x0 + 400: 4f468693 addi a3,a3,1268 # 8f0 + write(1, s, strlen(s)); + 404: 87b6 mv a5,a3 + while (s[n]) + 406: 0017c703 lbu a4,1(a5) + 40a: 863e mv a2,a5 + 40c: 0785 addi a5,a5,1 + 40e: ff65 bnez a4,406 <_Z13test_syscallsv+0x286> + n++; + 410: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 412: 2605 addiw a2,a2,1 + 414: 00000597 auipc a1,0x0 + 418: 4dc58593 addi a1,a1,1244 # 8f0 + 41c: 4505 li a0,1 + 41e: 252000ef jal 670 + int waited_pid = wait(0); + 422: 4501 li a0,0 + 424: 234000ef jal 658 + 428: 00000697 auipc a3,0x0 + 42c: 53868693 addi a3,a3,1336 # 960 + 430: 842a mv s0,a0 + if (waited_pid == pid) + 432: 87b6 mv a5,a3 + 434: 0ca48363 beq s1,a0,4fa <_Z13test_syscallsv+0x37a> + while (s[n]) + 438: 0017c703 lbu a4,1(a5) + 43c: 863e mv a2,a5 + 43e: 0785 addi a5,a5,1 + 440: ff65 bnez a4,438 <_Z13test_syscallsv+0x2b8> + n++; + 442: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 444: 2605 addiw a2,a2,1 + 446: 00000597 auipc a1,0x0 + 44a: 51a58593 addi a1,a1,1306 # 960 + 44e: 4505 li a0,1 + 450: 220000ef jal 670 + print_int(waited_pid); + 454: 8522 mv a0,s0 + 456: bffff0ef jal 54 <_Z9print_inti> + while (s[n]) + 45a: 00000697 auipc a3,0x0 + 45e: 32e68693 addi a3,a3,814 # 788 + print_int(waited_pid); + 462: 87b6 mv a5,a3 + while (s[n]) + 464: 0017c703 lbu a4,1(a5) + 468: 863e mv a2,a5 + 46a: 0785 addi a5,a5,1 + 46c: ff65 bnez a4,464 <_Z13test_syscallsv+0x2e4> + n++; + 46e: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 470: 2605 addiw a2,a2,1 + 472: 00000597 auipc a1,0x0 + 476: 31658593 addi a1,a1,790 # 788 + 47a: 4505 li a0,1 + 47c: 1f4000ef jal 670 +} + 480: b5fd j 36e <_Z13test_syscallsv+0x1ee> + 482: 00000697 auipc a3,0x0 + 486: 30e68693 addi a3,a3,782 # 790 + if (my_pid > 0) + 48a: 87b6 mv a5,a3 + while (s[n]) + 48c: 0017c703 lbu a4,1(a5) + 490: 863e mv a2,a5 + 492: 0785 addi a5,a5,1 + 494: ff65 bnez a4,48c <_Z13test_syscallsv+0x30c> + n++; + 496: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 498: 2605 addiw a2,a2,1 + 49a: 00000597 auipc a1,0x0 + 49e: 2f658593 addi a1,a1,758 # 790 + 4a2: 4505 li a0,1 + 4a4: 1cc000ef jal 670 +} + 4a8: b361 j 230 <_Z13test_syscallsv+0xb0> + 4aa: 00000697 auipc a3,0x0 + 4ae: 32e68693 addi a3,a3,814 # 7d8 + if (p == (char *)-1) + 4b2: 87b6 mv a5,a3 + while (s[n]) + 4b4: 0017c703 lbu a4,1(a5) + 4b8: 863e mv a2,a5 + 4ba: 0785 addi a5,a5,1 + 4bc: ff65 bnez a4,4b4 <_Z13test_syscallsv+0x334> + n++; + 4be: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 4c0: 2605 addiw a2,a2,1 + 4c2: 00000597 auipc a1,0x0 + 4c6: 31658593 addi a1,a1,790 # 7d8 + 4ca: 4505 li a0,1 + 4cc: 1a4000ef jal 670 +} + 4d0: bbed j 2ca <_Z13test_syscallsv+0x14a> + 4d2: 00000697 auipc a3,0x0 + 4d6: 36668693 addi a3,a3,870 # 838 + if (pid < 0) + 4da: 87b6 mv a5,a3 + while (s[n]) + 4dc: 0017c703 lbu a4,1(a5) + 4e0: 863e mv a2,a5 + 4e2: 0785 addi a5,a5,1 + 4e4: ff65 bnez a4,4dc <_Z13test_syscallsv+0x35c> + n++; + 4e6: 9e15 subw a2,a2,a3 + write(1, s, strlen(s)); + 4e8: 2605 addiw a2,a2,1 + 4ea: 00000597 auipc a1,0x0 + 4ee: 34e58593 addi a1,a1,846 # 838 + 4f2: 4505 li a0,1 + 4f4: 17c000ef jal 670 +} + 4f8: bd9d j 36e <_Z13test_syscallsv+0x1ee> + 4fa: 00000617 auipc a2,0x0 + 4fe: 41e60613 addi a2,a2,1054 # 918 + if (waited_pid == pid) + 502: 87b2 mv a5,a2 + while (s[n]) + 504: 0017c703 lbu a4,1(a5) + 508: 86be mv a3,a5 + 50a: 0785 addi a5,a5,1 + 50c: ff65 bnez a4,504 <_Z13test_syscallsv+0x384> + n++; + 50e: 40c6863b subw a2,a3,a2 + write(1, s, strlen(s)); + 512: 2605 addiw a2,a2,1 + 514: 00000597 auipc a1,0x0 + 518: 40458593 addi a1,a1,1028 # 918 + 51c: 4505 li a0,1 + 51e: 152000ef jal 670 + while (s[n]) + 522: 00000617 auipc a2,0x0 + 526: 42660613 addi a2,a2,1062 # 948 + write(1, s, strlen(s)); + 52a: 87b2 mv a5,a2 + while (s[n]) + 52c: 0017c703 lbu a4,1(a5) + 530: 86be mv a3,a5 + 532: 0785 addi a5,a5,1 + 534: ff65 bnez a4,52c <_Z13test_syscallsv+0x3ac> + n++; + 536: 40c6863b subw a2,a3,a2 + write(1, s, strlen(s)); + 53a: 2605 addiw a2,a2,1 + 53c: 00000597 auipc a1,0x0 + 540: 40c58593 addi a1,a1,1036 # 948 + 544: 4505 li a0,1 + 546: 12a000ef jal 670 +} + 54a: b515 j 36e <_Z13test_syscallsv+0x1ee> + 54c: 00000617 auipc a2,0x0 + 550: 30460613 addi a2,a2,772 # 850 + if (child_pid == my_pid) + 554: 87b2 mv a5,a2 + while (s[n]) + 556: 0017c703 lbu a4,1(a5) + 55a: 86be mv a3,a5 + 55c: 0785 addi a5,a5,1 + 55e: ff65 bnez a4,556 <_Z13test_syscallsv+0x3d6> + n++; + 560: 40c6863b subw a2,a3,a2 + write(1, s, strlen(s)); + 564: 2605 addiw a2,a2,1 + 566: 00000597 auipc a1,0x0 + 56a: 2ea58593 addi a1,a1,746 # 850 + 56e: 4505 li a0,1 + 570: 100000ef jal 670 + exit(1); + 574: 4505 li a0,1 + 576: 0da000ef jal 650 + 57a: b371 j 306 <_Z13test_syscallsv+0x186> + +000000000000057c
: +// ============================================================= +// Shell 主循环 +// ============================================================= + +int main() +{ + 57c: 715d addi sp,sp,-80 + print("\n[Lume Shell] Ready.\n"); + 57e: 00000517 auipc a0,0x0 + 582: 45250513 addi a0,a0,1106 # 9d0 +{ + 586: e486 sd ra,72(sp) + 588: e0a2 sd s0,64(sp) + 58a: fc26 sd s1,56(sp) + 58c: f84a sd s2,48(sp) + 58e: f44e sd s3,40(sp) + 590: f052 sd s4,32(sp) + 592: ec56 sd s5,24(sp) + 594: e85a sd s6,16(sp) + print("\n[Lume Shell] Ready.\n"); + 596: a99ff0ef jal 2e <_Z5printPKc> + print("Commands:\n"); + 59a: 00000517 auipc a0,0x0 + 59e: 44e50513 addi a0,a0,1102 # 9e8 + 5a2: a8dff0ef jal 2e <_Z5printPKc> + print(" s: Run System Call Tests (fork, wait, mm)\n"); + 5a6: 00000517 auipc a0,0x0 + 5aa: 45250513 addi a0,a0,1106 # 9f8 + 5ae: a81ff0ef jal 2e <_Z5printPKc> + print(" t: Run Disk Driver Test (VirtIO)\n"); + 5b2: 00000517 auipc a0,0x0 + 5b6: 47650513 addi a0,a0,1142 # a28 + 5ba: 00000b17 auipc s6,0x0 + 5be: 49eb0b13 addi s6,s6,1182 # a58 + n++; + 5c2: 4a85 li s5,1 + print(" t: Run Disk Driver Test (VirtIO)\n"); + 5c4: a6bff0ef jal 2e <_Z5printPKc> + 5c8: 848a mv s1,sp - print("\n=== All Tests Passed ===\n"); - 1e2: 00000517 auipc a0,0x0 - 1e6: 2ce50513 addi a0,a0,718 # 4b0 - 1ea: e37ff0ef jal 20 <_Z5printPKc> while (1) - 1ee: a001 j 1ee - print(" Fork Failed\n"); - 1f0: 00000517 auipc a0,0x0 - 1f4: 1f050513 addi a0,a0,496 # 3e0 - 1f8: e29ff0ef jal 20 <_Z5printPKc> - fail(); - 1fc: f03ff0ef jal fe <_Z4failv> - print(" [Parent] Waiting for child...\n"); - 200: 00000517 auipc a0,0x0 - 204: 23850513 addi a0,a0,568 # 438 - 208: e19ff0ef jal 20 <_Z5printPKc> - int child_pid = wait(0); - 20c: 4501 li a0,0 - 20e: 05c000ef jal 26a - 212: 842a mv s0,a0 - print(" [Parent] Child "); - 214: 00000517 auipc a0,0x0 - 218: 24c50513 addi a0,a0,588 # 460 - 21c: e05ff0ef jal 20 <_Z5printPKc> - print_int(child_pid); - 220: 8522 mv a0,s0 - 222: e25ff0ef jal 46 <_Z9print_inti> - print(" exited.\n"); - 226: 00000517 auipc a0,0x0 - 22a: 25250513 addi a0,a0,594 # 478 - 22e: df3ff0ef jal 20 <_Z5printPKc> - print(" [Parent] Check val (Expect 100): "); - 232: 00000517 auipc a0,0x0 - 236: 25650513 addi a0,a0,598 # 488 - 23a: de7ff0ef jal 20 <_Z5printPKc> - print_int(val); - 23e: 06400513 li a0,100 - 242: e05ff0ef jal 46 <_Z9print_inti> -void pass() { print(" -> [PASS]\n"); } - 246: 00000517 auipc a0,0x0 - 24a: 0da50513 addi a0,a0,218 # 320 - 24e: dd3ff0ef jal 20 <_Z5printPKc> - 252: bf41 j 1e2 - fail(); - 254: eabff0ef jal fe <_Z4failv> - 258: b789 j 19a - -000000000000025a : + { + char buf[16]; + write(1, "$ ", 2); + 5ca: 00000417 auipc s0,0x0 + 5ce: 48640413 addi s0,s0,1158 # a50 + + int n = read(0, buf, sizeof(buf)); + if (n <= 0) + continue; + + if (buf[0] == 's') + 5d2: 07300913 li s2,115 + { + test_syscalls(); + } + else if (buf[0] == 't') + 5d6: 07400993 li s3,116 + disk_test(); + exit(0); + } + wait(0); + } + else if (buf[0] != '\n') + 5da: 4a29 li s4,10 + n++; + 5dc: 416a8abb subw s5,s5,s6 + write(1, "$ ", 2); + 5e0: 4609 li a2,2 + 5e2: 85a2 mv a1,s0 + 5e4: 4505 li a0,1 + 5e6: 08a000ef jal 670 + int n = read(0, buf, sizeof(buf)); + 5ea: 4641 li a2,16 + 5ec: 85a6 mv a1,s1 + 5ee: 4501 li a0,0 + 5f0: 078000ef jal 668 + if (n <= 0) + 5f4: fea056e3 blez a0,5e0 + if (buf[0] == 's') + 5f8: 00014783 lbu a5,0(sp) + 5fc: 03278663 beq a5,s2,628 + else if (buf[0] == 't') + 600: 03378763 beq a5,s3,62e + else if (buf[0] != '\n') + 604: fd478ee3 beq a5,s4,5e0 + 608: 00000797 auipc a5,0x0 + 60c: 45078793 addi a5,a5,1104 # a58 + while (s[n]) + 610: 0017c703 lbu a4,1(a5) + 614: 863e mv a2,a5 + 616: 0785 addi a5,a5,1 + 618: ff65 bnez a4,610 + write(1, s, strlen(s)); + 61a: 00ca863b addw a2,s5,a2 + 61e: 85da mv a1,s6 + 620: 4505 li a0,1 + 622: 04e000ef jal 670 +} + 626: bf6d j 5e0 + test_syscalls(); + 628: b59ff0ef jal 180 <_Z13test_syscallsv> + 62c: bf55 j 5e0 + if (fork() == 0) + 62e: 01a000ef jal 648 + 632: c509 beqz a0,63c + wait(0); + 634: 4501 li a0,0 + 636: 022000ef jal 658 + 63a: b75d j 5e0 + disk_test(); + 63c: 0bc000ef jal 6f8 + exit(0); + 640: 4501 li a0,0 + 642: 00e000ef jal 650 + 646: b7fd j 634 + +0000000000000648 : name: \ li a7, SYS_ ## name; \ ecall; \ ret SYSCALL(fork) - 25a: 4889 li a7,2 - 25c: 00000073 ecall - 260: 8082 ret + 648: 4889 li a7,2 + 64a: 00000073 ecall + 64e: 8082 ret -0000000000000262 : +0000000000000650 : SYSCALL(exit) - 262: 488d li a7,3 - 264: 00000073 ecall - 268: 8082 ret + 650: 488d li a7,3 + 652: 00000073 ecall + 656: 8082 ret -000000000000026a : +0000000000000658 : SYSCALL(wait) - 26a: 4891 li a7,4 - 26c: 00000073 ecall - 270: 8082 ret + 658: 4891 li a7,4 + 65a: 00000073 ecall + 65e: 8082 ret -0000000000000272 : +0000000000000660 : SYSCALL(pipe) - 272: 4895 li a7,5 - 274: 00000073 ecall - 278: 8082 ret + 660: 4895 li a7,5 + 662: 00000073 ecall + 666: 8082 ret -000000000000027a : +0000000000000668 : SYSCALL(read) - 27a: 4899 li a7,6 - 27c: 00000073 ecall - 280: 8082 ret + 668: 4899 li a7,6 + 66a: 00000073 ecall + 66e: 8082 ret -0000000000000282 : +0000000000000670 : SYSCALL(write) - 282: 48c5 li a7,17 - 284: 00000073 ecall - 288: 8082 ret + 670: 48c5 li a7,17 + 672: 00000073 ecall + 676: 8082 ret -000000000000028a : +0000000000000678 : SYSCALL(close) - 28a: 48d9 li a7,22 - 28c: 00000073 ecall - 290: 8082 ret + 678: 48d9 li a7,22 + 67a: 00000073 ecall + 67e: 8082 ret -0000000000000292 : +0000000000000680 : SYSCALL(kill) - 292: 489d li a7,7 - 294: 00000073 ecall - 298: 8082 ret + 680: 489d li a7,7 + 682: 00000073 ecall + 686: 8082 ret -000000000000029a : +0000000000000688 : SYSCALL(exec) - 29a: 48a1 li a7,8 - 29c: 00000073 ecall - 2a0: 8082 ret + 688: 48a1 li a7,8 + 68a: 00000073 ecall + 68e: 8082 ret -00000000000002a2 : +0000000000000690 : SYSCALL(open) - 2a2: 48c1 li a7,16 - 2a4: 00000073 ecall - 2a8: 8082 ret + 690: 48c1 li a7,16 + 692: 00000073 ecall + 696: 8082 ret -00000000000002aa : +0000000000000698 : SYSCALL(mknod) - 2aa: 48c9 li a7,18 - 2ac: 00000073 ecall - 2b0: 8082 ret + 698: 48c9 li a7,18 + 69a: 00000073 ecall + 69e: 8082 ret -00000000000002b2 : +00000000000006a0 : SYSCALL(unlink) - 2b2: 48cd li a7,19 - 2b4: 00000073 ecall - 2b8: 8082 ret + 6a0: 48cd li a7,19 + 6a2: 00000073 ecall + 6a6: 8082 ret -00000000000002ba : +00000000000006a8 : SYSCALL(fstat) - 2ba: 48a5 li a7,9 - 2bc: 00000073 ecall - 2c0: 8082 ret + 6a8: 48a5 li a7,9 + 6aa: 00000073 ecall + 6ae: 8082 ret -00000000000002c2 : +00000000000006b0 : SYSCALL(link) - 2c2: 48d1 li a7,20 - 2c4: 00000073 ecall - 2c8: 8082 ret + 6b0: 48d1 li a7,20 + 6b2: 00000073 ecall + 6b6: 8082 ret -00000000000002ca : +00000000000006b8 : SYSCALL(mkdir) - 2ca: 48d5 li a7,21 - 2cc: 00000073 ecall - 2d0: 8082 ret + 6b8: 48d5 li a7,21 + 6ba: 00000073 ecall + 6be: 8082 ret -00000000000002d2 : +00000000000006c0 : SYSCALL(chdir) - 2d2: 48a9 li a7,10 - 2d4: 00000073 ecall - 2d8: 8082 ret + 6c0: 48a9 li a7,10 + 6c2: 00000073 ecall + 6c6: 8082 ret -00000000000002da : +00000000000006c8 : SYSCALL(dup) - 2da: 48ad li a7,11 - 2dc: 00000073 ecall - 2e0: 8082 ret + 6c8: 48ad li a7,11 + 6ca: 00000073 ecall + 6ce: 8082 ret -00000000000002e2 : +00000000000006d0 : SYSCALL(getpid) - 2e2: 48b1 li a7,12 - 2e4: 00000073 ecall - 2e8: 8082 ret + 6d0: 48b1 li a7,12 + 6d2: 00000073 ecall + 6d6: 8082 ret -00000000000002ea : +00000000000006d8 : SYSCALL(sbrk) - 2ea: 48b5 li a7,13 - 2ec: 00000073 ecall - 2f0: 8082 ret + 6d8: 48b5 li a7,13 + 6da: 00000073 ecall + 6de: 8082 ret -00000000000002f2 : +00000000000006e0 : SYSCALL(sleep) - 2f2: 48b9 li a7,14 - 2f4: 00000073 ecall - 2f8: 8082 ret + 6e0: 48b9 li a7,14 + 6e2: 00000073 ecall + 6e6: 8082 ret -00000000000002fa : +00000000000006e8 : SYSCALL(uptime) - 2fa: 48bd li a7,15 - 2fc: 00000073 ecall - 300: 8082 ret - -0000000000000302 : - 302: 4885 li a7,1 - 304: 00000073 ecall - 308: 8082 ret + 6e8: 48bd li a7,15 + 6ea: 00000073 ecall + 6ee: 8082 ret + +00000000000006f0 : +SYSCALL(putc) + 6f0: 4885 li a7,1 + 6f2: 00000073 ecall + 6f6: 8082 ret + +00000000000006f8 : + 6f8: 48dd li a7,23 + 6fa: 00000073 ecall + 6fe: 8082 ret diff --git a/build/user/initcode.out b/build/user/initcode.out index af31998..c8d8b7f 100755 Binary files a/build/user/initcode.out and b/build/user/initcode.out differ diff --git a/build/user/usys.o b/build/user/usys.o index 9ac9e11..537c6db 100644 Binary files a/build/user/usys.o and b/build/user/usys.o differ diff --git a/docs/dev/dev_device.md b/docs/dev/dev_device.md new file mode 100644 index 0000000..1eb6462 --- /dev/null +++ b/docs/dev/dev_device.md @@ -0,0 +1,23 @@ +# Dev log +## **3.Device Model & HAL:** +* Interrupt Controller: PLIC: + + * Implement the PLIC (Platform-Level Interrupt Controller) driver. + + * Set the PLIC priority threshold and enable bits during the start() phase. + + * Dispatch Cause 9 (External Interrupt) in kerneltrap/usertrap. + +* Character Device: Interrupt-Driven Console: + + * Implement a Ring Buffer. uart_putc returns immediately after writing to the buffer. + + * UART transmit interrupt: triggers when the serial port is idle, the ISR takes data from the Ring Buffer and writes it to the register. + + * UART receive interrupt: triggers when a key is pressed, the ISR reads the character and wakes up the process waiting to read. + +* Block Device: VirtIO-Blk: + + * Implement a block device driver for the PCI or MMIO transport layer according to the VirtIO 2.0 standard. + + * DMA: Use the Buddy System to allocate contiguous memory as the descriptor table for the Virtqueue. \ No newline at end of file diff --git a/docs/dev/dev_memory.md b/docs/dev/dev_memory.md new file mode 100644 index 0000000..f05e336 --- /dev/null +++ b/docs/dev/dev_memory.md @@ -0,0 +1,37 @@ +# Dev log +## **1. Process Management:** +The core architecture has been upgraded from a simple single queue to a Per-CPU scheduler, supporting multi-core concurrency. + +* Process lifecycle: A complete process state machine has been implemented, including UNUSED, RUNNABLE, RUNNING, SLEEPING, and ZOMBIE states. + +* Core operations: + * fork(): process cloning, supporting COW (copy-on-write) isolation of memory space between parent and child processes. + * exit(): process termination and resource cleanup. + * wait(): parent process waits for child process to exit. + * sleep()/wakeup(): channel-based sleep and wakeup mechanism. + +* Scheduling algorithm: + * O(1) priority scheduling has been implemented (supporting 4 priority queues). + + * Per-CPU RunQueue: each CPU has its own independent run queue. + + * Supports Work Stealing: idle CPUs can fetch tasks from other CPUs’ queues. + +## **2. Memory Management:** +A complete virtual and physical memory management system has been implemented. + +* Physical Memory (PMM): Implements the Buddy System, supporting memory allocation and deallocation in $2^n$ pages. + +* Virtual Memory (VM): Based on RISC-V Sv39 paging mode. Provides secure data copying from user space to kernel space (copyin). + +* COW (Copy-On-Write): During fork, only page table entries are copied and pages are set to read-only; writes trigger page faults for physical copy, greatly improving process creation efficiency. + +* Kernel heap: Implements a Slab Allocator, providing efficient allocation of small objects (such as struct Proc). + +## **3. Synchronization:** + +* Spinlock: Used to protect very short critical sections (e.g., scheduler lock, PMM lock), supports disabling interrupts to prevent deadlocks. + +* Mutex (sleeping lock): Used for long critical sections (e.g., file I/O), allowing sleep while holding the lock. + +* Lock Handoff: Implements a complex lock handoff mechanism in the scheduler to ensure atomicity of context switches. \ No newline at end of file diff --git a/docs/dev/dev_memoty.md b/docs/dev/dev_memoty.md deleted file mode 100644 index f05e336..0000000 --- a/docs/dev/dev_memoty.md +++ /dev/null @@ -1,37 +0,0 @@ -# Dev log -## **1. Process Management:** -The core architecture has been upgraded from a simple single queue to a Per-CPU scheduler, supporting multi-core concurrency. - -* Process lifecycle: A complete process state machine has been implemented, including UNUSED, RUNNABLE, RUNNING, SLEEPING, and ZOMBIE states. - -* Core operations: - * fork(): process cloning, supporting COW (copy-on-write) isolation of memory space between parent and child processes. - * exit(): process termination and resource cleanup. - * wait(): parent process waits for child process to exit. - * sleep()/wakeup(): channel-based sleep and wakeup mechanism. - -* Scheduling algorithm: - * O(1) priority scheduling has been implemented (supporting 4 priority queues). - - * Per-CPU RunQueue: each CPU has its own independent run queue. - - * Supports Work Stealing: idle CPUs can fetch tasks from other CPUs’ queues. - -## **2. Memory Management:** -A complete virtual and physical memory management system has been implemented. - -* Physical Memory (PMM): Implements the Buddy System, supporting memory allocation and deallocation in $2^n$ pages. - -* Virtual Memory (VM): Based on RISC-V Sv39 paging mode. Provides secure data copying from user space to kernel space (copyin). - -* COW (Copy-On-Write): During fork, only page table entries are copied and pages are set to read-only; writes trigger page faults for physical copy, greatly improving process creation efficiency. - -* Kernel heap: Implements a Slab Allocator, providing efficient allocation of small objects (such as struct Proc). - -## **3. Synchronization:** - -* Spinlock: Used to protect very short critical sections (e.g., scheduler lock, PMM lock), supports disabling interrupts to prevent deadlocks. - -* Mutex (sleeping lock): Used for long critical sections (e.g., file I/O), allowing sleep while holding the lock. - -* Lock Handoff: Implements a complex lock handoff mechanism in the scheduler to ensure atomicity of context switches. \ No newline at end of file diff --git a/fs.img b/fs.img new file mode 100644 index 0000000..fada73c Binary files /dev/null and b/fs.img differ diff --git a/include/drivers/plic.h b/include/drivers/plic.h index 8e8d986..11e8c8a 100644 --- a/include/drivers/plic.h +++ b/include/drivers/plic.h @@ -1,7 +1,7 @@ #pragma once #include "common/types.h" -namespace PILC +namespace PLIC { // Global initialization (executed only once by hart 0) void init(); diff --git a/include/drivers/uart.h b/include/drivers/uart.h index cb84bde..26c2394 100644 --- a/include/drivers/uart.h +++ b/include/drivers/uart.h @@ -1,11 +1,35 @@ #pragma once #include "common/types.h" +#define UART0 0x10000000L +#define RHR 0 // Receive Holding Register (read mode) +#define THR 0 // Transmit Holding Register (write mode) +#define IER 1 // Interrupt Enable Register +#define FCR 2 // FIFO Control Register +#define ISR 2 // Interrupt Status Register +#define LCR 3 // Line Control Register +#define LSR 5 // Line Status Register + +#define LSR_RX_READY 0x01 // input is waiting to be read from RHR +#define LSR_TX_IDLE 0x20 // THR can accept another character to send + +#define UART_RX_BUF_SIZE 128 + +// ANSI Escape Codes for Modern Terminal Colors +#define ANSI_RESET "\033[0m" +#define ANSI_RED "\033[31m" +#define ANSI_GREEN "\033[32m" +#define ANSI_YELLOW "\033[33m" +#define ANSI_BLUE "\033[34m" +#define ANSI_CLEAR "\033[2J\033[1;1H" + namespace Drivers { void uart_init(); - void uart_putc(char c); + void uart_intr(); + int console_read(uint64 target, int len); + void uart_putc(char c); void uart_puts(const char *s); void uart_put_int(int value); void print_hex(uint64 value); diff --git a/include/drivers/virtio.h b/include/drivers/virtio.h new file mode 100644 index 0000000..308dae0 --- /dev/null +++ b/include/drivers/virtio.h @@ -0,0 +1,102 @@ +#pragma once +#include "common/types.h" + +// VirtIO MMIO Base Address +#define VIRTIO0 0x10001000 + +// MMIO Registers (Modern / Version 2) +#define VIRTIO_MMIO_MAGIC_VALUE 0x000 +#define VIRTIO_MMIO_VERSION 0x004 +#define VIRTIO_MMIO_DEVICE_ID 0x008 +#define VIRTIO_MMIO_VENDOR_ID 0x00c +#define VIRTIO_MMIO_DEVICE_FEATURES 0x010 +#define VIRTIO_MMIO_DEVICE_FEATURES_SEL 0x014 +#define VIRTIO_MMIO_DRIVER_FEATURES 0x020 +#define VIRTIO_MMIO_DRIVER_FEATURES_SEL 0x024 +#define VIRTIO_MMIO_QUEUE_SEL 0x030 +#define VIRTIO_MMIO_QUEUE_NUM_MAX 0x034 +#define VIRTIO_MMIO_QUEUE_NUM 0x038 +#define VIRTIO_MMIO_QUEUE_READY 0x044 +#define VIRTIO_MMIO_QUEUE_NOTIFY 0x050 +#define VIRTIO_MMIO_INTERRUPT_STATUS 0x060 +#define VIRTIO_MMIO_INTERRUPT_ACK 0x064 +#define VIRTIO_MMIO_STATUS 0x070 + +// 64-bit Queue Address Registers (Modern) +#define VIRTIO_MMIO_QUEUE_DESC_LOW 0x080 +#define VIRTIO_MMIO_QUEUE_DESC_HIGH 0x084 +#define VIRTIO_MMIO_QUEUE_DRIVER_LOW 0x090 +#define VIRTIO_MMIO_QUEUE_DRIVER_HIGH 0x094 +#define VIRTIO_MMIO_QUEUE_DEVICE_LOW 0x0a0 +#define VIRTIO_MMIO_QUEUE_DEVICE_HIGH 0x0a4 + +// Status Bits +#define VIRTIO_CONFIG_S_ACKNOWLEDGE 1 +#define VIRTIO_CONFIG_S_DRIVER 2 +#define VIRTIO_CONFIG_S_DRIVER_OK 4 +#define VIRTIO_CONFIG_S_FEATURES_OK 8 + +// Feature Bits +#define VIRTIO_BLK_F_RO 5 +#define VIRTIO_BLK_F_SCSI 7 +#define VIRTIO_BLK_F_CONFIG_WCE 11 +#define VIRTIO_BLK_F_MQ 12 +#define VIRTIO_F_ANY_LAYOUT 27 +#define VIRTIO_RING_F_INDIRECT_DESC 28 +#define VIRTIO_RING_F_EVENT_IDX 29 +#define VIRTIO_F_VERSION_1 32 + +// Descriptor Flags +#define VRING_DESC_F_NEXT 1 +#define VRING_DESC_F_WRITE 2 + +#define NUM_DESCS 8 + +#define VIRTIO_BLK_T_IN 0 +#define VIRTIO_BLK_T_OUT 1 + +// Device Configuration Layout (Offset 0x100) +#define VIRTIO_MMIO_CONFIG 0x100 + +namespace VirtIO +{ + struct VRingDesc + { + uint64 addr; + uint32 len; + uint16 flags; + uint16 next; + }; + + struct VRingAvail + { + uint16 flags; + uint16 idx; + uint16 ring[NUM_DESCS]; + }; + + struct VRingUsedElem + { + uint32 id; + uint32 len; + }; + + struct VRingUsed + { + uint16 flags; + uint16 idx; + struct VRingUsedElem ring[NUM_DESCS]; + }; + + struct __attribute__((packed)) BlockRequest + { + uint32 type; // 0=Read, 1=Write + uint32 reserved; + uint64 sector; + }; + + void init(); + void intr(); + void rw(int write, uint64 blockno, char *buf); + void test_rw(); +} \ No newline at end of file diff --git a/include/kernel/proc.h b/include/kernel/proc.h index d63ccf7..cbf2902 100644 --- a/include/kernel/proc.h +++ b/include/kernel/proc.h @@ -17,6 +17,8 @@ namespace ProcManager void sleep(void *chan, Spinlock *lk); void wakeup(void *chan); + + int growproc(int n); } void forkret(); diff --git a/include/kernel/syscall.h b/include/kernel/syscall.h index 222f2f4..1fcd1ff 100644 --- a/include/kernel/syscall.h +++ b/include/kernel/syscall.h @@ -22,6 +22,7 @@ #define SYS_link 20 #define SYS_mkdir 21 #define SYS_close 22 +#define SYS_disk_test 23 #ifndef __ASSEMBLER__ void syscall(); diff --git a/include/user/user.h b/include/user/user.h index 7ab4923..7624a21 100644 --- a/include/user/user.h +++ b/include/user/user.h @@ -24,6 +24,7 @@ extern "C" { int sleep(int ticks); int uptime(); - + // Debug void putc(char c); + int disk_test(); } \ No newline at end of file diff --git a/src/drivers/plic.cc b/src/drivers/plic.cc index a13537c..a759597 100644 --- a/src/drivers/plic.cc +++ b/src/drivers/plic.cc @@ -1,60 +1,59 @@ #include "common/types.h" #include "kernel/riscv.h" #include "drivers/plic.h" +#include "drivers/uart.h" -// QEMU Virt PLIC address constants +// Base Constants constexpr uint64 PLIC_BASE = 0x0c000000L; constexpr uint64 PLIC_PRIORITY = PLIC_BASE + 0x0; constexpr uint64 PLIC_PENDING = PLIC_BASE + 0x1000; -// S-Mode interrupt enable register: each Hart occupies 0x100 bytes -// Context 1 is Hart 0 S-Mode, Context 3 is Hart 1 S-Mode... -inline uint64 PLIC_SENABLE(int hart) -{ - return PLIC_BASE + 0x2080 + static_cast(hart) * 0x100; -} +// Helper Macros to calculate addresses +#define PLIC_SENABLE_ADDR(hart) (PLIC_BASE + 0x2080 + (hart) * 0x100) +#define PLIC_STHRESHOLD_ADDR(hart) (PLIC_BASE + 0x201000 + (hart) * 0x2000) +#define PLIC_SCLAIM_ADDR(hart) (PLIC_BASE + 0x201004 + (hart) * 0x2000) -// S-Mode priority threshold and claim register: 0x2000 bytes per Hart -inline uint64 PLIC_STHRESHOLD(int hart) +// Helper for Volatile Access +static inline volatile uint32 *REG32(uint64 addr) { - return PLIC_BASE + 0x201000 + static_cast(hart) * 0x2000; + return reinterpret_cast(addr); } -inline uint64 PLIC_SCLAIM(int hart) -{ - return PLIC_BASE + 0x201004 + static_cast(hart) * 0x2000; -} - -namespace PILC +namespace PLIC { void init() { - *reinterpret_cast(PLIC_PRIORITY + 10 * 4) = 1; // UART - *reinterpret_cast(PLIC_PRIORITY + 1 * 4) = 1; // VirtIO 0 + // Set Priority for UART (IRQ 10) and VirtIO (IRQ 1) + // Must use volatile write + *REG32(PLIC_PRIORITY + 10 * 4) = 1; + for (int i = 1; i <= 8; i++) + { + *REG32(PLIC_PRIORITY + i * 4) = 1; + } } void inithart() { - int hart = static_cast(r_tp()); // 获取当前 hartid + int hart = static_cast(r_tp()); + + // Enable UART(10) and VirtIO(1) for this Hart (S-Mode) + *REG32(PLIC_SENABLE_ADDR(hart)) = (1 << 10) | 0x1FE; - // Enable UART and VirtIO interrupts for the current Hart's S-Mode - // Set bit 10 and bit 1 in the register bitmap - *reinterpret_cast(PLIC_SENABLE(hart)) = (1 << 10) | (1 << 1); + // Set Priority Threshold to 0 (Allow all) + *REG32(PLIC_STHRESHOLD_ADDR(hart)) = 0; - // Set the current Hart's S-Mode priority threshold to 0 - // Only interrupts with a priority higher than this threshold will be delivered - *reinterpret_cast(PLIC_STHRESHOLD(hart)) = 0; + Drivers::uart_puts("[PLIC] Hart Init Done.\n"); } int claim() { int hart = static_cast(r_tp()); - return *reinterpret_cast(PLIC_SCLAIM(hart)); + return *REG32(PLIC_SCLAIM_ADDR(hart)); } void complete(int irq) { int hart = static_cast(r_tp()); - *reinterpret_cast(PLIC_SCLAIM(hart)) = static_cast(irq); + *REG32(PLIC_SCLAIM_ADDR(hart)) = static_cast(irq); } -} // namespace PILC +} \ No newline at end of file diff --git a/src/drivers/uart.cc b/src/drivers/uart.cc index fe051f8..9475d49 100644 --- a/src/drivers/uart.cc +++ b/src/drivers/uart.cc @@ -1,102 +1,206 @@ #include "drivers/uart.h" -#include "common/types.h" -#include "kernel/config.h" - -// #define UART0_BASE 0x10000000L - -#define UART_RBR 0x00 // Receiver Buffer Register (Read) -#define UART_THR 0x00 // Transmitter Holding Register (Write) -#define UART_IER 0x01 // Interrupt Enable Register -#define UART_FCR 0x02 // FIFO Control Register -#define UART_LCR 0x03 // Line Control Register -#define UART_LSR 0x05 // Line Status Register - -#define UART_LSR_RX_READY 0x01 -#define UART_LSR_TX_EMPTY 0x20 +#include "kernel/riscv.h" +#include "kernel/spinlock.h" +#include "kernel/proc.h" +#include "kernel/mm.h" +#include "lib/string.h" namespace Drivers { - - inline volatile uint8_t ®(uint32_t offset) + // Circular buffer structure + struct { - return *reinterpret_cast(g_uart_base + offset); - } + Spinlock lock; + char buf[UART_RX_BUF_SIZE]; + uint32 r; // read index + uint32 w; // write index + } uart_rx; + + Spinlock uart_tx_lock; void uart_init() { - if (g_uart_base == 0) - return; + uart_rx.lock.init("uart_rx"); + uart_tx_lock.init("uart_tx"); + uart_rx.r = 0; + uart_rx.w = 0; - reg(UART_IER) = 0x00; // Disable interrupt - reg(UART_LCR) = 0x80; // Set baud rate (LATCH bit) - reg(0x00) = 0x03; // LSB - reg(0x01) = 0x00; // MSB - reg(UART_LCR) = 0x03; // 8 bits, no parity, one stop bit - reg(UART_FCR) = 0x07; // Enable FIFO, clear TX/RX queues - } + // Disable interrupts and configure + *(volatile uint8 *)(UART0 + IER) = 0x00; - void uart_putc(char c) - { - if (g_uart_base == 0) - return; + // Enter baud rate setting mode (LCR_DLAB) = 0x80; + *(volatile uint8 *)(UART0 + LCR) = 0x80; + *(volatile uint8 *)(UART0 + 0) = 0x03; // DLL: 38.4K baud + *(volatile uint8 *)(UART0 + 1) = 0x00; // DLM - if (c == '\n') - { - uart_putc('\r'); - } + // Exit baud rate setting, set 8-bit word length, no parity + *(volatile uint8 *)(UART0 + LCR) = 0x03; - // Waiting for the send buffer to be empty - while ((reg(UART_LSR) & UART_LSR_TX_EMPTY) == 0) - ; + // Reset and enable FIFO + *(volatile uint8 *)(UART0 + FCR) = 0x07; - reg(UART_THR) = c; + // Enable Receive Data Available Interrupt + *(volatile uint8 *)(UART0 + IER) = 0x01; } + void uart_putc(char c) + { + uart_tx_lock.acquire(); + while ((*(volatile uint8 *)(UART0 + LSR) & LSR_TX_IDLE) == 0) + ; + *(volatile uint8 *)(UART0 + THR) = c; + uart_tx_lock.release(); + } void uart_puts(const char *s) { while (*s) - { uart_putc(*s++); - } } - void uart_put_int(int value) + void uart_put_int(int val) { - if (value == 0) + char buf[16]; + int i = 0; + if (val == 0) { - uart_putc('0'); + uart_puts("0"); return; } - - if (value < 0) + if (val < 0) { - uart_putc('-'); - value = -value; + uart_puts("-"); + val = -val; } - - char buffer[16]; - int i = 0; - while (value > 0) + while (val > 0) { - buffer[i++] = (value % 10) + '0'; - value /= 10; + buf[i++] = (val % 10) + '0'; + val /= 10; } - while (i > 0) { - uart_putc(buffer[--i]); + uart_putc(buf[--i]); } } - void print_hex(uint64 value) + void print_hex(uint64 val) { + char hex[] = "0123456789ABCDEF"; uart_puts("0x"); - char hex[] = "0123456789abcdef"; - for (int i = 15; i >= 0; i--) + for (int i = 60; i >= 0; i -= 4) { - int nibble = (value >> (i * 4)) & 0xF; - uart_putc(hex[nibble]); + uart_putc(hex[(val >> i) & 0xF]); } } + + void uart_intr() + { + uart_rx.lock.acquire(); + + while (1) + { + if ((*(volatile uint8 *)(UART0 + LSR) & LSR_RX_READY) == 0) + break; + + char c = *(volatile uint8 *)(UART0 + RHR); + + uart_rx.buf[uart_rx.w % UART_RX_BUF_SIZE] = c; + uart_rx.w++; + + ProcManager::wakeup(&uart_rx); + } + + uart_rx.lock.release(); + } + + // Modern console read: Line buffering + Editing Keys + Echo + int console_read(uint64 target, int len) + { + struct Proc *p = myproc(); + int target_idx = 0; + + uart_rx.lock.acquire(); + + while (target_idx < len) + { + while (uart_rx.r == uart_rx.w) + { + if (p->xstate != 0) + { + uart_rx.lock.release(); + return -1; + } + ProcManager::sleep(&uart_rx, &uart_rx.lock); + } + + char c = uart_rx.buf[uart_rx.r % UART_RX_BUF_SIZE]; + uart_rx.r++; + + uart_rx.lock.release(); + + // 1. Handle Backspace (127 or \b) + if (c == 127 || c == '\b') + { + if (target_idx > 0) + { + // Erase character from screen: Backspace, Space, Backspace + uart_putc('\b'); + uart_putc(' '); + uart_putc('\b'); + target_idx--; + } + uart_rx.lock.acquire(); + continue; + } + + // 2. Handle Ctrl+U (Kill Line) + if (c == 0x15) + { + while (target_idx > 0) + { + uart_putc('\b'); + uart_putc(' '); + uart_putc('\b'); + target_idx--; + } + uart_rx.lock.acquire(); + continue; + } + + // 3. Handle Ctrl+L (Clear Screen) + if (c == 0x0C) + { + uart_puts(ANSI_CLEAR); + uart_puts("$ "); + uart_rx.lock.acquire(); + continue; + } + + // 4. Handle Return (CR -> LF) + if (c == '\r') + { + c = '\n'; + } + + // Echo back to user + uart_putc(c); + + if (VM::copyout(p->pagetable, target + target_idx, &c, 1) < 0) + { + return -1; + } + + target_idx++; + + if (c == '\n') + { + return target_idx; + } + + uart_rx.lock.acquire(); + } + + uart_rx.lock.release(); + return target_idx; + } } \ No newline at end of file diff --git a/src/drivers/virtio_dist.cc b/src/drivers/virtio_dist.cc new file mode 100644 index 0000000..99d100f --- /dev/null +++ b/src/drivers/virtio_dist.cc @@ -0,0 +1,338 @@ +#include "drivers/virtio.h" +#include "kernel/riscv.h" +#include "kernel/pmm.h" +#include "kernel/spinlock.h" +#include "lib/string.h" +#include "drivers/uart.h" +#include "kernel/proc.h" + +static uint64 virtio_base = 0x10001000; + +// VirtIO Block Device Config Structure +struct virtio_blk_config +{ + uint64 capacity; + uint32 size_max; + uint32 seg_max; + struct virtio_blk_geometry + { + uint16 cylinders; + uint8 heads; + uint8 sectors; + } geometry; + uint32 blk_size; + uint8 physical_block_exp; + uint8 alignment_offset; + uint16 min_io_size; + uint32 opt_io_size; +} __attribute__((packed)); + +static inline volatile uint32 *REG(uint32 offset) +{ + return reinterpret_cast(virtio_base + offset); +} + +namespace VirtIO +{ + struct Disk + { + struct VRingDesc *desc; + struct VRingAvail *avail; + struct VRingUsed *used; + + int free_head; + int num_free; + int free_chain[NUM_DESCS]; + + uint16 used_idx; + + struct TraceInfo + { + int busy; + int status; + } info[NUM_DESCS]; + + struct BlockRequest reqs[NUM_DESCS]; + uint8 req_status[NUM_DESCS]; + + Spinlock lock; + } disk; + + void init() + { + disk.lock.init("virtio_disk"); + + // 1. Probing for VirtIO-MMIO device + bool found = false; + // Probe common VirtIO addresses in QEMU virt machine + for (uint64 addr = 0x10001000; addr < 0x10009000; addr += 0x1000) + { + volatile uint32 *magic = (volatile uint32 *)(addr + VIRTIO_MMIO_MAGIC_VALUE); + volatile uint32 *dev_id = (volatile uint32 *)(addr + VIRTIO_MMIO_DEVICE_ID); + + if (*magic == 0x74726976 && *dev_id == 2) // ID 2 = Block Device + { + virtio_base = addr; + found = true; + Drivers::uart_puts(ANSI_GREEN "[VirtIO] Found Block Device @ "); + Drivers::print_hex(addr); + Drivers::uart_puts(ANSI_RESET "\n"); + break; + } + } + + if (!found) + { + Drivers::uart_puts(ANSI_RED "[VirtIO] Fatal - No Block Device found.\n" ANSI_RESET); + return; + } + + // 2. Check Device Version (We want Modern v2) + if (*REG(VIRTIO_MMIO_VERSION) != 2) + { + Drivers::uart_puts(ANSI_YELLOW "[VirtIO] Warning: Legacy device detected (expected v2).\n" ANSI_RESET); + } + + // 3. Reset Device + *REG(VIRTIO_MMIO_STATUS) = 0; + + // 4. Set ACKNOWLEDGE & DRIVER status + uint32 status = *REG(VIRTIO_MMIO_STATUS); + status |= VIRTIO_CONFIG_S_ACKNOWLEDGE | VIRTIO_CONFIG_S_DRIVER; + *REG(VIRTIO_MMIO_STATUS) = status; + + // 5. Feature Negotiation + *REG(VIRTIO_MMIO_DEVICE_FEATURES_SEL) = 0; + uint32 device_features_lo = *REG(VIRTIO_MMIO_DEVICE_FEATURES); + (void)device_features_lo; + + *REG(VIRTIO_MMIO_DEVICE_FEATURES_SEL) = 1; + uint32 device_features_hi = *REG(VIRTIO_MMIO_DEVICE_FEATURES); + (void)device_features_hi; + + *REG(VIRTIO_MMIO_DRIVER_FEATURES_SEL) = 0; + *REG(VIRTIO_MMIO_DRIVER_FEATURES) = 0; + + *REG(VIRTIO_MMIO_DRIVER_FEATURES_SEL) = 1; + // VIRTIO_F_VERSION_1 is usually bit 32. + // If not defined in header, we hardcode logic here: (1ULL << 0) for high bits + *REG(VIRTIO_MMIO_DRIVER_FEATURES) = 1; + + status |= VIRTIO_CONFIG_S_FEATURES_OK; + *REG(VIRTIO_MMIO_STATUS) = status; + + if (!(*REG(VIRTIO_MMIO_STATUS) & VIRTIO_CONFIG_S_FEATURES_OK)) + { + Drivers::uart_puts("VirtIO: Feature negotiation failed.\n"); + return; + } + + // 6. Queue Configuration + *REG(VIRTIO_MMIO_QUEUE_SEL) = 0; + if (*REG(VIRTIO_MMIO_QUEUE_READY)) + { + Drivers::uart_puts("VirtIO: Queue 0 not ready.\n"); + } + + uint32 max_queue = *REG(VIRTIO_MMIO_QUEUE_NUM_MAX); + if (max_queue < NUM_DESCS) + { + Drivers::uart_puts("VirtIO: Queue size too small.\n"); + return; + } + + *REG(VIRTIO_MMIO_QUEUE_NUM) = NUM_DESCS; + + // Allocate Memory for VirtQueues + void *ptr = PMM::alloc_pages(1); // 4KB is enough for small rings + memset(ptr, 0, PGSIZE); + + uint64 base_addr = (uint64)ptr; + disk.desc = reinterpret_cast(base_addr); + disk.avail = reinterpret_cast(base_addr + NUM_DESCS * 16); + disk.used = reinterpret_cast(base_addr + PGSIZE / 2); + + *REG(VIRTIO_MMIO_QUEUE_DESC_LOW) = (uint32)base_addr; + *REG(VIRTIO_MMIO_QUEUE_DESC_HIGH) = (uint32)(base_addr >> 32); + + uint64 avail_addr = (uint64)disk.avail; + *REG(VIRTIO_MMIO_QUEUE_DRIVER_LOW) = (uint32)avail_addr; + *REG(VIRTIO_MMIO_QUEUE_DRIVER_HIGH) = (uint32)(avail_addr >> 32); + + uint64 used_addr = (uint64)disk.used; + *REG(VIRTIO_MMIO_QUEUE_DEVICE_LOW) = (uint32)used_addr; + *REG(VIRTIO_MMIO_QUEUE_DEVICE_HIGH) = (uint32)(used_addr >> 32); + + *REG(VIRTIO_MMIO_QUEUE_READY) = 1; + + // 7. Initialize Internal Structures + disk.free_head = 0; + disk.num_free = NUM_DESCS; + disk.used_idx = 0; + for (int i = 0; i < NUM_DESCS; i++) + { + disk.free_chain[i] = i + 1; + disk.info[i].busy = 0; + } + + // 8. Finalize Setup + status |= VIRTIO_CONFIG_S_DRIVER_OK; + *REG(VIRTIO_MMIO_STATUS) = status; + + // === [Feature] Read Capacity === + volatile struct virtio_blk_config *config = (volatile struct virtio_blk_config *)(virtio_base + VIRTIO_MMIO_CONFIG); + uint64 capacity_sectors = config->capacity; + uint64 size_mb = (capacity_sectors * 512) / (1024 * 1024); + + Drivers::uart_puts(ANSI_GREEN "[VirtIO] Initialized. Capacity: "); + Drivers::uart_put_int(size_mb); + Drivers::uart_puts(" MB\n" ANSI_RESET); + } + + static int alloc_desc() + { + if (disk.num_free == 0) + return -1; + int id = disk.free_head; + disk.free_head = disk.free_chain[id]; + disk.num_free--; + return id; + } + + static void free_desc(int id) + { + disk.free_chain[id] = disk.free_head; + disk.free_head = id; + disk.num_free++; + ProcManager::wakeup(&disk.free_head); + } + + static void free_chain_soft(int head_idx) + { + int curr = head_idx; + while (1) + { + int flag = disk.desc[curr].flags; + int next = disk.desc[curr].next; + free_desc(curr); + if (flag & VRING_DESC_F_NEXT) + curr = next; + else + break; + } + } + + void rw(int write, uint64 blockno, char *buf) + { + uint64 sector = blockno * (1024 / 512); // Assume 1KB blocks + + disk.lock.acquire(); + + // Wait for enough descriptors + while (disk.num_free < 3) + { + ProcManager::sleep(&disk.free_head, &disk.lock); + } + + int idx[3]; + idx[0] = alloc_desc(); + idx[1] = alloc_desc(); + idx[2] = alloc_desc(); + + // 1. Request Header + struct BlockRequest *req = &disk.reqs[idx[0]]; + req->type = write ? VIRTIO_BLK_T_OUT : VIRTIO_BLK_T_IN; + req->reserved = 0; + req->sector = sector; + + disk.desc[idx[0]].addr = (uint64)req; + disk.desc[idx[0]].len = sizeof(struct BlockRequest); + disk.desc[idx[0]].flags = VRING_DESC_F_NEXT; + disk.desc[idx[0]].next = idx[1]; + + // 2. Data Buffer + disk.desc[idx[1]].addr = (uint64)buf; + disk.desc[idx[1]].len = 1024; // Fixed 1KB for this test + disk.desc[idx[1]].flags = VRING_DESC_F_NEXT; + if (!write) + disk.desc[idx[1]].flags |= VRING_DESC_F_WRITE; + disk.desc[idx[1]].next = idx[2]; + + // 3. Status Byte + disk.desc[idx[2]].addr = (uint64)&disk.req_status[idx[0]]; + disk.desc[idx[2]].len = 1; + disk.desc[idx[2]].flags = VRING_DESC_F_WRITE; + disk.desc[idx[2]].next = 0; + + disk.info[idx[0]].busy = 1; + + // Submit to Avail Ring + disk.avail->ring[disk.avail->idx % NUM_DESCS] = idx[0]; + __sync_synchronize(); + disk.avail->idx++; + __sync_synchronize(); + + // Notify Device + *REG(VIRTIO_MMIO_QUEUE_NOTIFY) = 0; + + // Wait for Completion + while (disk.info[idx[0]].busy) + { + ProcManager::sleep(&disk.info[idx[0]], &disk.lock); + } + + free_chain_soft(idx[0]); + disk.lock.release(); + } + + void intr() + { + disk.lock.acquire(); + + uint32 status = *REG(VIRTIO_MMIO_INTERRUPT_STATUS); + *REG(VIRTIO_MMIO_INTERRUPT_ACK) = status & 0x3; + + volatile struct VRingUsed *used_ring = (volatile struct VRingUsed *)disk.used; + + while (disk.used_idx != used_ring->idx) + { + int id = used_ring->ring[disk.used_idx % NUM_DESCS].id; + + if (disk.info[id].busy) + { + disk.info[id].busy = 0; + ProcManager::wakeup(&disk.info[id]); + } + disk.used_idx++; + } + + disk.lock.release(); + } + + void test_rw() + { + Drivers::uart_puts(ANSI_BLUE "[VirtIO] Disk Test Start...\n" ANSI_RESET); + + char *buf = (char *)PMM::alloc_page(); + if (!buf) + return; + + const char *msg = "Lume OS Disk Driver Test Pattern"; + strcpy(buf, msg); + + rw(1, 0, buf); // Write + memset(buf, 0, PGSIZE); + rw(0, 0, buf); // Read + + if (strcmp(buf, msg) == 0) + { + Drivers::uart_puts(ANSI_GREEN "[VirtIO] Test PASSED (R/W Verified).\n" ANSI_RESET); + } + else + { + Drivers::uart_puts(ANSI_RED "[VirtIO] Test FAILED.\n" ANSI_RESET); + } + + PMM::free_page(buf); + } +} \ No newline at end of file diff --git a/src/kernel/main.cc b/src/kernel/main.cc index 081ab3e..6e3bdde 100644 --- a/src/kernel/main.cc +++ b/src/kernel/main.cc @@ -1,6 +1,8 @@ #include "common/types.h" #include "kernel/riscv.h" #include "drivers/uart.h" +#include "drivers/plic.h" +#include "drivers/virtio.h" #include "kernel/pmm.h" #include "kernel/mm.h" #include "kernel/proc.h" @@ -8,7 +10,6 @@ #include "kernel/timer.h" #include "kernel/cpu.h" -// 引用外部 FDT 初始化函数 extern void fdt_init(uint64 dtb); extern uint64 g_dtb_addr; @@ -30,6 +31,9 @@ extern "C" void kernel_main(uint64 hartid, uint64 dtb) VM::kvminithart(); // Enable MMU Trap::init(); // Trap Management Trap::inithart(); + PLIC::init(); + PLIC::inithart(); + VirtIO::init(); Timer::init(); ProcManager::init(); // Process Management ProcManager::user_init(); // Initialize first user process @@ -45,6 +49,7 @@ extern "C" void kernel_main(uint64 hartid, uint64 dtb) VM::kvminithart(); Trap::inithart(); + PLIC::inithart(); Timer::init(); Drivers::uart_puts("[Boot] Hart started.\n"); } diff --git a/src/kernel/mm/pmm.cc b/src/kernel/mm/pmm.cc index 09bd65b..3474a49 100644 --- a/src/kernel/mm/pmm.cc +++ b/src/kernel/mm/pmm.cc @@ -9,73 +9,6 @@ extern "C" char kernel_end[]; extern uint64 g_dtb_addr; -// namespace PMM -// { -// struct Run -// { -// struct Run *next; -// }; - -// struct -// { -// struct Run *freelist; -// } kmem; - -// inline uint64_t PGROUNDUP(uint64_t a) -// { -// return (a + PGSIZE - 1) & ~(PGSIZE - 1); -// } - -// void init() -// { -// uint64_t start = PGROUNDUP((uint64_t)kernel_end); - -// Drivers::uart_puts("PMM: Initializing from"); - -// for (uint64_t p = start; p + PGSIZE <= PHYSTOP; p += PGSIZE) -// { -// free_page((void *)p); -// } -// } - -// void free_page(void* pa) -// { -// struct Run *r; -// if (((uint64_t)pa % PGSIZE) != 0 || (uint64_t)pa < (uint64_t)kernel_end || (uint64_t)pa >= PHYSTOP) -// { -// Drivers::uart_puts("PMM: Error - Invalid free address\n"); -// return; -// } -// r = (struct Run*)pa; - -// r->next = kmem.freelist; -// kmem.freelist = r; - -// } - -// void* alloc_page() -// { -// struct Run* r; - -// r = kmem.freelist; -// if (r) -// { -// kmem.freelist = r->next; - -// uint64_t *p = (uint64_t *)r; -// for (int i = 0; i < PGSIZE / 8; i++) -// { -// p[i] = 0; -// } -// } -// else -// { -// Drivers::uart_puts("PMM: Out of memory!\n"); -// } -// return (void *)r; -// } -// } - namespace PMM { // Global metadata array pointer diff --git a/src/kernel/mm/slab.cc b/src/kernel/mm/slab.cc index 370074a..702dc5c 100644 --- a/src/kernel/mm/slab.cc +++ b/src/kernel/mm/slab.cc @@ -19,6 +19,7 @@ struct SlabHeader uint16 used_count; // Number of allocated objects // Followed immediately by object data... // The free list of objects is embedded in the first 2 bytes of the object itself (stores the index of the next object) + uint32 padding; }; struct KmemCache @@ -82,6 +83,7 @@ namespace Slab slab->next = nullptr; slab->used_count = 0; slab->free_idx = 0; + slab->padding = 0; // Initialize the free list of objects // The starting position of each object stores the index of the next object @@ -186,7 +188,7 @@ namespace Slab if (!page) return; - if (!(page->flags & PG_slab)) + if (!page || !(page->flags & PG_slab)) { PMM::free_pages(ptr, page->order); return; @@ -204,6 +206,13 @@ namespace Slab struct SlabHeader *slab = (struct SlabHeader *)PGROUNDDOWN((uint64)ptr); + if ((uint64)ptr < (uint64)(slab + 1) || (uint64)ptr >= (uint64)slab + PGSIZE) + { + Drivers::uart_puts("Slab: kfree invalid pointer\n"); + c->lock.release(); + return; + } + char *base = (char *)(slab + 1); int obj_idx = ((uint64)ptr - (uint64)base) / c->obj_size; diff --git a/src/kernel/mm/vm.cc b/src/kernel/mm/vm.cc index c3c5f01..7057d88 100644 --- a/src/kernel/mm/vm.cc +++ b/src/kernel/mm/vm.cc @@ -360,11 +360,10 @@ namespace VM { kernel_pagetable = uvmcreate(); - kvmmap(0x10000000, 0x10000000, PGSIZE, PTE_R | PTE_W); + kvmmap(0x10000000, 0x10000000, 0x10000, PTE_R | PTE_W); kvmmap(0x0c000000, 0x0c000000, 0x400000, PTE_R | PTE_W); kvmmap(0x02000000, 0x02000000, 0x10000, PTE_R | PTE_W); // CLINT kvmmap(KERNBASE, KERNBASE, PHYSTOP - KERNBASE, PTE_R | PTE_W | PTE_X); - // kvmmap(TRAMPOLINE, (uint64)trampoline, PGSIZE, PTE_R | PTE_X); } void kvminithart() diff --git a/src/kernel/proc/proc.cc b/src/kernel/proc/proc.cc index e99b83d..c8b6d1d 100644 --- a/src/kernel/proc/proc.cc +++ b/src/kernel/proc/proc.cc @@ -471,7 +471,6 @@ namespace ProcManager int wait(uint64 addr) { - (void)addr; struct Proc *np; int havekids, pid; @@ -499,6 +498,11 @@ namespace ProcManager } pid = np->pid; + if (addr != 0 && VM::copyout(p->pagetable, addr, (char *)&np->xstate, sizeof(np->xstate)) < 0) + { + proc_mem_lock.release(); + return -1; + } freeproc(np); proc_mem_lock.release(); return pid; @@ -509,8 +513,33 @@ namespace ProcManager if (!havekids || p->state == ZOMBIE) return -1; - sleep(p, nullptr); + sleep(p, &proc_mem_lock); + } + } + + int growproc(int n) + { + uint64 sz; + struct Proc *p = myproc(); + + sz = p->sz; + + if (n > 0) + { + // Call VM::uvmalloc to allocate memory + // Parameters: page table, old size, new size, permissions (PTE_W) + if ((sz = VM::uvmalloc(p->pagetable, sz, sz + n, PTE_W)) == 0) + { + return -1; + } } + else if (n < 0) + { + sz = VM::uvmdealloc(p->pagetable, sz, sz + n); + } + + p->sz = sz; + return 0; } void create_kernel_thread(void (*func)(), const char *name) diff --git a/src/kernel/syscall.cc b/src/kernel/syscall.cc index 1dfec73..837ac2c 100644 --- a/src/kernel/syscall.cc +++ b/src/kernel/syscall.cc @@ -3,6 +3,7 @@ #include "kernel/proc.h" #include "kernel/riscv.h" #include "drivers/uart.h" +#include "drivers/virtio.h" #include "kernel/timer.h" #include "kernel/mm.h" #include "kernel/trap.h" @@ -124,6 +125,42 @@ static uint64_t sys_write() return static_cast(-1); } +static uint64_t sys_read() +{ + int fd; + int n; + uint64_t p; + + // get param: fd, buf, len + if (argint(0, &fd) < 0 || argint(2, &n) < 0) + return -1; + p = argraw(1); + + if (fd == 0) // stdin + { + return Drivers::console_read(p, n); + } + return -1; +} + +static uint64_t sys_sbrk() +{ + int n; + if (argint(0, &n) < 0) + return -1; + + uint64_t addr = myproc()->sz; + if (ProcManager::growproc(n) < 0) + return -1; + + return addr; +} + +static uint64_t sys_disk_test() +{ + VirtIO::test_rw(); + return 0; +} void syscall() { @@ -131,15 +168,19 @@ void syscall() int num = p->tf->a7; uint64_t ret = static_cast(-1); - Drivers::uart_puts("Syscall: "); - Drivers::print_hex(num); - Drivers::uart_puts("\n"); + /* Just For Debug */ + // Drivers::uart_puts("Syscall: "); + // Drivers::print_hex(num); + // Drivers::uart_puts("\n"); switch (num) { case SYS_write: ret = sys_write(); break; + case SYS_read: + ret = sys_read(); + break; case SYS_putc: ret = sys_putc(); break; @@ -155,6 +196,12 @@ void syscall() case SYS_getpid: ret = sys_getpid(); break; + case SYS_sbrk: + ret = sys_sbrk(); + break; + case SYS_disk_test: + ret = sys_disk_test(); + break; default: Drivers::uart_puts("Unknown Syscall ID: "); Drivers::print_hex(num); diff --git a/src/kernel/trap/handler.cc b/src/kernel/trap/handler.cc index d7f78de..c1626cc 100644 --- a/src/kernel/trap/handler.cc +++ b/src/kernel/trap/handler.cc @@ -6,6 +6,7 @@ #include "kernel/mm.h" #include "kernel/timer.h" #include "drivers/plic.h" +#include "drivers/virtio.h" #include "lib/string.h" @@ -59,20 +60,24 @@ namespace Trap if (is_interrupt && code == 9) { // Supervisor External Interrupt (IRQ 9) - int irq = PILC::claim(); + int irq = PLIC::claim(); if (irq == 10) { - // uart_intr(); + Drivers::uart_intr(); + // Debug + // Drivers::uart_puts("[Interrupt] UART Input detected!\n"); } else if (irq >= 1 && irq <= 8) { - // virtio_disk_intr(); + VirtIO::intr(); + // Debug + // Drivers::uart_puts("[Interrupt] VirtIO disk finished!\n"); } if (irq > 0) { - PILC::complete(irq); + PLIC::complete(irq); } return 1; diff --git a/src/user/entry.S b/src/user/entry.S new file mode 100644 index 0000000..110ebbf --- /dev/null +++ b/src/user/entry.S @@ -0,0 +1,12 @@ +.section .text +.global _start + +_start: + li a0, 0 + li a1, 0 + + call main + + call exit + +1: j 1b \ No newline at end of file diff --git a/src/user/init.cc b/src/user/init.cc index 85252be..1646f6b 100644 --- a/src/user/init.cc +++ b/src/user/init.cc @@ -13,106 +13,175 @@ void print(const char *s) write(1, s, strlen(s)); } -void print_int(int val) +void print_int(int n) { char buf[16]; int i = 0; - if (val == 0) + int neg = 0; + if (n == 0) { - print("0"); + write(1, "0", 1); return; } - if (val < 0) + if (n < 0) { - print("-"); - val = -val; + neg = 1; + n = -n; } - while (val > 0) + while (n > 0) { - buf[i++] = (val % 10) + '0'; - val /= 10; + buf[i++] = (n % 10) + '0'; + n /= 10; } + if (neg) + buf[i++] = '-'; while (i > 0) - { - char c = buf[--i]; - write(1, &c, 1); - } + write(1, &buf[--i], 1); } -void pass() { print(" -> [PASS]\n"); } -void fail() +void print_hex(uint64 n) { - print(" -> [FAIL]\n"); - exit(1); + char buf[16]; + char digits[] = "0123456789ABCDEF"; + write(1, "0x", 2); + if (n == 0) + { + write(1, "0", 1); + return; + } + int i = 0; + while (n > 0) + { + buf[i++] = digits[n % 16]; + n /= 16; + } + while (i > 0) + write(1, &buf[--i], 1); } -int main() +void test_syscalls() { - print("\n=== Lume OS Full Validation ===\n"); - - print("[TEST 1] Write\n"); - print(" System call write is working."); - pass(); - - print("[TEST 2] GetPID\n"); - int parent_pid = getpid(); - print(" Parent PID: "); - print_int(parent_pid); - if (parent_pid > 0) - pass(); + print("\n=== [Test] Starting System Call Check ===\n"); + + print("[1/4] Checking getpid()... "); + int my_pid = getpid(); + if (my_pid > 0) + { + print("PASS (PID="); + print_int(my_pid); + print(")\n"); + } else - fail(); + { + print("FAIL (Invalid PID)\n"); + } + + print("[2/4] Checking sbrk() heap allocation... "); + char *p = sbrk(4096); + if (p == (char *)-1) + { + print("FAIL (sbrk returned error)\n"); + } + else + { + p[0] = 'A'; + p[4095] = 'Z'; + if (p[0] == 'A' && p[4095] == 'Z') + { + print("PASS (Allocated at "); + print_hex((uint64)p); + print(")\n"); + } + else + { + print("FAIL (Memory read/write check failed)\n"); + } + } - print("[TEST 3] Fork, Wait & COW\n"); - int val = 100; + print("[3/4] Checking fork() and wait()...\n"); int pid = fork(); if (pid < 0) { - print(" Fork Failed\n"); - fail(); + print(" FAIL: fork error\n"); } - - if (pid == 0) + else if (pid == 0) { - print(" [Child] PID: "); - print_int(getpid()); - print("\n"); - - if (val != 100) + int child_pid = getpid(); + if (child_pid == my_pid) { - print(" [Child] Data corruption!\n"); + print(" FAIL: Child has same PID as parent\n"); exit(1); } - - val = 200; - print(" [Child] Modified val to 200. Exiting.\n"); + print(" [Child] I am alive. PID="); + print_int(child_pid); + print("\n"); + print(" [Child] Exiting now.\n"); exit(0); } else { - print(" [Parent] Waiting for child...\n"); - int child_pid = wait(0); - - print(" [Parent] Child "); - print_int(child_pid); - print(" exited.\n"); + print(" [Parent] Forked child PID="); + print_int(pid); + print("\n"); + print(" [Parent] Waiting for child...\n"); - print(" [Parent] Check val (Expect 100): "); - print_int(val); + int waited_pid = wait(0); - if (val == 100) - pass(); + if (waited_pid == pid) + { + print(" [Parent] Wait returned correct PID.\n"); + print("PASS (Fork/Wait cycle)\n"); + } else { - print(" [Parent] Memory Isolation Failed! Val="); - print_int(val); - fail(); + print("FAIL (Wait returned "); + print_int(waited_pid); + print(")\n"); } } - print("\n=== All Tests Passed ===\n"); + print("[4/4] Checking write()... PASS (Self-evident)\n"); + + print("=== [Test] All Tests Finished ===\n"); +} + + +int main() +{ + print("\n[Lume Shell] Ready.\n"); + print("Commands:\n"); + print(" s: Run System Call Tests (fork, wait, mm)\n"); + print(" t: Run Disk Driver Test (VirtIO)\n"); + while (1) - ; + { + char buf[16]; + write(1, "$ ", 2); + + int n = read(0, buf, sizeof(buf)); + if (n <= 0) + continue; + + if (buf[0] == 's') + { + test_syscalls(); + } + else if (buf[0] == 't') + { + if (fork() == 0) + { + disk_test(); + exit(0); + } + wait(0); + } + else if (buf[0] != '\n') + { + print("Unknown command.\n"); + } + } + + exit(0); return 0; } \ No newline at end of file diff --git a/src/user/usys.S b/src/user/usys.S index e805d82..65937cc 100644 --- a/src/user/usys.S +++ b/src/user/usys.S @@ -28,4 +28,5 @@ SYSCALL(getpid) SYSCALL(sbrk) SYSCALL(sleep) SYSCALL(uptime) -SYSCALL(putc) \ No newline at end of file +SYSCALL(putc) +SYSCALL(disk_test) \ No newline at end of file -- cgit v1.2.3 From d8eaa13f2efc1eeca4e5f230d5a2d535aaf27338 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Fri, 2 Jan 2026 00:47:16 +0800 Subject: dev(file-system): establish VFS and Read-only FAT32 File System --- build/kernel.elf | Bin 184056 -> 248784 bytes build/src/drivers/virtio_dist.o | Bin 93248 -> 104488 bytes build/src/fs/fat32.o | Bin 0 -> 165984 bytes build/src/fs/file.o | Bin 0 -> 51760 bytes build/src/fs/fs.o | Bin 0 -> 74136 bytes build/src/kernel/bio.o | Bin 0 -> 53432 bytes build/src/kernel/cxx.o | Bin 0 -> 19936 bytes build/src/kernel/initcode.o | Bin 3952 -> 4368 bytes build/src/kernel/main.o | Bin 19608 -> 21336 bytes build/src/kernel/mm/pmm.o | Bin 90424 -> 90360 bytes build/src/kernel/mm/vm.o | Bin 214608 -> 227848 bytes build/src/kernel/proc/proc.o | Bin 212272 -> 221432 bytes build/src/kernel/syscall.o | Bin 61936 -> 91592 bytes build/src/lib/string.o | Bin 27632 -> 31608 bytes build/user/init.o | Bin 112536 -> 121792 bytes build/user/initcode | Bin 2928 -> 3344 bytes build/user/initcode.asm | 1377 +++++++++++++++++++++------------------ build/user/initcode.out | Bin 22440 -> 23808 bytes fs.img | Bin 1048576 -> 33554432 bytes include/common/fcntl.h | 9 + include/drivers/virtio.h | 1 + include/fs/fat32.h | 111 ++++ include/fs/file.h | 35 + include/fs/fs.h | 92 +++ include/fs/stat.h | 22 + include/kernel/buf.h | 30 + include/kernel/elf.h | 46 ++ include/kernel/exec.h | 6 + include/kernel/mm.h | 1 + include/kernel/proc_def.h | 6 + include/lib/string.h | 3 +- src/drivers/virtio_dist.cc | 36 + src/fs/fat32.cc | 325 +++++++++ src/fs/file.cc | 140 ++++ src/fs/fs.cc | 190 ++++++ src/kernel/bio.cc | 135 ++++ src/kernel/cxx.cc | 68 ++ src/kernel/main.cc | 8 + src/kernel/mm/vm.cc | 47 ++ src/kernel/proc/proc.cc | 33 + src/kernel/syscall.cc | 165 ++++- src/lib/string.cc | 13 + src/user/init.cc | 36 +- 43 files changed, 2253 insertions(+), 682 deletions(-) create mode 100644 build/src/fs/fat32.o create mode 100644 build/src/fs/file.o create mode 100644 build/src/fs/fs.o create mode 100644 build/src/kernel/bio.o create mode 100644 build/src/kernel/cxx.o create mode 100644 include/common/fcntl.h create mode 100644 include/fs/fat32.h create mode 100644 include/fs/file.h create mode 100644 include/fs/fs.h create mode 100644 include/fs/stat.h create mode 100644 include/kernel/buf.h create mode 100644 include/kernel/elf.h create mode 100644 include/kernel/exec.h create mode 100644 src/fs/fat32.cc create mode 100644 src/fs/file.cc create mode 100644 src/fs/fs.cc create mode 100644 src/kernel/bio.cc create mode 100644 src/kernel/cxx.cc (limited to 'build/src/kernel/mm') diff --git a/build/kernel.elf b/build/kernel.elf index 902f32b..cf12d9c 100755 Binary files a/build/kernel.elf and b/build/kernel.elf differ diff --git a/build/src/drivers/virtio_dist.o b/build/src/drivers/virtio_dist.o index cc608ca..594b0e7 100644 Binary files a/build/src/drivers/virtio_dist.o and b/build/src/drivers/virtio_dist.o differ diff --git a/build/src/fs/fat32.o b/build/src/fs/fat32.o new file mode 100644 index 0000000..978eb14 Binary files /dev/null and b/build/src/fs/fat32.o differ diff --git a/build/src/fs/file.o b/build/src/fs/file.o new file mode 100644 index 0000000..7dc96e9 Binary files /dev/null and b/build/src/fs/file.o differ diff --git a/build/src/fs/fs.o b/build/src/fs/fs.o new file mode 100644 index 0000000..dd6a386 Binary files /dev/null and b/build/src/fs/fs.o differ diff --git a/build/src/kernel/bio.o b/build/src/kernel/bio.o new file mode 100644 index 0000000..578821b Binary files /dev/null and b/build/src/kernel/bio.o differ diff --git a/build/src/kernel/cxx.o b/build/src/kernel/cxx.o new file mode 100644 index 0000000..a115a07 Binary files /dev/null and b/build/src/kernel/cxx.o differ diff --git a/build/src/kernel/initcode.o b/build/src/kernel/initcode.o index a1c9bd8..0bfbd9e 100644 Binary files a/build/src/kernel/initcode.o and b/build/src/kernel/initcode.o differ diff --git a/build/src/kernel/main.o b/build/src/kernel/main.o index df27b46..6b663cd 100644 Binary files a/build/src/kernel/main.o and b/build/src/kernel/main.o differ diff --git a/build/src/kernel/mm/pmm.o b/build/src/kernel/mm/pmm.o index db30140..b0bdecf 100644 Binary files a/build/src/kernel/mm/pmm.o and b/build/src/kernel/mm/pmm.o differ diff --git a/build/src/kernel/mm/vm.o b/build/src/kernel/mm/vm.o index 5d30dcd..8743310 100644 Binary files a/build/src/kernel/mm/vm.o and b/build/src/kernel/mm/vm.o differ diff --git a/build/src/kernel/proc/proc.o b/build/src/kernel/proc/proc.o index ad606f0..7ae741b 100644 Binary files a/build/src/kernel/proc/proc.o and b/build/src/kernel/proc/proc.o differ diff --git a/build/src/kernel/syscall.o b/build/src/kernel/syscall.o index d398c30..bc3200e 100644 Binary files a/build/src/kernel/syscall.o and b/build/src/kernel/syscall.o differ diff --git a/build/src/lib/string.o b/build/src/lib/string.o index 6d50c43..6818c98 100644 Binary files a/build/src/lib/string.o and b/build/src/lib/string.o differ diff --git a/build/user/init.o b/build/user/init.o index aea18f2..6380026 100644 Binary files a/build/user/init.o and b/build/user/init.o differ diff --git a/build/user/initcode b/build/user/initcode index b6ac9a3..ef0eb5a 100755 Binary files a/build/user/initcode and b/build/user/initcode differ diff --git a/build/user/initcode.asm b/build/user/initcode.asm index 1cb4088..99769f6 100644 --- a/build/user/initcode.asm +++ b/build/user/initcode.asm @@ -15,15 +15,15 @@ _start: 2: 4581 li a1,0 call main - 4: 578000ef jal 57c
+ 4: 57a000ef jal 57e
call exit - 8: 648000ef jal 650 + 8: 706000ef jal 70e c: a001 j c <_start+0xc> 000000000000000e <_Z6strlenPKc>: -// ============================================================= +#include "common/fcntl.h" int strlen(const char *s) { @@ -55,7 +55,7 @@ void print(const char *s) { 32: 85aa mv a1,a0 while (s[n]) - 34: cf89 beqz a5,4e <_Z5printPKc+0x20> + 34: cf91 beqz a5,50 <_Z5printPKc+0x22> 36: 00150693 addi a3,a0,1 3a: 87b6 mv a5,a3 3c: 0007c703 lbu a4,0(a5) @@ -67,987 +67,1070 @@ void print(const char *s) 48: 2605 addiw a2,a2,1 write(1, s, strlen(s)); 4a: 4505 li a0,1 - 4c: a515 j 670 + 4c: 6e20006f j 72e int n = 0; - 4e: 4601 li a2,0 + 50: 4601 li a2,0 write(1, s, strlen(s)); - 50: 4505 li a0,1 - 52: ad39 j 670 + 52: 4505 li a0,1 + 54: ade9 j 72e -0000000000000054 <_Z9print_inti>: +0000000000000056 <_Z9print_inti>: void print_int(int n) { char buf[16]; int i = 0; int neg = 0; if (n == 0) - 54: c149 beqz a0,d6 <_Z9print_inti+0x82> + 56: c149 beqz a0,d8 <_Z9print_inti+0x82> { - 56: 7179 addi sp,sp,-48 - 58: f406 sd ra,40(sp) - 5a: f022 sd s0,32(sp) - 5c: ec26 sd s1,24(sp) + 58: 7179 addi sp,sp,-48 + 5a: f406 sd ra,40(sp) + 5c: f022 sd s0,32(sp) + 5e: ec26 sd s1,24(sp) int neg = 0; - 5e: 4801 li a6,0 + 60: 4801 li a6,0 { write(1, "0", 1); return; } if (n < 0) - 60: 04054c63 bltz a0,b8 <_Z9print_inti+0x64> - 64: 840a mv s0,sp + 62: 04054c63 bltz a0,ba <_Z9print_inti+0x64> + 66: 840a mv s0,sp { neg = 1; - 66: 86a2 mv a3,s0 - 68: 4701 li a4,0 + 68: 86a2 mv a3,s0 + 6a: 4701 li a4,0 n = -n; } while (n > 0) { buf[i++] = (n % 10) + '0'; - 6a: 4629 li a2,10 - 6c: 02c567bb remw a5,a0,a2 + 6c: 4629 li a2,10 + 6e: 02c567bb remw a5,a0,a2 while (n > 0) - 70: 0685 addi a3,a3,1 - 72: 85ba mv a1,a4 + 72: 0685 addi a3,a3,1 + 74: 85ba mv a1,a4 buf[i++] = (n % 10) + '0'; - 74: 2705 addiw a4,a4,1 + 76: 2705 addiw a4,a4,1 n /= 10; - 76: 02c5453b divw a0,a0,a2 + 78: 02c5453b divw a0,a0,a2 buf[i++] = (n % 10) + '0'; - 7a: 0307879b addiw a5,a5,48 - 7e: fef68fa3 sb a5,-1(a3) + 7c: 0307879b addiw a5,a5,48 + 80: fef68fa3 sb a5,-1(a3) while (n > 0) - 82: f56d bnez a0,6c <_Z9print_inti+0x18> + 84: f56d bnez a0,6e <_Z9print_inti+0x18> } if (neg) - 84: 02081e63 bnez a6,c0 <_Z9print_inti+0x6c> - 88: fff7079b addiw a5,a4,-1 - 8c: ffe40493 addi s1,s0,-2 - 90: 1782 slli a5,a5,0x20 - 92: fff70693 addi a3,a4,-1 - 96: 94ba add s1,s1,a4 - 98: 9381 srli a5,a5,0x20 - 9a: 9436 add s0,s0,a3 - 9c: 8c9d sub s1,s1,a5 + 86: 02081e63 bnez a6,c2 <_Z9print_inti+0x6c> + 8a: fff7079b addiw a5,a4,-1 + 8e: ffe40493 addi s1,s0,-2 + 92: 1782 slli a5,a5,0x20 + 94: fff70693 addi a3,a4,-1 + 98: 94ba add s1,s1,a4 + 9a: 9381 srli a5,a5,0x20 + 9c: 9436 add s0,s0,a3 + 9e: 8c9d sub s1,s1,a5 buf[i++] = '-'; while (i > 0) write(1, &buf[--i], 1); - 9e: 85a2 mv a1,s0 - a0: 4605 li a2,1 - a2: 4505 li a0,1 + a0: 85a2 mv a1,s0 + a2: 4605 li a2,1 + a4: 4505 li a0,1 while (i > 0) - a4: 147d addi s0,s0,-1 + a6: 147d addi s0,s0,-1 write(1, &buf[--i], 1); - a6: 5ca000ef jal 670 + a8: 686000ef jal 72e while (i > 0) - aa: fe849ae3 bne s1,s0,9e <_Z9print_inti+0x4a> + ac: fe849ae3 bne s1,s0,a0 <_Z9print_inti+0x4a> } - ae: 70a2 ld ra,40(sp) - b0: 7402 ld s0,32(sp) - b2: 64e2 ld s1,24(sp) - b4: 6145 addi sp,sp,48 - b6: 8082 ret + b0: 70a2 ld ra,40(sp) + b2: 7402 ld s0,32(sp) + b4: 64e2 ld s1,24(sp) + b6: 6145 addi sp,sp,48 + b8: 8082 ret n = -n; - b8: 40a0053b negw a0,a0 + ba: 40a0053b negw a0,a0 neg = 1; - bc: 4805 li a6,1 - be: b75d j 64 <_Z9print_inti+0x10> + be: 4805 li a6,1 + c0: b75d j 66 <_Z9print_inti+0x10> buf[i++] = '-'; - c0: 01070793 addi a5,a4,16 - c4: 00278733 add a4,a5,sp - c8: 02d00793 li a5,45 - cc: fef70823 sb a5,-16(a4) - d0: 0025871b addiw a4,a1,2 - d4: bf55 j 88 <_Z9print_inti+0x34> + c2: 01070793 addi a5,a4,16 + c6: 00278733 add a4,a5,sp + ca: 02d00793 li a5,45 + ce: fef70823 sb a5,-16(a4) + d2: 0025871b addiw a4,a1,2 + d6: bf55 j 8a <_Z9print_inti+0x34> write(1, "0", 1); - d6: 4605 li a2,1 - d8: 00000597 auipc a1,0x0 - dc: 62858593 addi a1,a1,1576 # 700 - e0: 4505 li a0,1 - e2: a379 j 670 + d8: 4605 li a2,1 + da: 00000597 auipc a1,0x0 + de: 6e658593 addi a1,a1,1766 # 7c0 + e2: 4505 li a0,1 + e4: a5a9 j 72e -00000000000000e4 <_Z9print_hexy>: +00000000000000e6 <_Z9print_hexy>: void print_hex(uint64 n) { char buf[16]; char digits[] = "0123456789ABCDEF"; - e4: 00000797 auipc a5,0x0 - e8: 62c78793 addi a5,a5,1580 # 710 - ec: 6394 ld a3,0(a5) - ee: 6798 ld a4,8(a5) - f0: 0107c783 lbu a5,16(a5) + e6: 00000797 auipc a5,0x0 + ea: 6ea78793 addi a5,a5,1770 # 7d0 + ee: 6394 ld a3,0(a5) + f0: 6798 ld a4,8(a5) + f2: 0107c783 lbu a5,16(a5) { - f4: 715d addi sp,sp,-80 - f6: fc26 sd s1,56(sp) + f6: 715d addi sp,sp,-80 + f8: fc26 sd s1,56(sp) write(1, "0x", 2); - f8: 4609 li a2,2 + fa: 4609 li a2,2 { - fa: 84aa mv s1,a0 + fc: 84aa mv s1,a0 write(1, "0x", 2); - fc: 00000597 auipc a1,0x0 - 100: 60c58593 addi a1,a1,1548 # 708 - 104: 4505 li a0,1 + fe: 00000597 auipc a1,0x0 + 102: 6ca58593 addi a1,a1,1738 # 7c8 + 106: 4505 li a0,1 { - 106: e486 sd ra,72(sp) + 108: e486 sd ra,72(sp) char digits[] = "0123456789ABCDEF"; - 108: ec36 sd a3,24(sp) - 10a: f03a sd a4,32(sp) - 10c: 02f10423 sb a5,40(sp) + 10a: ec36 sd a3,24(sp) + 10c: f03a sd a4,32(sp) + 10e: 02f10423 sb a5,40(sp) write(1, "0x", 2); - 110: 560000ef jal 670 + 112: 61c000ef jal 72e if (n == 0) - 114: cca1 beqz s1,16c <_Z9print_hexy+0x88> - 116: e0a2 sd s0,64(sp) - 118: 0020 addi s0,sp,8 - 11a: 87a2 mv a5,s0 + 116: cca1 beqz s1,16e <_Z9print_hexy+0x88> + 118: e0a2 sd s0,64(sp) + 11a: 0020 addi s0,sp,8 + 11c: 87a2 mv a5,s0 return; } int i = 0; while (n > 0) { buf[i++] = digits[n % 16]; - 11c: 00f4f713 andi a4,s1,15 - 120: 03070713 addi a4,a4,48 - 124: 970a add a4,a4,sp - 126: fe874683 lbu a3,-24(a4) + 11e: 00f4f713 andi a4,s1,15 + 122: 03070713 addi a4,a4,48 + 126: 970a add a4,a4,sp + 128: fe874683 lbu a3,-24(a4) n /= 16; - 12a: 8091 srli s1,s1,0x4 - 12c: 873e mv a4,a5 + 12c: 8091 srli s1,s1,0x4 + 12e: 873e mv a4,a5 buf[i++] = digits[n % 16]; - 12e: 00d78023 sb a3,0(a5) + 130: 00d78023 sb a3,0(a5) while (n > 0) - 132: 0785 addi a5,a5,1 - 134: f4e5 bnez s1,11c <_Z9print_hexy+0x38> - 136: 9f01 subw a4,a4,s0 - 138: 0017079b addiw a5,a4,1 - 13c: fff7871b addiw a4,a5,-1 - 140: ffe40493 addi s1,s0,-2 - 144: 1702 slli a4,a4,0x20 - 146: fff78693 addi a3,a5,-1 - 14a: 94be add s1,s1,a5 - 14c: 9301 srli a4,a4,0x20 - 14e: 9436 add s0,s0,a3 - 150: 8c99 sub s1,s1,a4 + 134: 0785 addi a5,a5,1 + 136: f4e5 bnez s1,11e <_Z9print_hexy+0x38> + 138: 9f01 subw a4,a4,s0 + 13a: 0017079b addiw a5,a4,1 + 13e: fff7871b addiw a4,a5,-1 + 142: ffe40493 addi s1,s0,-2 + 146: 1702 slli a4,a4,0x20 + 148: fff78693 addi a3,a5,-1 + 14c: 94be add s1,s1,a5 + 14e: 9301 srli a4,a4,0x20 + 150: 9436 add s0,s0,a3 + 152: 8c99 sub s1,s1,a4 } while (i > 0) write(1, &buf[--i], 1); - 152: 85a2 mv a1,s0 - 154: 4605 li a2,1 - 156: 4505 li a0,1 + 154: 85a2 mv a1,s0 + 156: 4605 li a2,1 + 158: 4505 li a0,1 while (i > 0) - 158: 147d addi s0,s0,-1 + 15a: 147d addi s0,s0,-1 write(1, &buf[--i], 1); - 15a: 516000ef jal 670 + 15c: 5d2000ef jal 72e while (i > 0) - 15e: fe941ae3 bne s0,s1,152 <_Z9print_hexy+0x6e> - 162: 6406 ld s0,64(sp) + 160: fe941ae3 bne s0,s1,154 <_Z9print_hexy+0x6e> + 164: 6406 ld s0,64(sp) } - 164: 60a6 ld ra,72(sp) - 166: 74e2 ld s1,56(sp) - 168: 6161 addi sp,sp,80 - 16a: 8082 ret - 16c: 60a6 ld ra,72(sp) - 16e: 74e2 ld s1,56(sp) + 166: 60a6 ld ra,72(sp) + 168: 74e2 ld s1,56(sp) + 16a: 6161 addi sp,sp,80 + 16c: 8082 ret + 16e: 60a6 ld ra,72(sp) + 170: 74e2 ld s1,56(sp) write(1, "0", 1); - 170: 4605 li a2,1 - 172: 00000597 auipc a1,0x0 - 176: 58e58593 addi a1,a1,1422 # 700 - 17a: 4505 li a0,1 + 172: 4605 li a2,1 + 174: 00000597 auipc a1,0x0 + 178: 64c58593 addi a1,a1,1612 # 7c0 + 17c: 4505 li a0,1 } - 17c: 6161 addi sp,sp,80 + 17e: 6161 addi sp,sp,80 write(1, "0", 1); - 17e: a9cd j 670 + 180: a37d j 72e -0000000000000180 <_Z13test_syscallsv>: -// ============================================================= -// 系统调用测试套件 -// ============================================================= +0000000000000182 <_Z13test_syscallsv>: void test_syscalls() { - 180: 1101 addi sp,sp,-32 - 182: 00000697 auipc a3,0x0 - 186: 5a668693 addi a3,a3,1446 # 728 - 18a: ec06 sd ra,24(sp) - 18c: e822 sd s0,16(sp) - 18e: e426 sd s1,8(sp) - 190: 87b6 mv a5,a3 + 182: 1101 addi sp,sp,-32 + 184: 00000697 auipc a3,0x0 + 188: 66468693 addi a3,a3,1636 # 7e8 + 18c: ec06 sd ra,24(sp) + 18e: e822 sd s0,16(sp) + 190: e426 sd s1,8(sp) + 192: 87b6 mv a5,a3 while (s[n]) - 192: 0017c703 lbu a4,1(a5) - 196: 863e mv a2,a5 - 198: 0785 addi a5,a5,1 - 19a: ff65 bnez a4,192 <_Z13test_syscallsv+0x12> + 194: 0017c703 lbu a4,1(a5) + 198: 863e mv a2,a5 + 19a: 0785 addi a5,a5,1 + 19c: ff65 bnez a4,194 <_Z13test_syscallsv+0x12> n++; - 19c: 9e15 subw a2,a2,a3 + 19e: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 19e: 2605 addiw a2,a2,1 - 1a0: 00000597 auipc a1,0x0 - 1a4: 58858593 addi a1,a1,1416 # 728 - 1a8: 4505 li a0,1 - 1aa: 4c6000ef jal 670 + 1a0: 2605 addiw a2,a2,1 + 1a2: 00000597 auipc a1,0x0 + 1a6: 64658593 addi a1,a1,1606 # 7e8 + 1aa: 4505 li a0,1 + 1ac: 582000ef jal 72e while (s[n]) - 1ae: 00000697 auipc a3,0x0 - 1b2: 5aa68693 addi a3,a3,1450 # 758 + 1b0: 00000697 auipc a3,0x0 + 1b4: 66868693 addi a3,a3,1640 # 818 write(1, s, strlen(s)); - 1b6: 87b6 mv a5,a3 + 1b8: 87b6 mv a5,a3 while (s[n]) - 1b8: 0017c703 lbu a4,1(a5) - 1bc: 863e mv a2,a5 - 1be: 0785 addi a5,a5,1 - 1c0: ff65 bnez a4,1b8 <_Z13test_syscallsv+0x38> + 1ba: 0017c703 lbu a4,1(a5) + 1be: 863e mv a2,a5 + 1c0: 0785 addi a5,a5,1 + 1c2: ff65 bnez a4,1ba <_Z13test_syscallsv+0x38> n++; - 1c2: 9e15 subw a2,a2,a3 + 1c4: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 1c4: 2605 addiw a2,a2,1 - 1c6: 00000597 auipc a1,0x0 - 1ca: 59258593 addi a1,a1,1426 # 758 - 1ce: 4505 li a0,1 - 1d0: 4a0000ef jal 670 + 1c6: 2605 addiw a2,a2,1 + 1c8: 00000597 auipc a1,0x0 + 1cc: 65058593 addi a1,a1,1616 # 818 + 1d0: 4505 li a0,1 + 1d2: 55c000ef jal 72e print("\n=== [Test] Starting System Call Check ===\n"); - // 1. 测试 getpid print("[1/4] Checking getpid()... "); int my_pid = getpid(); - 1d4: 4fc000ef jal 6d0 - 1d8: 842a mv s0,a0 + 1d6: 5b8000ef jal 78e + 1da: 842a mv s0,a0 if (my_pid > 0) - 1da: 2aa05463 blez a0,482 <_Z13test_syscallsv+0x302> - 1de: 00000697 auipc a3,0x0 - 1e2: 59a68693 addi a3,a3,1434 # 778 - 1e6: 87b6 mv a5,a3 + 1dc: 2aa05463 blez a0,484 <_Z13test_syscallsv+0x302> + 1e0: 00000697 auipc a3,0x0 + 1e4: 65868693 addi a3,a3,1624 # 838 + 1e8: 87b6 mv a5,a3 while (s[n]) - 1e8: 0017c703 lbu a4,1(a5) - 1ec: 863e mv a2,a5 - 1ee: 0785 addi a5,a5,1 - 1f0: ff65 bnez a4,1e8 <_Z13test_syscallsv+0x68> + 1ea: 0017c703 lbu a4,1(a5) + 1ee: 863e mv a2,a5 + 1f0: 0785 addi a5,a5,1 + 1f2: ff65 bnez a4,1ea <_Z13test_syscallsv+0x68> n++; - 1f2: 9e15 subw a2,a2,a3 + 1f4: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 1f4: 2605 addiw a2,a2,1 - 1f6: 00000597 auipc a1,0x0 - 1fa: 58258593 addi a1,a1,1410 # 778 - 1fe: 4505 li a0,1 - 200: 470000ef jal 670 + 1f6: 2605 addiw a2,a2,1 + 1f8: 00000597 auipc a1,0x0 + 1fc: 64058593 addi a1,a1,1600 # 838 + 200: 4505 li a0,1 + 202: 52c000ef jal 72e { print("PASS (PID="); print_int(my_pid); - 204: 8522 mv a0,s0 - 206: e4fff0ef jal 54 <_Z9print_inti> + 206: 8522 mv a0,s0 + 208: e4fff0ef jal 56 <_Z9print_inti> while (s[n]) - 20a: 00000697 auipc a3,0x0 - 20e: 57e68693 addi a3,a3,1406 # 788 + 20c: 00000697 auipc a3,0x0 + 210: 63c68693 addi a3,a3,1596 # 848 print_int(my_pid); - 212: 87b6 mv a5,a3 + 214: 87b6 mv a5,a3 while (s[n]) - 214: 0017c703 lbu a4,1(a5) - 218: 863e mv a2,a5 - 21a: 0785 addi a5,a5,1 - 21c: ff65 bnez a4,214 <_Z13test_syscallsv+0x94> + 216: 0017c703 lbu a4,1(a5) + 21a: 863e mv a2,a5 + 21c: 0785 addi a5,a5,1 + 21e: ff65 bnez a4,216 <_Z13test_syscallsv+0x94> n++; - 21e: 9e15 subw a2,a2,a3 + 220: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 220: 2605 addiw a2,a2,1 - 222: 00000597 auipc a1,0x0 - 226: 56658593 addi a1,a1,1382 # 788 - 22a: 4505 li a0,1 - 22c: 444000ef jal 670 + 222: 2605 addiw a2,a2,1 + 224: 00000597 auipc a1,0x0 + 228: 62458593 addi a1,a1,1572 # 848 + 22c: 4505 li a0,1 + 22e: 500000ef jal 72e while (s[n]) - 230: 00000697 auipc a3,0x0 - 234: 57868693 addi a3,a3,1400 # 7a8 + 232: 00000697 auipc a3,0x0 + 236: 63668693 addi a3,a3,1590 # 868 if (my_pid > 0) - 238: 87b6 mv a5,a3 + 23a: 87b6 mv a5,a3 while (s[n]) - 23a: 0017c703 lbu a4,1(a5) - 23e: 863e mv a2,a5 - 240: 0785 addi a5,a5,1 - 242: ff65 bnez a4,23a <_Z13test_syscallsv+0xba> + 23c: 0017c703 lbu a4,1(a5) + 240: 863e mv a2,a5 + 242: 0785 addi a5,a5,1 + 244: ff65 bnez a4,23c <_Z13test_syscallsv+0xba> n++; - 244: 9e15 subw a2,a2,a3 + 246: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 246: 2605 addiw a2,a2,1 - 248: 00000597 auipc a1,0x0 - 24c: 56058593 addi a1,a1,1376 # 7a8 - 250: 4505 li a0,1 - 252: 41e000ef jal 670 + 248: 2605 addiw a2,a2,1 + 24a: 00000597 auipc a1,0x0 + 24e: 61e58593 addi a1,a1,1566 # 868 + 252: 4505 li a0,1 + 254: 4da000ef jal 72e + { print("FAIL (Invalid PID)\n"); } - // 2. 测试 sbrk (内存分配) print("[2/4] Checking sbrk() heap allocation... "); - char *p = sbrk(4096); // 分配 4KB - 256: 6505 lui a0,0x1 - 258: 480000ef jal 6d8 + char *p = sbrk(4096); + 258: 6505 lui a0,0x1 + 25a: 53c000ef jal 796 if (p == (char *)-1) - 25c: 57fd li a5,-1 - char *p = sbrk(4096); // 分配 4KB - 25e: 84aa mv s1,a0 + 25e: 57fd li a5,-1 + char *p = sbrk(4096); + 260: 84aa mv s1,a0 if (p == (char *)-1) - 260: 24f50563 beq a0,a5,4aa <_Z13test_syscallsv+0x32a> + 262: 24f50563 beq a0,a5,4ac <_Z13test_syscallsv+0x32a> + { print("FAIL (sbrk returned error)\n"); } else { - // 写入测试,确保映射了物理页 p[0] = 'A'; - 264: 04100793 li a5,65 - 268: 00f50023 sb a5,0(a0) # 1000 + 266: 04100793 li a5,65 + 26a: 00f50023 sb a5,0(a0) # 1000 p[4095] = 'Z'; - 26c: 6785 lui a5,0x1 - 26e: 97aa add a5,a5,a0 - 270: 00000697 auipc a3,0x0 - 274: 58868693 addi a3,a3,1416 # 7f8 - 278: 05a00713 li a4,90 - 27c: fee78fa3 sb a4,-1(a5) # fff - 280: 87b6 mv a5,a3 + 26e: 6785 lui a5,0x1 + 270: 97aa add a5,a5,a0 + 272: 00000697 auipc a3,0x0 + 276: 64668693 addi a3,a3,1606 # 8b8 + 27a: 05a00713 li a4,90 + 27e: fee78fa3 sb a4,-1(a5) # fff + 282: 87b6 mv a5,a3 while (s[n]) - 282: 0017c703 lbu a4,1(a5) - 286: 863e mv a2,a5 - 288: 0785 addi a5,a5,1 - 28a: ff65 bnez a4,282 <_Z13test_syscallsv+0x102> + 284: 0017c703 lbu a4,1(a5) + 288: 863e mv a2,a5 + 28a: 0785 addi a5,a5,1 + 28c: ff65 bnez a4,284 <_Z13test_syscallsv+0x102> n++; - 28c: 9e15 subw a2,a2,a3 + 28e: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 28e: 2605 addiw a2,a2,1 - 290: 00000597 auipc a1,0x0 - 294: 56858593 addi a1,a1,1384 # 7f8 - 298: 4505 li a0,1 - 29a: 3d6000ef jal 670 + 290: 2605 addiw a2,a2,1 + 292: 00000597 auipc a1,0x0 + 296: 62658593 addi a1,a1,1574 # 8b8 + 29a: 4505 li a0,1 + 29c: 492000ef jal 72e if (p[0] == 'A' && p[4095] == 'Z') { print("PASS (Allocated at "); print_hex((uint64)p); - 29e: 8526 mv a0,s1 - 2a0: e45ff0ef jal e4 <_Z9print_hexy> + 2a0: 8526 mv a0,s1 + 2a2: e45ff0ef jal e6 <_Z9print_hexy> while (s[n]) - 2a4: 00000697 auipc a3,0x0 - 2a8: 4e468693 addi a3,a3,1252 # 788 + 2a6: 00000697 auipc a3,0x0 + 2aa: 5a268693 addi a3,a3,1442 # 848 print_hex((uint64)p); - 2ac: 87b6 mv a5,a3 + 2ae: 87b6 mv a5,a3 while (s[n]) - 2ae: 0017c703 lbu a4,1(a5) - 2b2: 863e mv a2,a5 - 2b4: 0785 addi a5,a5,1 - 2b6: ff65 bnez a4,2ae <_Z13test_syscallsv+0x12e> + 2b0: 0017c703 lbu a4,1(a5) + 2b4: 863e mv a2,a5 + 2b6: 0785 addi a5,a5,1 + 2b8: ff65 bnez a4,2b0 <_Z13test_syscallsv+0x12e> n++; - 2b8: 9e15 subw a2,a2,a3 + 2ba: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 2ba: 2605 addiw a2,a2,1 - 2bc: 00000597 auipc a1,0x0 - 2c0: 4cc58593 addi a1,a1,1228 # 788 - 2c4: 4505 li a0,1 - 2c6: 3aa000ef jal 670 + 2bc: 2605 addiw a2,a2,1 + 2be: 00000597 auipc a1,0x0 + 2c2: 58a58593 addi a1,a1,1418 # 848 + 2c6: 4505 li a0,1 + 2c8: 466000ef jal 72e while (s[n]) - 2ca: 00000697 auipc a3,0x0 - 2ce: 54668693 addi a3,a3,1350 # 810 + 2cc: 00000697 auipc a3,0x0 + 2d0: 60468693 addi a3,a3,1540 # 8d0 print_hex((uint64)p); - 2d2: 87b6 mv a5,a3 + 2d4: 87b6 mv a5,a3 while (s[n]) - 2d4: 0017c703 lbu a4,1(a5) - 2d8: 863e mv a2,a5 - 2da: 0785 addi a5,a5,1 - 2dc: ff65 bnez a4,2d4 <_Z13test_syscallsv+0x154> + 2d6: 0017c703 lbu a4,1(a5) + 2da: 863e mv a2,a5 + 2dc: 0785 addi a5,a5,1 + 2de: ff65 bnez a4,2d6 <_Z13test_syscallsv+0x154> n++; - 2de: 9e15 subw a2,a2,a3 + 2e0: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 2e0: 2605 addiw a2,a2,1 - 2e2: 00000597 auipc a1,0x0 - 2e6: 52e58593 addi a1,a1,1326 # 810 - 2ea: 4505 li a0,1 - 2ec: 384000ef jal 670 + 2e2: 2605 addiw a2,a2,1 + 2e4: 00000597 auipc a1,0x0 + 2e8: 5ec58593 addi a1,a1,1516 # 8d0 + 2ec: 4505 li a0,1 + 2ee: 440000ef jal 72e + print("FAIL (Memory read/write check failed)\n"); } } - // 3. 测试 fork 和 wait print("[3/4] Checking fork() and wait()...\n"); int pid = fork(); - 2f0: 358000ef jal 648 - 2f4: 84aa mv s1,a0 + 2f2: 414000ef jal 706 + 2f6: 84aa mv s1,a0 if (pid < 0) - 2f6: 1c054e63 bltz a0,4d2 <_Z13test_syscallsv+0x352> + 2f8: 1c054e63 bltz a0,4d4 <_Z13test_syscallsv+0x352> { print(" FAIL: fork error\n"); } else if (pid == 0) - 2fa: e179 bnez a0,3c0 <_Z13test_syscallsv+0x240> + 2fc: e179 bnez a0,3c2 <_Z13test_syscallsv+0x240> { - // --- 子进程 --- int child_pid = getpid(); - 2fc: 3d4000ef jal 6d0 - 300: 84aa mv s1,a0 + 2fe: 490000ef jal 78e + 302: 84aa mv s1,a0 if (child_pid == my_pid) - 302: 24a40563 beq s0,a0,54c <_Z13test_syscallsv+0x3cc> + 304: 24a40563 beq s0,a0,54e <_Z13test_syscallsv+0x3cc> while (s[n]) - 306: 00000697 auipc a3,0x0 - 30a: 57a68693 addi a3,a3,1402 # 880 + 308: 00000697 auipc a3,0x0 + 30c: 63868693 addi a3,a3,1592 # 940 if (child_pid == my_pid) - 30e: 87b6 mv a5,a3 + 310: 87b6 mv a5,a3 while (s[n]) - 310: 0017c703 lbu a4,1(a5) - 314: 863e mv a2,a5 - 316: 0785 addi a5,a5,1 - 318: ff65 bnez a4,310 <_Z13test_syscallsv+0x190> + 312: 0017c703 lbu a4,1(a5) + 316: 863e mv a2,a5 + 318: 0785 addi a5,a5,1 + 31a: ff65 bnez a4,312 <_Z13test_syscallsv+0x190> n++; - 31a: 9e15 subw a2,a2,a3 + 31c: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 31c: 2605 addiw a2,a2,1 - 31e: 00000597 auipc a1,0x0 - 322: 56258593 addi a1,a1,1378 # 880 - 326: 4505 li a0,1 - 328: 348000ef jal 670 + 31e: 2605 addiw a2,a2,1 + 320: 00000597 auipc a1,0x0 + 324: 62058593 addi a1,a1,1568 # 940 + 328: 4505 li a0,1 + 32a: 404000ef jal 72e { print(" FAIL: Child has same PID as parent\n"); exit(1); } print(" [Child] I am alive. PID="); print_int(child_pid); - 32c: 8526 mv a0,s1 - 32e: d27ff0ef jal 54 <_Z9print_inti> + 32e: 8526 mv a0,s1 + 330: d27ff0ef jal 56 <_Z9print_inti> write(1, s, strlen(s)); - 332: 4605 li a2,1 - 334: 00000597 auipc a1,0x0 - 338: 56c58593 addi a1,a1,1388 # 8a0 - 33c: 4505 li a0,1 - 33e: 332000ef jal 670 + 334: 4605 li a2,1 + 336: 00000597 auipc a1,0x0 + 33a: 62a58593 addi a1,a1,1578 # 960 + 33e: 4505 li a0,1 + 340: 3ee000ef jal 72e while (s[n]) - 342: 00000697 auipc a3,0x0 - 346: 56668693 addi a3,a3,1382 # 8a8 + 344: 00000697 auipc a3,0x0 + 348: 62468693 addi a3,a3,1572 # 968 write(1, s, strlen(s)); - 34a: 87b6 mv a5,a3 + 34c: 87b6 mv a5,a3 while (s[n]) - 34c: 0017c703 lbu a4,1(a5) - 350: 863e mv a2,a5 - 352: 0785 addi a5,a5,1 - 354: ff65 bnez a4,34c <_Z13test_syscallsv+0x1cc> + 34e: 0017c703 lbu a4,1(a5) + 352: 863e mv a2,a5 + 354: 0785 addi a5,a5,1 + 356: ff65 bnez a4,34e <_Z13test_syscallsv+0x1cc> n++; - 356: 9e15 subw a2,a2,a3 + 358: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 358: 2605 addiw a2,a2,1 - 35a: 00000597 auipc a1,0x0 - 35e: 54e58593 addi a1,a1,1358 # 8a8 - 362: 4505 li a0,1 - 364: 30c000ef jal 670 + 35a: 2605 addiw a2,a2,1 + 35c: 00000597 auipc a1,0x0 + 360: 60c58593 addi a1,a1,1548 # 968 + 364: 4505 li a0,1 + 366: 3c8000ef jal 72e print("\n"); print(" [Child] Exiting now.\n"); exit(0); - 368: 4501 li a0,0 - 36a: 2e6000ef jal 650 + 36a: 4501 li a0,0 + 36c: 3a2000ef jal 70e while (s[n]) - 36e: 00000697 auipc a3,0x0 - 372: 60a68693 addi a3,a3,1546 # 978 + 370: 00000697 auipc a3,0x0 + 374: 6c868693 addi a3,a3,1736 # a38 print("PASS (Fork/Wait cycle)\n"); } else { print("FAIL (Wait returned "); print_int(waited_pid); - 376: 87b6 mv a5,a3 + 378: 87b6 mv a5,a3 while (s[n]) - 378: 0017c703 lbu a4,1(a5) - 37c: 863e mv a2,a5 - 37e: 0785 addi a5,a5,1 - 380: ff65 bnez a4,378 <_Z13test_syscallsv+0x1f8> + 37a: 0017c703 lbu a4,1(a5) + 37e: 863e mv a2,a5 + 380: 0785 addi a5,a5,1 + 382: ff65 bnez a4,37a <_Z13test_syscallsv+0x1f8> n++; - 382: 9e15 subw a2,a2,a3 + 384: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 384: 2605 addiw a2,a2,1 - 386: 00000597 auipc a1,0x0 - 38a: 5f258593 addi a1,a1,1522 # 978 - 38e: 4505 li a0,1 - 390: 2e0000ef jal 670 + 386: 2605 addiw a2,a2,1 + 388: 00000597 auipc a1,0x0 + 38c: 6b058593 addi a1,a1,1712 # a38 + 390: 4505 li a0,1 + 392: 39c000ef jal 72e while (s[n]) - 394: 00000697 auipc a3,0x0 - 398: 61468693 addi a3,a3,1556 # 9a8 + 396: 00000697 auipc a3,0x0 + 39a: 6d268693 addi a3,a3,1746 # a68 write(1, s, strlen(s)); - 39c: 87b6 mv a5,a3 + 39e: 87b6 mv a5,a3 while (s[n]) - 39e: 0017c703 lbu a4,1(a5) - 3a2: 863e mv a2,a5 - 3a4: 0785 addi a5,a5,1 - 3a6: ff65 bnez a4,39e <_Z13test_syscallsv+0x21e> + 3a0: 0017c703 lbu a4,1(a5) + 3a4: 863e mv a2,a5 + 3a6: 0785 addi a5,a5,1 + 3a8: ff65 bnez a4,3a0 <_Z13test_syscallsv+0x21e> + } - // 4. 测试 write (如果是能看到这些输出,说明 write 已经正常了) print("[4/4] Checking write()... PASS (Self-evident)\n"); print("=== [Test] All Tests Finished ===\n"); } - 3a8: 6442 ld s0,16(sp) - 3aa: 60e2 ld ra,24(sp) - 3ac: 64a2 ld s1,8(sp) + 3aa: 6442 ld s0,16(sp) + 3ac: 60e2 ld ra,24(sp) + 3ae: 64a2 ld s1,8(sp) n++; - 3ae: 9e15 subw a2,a2,a3 + 3b0: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 3b0: 2605 addiw a2,a2,1 - 3b2: 00000597 auipc a1,0x0 - 3b6: 5f658593 addi a1,a1,1526 # 9a8 - 3ba: 4505 li a0,1 + 3b2: 2605 addiw a2,a2,1 + 3b4: 00000597 auipc a1,0x0 + 3b8: 6b458593 addi a1,a1,1716 # a68 + 3bc: 4505 li a0,1 } - 3bc: 6105 addi sp,sp,32 + 3be: 6105 addi sp,sp,32 write(1, s, strlen(s)); - 3be: ac4d j 670 - 3c0: 00000697 auipc a3,0x0 - 3c4: 50868693 addi a3,a3,1288 # 8c8 + 3c0: a6bd j 72e + 3c2: 00000697 auipc a3,0x0 + 3c6: 5c668693 addi a3,a3,1478 # 988 else if (pid == 0) - 3c8: 87b6 mv a5,a3 + 3ca: 87b6 mv a5,a3 while (s[n]) - 3ca: 0017c703 lbu a4,1(a5) - 3ce: 863e mv a2,a5 - 3d0: 0785 addi a5,a5,1 - 3d2: ff65 bnez a4,3ca <_Z13test_syscallsv+0x24a> + 3cc: 0017c703 lbu a4,1(a5) + 3d0: 863e mv a2,a5 + 3d2: 0785 addi a5,a5,1 + 3d4: ff65 bnez a4,3cc <_Z13test_syscallsv+0x24a> n++; - 3d4: 9e15 subw a2,a2,a3 + 3d6: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 3d6: 2605 addiw a2,a2,1 - 3d8: 00000597 auipc a1,0x0 - 3dc: 4f058593 addi a1,a1,1264 # 8c8 - 3e0: 4505 li a0,1 - 3e2: 28e000ef jal 670 + 3d8: 2605 addiw a2,a2,1 + 3da: 00000597 auipc a1,0x0 + 3de: 5ae58593 addi a1,a1,1454 # 988 + 3e2: 4505 li a0,1 + 3e4: 34a000ef jal 72e print_int(pid); - 3e6: 8526 mv a0,s1 - 3e8: c6dff0ef jal 54 <_Z9print_inti> + 3e8: 8526 mv a0,s1 + 3ea: c6dff0ef jal 56 <_Z9print_inti> write(1, s, strlen(s)); - 3ec: 4605 li a2,1 - 3ee: 00000597 auipc a1,0x0 - 3f2: 4b258593 addi a1,a1,1202 # 8a0 - 3f6: 4505 li a0,1 - 3f8: 278000ef jal 670 + 3ee: 4605 li a2,1 + 3f0: 00000597 auipc a1,0x0 + 3f4: 57058593 addi a1,a1,1392 # 960 + 3f8: 4505 li a0,1 + 3fa: 334000ef jal 72e while (s[n]) - 3fc: 00000697 auipc a3,0x0 - 400: 4f468693 addi a3,a3,1268 # 8f0 + 3fe: 00000697 auipc a3,0x0 + 402: 5b268693 addi a3,a3,1458 # 9b0 write(1, s, strlen(s)); - 404: 87b6 mv a5,a3 + 406: 87b6 mv a5,a3 while (s[n]) - 406: 0017c703 lbu a4,1(a5) - 40a: 863e mv a2,a5 - 40c: 0785 addi a5,a5,1 - 40e: ff65 bnez a4,406 <_Z13test_syscallsv+0x286> + 408: 0017c703 lbu a4,1(a5) + 40c: 863e mv a2,a5 + 40e: 0785 addi a5,a5,1 + 410: ff65 bnez a4,408 <_Z13test_syscallsv+0x286> n++; - 410: 9e15 subw a2,a2,a3 + 412: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 412: 2605 addiw a2,a2,1 - 414: 00000597 auipc a1,0x0 - 418: 4dc58593 addi a1,a1,1244 # 8f0 - 41c: 4505 li a0,1 - 41e: 252000ef jal 670 + 414: 2605 addiw a2,a2,1 + 416: 00000597 auipc a1,0x0 + 41a: 59a58593 addi a1,a1,1434 # 9b0 + 41e: 4505 li a0,1 + 420: 30e000ef jal 72e int waited_pid = wait(0); - 422: 4501 li a0,0 - 424: 234000ef jal 658 - 428: 00000697 auipc a3,0x0 - 42c: 53868693 addi a3,a3,1336 # 960 - 430: 842a mv s0,a0 + 424: 4501 li a0,0 + 426: 2f0000ef jal 716 + 42a: 00000697 auipc a3,0x0 + 42e: 5f668693 addi a3,a3,1526 # a20 + 432: 842a mv s0,a0 if (waited_pid == pid) - 432: 87b6 mv a5,a3 - 434: 0ca48363 beq s1,a0,4fa <_Z13test_syscallsv+0x37a> + 434: 87b6 mv a5,a3 + 436: 0ca48363 beq s1,a0,4fc <_Z13test_syscallsv+0x37a> while (s[n]) - 438: 0017c703 lbu a4,1(a5) - 43c: 863e mv a2,a5 - 43e: 0785 addi a5,a5,1 - 440: ff65 bnez a4,438 <_Z13test_syscallsv+0x2b8> + 43a: 0017c703 lbu a4,1(a5) + 43e: 863e mv a2,a5 + 440: 0785 addi a5,a5,1 + 442: ff65 bnez a4,43a <_Z13test_syscallsv+0x2b8> n++; - 442: 9e15 subw a2,a2,a3 + 444: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 444: 2605 addiw a2,a2,1 - 446: 00000597 auipc a1,0x0 - 44a: 51a58593 addi a1,a1,1306 # 960 - 44e: 4505 li a0,1 - 450: 220000ef jal 670 + 446: 2605 addiw a2,a2,1 + 448: 00000597 auipc a1,0x0 + 44c: 5d858593 addi a1,a1,1496 # a20 + 450: 4505 li a0,1 + 452: 2dc000ef jal 72e print_int(waited_pid); - 454: 8522 mv a0,s0 - 456: bffff0ef jal 54 <_Z9print_inti> + 456: 8522 mv a0,s0 + 458: bffff0ef jal 56 <_Z9print_inti> while (s[n]) - 45a: 00000697 auipc a3,0x0 - 45e: 32e68693 addi a3,a3,814 # 788 + 45c: 00000697 auipc a3,0x0 + 460: 3ec68693 addi a3,a3,1004 # 848 print_int(waited_pid); - 462: 87b6 mv a5,a3 + 464: 87b6 mv a5,a3 while (s[n]) - 464: 0017c703 lbu a4,1(a5) - 468: 863e mv a2,a5 - 46a: 0785 addi a5,a5,1 - 46c: ff65 bnez a4,464 <_Z13test_syscallsv+0x2e4> + 466: 0017c703 lbu a4,1(a5) + 46a: 863e mv a2,a5 + 46c: 0785 addi a5,a5,1 + 46e: ff65 bnez a4,466 <_Z13test_syscallsv+0x2e4> n++; - 46e: 9e15 subw a2,a2,a3 + 470: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 470: 2605 addiw a2,a2,1 - 472: 00000597 auipc a1,0x0 - 476: 31658593 addi a1,a1,790 # 788 - 47a: 4505 li a0,1 - 47c: 1f4000ef jal 670 + 472: 2605 addiw a2,a2,1 + 474: 00000597 auipc a1,0x0 + 478: 3d458593 addi a1,a1,980 # 848 + 47c: 4505 li a0,1 + 47e: 2b0000ef jal 72e } - 480: b5fd j 36e <_Z13test_syscallsv+0x1ee> - 482: 00000697 auipc a3,0x0 - 486: 30e68693 addi a3,a3,782 # 790 + 482: b5fd j 370 <_Z13test_syscallsv+0x1ee> + 484: 00000697 auipc a3,0x0 + 488: 3cc68693 addi a3,a3,972 # 850 if (my_pid > 0) - 48a: 87b6 mv a5,a3 + 48c: 87b6 mv a5,a3 while (s[n]) - 48c: 0017c703 lbu a4,1(a5) - 490: 863e mv a2,a5 - 492: 0785 addi a5,a5,1 - 494: ff65 bnez a4,48c <_Z13test_syscallsv+0x30c> + 48e: 0017c703 lbu a4,1(a5) + 492: 863e mv a2,a5 + 494: 0785 addi a5,a5,1 + 496: ff65 bnez a4,48e <_Z13test_syscallsv+0x30c> n++; - 496: 9e15 subw a2,a2,a3 + 498: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 498: 2605 addiw a2,a2,1 - 49a: 00000597 auipc a1,0x0 - 49e: 2f658593 addi a1,a1,758 # 790 - 4a2: 4505 li a0,1 - 4a4: 1cc000ef jal 670 + 49a: 2605 addiw a2,a2,1 + 49c: 00000597 auipc a1,0x0 + 4a0: 3b458593 addi a1,a1,948 # 850 + 4a4: 4505 li a0,1 + 4a6: 288000ef jal 72e } - 4a8: b361 j 230 <_Z13test_syscallsv+0xb0> - 4aa: 00000697 auipc a3,0x0 - 4ae: 32e68693 addi a3,a3,814 # 7d8 + 4aa: b361 j 232 <_Z13test_syscallsv+0xb0> + 4ac: 00000697 auipc a3,0x0 + 4b0: 3ec68693 addi a3,a3,1004 # 898 if (p == (char *)-1) - 4b2: 87b6 mv a5,a3 + 4b4: 87b6 mv a5,a3 while (s[n]) - 4b4: 0017c703 lbu a4,1(a5) - 4b8: 863e mv a2,a5 - 4ba: 0785 addi a5,a5,1 - 4bc: ff65 bnez a4,4b4 <_Z13test_syscallsv+0x334> + 4b6: 0017c703 lbu a4,1(a5) + 4ba: 863e mv a2,a5 + 4bc: 0785 addi a5,a5,1 + 4be: ff65 bnez a4,4b6 <_Z13test_syscallsv+0x334> n++; - 4be: 9e15 subw a2,a2,a3 + 4c0: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 4c0: 2605 addiw a2,a2,1 - 4c2: 00000597 auipc a1,0x0 - 4c6: 31658593 addi a1,a1,790 # 7d8 - 4ca: 4505 li a0,1 - 4cc: 1a4000ef jal 670 + 4c2: 2605 addiw a2,a2,1 + 4c4: 00000597 auipc a1,0x0 + 4c8: 3d458593 addi a1,a1,980 # 898 + 4cc: 4505 li a0,1 + 4ce: 260000ef jal 72e } - 4d0: bbed j 2ca <_Z13test_syscallsv+0x14a> - 4d2: 00000697 auipc a3,0x0 - 4d6: 36668693 addi a3,a3,870 # 838 + 4d2: bbed j 2cc <_Z13test_syscallsv+0x14a> + 4d4: 00000697 auipc a3,0x0 + 4d8: 42468693 addi a3,a3,1060 # 8f8 if (pid < 0) - 4da: 87b6 mv a5,a3 + 4dc: 87b6 mv a5,a3 while (s[n]) - 4dc: 0017c703 lbu a4,1(a5) - 4e0: 863e mv a2,a5 - 4e2: 0785 addi a5,a5,1 - 4e4: ff65 bnez a4,4dc <_Z13test_syscallsv+0x35c> + 4de: 0017c703 lbu a4,1(a5) + 4e2: 863e mv a2,a5 + 4e4: 0785 addi a5,a5,1 + 4e6: ff65 bnez a4,4de <_Z13test_syscallsv+0x35c> n++; - 4e6: 9e15 subw a2,a2,a3 + 4e8: 9e15 subw a2,a2,a3 write(1, s, strlen(s)); - 4e8: 2605 addiw a2,a2,1 - 4ea: 00000597 auipc a1,0x0 - 4ee: 34e58593 addi a1,a1,846 # 838 - 4f2: 4505 li a0,1 - 4f4: 17c000ef jal 670 + 4ea: 2605 addiw a2,a2,1 + 4ec: 00000597 auipc a1,0x0 + 4f0: 40c58593 addi a1,a1,1036 # 8f8 + 4f4: 4505 li a0,1 + 4f6: 238000ef jal 72e } - 4f8: bd9d j 36e <_Z13test_syscallsv+0x1ee> - 4fa: 00000617 auipc a2,0x0 - 4fe: 41e60613 addi a2,a2,1054 # 918 + 4fa: bd9d j 370 <_Z13test_syscallsv+0x1ee> + 4fc: 00000617 auipc a2,0x0 + 500: 4dc60613 addi a2,a2,1244 # 9d8 if (waited_pid == pid) - 502: 87b2 mv a5,a2 + 504: 87b2 mv a5,a2 while (s[n]) - 504: 0017c703 lbu a4,1(a5) - 508: 86be mv a3,a5 - 50a: 0785 addi a5,a5,1 - 50c: ff65 bnez a4,504 <_Z13test_syscallsv+0x384> + 506: 0017c703 lbu a4,1(a5) + 50a: 86be mv a3,a5 + 50c: 0785 addi a5,a5,1 + 50e: ff65 bnez a4,506 <_Z13test_syscallsv+0x384> n++; - 50e: 40c6863b subw a2,a3,a2 + 510: 40c6863b subw a2,a3,a2 write(1, s, strlen(s)); - 512: 2605 addiw a2,a2,1 - 514: 00000597 auipc a1,0x0 - 518: 40458593 addi a1,a1,1028 # 918 - 51c: 4505 li a0,1 - 51e: 152000ef jal 670 + 514: 2605 addiw a2,a2,1 + 516: 00000597 auipc a1,0x0 + 51a: 4c258593 addi a1,a1,1218 # 9d8 + 51e: 4505 li a0,1 + 520: 20e000ef jal 72e while (s[n]) - 522: 00000617 auipc a2,0x0 - 526: 42660613 addi a2,a2,1062 # 948 + 524: 00000617 auipc a2,0x0 + 528: 4e460613 addi a2,a2,1252 # a08 write(1, s, strlen(s)); - 52a: 87b2 mv a5,a2 + 52c: 87b2 mv a5,a2 while (s[n]) - 52c: 0017c703 lbu a4,1(a5) - 530: 86be mv a3,a5 - 532: 0785 addi a5,a5,1 - 534: ff65 bnez a4,52c <_Z13test_syscallsv+0x3ac> + 52e: 0017c703 lbu a4,1(a5) + 532: 86be mv a3,a5 + 534: 0785 addi a5,a5,1 + 536: ff65 bnez a4,52e <_Z13test_syscallsv+0x3ac> n++; - 536: 40c6863b subw a2,a3,a2 + 538: 40c6863b subw a2,a3,a2 write(1, s, strlen(s)); - 53a: 2605 addiw a2,a2,1 - 53c: 00000597 auipc a1,0x0 - 540: 40c58593 addi a1,a1,1036 # 948 - 544: 4505 li a0,1 - 546: 12a000ef jal 670 + 53c: 2605 addiw a2,a2,1 + 53e: 00000597 auipc a1,0x0 + 542: 4ca58593 addi a1,a1,1226 # a08 + 546: 4505 li a0,1 + 548: 1e6000ef jal 72e } - 54a: b515 j 36e <_Z13test_syscallsv+0x1ee> - 54c: 00000617 auipc a2,0x0 - 550: 30460613 addi a2,a2,772 # 850 + 54c: b515 j 370 <_Z13test_syscallsv+0x1ee> + 54e: 00000617 auipc a2,0x0 + 552: 3c260613 addi a2,a2,962 # 910 if (child_pid == my_pid) - 554: 87b2 mv a5,a2 + 556: 87b2 mv a5,a2 while (s[n]) - 556: 0017c703 lbu a4,1(a5) - 55a: 86be mv a3,a5 - 55c: 0785 addi a5,a5,1 - 55e: ff65 bnez a4,556 <_Z13test_syscallsv+0x3d6> + 558: 0017c703 lbu a4,1(a5) + 55c: 86be mv a3,a5 + 55e: 0785 addi a5,a5,1 + 560: ff65 bnez a4,558 <_Z13test_syscallsv+0x3d6> n++; - 560: 40c6863b subw a2,a3,a2 + 562: 40c6863b subw a2,a3,a2 write(1, s, strlen(s)); - 564: 2605 addiw a2,a2,1 - 566: 00000597 auipc a1,0x0 - 56a: 2ea58593 addi a1,a1,746 # 850 - 56e: 4505 li a0,1 - 570: 100000ef jal 670 + 566: 2605 addiw a2,a2,1 + 568: 00000597 auipc a1,0x0 + 56c: 3a858593 addi a1,a1,936 # 910 + 570: 4505 li a0,1 + 572: 1bc000ef jal 72e exit(1); - 574: 4505 li a0,1 - 576: 0da000ef jal 650 - 57a: b371 j 306 <_Z13test_syscallsv+0x186> + 576: 4505 li a0,1 + 578: 196000ef jal 70e + 57c: b371 j 308 <_Z13test_syscallsv+0x186> + +000000000000057e
: -000000000000057c
: -// ============================================================= -// Shell 主循环 -// ============================================================= int main() { - 57c: 715d addi sp,sp,-80 - print("\n[Lume Shell] Ready.\n"); - 57e: 00000517 auipc a0,0x0 - 582: 45250513 addi a0,a0,1106 # 9d0 + 57e: 7119 addi sp,sp,-128 + print("\n[Lume Shell] Init process started.\n"); + 580: 00000517 auipc a0,0x0 + 584: 51050513 addi a0,a0,1296 # a90 { - 586: e486 sd ra,72(sp) - 588: e0a2 sd s0,64(sp) - 58a: fc26 sd s1,56(sp) - 58c: f84a sd s2,48(sp) - 58e: f44e sd s3,40(sp) - 590: f052 sd s4,32(sp) - 592: ec56 sd s5,24(sp) - 594: e85a sd s6,16(sp) - print("\n[Lume Shell] Ready.\n"); - 596: a99ff0ef jal 2e <_Z5printPKc> + 588: fc86 sd ra,120(sp) + 58a: f8a2 sd s0,112(sp) + 58c: f4a6 sd s1,104(sp) + 58e: f0ca sd s2,96(sp) + 590: ecce sd s3,88(sp) + 592: e8d2 sd s4,80(sp) + 594: e4d6 sd s5,72(sp) + 596: e0da sd s6,64(sp) + print("\n[Lume Shell] Init process started.\n"); + 598: a97ff0ef jal 2e <_Z5printPKc> + print("[Test] Opening test.txt...\n"); + 59c: 00000517 auipc a0,0x0 + 5a0: 51c50513 addi a0,a0,1308 # ab8 + 5a4: a8bff0ef jal 2e <_Z5printPKc> + int fd = open("test.txt", O_RDONLY); + 5a8: 4581 li a1,0 + 5aa: 00000517 auipc a0,0x0 + 5ae: 52e50513 addi a0,a0,1326 # ad8 + 5b2: 19c000ef jal 74e + if (fd < 0) + 5b6: 14054063 bltz a0,6f6 + 5ba: 84aa mv s1,a0 + { + print("[Test] Open failed (Is test.txt in fs.img?)\n"); + } + else + { + print("[Test] Open success! fd="); + 5bc: 00000517 auipc a0,0x0 + 5c0: 55c50513 addi a0,a0,1372 # b18 + 5c4: a6bff0ef jal 2e <_Z5printPKc> + print_int(fd); + 5c8: 8526 mv a0,s1 + 5ca: a8dff0ef jal 56 <_Z9print_inti> + print("\n"); + 5ce: 00000517 auipc a0,0x0 + 5d2: 39250513 addi a0,a0,914 # 960 + 5d6: a59ff0ef jal 2e <_Z5printPKc> + + char buf[64]; + int n = read(fd, buf, 63); + 5da: 840a mv s0,sp + 5dc: 03f00613 li a2,63 + 5e0: 85a2 mv a1,s0 + 5e2: 8526 mv a0,s1 + 5e4: 142000ef jal 726 + 5e8: 892a mv s2,a0 + if (n > 0) + 5ea: 0ca05663 blez a0,6b6 + { + buf[n] = 0; + 5ee: 04050793 addi a5,a0,64 + 5f2: 00278933 add s2,a5,sp + print("[Test] Read content:\n---\n"); + 5f6: 00000517 auipc a0,0x0 + 5fa: 54250513 addi a0,a0,1346 # b38 + buf[n] = 0; + 5fe: fc090023 sb zero,-64(s2) + print("[Test] Read content:\n---\n"); + 602: a2dff0ef jal 2e <_Z5printPKc> + print(buf); + 606: 8522 mv a0,s0 + 608: a27ff0ef jal 2e <_Z5printPKc> + print("\n---\n"); + 60c: 00000517 auipc a0,0x0 + 610: 54c50513 addi a0,a0,1356 # b58 + 614: a1bff0ef jal 2e <_Z5printPKc> + { + print("[Test] Read returned "); + print_int(n); + print("\n"); + } + close(fd); + 618: 8526 mv a0,s1 + 61a: 11c000ef jal 736 + print("[Test] File closed.\n"); + 61e: 00000517 auipc a0,0x0 + 622: 55a50513 addi a0,a0,1370 # b78 + 626: a09ff0ef jal 2e <_Z5printPKc> + } + + + print("Commands:\n"); - 59a: 00000517 auipc a0,0x0 - 59e: 44e50513 addi a0,a0,1102 # 9e8 - 5a2: a8dff0ef jal 2e <_Z5printPKc> + 62a: 00000517 auipc a0,0x0 + 62e: 56650513 addi a0,a0,1382 # b90 + 632: 9fdff0ef jal 2e <_Z5printPKc> print(" s: Run System Call Tests (fork, wait, mm)\n"); - 5a6: 00000517 auipc a0,0x0 - 5aa: 45250513 addi a0,a0,1106 # 9f8 - 5ae: a81ff0ef jal 2e <_Z5printPKc> + 636: 00000517 auipc a0,0x0 + 63a: 56a50513 addi a0,a0,1386 # ba0 + 63e: 9f1ff0ef jal 2e <_Z5printPKc> print(" t: Run Disk Driver Test (VirtIO)\n"); - 5b2: 00000517 auipc a0,0x0 - 5b6: 47650513 addi a0,a0,1142 # a28 - 5ba: 00000b17 auipc s6,0x0 - 5be: 49eb0b13 addi s6,s6,1182 # a58 + 642: 00000517 auipc a0,0x0 + 646: 58e50513 addi a0,a0,1422 # bd0 + 64a: 00000b17 auipc s6,0x0 + 64e: 5b6b0b13 addi s6,s6,1462 # c00 n++; - 5c2: 4a85 li s5,1 + 652: 4a85 li s5,1 print(" t: Run Disk Driver Test (VirtIO)\n"); - 5c4: a6bff0ef jal 2e <_Z5printPKc> - 5c8: 848a mv s1,sp + 654: 9dbff0ef jal 2e <_Z5printPKc> while (1) { char buf[16]; write(1, "$ ", 2); - 5ca: 00000417 auipc s0,0x0 - 5ce: 48640413 addi s0,s0,1158 # a50 + 658: 00000497 auipc s1,0x0 + 65c: 5a048493 addi s1,s1,1440 # bf8 int n = read(0, buf, sizeof(buf)); if (n <= 0) continue; if (buf[0] == 's') - 5d2: 07300913 li s2,115 + 660: 07300913 li s2,115 { test_syscalls(); } else if (buf[0] == 't') - 5d6: 07400993 li s3,116 + 664: 07400993 li s3,116 disk_test(); exit(0); } wait(0); } else if (buf[0] != '\n') - 5da: 4a29 li s4,10 + 668: 4a29 li s4,10 n++; - 5dc: 416a8abb subw s5,s5,s6 + 66a: 416a8abb subw s5,s5,s6 write(1, "$ ", 2); - 5e0: 4609 li a2,2 - 5e2: 85a2 mv a1,s0 - 5e4: 4505 li a0,1 - 5e6: 08a000ef jal 670 + 66e: 4609 li a2,2 + 670: 85a6 mv a1,s1 + 672: 4505 li a0,1 + 674: 0ba000ef jal 72e int n = read(0, buf, sizeof(buf)); - 5ea: 4641 li a2,16 - 5ec: 85a6 mv a1,s1 - 5ee: 4501 li a0,0 - 5f0: 078000ef jal 668 + 678: 4641 li a2,16 + 67a: 85a2 mv a1,s0 + 67c: 4501 li a0,0 + 67e: 0a8000ef jal 726 if (n <= 0) - 5f4: fea056e3 blez a0,5e0 + 682: fea056e3 blez a0,66e if (buf[0] == 's') - 5f8: 00014783 lbu a5,0(sp) - 5fc: 03278663 beq a5,s2,628 + 686: 00014783 lbu a5,0(sp) + 68a: 05278663 beq a5,s2,6d6 else if (buf[0] == 't') - 600: 03378763 beq a5,s3,62e + 68e: 05378763 beq a5,s3,6dc else if (buf[0] != '\n') - 604: fd478ee3 beq a5,s4,5e0 - 608: 00000797 auipc a5,0x0 - 60c: 45078793 addi a5,a5,1104 # a58 + 692: fd478ee3 beq a5,s4,66e + 696: 00000797 auipc a5,0x0 + 69a: 56a78793 addi a5,a5,1386 # c00 while (s[n]) - 610: 0017c703 lbu a4,1(a5) - 614: 863e mv a2,a5 - 616: 0785 addi a5,a5,1 - 618: ff65 bnez a4,610 + 69e: 0017c703 lbu a4,1(a5) + 6a2: 863e mv a2,a5 + 6a4: 0785 addi a5,a5,1 + 6a6: ff65 bnez a4,69e write(1, s, strlen(s)); - 61a: 00ca863b addw a2,s5,a2 - 61e: 85da mv a1,s6 - 620: 4505 li a0,1 - 622: 04e000ef jal 670 + 6a8: 00ca863b addw a2,s5,a2 + 6ac: 85da mv a1,s6 + 6ae: 4505 li a0,1 + 6b0: 07e000ef jal 72e } - 626: bf6d j 5e0 + 6b4: bf6d j 66e + print("[Test] Read returned "); + 6b6: 00000517 auipc a0,0x0 + 6ba: 4aa50513 addi a0,a0,1194 # b60 + 6be: 971ff0ef jal 2e <_Z5printPKc> + print_int(n); + 6c2: 854a mv a0,s2 + 6c4: 993ff0ef jal 56 <_Z9print_inti> + print("\n"); + 6c8: 00000517 auipc a0,0x0 + 6cc: 29850513 addi a0,a0,664 # 960 + 6d0: 95fff0ef jal 2e <_Z5printPKc> + 6d4: b791 j 618 test_syscalls(); - 628: b59ff0ef jal 180 <_Z13test_syscallsv> - 62c: bf55 j 5e0 + 6d6: aadff0ef jal 182 <_Z13test_syscallsv> + 6da: bf51 j 66e if (fork() == 0) - 62e: 01a000ef jal 648 - 632: c509 beqz a0,63c + 6dc: 02a000ef jal 706 + 6e0: c509 beqz a0,6ea wait(0); - 634: 4501 li a0,0 - 636: 022000ef jal 658 - 63a: b75d j 5e0 + 6e2: 4501 li a0,0 + 6e4: 032000ef jal 716 + 6e8: b759 j 66e disk_test(); - 63c: 0bc000ef jal 6f8 + 6ea: 0cc000ef jal 7b6 exit(0); - 640: 4501 li a0,0 - 642: 00e000ef jal 650 - 646: b7fd j 634 + 6ee: 4501 li a0,0 + 6f0: 01e000ef jal 70e + 6f4: b7fd j 6e2 + print("[Test] Open failed (Is test.txt in fs.img?)\n"); + 6f6: 00000517 auipc a0,0x0 + 6fa: 3f250513 addi a0,a0,1010 # ae8 + 6fe: 931ff0ef jal 2e <_Z5printPKc> + 702: 840a mv s0,sp + 704: b71d j 62a -0000000000000648 : +0000000000000706 : name: \ li a7, SYS_ ## name; \ ecall; \ ret SYSCALL(fork) - 648: 4889 li a7,2 - 64a: 00000073 ecall - 64e: 8082 ret + 706: 4889 li a7,2 + 708: 00000073 ecall + 70c: 8082 ret -0000000000000650 : +000000000000070e : SYSCALL(exit) - 650: 488d li a7,3 - 652: 00000073 ecall - 656: 8082 ret + 70e: 488d li a7,3 + 710: 00000073 ecall + 714: 8082 ret -0000000000000658 : +0000000000000716 : SYSCALL(wait) - 658: 4891 li a7,4 - 65a: 00000073 ecall - 65e: 8082 ret + 716: 4891 li a7,4 + 718: 00000073 ecall + 71c: 8082 ret -0000000000000660 : +000000000000071e : SYSCALL(pipe) - 660: 4895 li a7,5 - 662: 00000073 ecall - 666: 8082 ret + 71e: 4895 li a7,5 + 720: 00000073 ecall + 724: 8082 ret -0000000000000668 : +0000000000000726 : SYSCALL(read) - 668: 4899 li a7,6 - 66a: 00000073 ecall - 66e: 8082 ret + 726: 4899 li a7,6 + 728: 00000073 ecall + 72c: 8082 ret -0000000000000670 : +000000000000072e : SYSCALL(write) - 670: 48c5 li a7,17 - 672: 00000073 ecall - 676: 8082 ret + 72e: 48c5 li a7,17 + 730: 00000073 ecall + 734: 8082 ret -0000000000000678 : +0000000000000736 : SYSCALL(close) - 678: 48d9 li a7,22 - 67a: 00000073 ecall - 67e: 8082 ret + 736: 48d9 li a7,22 + 738: 00000073 ecall + 73c: 8082 ret -0000000000000680 : +000000000000073e : SYSCALL(kill) - 680: 489d li a7,7 - 682: 00000073 ecall - 686: 8082 ret + 73e: 489d li a7,7 + 740: 00000073 ecall + 744: 8082 ret -0000000000000688 : +0000000000000746 : SYSCALL(exec) - 688: 48a1 li a7,8 - 68a: 00000073 ecall - 68e: 8082 ret + 746: 48a1 li a7,8 + 748: 00000073 ecall + 74c: 8082 ret -0000000000000690 : +000000000000074e : SYSCALL(open) - 690: 48c1 li a7,16 - 692: 00000073 ecall - 696: 8082 ret + 74e: 48c1 li a7,16 + 750: 00000073 ecall + 754: 8082 ret -0000000000000698 : +0000000000000756 : SYSCALL(mknod) - 698: 48c9 li a7,18 - 69a: 00000073 ecall - 69e: 8082 ret + 756: 48c9 li a7,18 + 758: 00000073 ecall + 75c: 8082 ret -00000000000006a0 : +000000000000075e : SYSCALL(unlink) - 6a0: 48cd li a7,19 - 6a2: 00000073 ecall - 6a6: 8082 ret + 75e: 48cd li a7,19 + 760: 00000073 ecall + 764: 8082 ret -00000000000006a8 : +0000000000000766 : SYSCALL(fstat) - 6a8: 48a5 li a7,9 - 6aa: 00000073 ecall - 6ae: 8082 ret + 766: 48a5 li a7,9 + 768: 00000073 ecall + 76c: 8082 ret -00000000000006b0 : +000000000000076e : SYSCALL(link) - 6b0: 48d1 li a7,20 - 6b2: 00000073 ecall - 6b6: 8082 ret + 76e: 48d1 li a7,20 + 770: 00000073 ecall + 774: 8082 ret -00000000000006b8 : +0000000000000776 : SYSCALL(mkdir) - 6b8: 48d5 li a7,21 - 6ba: 00000073 ecall - 6be: 8082 ret + 776: 48d5 li a7,21 + 778: 00000073 ecall + 77c: 8082 ret -00000000000006c0 : +000000000000077e : SYSCALL(chdir) - 6c0: 48a9 li a7,10 - 6c2: 00000073 ecall - 6c6: 8082 ret + 77e: 48a9 li a7,10 + 780: 00000073 ecall + 784: 8082 ret -00000000000006c8 : +0000000000000786 : SYSCALL(dup) - 6c8: 48ad li a7,11 - 6ca: 00000073 ecall - 6ce: 8082 ret + 786: 48ad li a7,11 + 788: 00000073 ecall + 78c: 8082 ret -00000000000006d0 : +000000000000078e : SYSCALL(getpid) - 6d0: 48b1 li a7,12 - 6d2: 00000073 ecall - 6d6: 8082 ret + 78e: 48b1 li a7,12 + 790: 00000073 ecall + 794: 8082 ret -00000000000006d8 : +0000000000000796 : SYSCALL(sbrk) - 6d8: 48b5 li a7,13 - 6da: 00000073 ecall - 6de: 8082 ret + 796: 48b5 li a7,13 + 798: 00000073 ecall + 79c: 8082 ret -00000000000006e0 : +000000000000079e : SYSCALL(sleep) - 6e0: 48b9 li a7,14 - 6e2: 00000073 ecall - 6e6: 8082 ret + 79e: 48b9 li a7,14 + 7a0: 00000073 ecall + 7a4: 8082 ret -00000000000006e8 : +00000000000007a6 : SYSCALL(uptime) - 6e8: 48bd li a7,15 - 6ea: 00000073 ecall - 6ee: 8082 ret + 7a6: 48bd li a7,15 + 7a8: 00000073 ecall + 7ac: 8082 ret -00000000000006f0 : +00000000000007ae : SYSCALL(putc) - 6f0: 4885 li a7,1 - 6f2: 00000073 ecall - 6f6: 8082 ret + 7ae: 4885 li a7,1 + 7b0: 00000073 ecall + 7b4: 8082 ret -00000000000006f8 : - 6f8: 48dd li a7,23 - 6fa: 00000073 ecall - 6fe: 8082 ret +00000000000007b6 : + 7b6: 48dd li a7,23 + 7b8: 00000073 ecall + 7bc: 8082 ret diff --git a/build/user/initcode.out b/build/user/initcode.out index c8d8b7f..78c9958 100755 Binary files a/build/user/initcode.out and b/build/user/initcode.out differ diff --git a/fs.img b/fs.img index fada73c..1709788 100644 Binary files a/fs.img and b/fs.img differ diff --git a/include/common/fcntl.h b/include/common/fcntl.h new file mode 100644 index 0000000..24d40fa --- /dev/null +++ b/include/common/fcntl.h @@ -0,0 +1,9 @@ +#pragma once + +#define O_RDONLY 0x000 +#define O_WRONLY 0x001 +#define O_RDWR 0x002 +#define O_CREATE 0x200 +#define O_TRUNC 0x400 + +#define NOFILE 16 \ No newline at end of file diff --git a/include/drivers/virtio.h b/include/drivers/virtio.h index 308dae0..ea2c9a6 100644 --- a/include/drivers/virtio.h +++ b/include/drivers/virtio.h @@ -99,4 +99,5 @@ namespace VirtIO void intr(); void rw(int write, uint64 blockno, char *buf); void test_rw(); + void test_bio(); } \ No newline at end of file diff --git a/include/fs/fat32.h b/include/fs/fat32.h new file mode 100644 index 0000000..c794bd7 --- /dev/null +++ b/include/fs/fat32.h @@ -0,0 +1,111 @@ +#pragma once +#include "fs/fs.h" +#include "kernel/buf.h" + +// Disk Layout Structures (On-Disk) + +// FAT32 Boot Sector (BPB) +struct FAT32_BPB +{ + uint8 jmpBoot[3]; + char oemName[8]; + uint16 bytesPerSector; + uint8 secPerClus; + uint16 reservedSecCnt; + uint8 numFATs; + uint16 rootEntCnt; + uint16 totSec16; + uint8 media; + uint16 FATSz16; + uint16 secPerTrk; + uint16 numHeads; + uint32 hiddSec; + uint32 totSec32; + uint32 FATSz32; + uint16 extFlags; + uint16 FSVer; + uint32 rootClus; + uint16 FSInfo; + uint16 bkBootSec; + uint8 reserved[12]; + uint8 drvNum; + uint8 reserved1; + uint8 bootSig; + uint32 volID; + char volLab[11]; + char filSysType[8]; +} __attribute__((packed)); + +// FAT32 Directory Entry (32 bytes) +struct FAT32_DirEnt +{ + char name[11]; // 8.3 filename + uint8 attr; // File attributes + uint8 ntRes; + uint8 crtTimeTenth; + uint16 crtTime; + uint16 crtDate; + uint16 lstAccDate; + uint16 fstClusHI; // High 16 bits of first cluster + uint16 wrtTime; + uint16 wrtDate; + uint16 fstClusLO; // Low 16 bits of first cluster + uint32 fileSize; +} __attribute__((packed)); + +#define ATTR_READ_ONLY 0x01 +#define ATTR_HIDDEN 0x02 +#define ATTR_SYSTEM 0x04 +#define ATTR_VOLUME_ID 0x08 +#define ATTR_DIRECTORY 0x10 +#define ATTR_ARCHIVE 0x20 +#define ATTR_LONG_NAME 0x0F + +// In-Memory Classes + +class FAT32FileSystem; + +class FAT32Inode : public Inode +{ +public: + FAT32FileSystem *fs; + + // FAT32 Private Data + uint32 first_clus; // The starting cluster number of the file + uint32 parent_clus; // Starting cluster number of the parent directory + uint32 dir_offset; // The byte offset of this directory entry in the parent directory + + FAT32Inode() : fs(nullptr), first_clus(0) {} + // Implement VFS Interface + void update() override; + int read(char *dst, uint32 off, uint32 n, int isUser) override; + int write(const char *src, uint32 off, uint32 n, int isUser) override; + Inode *lookup(const char *name) override; + Inode *create(const char *name, short type, short major, short minor) override; + void truncate() override; +}; + +class FAT32FileSystem : public FileSystem +{ +public: + uint32 fat_start_sector; + uint32 data_start_sector; + uint32 root_cluster; + uint32 sectors_per_cluster; + uint32 bytes_per_cluster; + + void init() override; + Inode* root() override; + + // Helper functions + uint32 next_cluster(uint32 cluster); // Check the FAT table for the next cluster + uint32 alloc_cluster(); // Assign a new cluster + uint32 cluster_to_sector(uint32 cluster); + + // directory entry parsing + void read_dir_ent(struct FAT32_DirEnt *de, char *filename); +}; + +extern FAT32FileSystem fat32_fs; + +void fat32_test(); \ No newline at end of file diff --git a/include/fs/file.h b/include/fs/file.h new file mode 100644 index 0000000..fc0c5d9 --- /dev/null +++ b/include/fs/file.h @@ -0,0 +1,35 @@ +#pragma once +#include "common/types.h" +#include "fs/fs.h" + +enum FileType +{ + FD_NONE, + FD_INODE, + FD_DEVICE, + FD_PIPE +}; + +struct file +{ + enum FileType type; + int ref; + char readable; + char writable; + + struct pipe *pipe; // pipeline pointer + Inode *ip; // VFS Inode + uint32 off; // Current Offset +}; + +namespace FileTable +{ + void init(); + struct file *alloc(); // Allocate a free file handle + struct file *dup(struct file *f); // Duplicate handle (sys_dup) + void close(struct file *f); // Close handle + + int stat(struct file *f, uint64 addr); + int read(struct file *f, uint64 addr, int n); + int write(struct file *f, uint64 addr, int n); +} // namespace FileTable diff --git a/include/fs/fs.h b/include/fs/fs.h new file mode 100644 index 0000000..6e4ec4b --- /dev/null +++ b/include/fs/fs.h @@ -0,0 +1,92 @@ +#pragma once +#include "common/types.h" +#include "kernel/spinlock.h" +#include "fs/stat.h" + +class FileSystem; + +// VFS Inode (Abstract Base Class) + +class Inode +{ +private: + ; +public: + // VFS Common Fields + uint32 dev; // Device number (VirtIO Block ID) + uint32 inum; // Inode number + int ref_cnt; // Memory reference count (number of struct file or processes referencing it) + int valid; // Whether the data is valid (whether metadata has been read from disk) + + Mutex lock; // Sleep lock: protects internal Inode data and atomicity of read/write operations + + // Metadata Cache (for speeding up getattr) + short type; // T_DIR, T_FILE, T_DEVICE + short major; // Major device number (only for T_DEVICE) + short minor; // Minor device number (only for T_DEVICE) + short nlink; // Number of hard links + uint32 size; // File size + + Inode() : ref_cnt(0), valid(0) + { + lock.init("inode"); + } + virtual ~Inode() {} + + /* Core Operation Interface (Subclass Must Implement) */ + // Update metadata + // Sync size, type, links, etc. from memory back to disk + virtual void update() = 0; + // Read content + // Read n bytes from the file at offset into dst + // Returns the actual number of bytes read, returns -1 on error + virtual int read(char *dst, uint32 off, uint32 n, int isUser) = 0; + // 3. Write content + // Write n bytes from src to the file at the given offset + // Need to handle file growth + virtual int write(const char *src, uint32 off, uint32 n, int isUser) = 0; + // Directory Lookup (only valid when type == T_DIR) + // Search for a file named 'name' in the current directory and return its Inode pointer (locked) + // Return nullptr if not found + virtual Inode *lookup(const char *name) = 0; + // Create file/directory (only effective when type == T_DIR) + // Create a new entry in the current directory + virtual Inode *create(const char *name, short type, short major, short minor) = 0; + // Get file status (populate the stat structure) + // Default implementation, subclasses can override to provide more detailed information + virtual void getattr(struct kstat *st); + // Truncate file (set size to 0, release all data blocks) + virtual void truncate() = 0; +}; + +// File System Abstraction (SuperBlock) +class FileSystem +{ +private: + ; +public: + virtual void init() = 0; + virtual Inode* root() = 0; + virtual ~FileSystem() {}; +}; + +// Inode Cache Interface (Global Function) +namespace VFS +{ + void init(); + + // Decrease the reference count, and if it reaches 0, free the memory + void iput(Inode *ip); + // Increase reference count + Inode *idup(Inode *ip); + // lock and load data + void ilock(Inode *ip); + // unlock + void iunlock(Inode *ip); + // Mount the root filesystem + void mount_root(Inode *root); + // Get system root node + Inode *get_root(); + // Path Analysis + Inode *namei(const char *path); +} // namespace VFS diff --git a/include/fs/stat.h b/include/fs/stat.h new file mode 100644 index 0000000..cdce05a --- /dev/null +++ b/include/fs/stat.h @@ -0,0 +1,22 @@ +#pragma once +#include "common/types.h" + +#define T_DIR 1 // Directory +#define T_FILE 2 // File +#define T_DEVICE 3 // Device + +struct kstat +{ + int dev; // File System's disk device + uint32 ino; // Inode number + short type; //Type of file + short nlink; // Number of links to file + uint64 size; // Size of file in bytes + + uint32 mode; // Protection: rwx + uint32 uid; // User ID + uint32 gid; // Group ID + uint32 atime; // Access time + uint32 mtime; // Modified time + uint32 ctime; // Change time +}; diff --git a/include/kernel/buf.h b/include/kernel/buf.h new file mode 100644 index 0000000..099523d --- /dev/null +++ b/include/kernel/buf.h @@ -0,0 +1,30 @@ +#pragma once +#include "common/types.h" +#include "kernel/spinlock.h" + +#define BSIZE 1024 +#define NBUF 30 + +struct Buf +{ + int valid; // Whether the data has been read from the disk (1=valid, 0=invalid) + int disk; // Whether it has been held by the driver (dirty bit/write-back flag is usually extended here) + uint32 dev; // Device Number + uint32 blockno; // Block number + uint32 refcnt; // Reference Counting + struct Buf *prev; // LRU linked list + struct Buf *next; + uchar data[BSIZE]; + + Mutex lock; // Sleep Lock +}; + +namespace BufferCache +{ + void init(); + struct Buf *bread(uint32 dev, uint32 blockno); + void bwrite(struct Buf *b); + void brelse(struct Buf *b); + void bpin(struct Buf *b); + void bunpin(struct Buf *b); +} // namespace BufferCache diff --git a/include/kernel/elf.h b/include/kernel/elf.h new file mode 100644 index 0000000..c216f1c --- /dev/null +++ b/include/kernel/elf.h @@ -0,0 +1,46 @@ +#pragma once +#include "common/types.h" + +#define ELF_MAGIC 0x464C457F // "\x7FELF" in little endian + +// ELF File Header +struct elfhdr +{ + uint32 magic; // Must equal ELF_MAGIC + uint8 elf[12]; + uint16 type; + uint16 machine; + uint32 version; + uint64 entry; // Program Entry Point (Virtual Address) + uint64 phoff; // File offset of the Program Header Table + uint64 shoff; + uint32 flags; + uint16 ehsize; + uint16 phentsize; + uint16 phnum; // Number of Program Headers + uint16 shentsize; + uint16 shnum; + uint16 shstrndx; +}; + +// Program Header +// Describes how to load segments from a file into memory +struct proghdr +{ + uint32 type; + uint32 flags; + uint64 off; // Offset of the section in the file + uint64 vaddr; // Virtual address of the segment in memory + uint64 paddr; + uint64 filesz; // Size of the section in the file + uint64 memsz; // The size of the segment in memory (memsz >= filesz) + uint64 align; +}; + +// Values for Proghdr type +#define ELF_PROG_LOAD 1 + +// Flag bits for Proghdr flags +#define ELF_PROG_FLAG_EXEC 1 +#define ELF_PROG_FLAG_WRITE 2 +#define ELF_PROG_FLAG_READ 4 \ No newline at end of file diff --git a/include/kernel/exec.h b/include/kernel/exec.h new file mode 100644 index 0000000..964e3bb --- /dev/null +++ b/include/kernel/exec.h @@ -0,0 +1,6 @@ +#pragma once + +namespace Exec +{ + int exec(char *path, char **argv); +} \ No newline at end of file diff --git a/include/kernel/mm.h b/include/kernel/mm.h index 363ce74..1850574 100644 --- a/include/kernel/mm.h +++ b/include/kernel/mm.h @@ -18,6 +18,7 @@ namespace VM int copyout(uint64 *pagetable, uint64 dstva, char *src, uint64 len); int copyin(uint64 *pagetable, char *dst, uint64 srcva, uint64 len); + int copyinstr(uint64 *pagetable, char *dst, uint64 srcva, uint64 max); int handle_cow_fault(uint64 *pagetable, uint64 va); int mappages(uint64 *pagetable, uint64 va, uint64 size, uint64 pa, int perm); diff --git a/include/kernel/proc_def.h b/include/kernel/proc_def.h index e5a2cbc..06c80aa 100644 --- a/include/kernel/proc_def.h +++ b/include/kernel/proc_def.h @@ -1,8 +1,11 @@ #pragma once #include "common/types.h" +#include "common/fcntl.h" struct cpu; struct Trapframe; +class Inode; +struct file; enum ProcState { @@ -51,6 +54,9 @@ struct Proc void *chan; int xstate; + Inode *cwd; + struct file *ofile[NOFILE]; + struct Proc *next; struct Proc *prev; int priority; diff --git a/include/lib/string.h b/include/lib/string.h index aa87489..309bf02 100644 --- a/include/lib/string.h +++ b/include/lib/string.h @@ -10,4 +10,5 @@ void *memcpy(void *dst, const void *src, uint n); void strcpy(char *dst, const char *src); int strlen(const char *s); -int strcmp(const char *s1, const char *s2); \ No newline at end of file +int strcmp(const char *s1, const char *s2); +int strcasecmp(const char *s1, const char *s2); \ No newline at end of file diff --git a/src/drivers/virtio_dist.cc b/src/drivers/virtio_dist.cc index 99d100f..9c981d4 100644 --- a/src/drivers/virtio_dist.cc +++ b/src/drivers/virtio_dist.cc @@ -5,6 +5,7 @@ #include "lib/string.h" #include "drivers/uart.h" #include "kernel/proc.h" +#include "kernel/buf.h" static uint64 virtio_base = 0x10001000; @@ -335,4 +336,39 @@ namespace VirtIO PMM::free_page(buf); } + + void test_bio() + { + Drivers::uart_puts(ANSI_BLUE "[Bio] Starting Buffer Cache Test...\n" ANSI_RESET); + + struct Buf *b = BufferCache::bread(0, 100); + + Drivers::uart_puts("[Bio] Bread block 100 (1st time).\n"); + + b->data[0] = 'L'; + b->data[1] = 'u'; + b->data[2] = 'm'; + b->data[3] = 'e'; + b->data[4] = '\0'; + + BufferCache::bwrite(b); + Drivers::uart_puts("[Bio] Bwrite block 100.\n"); + + BufferCache::brelse(b); + Drivers::uart_puts("[Bio] Brelease block 100.\n"); + + struct Buf *b2 = BufferCache::bread(0, 100); + Drivers::uart_puts("[Bio] Bread block 100 (2nd time).\n"); + + if (b2->data[0] == 'L' && b2->data[1] == 'u' && b2->data[3] == 'e') + { + Drivers::uart_puts(ANSI_GREEN "[Bio] Data verification PASSED.\n" ANSI_RESET); + } + else + { + Drivers::uart_puts(ANSI_RED "[Bio] Data verification FAILED.\n" ANSI_RESET); + } + + BufferCache::brelse(b2); + } } \ No newline at end of file diff --git a/src/fs/fat32.cc b/src/fs/fat32.cc new file mode 100644 index 0000000..7ef829a --- /dev/null +++ b/src/fs/fat32.cc @@ -0,0 +1,325 @@ +#include "fs/fat32.h" +#include "lib/string.h" +#include "drivers/uart.h" +#include "kernel/mm.h" +#include "kernel/proc.h" + +FAT32FileSystem fat32_fs; + +// FAT32 FileSystem Implementation + +void FAT32FileSystem::init() +{ + struct Buf *b = BufferCache::bread(0, 0); + uint8 *data = (uint8 *)b->data; + struct FAT32_BPB *bpb = (struct FAT32_BPB *)data; + + uint32 partition_lba = 0; + + bool is_valid_bpb = (bpb->bytesPerSector == 512) && (bpb->rootClus != 0); + + if (!is_valid_bpb) + { + Drivers::uart_puts("[FAT32] Sector 0 is not a valid BPB. Checking MBR...\n"); + + if (data[510] != 0x55 || data[511] != 0xAA) + { + Drivers::uart_puts("[FAT32] Panic: Invalid Disk Signature!\n"); + while (1) + ; + } + + uint32 lba = *(uint32 *)(data + 446 + 8); + + if (lba > 0) + { + Drivers::uart_puts("[FAT32] MBR Partition 1 found @ Sector "); + Drivers::uart_put_int(lba); + Drivers::uart_puts("\n"); + partition_lba = lba; + } + else + { + Drivers::uart_puts("[FAT32] Panic: No partition found.\n"); + while (1) + ; + } + + BufferCache::brelse(b); + + b = BufferCache::bread(0, partition_lba / 2); + bpb = (struct FAT32_BPB *)b->data; + } + + if (bpb->bytesPerSector != 512) + { + Drivers::uart_puts("[FAT32] Panic: Invalid FAT32 BPB in partition.\n"); + while (1) + ; + } + + uint32 fat_sz = bpb->FATSz32; + uint32 reserved_sec = bpb->reservedSecCnt; + uint8 num_fats = bpb->numFATs; + + sectors_per_cluster = bpb->secPerClus; + bytes_per_cluster = sectors_per_cluster * 512; + root_cluster = bpb->rootClus; + + fat_start_sector = partition_lba + reserved_sec; + data_start_sector = partition_lba + reserved_sec + (fat_sz * num_fats); + + Drivers::uart_puts("[FAT32] Init Success: RootClus="); + Drivers::uart_put_int(root_cluster); + Drivers::uart_puts(", DataStart="); + Drivers::uart_put_int(data_start_sector); + Drivers::uart_puts("\n"); + + BufferCache::brelse(b); +} + +Inode *FAT32FileSystem::root() +{ + FAT32Inode *ip = new FAT32Inode(); + + ip->fs = this; + ip->dev = 0; + ip->inum = root_cluster; + ip->ref_cnt = 1; + ip->valid = 1; + ip->type = T_DIR; + ip->size = 0; + ip->nlink = 1; + + ip->first_clus = root_cluster; + ip->parent_clus = 0; + + return ip; +} + +uint32 FAT32FileSystem::cluster_to_sector(uint32 cluster) +{ + return data_start_sector + (cluster - 2) * sectors_per_cluster; +} + +uint32 FAT32FileSystem::next_cluster(uint32 cluster) +{ + uint32 fat_offset = cluster * 4; + uint32 fat_sector = fat_start_sector + (fat_offset / 512); + uint32 ent_offset = fat_offset % 512; + + // block = sector / 2 + // offset in block = (sector % 2) * 512 + ent_offset + + struct Buf *b = BufferCache::bread(0, fat_sector / 2); + + uint32 block_offset = (fat_sector % 2) * 512 + ent_offset; + uint32 next = *(uint32 *)(b->data + block_offset); + + BufferCache::brelse(b); + + return next & 0x0FFFFFFF; +} + +// FAT32 Inode Implementation + +static bool match_name(const char *disk_name, const char *target) +{ + char temp[13]; + int i, j; + + for (i = 0; i < 8 && disk_name[i] != ' '; i++) + temp[i] = disk_name[i]; + if (disk_name[8] != ' ') + { + temp[i++] = '.'; + for (j = 0; j < 3 && disk_name[8 + j] != ' '; j++) + temp[i++] = disk_name[8 + j]; + } + temp[i] = 0; + return strcasecmp(temp, target) == 0; +} + +int FAT32Inode::read(char *dst, uint32 off, uint32 n, int isUser) +{ + if (first_clus == 0) + return 0; + + uint32 tot = 0; + uint32 clus = first_clus; + uint32 clus_sz = fs->bytes_per_cluster; + + uint32 skip = off / clus_sz; + uint32 current_off = off % clus_sz; + + while (skip > 0) + { + clus = fs->next_cluster(clus); + if (clus >= 0x0FFFFFF8) + return 0; + skip--; + } + + while (tot < n) + { + uint32 sec_in_clus = current_off / 512; + + if (sec_in_clus >= fs->sectors_per_cluster) + { + clus = fs->next_cluster(clus); + if (clus >= 0x0FFFFFF8) + break; + current_off = 0; + continue; + } + + uint32 sec = fs->cluster_to_sector(clus) + sec_in_clus; + uint32 off_in_sec = current_off % 512; + + uint32 m = 512 - off_in_sec; + if (n - tot < m) + m = n - tot; + + struct Buf *b = BufferCache::bread(dev, sec / 2); + uint32 block_offset = (sec % 2) * 512 + off_in_sec; + + if (isUser) + { + if (VM::copyout(myproc()->pagetable, (uint64)dst, (char *)(b->data + block_offset), m) < 0) + { + BufferCache::brelse(b); + return -1; + } + } + else + { + memmove(dst, b->data + block_offset, m); + } + BufferCache::brelse(b); + + tot += m; + dst += m; + current_off += m; + } + return tot; +} + +Inode *FAT32Inode::lookup(const char *name) +{ + if (type != T_DIR) + return nullptr; + + uint32 clus = first_clus; + struct FAT32_DirEnt de; + + while (clus < 0x0FFFFFF8) + { + uint32 sec = fs->cluster_to_sector(clus); + + for (int i = 0; i < fs->sectors_per_cluster; i++) + { + uint32 current_sec = sec + i; + struct Buf *b = BufferCache::bread(dev, current_sec / 2); + uint32 block_base = (current_sec % 2) * 512; + + for (int off = 0; off < 512; off += 32) + { + memmove(&de, b->data + block_base + off, 32); + + if (de.name[0] == 0x00) + { + BufferCache::brelse(b); + return nullptr; + } + if (de.name[0] == 0xE5) + continue; + if (de.attr & ATTR_LONG_NAME) + continue; + + if (match_name(de.name, name)) + { + FAT32Inode *ip = new FAT32Inode(); + ip->fs = fs; + ip->dev = dev; + ip->type = (de.attr & ATTR_DIRECTORY) ? T_DIR : T_FILE; + ip->size = de.fileSize; + ip->first_clus = (de.fstClusHI << 16) | de.fstClusLO; + ip->inum = ip->first_clus; + ip->nlink = 1; + ip->ref_cnt = 1; + ip->valid = 1; + + BufferCache::brelse(b); + return ip; + } + } + BufferCache::brelse(b); + } + clus = fs->next_cluster(clus); + } + return nullptr; +} + +// Placeholder +void FAT32Inode::update() {} +int FAT32Inode::write(const char *src, uint32 off, uint32 n, int isUser) { return -1; } +Inode *FAT32Inode::create(const char *name, short type, short major, short minor) { return nullptr; } +void FAT32Inode::truncate() {} +uint32 FAT32FileSystem::alloc_cluster() { return 0; } + +// Test Function +void fat32_test() +{ + static bool inited = false; + if (!inited) + { + fat32_fs.init(); + inited = true; + } + + Drivers::uart_puts("\n[FAT32] Starting Test via Syscall...\n"); + + Inode *root = fat32_fs.root(); + if (root) + { + Drivers::uart_puts("[FAT32] Root Inode retrieved. Inum: "); + Drivers::uart_put_int(root->inum); + Drivers::uart_puts("\n"); + + Drivers::uart_puts("[FAT32] Looking for TEST.TXT...\n"); + Inode *node = root->lookup("test.txt"); + + if (node) + { + Drivers::uart_puts("[FAT32] Found TEST.TXT! Size: "); + Drivers::uart_put_int(node->size); + Drivers::uart_puts("\n"); + + char buf[128]; + int n = node->read(buf, 0, 127, 0); + if (n > 0) + { + buf[n] = 0; + Drivers::uart_puts("[FAT32] Content:\n>> "); + Drivers::uart_puts(buf); + Drivers::uart_puts("\n"); + } + else + { + Drivers::uart_puts("[FAT32] Read returned 0.\n"); + } + VFS::iput(node); + } + else + { + Drivers::uart_puts("[FAT32] TEST.TXT not found.\n"); + } + VFS::iput(root); + } + else + { + Drivers::uart_puts("[FAT32] Failed to get root inode.\n"); + } + + Drivers::uart_puts("[FAT32] Test Finished.\n"); +} \ No newline at end of file diff --git a/src/fs/file.cc b/src/fs/file.cc new file mode 100644 index 0000000..48af49e --- /dev/null +++ b/src/fs/file.cc @@ -0,0 +1,140 @@ +#include "fs/file.h" +#include "kernel/spinlock.h" +#include "kernel/mm.h" +#include "drivers/uart.h" +#include "kernel/proc.h" + +#define NFILE 100 + +namespace FileTable +{ + struct + { + Spinlock lock; + struct file files[NFILE]; + } ftable; + + void init() + { + ftable.lock.init("file_table"); + } + + struct file *alloc() + { + struct file *f; + ftable.lock.acquire(); + for (f = ftable.files; f < ftable.files + NFILE; f++) + { + if (f->ref == 0) + { + f->ref = 1; + ftable.lock.release(); + return f; + } + } + ftable.lock.release(); + return nullptr; + } + + struct file *dup(struct file *f) + { + ftable.lock.acquire(); + if (f->ref < 1) + { + Drivers::uart_puts("panic: file dup\n"); + while (1) + ; + } + f->ref++; + ftable.lock.release(); + return f; + } + + void close(struct file *f) + { + struct file ff; + + ftable.lock.acquire(); + if(f->ref < 1) + { + Drivers::uart_puts("panic: file close\n"); + while (1) + ; + } + f->ref--; + if (f->ref > 0) + { + ftable.lock.release(); + return; + } + + ff = *f; + f->ref = 0; + f->type = FD_NONE; + ftable.lock.release(); + if (ff.type == FD_INODE) + { + // Release the corresponding Inode + VFS::iput(ff.ip); + } + else if (ff.type == FD_PIPE) + { + // pipeclose(ff.pipe, ff.writable); + } + } + + int read(struct file *f, uint64 addr, int n) + { + if (f->readable == 0) + return -1; + if (f->type == FD_INODE) + { + VFS::ilock(f->ip); + int r = f->ip->read((char*)addr, f->off, n, 1); + if(r > 0) + { + f->off += r; + } + VFS::iunlock(f->ip); + return r; + } + return -1; + } + + int write(struct file *f, uint64 addr, int n) + { + if (f->writable == 0) + return -1; + if (f->type == FD_INODE) + { + VFS::ilock(f->ip); + int r = f->ip->write((char *)addr, f->off, n, 1); + if (r > 0) + { + f->off += r; + } + VFS::iunlock(f->ip); + return r; + } + // else if (f->type == FD_PIPE) ... + + return -1; + } + + int stat(struct file *f, uint64 addr) + { + if (f->type == FD_INODE) + { + struct kstat st; + VFS::ilock(f->ip); + f->ip->getattr(&st); + VFS::iunlock(f->ip); + + struct Proc *p = myproc(); + if (VM::copyout(p->pagetable, addr, (char *)&st, sizeof(st)) < 0) + return -1; + return 0; + } + return -1; + } +} // namespace FileTable diff --git a/src/fs/fs.cc b/src/fs/fs.cc new file mode 100644 index 0000000..b2b91c2 --- /dev/null +++ b/src/fs/fs.cc @@ -0,0 +1,190 @@ +#include "fs/fs.h" +#include "kernel/riscv.h" +#include "drivers/uart.h" +#include "kernel/spinlock.h" +#include "kernel/proc.h" +#include "fs/fat32.h" +#include "lib/string.h" + +static Inode *global_root_inode = nullptr; + +static const char *skipelem(const char *path, char *name) +{ + const char *s; + int len; + + while (*path == '/') + path++; + if (*path == 0) + return nullptr; + + s = path; + while (*path != '/' && *path != 0) + path++; + + len = path - s; + if (len >= 128) + len = 127; + + memmove(name, s, len); + name[len] = 0; + + while (*path == '/') + path++; + return path; +} + +void Inode::getattr(struct kstat *st) +{ + st->dev = dev; + st->ino = inum; + st->type = type; + st->nlink = nlink; + st->size = size; + + st->uid = 0; + st->gid = 0; + st->mode = 0; +} + +namespace VFS +{ + void init() + { + Drivers::uart_puts("[VFS] Inode subsystem initialized.\n"); + } + + void iput(Inode *ip) + { + if (ip == nullptr) + return; + + ip->lock.acquire(); + if(ip->ref_cnt < 1) + { + Drivers::uart_puts("panic: iput ref\n"); + while (1) + ; + } + ip->ref_cnt--; + int ref = ip->ref_cnt; + ip->lock.release(); + + if (ref == 0) + { + delete ip; + } + } + + Inode* idup(Inode *ip) + { + if (ip == nullptr) + return nullptr; + + ip->lock.acquire(); + ip->ref_cnt++; + ip->lock.release(); + return ip; + } + + void ilock(Inode *ip) + { + if (ip == 0 || ip->ref_cnt < 1) + { + Drivers::uart_puts("panic: ilock\n"); + while (1) + ; + } + + ip->lock.acquire(); + + } + + void iunlock(Inode *ip) + { + if (ip == 0 || !ip->lock.holding() || ip->ref_cnt < 1) + { + Drivers::uart_puts("panic: iunlock\n"); + while (1) + ; + } + ip->lock.release(); + } + + static void iunlockput(Inode *ip) + { + iunlock(ip); + iput(ip); + } + + void mount_root(Inode *root) + { + if (global_root_inode) + { + Drivers::uart_puts("VFS: Root already mounted!\n"); + return; + } + global_root_inode = root; + Drivers::uart_puts("[VFS] Root filesystem mounted.\n"); + } + + Inode *get_root() + { + if (global_root_inode == nullptr) + { + Drivers::uart_puts("[VFS] Lazy init: Mounting FAT32...\n"); + fat32_fs.init(); + mount_root(fat32_fs.root()); + } + if (!global_root_inode) + return nullptr; + return idup(global_root_inode); + } + + Inode *namei(const char *path) + { + char name[128]; + Inode *ip, *next; + struct Proc *p = myproc(); + + if (*path == '/') + { + ip = get_root(); + } + else + { + if (p->cwd == nullptr) + { + ip = get_root(); + } + else + { + ip = idup(p->cwd); + } + } + + if (ip == nullptr) + return nullptr; + + while ((path = skipelem(path, name)) != nullptr) + { + ilock(ip); + + if (ip->type != T_DIR) + { + iunlockput(ip); + return nullptr; + } + + next = ip->lookup(name); + iunlockput(ip); + + ip = next; + if (ip == nullptr) + return nullptr; + } + + return ip; + } + +} // namespace VFS diff --git a/src/kernel/bio.cc b/src/kernel/bio.cc new file mode 100644 index 0000000..6e63d60 --- /dev/null +++ b/src/kernel/bio.cc @@ -0,0 +1,135 @@ +#include "kernel/buf.h" +#include "kernel/spinlock.h" +#include "kernel/riscv.h" +#include "drivers/virtio.h" +#include "drivers/uart.h" + +namespace BufferCache +{ + struct + { + Spinlock lock; + struct Buf buf[NBUF]; + struct Buf head; + } bcache; + + void init() + { + bcache.lock.init("bcache"); + // Initialize LRU doubly circular linked list + bcache.head.prev = &bcache.head; + bcache.head.next = &bcache.head; + for (struct Buf *b = bcache.buf; b < bcache.buf + NBUF; ++b) + { + b->lock.init("buffer"); + b->next = bcache.head.next; + b->prev = &bcache.head; + bcache.head.next->prev = b; + bcache.head.next = b; + } + Drivers::uart_puts("[Bio] Buffer cache initialized.\n"); + } + + static struct Buf* bget(uint32 dev, uint32 blockno) + { + struct Buf* b; + bcache.lock.acquire(); + + // Attempt to hit the cache + for (b = bcache.head.next; b != &bcache.head; b = b->next) + { + if (b->dev == dev && b->blockno == blockno) + { + b->refcnt++; + bcache.lock.release(); + b->lock.acquire(); // Acquire Sleep Lock + return b; + } + } + + // Cache miss, evicting LRU + for (b = bcache.head.prev; b != &bcache.head; b = b->prev) + { + if (b->refcnt == 0) + { + b->dev = dev; + b->blockno = blockno; + b->valid = 0; + b->refcnt = 1; + bcache.lock.release(); + b->lock.acquire(); + return b; + } + } + + Drivers::uart_puts("panic: bget: no buffers\n"); + while (1) + ; + } + + struct Buf* bread(uint32 dev, uint32 blockno) + { + struct Buf *b = bget(dev, blockno); + + if (!b->valid) + { + VirtIO::rw(0, b->blockno, (char *)b->data); + b->valid = 1; + } + + return b; + } + + void bwrite(struct Buf *b) + { + if (!b->lock.holding()) + { + Drivers::uart_puts("panic: bwrite\n"); + while (1) + ; + } + VirtIO::rw(1, b->blockno, (char *)b->data); + } + + void brelse(struct Buf *b) + { + if (!b->lock.holding()) + { + Drivers::uart_puts("panic: brelse\n"); + while (1) + ; + } + b->lock.release(); + + bcache.lock.acquire(); + b->refcnt--; + + if (b->refcnt == 0) + { + b->next->prev = b->prev; + b->prev->next = b->next; + + b->next = bcache.head.next; + b->prev = &bcache.head; + bcache.head.next->prev = b; + bcache.head.next = b; + } + + bcache.lock.release(); + } + + void bpin(struct Buf *b) + { + bcache.lock.acquire(); + b->refcnt++; + bcache.lock.release(); + } + + void bunpin(struct Buf* b) + { + bcache.lock.acquire(); + b->refcnt --; + bcache.lock.release(); + } + +} // namespace BufferCache diff --git a/src/kernel/cxx.cc b/src/kernel/cxx.cc new file mode 100644 index 0000000..f9541b5 --- /dev/null +++ b/src/kernel/cxx.cc @@ -0,0 +1,68 @@ +#include "common/types.h" +#include "kernel/pmm.h" +#include "drivers/uart.h" + +/* + * C++ Kernel Runtime Support + * + * * Strategy: Map directly to PMM::alloc_page(). + * Pros: Simple, works immediately for VFS. + * Cons: Allocates 4KB for every object (wasteful for small objects), + * but acceptable for current stage. + */ + +void *operator new(unsigned long size) +{ + // Safety check: PMM allocates 4096 bytes max per call + if (size > 4096) + { + Drivers::uart_puts("panic: new allocation too big (max 4096)\n"); + while (1) + ; + } + + void *p = PMM::alloc_page(); + if (!p) + { + Drivers::uart_puts("panic: new out of memory\n"); + while (1) + ; + } + // PMM::alloc_page returns zeroed memory usually, + // but standard 'new' doesn't guarantee it. + // The constructor will handle initialization. + return p; +} + +void *operator new[](unsigned long size) +{ + return operator new(size); +} + +void operator delete(void *p) +{ + if (p) + PMM::free_page(p); +} + +void operator delete[](void *p) +{ + if (p) + PMM::free_page(p); +} + +// C++14 Sized Deallocation (Required by modern compilers) +// The compiler optimizes 'delete' calls to pass the size of the object +void operator delete(void *p, unsigned long size) +{ + (void)size; // We ignore size because PMM always frees a full page + if (p) + PMM::free_page(p); +} + +void operator delete[](void *p, unsigned long size) +{ + (void)size; + if (p) + PMM::free_page(p); +} \ No newline at end of file diff --git a/src/kernel/main.cc b/src/kernel/main.cc index 6e3bdde..9654c18 100644 --- a/src/kernel/main.cc +++ b/src/kernel/main.cc @@ -9,6 +9,11 @@ #include "kernel/trap.h" #include "kernel/timer.h" #include "kernel/cpu.h" +#include "kernel/buf.h" +#include "fs/fs.h" +#include "fs/file.h" +#include "fs/fat32.h" +#include "lib/string.h" extern void fdt_init(uint64 dtb); extern uint64 g_dtb_addr; @@ -34,6 +39,9 @@ extern "C" void kernel_main(uint64 hartid, uint64 dtb) PLIC::init(); PLIC::inithart(); VirtIO::init(); + BufferCache::init(); + VFS::init(); + FileTable::init(); Timer::init(); ProcManager::init(); // Process Management ProcManager::user_init(); // Initialize first user process diff --git a/src/kernel/mm/vm.cc b/src/kernel/mm/vm.cc index 7057d88..29e9eb7 100644 --- a/src/kernel/mm/vm.cc +++ b/src/kernel/mm/vm.cc @@ -313,6 +313,53 @@ namespace VM return 0; } + int copyinstr(uint64 *pagetable, char *dst, uint64 srcva, uint64 max) + { + uint64 n, va0, pa0; + uint64 *pte; + int got_null = 0; + uint64 len = 0; + + while (len < max) + { + va0 = PGROUNDDOWN(srcva); + pte = walk(pagetable, va0, 0); + + if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) + return -1; + + pa0 = PTE2PA(*pte); + + n = PGSIZE - (srcva - va0); + if (n > max - len) + n = max - len; + + char *p = (char *)(pa0 + (srcva - va0)); + while (n > 0) + { + if (*p == '\0') + { + *dst = '\0'; + got_null = 1; + break; + } + *dst = *p; + n--; + srcva++; + dst++; + p++; + len++; + } + if (got_null) + break; + } + + if (got_null) + return 0; + + return -1; + } + int handle_cow_fault(uint64 *pagetable, uint64 va) { if (va >= MAXVA) diff --git a/src/kernel/proc/proc.cc b/src/kernel/proc/proc.cc index c8b6d1d..f1f1c1d 100644 --- a/src/kernel/proc/proc.cc +++ b/src/kernel/proc/proc.cc @@ -8,6 +8,8 @@ #include "kernel/trap.h" #include "kernel/riscv.h" #include "drivers/uart.h" +#include "fs/fs.h" +#include "fs/file.h" #include "lib/string.h" #define NPROC 64 @@ -172,6 +174,9 @@ found: p->pid = nextpid++; p->priority = 0; p->cpu = mycpu(); + p->cwd = nullptr; + for (int i = 0; i < NOFILE; i++) + p->ofile[i] = nullptr; if ((p->tf = (struct Trapframe *)PMM::alloc_page()) == 0) { @@ -206,6 +211,19 @@ static void freeproc(struct Proc *p) p->kstack = 0; if (p->pagetable) VM::uvmfree(p->pagetable, p->sz); + for (int i = 0; i < NOFILE; i++) + { + if (p->ofile[i]) + { + FileTable::close(p->ofile[i]); + p->ofile[i] = nullptr; + } + } + if (p->cwd) + { + VFS::iput(p->cwd); + p->cwd = nullptr; + } p->pagetable = 0; p->sz = 0; p->pid = 0; @@ -245,6 +263,19 @@ int fork() np->parent = p; np->priority = p->priority; + for (int i = 0; i < NOFILE; i++) + { + if (p->ofile[i]) + { + np->ofile[i] = FileTable::dup(p->ofile[i]); + } + } + + if (p->cwd) + { + np->cwd = VFS::idup(p->cwd); + } + proc_mem_lock.release(); struct cpu *c = mycpu(); @@ -394,6 +425,8 @@ namespace ProcManager p->sz = stack_va + PGSIZE; strcpy(p->name, "initcode"); + p->cwd = nullptr; + proc_mem_lock.release(); struct cpu *c = &cpus[0]; diff --git a/src/kernel/syscall.cc b/src/kernel/syscall.cc index 837ac2c..afa20a1 100644 --- a/src/kernel/syscall.cc +++ b/src/kernel/syscall.cc @@ -1,5 +1,6 @@ #include "kernel/syscall.h" #include "common/types.h" +#include "common/fcntl.h" #include "kernel/proc.h" #include "kernel/riscv.h" #include "drivers/uart.h" @@ -7,6 +8,8 @@ #include "kernel/timer.h" #include "kernel/mm.h" #include "kernel/trap.h" +#include "fs/fat32.h" +#include "fs/file.h" extern "C++" int fork(); @@ -45,47 +48,126 @@ static int argint(int n, int *ip) return 0; } +static int argstr(int n, char *buf, int max) +{ + uint64 addr = argraw(n); + return VM::copyinstr(myproc()->pagetable, buf, addr, max); +} + +static int fdalloc(struct file *f) +{ + struct Proc *p = myproc(); + for (int i = 0; i < NOFILE; i++) + { + if (p->ofile[i] == 0) + { + p->ofile[i] = f; + return i; + } + } + return -1; +} + +static uint64 sys_open() +{ + char path[128]; + int omode; + int fd; + struct file *f; + Inode *ip; + + if (argstr(0, path, 128) < 0 || argint(1, &omode) < 0) + return -1; + + ip = VFS::namei(path); + if (ip == nullptr) + { + return -1; + } + + f = FileTable::alloc(); + if (f == nullptr) + { + VFS::iput(ip); + return -1; + } + + fd = fdalloc(f); + if (fd < 0) + { + f->ref = 0; + f->type = FD_NONE; + VFS::iput(ip); + return -1; + } + + f->type = FD_INODE; + f->ip = ip; + f->off = 0; + f->readable = !(omode & O_WRONLY); + f->writable = (omode & O_WRONLY) || (omode & O_RDWR); -static uint64_t sys_exit() + return fd; +} + +static uint64 sys_close() +{ + int fd; + if (argint(0, &fd) < 0) + return -1; + + struct Proc *p = myproc(); + if (fd < 0 || fd >= NOFILE || p->ofile[fd] == 0) + return -1; + + FileTable::close(p->ofile[fd]); + p->ofile[fd] = 0; + return 0; +} + +static uint64 sys_exit() { int n; if (argint(0, &n) < 0) - return static_cast(-1); + return static_cast(-1); ProcManager::exit(n); return 0; } -static uint64_t sys_fork() +static uint64 sys_fork() { - return static_cast(fork()); + return static_cast(fork()); } -static uint64_t sys_wait() +static uint64 sys_wait() { - uint64_t p = argraw(0); - return static_cast(ProcManager::wait(p)); + uint64 p = argraw(0); + return static_cast(ProcManager::wait(p)); } -static uint64_t sys_getpid() +static uint64 sys_getpid() { - return static_cast(myproc()->pid); + return static_cast(myproc()->pid); } -static uint64_t sys_putc() +static uint64 sys_putc() { char c = static_cast(argraw(0)); Drivers::uart_putc(c); return 0; } -static uint64_t sys_write() +static uint64 sys_write() { - int fd; + struct file *f; int n; - uint64_t p; + uint64 p; + int fd; - if (argint(0, &fd) < 0 || argint(2, &n) < 0) - return static_cast(-1); + if (argint(0, &fd) < 0 || argint(2, &n) < 0 || argint(1, (int *)&p) < 0) + return -1; + + struct Proc *proc = myproc(); p = argraw(1); @@ -95,9 +177,8 @@ static uint64_t sys_write() // Drivers::uart_put_int(n); // Drivers::uart_puts("\n"); - if (fd == 1) // stdout + if (fd == 1 && proc->ofile[fd] == nullptr) // stdout { - Proc *proc = myproc(); constexpr int MAX_WRITE_BUF = 128; char buf[MAX_WRITE_BUF]; int i = 0; @@ -108,10 +189,10 @@ static uint64_t sys_write() if (len > MAX_WRITE_BUF) len = MAX_WRITE_BUF; - if (VM::copyin(proc->pagetable, buf, p + i, static_cast(len)) < 0) + if (VM::copyin(proc->pagetable, buf, p + i, static_cast(len)) < 0) { Drivers::uart_puts("sys_write: copyin failed\n"); - return static_cast(-1); + return static_cast(-1); } for (int j = 0; j < len; j++) @@ -120,45 +201,57 @@ static uint64_t sys_write() } i += len; } - return static_cast(n); + return static_cast(n); } - return static_cast(-1); + if (fd < 0 || fd >= NOFILE || (f = proc->ofile[fd]) == 0) + return static_cast(-1); + + return FileTable::write(f, p, n); } static uint64_t sys_read() { - int fd; + struct file *f; int n; - uint64_t p; + uint64 p; + int fd; // get param: fd, buf, len - if (argint(0, &fd) < 0 || argint(2, &n) < 0) + if (argint(0, &fd) < 0 || argint(2, &n) < 0 || argint(1, (int *)&p) < 0) return -1; - p = argraw(1); - - if (fd == 0) // stdin + + struct Proc* proc = myproc(); + if (fd == 0 && proc->ofile[fd] == nullptr) { return Drivers::console_read(p, n); } + + if (fd < 0 || fd >= NOFILE || (f = proc->ofile[fd]) == 0) + return -1; + + return FileTable::read(f, p, n); + return -1; } -static uint64_t sys_sbrk() +static uint64 sys_sbrk() { int n; if (argint(0, &n) < 0) return -1; - uint64_t addr = myproc()->sz; + uint64 addr = myproc()->sz; if (ProcManager::growproc(n) < 0) return -1; return addr; } -static uint64_t sys_disk_test() +static uint64 sys_disk_test() { - VirtIO::test_rw(); + // VirtIO::test_rw(); + // VirtIO::test_bio(); + fat32_test(); return 0; } @@ -166,7 +259,7 @@ void syscall() { Proc *p = myproc(); int num = p->tf->a7; - uint64_t ret = static_cast(-1); + uint64 ret = static_cast(-1); /* Just For Debug */ // Drivers::uart_puts("Syscall: "); @@ -175,6 +268,12 @@ void syscall() switch (num) { + case SYS_open: + ret = sys_open(); + break; + case SYS_close: + ret = sys_close(); + break; case SYS_write: ret = sys_write(); break; @@ -206,7 +305,7 @@ void syscall() Drivers::uart_puts("Unknown Syscall ID: "); Drivers::print_hex(num); Drivers::uart_puts("\n"); - ret = static_cast(-1); + ret = static_cast(-1); break; } diff --git a/src/lib/string.cc b/src/lib/string.cc index bbd079d..a302fc6 100644 --- a/src/lib/string.cc +++ b/src/lib/string.cc @@ -69,3 +69,16 @@ int strcmp(const char *s1, const char *s2) } return *(const unsigned char *)s1 - *(const unsigned char *)s2; } + +int strcasecmp(const char *s1, const char *s2) +{ + while (*s1) + { + if(*s1 == *s2 || *s1 + 32 == *s2 || *s1 == *s2 + 32){ + s1++; + s2++; + } + else break; + } + return *(const unsigned char *)s1 - *(const unsigned char *)s2; +} \ No newline at end of file diff --git a/src/user/init.cc b/src/user/init.cc index 1646f6b..27c1e2f 100644 --- a/src/user/init.cc +++ b/src/user/init.cc @@ -1,4 +1,5 @@ #include "user/user.h" +#include "common/fcntl.h" int strlen(const char *s) { @@ -149,7 +150,40 @@ void test_syscalls() int main() { - print("\n[Lume Shell] Ready.\n"); + print("\n[Lume Shell] Init process started.\n"); + print("[Test] Opening test.txt...\n"); + int fd = open("test.txt", O_RDONLY); + if (fd < 0) + { + print("[Test] Open failed (Is test.txt in fs.img?)\n"); + } + else + { + print("[Test] Open success! fd="); + print_int(fd); + print("\n"); + + char buf[64]; + int n = read(fd, buf, 63); + if (n > 0) + { + buf[n] = 0; + print("[Test] Read content:\n---\n"); + print(buf); + print("\n---\n"); + } + else + { + print("[Test] Read returned "); + print_int(n); + print("\n"); + } + close(fd); + print("[Test] File closed.\n"); + } + + + print("Commands:\n"); print(" s: Run System Call Tests (fork, wait, mm)\n"); print(" t: Run Disk Driver Test (VirtIO)\n"); -- cgit v1.2.3 From 1c8e37f63d413a559825020289178d442537449e Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Fri, 2 Jan 2026 10:09:37 +0800 Subject: dev(sell): add simple libc and implement shell please see the log for detail. --- Makefile | 71 +- build/kernel.elf | Bin 248784 -> 296040 bytes build/src/drivers/plic.o | Bin 19656 -> 19664 bytes build/src/drivers/uart.o | Bin 92888 -> 91816 bytes build/src/fs/file.o | Bin 51760 -> 60680 bytes build/src/fs/fs.o | Bin 74136 -> 81576 bytes build/src/kernel/initcode.o | Bin 4368 -> 31496 bytes build/src/kernel/main.o | Bin 21336 -> 21904 bytes build/src/kernel/mm/pmm.o | Bin 90360 -> 90344 bytes build/src/kernel/mm/slab.o | Bin 67664 -> 67664 bytes build/src/kernel/mm/vm.o | Bin 227848 -> 234008 bytes build/src/kernel/proc/exec.o | Bin 0 -> 62896 bytes build/src/kernel/spinlock.o | Bin 99920 -> 100232 bytes build/src/kernel/syscall.o | Bin 91592 -> 123472 bytes build/src/kernel/trap/handler.o | Bin 70200 -> 71232 bytes build/ulib/cxx.o | Bin 0 -> 10232 bytes build/ulib/iostream.o | Bin 0 -> 13632 bytes build/ulib/stdio.o | Bin 0 -> 1037384 bytes build/ulib/stdlib.o | Bin 0 -> 170728 bytes build/ulib/string.o | Bin 0 -> 117952 bytes build/user/init.o | Bin 121792 -> 16896 bytes build/user/initcode | Bin 3344 -> 30472 bytes build/user/initcode.asm | 11649 +++++++++++++++++++++++++++++++---- build/user/initcode.out | Bin 23808 -> 168736 bytes build/user/sh | Bin 0 -> 204136 bytes build/user/sh.asm | 12620 ++++++++++++++++++++++++++++++++++++++ build/user/sh.o | Bin 0 -> 285040 bytes build/user/usys.o | Bin 5280 -> 5392 bytes docs/debug/debug_slab.md | 94 + docs/debug/debug_slab_1.png | Bin 0 -> 90366 bytes fs.img | Bin 33554432 -> 33554432 bytes include/fs/file.h | 1 + include/fs/fs.h | 1 + include/kernel/mm.h | 2 + include/kernel/syscall.h | 1 + include/ulib/assert.h | 20 + include/ulib/cstdlib | 52 + include/ulib/cstring | 32 + include/ulib/ctypes.h | 26 + include/ulib/cxx.cc | 32 + include/ulib/errno.h | 31 + include/ulib/iostream | 110 + include/ulib/limits.h | 22 + include/ulib/stb_sprintf.h | 1916 ++++++ include/ulib/stdio.h | 97 + include/ulib/stdlib.h | 95 + include/ulib/string.h | 70 + include/ulib/types.h | 21 + src/drivers/uart.cc | 2 +- src/fs/file.cc | 40 + src/fs/fs.cc | 4 +- src/kernel/main.cc | 2 + src/kernel/mm/pmm.cc | 12 +- src/kernel/mm/vm.cc | 29 + src/kernel/proc/exec.cc | 210 + src/kernel/syscall.cc | 115 + src/kernel/trap/handler.cc | 6 + src/ulib/assert.c | 8 + src/ulib/cxx.cc | 31 + src/ulib/iostream.cpp | 8 + src/ulib/stdio.c | 1052 ++++ src/ulib/stdlib.c | 540 ++ src/ulib/string.c | 331 + src/user/init.cc | 237 +- src/user/sh.cc | 409 ++ src/user/usys.S | 13 +- 66 files changed, 28725 insertions(+), 1287 deletions(-) create mode 100644 build/src/kernel/proc/exec.o create mode 100644 build/ulib/cxx.o create mode 100644 build/ulib/iostream.o create mode 100644 build/ulib/stdio.o create mode 100644 build/ulib/stdlib.o create mode 100644 build/ulib/string.o create mode 100755 build/user/sh create mode 100644 build/user/sh.asm create mode 100644 build/user/sh.o create mode 100644 docs/debug/debug_slab.md create mode 100644 docs/debug/debug_slab_1.png create mode 100644 include/ulib/assert.h create mode 100644 include/ulib/cstdlib create mode 100644 include/ulib/cstring create mode 100644 include/ulib/ctypes.h create mode 100644 include/ulib/cxx.cc create mode 100644 include/ulib/errno.h create mode 100644 include/ulib/iostream create mode 100644 include/ulib/limits.h create mode 100644 include/ulib/stb_sprintf.h create mode 100644 include/ulib/stdio.h create mode 100644 include/ulib/stdlib.h create mode 100644 include/ulib/string.h create mode 100644 include/ulib/types.h create mode 100644 src/kernel/proc/exec.cc create mode 100644 src/ulib/assert.c create mode 100644 src/ulib/cxx.cc create mode 100644 src/ulib/iostream.cpp create mode 100644 src/ulib/stdio.c create mode 100644 src/ulib/stdlib.c create mode 100644 src/ulib/string.c create mode 100644 src/user/sh.cc (limited to 'build/src/kernel/mm') diff --git a/Makefile b/Makefile index 715fff8..51366d5 100644 --- a/Makefile +++ b/Makefile @@ -12,14 +12,28 @@ CFLAGS := -Wall -Wextra -O2 -g -ffreestanding -nostdlib -mcmodel=medany -Iincl CXXFLAGS := $(CFLAGS) -fno-exceptions -fno-rtti -fno-use-cxa-atexit LINKER_SCRIPT := linker.ld -UPROGS_SRC := $(SRC_DIR)/user/init.cc -UPROGS_OBJ := $(BUILD_DIR)/user/entry.o $(BUILD_DIR)/user/init.o -ULIB_OBJ := $(BUILD_DIR)/user/usys.o USER_LD := $(SRC_DIR)/user/user.ld +ULIB_OBJS := $(BUILD_DIR)/user/entry.o \ + $(BUILD_DIR)/user/usys.o \ + $(BUILD_DIR)/ulib/stdio.o \ + $(BUILD_DIR)/ulib/stdlib.o \ + $(BUILD_DIR)/ulib/string.o \ + $(BUILD_DIR)/ulib/cxx.o \ + $(BUILD_DIR)/ulib/iostream.o + INITCODE_BIN := $(BUILD_DIR)/user/initcode -SRCS_S := $(shell find $(SRC_DIR) -name "*.S" -not -path "$(SRC_DIR)/user/*") -SRCS_CXX := $(shell find $(SRC_DIR) -name "*.cc" -not -path "$(SRC_DIR)/user/*") +SH_SRC := $(SRC_DIR)/user/sh.cc +SH_OBJ := $(BUILD_DIR)/user/sh.o +SH_BIN := $(BUILD_DIR)/user/sh + +INIT_SRC := $(SRC_DIR)/user/init.cc +INIT_OBJ := $(BUILD_DIR)/user/init.o +INIT_BIN := $(BUILD_DIR)/user/init + +SRCS_S := $(shell find $(SRC_DIR) -name "*.S" -not -path "$(SRC_DIR)/user/*" -not -path "$(SRC_DIR)/ulib/*") +SRCS_CXX := $(shell find $(SRC_DIR) -name "*.cc" -not -path "$(SRC_DIR)/user/*" -not -path "$(SRC_DIR)/ulib/*") + OBJS := $(SRCS_S:%.S=$(BUILD_DIR)/%.o) $(SRCS_CXX:%.cc=$(BUILD_DIR)/%.o) TARGET := $(BUILD_DIR)/kernel.elf @@ -29,26 +43,47 @@ QEMUOPTS += -device virtio-blk-device,drive=x0 -global virtio-mmio.force-legacy= .PHONY: all clean run debug -all: $(TARGET) +all: $(TARGET) fs.img + +$(BUILD_DIR)/ulib/%.o: $(SRC_DIR)/ulib/%.c + @mkdir -p $(dir $@) + @echo " ULIB_C $<" + @$(CC) $(CFLAGS) -c $< -o $@ + +$(BUILD_DIR)/ulib/%.o: $(SRC_DIR)/ulib/%.cc + @mkdir -p $(dir $@) + @echo " ULIB_CC $<" + @$(CXX) $(CXXFLAGS) -c $< -o $@ + +$(BUILD_DIR)/ulib/%.o: $(SRC_DIR)/ulib/%.cpp + @mkdir -p $(dir $@) + @echo " ULIB_CPP $<" + @$(CXX) $(CXXFLAGS) -c $< -o $@ $(BUILD_DIR)/user/%.o: $(SRC_DIR)/user/%.cc @mkdir -p $(dir $@) - @echo " U_CXX $<" + @echo " USER_CC $<" @$(CXX) $(CXXFLAGS) -c $< -o $@ $(BUILD_DIR)/user/%.o: $(SRC_DIR)/user/%.S @mkdir -p $(dir $@) - @echo " U_AS $<" + @echo " USER_AS $<" @$(CC) $(CFLAGS) -c $< -o $@ -$(INITCODE_BIN): $(UPROGS_OBJ) $(ULIB_OBJ) $(USER_LD) + +$(INITCODE_BIN): $(BUILD_DIR)/user/init.o $(ULIB_OBJS) $(USER_LD) @echo " U_LD $@" - @$(LD) -T $(USER_LD) -o $@.out $(UPROGS_OBJ) $(ULIB_OBJ) + @$(LD) -T $(USER_LD) -o $@.out $(BUILD_DIR)/user/init.o $(ULIB_OBJS) @$(OBJCOPY) -S -O binary $@.out $@ @$(OBJDUMP) -S $@.out > $@.asm +$(SH_BIN): $(SH_OBJ) $(ULIB_OBJS) $(USER_LD) + @echo " SH_LD $@" + @$(LD) -T $(USER_LD) -o $@ $(SH_OBJ) $(ULIB_OBJS) + @$(OBJDUMP) -S $@ > $@.asm + $(TARGET): $(OBJS) $(LINKER_SCRIPT) - @echo " LD $@" + @echo " K_LD $@" @$(LD) -T $(LINKER_SCRIPT) -o $@ $(OBJS) $(BUILD_DIR)/src/kernel/initcode.o: $(SRC_DIR)/kernel/initcode.S $(INITCODE_BIN) @@ -58,19 +93,21 @@ $(BUILD_DIR)/src/kernel/initcode.o: $(SRC_DIR)/kernel/initcode.S $(INITCODE_BIN) $(BUILD_DIR)/%.o: %.S @mkdir -p $(dir $@) - @echo " AS $<" + @echo " K_AS $<" @$(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/%.o: %.cc @mkdir -p $(dir $@) - @echo " CXX $<" + @echo " K_CXX $<" @$(CXX) $(CXXFLAGS) -c $< -o $@ -fs.img: - @echo " IMG Generating fs.img (1MB)" - @dd if=/dev/zero of=fs.img bs=1M count=1 2>/dev/null +fs.img: $(SH_BIN) + @echo " IMG Generating fs.img (FAT32)" + @dd if=/dev/zero of=fs.img bs=1M count=32 2>/dev/null + @mkfs.vfat -F 32 fs.img >/dev/null + @mcopy -i fs.img $(SH_BIN) ::/sh -run: $(TARGET) fs.img +run: $(TARGET) fs.img @echo " QEMU Running..." @qemu-system-riscv64 -machine virt -nographic \ -kernel $(TARGET) -m 128M $(QEMUOPTS) diff --git a/build/kernel.elf b/build/kernel.elf index cf12d9c..57d8b38 100755 Binary files a/build/kernel.elf and b/build/kernel.elf differ diff --git a/build/src/drivers/plic.o b/build/src/drivers/plic.o index cf2c85d..a41ab0f 100644 Binary files a/build/src/drivers/plic.o and b/build/src/drivers/plic.o differ diff --git a/build/src/drivers/uart.o b/build/src/drivers/uart.o index e771c9f..eff27fd 100644 Binary files a/build/src/drivers/uart.o and b/build/src/drivers/uart.o differ diff --git a/build/src/fs/file.o b/build/src/fs/file.o index 7dc96e9..0969101 100644 Binary files a/build/src/fs/file.o and b/build/src/fs/file.o differ diff --git a/build/src/fs/fs.o b/build/src/fs/fs.o index dd6a386..1a9f037 100644 Binary files a/build/src/fs/fs.o and b/build/src/fs/fs.o differ diff --git a/build/src/kernel/initcode.o b/build/src/kernel/initcode.o index 0bfbd9e..c575853 100644 Binary files a/build/src/kernel/initcode.o and b/build/src/kernel/initcode.o differ diff --git a/build/src/kernel/main.o b/build/src/kernel/main.o index 6b663cd..4dc1957 100644 Binary files a/build/src/kernel/main.o and b/build/src/kernel/main.o differ diff --git a/build/src/kernel/mm/pmm.o b/build/src/kernel/mm/pmm.o index b0bdecf..b8511f7 100644 Binary files a/build/src/kernel/mm/pmm.o and b/build/src/kernel/mm/pmm.o differ diff --git a/build/src/kernel/mm/slab.o b/build/src/kernel/mm/slab.o index 2d97ca1..9fab0ae 100644 Binary files a/build/src/kernel/mm/slab.o and b/build/src/kernel/mm/slab.o differ diff --git a/build/src/kernel/mm/vm.o b/build/src/kernel/mm/vm.o index 8743310..d73e9a6 100644 Binary files a/build/src/kernel/mm/vm.o and b/build/src/kernel/mm/vm.o differ diff --git a/build/src/kernel/proc/exec.o b/build/src/kernel/proc/exec.o new file mode 100644 index 0000000..5b735ed Binary files /dev/null and b/build/src/kernel/proc/exec.o differ diff --git a/build/src/kernel/spinlock.o b/build/src/kernel/spinlock.o index 769f5e7..83e8c3c 100644 Binary files a/build/src/kernel/spinlock.o and b/build/src/kernel/spinlock.o differ diff --git a/build/src/kernel/syscall.o b/build/src/kernel/syscall.o index bc3200e..fc85e72 100644 Binary files a/build/src/kernel/syscall.o and b/build/src/kernel/syscall.o differ diff --git a/build/src/kernel/trap/handler.o b/build/src/kernel/trap/handler.o index 9949470..44a2baa 100644 Binary files a/build/src/kernel/trap/handler.o and b/build/src/kernel/trap/handler.o differ diff --git a/build/ulib/cxx.o b/build/ulib/cxx.o new file mode 100644 index 0000000..a8a97d0 Binary files /dev/null and b/build/ulib/cxx.o differ diff --git a/build/ulib/iostream.o b/build/ulib/iostream.o new file mode 100644 index 0000000..33930e4 Binary files /dev/null and b/build/ulib/iostream.o differ diff --git a/build/ulib/stdio.o b/build/ulib/stdio.o new file mode 100644 index 0000000..b882963 Binary files /dev/null and b/build/ulib/stdio.o differ diff --git a/build/ulib/stdlib.o b/build/ulib/stdlib.o new file mode 100644 index 0000000..1b599da Binary files /dev/null and b/build/ulib/stdlib.o differ diff --git a/build/ulib/string.o b/build/ulib/string.o new file mode 100644 index 0000000..3265836 Binary files /dev/null and b/build/ulib/string.o differ diff --git a/build/user/init.o b/build/user/init.o index 6380026..2a88dfa 100644 Binary files a/build/user/init.o and b/build/user/init.o differ diff --git a/build/user/initcode b/build/user/initcode index ef0eb5a..62c8987 100755 Binary files a/build/user/initcode and b/build/user/initcode differ diff --git a/build/user/initcode.asm b/build/user/initcode.asm index 99769f6..d2a48a1 100644 --- a/build/user/initcode.asm +++ b/build/user/initcode.asm @@ -4,1133 +4,10662 @@ build/user/initcode.out: file format elf64-littleriscv Disassembly of section .text: -0000000000000000 <_start>: +0000000000000000
: +#include "ulib/stdlib.h" +#include "ulib/string.h" +#include "user/user.h" + +int main() +{ + 0: 715d addi sp,sp,-80 + char *argv[] = {(char *)"sh", 0}; + 2: 00005797 auipc a5,0x5 + 6: ffe78793 addi a5,a5,-2 # 5000 <_GLOBAL__sub_I__ZSt3cin+0x38> + + printf("[Init] Starting Lume OS Shell...\n"); + a: 00005517 auipc a0,0x5 + e: ffe50513 addi a0,a0,-2 # 5008 <_GLOBAL__sub_I__ZSt3cin+0x40> +{ + 12: fc26 sd s1,56(sp) + 14: f84a sd s2,48(sp) + 16: f44e sd s3,40(sp) + 18: f052 sd s4,32(sp) + 1a: e486 sd ra,72(sp) + 1c: e0a2 sd s0,64(sp) + char *argv[] = {(char *)"sh", 0}; + 1e: e83e sd a5,16(sp) + 20: ec02 sd zero,24(sp) + printf("[Init] Starting Lume OS Shell...\n"); + 22: 0024 addi s1,sp,8 + 24: 0c7030ef jal 38ea + int pid = fork(); + // printf("fork suceess, pid=%i\n", pid); + + if (pid < 0) + { + printf("[Init] fork failed!\n"); + 28: 00005a17 auipc s4,0x5 + 2c: 008a0a13 addi s4,s4,8 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x68> + printf("Shell Exit"); + break; + } + if (wpid < 0) + { + printf("[Init] wait error or no child\n"); + 30: 00005997 auipc s3,0x5 + 34: 04098993 addi s3,s3,64 # 5070 <_GLOBAL__sub_I__ZSt3cin+0xa8> + printf("Shell Exit"); + 38: 00005917 auipc s2,0x5 + 3c: 02890913 addi s2,s2,40 # 5060 <_GLOBAL__sub_I__ZSt3cin+0x98> + int pid = fork(); + 40: 088000ef jal c8 + 44: 842a mv s0,a0 + if (pid < 0) + 46: 02054363 bltz a0,6c + if (pid == 0) + 4a: e501 bnez a0,52 + 4c: a81d j 82 + if (wpid < 0) + 4e: 02054663 bltz a0,7a + wpid = wait((uint64)&status); + 52: 8526 mv a0,s1 + 54: 07c000ef jal d0 + if (wpid == pid) + 58: fea41be3 bne s0,a0,4e + printf("Shell Exit"); + 5c: 854a mv a0,s2 + 5e: 08d030ef jal 38ea + int pid = fork(); + 62: 066000ef jal c8 + 66: 842a mv s0,a0 + if (pid < 0) + 68: fe0551e3 bgez a0,4a + printf("[Init] fork failed!\n"); + 6c: 8552 mv a0,s4 + 6e: 07d030ef jal 38ea + exit(1); + 72: 4505 li a0,1 + 74: 38a040ef jal 43fe + if (pid == 0) + 78: bfe9 j 52 + printf("[Init] wait error or no child\n"); + 7a: 854e mv a0,s3 + 7c: 06f030ef jal 38ea + + break; + } + } + } + } + 80: b7c1 j 40 + char sh_path[] = "/sh"; + 82: 006877b7 lui a5,0x687 + 86: 32f78793 addi a5,a5,815 # 68732f <_ZSt4cerr+0x67fae7> + exec(sh_path, argv); + 8a: 080c addi a1,sp,16 + 8c: 8526 mv a0,s1 + char sh_path[] = "/sh"; + 8e: c43e sw a5,8(sp) + exec(sh_path, argv); + 90: 070000ef jal 100 + printf("[Init] exec sh failed\n"); + 94: 00005517 auipc a0,0x5 + 98: fb450513 addi a0,a0,-76 # 5048 <_GLOBAL__sub_I__ZSt3cin+0x80> + 9c: 04f030ef jal 38ea + return 0; + a0: 60a6 ld ra,72(sp) + a2: 6406 ld s0,64(sp) + a4: 74e2 ld s1,56(sp) + a6: 7942 ld s2,48(sp) + a8: 79a2 ld s3,40(sp) + aa: 7a02 ld s4,32(sp) + ac: 4501 li a0,0 + ae: 6161 addi sp,sp,80 + b0: 8082 ret + +00000000000000b2 <_start>: .section .text .global _start -_start: - li a0, 0 - 0: 4501 li a0,0 - li a1, 0 - 2: 4581 li a1,0 +_start: + li a0, 0 + b2: 4501 li a0,0 + li a1, 0 + b4: 4581 li a1,0 + + call main + b6: f4bff0ef jal 0
+ + call exit + ba: 344040ef jal 43fe + + be: a001 j be <_start+0xc> + +00000000000000c0 : + name: \ + li a7, SYS_ ## sysname; \ + ecall; \ + ret + +SYSCALL_NAME(sys_exit, exit) + c0: 488d li a7,3 + c2: 00000073 ecall + c6: 8082 ret + +00000000000000c8 : + +SYSCALL(fork) + c8: 4889 li a7,2 + ca: 00000073 ecall + ce: 8082 ret + +00000000000000d0 : +SYSCALL(wait) + d0: 4891 li a7,4 + d2: 00000073 ecall + d6: 8082 ret + +00000000000000d8 : +SYSCALL(pipe) + d8: 4895 li a7,5 + da: 00000073 ecall + de: 8082 ret + +00000000000000e0 : +SYSCALL(read) + e0: 4899 li a7,6 + e2: 00000073 ecall + e6: 8082 ret + +00000000000000e8 : +SYSCALL(write) + e8: 48c5 li a7,17 + ea: 00000073 ecall + ee: 8082 ret + +00000000000000f0 : +SYSCALL(close) + f0: 48d9 li a7,22 + f2: 00000073 ecall + f6: 8082 ret + +00000000000000f8 : +SYSCALL(kill) + f8: 489d li a7,7 + fa: 00000073 ecall + fe: 8082 ret + +0000000000000100 : +SYSCALL(exec) + 100: 48a1 li a7,8 + 102: 00000073 ecall + 106: 8082 ret + +0000000000000108 : +SYSCALL(open) + 108: 48c1 li a7,16 + 10a: 00000073 ecall + 10e: 8082 ret + +0000000000000110 : +SYSCALL(mknod) + 110: 48c9 li a7,18 + 112: 00000073 ecall + 116: 8082 ret + +0000000000000118 : +SYSCALL(unlink) + 118: 48cd li a7,19 + 11a: 00000073 ecall + 11e: 8082 ret + +0000000000000120 : +SYSCALL(fstat) + 120: 48a5 li a7,9 + 122: 00000073 ecall + 126: 8082 ret + +0000000000000128 : +SYSCALL(link) + 128: 48d1 li a7,20 + 12a: 00000073 ecall + 12e: 8082 ret + +0000000000000130 : +SYSCALL(mkdir) + 130: 48d5 li a7,21 + 132: 00000073 ecall + 136: 8082 ret + +0000000000000138 : +SYSCALL(chdir) + 138: 48a9 li a7,10 + 13a: 00000073 ecall + 13e: 8082 ret + +0000000000000140 : +SYSCALL(dup) + 140: 48ad li a7,11 + 142: 00000073 ecall + 146: 8082 ret + +0000000000000148 : +SYSCALL(getpid) + 148: 48b1 li a7,12 + 14a: 00000073 ecall + 14e: 8082 ret + +0000000000000150 : +SYSCALL(sbrk) + 150: 48b5 li a7,13 + 152: 00000073 ecall + 156: 8082 ret + +0000000000000158 : +SYSCALL(sleep) + 158: 48b9 li a7,14 + 15a: 00000073 ecall + 15e: 8082 ret + +0000000000000160 : +SYSCALL(uptime) + 160: 48bd li a7,15 + 162: 00000073 ecall + 166: 8082 ret + +0000000000000168 : +SYSCALL(putc) + 168: 4885 li a7,1 + 16a: 00000073 ecall + 16e: 8082 ret + +0000000000000170 : +SYSCALL(disk_test) + 170: 48dd li a7,23 + 172: 00000073 ecall + 176: 8082 ret + +0000000000000178 : + 178: 48e1 li a7,24 + 17a: 00000073 ecall + 17e: 8082 ret + +0000000000000180 : + 180: 45dc lw a5,12(a1) + 182: 4598 lw a4,8(a1) + 184: 9fb1 addw a5,a5,a2 + 186: c5dc sw a5,12(a1) + 188: 0007069b sext.w a3,a4 + 18c: 00e65463 bge a2,a4,194 + 190: 0006069b sext.w a3,a2 + 194: c685 beqz a3,1bc + 196: 619c ld a5,0(a1) + 198: 00a78e63 beq a5,a0,1b4 + 19c: 00d50633 add a2,a0,a3 + 1a0: 00054703 lbu a4,0(a0) + 1a4: 0505 addi a0,a0,1 + 1a6: 0785 addi a5,a5,1 + 1a8: fee78fa3 sb a4,-1(a5) + 1ac: fec56ae3 bltu a0,a2,1a0 + 1b0: 6188 ld a0,0(a1) + 1b2: 4598 lw a4,8(a1) + 1b4: 9f15 subw a4,a4,a3 + 1b6: 9536 add a0,a0,a3 + 1b8: e188 sd a0,0(a1) + 1ba: c598 sw a4,8(a1) + 1bc: 1ff00793 li a5,511 + 1c0: 00e7d463 bge a5,a4,1c8 + 1c4: 6188 ld a0,0(a1) + 1c6: 8082 ret + 1c8: 01058513 addi a0,a1,16 + 1cc: 8082 ret + +00000000000001ce : + 1ce: 45dc lw a5,12(a1) + 1d0: 01058513 addi a0,a1,16 + 1d4: 9fb1 addw a5,a5,a2 + 1d6: c5dc sw a5,12(a1) + 1d8: 8082 ret + +00000000000001da : + 1da: e20508d3 fmv.x.d a7,fa0 + 1de: 82aa mv t0,a0 + 1e0: 4348d813 srai a6,a7,0x34 + 1e4: 8ec6 mv t4,a7 + 1e6: 7ff87813 andi a6,a6,2047 + 1ea: 8346 mv t1,a7 + 1ec: 03f8d513 srli a0,a7,0x3f + 1f0: 0008d663 bgez a7,1fc + 1f4: 22a517d3 fneg.d fa5,fa0 + 1f8: e20788d3 fmv.x.d a7,fa5 + 1fc: 7ff00e13 li t3,2047 + 200: 35c80663 beq a6,t3,54c + 204: 1101 addi sp,sp,-32 + 206: 14080363 beqz a6,34c + 20a: c018081b addiw a6,a6,-1023 + 20e: ec22 sd s0,24(sp) + 210: 02081313 slli t1,a6,0x20 + 214: 66034d63 bltz t1,88e + 218: 4d100313 li t1,1233 + 21c: 0303033b mulw t1,t1,a6 + 220: 4849 li a6,18 + 222: 40c3531b sraiw t1,t1,0xc + 226: 0013039b addiw t2,t1,1 + 22a: 4078083b subw a6,a6,t2 + 22e: 4359 li t1,22 + 230: 17036163 bltu t1,a6,392 + 234: 00005317 auipc t1,0x5 + 238: 19430313 addi t1,t1,404 # 53c8 + 23c: 080e slli a6,a6,0x3 + 23e: 981a add a6,a6,t1 + 240: 00083e03 ld t3,0(a6) + 244: 00083607 fld fa2,0(a6) + 248: f20887d3 fmv.d.x fa5,a7 + 24c: f8000837 lui a6,0xf8000 + 250: 01187333 and t1,a6,a7 + 254: 01c87833 and a6,a6,t3 + 258: 12f676d3 fmul.d fa3,fa2,fa5 + 25c: f20807d3 fmv.d.x fa5,a6 + 260: f2030753 fmv.d.x fa4,t1 + 264: f20305d3 fmv.d.x fa1,t1 + 268: 0af67653 fsub.d fa2,fa2,fa5 + 26c: f20887d3 fmv.d.x fa5,a7 + 270: 0ae7f753 fsub.d fa4,fa5,fa4 + 274: f20807d3 fmv.d.x fa5,a6 + 278: 6ab7f7c7 fmsub.d fa5,fa5,fa1,fa3 + 27c: 7ab677c3 fmadd.d fa5,fa2,fa1,fa5 + 280: f20805d3 fmv.d.x fa1,a6 + 284: 7ab777c3 fmadd.d fa5,fa4,fa1,fa5 + 288: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 + 28c: 02d777d3 fadd.d fa5,fa4,fa3 + 290: 3782e837 lui a6,0x3782e + 294: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37826287> + 298: 0832 slli a6,a6,0xc + 29a: 9d980813 addi a6,a6,-1575 + 29e: 084a slli a6,a6,0x12 + 2a0: 187d addi a6,a6,-1 + 2a2: c22798d3 fcvt.l.d a7,fa5,rtz + 2a6: 0ad7f6d3 fsub.d fa3,fa5,fa3 + 2aa: 00070e1b sext.w t3,a4 + 2ae: d228f653 fcvt.d.l fa2,a7 + 2b2: 0ac7f5d3 fsub.d fa1,fa5,fa2 + 2b6: 0ad77753 fsub.d fa4,fa4,fa3 + 2ba: 0af5f6d3 fsub.d fa3,fa1,fa5 + 2be: 0ad5f553 fsub.d fa0,fa1,fa3 + 2c2: 02d67653 fadd.d fa2,fa2,fa3 + 2c6: 0aa7f7d3 fsub.d fa5,fa5,fa0 + 2ca: 0ac7f7d3 fsub.d fa5,fa5,fa2 + 2ce: 02b7f7d3 fadd.d fa5,fa5,fa1 + 2d2: 02e7f7d3 fadd.d fa5,fa5,fa4 + 2d6: c2279fd3 fcvt.l.d t6,fa5,rtz + 2da: 9fc6 add t6,t6,a7 + 2dc: 19f87063 bgeu a6,t6,45c + 2e0: 2385 addiw t2,t2,1 + 2e2: 300e4363 bltz t3,5e8 + 2e6: 00e3833b addw t1,t2,a4 + 2ea: 475d li a4,23 + 2ec: 30677663 bgeu a4,t1,5f8 + 2f0: 577d li a4,-1 + 2f2: 9301 srli a4,a4,0x20 + 2f4: 43f75863 bge a4,t6,724 + 2f8: 07d00313 li t1,125 + 2fc: 877e mv a4,t6 + 2fe: 4e01 li t3,0 + 300: 3e800813 li a6,1000 + 304: 130e slli t1,t1,0x23 + 306: a039 j 314 + 308: 030747b3 div a5,a4,a6 + 30c: 4e05 li t3,1 + 30e: 40674c63 blt a4,t1,726 + 312: 873e mv a4,a5 + 314: 030768b3 rem a7,a4,a6 + 318: fe0888e3 beqz a7,308 + 31c: 400e0163 beqz t3,71e + 320: 8fbe mv t6,a5 + 322: 05f5e7b7 lui a5,0x5f5e + 326: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f568b7> + 32a: 04060413 addi s0,a2,64 + 32e: 03860613 addi a2,a2,56 + 332: 15f7c863 blt a5,t6,482 + 336: 000f871b sext.w a4,t6 + 33a: 20070463 beqz a4,542 + 33e: 4f01 li t5,0 + 340: 4f81 li t6,0 + 342: 00006e97 auipc t4,0x6 + 346: 60ee8e93 addi t4,t4,1550 # 6950 + 34a: aaa9 j 4a4 + 34c: 0306 slli t1,t1,0x1 + 34e: 3e030e63 beqz t1,74a + 352: 4305 li t1,1 + 354: ec22 sd s0,24(sp) + 356: 00ce9e13 slli t3,t4,0xc + 35a: 134e slli t1,t1,0x33 + 35c: 520e4063 bltz t3,87c + 360: 40135313 srai t1,t1,0x1 + 364: 01d37e33 and t3,t1,t4 + 368: 8f42 mv t5,a6 + 36a: 387d addiw a6,a6,-1 + 36c: fe0e0ae3 beqz t3,360 + 370: 26900313 li t1,617 + 374: c00f081b addiw a6,t5,-1024 + 378: 0268083b mulw a6,a6,t1 + 37c: 41f8531b sraiw t1,a6,0x1f + 380: 0153531b srliw t1,t1,0x15 + 384: 0103033b addw t1,t1,a6 + 388: 40b3539b sraiw t2,t1,0xb + 38c: 4849 li a6,18 + 38e: 4078083b subw a6,a6,t2 + 392: 41f8531b sraiw t1,a6,0x1f + 396: 00684eb3 xor t4,a6,t1 + 39a: 406e8f3b subw t5,t4,t1 + 39e: 2c900313 li t1,713 + 3a2: 03e3033b mulw t1,t1,t5 + 3a6: 4e35 li t3,13 + 3a8: 8efa mv t4,t5 + 3aa: 40e35f9b sraiw t6,t1,0xe + 3ae: 837e mv t1,t6 + 3b0: 23fe4363 blt t3,t6,5d6 + 3b4: 5e25 li t3,-23 + 3b6: 026e0e3b mulw t3,t3,t1 + 3ba: 01de0ebb addw t4,t3,t4 + 3be: 22084f63 bltz a6,5fc + 3c2: f2000753 fmv.d.x fa4,zero + 3c6: 00005e17 auipc t3,0x5 + 3ca: 002e0e13 addi t3,t3,2 # 53c8 + 3ce: 380e9e63 bnez t4,76a + 3d2: f20887d3 fmv.d.x fa5,a7 + 3d6: fff30f1b addiw t5,t1,-1 + 3da: 0f0e slli t5,t5,0x3 + 3dc: 02f777d3 fadd.d fa5,fa4,fa5 + 3e0: 030e slli t1,t1,0x3 + 3e2: 9f72 add t5,t5,t3 + 3e4: 9e1a add t3,t3,t1 + 3e6: 2e0e3e03 ld t3,736(t3) + 3ea: 2e8f3587 fld fa1,744(t5) + 3ee: f8000837 lui a6,0xf8000 + 3f2: e2078ed3 fmv.x.d t4,fa5 + 3f6: 12b7f6d3 fmul.d fa3,fa5,fa1 + 3fa: f2088653 fmv.d.x fa2,a7 + 3fe: 01d87333 and t1,a6,t4 + 402: 01c87833 and a6,a6,t3 + 406: f20807d3 fmv.d.x fa5,a6 + 40a: f2030053 fmv.d.x ft0,t1 + 40e: 0af5f553 fsub.d fa0,fa1,fa5 + 412: f20e87d3 fmv.d.x fa5,t4 + 416: 0ac7f0d3 fsub.d ft1,fa5,fa2 + 41a: f20807d3 fmv.d.x fa5,a6 + 41e: f2030653 fmv.d.x fa2,t1 + 422: 6ac7f647 fmsub.d fa2,fa5,fa2,fa3 + 426: f20e87d3 fmv.d.x fa5,t4 + 42a: 0a177753 fsub.d fa4,fa4,ft1 + 42e: f20300d3 fmv.d.x ft1,t1 + 432: 0a07f7d3 fsub.d fa5,fa5,ft0 + 436: 350f3007 fld ft0,848(t5) + 43a: 62157643 fmadd.d fa2,fa0,ft1,fa2 + 43e: 12b77753 fmul.d fa4,fa4,fa1 + 442: f20805d3 fmv.d.x fa1,a6 + 446: 62b7f643 fmadd.d fa2,fa5,fa1,fa2 + 44a: f20e85d3 fmv.d.x fa1,t4 + 44e: 7205f743 fmadd.d fa4,fa1,ft0,fa4 + 452: 62a7f7c3 fmadd.d fa5,fa5,fa0,fa2 + 456: 02e7f753 fadd.d fa4,fa5,fa4 + 45a: bd0d j 28c + 45c: 00e3833b addw t1,t2,a4 + 460: 2a0e4663 bltz t3,70c + 464: 475d li a4,23 + 466: 10677663 bgeu a4,t1,572 + 46a: e80f93e3 bnez t6,2f0 + 46e: 05f5e7b7 lui a5,0x5f5e + 472: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f568b7> + 476: 04060413 addi s0,a2,64 + 47a: 03860613 addi a2,a2,56 + 47e: ebf7dce3 bge a5,t6,336 + 482: 4f01 li t5,0 + 484: 00006e97 auipc t4,0x6 + 488: 4cce8e93 addi t4,t4,1228 # 6950 + 48c: 05f5e7b7 lui a5,0x5f5e + 490: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f568b8> + 494: 02ffe833 rem a6,t6,a5 + 498: 02ffcfb3 div t6,t6,a5 + 49c: 0008071b sext.w a4,a6 + 4a0: 0a080463 beqz a6,548 + 4a4: 8822 mv a6,s0 + 4a6: 06400893 li a7,100 + 4aa: 06300e13 li t3,99 + 4ae: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff87b6> + 4b0: 0007031b sext.w t1,a4 + 4b4: 031777bb remuw a5,a4,a7 + 4b8: 2785 addiw a5,a5,1 + 4ba: 0017979b slliw a5,a5,0x1 + 4be: 1782 slli a5,a5,0x20 + 4c0: 9381 srli a5,a5,0x20 + 4c2: 97f6 add a5,a5,t4 + 4c4: 0007d783 lhu a5,0(a5) + 4c8: 0317573b divuw a4,a4,a7 + 4cc: 00f81023 sh a5,0(a6) + 4d0: fc6e6fe3 bltu t3,t1,4ae + 4d4: 008f0f3b addw t5,t5,s0 + 4d8: 410f0f3b subw t5,t5,a6 + 4dc: 020f8f63 beqz t6,51a + 4e0: 87c2 mv a5,a6 + 4e2: 03000713 li a4,48 + 4e6: 04c80c63 beq a6,a2,53e + 4ea: 17fd addi a5,a5,-1 + 4ec: 00e78023 sb a4,0(a5) + 4f0: fec79de3 bne a5,a2,4ea + 4f4: 408807b3 sub a5,a6,s0 + 4f8: 00ff07bb addw a5,t5,a5 + 4fc: 1461 addi s0,s0,-8 + 4fe: 00878f1b addiw t5,a5,8 + 502: 05f5e7b7 lui a5,0x5f5e + 506: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f568b7> + 50a: ff840613 addi a2,s0,-8 + 50e: f7f7cfe3 blt a5,t6,48c + 512: 000f871b sext.w a4,t6 + 516: 4f81 li t6,0 + 518: b771 j 4a4 + 51a: 020f0563 beqz t5,544 + 51e: 00084703 lbu a4,0(a6) + 522: 03000793 li a5,48 + 526: 22f70f63 beq a4,a5,764 + 52a: 2f01 sext.w t5,t5 + 52c: 0076a023 sw t2,0(a3) + 530: 6462 ld s0,24(sp) + 532: 0102b023 sd a6,0(t0) + 536: 01e5a023 sw t5,0(a1) + 53a: 6105 addi sp,sp,32 + 53c: 8082 ret + 53e: 8442 mv s0,a6 + 540: b7c9 j 502 + 542: 8822 mv a6,s0 + 544: 4f01 li t5,0 + 546: b7dd j 52c + 548: 8822 mv a6,s0 + 54a: bf59 j 4e0 + 54c: 0eb2 slli t4,t4,0xc + 54e: 00005797 auipc a5,0x5 + 552: b4a78793 addi a5,a5,-1206 # 5098 <_GLOBAL__sub_I__ZSt3cin+0xd0> + 556: 000e8663 beqz t4,562 + 55a: 00005797 auipc a5,0x5 + 55e: b3678793 addi a5,a5,-1226 # 5090 <_GLOBAL__sub_I__ZSt3cin+0xc8> + 562: 00f2b023 sd a5,0(t0) + 566: 679d lui a5,0x7 + 568: c29c sw a5,0(a3) + 56a: 4f0d li t5,3 + 56c: 01e5a023 sw t5,0(a1) + 570: 8082 ret + 572: 3b9ad737 lui a4,0x3b9ad + 576: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a51b7> + 57a: 07f76f63 bltu a4,t6,5f8 + 57e: 4805 li a6,1 + 580: 02081713 slli a4,a6,0x20 + 584: 01d75893 srli a7,a4,0x1d + 588: 00005717 auipc a4,0x5 + 58c: 1f870713 addi a4,a4,504 # 5780 + 590: 9746 add a4,a4,a7 + 592: 4e51 li t3,20 + 594: a021 j 59c + 596: 2805 addiw a6,a6,1 + 598: edc809e3 beq a6,t3,46a + 59c: 00073883 ld a7,0(a4) + 5a0: 0721 addi a4,a4,8 + 5a2: ff1ffae3 bgeu t6,a7,596 + 5a6: ed0372e3 bgeu t1,a6,46a + 5aa: 4068083b subw a6,a6,t1 + 5ae: 475d li a4,23 + 5b0: eb076de3 bltu a4,a6,46a + 5b4: 080e slli a6,a6,0x3 + 5b6: 00005717 auipc a4,0x5 + 5ba: e1270713 addi a4,a4,-494 # 53c8 + 5be: 9742 add a4,a4,a6 + 5c0: 3b873803 ld a6,952(a4) + 5c4: 00185713 srli a4,a6,0x1 + 5c8: 977e add a4,a4,t6 + 5ca: 01176363 bltu a4,a7,5d0 + 5ce: 2385 addiw t2,t2,1 + 5d0: 03075fb3 divu t6,a4,a6 + 5d4: bd59 j 46a + 5d6: 4335 li t1,13 + 5d8: 5e25 li t3,-23 + 5da: 026e0e3b mulw t3,t3,t1 + 5de: 01de0ebb addw t4,t3,t4 + 5e2: de0850e3 bgez a6,3c2 + 5e6: a819 j 5fc + 5e8: 02571313 slli t1,a4,0x25 + 5ec: 02535313 srli t1,t1,0x25 + 5f0: 0305 addi t1,t1,1 + 5f2: 475d li a4,23 + 5f4: ce676ee3 bltu a4,t1,2f0 + 5f8: 4829 li a6,10 + 5fa: b759 j 580 + 5fc: 260e8663 beqz t4,868 + 600: 00231e13 slli t3,t1,0x2 + 604: 41c30e33 sub t3,t1,t3 + 608: 0e0e slli t3,t3,0x3 + 60a: 9e1a add t3,t3,t1 + 60c: fffe881b addiw a6,t4,-1 + 610: 9e7a add t3,t3,t5 + 612: 00005e97 auipc t4,0x5 + 616: db6e8e93 addi t4,t4,-586 # 53c8 + 61a: 0e0e slli t3,t3,0x3 + 61c: 080e slli a6,a6,0x3 + 61e: 9876 add a6,a6,t4 + 620: 9ef2 add t4,t4,t3 + 622: 0b883607 fld fa2,184(a6) + 626: f20887d3 fmv.d.x fa5,a7 + 62a: 0b0ebf03 ld t5,176(t4) + 62e: f8000e37 lui t3,0xf8000 + 632: 011e7eb3 and t4,t3,a7 + 636: 12f676d3 fmul.d fa3,fa2,fa5 + 63a: 01ee7e33 and t3,t3,t5 + 63e: f20e07d3 fmv.d.x fa5,t3 + 642: f20e0753 fmv.d.x fa4,t3 + 646: f20e8553 fmv.d.x fa0,t4 + 64a: 0af67653 fsub.d fa2,fa2,fa5 + 64e: f20e87d3 fmv.d.x fa5,t4 + 652: f20e85d3 fmv.d.x fa1,t4 + 656: 6ae7f7c7 fmsub.d fa5,fa5,fa4,fa3 + 65a: f2088753 fmv.d.x fa4,a7 + 65e: 0ab775d3 fsub.d fa1,fa4,fa1 + 662: 16883707 fld fa4,360(a6) + 666: 7aa677c3 fmadd.d fa5,fa2,fa0,fa5 + 66a: f20e0553 fmv.d.x fa0,t3 + 66e: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 + 672: 7ac5f5c3 fmadd.d fa1,fa1,fa2,fa5 + 676: f20887d3 fmv.d.x fa5,a7 + 67a: 5af77743 fmadd.d fa4,fa4,fa5,fa1 + 67e: c00f87e3 beqz t6,28c + 682: 02d777d3 fadd.d fa5,fa4,fa3 + 686: fff3089b addiw a7,t1,-1 + 68a: 00005817 auipc a6,0x5 + 68e: d3e80813 addi a6,a6,-706 # 53c8 + 692: 030e slli t1,t1,0x3 + 694: 088e slli a7,a7,0x3 + 696: 98c2 add a7,a7,a6 + 698: 981a add a6,a6,t1 + 69a: e2078e53 fmv.x.d t3,fa5 + 69e: 21083e83 ld t4,528(a6) + 6a2: f8000837 lui a6,0xf8000 + 6a6: 2188b507 fld fa0,536(a7) + 6aa: 01c87333 and t1,a6,t3 + 6ae: 01d87833 and a6,a6,t4 + 6b2: f2080653 fmv.d.x fa2,a6 + 6b6: 12f577d3 fmul.d fa5,fa0,fa5 + 6ba: 2808b587 fld fa1,640(a7) + 6be: 0ac57053 fsub.d ft0,fa0,fa2 + 6c2: f20e0653 fmv.d.x fa2,t3 + 6c6: 0ad67153 fsub.d ft2,fa2,fa3 + 6ca: f20806d3 fmv.d.x fa3,a6 + 6ce: f2030653 fmv.d.x fa2,t1 + 6d2: 7ac6f0c7 fmsub.d ft1,fa3,fa2,fa5 + 6d6: f20e06d3 fmv.d.x fa3,t3 + 6da: 0ac6f653 fsub.d fa2,fa3,fa2 + 6de: 22f786d3 fmv.d fa3,fa5 + 6e2: 0a2777d3 fsub.d fa5,fa4,ft2 + 6e6: f2030753 fmv.d.x fa4,t1 + 6ea: 0ae07743 fmadd.d fa4,ft0,fa4,ft1 + 6ee: 12a7f7d3 fmul.d fa5,fa5,fa0 + 6f2: f2080553 fmv.d.x fa0,a6 + 6f6: 72a67743 fmadd.d fa4,fa2,fa0,fa4 + 6fa: f20e0553 fmv.d.x fa0,t3 + 6fe: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 + 702: 72067643 fmadd.d fa2,fa2,ft0,fa4 + 706: 02f67753 fadd.d fa4,fa2,fa5 + 70a: b649 j 28c + 70c: 02571313 slli t1,a4,0x25 + 710: 02535313 srli t1,t1,0x25 + 714: 0305 addi t1,t1,1 + 716: 475d li a4,23 + 718: d46769e3 bltu a4,t1,46a + 71c: bd99 j 572 + 71e: 87fe mv a5,t6 + 720: 8fbe mv t6,a5 + 722: b101 j 322 + 724: 87fe mv a5,t6 + 726: 3e800713 li a4,1000 + 72a: 02e7f73b remuw a4,a5,a4 + 72e: 2781 sext.w a5,a5 + 730: eb01 bnez a4,740 + 732: 3e800813 li a6,1000 + 736: 0307d7bb divuw a5,a5,a6 + 73a: 0307f73b remuw a4,a5,a6 + 73e: df65 beqz a4,736 + 740: 02079f93 slli t6,a5,0x20 + 744: 020fdf93 srli t6,t6,0x20 + 748: b31d j 46e + 74a: 4785 li a5,1 + 74c: c29c sw a5,0(a3) + 74e: 00c2b023 sd a2,0(t0) + 752: 03000793 li a5,48 + 756: 00f60023 sb a5,0(a2) + 75a: 4f05 li t5,1 + 75c: 01e5a023 sw t5,0(a1) + 760: 6105 addi sp,sp,32 + 762: 8082 ret + 764: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff87b9> + 766: 3f7d addiw t5,t5,-1 + 768: b3d1 j 52c + 76a: e826 sd s1,16(sp) + 76c: e44a sd s2,8(sp) + 76e: 4859 li a6,22 + 770: 8976 mv s2,t4 + 772: 11d84363 blt a6,t4,878 + 776: 0009049b sext.w s1,s2 + 77a: 00005e17 auipc t3,0x5 + 77e: c4ee0e13 addi t3,t3,-946 # 53c8 + 782: 00349813 slli a6,s1,0x3 + 786: 9872 add a6,a6,t3 + 788: 00083687 fld fa3,0(a6) + 78c: 00083803 ld a6,0(a6) + 790: f20887d3 fmv.d.x fa5,a7 + 794: f8000fb7 lui t6,0xf8000 + 798: 010ff833 and a6,t6,a6 + 79c: 12f6f553 fmul.d fa0,fa3,fa5 + 7a0: f20807d3 fmv.d.x fa5,a6 + 7a4: 011ff433 and s0,t6,a7 + 7a8: f2040753 fmv.d.x fa4,s0 + 7ac: 0af6f6d3 fsub.d fa3,fa3,fa5 + 7b0: f20887d3 fmv.d.x fa5,a7 + 7b4: f2080653 fmv.d.x fa2,a6 + 7b8: 412e8ebb subw t4,t4,s2 + 7bc: 0ae7f753 fsub.d fa4,fa5,fa4 + 7c0: f20407d3 fmv.d.x fa5,s0 + 7c4: e20508d3 fmv.x.d a7,fa0 + 7c8: 52c7f7c7 fmsub.d fa5,fa5,fa2,fa0 + 7cc: f2040653 fmv.d.x fa2,s0 + 7d0: 7ac6f7c3 fmadd.d fa5,fa3,fa2,fa5 + 7d4: f2080653 fmv.d.x fa2,a6 + 7d8: 7ac777c3 fmadd.d fa5,fa4,fa2,fa5 + 7dc: 7ad77743 fmadd.d fa4,fa4,fa3,fa5 + 7e0: 080e8963 beqz t4,872 + 7e4: 02e577d3 fadd.d fa5,fa0,fa4 + 7e8: 0e8e slli t4,t4,0x3 + 7ea: 01de0833 add a6,t3,t4 + 7ee: 00083587 fld fa1,0(a6) + 7f2: 00231893 slli a7,t1,0x2 + 7f6: 411308b3 sub a7,t1,a7 + 7fa: 00389813 slli a6,a7,0x3 + 7fe: e2078453 fmv.x.d s0,fa5 + 802: 12f5f7d3 fmul.d fa5,fa1,fa5 + 806: 981a add a6,a6,t1 + 808: 987a add a6,a6,t5 + 80a: 40980833 sub a6,a6,s1 + 80e: 080e slli a6,a6,0x3 + 810: 9872 add a6,a6,t3 + 812: 00083e83 ld t4,0(a6) + 816: 008ff833 and a6,t6,s0 + 81a: e20788d3 fmv.x.d a7,fa5 + 81e: f20806d3 fmv.d.x fa3,a6 + 822: f20407d3 fmv.d.x fa5,s0 + 826: 01dfffb3 and t6,t6,t4 + 82a: f20880d3 fmv.d.x ft1,a7 + 82e: 0ad7f653 fsub.d fa2,fa5,fa3 + 832: f20f87d3 fmv.d.x fa5,t6 + 836: 64c2 ld s1,16(sp) + 838: 6922 ld s2,8(sp) + 83a: 0af5f053 fsub.d ft0,fa1,fa5 + 83e: 0ad7f6c7 fmsub.d fa3,fa5,fa3,ft1 + 842: f20407d3 fmv.d.x fa5,s0 + 846: 0aa7f7d3 fsub.d fa5,fa5,fa0 + 84a: f2080553 fmv.d.x fa0,a6 + 84e: 6aa076c3 fmadd.d fa3,ft0,fa0,fa3 + 852: 0af77753 fsub.d fa4,fa4,fa5 + 856: f20f87d3 fmv.d.x fa5,t6 + 85a: 6af677c3 fmadd.d fa5,fa2,fa5,fa3 + 85e: 7a067643 fmadd.d fa2,fa2,ft0,fa5 + 862: 62e5f743 fmadd.d fa4,fa1,fa4,fa2 + 866: b6b5 j 3d2 + 868: f20886d3 fmv.d.x fa3,a7 + 86c: f2000753 fmv.d.x fa4,zero + 870: b539 j 67e + 872: 64c2 ld s1,16(sp) + 874: 6922 ld s2,8(sp) + 876: beb1 j 3d2 + 878: 4959 li s2,22 + 87a: bdf5 j 776 + 87c: e826 sd s1,16(sp) + 87e: e44a sd s2,8(sp) + 880: ecc00393 li t2,-308 + 884: 4eed li t4,27 + 886: 4335 li t1,13 + 888: 14600f13 li t5,326 + 88c: b5cd j 76e + 88e: 26900313 li t1,617 + 892: 0303083b mulw a6,t1,a6 + 896: 41f8531b sraiw t1,a6,0x1f + 89a: 0153531b srliw t1,t1,0x15 + 89e: 0103033b addw t1,t1,a6 + 8a2: 40b3539b sraiw t2,t1,0xb + 8a6: 4849 li a6,18 + 8a8: 4078083b subw a6,a6,t2 + 8ac: b249 j 22e + +00000000000008ae <_in_char.part.0>: +static int _in_char(_InContext *ctx) + 8ae: 87aa mv a5,a0 + if (ctx->fd == -1) + 8b0: 4508 lw a0,8(a0) + 8b2: 577d li a4,-1 + 8b4: 00e51d63 bne a0,a4,8ce <_in_char.part.0+0x20> + if (ctx->buf[ctx->pos] == '\0') + 8b8: 6b94 ld a3,16(a5) + 8ba: 6398 ld a4,0(a5) + 8bc: 9736 add a4,a4,a3 + 8be: 00074603 lbu a2,0(a4) + 8c2: c60d beqz a2,8ec <_in_char.part.0+0x3e> + return (unsigned char)ctx->buf[ctx->pos++]; + 8c4: 0685 addi a3,a3,1 + 8c6: eb94 sd a3,16(a5) + 8c8: 00074503 lbu a0,0(a4) + 8cc: 8082 ret +static int _in_char(_InContext *ctx) + 8ce: 1101 addi sp,sp,-32 + if (read(ctx->fd, &c, 1) == 1) + 8d0: 4605 li a2,1 + 8d2: 00f10593 addi a1,sp,15 +static int _in_char(_InContext *ctx) + 8d6: ec06 sd ra,24(sp) + if (read(ctx->fd, &c, 1) == 1) + 8d8: 809ff0ef jal e0 + 8dc: 4785 li a5,1 + 8de: 00f51963 bne a0,a5,8f0 <_in_char.part.0+0x42> + return (unsigned char)c; + 8e2: 00f14503 lbu a0,15(sp) +} + 8e6: 60e2 ld ra,24(sp) + 8e8: 6105 addi sp,sp,32 + 8ea: 8082 ret + return -1; + 8ec: 557d li a0,-1 +} + 8ee: 8082 ret + return -1; + 8f0: 557d li a0,-1 + 8f2: bfd5 j 8e6 <_in_char.part.0+0x38> + +00000000000008f4 <_skip_space>: +{ + 8f4: 7139 addi sp,sp,-64 + 8f6: f822 sd s0,48(sp) + 8f8: f426 sd s1,40(sp) + 8fa: f04a sd s2,32(sp) + 8fc: ec4e sd s3,24(sp) + 8fe: e852 sd s4,16(sp) + 900: fc06 sd ra,56(sp) + 902: 842a mv s0,a0 + ctx->ungotten = -1; + 904: 54fd li s1,-1 + if (read(ctx->fd, &c, 1) == 1) + 906: 00f10a13 addi s4,sp,15 + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 90a: 02000913 li s2,32 + 90e: 4991 li s3,4 + if (ctx->ungotten >= 0) + 910: 4c1c lw a5,24(s0) + 912: 0407d163 bgez a5,954 <_skip_space+0x60> + if (ctx->fd == -1) + 916: 4408 lw a0,8(s0) + if (read(ctx->fd, &c, 1) == 1) + 918: 4605 li a2,1 + 91a: 85d2 mv a1,s4 + if (ctx->fd == -1) + 91c: 02951e63 bne a0,s1,958 <_skip_space+0x64> + if (ctx->buf[ctx->pos] == '\0') + 920: 6818 ld a4,16(s0) + 922: 601c ld a5,0(s0) + return (unsigned char)ctx->buf[ctx->pos++]; + 924: 00170693 addi a3,a4,1 + if (ctx->buf[ctx->pos] == '\0') + 928: 97ba add a5,a5,a4 + 92a: 0007c703 lbu a4,0(a5) # 7000 <_stdout+0x190> + 92e: cb19 beqz a4,944 <_skip_space+0x50> + return (unsigned char)ctx->buf[ctx->pos++]; + 930: e814 sd a3,16(s0) + 932: 0007c783 lbu a5,0(a5) + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 936: ff77871b addiw a4,a5,-9 + 93a: fd278be3 beq a5,s2,910 <_skip_space+0x1c> + 93e: fce9f9e3 bgeu s3,a4,910 <_skip_space+0x1c> + ctx->ungotten = c; + 942: cc1c sw a5,24(s0) +} + 944: 70e2 ld ra,56(sp) + 946: 7442 ld s0,48(sp) + 948: 74a2 ld s1,40(sp) + 94a: 7902 ld s2,32(sp) + 94c: 69e2 ld s3,24(sp) + 94e: 6a42 ld s4,16(sp) + 950: 6121 addi sp,sp,64 + 952: 8082 ret + ctx->ungotten = -1; + 954: cc04 sw s1,24(s0) + return c; + 956: b7c5 j 936 <_skip_space+0x42> + if (read(ctx->fd, &c, 1) == 1) + 958: f88ff0ef jal e0 + 95c: 4785 li a5,1 + 95e: fef513e3 bne a0,a5,944 <_skip_space+0x50> + return (unsigned char)c; + 962: 00f14783 lbu a5,15(sp) + 966: bfc1 j 936 <_skip_space+0x42> + +0000000000000968 <_vscanf_core.constprop.0>: +static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) + 968: 7155 addi sp,sp,-208 + 96a: e586 sd ra,200(sp) + 96c: e95a sd s6,144(sp) + while (*p) + 96e: 0005c783 lbu a5,0(a1) +static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) + 972: e432 sd a2,8(sp) + while (*p) + 974: 68078b63 beqz a5,100a <_vscanf_core.constprop.0+0x6a2> + 978: e1a2 sd s0,192(sp) + 97a: fd26 sd s1,184(sp) + 97c: f152 sd s4,160(sp) + 97e: ed56 sd s5,152(sp) + 980: f4ee sd s11,104(sp) + 982: 842e mv s0,a1 + 984: 8daa mv s11,a0 + int assigned = 0; + 986: 4b01 li s6,0 + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 988: 02000493 li s1,32 + 98c: 4a91 li s5,4 + if (*p != '%') + 98e: 02500a13 li s4,37 + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 992: 04978763 beq a5,s1,9e0 <_vscanf_core.constprop.0+0x78> + 996: ff77869b addiw a3,a5,-9 + 99a: 0ff6f693 zext.b a3,a3 + 99e: 04daf163 bgeu s5,a3,9e0 <_vscanf_core.constprop.0+0x78> + if (*p != '%') + 9a2: 07478d63 beq a5,s4,a1c <_vscanf_core.constprop.0+0xb4> + _skip_space(ctx); + 9a6: 856e mv a0,s11 + 9a8: f4dff0ef jal 8f4 <_skip_space> + if (ctx->ungotten >= 0) + 9ac: 018da503 lw a0,24(s11) + 9b0: 04055a63 bgez a0,a04 <_vscanf_core.constprop.0+0x9c> + 9b4: 856e mv a0,s11 + 9b6: ef9ff0ef jal 8ae <_in_char.part.0> + if (c != *p) + 9ba: 00044783 lbu a5,0(s0) + 9be: 04a78a63 beq a5,a0,a12 <_vscanf_core.constprop.0+0xaa> + if (c != -1) + 9c2: 57fd li a5,-1 + 9c4: 00f50463 beq a0,a5,9cc <_vscanf_core.constprop.0+0x64> + ctx->ungotten = c; + 9c8: 00adac23 sw a0,24(s11) + 9cc: 640e ld s0,192(sp) + 9ce: 74ea ld s1,184(sp) + 9d0: 7a0a ld s4,160(sp) + 9d2: 6aea ld s5,152(sp) + 9d4: 7da6 ld s11,104(sp) +} + 9d6: 60ae ld ra,200(sp) + 9d8: 855a mv a0,s6 + 9da: 6b4a ld s6,144(sp) + 9dc: 6169 addi sp,sp,208 + 9de: 8082 ret + _skip_space(ctx); + 9e0: 856e mv a0,s11 + 9e2: f13ff0ef jal 8f4 <_skip_space> + while (isspace(*p)) + 9e6: 00044783 lbu a5,0(s0) + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 9ea: 4611 li a2,4 + 9ec: ff77869b addiw a3,a5,-9 + 9f0: 0ff6f693 zext.b a3,a3 + 9f4: 00978663 beq a5,s1,a00 <_vscanf_core.constprop.0+0x98> + 9f8: 00d67463 bgeu a2,a3,a00 <_vscanf_core.constprop.0+0x98> + while (*p) + 9fc: fbd9 bnez a5,992 <_vscanf_core.constprop.0+0x2a> + 9fe: b7f9 j 9cc <_vscanf_core.constprop.0+0x64> + p++; + a00: 0405 addi s0,s0,1 + a02: b7d5 j 9e6 <_vscanf_core.constprop.0+0x7e> + ctx->ungotten = -1; + a04: 57fd li a5,-1 + a06: 00fdac23 sw a5,24(s11) + if (c != *p) + a0a: 00044783 lbu a5,0(s0) + a0e: faa79ae3 bne a5,a0,9c2 <_vscanf_core.constprop.0+0x5a> + while (*p) + a12: 00144783 lbu a5,1(s0) + p++; + a16: 0405 addi s0,s0,1 + while (*p) + a18: ffad bnez a5,992 <_vscanf_core.constprop.0+0x2a> + a1a: bf4d j 9cc <_vscanf_core.constprop.0+0x64> + a1c: f94a sd s2,176(sp) + a1e: f54e sd s3,168(sp) + a20: e55e sd s7,136(sp) + a22: e162 sd s8,128(sp) + if (*p == '*') + a24: 00144583 lbu a1,1(s0) + a28: 02a00793 li a5,42 + a2c: 22f58d63 beq a1,a5,c66 <_vscanf_core.constprop.0+0x2fe> + p++; + a30: 0405 addi s0,s0,1 + int suppress = 0; + a32: 4981 li s3,0 + while (*p >= '0' && *p <= '9') + a34: fd05861b addiw a2,a1,-48 + a38: 0ff67693 zext.b a3,a2 + a3c: 47a5 li a5,9 + a3e: 36d7e763 bltu a5,a3,dac <_vscanf_core.constprop.0+0x444> + a42: 4781 li a5,0 + a44: 4825 li a6,9 + a46: a019 j a4c <_vscanf_core.constprop.0+0xe4> + width = width * 10 + (*p - '0'); + a48: 0016979b slliw a5,a3,0x1 + while (*p >= '0' && *p <= '9') + a4c: 00144583 lbu a1,1(s0) + width = width * 10 + (*p - '0'); + a50: 00f6093b addw s2,a2,a5 + a54: 0029169b slliw a3,s2,0x2 + while (*p >= '0' && *p <= '9') + a58: fd05861b addiw a2,a1,-48 + a5c: 0ff67513 zext.b a0,a2 + width = width * 10 + (*p - '0'); + a60: 012686bb addw a3,a3,s2 + p++; + a64: 0405 addi s0,s0,1 + while (*p >= '0' && *p <= '9') + a66: fea871e3 bgeu a6,a0,a48 <_vscanf_core.constprop.0+0xe0> + if (*p == 'l') + a6a: 06c00693 li a3,108 + p++; + a6e: 00140b93 addi s7,s0,1 + if (*p == 'l') + a72: 1ed58f63 beq a1,a3,c70 <_vscanf_core.constprop.0+0x308> + else if (*p == 'h') + a76: 06800693 li a3,104 + a7a: 2ad58863 beq a1,a3,d2a <_vscanf_core.constprop.0+0x3c2> + char spec = *p++; + a7e: 00044c03 lbu s8,0(s0) + a82: 8ba2 mv s7,s0 + int len_mod = 0; + a84: ec02 sd zero,24(sp) + char spec = *p++; + a86: 06300693 li a3,99 + a8a: 001b8413 addi s0,s7,1 + if (!spec) + a8e: 2adc0863 beq s8,a3,d3e <_vscanf_core.constprop.0+0x3d6> + a92: 1f86fc63 bgeu a3,s8,c8a <_vscanf_core.constprop.0+0x322> + a96: f9cc069b addiw a3,s8,-100 + a9a: 0ff6f693 zext.b a3,a3 + a9e: 4651 li a2,20 + aa0: 0cd66e63 bltu a2,a3,b7c <_vscanf_core.constprop.0+0x214> + aa4: 00120637 lui a2,0x120 + aa8: 4585 li a1,1 + aaa: 00d595b3 sll a1,a1,a3 + aae: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x1187d9> + ab2: 8e6d and a2,a2,a1 + ab4: ee69 bnez a2,b8e <_vscanf_core.constprop.0+0x226> + ab6: 89b9 andi a1,a1,14 + ab8: 1e059263 bnez a1,c9c <_vscanf_core.constprop.0+0x334> + abc: 463d li a2,15 + abe: 0ac69f63 bne a3,a2,b7c <_vscanf_core.constprop.0+0x214> + _skip_space(ctx); + ac2: 856e mv a0,s11 + ac4: e31ff0ef jal 8f4 <_skip_space> + char *buf = suppress ? NULL : va_arg(ap, char *); + ac8: ec02 sd zero,24(sp) + aca: 00099763 bnez s3,ad8 <_vscanf_core.constprop.0+0x170> + ace: 67a2 ld a5,8(sp) + ad0: 6398 ld a4,0(a5) + ad2: 07a1 addi a5,a5,8 + ad4: e43e sd a5,8(sp) + ad6: ec3a sd a4,24(sp) + if (ctx->ungotten >= 0) + ad8: 018da503 lw a0,24(s11) + adc: 2e055b63 bgez a0,dd2 <_vscanf_core.constprop.0+0x46a> + ae0: 856e mv a0,s11 + ae2: dcdff0ef jal 8ae <_in_char.part.0> + while (c != -1 && !isspace(c)) + ae6: 56fd li a3,-1 + ae8: 6ad50363 beq a0,a3,118e <_vscanf_core.constprop.0+0x826> + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + aec: 02000693 li a3,32 + af0: 3ed50963 beq a0,a3,ee2 <_vscanf_core.constprop.0+0x57a> + af4: 46a5 li a3,9 + af6: 3ed50663 beq a0,a3,ee2 <_vscanf_core.constprop.0+0x57a> + afa: 46a9 li a3,10 + afc: 3ed50363 beq a0,a3,ee2 <_vscanf_core.constprop.0+0x57a> + b00: 46ad li a3,11 + b02: 3ed50063 beq a0,a3,ee2 <_vscanf_core.constprop.0+0x57a> + b06: 46b1 li a3,12 + b08: 3cd50d63 beq a0,a3,ee2 <_vscanf_core.constprop.0+0x57a> + b0c: 46b5 li a3,13 + b0e: 3cd50a63 beq a0,a3,ee2 <_vscanf_core.constprop.0+0x57a> + b12: 67e2 ld a5,24(sp) + b14: fce6 sd s9,120(sp) + b16: f8ea sd s10,112(sp) + b18: e83e sd a5,16(sp) + b1a: 4d01 li s10,0 + while (c != -1 && !isspace(c)) + b1c: 5c7d li s8,-1 + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + b1e: 02000c93 li s9,32 + if (width > 0 && i >= width) + b22: 01205463 blez s2,b2a <_vscanf_core.constprop.0+0x1c2> + b26: 052d5563 bge s10,s2,b70 <_vscanf_core.constprop.0+0x208> + if (!suppress) + b2a: 00099563 bnez s3,b34 <_vscanf_core.constprop.0+0x1cc> + buf[i] = (char)c; + b2e: 67c2 ld a5,16(sp) + b30: 00a78023 sb a0,0(a5) + if (ctx->ungotten >= 0) + b34: 018da503 lw a0,24(s11) + i++; + b38: 2d05 addiw s10,s10,1 + if (ctx->ungotten >= 0) + b3a: 30055963 bgez a0,e4c <_vscanf_core.constprop.0+0x4e4> + b3e: 856e mv a0,s11 + b40: d6fff0ef jal 8ae <_in_char.part.0> + while (c != -1 && !isspace(c)) + b44: 27850663 beq a0,s8,db0 <_vscanf_core.constprop.0+0x448> + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + b48: 03950463 beq a0,s9,b70 <_vscanf_core.constprop.0+0x208> + b4c: 47a5 li a5,9 + b4e: 02f50163 beq a0,a5,b70 <_vscanf_core.constprop.0+0x208> + b52: 47a9 li a5,10 + b54: 00f50e63 beq a0,a5,b70 <_vscanf_core.constprop.0+0x208> + b58: 47ad li a5,11 + b5a: 00f50b63 beq a0,a5,b70 <_vscanf_core.constprop.0+0x208> + b5e: 47b1 li a5,12 + b60: 00f50863 beq a0,a5,b70 <_vscanf_core.constprop.0+0x208> + b64: 67c2 ld a5,16(sp) + b66: 0785 addi a5,a5,1 + b68: e83e sd a5,16(sp) + b6a: 47b5 li a5,13 + b6c: faf51be3 bne a0,a5,b22 <_vscanf_core.constprop.0+0x1ba> + if (!suppress) + b70: 64098a63 beqz s3,11c4 <_vscanf_core.constprop.0+0x85c> + b74: 7ce6 ld s9,120(sp) + b76: 7d46 ld s10,112(sp) + ctx->ungotten = c; + b78: 00adac23 sw a0,24(s11) + while (*p) + b7c: 001bc783 lbu a5,1(s7) + b80: 794a ld s2,176(sp) + b82: 79aa ld s3,168(sp) + b84: 6baa ld s7,136(sp) + b86: 6c0a ld s8,128(sp) + b88: e00795e3 bnez a5,992 <_vscanf_core.constprop.0+0x2a> + b8c: b581 j 9cc <_vscanf_core.constprop.0+0x64> + _skip_space(ctx); + b8e: 856e mv a0,s11 + b90: f8ea sd s10,112(sp) + b92: d63ff0ef jal 8f4 <_skip_space> + if (ctx->ungotten >= 0) + b96: 018da503 lw a0,24(s11) + b9a: 24055063 bgez a0,dda <_vscanf_core.constprop.0+0x472> + b9e: 856e mv a0,s11 + ba0: d0fff0ef jal 8ae <_in_char.part.0> + if (c == '-' || c == '+') + ba4: fd55069b addiw a3,a0,-43 + ba8: 9af5 andi a3,a3,-3 + baa: 2681 sext.w a3,a3 + int i = 0, c = _in_char(ctx); + bac: 4d01 li s10,0 + if (c == '-' || c == '+') + bae: 3e068863 beqz a3,f9e <_vscanf_core.constprop.0+0x636> + int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); + bb2: 07800693 li a3,120 + bb6: 4641 li a2,16 + bb8: 00dc0863 beq s8,a3,bc8 <_vscanf_core.constprop.0+0x260> + bbc: 06900693 li a3,105 + bc0: 4629 li a2,10 + bc2: 00dc1363 bne s8,a3,bc8 <_vscanf_core.constprop.0+0x260> + bc6: 4601 li a2,0 + while (c != -1 && i < 63) + bc8: 56fd li a3,-1 + bca: 5cd50863 beq a0,a3,119a <_vscanf_core.constprop.0+0x832> + bce: fce6 sd s9,120(sp) + bd0: 02010893 addi a7,sp,32 + bd4: 01a88c33 add s8,a7,s10 + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + bd8: 4cc1 li s9,16 + int digit = (c >= '0' && c <= '9'); + bda: fd05069b addiw a3,a0,-48 + bde: 0005031b sext.w t1,a0 + be2: 00a6b593 sltiu a1,a3,10 + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + be6: 27960a63 beq a2,s9,e5a <_vscanf_core.constprop.0+0x4f2> + bea: 2a060d63 beqz a2,ea4 <_vscanf_core.constprop.0+0x53c> + int x = (c == 'x' || c == 'X'); + bee: 07800793 li a5,120 + bf2: 2ef50363 beq a0,a5,ed8 <_vscanf_core.constprop.0+0x570> + bf6: fa850693 addi a3,a0,-88 + bfa: 0016b693 seqz a3,a3 + bfe: 4301 li t1,0 + if (width > 0 && i >= width) + c00: 01205463 blez s2,c08 <_vscanf_core.constprop.0+0x2a0> + c04: 032d5a63 bge s10,s2,c38 <_vscanf_core.constprop.0+0x2d0> + if (digit || hex || x) + c08: 0066e6b3 or a3,a3,t1 + c0c: 8ecd or a3,a3,a1 + c0e: c68d beqz a3,c38 <_vscanf_core.constprop.0+0x2d0> + num_buf[i++] = (char)c; + c10: 00ac0023 sb a0,0(s8) + if (ctx->ungotten >= 0) + c14: 018da503 lw a0,24(s11) + num_buf[i++] = (char)c; + c18: 2d05 addiw s10,s10,1 + if (ctx->ungotten >= 0) + c1a: 22055c63 bgez a0,e52 <_vscanf_core.constprop.0+0x4ea> + c1e: 856e mv a0,s11 + c20: e832 sd a2,16(sp) + c22: c8dff0ef jal 8ae <_in_char.part.0> + while (c != -1 && i < 63) + c26: 57fd li a5,-1 + c28: 6642 ld a2,16(sp) + c2a: 3cf50263 beq a0,a5,fee <_vscanf_core.constprop.0+0x686> + c2e: 03f00693 li a3,63 + c32: 0c05 addi s8,s8,1 + c34: fadd13e3 bne s10,a3,bda <_vscanf_core.constprop.0+0x272> + num_buf[i] = '\0'; + c38: 040d0793 addi a5,s10,64 + c3c: 1018 addi a4,sp,32 + c3e: 97ba add a5,a5,a4 + c40: fc078023 sb zero,-64(a5) + ctx->ungotten = c; + c44: 00adac23 sw a0,24(s11) + c48: 7ce6 ld s9,120(sp) + if (i == 0) + c4a: 1e0d0663 beqz s10,e36 <_vscanf_core.constprop.0+0x4ce> + if (!suppress) + c4e: 36098363 beqz s3,fb4 <_vscanf_core.constprop.0+0x64c> + while (*p) + c52: 001bc783 lbu a5,1(s7) + { + c56: 794a ld s2,176(sp) + c58: 79aa ld s3,168(sp) + c5a: 6baa ld s7,136(sp) + c5c: 6c0a ld s8,128(sp) + c5e: 7d46 ld s10,112(sp) + while (*p) + c60: d20799e3 bnez a5,992 <_vscanf_core.constprop.0+0x2a> + c64: b3a5 j 9cc <_vscanf_core.constprop.0+0x64> + while (*p >= '0' && *p <= '9') + c66: 00244583 lbu a1,2(s0) + suppress = 1; + c6a: 4985 li s3,1 + p++; + c6c: 0409 addi s0,s0,2 + c6e: b3d9 j a34 <_vscanf_core.constprop.0+0xcc> + if (*p == 'l') + c70: 00144c03 lbu s8,1(s0) + len_mod = 1; + c74: 4785 li a5,1 + c76: ec3e sd a5,24(sp) + if (*p == 'l') + c78: e0bc17e3 bne s8,a1,a86 <_vscanf_core.constprop.0+0x11e> + len_mod = 2; + c7c: 4789 li a5,2 + char spec = *p++; + c7e: 00244c03 lbu s8,2(s0) + p++; + c82: 00240b93 addi s7,s0,2 + len_mod = 2; + c86: ec3e sd a5,24(sp) + c88: bbfd j a86 <_vscanf_core.constprop.0+0x11e> + c8a: 100c0763 beqz s8,d98 <_vscanf_core.constprop.0+0x430> + c8e: fbbc079b addiw a5,s8,-69 + c92: 0ff7f793 zext.b a5,a5 + c96: 4689 li a3,2 + c98: eef6e2e3 bltu a3,a5,b7c <_vscanf_core.constprop.0+0x214> + _skip_space(ctx); + c9c: 856e mv a0,s11 + c9e: f8ea sd s10,112(sp) + ca0: c55ff0ef jal 8f4 <_skip_space> + if (ctx->ungotten >= 0) + ca4: 018da783 lw a5,24(s11) + ca8: 1207dd63 bgez a5,de2 <_vscanf_core.constprop.0+0x47a> + cac: 856e mv a0,s11 + cae: c01ff0ef jal 8ae <_in_char.part.0> + if (c == '-' || c == '+') + cb2: fd55069b addiw a3,a0,-43 + cb6: ffd6f613 andi a2,a3,-3 + cba: 2601 sext.w a2,a2 + cbc: 87aa mv a5,a0 + cbe: 12060c63 beqz a2,df6 <_vscanf_core.constprop.0+0x48e> + while (c != -1 && i < 63) + cc2: 567d li a2,-1 + cc4: 16c50963 beq a0,a2,e36 <_vscanf_core.constprop.0+0x4ce> + cc8: fce6 sd s9,120(sp) + int i = 0, c = _in_char(ctx); + cca: 4d01 li s10,0 + ccc: 80000937 lui s2,0x80000 + cd0: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff87b7> + cd2: 0932 slli s2,s2,0xc + cd4: 80194913 xori s2,s2,-2047 + cd8: 093e slli s2,s2,0xf + cda: 02010813 addi a6,sp,32 + cde: 01a80cb3 add s9,a6,s10 + ce2: 03a00c13 li s8,58 + ce6: 1935 addi s2,s2,-19 + ce8: a831 j d04 <_vscanf_core.constprop.0+0x39c> + cea: bc5ff0ef jal 8ae <_in_char.part.0> + while (c != -1 && i < 63) + cee: 577d li a4,-1 + cf0: 87aa mv a5,a0 + cf2: 2ee50563 beq a0,a4,fdc <_vscanf_core.constprop.0+0x674> + cf6: 03f00713 li a4,63 + cfa: 0c85 addi s9,s9,1 + cfc: 1eed0e63 beq s10,a4,ef8 <_vscanf_core.constprop.0+0x590> + d00: fd57869b addiw a3,a5,-43 + int c = ctx->ungotten; + d04: 00d95633 srl a2,s2,a3 + d08: 856e mv a0,s11 + d0a: 8a05 andi a2,a2,1 + d0c: 1edc6663 bltu s8,a3,ef8 <_vscanf_core.constprop.0+0x590> + d10: 1e060463 beqz a2,ef8 <_vscanf_core.constprop.0+0x590> + num_buf[i++] = (char)c; + d14: 00fc8023 sb a5,0(s9) + if (ctx->ungotten >= 0) + d18: 018da783 lw a5,24(s11) + num_buf[i++] = (char)c; + d1c: 2d05 addiw s10,s10,1 + if (ctx->ungotten >= 0) + d1e: fc07c6e3 bltz a5,cea <_vscanf_core.constprop.0+0x382> + ctx->ungotten = -1; + d22: 577d li a4,-1 + d24: 00edac23 sw a4,24(s11) + while (c != -1 && i < 63) + d28: b7f9 j cf6 <_vscanf_core.constprop.0+0x38e> + if (*p == 'h') + d2a: 00144c03 lbu s8,1(s0) + int len_mod = 0; + d2e: ec02 sd zero,24(sp) + if (*p == 'h') + d30: d4bc1be3 bne s8,a1,a86 <_vscanf_core.constprop.0+0x11e> + char spec = *p++; + d34: 00244c03 lbu s8,2(s0) + p++; + d38: 00240b93 addi s7,s0,2 + d3c: b3a9 j a86 <_vscanf_core.constprop.0+0x11e> + d3e: fce6 sd s9,120(sp) + d40: f8ea sd s10,112(sp) + int count = (width > 0) ? width : 1; + d42: 00090c1b sext.w s8,s2 + d46: 0d205a63 blez s2,e1a <_vscanf_core.constprop.0+0x4b2> + char *buf = suppress ? NULL : va_arg(ap, char *); + d4a: 4d01 li s10,0 + d4c: 06098d63 beqz s3,dc6 <_vscanf_core.constprop.0+0x45e> + for (int i = 0; i < count; i++) + d50: 9c6a add s8,s8,s10 + if (c == -1) + d52: 5cfd li s9,-1 + if (ctx->ungotten >= 0) + d54: 018da783 lw a5,24(s11) + ctx->ungotten = -1; + d58: 856e mv a0,s11 + if (ctx->ungotten >= 0) + d5a: 0207dc63 bgez a5,d92 <_vscanf_core.constprop.0+0x42a> + d5e: b51ff0ef jal 8ae <_in_char.part.0> + d62: 87aa mv a5,a0 + if (c == -1) + d64: 0b950d63 beq a0,s9,e1e <_vscanf_core.constprop.0+0x4b6> + if (!suppress) + d68: 00099463 bnez s3,d70 <_vscanf_core.constprop.0+0x408> + buf[i] = (char)c; + d6c: 00fd0023 sb a5,0(s10) + for (int i = 0; i < count; i++) + d70: 0d05 addi s10,s10,1 + d72: ffac11e3 bne s8,s10,d54 <_vscanf_core.constprop.0+0x3ec> + while (*p) + d76: 001bc783 lbu a5,1(s7) + if (!suppress) + d7a: 00099363 bnez s3,d80 <_vscanf_core.constprop.0+0x418> + assigned++; + d7e: 2b05 addiw s6,s6,1 + d80: 794a ld s2,176(sp) + d82: 79aa ld s3,168(sp) + d84: 6baa ld s7,136(sp) + d86: 6c0a ld s8,128(sp) + d88: 7ce6 ld s9,120(sp) + d8a: 7d46 ld s10,112(sp) + while (*p) + d8c: c00793e3 bnez a5,992 <_vscanf_core.constprop.0+0x2a> + d90: b935 j 9cc <_vscanf_core.constprop.0+0x64> + ctx->ungotten = -1; + d92: 019dac23 sw s9,24(s11) + if (c == -1) + d96: bfc9 j d68 <_vscanf_core.constprop.0+0x400> + d98: 640e ld s0,192(sp) + d9a: 74ea ld s1,184(sp) + d9c: 794a ld s2,176(sp) + d9e: 79aa ld s3,168(sp) + da0: 7a0a ld s4,160(sp) + da2: 6aea ld s5,152(sp) + da4: 6baa ld s7,136(sp) + da6: 6c0a ld s8,128(sp) + da8: 7da6 ld s11,104(sp) + daa: b135 j 9d6 <_vscanf_core.constprop.0+0x6e> + int width = -1; + dac: 597d li s2,-1 + dae: b975 j a6a <_vscanf_core.constprop.0+0x102> + if (!suppress) + db0: 3c099c63 bnez s3,1188 <_vscanf_core.constprop.0+0x820> + buf[i] = '\0'; + db4: 67e2 ld a5,24(sp) + db6: 01a786b3 add a3,a5,s10 + dba: 00068023 sb zero,0(a3) + while (*p) + dbe: 001bc783 lbu a5,1(s7) + assigned++; + dc2: 2b05 addiw s6,s6,1 + dc4: bf75 j d80 <_vscanf_core.constprop.0+0x418> + char *buf = suppress ? NULL : va_arg(ap, char *); + dc6: 67a2 ld a5,8(sp) + dc8: 0007bd03 ld s10,0(a5) + dcc: 07a1 addi a5,a5,8 + dce: e43e sd a5,8(sp) + dd0: b741 j d50 <_vscanf_core.constprop.0+0x3e8> + ctx->ungotten = -1; + dd2: 56fd li a3,-1 + dd4: 00ddac23 sw a3,24(s11) + while (c != -1 && !isspace(c)) + dd8: bb11 j aec <_vscanf_core.constprop.0+0x184> + ctx->ungotten = -1; + dda: 56fd li a3,-1 + ddc: 00ddac23 sw a3,24(s11) + return c; + de0: b3d1 j ba4 <_vscanf_core.constprop.0+0x23c> + if (c == '-' || c == '+') + de2: fd57869b addiw a3,a5,-43 + de6: ffd6f613 andi a2,a3,-3 + ctx->ungotten = -1; + dea: 55fd li a1,-1 + dec: 00bdac23 sw a1,24(s11) + if (c == '-' || c == '+') + df0: 2601 sext.w a2,a2 + df2: ec061be3 bnez a2,cc8 <_vscanf_core.constprop.0+0x360> + num_buf[i++] = (char)c; + df6: 02f10023 sb a5,32(sp) + if (ctx->ungotten >= 0) + dfa: 018da783 lw a5,24(s11) + dfe: 2207da63 bgez a5,1032 <_vscanf_core.constprop.0+0x6ca> + e02: 856e mv a0,s11 + e04: aabff0ef jal 8ae <_in_char.part.0> + while (c != -1 && i < 63) + e08: 567d li a2,-1 + e0a: 87aa mv a5,a0 + num_buf[i++] = (char)c; + e0c: 4d05 li s10,1 + e0e: fd55069b addiw a3,a0,-43 + while (c != -1 && i < 63) + e12: 3ac50163 beq a0,a2,11b4 <_vscanf_core.constprop.0+0x84c> + e16: fce6 sd s9,120(sp) + e18: bd55 j ccc <_vscanf_core.constprop.0+0x364> + int count = (width > 0) ? width : 1; + e1a: 4c05 li s8,1 + e1c: b73d j d4a <_vscanf_core.constprop.0+0x3e2> + e1e: 640e ld s0,192(sp) + e20: 74ea ld s1,184(sp) + e22: 794a ld s2,176(sp) + e24: 79aa ld s3,168(sp) + e26: 7a0a ld s4,160(sp) + e28: 6aea ld s5,152(sp) + e2a: 6baa ld s7,136(sp) + e2c: 6c0a ld s8,128(sp) + e2e: 7ce6 ld s9,120(sp) + e30: 7d46 ld s10,112(sp) + e32: 7da6 ld s11,104(sp) + e34: b64d j 9d6 <_vscanf_core.constprop.0+0x6e> + e36: 640e ld s0,192(sp) + e38: 74ea ld s1,184(sp) + e3a: 794a ld s2,176(sp) + e3c: 79aa ld s3,168(sp) + e3e: 7a0a ld s4,160(sp) + e40: 6aea ld s5,152(sp) + e42: 6baa ld s7,136(sp) + e44: 6c0a ld s8,128(sp) + e46: 7d46 ld s10,112(sp) + e48: 7da6 ld s11,104(sp) + e4a: b671 j 9d6 <_vscanf_core.constprop.0+0x6e> + ctx->ungotten = -1; + e4c: 018dac23 sw s8,24(s11) + while (c != -1 && !isspace(c)) + e50: b9e5 j b48 <_vscanf_core.constprop.0+0x1e0> + ctx->ungotten = -1; + e52: 57fd li a5,-1 + e54: 00fdac23 sw a5,24(s11) + while (c != -1 && i < 63) + e58: bbd9 j c2e <_vscanf_core.constprop.0+0x2c6> + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + e5a: f9f3069b addiw a3,t1,-97 + e5e: 4795 li a5,5 + e60: 06d7f263 bgeu a5,a3,ec4 <_vscanf_core.constprop.0+0x55c> + e64: fbf3031b addiw t1,t1,-65 + e68: 4795 li a5,5 + e6a: 0467fd63 bgeu a5,t1,ec4 <_vscanf_core.constprop.0+0x55c> + int x = (c == 'x' || c == 'X'); + e6e: 07800693 li a3,120 + e72: 18d50763 beq a0,a3,1000 <_vscanf_core.constprop.0+0x698> + e76: fa850693 addi a3,a0,-88 + e7a: 0016b693 seqz a3,a3 + if (base == 0 && i == 1 && num_buf[0] == '0' && x) + e7e: 4301 li t1,0 + e80: 32061663 bnez a2,11ac <_vscanf_core.constprop.0+0x844> + e84: 4785 li a5,1 + e86: 4601 li a2,0 + e88: d6fd1ce3 bne s10,a5,c00 <_vscanf_core.constprop.0+0x298> + e8c: 02014e03 lbu t3,32(sp) + e90: 03000793 li a5,48 + e94: d6fe16e3 bne t3,a5,c00 <_vscanf_core.constprop.0+0x298> + e98: d60684e3 beqz a3,c00 <_vscanf_core.constprop.0+0x298> + base = 16; + e9c: 4641 li a2,16 + if (width > 0 && i >= width) + e9e: d7a919e3 bne s2,s10,c10 <_vscanf_core.constprop.0+0x2a8> + ea2: bb59 j c38 <_vscanf_core.constprop.0+0x2d0> + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + ea4: f9f3069b addiw a3,t1,-97 + ea8: 4795 li a5,5 + eaa: 02d7f263 bgeu a5,a3,ece <_vscanf_core.constprop.0+0x566> + eae: fbf3031b addiw t1,t1,-65 + eb2: 0467f063 bgeu a5,t1,ef2 <_vscanf_core.constprop.0+0x58a> + int x = (c == 'x' || c == 'X'); + eb6: 07800693 li a3,120 + eba: fad51ee3 bne a0,a3,e76 <_vscanf_core.constprop.0+0x50e> + ebe: 4301 li t1,0 + ec0: 4685 li a3,1 + ec2: b7c9 j e84 <_vscanf_core.constprop.0+0x51c> + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + ec4: 4305 li t1,1 + int x = (c == 'x' || c == 'X'); + ec6: 4681 li a3,0 + if (width > 0 && i >= width) + ec8: d3204ee3 bgtz s2,c04 <_vscanf_core.constprop.0+0x29c> + ecc: bb35 j c08 <_vscanf_core.constprop.0+0x2a0> + int x = (c == 'x' || c == 'X'); + ece: 4681 li a3,0 + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + ed0: 4305 li t1,1 + if (width > 0 && i >= width) + ed2: d32049e3 bgtz s2,c04 <_vscanf_core.constprop.0+0x29c> + ed6: bb0d j c08 <_vscanf_core.constprop.0+0x2a0> + ed8: 4301 li t1,0 + int x = (c == 'x' || c == 'X'); + eda: 4685 li a3,1 + if (width > 0 && i >= width) + edc: d32044e3 bgtz s2,c04 <_vscanf_core.constprop.0+0x29c> + ee0: bb05 j c10 <_vscanf_core.constprop.0+0x2a8> + if (!suppress) + ee2: c8099be3 bnez s3,b78 <_vscanf_core.constprop.0+0x210> + buf[i] = '\0'; + ee6: 67e2 ld a5,24(sp) + ee8: 00078023 sb zero,0(a5) + ctx->ungotten = c; + eec: 00adac23 sw a0,24(s11) + if (i > 0 && !suppress) + ef0: b171 j b7c <_vscanf_core.constprop.0+0x214> + int x = (c == 'x' || c == 'X'); + ef2: 4681 li a3,0 + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + ef4: 4305 li t1,1 + ef6: b779 j e84 <_vscanf_core.constprop.0+0x51c> + num_buf[i] = '\0'; + ef8: 040d0713 addi a4,s10,64 + efc: 1014 addi a3,sp,32 + efe: 96ba add a3,a3,a4 + f00: fc068023 sb zero,-64(a3) + ctx->ungotten = c; + f04: 00fdac23 sw a5,24(s11) + if (i == 0) + f08: f00d0be3 beqz s10,e1e <_vscanf_core.constprop.0+0x4b6> + f0c: 7ce6 ld s9,120(sp) + if (!suppress) + f0e: d40992e3 bnez s3,c52 <_vscanf_core.constprop.0+0x2ea> + if (*str == '-') + f12: 02014603 lbu a2,32(sp) + f16: 02d00793 li a5,45 + f1a: 1af60963 beq a2,a5,10cc <_vscanf_core.constprop.0+0x764> + else if (*str == '+') + f1e: 02b00793 li a5,43 + f22: 20f60a63 beq a2,a5,1136 <_vscanf_core.constprop.0+0x7ce> + f26: 00005797 auipc a5,0x5 + f2a: 9127b587 fld fa1,-1774(a5) # 5838 + f2e: 101c addi a5,sp,32 + while (*str >= '0' && *str <= '9') + f30: fd06069b addiw a3,a2,-48 + f34: 0ff6f513 zext.b a0,a3 + f38: 45a5 li a1,9 + f3a: f20007d3 fmv.d.x fa5,zero + f3e: 02a5e463 bltu a1,a0,f66 <_vscanf_core.constprop.0+0x5fe> + f42: 00005717 auipc a4,0x5 + f46: 8fe73707 fld fa4,-1794(a4) # 5840 + f4a: 4525 li a0,9 + f4c: 0017c603 lbu a2,1(a5) + val = val * 10.0 + (*str - '0'); + f50: d20686d3 fcvt.d.w fa3,a3 + str++; + f54: 0785 addi a5,a5,1 + while (*str >= '0' && *str <= '9') + f56: fd06069b addiw a3,a2,-48 + f5a: 0ff6f593 zext.b a1,a3 + val = val * 10.0 + (*str - '0'); + f5e: 6ae7f7c3 fmadd.d fa5,fa5,fa4,fa3 + while (*str >= '0' && *str <= '9') + f62: feb575e3 bgeu a0,a1,f4c <_vscanf_core.constprop.0+0x5e4> + if (*str == '.') + f66: 02e00693 li a3,46 + f6a: 16d60a63 beq a2,a3,10de <_vscanf_core.constprop.0+0x776> + if (*str == 'e' || *str == 'E') + f6e: 0007c683 lbu a3,0(a5) + f72: 0df6f693 andi a3,a3,223 + f76: 04500613 li a2,69 + f7a: 0cc68463 beq a3,a2,1042 <_vscanf_core.constprop.0+0x6da> + *va_arg(ap, double *) = val; + f7e: 6722 ld a4,8(sp) + if (len_mod == 1) + f80: 4685 li a3,1 + return sign * val; + f82: 12b7f7d3 fmul.d fa5,fa5,fa1 + *va_arg(ap, double *) = val; + f86: 631c ld a5,0(a4) + *va_arg(ap, int64 *) = val; + f88: 0721 addi a4,a4,8 + f8a: e43a sd a4,8(sp) + if (len_mod == 1) + f8c: 6762 ld a4,24(sp) + f8e: 18d70b63 beq a4,a3,1124 <_vscanf_core.constprop.0+0x7bc> + *va_arg(ap, float *) = (float)val; + f92: 4017f7d3 fcvt.s.d fa5,fa5 + assigned++; + f96: 2b05 addiw s6,s6,1 + *va_arg(ap, float *) = (float)val; + f98: 00f7a027 fsw fa5,0(a5) + f9c: b95d j c52 <_vscanf_core.constprop.0+0x2ea> + num_buf[i++] = (char)c; + f9e: 02a10023 sb a0,32(sp) + if (ctx->ungotten >= 0) + fa2: 018da503 lw a0,24(s11) + fa6: 06055463 bgez a0,100e <_vscanf_core.constprop.0+0x6a6> + faa: 856e mv a0,s11 + fac: 903ff0ef jal 8ae <_in_char.part.0> + num_buf[i++] = (char)c; + fb0: 4d05 li s10,1 + fb2: b101 j bb2 <_vscanf_core.constprop.0+0x24a> + int64 val = strtoll(num_buf, NULL, base); + fb4: 4581 li a1,0 + fb6: 1008 addi a0,sp,32 + fb8: 67e030ef jal 4636 + *va_arg(ap, int64 *) = val; + fbc: 67a2 ld a5,8(sp) + if (len_mod == 2) + fbe: 6762 ld a4,24(sp) + fc0: 4689 li a3,2 + *va_arg(ap, int64 *) = val; + fc2: 07a1 addi a5,a5,8 + if (len_mod == 2) + fc4: 16d70363 beq a4,a3,112a <_vscanf_core.constprop.0+0x7c2> + *va_arg(ap, int64 *) = val; + fc8: 6722 ld a4,8(sp) + else if (len_mod == 1) + fca: 4605 li a2,1 + *va_arg(ap, int64 *) = val; + fcc: 6314 ld a3,0(a4) + else if (len_mod == 1) + fce: 6762 ld a4,24(sp) + fd0: 16c70163 beq a4,a2,1132 <_vscanf_core.constprop.0+0x7ca> + *va_arg(ap, int *) = (int)val; + fd4: c288 sw a0,0(a3) + assigned++; + fd6: 2b05 addiw s6,s6,1 + fd8: e43e sd a5,8(sp) + fda: b9a5 j c52 <_vscanf_core.constprop.0+0x2ea> + num_buf[i] = '\0'; + fdc: 040d0793 addi a5,s10,64 + fe0: 1018 addi a4,sp,32 + fe2: 00e785b3 add a1,a5,a4 + fe6: fc058023 sb zero,-64(a1) + if (i == 0) + fea: 7ce6 ld s9,120(sp) + fec: b70d j f0e <_vscanf_core.constprop.0+0x5a6> + num_buf[i] = '\0'; + fee: 040d0793 addi a5,s10,64 + ff2: 1018 addi a4,sp,32 + ff4: 00e78833 add a6,a5,a4 + ff8: fc080023 sb zero,-64(a6) + if (i == 0) + ffc: 7ce6 ld s9,120(sp) + ffe: b981 j c4e <_vscanf_core.constprop.0+0x2e6> + int x = (c == 'x' || c == 'X'); + 1000: 4301 li t1,0 + 1002: 4685 li a3,1 + if (width > 0 && i >= width) + 1004: c12040e3 bgtz s2,c04 <_vscanf_core.constprop.0+0x29c> + 1008: b101 j c08 <_vscanf_core.constprop.0+0x2a0> + int assigned = 0; + 100a: 4b01 li s6,0 + 100c: b2e9 j 9d6 <_vscanf_core.constprop.0+0x6e> + ctx->ungotten = -1; + 100e: 56fd li a3,-1 + 1010: fce6 sd s9,120(sp) + 1012: 00ddac23 sw a3,24(s11) + int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); + 1016: 07800693 li a3,120 + 101a: 4641 li a2,16 + num_buf[i++] = (char)c; + 101c: 4d05 li s10,1 + int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); + 101e: badc09e3 beq s8,a3,bd0 <_vscanf_core.constprop.0+0x268> + 1022: 06900693 li a3,105 + 1026: 4629 li a2,10 + num_buf[i++] = (char)c; + 1028: 4d05 li s10,1 + int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); + 102a: badc13e3 bne s8,a3,bd0 <_vscanf_core.constprop.0+0x268> + 102e: 4601 li a2,0 + 1030: b645 j bd0 <_vscanf_core.constprop.0+0x268> + ctx->ungotten = -1; + 1032: 56fd li a3,-1 + 1034: fce6 sd s9,120(sp) + 1036: 00ddac23 sw a3,24(s11) + num_buf[i++] = (char)c; + 103a: 4d05 li s10,1 + 103c: fd57869b addiw a3,a5,-43 + 1040: b171 j ccc <_vscanf_core.constprop.0+0x364> + if (*str == '-') + 1042: 0017c583 lbu a1,1(a5) + 1046: 02d00693 li a3,45 + 104a: 0ed58f63 beq a1,a3,1148 <_vscanf_core.constprop.0+0x7e0> + else if (*str == '+') + 104e: 02b00693 li a3,43 + 1052: 10d58e63 beq a1,a3,116e <_vscanf_core.constprop.0+0x806> + while (*str >= '0' && *str <= '9') + 1056: fd05861b addiw a2,a1,-48 + 105a: 0ff67513 zext.b a0,a2 + 105e: 45a5 li a1,9 + str++; + 1060: 00178693 addi a3,a5,1 + int esign = 1; + 1064: 4805 li a6,1 + while (*str >= '0' && *str <= '9') + 1066: 04a5ec63 bltu a1,a0,10be <_vscanf_core.constprop.0+0x756> + 106a: 4525 li a0,9 + 106c: 0016c583 lbu a1,1(a3) + eval = eval * 10 + (*str - '0'); + 1070: 0029979b slliw a5,s3,0x2 + 1074: 013787bb addw a5,a5,s3 + 1078: 0017979b slliw a5,a5,0x1 + 107c: 00f609bb addw s3,a2,a5 + while (*str >= '0' && *str <= '9') + 1080: fd05861b addiw a2,a1,-48 + 1084: 0ff67593 zext.b a1,a2 + str++; + 1088: 0685 addi a3,a3,1 + while (*str >= '0' && *str <= '9') + 108a: feb571e3 bgeu a0,a1,106c <_vscanf_core.constprop.0+0x704> + while (eval--) + 108e: fff9879b addiw a5,s3,-1 + 1092: 12098463 beqz s3,11ba <_vscanf_core.constprop.0+0x852> + double p = 1.0; + 1096: 00004717 auipc a4,0x4 + 109a: 7a273687 fld fa3,1954(a4) # 5838 + 109e: 00004717 auipc a4,0x4 + 10a2: 7a273707 fld fa4,1954(a4) # 5840 + while (eval--) + 10a6: 56fd li a3,-1 + 10a8: 37fd addiw a5,a5,-1 + p *= 10.0; + 10aa: 12e6f6d3 fmul.d fa3,fa3,fa4 + while (eval--) + 10ae: fed79de3 bne a5,a3,10a8 <_vscanf_core.constprop.0+0x740> + if (esign == 1) + 10b2: 4785 li a5,1 + 10b4: 00f80963 beq a6,a5,10c6 <_vscanf_core.constprop.0+0x75e> + val /= p; + 10b8: 1ad7f7d3 fdiv.d fa5,fa5,fa3 + 10bc: b5c9 j f7e <_vscanf_core.constprop.0+0x616> + double p = 1.0; + 10be: 00004797 auipc a5,0x4 + 10c2: 77a7b687 fld fa3,1914(a5) # 5838 + val *= p; + 10c6: 12d7f7d3 fmul.d fa5,fa5,fa3 + 10ca: bd55 j f7e <_vscanf_core.constprop.0+0x616> + while (*str >= '0' && *str <= '9') + 10cc: 00004797 auipc a5,0x4 + 10d0: 7647b587 fld fa1,1892(a5) # 5830 + 10d4: 02114603 lbu a2,33(sp) + str++; + 10d8: 02110793 addi a5,sp,33 + 10dc: bd91 j f30 <_vscanf_core.constprop.0+0x5c8> + while (*str >= '0' && *str <= '9') + 10de: 0017c683 lbu a3,1(a5) + 10e2: 45a5 li a1,9 + str++; + 10e4: 0785 addi a5,a5,1 + while (*str >= '0' && *str <= '9') + 10e6: fd06861b addiw a2,a3,-48 + 10ea: 0ff67513 zext.b a0,a2 + 10ee: e8a5e2e3 bltu a1,a0,f72 <_vscanf_core.constprop.0+0x60a> + double div = 10.0; + 10f2: 00004717 auipc a4,0x4 + 10f6: 74e73707 fld fa4,1870(a4) # 5840 + 10fa: 22e70653 fmv.d fa2,fa4 + while (*str >= '0' && *str <= '9') + 10fe: 4525 li a0,9 + val += (*str - '0') / div; + 1100: d20606d3 fcvt.d.w fa3,a2 + while (*str >= '0' && *str <= '9') + 1104: 0017c683 lbu a3,1(a5) + str++; + 1108: 0785 addi a5,a5,1 + val += (*str - '0') / div; + 110a: 1ac6f6d3 fdiv.d fa3,fa3,fa2 + while (*str >= '0' && *str <= '9') + 110e: fd06861b addiw a2,a3,-48 + 1112: 0ff67593 zext.b a1,a2 + div *= 10.0; + 1116: 12e67653 fmul.d fa2,fa2,fa4 + val += (*str - '0') / div; + 111a: 02d7f7d3 fadd.d fa5,fa5,fa3 + while (*str >= '0' && *str <= '9') + 111e: feb571e3 bgeu a0,a1,1100 <_vscanf_core.constprop.0+0x798> + 1122: bd81 j f72 <_vscanf_core.constprop.0+0x60a> + *va_arg(ap, double *) = val; + 1124: a39c fsd fa5,0(a5) + assigned++; + 1126: 2b05 addiw s6,s6,1 + 1128: b62d j c52 <_vscanf_core.constprop.0+0x2ea> + *va_arg(ap, int64 *) = val; + 112a: 6722 ld a4,8(sp) + 112c: 6314 ld a3,0(a4) + 112e: e288 sd a0,0(a3) + 1130: b55d j fd6 <_vscanf_core.constprop.0+0x66e> + *va_arg(ap, long *) = (long)val; + 1132: e288 sd a0,0(a3) + 1134: b54d j fd6 <_vscanf_core.constprop.0+0x66e> + while (*str >= '0' && *str <= '9') + 1136: 00004797 auipc a5,0x4 + 113a: 7027b587 fld fa1,1794(a5) # 5838 + 113e: 02114603 lbu a2,33(sp) + str++; + 1142: 02110793 addi a5,sp,33 + 1146: b3ed j f30 <_vscanf_core.constprop.0+0x5c8> + while (*str >= '0' && *str <= '9') + 1148: 0027c583 lbu a1,2(a5) + str++; + 114c: 00278693 addi a3,a5,2 + while (*str >= '0' && *str <= '9') + 1150: 4525 li a0,9 + 1152: fd05861b addiw a2,a1,-48 + 1156: 0ff67793 zext.b a5,a2 + esign = -1; + 115a: 587d li a6,-1 + while (*str >= '0' && *str <= '9') + 115c: f0f577e3 bgeu a0,a5,106a <_vscanf_core.constprop.0+0x702> + double p = 1.0; + 1160: 00004797 auipc a5,0x4 + 1164: 6d87b687 fld fa3,1752(a5) # 5838 + val /= p; + 1168: 1ad7f7d3 fdiv.d fa5,fa5,fa3 + 116c: bd09 j f7e <_vscanf_core.constprop.0+0x616> + while (*str >= '0' && *str <= '9') + 116e: 0027c583 lbu a1,2(a5) + str++; + 1172: 00278693 addi a3,a5,2 + while (*str >= '0' && *str <= '9') + 1176: 4525 li a0,9 + 1178: fd05861b addiw a2,a1,-48 + 117c: 0ff67793 zext.b a5,a2 + 1180: f2f56fe3 bltu a0,a5,10be <_vscanf_core.constprop.0+0x756> + int esign = 1; + 1184: 4805 li a6,1 + 1186: b5d5 j 106a <_vscanf_core.constprop.0+0x702> + while (*p) + 1188: 001bc783 lbu a5,1(s7) + 118c: bed5 j d80 <_vscanf_core.constprop.0+0x418> + if (!suppress) + 118e: 9e0997e3 bnez s3,b7c <_vscanf_core.constprop.0+0x214> + buf[i] = '\0'; + 1192: 67e2 ld a5,24(sp) + 1194: 00078023 sb zero,0(a5) + 1198: b2d5 j b7c <_vscanf_core.constprop.0+0x214> + num_buf[i] = '\0'; + 119a: 040d0793 addi a5,s10,64 + 119e: 1018 addi a4,sp,32 + 11a0: 97ba add a5,a5,a4 + 11a2: fc078023 sb zero,-64(a5) + if (i == 0) + 11a6: aa0d14e3 bnez s10,c4e <_vscanf_core.constprop.0+0x2e6> + 11aa: b171 j e36 <_vscanf_core.constprop.0+0x4ce> + 11ac: 4641 li a2,16 + if (width > 0 && i >= width) + 11ae: a5204be3 bgtz s2,c04 <_vscanf_core.constprop.0+0x29c> + 11b2: bc99 j c08 <_vscanf_core.constprop.0+0x2a0> + num_buf[i] = '\0'; + 11b4: 020100a3 sb zero,33(sp) + if (i == 0) + 11b8: bb99 j f0e <_vscanf_core.constprop.0+0x5a6> + double p = 1.0; + 11ba: 00004797 auipc a5,0x4 + 11be: 67e7b687 fld fa3,1662(a5) # 5838 + 11c2: bdc5 j 10b2 <_vscanf_core.constprop.0+0x74a> + buf[i] = '\0'; + 11c4: 67e2 ld a5,24(sp) + 11c6: 01a786b3 add a3,a5,s10 + 11ca: 00068023 sb zero,0(a3) + ctx->ungotten = c; + 11ce: 00adac23 sw a0,24(s11) + while (*p) + 11d2: 001bc783 lbu a5,1(s7) + 11d6: b6f5 j dc2 <_vscanf_core.constprop.0+0x45a> + +00000000000011d8 <_out_char>: +{ + 11d8: 7179 addi sp,sp,-48 + 11da: ec26 sd s1,24(sp) + if (ctx->stream) + 11dc: 6d04 ld s1,24(a0) +{ + 11de: f022 sd s0,32(sp) + 11e0: f406 sd ra,40(sp) + 11e2: 842a mv s0,a0 + 11e4: 872e mv a4,a1 + if (ctx->stream) + 11e6: c0a1 beqz s1,1226 <_out_char+0x4e> + 11e8: e84a sd s2,16(sp) + if (stream->buf_mode == 2) + 11ea: 41c4a903 lw s2,1052(s1) + 11ee: 4789 li a5,2 + 11f0: 04f90d63 beq s2,a5,124a <_out_char+0x72> + stream->buffer[stream->buf_write_pos++] = (char)c; + 11f4: 4104a783 lw a5,1040(s1) + if (stream->buf_write_pos >= BUFSIZ) + 11f8: 3ff00693 li a3,1023 + stream->buffer[stream->buf_write_pos++] = (char)c; + 11fc: 0017861b addiw a2,a5,1 + 1200: 40c4a823 sw a2,1040(s1) + 1204: 97a6 add a5,a5,s1 + 1206: 00b78823 sb a1,16(a5) + if (stream->buf_write_pos >= BUFSIZ) + 120a: 08c6c063 blt a3,a2,128a <_out_char+0xb2> + else if (stream->buf_mode == 1 && c == '\n') + 120e: 4785 li a5,1 + 1210: 04f90a63 beq s2,a5,1264 <_out_char+0x8c> + ctx->written++; + 1214: 681c ld a5,16(s0) + 1216: 6942 ld s2,16(sp) +} + 1218: 70a2 ld ra,40(sp) + ctx->written++; + 121a: 0785 addi a5,a5,1 + 121c: e81c sd a5,16(s0) +} + 121e: 7402 ld s0,32(sp) + 1220: 64e2 ld s1,24(sp) + 1222: 6145 addi sp,sp,48 + 1224: 8082 ret + if (ctx->limit > 0 && ctx->written < ctx->limit - 1) + 1226: 6514 ld a3,8(a0) + 1228: 691c ld a5,16(a0) + 122a: ca89 beqz a3,123c <_out_char+0x64> + 122c: 16fd addi a3,a3,-1 + 122e: 00d7f763 bgeu a5,a3,123c <_out_char+0x64> + ctx->buf[ctx->written] = c; + 1232: 6114 ld a3,0(a0) + 1234: 97b6 add a5,a5,a3 + 1236: 00b78023 sb a1,0(a5) + ctx->written++; + 123a: 691c ld a5,16(a0) + 123c: 0785 addi a5,a5,1 +} + 123e: 70a2 ld ra,40(sp) + ctx->written++; + 1240: e81c sd a5,16(s0) +} + 1242: 7402 ld s0,32(sp) + 1244: 64e2 ld s1,24(sp) + 1246: 6145 addi sp,sp,48 + 1248: 8082 ret + if (write(stream->fd, &ch, 1) != 1) + 124a: 4088 lw a0,0(s1) + 124c: 4605 li a2,1 + 124e: 00f10593 addi a1,sp,15 + char ch = (char)c; + 1252: 00e107a3 sb a4,15(sp) + if (write(stream->fd, &ch, 1) != 1) + 1256: e93fe0ef jal e8 + 125a: 4785 li a5,1 + 125c: faf50ce3 beq a0,a5,1214 <_out_char+0x3c> + stream->error = 1; + 1260: c49c sw a5,8(s1) + return EOF; + 1262: bf4d j 1214 <_out_char+0x3c> + else if (stream->buf_mode == 1 && c == '\n') + 1264: 47a9 li a5,10 + 1266: faf597e3 bne a1,a5,1214 <_out_char+0x3c> + if (stream->buf_write_pos > 0) + 126a: fac055e3 blez a2,1214 <_out_char+0x3c> + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 126e: 4088 lw a0,0(s1) + 1270: 01048593 addi a1,s1,16 + 1274: e75fe0ef jal e8 + if (ret < stream->buf_write_pos) + 1278: 4104a783 lw a5,1040(s1) + 127c: 02f55063 bge a0,a5,129c <_out_char+0xc4> + stream->error = 1; + 1280: 0124a423 sw s2,8(s1) + stream->buf_write_pos = 0; + 1284: 4004a823 sw zero,1040(s1) + return EOF; + 1288: b771 j 1214 <_out_char+0x3c> + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 128a: 4088 lw a0,0(s1) + 128c: 01048593 addi a1,s1,16 + 1290: e59fe0ef jal e8 + if (ret < stream->buf_write_pos) + 1294: 4104a783 lw a5,1040(s1) + 1298: 00f54563 blt a0,a5,12a2 <_out_char+0xca> + stream->buf_write_pos = 0; + 129c: 4004a823 sw zero,1040(s1) + 12a0: bf95 j 1214 <_out_char+0x3c> + stream->error = 1; + 12a2: 4785 li a5,1 + 12a4: c49c sw a5,8(s1) + stream->buf_write_pos = 0; + 12a6: 4004a823 sw zero,1040(s1) + return EOF; + 12aa: b7ad j 1214 <_out_char+0x3c> + +00000000000012ac : + "75767778798081828384858687888990919293949596979899" +}; + +STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod) +{ + stbsp__period = pperiod; + 12ac: 00005797 auipc a5,0x5 + 12b0: 6a478793 addi a5,a5,1700 # 6950 + 12b4: 0cb78623 sb a1,204(a5) + stbsp__comma = pcomma; + 12b8: 0ca786a3 sb a0,205(a5) +} + 12bc: 8082 ret + +00000000000012be : + + return (stbsp__uint32)(sn - s); +} + +STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(vsprintfcb)(STBSP_SPRINTFCB *callback, void *user, char *buf, char const *fmt, va_list va) +{ + 12be: d1010113 addi sp,sp,-752 + // Check if the next 4 bytes contain %(0x25) or end of string. + // Using the 'hasless' trick: + // https://graphics.stanford.edu/~seander/bithacks.html#HasLessInWord + stbsp__uint32 v, c; + v = *(stbsp__uint32 *)f; + c = (~v) & 0x80808080; + 12c2: 808087b7 lui a5,0x80808 + if (((v ^ 0x25252525) - 0x01010101) & c) + 12c6: 252523b7 lui t2,0x25252 + 12ca: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x2524acdd> +{ + 12ce: 29913c23 sd s9,664(sp) + 12d2: 29b13423 sd s11,648(sp) + int tlen = 0; + 12d6: 4c81 li s9,0 + if (((v ^ 0x25252525) - 0x01010101) & c) + 12d8: feff0db7 lui s11,0xfeff0 + c = (~v) & 0x80808080; + 12dc: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff80800838> +{ + 12e0: 2e813023 sd s0,736(sp) + 12e4: 2c913c23 sd s1,728(sp) + 12e8: 2d213823 sd s2,720(sp) + 12ec: 2d313423 sd s3,712(sp) + 12f0: 2b713423 sd s7,680(sp) + 12f4: 2b813023 sd s8,672(sp) + 12f8: 29a13823 sd s10,656(sp) + 12fc: 2e113423 sd ra,744(sp) + 1300: 8d66 mv s10,s9 + 1302: 8432 mv s0,a2 + 1304: 8c9e mv s9,t2 + 1306: 89aa mv s3,a0 + 1308: e42e sd a1,8(sp) + 130a: 84b6 mv s1,a3 + 130c: 8bba mv s7,a4 + 130e: fc02 sd zero,56(sp) + for (;;) { + 1310: 8932 mv s2,a2 + if (((v ^ 0x25252525) - 0x01010101) & c) + 1312: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe86b7> + goto schk1; + if ((v - 0x01010101) & c) + goto schk2; + if (callback) + if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) + 1316: 20000c13 li s8,512 + 131a: 83be mv t2,a5 + while (((stbsp__uintptr)f) & 3) { + 131c: 0034f793 andi a5,s1,3 + 1320: c7a9 beqz a5,136a + if (f[0] == '%') + 1322: 0004c783 lbu a5,0(s1) + 1326: 02500713 li a4,37 + 132a: 0ee78263 beq a5,a4,140e + if (f[0] == 0) + 132e: cbd9 beqz a5,13c4 + stbsp__chk_cb_buf(1); + 1330: 02098663 beqz s3,135c + 1334: 4124063b subw a2,s0,s2 + 1338: 1fe00713 li a4,510 + 133c: 02c75063 bge a4,a2,135c + 1340: 65a2 ld a1,8(sp) + 1342: 854a mv a0,s2 + 1344: e81e sd t2,16(sp) + 1346: 00cd0d3b addw s10,s10,a2 + 134a: 9982 jalr s3 + 134c: 892a mv s2,a0 + 134e: e119 bnez a0,1354 + 1350: 0200106f j 2370 + *bf++ = f[0]; + 1354: 0004c783 lbu a5,0(s1) + stbsp__chk_cb_buf(1); + 1358: 63c2 ld t2,16(sp) + 135a: 842a mv s0,a0 + ++f; + 135c: 0485 addi s1,s1,1 + *bf++ = f[0]; + 135e: 00f40023 sb a5,0(s0) + while (((stbsp__uintptr)f) & 3) { + 1362: 0034f793 andi a5,s1,3 + *bf++ = f[0]; + 1366: 0405 addi s0,s0,1 + while (((stbsp__uintptr)f) & 3) { + 1368: ffcd bnez a5,1322 + v = *(stbsp__uint32 *)f; + 136a: 4094 lw a3,0(s1) + c = (~v) & 0x80808080; + 136c: fff6c793 not a5,a3 + if (((v ^ 0x25252525) - 0x01010101) & c) + 1370: 0196c733 xor a4,a3,s9 + c = (~v) & 0x80808080; + 1374: 0077f7b3 and a5,a5,t2 + if (((v ^ 0x25252525) - 0x01010101) & c) + 1378: 01b7073b addw a4,a4,s11 + 137c: 8f7d and a4,a4,a5 + 137e: 2701 sext.w a4,a4 + 1380: f34d bnez a4,1322 + if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) + 1382: 460d li a2,3 + 1384: a805 j 13b4 + if (callback) + 1386: 00098863 beqz s3,1396 + if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) + 138a: 412407b3 sub a5,s0,s2 + 138e: 40fc07bb subw a5,s8,a5 + 1392: f8f658e3 bge a2,a5,1322 + bf[2] = f[2]; + bf[3] = f[3]; + } else + #endif + { + *(stbsp__uint32 *)bf = v; + 1396: c014 sw a3,0(s0) + v = *(stbsp__uint32 *)f; + 1398: 40d4 lw a3,4(s1) + } + bf += 4; + 139a: 0411 addi s0,s0,4 + f += 4; + 139c: 0491 addi s1,s1,4 + c = (~v) & 0x80808080; + 139e: fff6c793 not a5,a3 + if (((v ^ 0x25252525) - 0x01010101) & c) + 13a2: 0196c733 xor a4,a3,s9 + c = (~v) & 0x80808080; + 13a6: 0077f7b3 and a5,a5,t2 + if (((v ^ 0x25252525) - 0x01010101) & c) + 13aa: 01b7073b addw a4,a4,s11 + 13ae: 8f7d and a4,a4,a5 + 13b0: 2701 sext.w a4,a4 + 13b2: fb25 bnez a4,1322 + if ((v - 0x01010101) & c) + 13b4: 01b6873b addw a4,a3,s11 + 13b8: 8ff9 and a5,a5,a4 + 13ba: 2781 sext.w a5,a5 + 13bc: d7e9 beqz a5,1386 + if (f[0] == 0) + 13be: 0004c783 lbu a5,0(s1) + 13c2: f7bd bnez a5,1330 +endfmt: + + if (!callback) + *bf = 0; + else + stbsp__flush_cb(); + 13c4: 8cea mv s9,s10 + 13c6: 412404bb subw s1,s0,s2 + if (!callback) + 13ca: 70098563 beqz s3,1ad4 + stbsp__flush_cb(); + 13ce: 00905663 blez s1,13da + 13d2: 65a2 ld a1,8(sp) + 13d4: 8626 mv a2,s1 + 13d6: 854a mv a0,s2 + 13d8: 9982 jalr s3 + 13da: 009c8cbb addw s9,s9,s1 + +done: + return tlen + (int)(bf - buf); +} + 13de: 2e813083 ld ra,744(sp) + 13e2: 2e013403 ld s0,736(sp) + 13e6: 2d813483 ld s1,728(sp) + 13ea: 2d013903 ld s2,720(sp) + 13ee: 2c813983 ld s3,712(sp) + 13f2: 2a813b83 ld s7,680(sp) + 13f6: 2a013c03 ld s8,672(sp) + 13fa: 29013d03 ld s10,656(sp) + 13fe: 28813d83 ld s11,648(sp) + 1402: 8566 mv a0,s9 + 1404: 29813c83 ld s9,664(sp) + 1408: 2f010113 addi sp,sp,752 + 140c: 8082 ret + 140e: 2d413023 sd s4,704(sp) + 1412: 2b513c23 sd s5,696(sp) + 1416: 2b613823 sd s6,688(sp) + tz = 0; + 141a: 00248693 addi a3,s1,2 + fl = 0; + 141e: 4e01 li t3,0 + switch (f[0]) { + 1420: 03f00593 li a1,63 + 1424: 00004617 auipc a2,0x4 + 1428: d3460613 addi a2,a2,-716 # 5158 <_GLOBAL__sub_I__ZSt3cin+0x190> + 142c: fff6c783 lbu a5,-1(a3) + 1430: fff68493 addi s1,a3,-1 + 1434: fe07871b addiw a4,a5,-32 + 1438: 0ff77713 zext.b a4,a4 + 143c: 00e5ec63 bltu a1,a4,1454 + 1440: 070a slli a4,a4,0x2 + 1442: 9732 add a4,a4,a2 + 1444: 4318 lw a4,0(a4) + 1446: 9732 add a4,a4,a2 + 1448: 8702 jr a4 + if (f[0] == '*') { + 144a: 0014c783 lbu a5,1(s1) + fl |= STBSP__LEADINGZERO; + 144e: 010e6e13 ori t3,t3,16 + ++f; + 1452: 0485 addi s1,s1,1 + if (f[0] == '*') { + 1454: 02a00713 li a4,42 + 1458: 0ce79163 bne a5,a4,151a + fw = va_arg(va, stbsp__uint32); + 145c: 000bab03 lw s6,0(s7) + while ((f[0] >= '0') && (f[0] <= '9')) { + 1460: 0014c783 lbu a5,1(s1) + fw = va_arg(va, stbsp__uint32); + 1464: 0ba1 addi s7,s7,8 + ++f; + 1466: 0485 addi s1,s1,1 + if (f[0] == '.') { + 1468: 02e00713 li a4,46 + pr = -1; + 146c: 58fd li a7,-1 + if (f[0] == '.') { + 146e: 0ee78663 beq a5,a4,155a + switch (f[0]) { + 1472: 04900713 li a4,73 + 1476: 10e78263 beq a5,a4,157a + 147a: f987871b addiw a4,a5,-104 + 147e: 0ff77713 zext.b a4,a4 + 1482: 46c9 li a3,18 + 1484: 02e6e063 bltu a3,a4,14a4 + 1488: 00004697 auipc a3,0x4 + 148c: dd068693 addi a3,a3,-560 # 5258 <_GLOBAL__sub_I__ZSt3cin+0x290> + 1490: 070a slli a4,a4,0x2 + 1492: 9736 add a4,a4,a3 + 1494: 4318 lw a4,0(a4) + 1496: 9736 add a4,a4,a3 + 1498: 8702 jr a4 + if (f[0] == 'h') + 149a: 0014c783 lbu a5,1(s1) + fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; + 149e: 020e6e13 ori t3,t3,32 + ++f; + 14a2: 0485 addi s1,s1,1 + switch (f[0]) { + 14a4: fbf7871b addiw a4,a5,-65 + 14a8: 0ff77713 zext.b a4,a4 + 14ac: 03700693 li a3,55 + 14b0: 0ee6ea63 bltu a3,a4,15a4 + 14b4: 00004697 auipc a3,0x4 + 14b8: df068693 addi a3,a3,-528 # 52a4 <_GLOBAL__sub_I__ZSt3cin+0x2dc> + 14bc: 070a slli a4,a4,0x2 + 14be: 9736 add a4,a4,a3 + 14c0: 4318 lw a4,0(a4) + 14c2: 9736 add a4,a4,a3 + 14c4: 8702 jr a4 + fl |= STBSP__METRIC_NOSPACE; + 14c6: 400e6e13 ori t3,t3,1024 + continue; + 14ca: 0685 addi a3,a3,1 + 14cc: b785 j 142c + fl |= STBSP__LEFTJUST; + 14ce: 001e6e13 ori t3,t3,1 + continue; + 14d2: 0685 addi a3,a3,1 + 14d4: bfa1 j 142c + fl |= STBSP__LEADINGPLUS; + 14d6: 002e6e13 ori t3,t3,2 + continue; + 14da: 0685 addi a3,a3,1 + 14dc: bf81 j 142c + fl |= STBSP__TRIPLET_COMMA; + 14de: 040e6e13 ori t3,t3,64 + continue; + 14e2: 0685 addi a3,a3,1 + 14e4: b7a1 j 142c + if (fl & STBSP__METRIC_SUFFIX) { + 14e6: 100e7793 andi a5,t3,256 + 14ea: 8772 mv a4,t3 + 14ec: 56078363 beqz a5,1a52 + if (fl & STBSP__METRIC_1024) { + 14f0: 6785 lui a5,0x1 + 14f2: 034e1513 slli a0,t3,0x34 + 14f6: 80078793 addi a5,a5,-2048 # 800 + 14fa: 5c055863 bgez a0,1aca + fl |= STBSP__METRIC_JEDEC; + 14fe: 6785 lui a5,0x1 + 1500: 8f5d or a4,a4,a5 + 1502: 00070e1b sext.w t3,a4 + 1506: 0685 addi a3,a3,1 + 1508: b715 j 142c + fl |= STBSP__LEADING_0X; + 150a: 008e6e13 ori t3,t3,8 + continue; + 150e: 0685 addi a3,a3,1 + 1510: bf31 j 142c + fl |= STBSP__LEADINGSPACE; + 1512: 004e6e13 ori t3,t3,4 + continue; + 1516: 0685 addi a3,a3,1 + 1518: bf11 j 142c + while ((f[0] >= '0') && (f[0] <= '9')) { + 151a: fd07871b addiw a4,a5,-48 # fd0 <_vscanf_core.constprop.0+0x668> + 151e: 0ff77713 zext.b a4,a4 + 1522: 4625 li a2,9 + fw = 0; + 1524: 4b01 li s6,0 + while ((f[0] >= '0') && (f[0] <= '9')) { + 1526: 46a5 li a3,9 + 1528: f4e660e3 bltu a2,a4,1468 + fw = fw * 10 + f[0] - '0'; + 152c: 002b171b slliw a4,s6,0x2 + 1530: 0167073b addw a4,a4,s6 + 1534: 0017171b slliw a4,a4,0x1 + f++; + 1538: 0485 addi s1,s1,1 + fw = fw * 10 + f[0] - '0'; + 153a: 9f3d addw a4,a4,a5 + while ((f[0] >= '0') && (f[0] <= '9')) { + 153c: 0004c783 lbu a5,0(s1) + fw = fw * 10 + f[0] - '0'; + 1540: fd070b1b addiw s6,a4,-48 + while ((f[0] >= '0') && (f[0] <= '9')) { + 1544: fd07871b addiw a4,a5,-48 + 1548: 0ff77713 zext.b a4,a4 + 154c: fee6f0e3 bgeu a3,a4,152c + if (f[0] == '.') { + 1550: 02e00713 li a4,46 + pr = -1; + 1554: 58fd li a7,-1 + if (f[0] == '.') { + 1556: f0e79ee3 bne a5,a4,1472 + if (f[0] == '*') { + 155a: 0014c783 lbu a5,1(s1) + 155e: 02a00713 li a4,42 + 1562: 52e79763 bne a5,a4,1a90 + while ((f[0] >= '0') && (f[0] <= '9')) { + 1566: 0024c783 lbu a5,2(s1) + switch (f[0]) { + 156a: 04900713 li a4,73 + pr = va_arg(va, stbsp__uint32); + 156e: 000ba883 lw a7,0(s7) + ++f; + 1572: 0489 addi s1,s1,2 + pr = va_arg(va, stbsp__uint32); + 1574: 0ba1 addi s7,s7,8 + switch (f[0]) { + 1576: f0e792e3 bne a5,a4,147a + if ((f[1] == '6') && (f[2] == '4')) { + 157a: 0014c783 lbu a5,1(s1) + 157e: 03600713 li a4,54 + 1582: 00e79463 bne a5,a4,158a + 1586: 1e60106f j 276c + } else if ((f[1] == '3') && (f[2] == '2')) { + 158a: 03300713 li a4,51 + 158e: 6ae796e3 bne a5,a4,243a + 1592: 0024c683 lbu a3,2(s1) + 1596: 03200713 li a4,50 + 159a: 00e69463 bne a3,a4,15a2 + 159e: 0ae0106f j 264c + ++f; + 15a2: 0485 addi s1,s1,1 + *s = f[0]; + 15a4: 26f10fa3 sb a5,639(sp) + l = 1; + 15a8: 4785 li a5,1 + 15aa: d0be sw a5,96(sp) + lead[0] = 0; + 15ac: 06010423 sb zero,104(sp) + tail[0] = 0; + 15b0: 06010823 sb zero,112(sp) + dp = 0; + 15b4: d282 sw zero,100(sp) + 15b6: e0de sd s7,64(sp) + 15b8: 4701 li a4,0 + 15ba: 4301 li t1,0 + 15bc: 4f81 li t6,0 + 15be: 4685 li a3,1 + 15c0: 4a01 li s4,0 + cs = 0; + 15c2: 4281 li t0,0 + s = num + STBSP__NUMSZ - 1; + 15c4: 27f10a93 addi s5,sp,639 + fw = fl = 0; + 15c8: 4e01 li t3,0 + tz = 0; + 15ca: 4881 li a7,0 + if (fl & STBSP__LEADINGZERO) // if leading zeros, everything is in pr + 15cc: 010e7793 andi a5,t3,16 + 15d0: 40078ee3 beqz a5,21ec + pr = (fw > pr) ? fw : pr; + 15d4: 87ba mv a5,a4 + 15d6: 00675363 bge a4,t1,15dc + 15da: 879a mv a5,t1 + 15dc: 0007871b sext.w a4,a5 + fw = 0; + 15e0: 4301 li t1,0 + if (fw + pr) { + 15e2: 62070563 beqz a4,1c0c + sn = lead + 1; + 15e6: 06910793 addi a5,sp,105 + 15ea: fcbe sd a5,120(sp) + while (lead[0]) { + 15ec: 0a0a0863 beqz s4,169c + stbsp__cb_buf_clamp(i, lead[0]); + 15f0: f026 sd s1,32(sp) + 15f2: f436 sd a3,40(sp) + 15f4: 854a mv a0,s2 + 15f6: 86d2 mv a3,s4 + 15f8: 84ce mv s1,s3 + stbsp__chk_cb_buf(1); + 15fa: 1fe00b93 li s7,510 + stbsp__cb_buf_clamp(i, lead[0]); + 15fe: 89be mv s3,a5 + 1600: 20000b13 li s6,512 + 1604: 87a2 mv a5,s0 + 1606: e846 sd a7,16(sp) + 1608: 846a mv s0,s10 + 160a: ec7e sd t6,24(sp) + 160c: 8d6e mv s10,s11 + 160e: f872 sd t3,48(sp) + 1610: 8de6 mv s11,s9 + 1612: 8a3a mv s4,a4 + 1614: e496 sd t0,72(sp) + 1616: 891a mv s2,t1 + 1618: 8c9e mv s9,t2 + 161a: 0006871b sext.w a4,a3 + 161e: 2e0482e3 beqz s1,2102 + 1622: 40a7863b subw a2,a5,a0 + 1626: 40cb083b subw a6,s6,a2 + 162a: 85c2 mv a1,a6 + 162c: 01075363 bge a4,a6,1632 + 1630: 85ba mv a1,a4 + lead[0] -= (char)i; + 1632: 9e8d subw a3,a3,a1 + stbsp__cb_buf_clamp(i, lead[0]); + 1634: 0005871b sext.w a4,a1 + lead[0] -= (char)i; + 1638: 06d10423 sb a3,104(sp) + while (i) { + 163c: c70d beqz a4,1666 + 163e: 7866 ld a6,120(sp) + 1640: 02071593 slli a1,a4,0x20 + 1644: 9181 srli a1,a1,0x20 + 1646: 00b78633 add a2,a5,a1 + 164a: 8742 mv a4,a6 + *bf++ = *sn++; + 164c: 00074683 lbu a3,0(a4) + 1650: 0785 addi a5,a5,1 + while (i) { + 1652: 0705 addi a4,a4,1 + *bf++ = *sn++; + 1654: fed78fa3 sb a3,-1(a5) + while (i) { + 1658: fec79ae3 bne a5,a2,164c + 165c: 982e add a6,a6,a1 + 165e: fcc2 sd a6,120(sp) + stbsp__chk_cb_buf(1); + 1660: c899 beqz s1,1676 + 1662: 40a7863b subw a2,a5,a0 + 1666: 00cbd863 bge s7,a2,1676 + 166a: 65a2 ld a1,8(sp) + 166c: 9c31 addw s0,s0,a2 + 166e: 9482 jalr s1 + 1670: 34050ee3 beqz a0,21cc + 1674: 87aa mv a5,a0 + while (lead[0]) { + 1676: 06814683 lbu a3,104(sp) + 167a: f2c5 bnez a3,161a + 167c: 83e6 mv t2,s9 + 167e: 68c2 ld a7,16(sp) + 1680: 8cee mv s9,s11 + 1682: 6fe2 ld t6,24(sp) + 1684: 8dea mv s11,s10 + 1686: 76a2 ld a3,40(sp) + 1688: 8d22 mv s10,s0 + 168a: 7e42 ld t3,48(sp) + 168c: 843e mv s0,a5 + 168e: 62a6 ld t0,72(sp) + 1690: 87ce mv a5,s3 + 1692: 89a6 mv s3,s1 + 1694: 7482 ld s1,32(sp) + 1696: 834a mv t1,s2 + 1698: 8752 mv a4,s4 + 169a: 892a mv s2,a0 + cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; + 169c: 040e7b13 andi s6,t3,64 + c = cs >> 24; + 16a0: 0182d61b srliw a2,t0,0x18 + 16a4: 0182db9b srliw s7,t0,0x18 + cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; + 16a8: 4a01 li s4,0 + 16aa: 000b0e63 beqz s6,16c6 + cs &= 0xffffff; + 16ae: 02829a13 slli s4,t0,0x28 + 16b2: 028a5a13 srli s4,s4,0x28 + cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; + 16b6: 00ea0a3b addw s4,s4,a4 + 16ba: 0016059b addiw a1,a2,1 + 16be: 02ba7a3b remuw s4,s4,a1 + 16c2: 41460a3b subw s4,a2,s4 + while (pr > 0) { + 16c6: 0ce05763 blez a4,1794 + *(stbsp__uint32 *)bf = 0x30303030; + 16ca: 30303837 lui a6,0x30303 + 16ce: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fb7e8> + 16d2: f026 sd s1,32(sp) + 16d4: 854a mv a0,s2 + 16d6: 84da mv s1,s6 + 16d8: 895e mv s2,s7 + 16da: e4d6 sd s5,72(sp) + 16dc: 8b4e mv s6,s3 + 16de: 8aea mv s5,s10 + stbsp__chk_cb_buf(1); + 16e0: 1fe00293 li t0,510 + 16e4: 8d6e mv s10,s11 + *bf++ = stbsp__comma; + 16e6: 00005f17 auipc t5,0x5 + 16ea: 26af0f13 addi t5,t5,618 # 6950 + 16ee: 8de6 mv s11,s9 + *bf++ = '0'; + 16f0: 03000e93 li t4,48 + 16f4: e846 sd a7,16(sp) + 16f6: ec7e sd t6,24(sp) + 16f8: f436 sd a3,40(sp) + 16fa: f872 sd t3,48(sp) + 16fc: e89a sd t1,80(sp) + 16fe: 89ba mv s3,a4 + 1700: ecbe sd a5,88(sp) + 1702: 8bc2 mv s7,a6 + 1704: 8c9e mv s9,t2 + stbsp__cb_buf_clamp(i, pr); + 1706: 240b0ee3 beqz s6,2162 + 170a: 40a407b3 sub a5,s0,a0 + 170e: 40fc063b subw a2,s8,a5 + 1712: 87b2 mv a5,a2 + 1714: 00c9d363 bge s3,a2,171a + 1718: 87ce mv a5,s3 + 171a: 0007859b sext.w a1,a5 + pr -= i; + 171e: 40f989bb subw s3,s3,a5 + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + 1722: 32048c63 beqz s1,1a5a + while (i) { + 1726: 34058a63 beqz a1,1a7a + 172a: 1582 slli a1,a1,0x20 + *bf++ = stbsp__comma; + 172c: 0cdf4603 lbu a2,205(t5) + 1730: 9181 srli a1,a1,0x20 + 1732: 95a2 add a1,a1,s0 + 1734: 0405 addi s0,s0,1 + if ((fl & STBSP__TRIPLET_COMMA) && (cs++ == c)) { + 1736: c481 beqz s1,173e + 1738: 1d4901e3 beq s2,s4,20fa + 173c: 2a05 addiw s4,s4,1 + *bf++ = '0'; + 173e: 03000793 li a5,48 + 1742: fef40fa3 sb a5,-1(s0) + while (i) { + 1746: fe8597e3 bne a1,s0,1734 + stbsp__chk_cb_buf(1); + 174a: 320b0b63 beqz s6,1a80 + 174e: 40a5863b subw a2,a1,a0 + 1752: 32c2d763 bge t0,a2,1a80 + 1756: 65a2 ld a1,8(sp) + 1758: 01560abb addw s5,a2,s5 + 175c: 9b02 jalr s6 + 175e: 3a050ce3 beqz a0,2316 + 1762: 842a mv s0,a0 + 1764: 1fe00293 li t0,510 + 1768: 00005f17 auipc t5,0x5 + 176c: 1e8f0f13 addi t5,t5,488 # 6950 + 1770: 03000e93 li t4,48 + while (pr > 0) { + 1774: f93049e3 bgtz s3,1706 + while (lead[0]) { + 1778: 83e6 mv t2,s9 + 177a: 68c2 ld a7,16(sp) + 177c: 8cee mv s9,s11 + 177e: 6fe2 ld t6,24(sp) + 1780: 8dea mv s11,s10 + 1782: 7482 ld s1,32(sp) + 1784: 8d56 mv s10,s5 + 1786: 76a2 ld a3,40(sp) + 1788: 7e42 ld t3,48(sp) + 178a: 6346 ld t1,80(sp) + 178c: 67e6 ld a5,88(sp) + 178e: 6aa6 ld s5,72(sp) + 1790: 892a mv s2,a0 + 1792: 89da mv s3,s6 + 1794: 06814a03 lbu s4,104(sp) + sn = lead + 1; + 1798: fcbe sd a5,120(sp) + while (lead[0]) { + 179a: 0a0a0263 beqz s4,183e + stbsp__cb_buf_clamp(i, lead[0]); + 179e: ec26 sd s1,24(sp) + 17a0: f036 sd a3,32(sp) + 17a2: 854a mv a0,s2 + 17a4: 86d2 mv a3,s4 + 17a6: 84ce mv s1,s3 + 17a8: 87a2 mv a5,s0 + stbsp__chk_cb_buf(1); + 17aa: 1fe00b93 li s7,510 + stbsp__cb_buf_clamp(i, lead[0]); + 17ae: 846a mv s0,s10 + 17b0: 20000b13 li s6,512 + 17b4: 8d6e mv s10,s11 + 17b6: e846 sd a7,16(sp) + 17b8: 8de6 mv s11,s9 + 17ba: 8a7e mv s4,t6 + 17bc: 8972 mv s2,t3 + 17be: 899a mv s3,t1 + 17c0: 8c9e mv s9,t2 + 17c2: 0006871b sext.w a4,a3 + 17c6: 140482e3 beqz s1,210a + 17ca: 40a7863b subw a2,a5,a0 + 17ce: 40cb083b subw a6,s6,a2 + 17d2: 85c2 mv a1,a6 + 17d4: 01075363 bge a4,a6,17da + 17d8: 85ba mv a1,a4 + lead[0] -= (char)i; + 17da: 9e8d subw a3,a3,a1 + stbsp__cb_buf_clamp(i, lead[0]); + 17dc: 0005871b sext.w a4,a1 + lead[0] -= (char)i; + 17e0: 06d10423 sb a3,104(sp) + while (i) { + 17e4: c70d beqz a4,180e + 17e6: 7866 ld a6,120(sp) + 17e8: 02071593 slli a1,a4,0x20 + 17ec: 9181 srli a1,a1,0x20 + 17ee: 00b78633 add a2,a5,a1 + 17f2: 8742 mv a4,a6 + *bf++ = *sn++; + 17f4: 00074683 lbu a3,0(a4) + 17f8: 0785 addi a5,a5,1 + while (i) { + 17fa: 0705 addi a4,a4,1 + *bf++ = *sn++; + 17fc: fed78fa3 sb a3,-1(a5) + while (i) { + 1800: fec79ae3 bne a5,a2,17f4 + 1804: 982e add a6,a6,a1 + 1806: fcc2 sd a6,120(sp) + stbsp__chk_cb_buf(1); + 1808: c899 beqz s1,181e + 180a: 40a7863b subw a2,a5,a0 + 180e: 00cbd863 bge s7,a2,181e + 1812: 65a2 ld a1,8(sp) + 1814: 9c31 addw s0,s0,a2 + 1816: 9482 jalr s1 + 1818: 1a050ae3 beqz a0,21cc + 181c: 87aa mv a5,a0 + while (lead[0]) { + 181e: 06814683 lbu a3,104(sp) + 1822: f2c5 bnez a3,17c2 + 1824: 834e mv t1,s3 + 1826: 68c2 ld a7,16(sp) + 1828: 89a6 mv s3,s1 + 182a: 7682 ld a3,32(sp) + 182c: 64e2 ld s1,24(sp) + 182e: 8e4a mv t3,s2 + 1830: 83e6 mv t2,s9 + 1832: 8fd2 mv t6,s4 + 1834: 8cee mv s9,s11 + 1836: 892a mv s2,a0 + 1838: 8dea mv s11,s10 + 183a: 8d22 mv s10,s0 + 183c: 843e mv s0,a5 + while (n) { + 183e: c6f9 beqz a3,190c + STBSP__UNALIGNED(while (i >= 4) { + 1840: ec26 sd s1,24(sp) + 1842: 854a mv a0,s2 + 1844: 84d6 mv s1,s5 + 1846: 896a mv s2,s10 + 1848: 87a2 mv a5,s0 + 184a: 8d6e mv s10,s11 + stbsp__chk_cb_buf(1); + 184c: 1fe00b93 li s7,510 + STBSP__UNALIGNED(while (i >= 4) { + 1850: 8de6 mv s11,s9 + stbsp__cb_buf_clamp(i, n); + 1852: 20000b13 li s6,512 + STBSP__UNALIGNED(while (i >= 4) { + 1856: 4a0d li s4,3 + 1858: e87e sd t6,16(sp) + 185a: f072 sd t3,32(sp) + 185c: 8ac6 mv s5,a7 + 185e: f41a sd t1,40(sp) + 1860: 8436 mv s0,a3 + 1862: 8c9e mv s9,t2 + stbsp__cb_buf_clamp(i, n); + 1864: 0004071b sext.w a4,s0 + 1868: 100982e3 beqz s3,216c + 186c: 40a78633 sub a2,a5,a0 + 1870: 40cb05bb subw a1,s6,a2 + 1874: 862e mv a2,a1 + 1876: 00b75363 bge a4,a1,187c + 187a: 863a mv a2,a4 + 187c: 0006071b sext.w a4,a2 + n -= i; + 1880: 9c11 subw s0,s0,a2 + STBSP__UNALIGNED(while (i >= 4) { + 1882: 14ea50e3 bge s4,a4,21c2 + 1886: ffc70f1b addiw t5,a4,-4 + 188a: 002f5e9b srliw t4,t5,0x2 + 188e: 001e8e1b addiw t3,t4,1 + 1892: 0e0a slli t3,t3,0x2 + 1894: 01c785b3 add a1,a5,t3 + 1898: 8626 mv a2,s1 + 189a: 4218 lw a4,0(a2) + 189c: 0791 addi a5,a5,4 + 189e: 0611 addi a2,a2,4 + 18a0: 2701 sext.w a4,a4 + 18a2: fee7ae23 sw a4,-4(a5) + 18a6: feb79ae3 bne a5,a1,189a + 18aa: 002e9e9b slliw t4,t4,0x2 + 18ae: 41df073b subw a4,t5,t4 + while (i) { + 18b2: 94f2 add s1,s1,t3 + 18b4: c31d beqz a4,18da + 18b6: 8626 mv a2,s1 + 18b8: 87ae mv a5,a1 + 18ba: 00e58f3b addw t5,a1,a4 + *bf++ = *s++; + 18be: 00064e83 lbu t4,0(a2) + 18c2: 0785 addi a5,a5,1 + while (i) { + 18c4: 00078e1b sext.w t3,a5 + *bf++ = *s++; + 18c8: ffd78fa3 sb t4,-1(a5) + 18cc: 0605 addi a2,a2,1 + while (i) { + 18ce: ffcf18e3 bne t5,t3,18be + 18d2: 1702 slli a4,a4,0x20 + 18d4: 9301 srli a4,a4,0x20 + 18d6: 95ba add a1,a1,a4 + 18d8: 94ba add s1,s1,a4 + stbsp__chk_cb_buf(1); + 18da: 1a098763 beqz s3,1a88 + 18de: 40a5863b subw a2,a1,a0 + 18e2: 1acbd363 bge s7,a2,1a88 + 18e6: 65a2 ld a1,8(sp) + 18e8: 0126093b addw s2,a2,s2 + 18ec: 9982 jalr s3 + 18ee: 20050be3 beqz a0,2304 + 18f2: 87aa mv a5,a0 + while (n) { + 18f4: f825 bnez s0,1864 + 18f6: 6fc2 ld t6,16(sp) + 18f8: 64e2 ld s1,24(sp) + 18fa: 7e02 ld t3,32(sp) + 18fc: 7322 ld t1,40(sp) + 18fe: 83e6 mv t2,s9 + 1900: 88d6 mv a7,s5 + 1902: 8cee mv s9,s11 + 1904: 843e mv s0,a5 + 1906: 8dea mv s11,s10 + 1908: 8d4a mv s10,s2 + 190a: 892a mv s2,a0 + while (tz) { + 190c: 08088863 beqz a7,199c + *(stbsp__uint32 *)bf = 0x30303030; + 1910: 30303b37 lui s6,0x30303 + *bf++ = '0'; + 1914: 03000a13 li s4,48 + while (i >= 4) { + 1918: 4a8d li s5,3 + stbsp__chk_cb_buf(1); + 191a: 1fe00693 li a3,510 + *(stbsp__uint32 *)bf = 0x30303030; + 191e: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fb7e8> + stbsp__cb_buf_clamp(i, tz); + 1922: 20000b93 li s7,512 + 1926: 040989e3 beqz s3,2178 + 192a: 41240633 sub a2,s0,s2 + 192e: 40cb87bb subw a5,s7,a2 + 1932: 873e mv a4,a5 + 1934: 00f8d363 bge a7,a5,193a + 1938: 8746 mv a4,a7 + 193a: 0007079b sext.w a5,a4 + tz -= i; + 193e: 40e888bb subw a7,a7,a4 + while (i) { + 1942: 08078ee3 beqz a5,21de + if ((((stbsp__uintptr)bf) & 3) == 0) + 1946: 00347713 andi a4,s0,3 + 194a: e719 bnez a4,1958 + 194c: 0390006f j 2184 + 1950: 00347713 andi a4,s0,3 + 1954: 7a070f63 beqz a4,2112 + *bf++ = '0'; + 1958: 01440023 sb s4,0(s0) + --i; + 195c: 37fd addiw a5,a5,-1 + *bf++ = '0'; + 195e: 0405 addi s0,s0,1 + while (i) { + 1960: fbe5 bnez a5,1950 + stbsp__chk_cb_buf(1); + 1962: 02098b63 beqz s3,1998 + 1966: 4124063b subw a2,s0,s2 + 196a: 02c6d763 bge a3,a2,1998 + 196e: 65a2 ld a1,8(sp) + 1970: 854a mv a0,s2 + 1972: f81e sd t2,48(sp) + 1974: f41a sd t1,40(sp) + 1976: f072 sd t3,32(sp) + 1978: ec7e sd t6,24(sp) + 197a: e846 sd a7,16(sp) + 197c: 00cd0d3b addw s10,s10,a2 + 1980: 9982 jalr s3 + 1982: 892a mv s2,a0 + 1984: 1a0502e3 beqz a0,2328 + 1988: 73c2 ld t2,48(sp) + 198a: 7322 ld t1,40(sp) + 198c: 7e02 ld t3,32(sp) + 198e: 6fe2 ld t6,24(sp) + 1990: 68c2 ld a7,16(sp) + 1992: 842a mv s0,a0 + 1994: 1fe00693 li a3,510 + while (tz) { + 1998: f80897e3 bnez a7,1926 + sn = tail + 1; + 199c: 07110793 addi a5,sp,113 + 19a0: fcbe sd a5,120(sp) + while (tail[0]) { + 19a2: 080f8763 beqz t6,1a30 + stbsp__cb_buf_clamp(i, tail[0]); + 19a6: 854a mv a0,s2 + 19a8: 8b6a mv s6,s10 + stbsp__chk_cb_buf(1); + 19aa: 1fe00a93 li s5,510 + stbsp__cb_buf_clamp(i, tail[0]); + 19ae: 8d4e mv s10,s3 + 19b0: 20000a13 li s4,512 + 19b4: 8bf2 mv s7,t3 + 19b6: 891a mv s2,t1 + 19b8: 899e mv s3,t2 + 19ba: 000f879b sext.w a5,t6 + 19be: 7c0d0863 beqz s10,218e + 19c2: 40a4063b subw a2,s0,a0 + 19c6: 40ca06bb subw a3,s4,a2 + 19ca: 8736 mv a4,a3 + 19cc: 00d7d363 bge a5,a3,19d2 + 19d0: 873e mv a4,a5 + tail[0] -= (char)i; + 19d2: 40ef8fbb subw t6,t6,a4 + stbsp__cb_buf_clamp(i, tail[0]); + 19d6: 0007079b sext.w a5,a4 + tail[0] -= (char)i; + 19da: 07f10823 sb t6,112(sp) + while (i) { + 19de: c795 beqz a5,1a0a + 19e0: 75e6 ld a1,120(sp) + 19e2: 02079613 slli a2,a5,0x20 + 19e6: 9201 srli a2,a2,0x20 + 19e8: 00c406b3 add a3,s0,a2 + 19ec: 87ae mv a5,a1 + *bf++ = *sn++; + 19ee: 0007c703 lbu a4,0(a5) + 19f2: 0405 addi s0,s0,1 + while (i) { + 19f4: 0785 addi a5,a5,1 + *bf++ = *sn++; + 19f6: fee40fa3 sb a4,-1(s0) + while (i) { + 19fa: fed41ae3 bne s0,a3,19ee + 19fe: 95b2 add a1,a1,a2 + 1a00: fcae sd a1,120(sp) + stbsp__chk_cb_buf(1); + 1a02: 000d0d63 beqz s10,1a1c + 1a06: 40a4063b subw a2,s0,a0 + 1a0a: 00cad963 bge s5,a2,1a1c + 1a0e: 65a2 ld a1,8(sp) + 1a10: 00cb0b3b addw s6,s6,a2 + 1a14: 9d02 jalr s10 + 1a16: 200509e3 beqz a0,2428 + 1a1a: 842a mv s0,a0 + while (tail[0]) { + 1a1c: 07014f83 lbu t6,112(sp) + 1a20: f80f9de3 bnez t6,19ba + 1a24: 834a mv t1,s2 + 1a26: 83ce mv t2,s3 + 1a28: 8e5e mv t3,s7 + 1a2a: 89ea mv s3,s10 + 1a2c: 892a mv s2,a0 + 1a2e: 8d5a mv s10,s6 + if (fl & STBSP__LEFTJUST) + 1a30: 001e7e13 andi t3,t3,1 + 1a34: 000e0663 beqz t3,1a40 + if (fw > 0) { + 1a38: 00605463 blez t1,1a40 + 1a3c: 0300106f j 2a6c + for (;;) { + 1a40: 6b86 ld s7,64(sp) + 1a42: 2c013a03 ld s4,704(sp) + 1a46: 2b813a83 ld s5,696(sp) + 1a4a: 2b013b03 ld s6,688(sp) + ++f; + 1a4e: 0485 addi s1,s1,1 + for (;;) { + 1a50: b0f1 j 131c + fl |= STBSP__METRIC_SUFFIX; + 1a52: 100e6e13 ori t3,t3,256 + continue; + 1a56: 0685 addi a3,a3,1 + 1a58: bad1 j 142c + while (i) { + 1a5a: 0e0580e3 beqz a1,233a + if ((((stbsp__uintptr)bf) & 3) == 0) + 1a5e: 00347793 andi a5,s0,3 + 1a62: e799 bnez a5,1a70 + 1a64: 0dd0006f j 2340 + 1a68: 00347793 andi a5,s0,3 + 1a6c: 72078463 beqz a5,2194 + *bf++ = '0'; + 1a70: 01d40023 sb t4,0(s0) + --i; + 1a74: 35fd addiw a1,a1,-1 + *bf++ = '0'; + 1a76: 0405 addi s0,s0,1 + while (i) { + 1a78: f9e5 bnez a1,1a68 + while (i) { + 1a7a: 85a2 mv a1,s0 + stbsp__chk_cb_buf(1); + 1a7c: cc0b19e3 bnez s6,174e + 1a80: 842e mv s0,a1 + while (pr > 0) { + 1a82: c93042e3 bgtz s3,1706 + 1a86: b9cd j 1778 + while (i) { + 1a88: 87ae mv a5,a1 + while (n) { + 1a8a: dc041de3 bnez s0,1864 + 1a8e: b5a5 j 18f6 + while ((f[0] >= '0') && (f[0] <= '9')) { + 1a90: fd07871b addiw a4,a5,-48 + 1a94: 0ff77713 zext.b a4,a4 + 1a98: 4625 li a2,9 + ++f; + 1a9a: 0485 addi s1,s1,1 + pr = 0; + 1a9c: 4881 li a7,0 + while ((f[0] >= '0') && (f[0] <= '9')) { + 1a9e: 46a5 li a3,9 + 1aa0: 9ce669e3 bltu a2,a4,1472 + pr = pr * 10 + f[0] - '0'; + 1aa4: 0028971b slliw a4,a7,0x2 + 1aa8: 0117073b addw a4,a4,a7 + 1aac: 0017171b slliw a4,a4,0x1 + f++; + 1ab0: 0485 addi s1,s1,1 + pr = pr * 10 + f[0] - '0'; + 1ab2: 9f3d addw a4,a4,a5 + while ((f[0] >= '0') && (f[0] <= '9')) { + 1ab4: 0004c783 lbu a5,0(s1) + pr = pr * 10 + f[0] - '0'; + 1ab8: fd07089b addiw a7,a4,-48 + while ((f[0] >= '0') && (f[0] <= '9')) { + 1abc: fd07871b addiw a4,a5,-48 + 1ac0: 0ff77713 zext.b a4,a4 + 1ac4: fee6f0e3 bgeu a3,a4,1aa4 + 1ac8: b26d j 1472 + fl |= STBSP__METRIC_1024; + 1aca: 8f5d or a4,a4,a5 + 1acc: 00070e1b sext.w t3,a4 + 1ad0: 0685 addi a3,a3,1 + 1ad2: baa9 j 142c + *bf = 0; + 1ad4: 00040023 sb zero,0(s0) + 1ad8: b209 j 13da + if (f[0] == 'l') { + 1ada: 0014c783 lbu a5,1(s1) + 1ade: 06c00713 li a4,108 + fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); + 1ae2: 020e6e13 ori t3,t3,32 + if (f[0] == 'l') { + 1ae6: 00e78c63 beq a5,a4,1afe + ++f; + 1aea: 0485 addi s1,s1,1 + 1aec: ba65 j 14a4 + if (f[0] == 'h') + 1aee: 0014c783 lbu a5,1(s1) + 1af2: 06800713 li a4,104 + fl |= STBSP__HALFWIDTH; + 1af6: 200e6e13 ori t3,t3,512 + if (f[0] == 'h') + 1afa: fee798e3 bne a5,a4,1aea + if ((f[1] == '6') && (f[2] == '4')) { + 1afe: 0024c783 lbu a5,2(s1) + ++f; + 1b02: 0489 addi s1,s1,2 + 1b04: b245 j 14a4 + s = va_arg(va, char *); + 1b06: 008b8713 addi a4,s7,8 + 1b0a: e0ba sd a4,64(sp) + if (fl & STBSP__INTMAX) { + 1b0c: 020e7693 andi a3,t3,32 + 1b10: 8772 mv a4,t3 + 1b12: 24069ee3 bnez a3,256e + stbsp__int32 i = va_arg(va, stbsp__int32); + 1b16: 000ba683 lw a3,0(s7) + if ((f[0] != 'u') && (i < 0)) { + 1b1a: 07500613 li a2,117 + n64 = (stbsp__uint32)i; + 1b1e: 02069f13 slli t5,a3,0x20 + 1b22: 020f5f13 srli t5,t5,0x20 + if ((f[0] != 'u') && (i < 0)) { + 1b26: 00c78a63 beq a5,a2,1b3a + 1b2a: 0006d863 bgez a3,1b3a + fl |= STBSP__NEGATIVE; + 1b2e: 08076713 ori a4,a4,128 + n64 = (stbsp__uint32)-i; + 1b32: 40d00f3b negw t5,a3 + fl |= STBSP__NEGATIVE; + 1b36: 00070e1b sext.w t3,a4 + if (fl & STBSP__METRIC_SUFFIX) { + 1b3a: 100e7693 andi a3,t3,256 + 1b3e: 5c0683e3 beqz a3,2904 + if (n64 < 1024) + 1b42: 3ff00793 li a5,1023 + 1b46: 01e7e463 bltu a5,t5,1b4e + 1b4a: 0ea0106f j 2c34 + else if (pr == -1) + 1b4e: 57fd li a5,-1 + 1b50: 30f887e3 beq a7,a5,265e + fv = (double)(stbsp__int64)n64; + 1b54: d22f7553 fcvt.d.l fa0,t5 + if (fl & STBSP__METRIC_1024) + 1b58: 034e1793 slli a5,t3,0x34 + 1b5c: 0007c463 bltz a5,1b64 + 1b60: 2300106f j 2d90 + divisor = 1024.0; + 1b64: 00004797 auipc a5,0x4 + 1b68: ce47b787 fld fa5,-796(a5) # 5848 + if ((fv < divisor) && (fv > -divisor)) + 1b6c: 22f79753 fneg.d fa4,fa5 + fl += 0x1000000; + 1b70: 010006b7 lui a3,0x1000 + while (fl < 0x4000000) { + 1b74: 04000737 lui a4,0x4000 + if ((fv < divisor) && (fv > -divisor)) + 1b78: a2f517d3 flt.d a5,fa0,fa5 + 1b7c: c789 beqz a5,1b86 + 1b7e: a2a717d3 flt.d a5,fa4,fa0 + 1b82: 3e079863 bnez a5,1f72 + fl += 0x1000000; + 1b86: 01c68e3b addw t3,a3,t3 + fv /= divisor; + 1b8a: 1af57553 fdiv.d fa0,fa0,fa5 + while (fl < 0x4000000) { + 1b8e: feee65e3 bltu t3,a4,1b78 + 1b92: a6c5 j 1f72 + h = (f[0] == 'X') ? hexu : hex; + 1b94: 05800693 li a3,88 + if (fl & STBSP__INTMAX) { + 1b98: 020e7713 andi a4,t3,32 + h = (f[0] == 'X') ? hexu : hex; + 1b9c: 00005817 auipc a6,0x5 + 1ba0: e9c80813 addi a6,a6,-356 # 6a38 + 1ba4: 00d79663 bne a5,a3,1bb0 + 1ba8: 00005817 auipc a6,0x5 + 1bac: e7880813 addi a6,a6,-392 # 6a20 + l = (4 << 4) | (4 << 8); + 1bb0: 44000793 li a5,1088 + 1bb4: d0be sw a5,96(sp) + if (fl & STBSP__LEADING_0X) { + 1bb6: 008e7793 andi a5,t3,8 + 1bba: 7a079263 bnez a5,235e + lead[0] = 0; + 1bbe: 06010423 sb zero,104(sp) + s = va_arg(va, char *); + 1bc2: 008b8793 addi a5,s7,8 + 1bc6: e0be sd a5,64(sp) + if (fl & STBSP__INTMAX) + 1bc8: 72070b63 beqz a4,22fe + n64 = va_arg(va, stbsp__uint64); + 1bcc: 000bb683 ld a3,0(s7) + dp = 0; + 1bd0: d282 sw zero,100(sp) + tail[0] = 0; + 1bd2: 06010823 sb zero,112(sp) + if ((fl & STBSP__LEFTJUST) == 0) { + 1bd6: 001e7513 andi a0,t3,1 + if (n64 == 0) { + 1bda: 380694e3 bnez a3,2762 + lead[0] = 0; + 1bde: 06010423 sb zero,104(sp) + if (pr == 0) { + 1be2: 78089a63 bnez a7,2376 + if (fw < (stbsp__int32)n) + 1be6: fffb4313 not t1,s6 + 1bea: 43f35313 srai t1,t1,0x3f + l = 0; + 1bee: d082 sw zero,96(sp) + if (fw < (stbsp__int32)n) + 1bf0: 01637333 and t1,t1,s6 + goto scopy; + 1bf4: 4701 li a4,0 + 1bf6: 4f81 li t6,0 + 1bf8: 4a01 li s4,0 + cs = 0; + 1bfa: 4281 li t0,0 + s = num + STBSP__NUMSZ; + 1bfc: 28010a93 addi s5,sp,640 + if ((fl & STBSP__LEFTJUST) == 0) { + 1c00: 9c0506e3 beqz a0,15cc + if (fw + pr) { + 1c04: 00e307bb addw a5,t1,a4 + 1c08: 9c079fe3 bnez a5,15e6 + 1c0c: 06910793 addi a5,sp,105 + 1c10: b661 j 1798 + h = (f[0] == 'E') ? hexu : hex; + 1c12: 04500713 li a4,69 + 1c16: 00005317 auipc t1,0x5 + 1c1a: e2230313 addi t1,t1,-478 # 6a38 + 1c1e: 1ce78ae3 beq a5,a4,25f2 + fv = va_arg(va, double); + 1c22: 008b8713 addi a4,s7,8 + if (pr == -1) + 1c26: 57fd li a5,-1 + fv = va_arg(va, double); + 1c28: e0ba sd a4,64(sp) + 1c2a: 000bb507 fld fa0,0(s7) + if (pr == -1) + 1c2e: 1af88ce3 beq a7,a5,25e6 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) + 1c32: 80000737 lui a4,0x80000 + 1c36: 00e8e733 or a4,a7,a4 + 1c3a: 2701 sext.w a4,a4 + 1c3c: 10d4 addi a3,sp,100 + 1c3e: 0110 addi a2,sp,128 + 1c40: 108c addi a1,sp,96 + 1c42: 18a8 addi a0,sp,120 + 1c44: f41e sd t2,40(sp) + 1c46: f01a sd t1,32(sp) + 1c48: ec72 sd t3,24(sp) + 1c4a: e846 sd a7,16(sp) + 1c4c: d8efe0ef jal 1da + 1c50: 68c2 ld a7,16(sp) + 1c52: 6e62 ld t3,24(sp) + 1c54: 7302 ld t1,32(sp) + 1c56: 73a2 ld t2,40(sp) + if (dp == STBSP__SPECIAL) { + 1c58: 5796 lw a5,100(sp) + s = (char *)sn; + 1c5a: 7ae6 ld s5,120(sp) + if ((l - 1) > (stbsp__uint32)pr) + 1c5c: 5686 lw a3,96(sp) + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) + 1c5e: 3c0511e3 bnez a0,2820 + tail[0] = 0; + 1c62: 06010823 sb zero,112(sp) + sign[0] = 0; + 1c66: 06010423 sb zero,104(sp) + } else if (fl & STBSP__LEADINGSPACE) { + 1c6a: 004e7713 andi a4,t3,4 + 1c6e: 6a070ee3 beqz a4,2b2a + sign[0] = 1; + 1c72: 6709 lui a4,0x2 + 1c74: 0705 addi a4,a4,1 # 2001 + 1c76: 06e11423 sh a4,104(sp) + if (dp == STBSP__SPECIAL) { + 1c7a: 671d lui a4,0x7 + 1c7c: 1ee794e3 bne a5,a4,2664 + if (pr < (stbsp__int32)l) + 1c80: 0006879b sext.w a5,a3 + n = pr + lead[0] + tail[0] + tz; + 1c84: 06814a03 lbu s4,104(sp) + if (pr < (stbsp__int32)l) + 1c88: fff7c793 not a5,a5 + n = pr + lead[0] + tail[0] + tz; + 1c8c: 07014f83 lbu t6,112(sp) + if (pr < (stbsp__int32)l) + 1c90: 97fd srai a5,a5,0x3f + 1c92: 8ff5 and a5,a5,a3 + n = pr + lead[0] + tail[0] + tz; + 1c94: 00fa073b addw a4,s4,a5 + 1c98: 01f7063b addw a2,a4,t6 + 1c9c: 8732 mv a4,a2 + if ((fl & STBSP__LEFTJUST) == 0) { + 1c9e: 001e7513 andi a0,t3,1 + if (pr < (stbsp__int32)l) + 1ca2: 2781 sext.w a5,a5 + if (fw < (stbsp__int32)n) + 1ca4: 835a mv t1,s6 + 1ca6: 00cb5363 bge s6,a2,1cac + 1caa: 8332 mv t1,a2 + fw -= n; + 1cac: 40e3033b subw t1,t1,a4 + cs = 0; + 1cb0: 4281 li t0,0 + pr -= l; + 1cb2: 40d7873b subw a4,a5,a3 + tz = 0; + 1cb6: 4881 li a7,0 + goto scopy; + 1cb8: b7a1 j 1c00 + h = (f[0] == 'G') ? hexu : hex; + 1cba: 04700713 li a4,71 + 1cbe: 00005317 auipc t1,0x5 + 1cc2: d7a30313 addi t1,t1,-646 # 6a38 + 1cc6: 14e783e3 beq a5,a4,260c + fv = va_arg(va, double); + 1cca: 008b8713 addi a4,s7,8 + if (pr == -1) + 1cce: 57fd li a5,-1 + fv = va_arg(va, double); + 1cd0: e0ba sd a4,64(sp) + 1cd2: 000bb507 fld fa0,0(s7) + if (pr == -1) + 1cd6: 12f884e3 beq a7,a5,25fe + else if (pr == 0) + 1cda: 6e0887e3 beqz a7,2bc8 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) + 1cde: fff8871b addiw a4,a7,-1 + 1ce2: 800007b7 lui a5,0x80000 + 1ce6: 8f5d or a4,a4,a5 + 1ce8: 2701 sext.w a4,a4 + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + 1cea: 00088a9b sext.w s5,a7 + 1cee: 8a46 mv s4,a7 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) + 1cf0: 10d4 addi a3,sp,100 + 1cf2: 0110 addi a2,sp,128 + 1cf4: 108c addi a1,sp,96 + 1cf6: 18a8 addi a0,sp,120 + 1cf8: f01e sd t2,32(sp) + 1cfa: ec1a sd t1,24(sp) + 1cfc: e872 sd t3,16(sp) + 1cfe: cdcfe0ef jal 1da + 1d02: 6e42 ld t3,16(sp) + 1d04: 6362 ld t1,24(sp) + 1d06: 7382 ld t2,32(sp) + 1d08: 4281 li t0,0 + 1d0a: c509 beqz a0,1d14 + fl |= STBSP__NEGATIVE; + 1d0c: 080e6e13 ori t3,t3,128 + 1d10: 08000293 li t0,128 + if (l > (stbsp__uint32)pr) + 1d14: 5806 lw a6,96(sp) + 1d16: 010af463 bgeu s5,a6,1d1e + l = pr; + 1d1a: d0d6 sw s5,96(sp) + 1d1c: 8856 mv a6,s5 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 1d1e: 4705 li a4,1 + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + 1d20: 5796 lw a5,100(sp) + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 1d22: 01076463 bltu a4,a6,1d2a + 1d26: 1800106f j 2ea6 + 1d2a: 7be6 ld s7,120(sp) + 1d2c: fff8071b addiw a4,a6,-1 + 1d30: 1702 slli a4,a4,0x20 + 1d32: 9301 srli a4,a4,0x20 + 1d34: 001a0e9b addiw t4,s4,1 + 1d38: 75e2 ld a1,56(sp) + 1d3a: 8ade mv s5,s7 + 1d3c: 975e add a4,a4,s7 + 1d3e: 410e8ebb subw t4,t4,a6 + 1d42: 88d2 mv a7,s4 + 1d44: 86c2 mv a3,a6 + 1d46: 4f01 li t5,0 + 1d48: 03000f93 li t6,48 + 1d4c: e842 sd a6,16(sp) + 1d4e: a809 j 1d60 + --pr; + 1d50: 38fd addiw a7,a7,-1 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 1d52: 211e80e3 beq t4,a7,2752 + 1d56: 177d addi a4,a4,-1 # 6fff <_stdout+0x18f> + 1d58: 4f05 li t5,1 + 1d5a: 1e088ce3 beqz a7,2752 + --l; + 1d5e: 85b6 mv a1,a3 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 1d60: 00074803 lbu a6,0(a4) + 1d64: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff87b7> + 1d68: 0006851b sext.w a0,a3 + 1d6c: 2581 sext.w a1,a1 + 1d6e: 0006069b sext.w a3,a2 + 1d72: fdf80fe3 beq a6,t6,1d50 + 1d76: 6842 ld a6,16(sp) + 1d78: fc2e sd a1,56(sp) + 1d7a: 86c2 mv a3,a6 + 1d7c: 000f0463 beqz t5,1d84 + 1d80: d0ae sw a1,96(sp) + 1d82: 86ae mv a3,a1 + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + 1d84: 5775 li a4,-3 + 1d86: 08e7cee3 blt a5,a4,2622 + 1d8a: 08fa4be3 blt s4,a5,2620 + pr = (dp < (stbsp__int32)l) ? l - dp : 0; + 1d8e: 0005071b sext.w a4,a0 + if (dp > 0) { + 1d92: 7ef057e3 blez a5,2d80 + pr = (dp < (stbsp__int32)l) ? l - dp : 0; + 1d96: 4881 li a7,0 + 1d98: 00e7d463 bge a5,a4,1da0 + 1d9c: 40f508bb subw a7,a0,a5 + tail[0] = 0; + 1da0: 06010823 sb zero,112(sp) + if (fl & STBSP__NEGATIVE) { + 1da4: 20029463 bnez t0,1fac + } else if (fl & STBSP__LEADINGSPACE) { + 1da8: 004e7713 andi a4,t3,4 + 1dac: 000715e3 bnez a4,25b6 + } else if (fl & STBSP__LEADINGPLUS) { + 1db0: 002e7713 andi a4,t3,2 + 1db4: 660719e3 bnez a4,2c26 + sign[0] = 0; + 1db8: 06010423 sb zero,104(sp) + 1dbc: aaed j 1fb6 + h = (f[0] == 'A') ? hexu : hex; + 1dbe: 04100713 li a4,65 + 1dc2: 00005597 auipc a1,0x5 + 1dc6: c7658593 addi a1,a1,-906 # 6a38 + 1dca: 00e783e3 beq a5,a4,25d0 + fv = va_arg(va, double); + 1dce: 008b8693 addi a3,s7,8 + if (pr == -1) + 1dd2: 577d li a4,-1 + fv = va_arg(va, double); + 1dd4: e0b6 sd a3,64(sp) + 1dd6: 000bb783 ld a5,0(s7) + if (pr == -1) + 1dda: 7ee88963 beq a7,a4,25cc + d = value; + + STBSP__COPYFP(b, d); + + *bits = b & ((((stbsp__uint64)1) << 52) - 1); + *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); + 1dde: 4347d613 srai a2,a5,0x34 + *bits = b & ((((stbsp__uint64)1) << 52) - 1); + 1de2: 00c79513 slli a0,a5,0xc + *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); + 1de6: 7ff67613 andi a2,a2,2047 + *bits = b & ((((stbsp__uint64)1) << 52) - 1); + 1dea: 8131 srli a0,a0,0xc + *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); + 1dec: c016061b addiw a2,a2,-1023 + if (stbsp__real_to_parts((stbsp__int64 *)&n64, &dp, fv)) + 1df0: 7a07c863 bltz a5,25a0 + } else if (fl & STBSP__LEADINGSPACE) { + 1df4: 004e7793 andi a5,t3,4 + 1df8: 60078ee3 beqz a5,2c14 + 1dfc: 6789 lui a5,0x2 + 1dfe: 2785 addiw a5,a5,1 # 2001 + sign[0] = 1; + 1e00: 06f11423 sh a5,104(sp) + 1e04: 468d li a3,3 + 1e06: 4a0d li s4,3 + 1e08: 4809 li a6,2 + n64 |= (((stbsp__uint64)1) << 52); + 1e0a: 4705 li a4,1 + 1e0c: 1752 slli a4,a4,0x34 + if (dp == -1023) + 1e0e: c0100793 li a5,-1023 + n64 |= (((stbsp__uint64)1) << 52); + 1e12: 8f49 or a4,a4,a0 + if (dp == -1023) + 1e14: 5cf600e3 beq a2,a5,2bd4 + if (pr < 15) + 1e18: 4539 li a0,14 + n64 <<= (64 - 56); + 1e1a: 00871793 slli a5,a4,0x8 + if (pr < 15) + 1e1e: 251546e3 blt a0,a7,286a + n64 += ((((stbsp__uint64)8) << 56) >> (pr * 4)); + 1e22: 4705 li a4,1 + 1e24: 0028951b slliw a0,a7,0x2 + 1e28: 176e slli a4,a4,0x3b + 1e2a: 00a75733 srl a4,a4,a0 + 1e2e: 973e add a4,a4,a5 + *s++ = h[(n64 >> 60) & 15]; + 1e30: 03c75793 srli a5,a4,0x3c + 1e34: 97ae add a5,a5,a1 + 1e36: 0007c503 lbu a0,0(a5) + lead[1 + lead[0]] = '0'; + 1e3a: 22080793 addi a5,a6,544 + 1e3e: 06010813 addi a6,sp,96 + 1e42: 97c2 add a5,a5,a6 + 1e44: 03000813 li a6,48 + 1e48: df078423 sb a6,-536(a5) + lead[2 + lead[0]] = 'x'; + 1e4c: 22068793 addi a5,a3,544 + 1e50: 1094 addi a3,sp,96 + 1e52: 96be add a3,a3,a5 + 1e54: 07800793 li a5,120 + 1e58: def68423 sb a5,-536(a3) + lead[0] += 2; + 1e5c: 07410423 sb s4,104(sp) + *s++ = h[(n64 >> 60) & 15]; + 1e60: 0ca10023 sb a0,192(sp) + if (pr) + 1e64: 740893e3 bnez a7,2daa + sn = s; + 1e68: 0c110793 addi a5,sp,193 + 1e6c: fcbe sd a5,120(sp) + 1e6e: 4701 li a4,0 + 1e70: 4501 li a0,0 + 1e72: 4305 li t1,1 + 1e74: 4685 li a3,1 + tail[1] = h[17]; + 1e76: 0115c583 lbu a1,17(a1) + tail[2] = '+'; + 1e7a: 02b00793 li a5,43 + tail[1] = h[17]; + 1e7e: 06b108a3 sb a1,113(sp) + if (dp < 0) { + 1e82: 00065663 bgez a2,1e8e + dp = -dp; + 1e86: 40c0063b negw a2,a2 + tail[2] = '-'; + 1e8a: 02d00793 li a5,45 + tail[n] = '0' + dp % 10; + 1e8e: 4829 li a6,10 + 1e90: 030665bb remw a1,a2,a6 + 1e94: 06f10923 sb a5,114(sp) + n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); + 1e98: 3e700e93 li t4,999 + tail[n] = '0' + dp % 10; + 1e9c: 0305859b addiw a1,a1,48 + 1ea0: 0ff5f593 zext.b a1,a1 + n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); + 1ea4: 18cec3e3 blt t4,a2,282a + 1ea8: 06300e93 li t4,99 + 1eac: 54cec1e3 blt t4,a2,2bee + 1eb0: 4ea5 li t4,9 + 1eb2: 72ced6e3 bge t4,a2,2dde + dp /= 10; + 1eb6: 030647bb divw a5,a2,a6 + tail[0] = (char)n; + 1eba: 4611 li a2,4 + 1ebc: 06c10823 sb a2,112(sp) + tail[n] = '0' + dp % 10; + 1ec0: 06b10a23 sb a1,116(sp) + 1ec4: 4811 li a6,4 + 1ec6: 4f91 li t6,4 + 1ec8: 0307879b addiw a5,a5,48 + 1ecc: 06f109a3 sb a5,115(sp) + n = pr + lead[0] + tail[0] + tz; + 1ed0: 006a07bb addw a5,s4,t1 + 1ed4: 010787bb addw a5,a5,a6 + 1ed8: 0117863b addw a2,a5,a7 + dp = (int)(s - sn); + 1edc: d2aa sw a0,100(sp) + l = (int)(s - (num + 64)); + 1ede: d0b6 sw a3,96(sp) + n = pr + lead[0] + tail[0] + tz; + 1ee0: 87b2 mv a5,a2 + if ((fl & STBSP__LEFTJUST) == 0) { + 1ee2: 001e7513 andi a0,t3,1 + if (fw < (stbsp__int32)n) + 1ee6: 835a mv t1,s6 + 1ee8: 00cb5363 bge s6,a2,1eee + 1eec: 8332 mv t1,a2 + cs = 1 + (3 << 24); + 1eee: 030002b7 lui t0,0x3000 + fw -= n; + 1ef2: 40f3033b subw t1,t1,a5 + cs = 1 + (3 << 24); + 1ef6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff87b9> + s = num + 64; + 1ef8: 0c010a93 addi s5,sp,192 + goto scopy; + 1efc: b311 j 1c00 + h = (f[0] == 'B') ? hexu : hex; + 1efe: 04200713 li a4,66 + 1f02: 00005817 auipc a6,0x5 + 1f06: b3680813 addi a6,a6,-1226 # 6a38 + 1f0a: 6ce78963 beq a5,a4,25dc + if (fl & STBSP__LEADING_0X) { + 1f0e: 008e7793 andi a5,t3,8 + 1f12: 66079e63 bnez a5,258e + lead[0] = 0; + 1f16: 06010423 sb zero,104(sp) + l = (8 << 4) | (1 << 8); + 1f1a: 18000793 li a5,384 + 1f1e: d0be sw a5,96(sp) + if (fl & STBSP__INTMAX) { + 1f20: 020e7713 andi a4,t3,32 + goto radixnum; + 1f24: b979 j 1bc2 + *s = (char)va_arg(va, int); + 1f26: 000ba783 lw a5,0(s7) + l = 1; + 1f2a: 4705 li a4,1 + 1f2c: d0ba sw a4,96(sp) + *s = (char)va_arg(va, int); + 1f2e: 26f10fa3 sb a5,639(sp) + 1f32: 008b8793 addi a5,s7,8 + lead[0] = 0; + 1f36: 06010423 sb zero,104(sp) + tail[0] = 0; + 1f3a: 06010823 sb zero,112(sp) + dp = 0; + 1f3e: d282 sw zero,100(sp) + *s = (char)va_arg(va, int); + 1f40: e0be sd a5,64(sp) + if ((fl & STBSP__LEFTJUST) == 0) { + 1f42: 001e7513 andi a0,t3,1 + if (fw < (stbsp__int32)n) + 1f46: 835a mv t1,s6 + 1f48: 69605063 blez s6,25c8 + fw -= n; + 1f4c: 337d addiw t1,t1,-1 + goto scopy; + 1f4e: 4701 li a4,0 + 1f50: 4f81 li t6,0 + 1f52: 4685 li a3,1 + 1f54: 4a01 li s4,0 + cs = 0; + 1f56: 4281 li t0,0 + s = num + STBSP__NUMSZ - 1; + 1f58: 27f10a93 addi s5,sp,639 + tz = 0; + 1f5c: 4881 li a7,0 + goto scopy; + 1f5e: b14d j 1c00 + fv = va_arg(va, double); + 1f60: 008b8713 addi a4,s7,8 + if (fl & STBSP__METRIC_SUFFIX) { + 1f64: 100e7793 andi a5,t3,256 + fv = va_arg(va, double); + 1f68: e0ba sd a4,64(sp) + 1f6a: 000bb507 fld fa0,0(s7) + if (fl & STBSP__METRIC_SUFFIX) { + 1f6e: be0795e3 bnez a5,1b58 + if (pr == -1) + 1f72: 57fd li a5,-1 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) + 1f74: 0008871b sext.w a4,a7 + if (pr == -1) + 1f78: 00f89463 bne a7,a5,1f80 + 1f7c: 4719 li a4,6 + pr = 6; // default is 6 + 1f7e: 4899 li a7,6 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) + 1f80: 10d4 addi a3,sp,100 + 1f82: 0110 addi a2,sp,128 + 1f84: 108c addi a1,sp,96 + 1f86: 18a8 addi a0,sp,120 + 1f88: f01e sd t2,32(sp) + 1f8a: ec72 sd t3,24(sp) + 1f8c: e846 sd a7,16(sp) + 1f8e: a4cfe0ef jal 1da + 1f92: 6e62 ld t3,24(sp) + 1f94: 68c2 ld a7,16(sp) + 1f96: 7382 ld t2,32(sp) + if (dp == STBSP__SPECIAL) { + 1f98: 5796 lw a5,100(sp) + if ((stbsp__int32)(l + n) > pr) + 1f9a: 5686 lw a3,96(sp) + if (fl & STBSP__NEGATIVE) { + 1f9c: 080e7293 andi t0,t3,128 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) + 1fa0: e00500e3 beqz a0,1da0 + fl |= STBSP__NEGATIVE; + 1fa4: 080e6e13 ori t3,t3,128 + tail[0] = 0; + 1fa8: 06010823 sb zero,112(sp) + sign[0] = 1; + 1fac: 670d lui a4,0x3 + 1fae: d0170713 addi a4,a4,-767 # 2d01 + 1fb2: 06e11423 sh a4,104(sp) + if (dp == STBSP__SPECIAL) { + 1fb6: 671d lui a4,0x7 + 1fb8: 7ce78963 beq a5,a4,278a + if (dp <= 0) { + 1fbc: 46f05fe3 blez a5,2c3a + cs = (fl & STBSP__TRIPLET_COMMA) ? ((600 - (stbsp__uint32)dp) % 3) : 0; + 1fc0: 040e7313 andi t1,t3,64 + 1fc4: 00078e9b sext.w t4,a5 + 1fc8: 4581 li a1,0 + 1fca: 00030963 beqz t1,1fdc + 1fce: 25800593 li a1,600 + 1fd2: 41d585bb subw a1,a1,t4 + 1fd6: 470d li a4,3 + 1fd8: 02e5f5bb remuw a1,a1,a4 + *s++ = stbsp__comma; + 1fdc: 00005a17 auipc s4,0x5 + 1fe0: 974a0a13 addi s4,s4,-1676 # 6950 + s = (char *)sn; + 1fe4: 7f66 ld t5,120(sp) + *s++ = stbsp__comma; + 1fe6: 0cda4283 lbu t0,205(s4) + s = num + 64; + 1fea: 0c010a93 addi s5,sp,192 + if ((stbsp__uint32)dp >= l) { + 1fee: 44defb63 bgeu t4,a3,2444 + n = 0; + 1ff2: 4501 li a0,0 + s = num + 64; + 1ff4: 8756 mv a4,s5 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 1ff6: 4b91 li s7,4 + 1ff8: a015 j 201c + 1ffa: 8642 mv a2,a6 + 1ffc: 883a mv a6,a4 + 1ffe: 8732 mv a4,a2 + *s++ = sn[n]; + 2000: 02051613 slli a2,a0,0x20 + 2004: 9201 srli a2,a2,0x20 + 2006: 967a add a2,a2,t5 + 2008: 00064f83 lbu t6,0(a2) + ++n; + 200c: 0015061b addiw a2,a0,1 + 2010: 0006051b sext.w a0,a2 + *s++ = sn[n]; + 2014: fff70fa3 sb t6,-1(a4) # 6fff <_stdout+0x18f> + if (n >= (stbsp__uint32)dp) + 2018: 7bd57563 bgeu a0,t4,27c2 + *s++ = stbsp__comma; + 201c: 00170813 addi a6,a4,1 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 2020: fc030de3 beqz t1,1ffa + 2024: 2585 addiw a1,a1,1 + 2026: fd759ae3 bne a1,s7,1ffa + *s++ = stbsp__comma; + 202a: fe580fa3 sb t0,-1(a6) + 202e: 0709 addi a4,a4,2 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 2030: 4585 li a1,1 + 2032: b7f9 j 2000 + *d = tlen + (int)(bf - buf); + 2034: 000bb703 ld a4,0(s7) + 2038: 412407b3 sub a5,s0,s2 + 203c: 01a787bb addw a5,a5,s10 + int *d = va_arg(va, int *); + 2040: 008b8693 addi a3,s7,8 + 2044: e0b6 sd a3,64(sp) + *d = tlen + (int)(bf - buf); + 2046: c31c sw a5,0(a4) + } break; + 2048: bae5 j 1a40 + if (fl & STBSP__LEADING_0X) { + 204a: 008e7793 andi a5,t3,8 + 204e: 50079b63 bnez a5,2564 + lead[0] = 0; + 2052: 06010423 sb zero,104(sp) + l = (3 << 4) | (3 << 8); + 2056: 33000793 li a5,816 + 205a: d0be sw a5,96(sp) + if (fl & STBSP__INTMAX) { + 205c: 020e7713 andi a4,t3,32 + h = hexu; + 2060: 00005817 auipc a6,0x5 + 2064: 9c080813 addi a6,a6,-1600 # 6a20 + goto radixnum; + 2068: bea9 j 1bc2 + fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros + 206a: fefe7e13 andi t3,t3,-17 + 206e: 020e6e13 ori t3,t3,32 + 2072: 02000713 li a4,32 + pr = sizeof(void *) * 2; + 2076: 48c1 li a7,16 + h = (f[0] == 'X') ? hexu : hex; + 2078: 00005817 auipc a6,0x5 + 207c: 9c080813 addi a6,a6,-1600 # 6a38 + 2080: be05 j 1bb0 + s = va_arg(va, char *); + 2082: 000bba83 ld s5,0(s7) + 2086: 008b8793 addi a5,s7,8 + 208a: e0be sd a5,64(sp) + if (s == 0) + 208c: 360a8ee3 beqz s5,2c08 + if (((stbsp__uintptr)sn & 3) == 0) + 2090: 003af793 andi a5,s5,3 + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + 2094: 5208c663 bltz a7,25c0 + 2098: 0008869b sext.w a3,a7 + if (((stbsp__uintptr)sn & 3) == 0) + 209c: 2a0782e3 beqz a5,2b40 + if (!limit || *sn == 0) + 20a0: 5a068b63 beqz a3,2656 + if (((stbsp__uintptr)sn & 3) == 0) + 20a4: 87d6 mv a5,s5 + 20a6: a801 j 20b6 + ++sn; + 20a8: 0785 addi a5,a5,1 + if (((stbsp__uintptr)sn & 3) == 0) + 20aa: 0037f713 andi a4,a5,3 + --limit; + 20ae: 36fd addiw a3,a3,-1 + if (((stbsp__uintptr)sn & 3) == 0) + 20b0: 280709e3 beqz a4,2b42 + if (!limit || *sn == 0) + 20b4: c681 beqz a3,20bc + 20b6: 0007c703 lbu a4,0(a5) + 20ba: f77d bnez a4,20a8 + return (stbsp__uint32)(sn - s); + 20bc: 415787b3 sub a5,a5,s5 + 20c0: 0007869b sext.w a3,a5 + if (pr < (stbsp__int32)l) + 20c4: fff6c713 not a4,a3 + 20c8: 977d srai a4,a4,0x3f + 20ca: 8f7d and a4,a4,a5 + 20cc: 0007079b sext.w a5,a4 + n = pr + lead[0] + tail[0] + tz; + 20d0: 863e mv a2,a5 + pr -= l; + 20d2: 9f15 subw a4,a4,a3 + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + 20d4: d0b6 sw a3,96(sp) + lead[0] = 0; + 20d6: 06010423 sb zero,104(sp) + tail[0] = 0; + 20da: 06010823 sb zero,112(sp) + dp = 0; + 20de: d282 sw zero,100(sp) + if ((fl & STBSP__LEFTJUST) == 0) { + 20e0: 001e7513 andi a0,t3,1 + if (fw < (stbsp__int32)n) + 20e4: 835a mv t1,s6 + 20e6: 00fb5363 bge s6,a5,20ec + 20ea: 833e mv t1,a5 + fw -= n; + 20ec: 40c3033b subw t1,t1,a2 + goto scopy; + 20f0: 4f81 li t6,0 + 20f2: 4a01 li s4,0 + cs = 0; + 20f4: 4281 li t0,0 + tz = 0; + 20f6: 4881 li a7,0 + goto scopy; + 20f8: b621 j 1c00 + *bf++ = stbsp__comma; + 20fa: 87b2 mv a5,a2 + cs = 0; + 20fc: 4a01 li s4,0 + 20fe: e44ff06f j 1742 + lead[0] -= (char)i; + 2102: 06010423 sb zero,104(sp) + while (i) { + 2106: d38ff06f j 163e + lead[0] -= (char)i; + 210a: 06010423 sb zero,104(sp) + while (i) { + 210e: ed8ff06f j 17e6 + while (i >= 4) { + 2112: 06fadc63 bge s5,a5,218a + tz -= i; + 2116: 8722 mv a4,s0 + 2118: 0007851b sext.w a0,a5 + while (i >= 4) { + 211c: 008785bb addw a1,a5,s0 + *(stbsp__uint32 *)bf = 0x30303030; + 2120: 01672023 sw s6,0(a4) + bf += 4; + 2124: 0711 addi a4,a4,4 + while (i >= 4) { + 2126: 40e5863b subw a2,a1,a4 + 212a: fecacbe3 blt s5,a2,2120 + 212e: ffc5061b addiw a2,a0,-4 + 2132: 0026561b srliw a2,a2,0x2 + 2136: 0016071b addiw a4,a2,1 + 213a: 37f1 addiw a5,a5,-4 + 213c: 0026161b slliw a2,a2,0x2 + 2140: 070a slli a4,a4,0x2 + 2142: 9722 add a4,a4,s0 + 2144: 9f91 subw a5,a5,a2 + while (i) { + 2146: 843a mv s0,a4 + 2148: 80078de3 beqz a5,1962 + 214c: 1782 slli a5,a5,0x20 + 214e: 9381 srli a5,a5,0x20 + 2150: 00f70433 add s0,a4,a5 + *bf++ = '0'; + 2154: 0705 addi a4,a4,1 + 2156: ff470fa3 sb s4,-1(a4) + while (i) { + 215a: fe871de3 bne a4,s0,2154 + 215e: 805ff06f j 1962 + stbsp__cb_buf_clamp(i, pr); + 2162: 85ce mv a1,s3 + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + 2164: 4981 li s3,0 + 2166: dc049263 bnez s1,172a + 216a: b8d5 j 1a5e + STBSP__UNALIGNED(while (i >= 4) { + 216c: 4401 li s0,0 + 216e: 85be mv a1,a5 + 2170: f0ea4b63 blt s4,a4,1886 + 2174: f42ff06f j 18b6 + if ((((stbsp__uintptr)bf) & 3) == 0) + 2178: 00347713 andi a4,s0,3 + stbsp__cb_buf_clamp(i, tz); + 217c: 87c6 mv a5,a7 + tz -= i; + 217e: 4881 li a7,0 + if ((((stbsp__uintptr)bf) & 3) == 0) + 2180: fc071c63 bnez a4,1958 + while (i >= 4) { + 2184: 470d li a4,3 + 2186: f8f748e3 blt a4,a5,2116 + 218a: 8722 mv a4,s0 + 218c: b7c1 j 214c + tail[0] -= (char)i; + 218e: 06010823 sb zero,112(sp) + while (i) { + 2192: b0b9 j 19e0 + while (i >= 4) { + 2194: 478d li a5,3 + 2196: 8622 mv a2,s0 + 2198: d8b7d963 bge a5,a1,172a + 219c: ffc5839b addiw t2,a1,-4 + 21a0: 0023d79b srliw a5,t2,0x2 + 21a4: 0017859b addiw a1,a5,1 + 21a8: 058a slli a1,a1,0x2 + 21aa: 942e add s0,s0,a1 + *(stbsp__uint32 *)bf = 0x30303030; + 21ac: 01762023 sw s7,0(a2) + bf += 4; + 21b0: 0611 addi a2,a2,4 + while (i >= 4) { + 21b2: fe861de3 bne a2,s0,21ac + 21b6: 0027979b slliw a5,a5,0x2 + 21ba: 40f385bb subw a1,t2,a5 + 21be: d68ff06f j 1726 + while (i) { + 21c2: 85be mv a1,a5 + 21c4: ee071963 bnez a4,18b6 + 21c8: f16ff06f j 18de + 21cc: 2c013a03 ld s4,704(sp) + 21d0: 2b813a83 ld s5,696(sp) + 21d4: 2b013b03 ld s6,688(sp) + 21d8: 8ca2 mv s9,s0 + 21da: a04ff06f j 13de + stbsp__chk_cb_buf(1); + 21de: 2601 sext.w a2,a2 + 21e0: 1fe00793 li a5,510 + 21e4: f8c7c563 blt a5,a2,196e + 21e8: f3eff06f j 1926 + fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas + 21ec: fbfe7e13 andi t3,t3,-65 + if (fw + pr) { + 21f0: 006707bb addw a5,a4,t1 + fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas + 21f4: 2e01 sext.w t3,t3 + if (fw + pr) { + 21f6: a0078be3 beqz a5,1c0c + while (fw > 0) { + 21fa: be605663 blez t1,15e6 + *(stbsp__uint32 *)bf = 0x20202020; + 21fe: 20202837 lui a6,0x20202 + stbsp__cb_buf_clamp(i, fw); + 2202: 854a mv a0,s2 + 2204: 894e mv s2,s3 + 2206: 69a2 ld s3,8(sp) + *(stbsp__uint32 *)bf = 0x20202020; + 2208: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201fa7d8> + stbsp__cb_buf_clamp(i, fw); + 220c: ec52 sd s4,24(sp) + 220e: f426 sd s1,40(sp) + 2210: 87a2 mv a5,s0 + 2212: 84ea mv s1,s10 + stbsp__chk_cb_buf(1); + 2214: 1fe00f13 li t5,510 + stbsp__cb_buf_clamp(i, fw); + 2218: 8d6e mv s10,s11 + *bf++ = ' '; + 221a: 02000b13 li s6,32 + stbsp__cb_buf_clamp(i, fw); + 221e: 8de6 mv s11,s9 + while (i >= 4) { + 2220: 4b8d li s7,3 + stbsp__cb_buf_clamp(i, fw); + 2222: 20000e93 li t4,512 + 2226: e846 sd a7,16(sp) + 2228: f07e sd t6,32(sp) + 222a: f836 sd a3,48(sp) + 222c: e4f2 sd t3,72(sp) + 222e: e8ba sd a4,80(sp) + 2230: ec96 sd t0,88(sp) + 2232: 841a mv s0,t1 + 2234: 8a42 mv s4,a6 + 2236: 8c9e mv s9,t2 + 2238: 0c090063 beqz s2,22f8 + 223c: 40a78633 sub a2,a5,a0 + 2240: 40ce873b subw a4,t4,a2 + 2244: 86ba mv a3,a4 + 2246: 00e45363 bge s0,a4,224c + 224a: 86a2 mv a3,s0 + 224c: 0006871b sext.w a4,a3 + fw -= i; + 2250: 9c15 subw s0,s0,a3 + while (i) { + 2252: e719 bnez a4,2260 + 2254: a095 j 22b8 + *bf++ = ' '; + 2256: 01678023 sb s6,0(a5) + --i; + 225a: 377d addiw a4,a4,-1 + *bf++ = ' '; + 225c: 0785 addi a5,a5,1 + while (i) { + 225e: cb29 beqz a4,22b0 + if ((((stbsp__uintptr)bf) & 3) == 0) + 2260: 0037f693 andi a3,a5,3 + 2264: faed bnez a3,2256 + while (i >= 4) { + 2266: 86be mv a3,a5 + 2268: 00070f9b sext.w t6,a4 + 226c: 00f705bb addw a1,a4,a5 + 2270: 02ebd763 bge s7,a4,229e + *(stbsp__uint32 *)bf = 0x20202020; + 2274: 0146a023 sw s4,0(a3) + bf += 4; + 2278: 0691 addi a3,a3,4 + while (i >= 4) { + 227a: 40d5863b subw a2,a1,a3 + 227e: fecbcbe3 blt s7,a2,2274 + 2282: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff87b4> + 2286: 0026561b srliw a2,a2,0x2 + 228a: 0016069b addiw a3,a2,1 + 228e: 3771 addiw a4,a4,-4 + 2290: 0026161b slliw a2,a2,0x2 + 2294: 068a slli a3,a3,0x2 + 2296: 96be add a3,a3,a5 + 2298: 9f11 subw a4,a4,a2 + while (i) { + 229a: 87b6 mv a5,a3 + 229c: cb11 beqz a4,22b0 + 229e: 1702 slli a4,a4,0x20 + 22a0: 9301 srli a4,a4,0x20 + 22a2: 00e687b3 add a5,a3,a4 + *bf++ = ' '; + 22a6: 0685 addi a3,a3,1 + 22a8: ff668fa3 sb s6,-1(a3) + while (i) { + 22ac: fef69de3 bne a3,a5,22a6 + stbsp__chk_cb_buf(1); + 22b0: 40a78633 sub a2,a5,a0 + 22b4: 00090e63 beqz s2,22d0 + 22b8: 2601 sext.w a2,a2 + 22ba: 00cf5b63 bge t5,a2,22d0 + 22be: 85ce mv a1,s3 + 22c0: 9cb1 addw s1,s1,a2 + 22c2: 9902 jalr s2 + 22c4: c541 beqz a0,234c + 22c6: 87aa mv a5,a0 + 22c8: 20000e93 li t4,512 + 22cc: 1fe00f13 li t5,510 + while (fw > 0) { + 22d0: f68044e3 bgtz s0,2238 + 22d4: 8322 mv t1,s0 + 22d6: 89ca mv s3,s2 + 22d8: 83e6 mv t2,s9 + 22da: 68c2 ld a7,16(sp) + 22dc: 8cee mv s9,s11 + 22de: 6a62 ld s4,24(sp) + 22e0: 8dea mv s11,s10 + 22e2: 7f82 ld t6,32(sp) + 22e4: 8d26 mv s10,s1 + 22e6: 76c2 ld a3,48(sp) + 22e8: 6e26 ld t3,72(sp) + 22ea: 6746 ld a4,80(sp) + 22ec: 62e6 ld t0,88(sp) + 22ee: 74a2 ld s1,40(sp) + 22f0: 892a mv s2,a0 + 22f2: 843e mv s0,a5 + 22f4: af2ff06f j 15e6 + stbsp__cb_buf_clamp(i, fw); + 22f8: 8722 mv a4,s0 + 22fa: 4401 li s0,0 + if ((((stbsp__uintptr)bf) & 3) == 0) + 22fc: b795 j 2260 + n64 = va_arg(va, stbsp__uint32); + 22fe: 000be683 lwu a3,0(s7) + 2302: b0f9 j 1bd0 + 2304: 2c013a03 ld s4,704(sp) + 2308: 2b813a83 ld s5,696(sp) + 230c: 2b013b03 ld s6,688(sp) + 2310: 8cca mv s9,s2 + 2312: 8ccff06f j 13de + 2316: 8cd6 mv s9,s5 + 2318: 2c013a03 ld s4,704(sp) + 231c: 2b813a83 ld s5,696(sp) + 2320: 2b013b03 ld s6,688(sp) + 2324: 8baff06f j 13de + 2328: 2c013a03 ld s4,704(sp) + 232c: 2b813a83 ld s5,696(sp) + 2330: 2b013b03 ld s6,688(sp) + 2334: 8cea mv s9,s10 + 2336: 8a8ff06f j 13de + while (i) { + 233a: 85a2 mv a1,s0 + 233c: c12ff06f j 174e + while (i >= 4) { + 2340: 478d li a5,3 + 2342: 8622 mv a2,s0 + 2344: e4b7cce3 blt a5,a1,219c + 2348: be2ff06f j 172a + 234c: 2c013a03 ld s4,704(sp) + 2350: 2b813a83 ld s5,696(sp) + 2354: 2b013b03 ld s6,688(sp) + 2358: 8ca6 mv s9,s1 + 235a: 884ff06f j 13de + lead[2] = h[16]; + 235e: 01084683 lbu a3,16(a6) + lead[0] = 2; + 2362: 678d lui a5,0x3 + 2364: 0789 addi a5,a5,2 # 3002 + 2366: 06f11423 sh a5,104(sp) + lead[2] = h[16]; + 236a: 06d10523 sb a3,106(sp) + 236e: b891 j 1bc2 + 2370: 8cea mv s9,s10 + 2372: 86cff06f j 13de + 2376: 4f81 li t6,0 + 2378: 4a01 li s4,0 + 237a: 5586 lw a1,96(sp) + *--s = stbsp__comma; + 237c: 00004f17 auipc t5,0x4 + 2380: 6a1f4f03 lbu t5,1697(t5) # 6a1d + 2384: 0510 addi a2,sp,640 + 2386: 0085d71b srliw a4,a1,0x8 + *--s = h[n64 & ((1 << (l >> 8)) - 1)]; + 238a: 4305 li t1,1 + if (fl & STBSP__TRIPLET_COMMA) { + 238c: 040e7e93 andi t4,t3,64 + *--s = h[n64 & ((1 << (l >> 8)) - 1)]; + 2390: 0007029b sext.w t0,a4 + 2394: 005317bb sllw a5,t1,t0 + 2398: 37fd addiw a5,a5,-1 + 239a: 8ff5 and a5,a5,a3 + 239c: 97c2 add a5,a5,a6 + 239e: 0007c783 lbu a5,0(a5) + n64 >>= (l >> 8); + 23a2: 0056d6b3 srl a3,a3,t0 + *--s = h[n64 & ((1 << (l >> 8)) - 1)]; + 23a6: fff60a93 addi s5,a2,-1 + 23aa: fef60fa3 sb a5,-1(a2) + if (!((n64) || ((stbsp__int32)((num + STBSP__NUMSZ) - s) < pr))) + 23ae: e691 bnez a3,23ba + 23b0: 051c addi a5,sp,640 + 23b2: 415787bb subw a5,a5,s5 + 23b6: 0317dd63 bge a5,a7,23f0 + if (fl & STBSP__TRIPLET_COMMA) { + 23ba: 020e8963 beqz t4,23ec + ++l; + 23be: 0015879b addiw a5,a1,1 + if ((l & 15) == ((l >> 4) & 15)) { + 23c2: 0047d29b srliw t0,a5,0x4 + 23c6: 00f2c2b3 xor t0,t0,a5 + 23ca: 00f2f293 andi t0,t0,15 + ++l; + 23ce: 0007859b sext.w a1,a5 + if ((l & 15) == ((l >> 4) & 15)) { + 23d2: 0087d71b srliw a4,a5,0x8 + 23d6: 00029b63 bnez t0,23ec + l &= ~15; + 23da: 9bc1 andi a5,a5,-16 + 23dc: 0007859b sext.w a1,a5 + *--s = stbsp__comma; + 23e0: ffe60a93 addi s5,a2,-2 + 23e4: ffe60f23 sb t5,-2(a2) + 23e8: 0087d71b srliw a4,a5,0x8 + 23ec: 8656 mv a2,s5 + 23ee: b74d j 2390 + cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); + 23f0: 0045d29b srliw t0,a1,0x4 + 23f4: 0f0006b7 lui a3,0xf000 + if (pr < (stbsp__int32)l) + 23f8: 0007871b sext.w a4,a5 + cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); + 23fc: 0182929b slliw t0,t0,0x18 + 2400: 00d2f2b3 and t0,t0,a3 + n = pr + lead[0] + tail[0] + tz; + 2404: 00ef863b addw a2,t6,a4 + l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); + 2408: d0be sw a5,96(sp) + n = pr + lead[0] + tail[0] + tz; + 240a: 8fb2 mv t6,a2 + cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); + 240c: 86be mv a3,a5 + 240e: 00f282bb addw t0,t0,a5 + if (fw < (stbsp__int32)n) + 2412: 835a mv t1,s6 + 2414: 00cb5363 bge s6,a2,241a + 2418: 8332 mv t1,a2 + fw -= n; + 241a: 41f3033b subw t1,t1,t6 + pr -= l; + 241e: 9f1d subw a4,a4,a5 + goto scopy; + 2420: 4f81 li t6,0 + tz = 0; + 2422: 4881 li a7,0 + goto scopy; + 2424: fdcff06f j 1c00 + 2428: 8cda mv s9,s6 + 242a: 2c013a03 ld s4,704(sp) + 242e: 2b813a83 ld s5,696(sp) + 2432: 2b013b03 ld s6,688(sp) + 2436: fa9fe06f j 13de + fl |= ((sizeof(void *) == 8) ? STBSP__INTMAX : 0); + 243a: 020e6e13 ori t3,t3,32 + ++f; + 243e: 0485 addi s1,s1,1 + 2440: 864ff06f j 14a4 + n = 0; + 2444: 4601 li a2,0 + s = num + 64; + 2446: 8756 mv a4,s5 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 2448: 4511 li a0,4 + *s++ = stbsp__comma; + 244a: 00170793 addi a5,a4,1 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 244e: 00030563 beqz t1,2458 + 2452: 2585 addiw a1,a1,1 + 2454: 10a58363 beq a1,a0,255a + 2458: 873e mv a4,a5 + *s++ = sn[n]; + 245a: 02061793 slli a5,a2,0x20 + 245e: 9381 srli a5,a5,0x20 + 2460: 97fa add a5,a5,t5 + 2462: 0007c803 lbu a6,0(a5) + ++n; + 2466: 2605 addiw a2,a2,1 + *s++ = sn[n]; + 2468: ff070fa3 sb a6,-1(a4) + if (n >= l) + 246c: fcd66fe3 bltu a2,a3,244a + if (n < (stbsp__uint32)dp) { + 2470: 0bd663e3 bltu a2,t4,2d16 + cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens + 2474: 415707b3 sub a5,a4,s5 + 2478: 030002b7 lui t0,0x3000 + 247c: 00f282bb addw t0,t0,a5 + if (pr) { + 2480: 00088a63 beqz a7,2494 + *s++ = stbsp__period; + 2484: 0cca4683 lbu a3,204(s4) + 2488: 00170793 addi a5,a4,1 + l = (stbsp__uint32)(s - (num + 64)); + 248c: 415787b3 sub a5,a5,s5 + *s++ = stbsp__period; + 2490: 00d70023 sb a3,0(a4) + if (fl & STBSP__METRIC_SUFFIX) { + 2494: 100e7713 andi a4,t3,256 + 2498: 86f2 mv a3,t3 + 249a: 2c070163 beqz a4,275c + if (fl & STBSP__METRIC_NOSPACE) + 249e: 40ae5f9b sraiw t6,t3,0xa + 24a2: 001fcf93 xori t6,t6,1 + 24a6: 001fff93 andi t6,t6,1 + tail[1] = ' '; + 24aa: 02000713 li a4,32 + 24ae: 06e108a3 sb a4,113(sp) + tail[0] = idx; + 24b2: 07f10823 sb t6,112(sp) + if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. + 24b6: 018e561b srliw a2,t3,0x18 + 24ba: 018e571b srliw a4,t3,0x18 + n = pr + lead[0] + tail[0] + tz; + 24be: 000f859b sext.w a1,t6 + if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. + 24c2: c225 beqz a2,2522 + if (fl & STBSP__METRIC_1024) + 24c4: 001f859b addiw a1,t6,1 + 24c8: 0ff5f613 zext.b a2,a1 + tail[idx + 1] = "_KMGT"[fl >> 24]; + 24cc: 1702 slli a4,a4,0x20 + if (fl & STBSP__METRIC_1024) + 24ce: 03469513 slli a0,a3,0x34 + tail[idx + 1] = "_KMGT"[fl >> 24]; + 24d2: 85b2 mv a1,a2 + 24d4: 9301 srli a4,a4,0x20 + if (fl & STBSP__METRIC_1024) + 24d6: 06055ee3 bgez a0,2d52 + tail[idx + 1] = "_KMGT"[fl >> 24]; + 24da: 00003517 auipc a0,0x3 + 24de: bce50513 addi a0,a0,-1074 # 50a8 <_GLOBAL__sub_I__ZSt3cin+0xe0> + 24e2: 972a add a4,a4,a0 + 24e4: 00074503 lbu a0,0(a4) + if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { + 24e8: 6709 lui a4,0x2 + 24ea: 80070713 addi a4,a4,-2048 # 1800 + 24ee: 8f75 and a4,a4,a3 + tail[idx + 1] = "_KMGT"[fl >> 24]; + 24f0: 06010813 addi a6,sp,96 + 24f4: 22060693 addi a3,a2,544 + 24f8: 96c2 add a3,a3,a6 + 24fa: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff85a8> + if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { + 24fe: 8007071b addiw a4,a4,-2048 + 2502: 060715e3 bnez a4,2d6c + tail[idx + 1] = 'i'; + 2506: 2f89 addiw t6,t6,2 + 2508: 0ffff593 zext.b a1,t6 + 250c: 1094 addi a3,sp,96 + 250e: 22058713 addi a4,a1,544 + 2512: 9736 add a4,a4,a3 + 2514: 06900693 li a3,105 + 2518: 8fae mv t6,a1 + 251a: ded70823 sb a3,-528(a4) + tail[0] = idx; + 251e: 07f10823 sb t6,112(sp) + l = (stbsp__uint32)(s - (num + 64)); + 2522: 0007869b sext.w a3,a5 + n = pr + lead[0] + tail[0] + tz; + 2526: 06814a03 lbu s4,104(sp) + if (pr < (stbsp__int32)l) + 252a: fff6c713 not a4,a3 + 252e: 977d srai a4,a4,0x3f + 2530: 8ff9 and a5,a5,a4 + n = pr + lead[0] + tail[0] + tz; + 2532: 00fa073b addw a4,s4,a5 + 2536: 9f2d addw a4,a4,a1 + 2538: 0117063b addw a2,a4,a7 + l = (stbsp__uint32)(s - (num + 64)); + 253c: d0b6 sw a3,96(sp) + n = pr + lead[0] + tail[0] + tz; + 253e: 8732 mv a4,a2 + if (pr < (stbsp__int32)l) + 2540: 2781 sext.w a5,a5 + if ((fl & STBSP__LEFTJUST) == 0) { + 2542: 001e7513 andi a0,t3,1 + if (fw < (stbsp__int32)n) + 2546: 835a mv t1,s6 + 2548: 00cb5363 bge s6,a2,254e + 254c: 8332 mv t1,a2 + fw -= n; + 254e: 40e3033b subw t1,t1,a4 + pr -= l; + 2552: 40d7873b subw a4,a5,a3 + goto scopy; + 2556: eaaff06f j 1c00 + *s++ = stbsp__comma; + 255a: fe578fa3 sb t0,-1(a5) + 255e: 0709 addi a4,a4,2 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 2560: 4585 li a1,1 + 2562: bde5 j 245a + lead[0] = 1; + 2564: 678d lui a5,0x3 + 2566: 0785 addi a5,a5,1 # 3001 + 2568: 06f11423 sh a5,104(sp) + 256c: b4ed j 2056 + if ((f[0] != 'u') && (i64 < 0)) { + 256e: 07500693 li a3,117 + stbsp__int64 i64 = va_arg(va, stbsp__int64); + 2572: 000bbf03 ld t5,0(s7) + if ((f[0] != 'u') && (i64 < 0)) { + 2576: dcd78263 beq a5,a3,1b3a + 257a: dc0f5063 bgez t5,1b3a + fl |= STBSP__NEGATIVE; + 257e: 08076713 ori a4,a4,128 + n64 = (stbsp__uint64)-i64; + 2582: 41e00f33 neg t5,t5 + fl |= STBSP__NEGATIVE; + 2586: 00070e1b sext.w t3,a4 + 258a: db0ff06f j 1b3a + lead[2] = h[0xb]; + 258e: 00b84703 lbu a4,11(a6) + lead[0] = 2; + 2592: 678d lui a5,0x3 + 2594: 0789 addi a5,a5,2 # 3002 + 2596: 06f11423 sh a5,104(sp) + lead[2] = h[0xb]; + 259a: 06e10523 sb a4,106(sp) + 259e: bab5 j 1f1a + sign[0] = 1; + 25a0: 678d lui a5,0x3 + 25a2: d0178793 addi a5,a5,-767 # 2d01 + fl |= STBSP__NEGATIVE; + 25a6: 080e6e13 ori t3,t3,128 + sign[0] = 1; + 25aa: 06f11423 sh a5,104(sp) + 25ae: 468d li a3,3 + 25b0: 4a0d li s4,3 + 25b2: 4809 li a6,2 + 25b4: b899 j 1e0a + sign[0] = 1; + 25b6: 6709 lui a4,0x2 + 25b8: 0705 addi a4,a4,1 # 2001 + 25ba: 06e11423 sh a4,104(sp) + 25be: bae5 j 1fb6 + if (((stbsp__uintptr)sn & 3) == 0) + 25c0: 0e0780e3 beqz a5,2ea0 + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + 25c4: 56fd li a3,-1 + 25c6: bcf9 j 20a4 + if (fw < (stbsp__int32)n) + 25c8: 4305 li t1,1 + 25ca: b249 j 1f4c + pr = 6; // default is 6 + 25cc: 4899 li a7,6 + 25ce: b801 j 1dde + h = (f[0] == 'A') ? hexu : hex; + 25d0: 00004597 auipc a1,0x4 + 25d4: 45058593 addi a1,a1,1104 # 6a20 + 25d8: ff6ff06f j 1dce + h = (f[0] == 'B') ? hexu : hex; + 25dc: 00004817 auipc a6,0x4 + 25e0: 44480813 addi a6,a6,1092 # 6a20 + 25e4: b22d j 1f0e + 25e6: 80000737 lui a4,0x80000 + 25ea: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff87be> + pr = 6; // default is 6 + 25ec: 4899 li a7,6 + 25ee: e4eff06f j 1c3c + h = (f[0] == 'E') ? hexu : hex; + 25f2: 00004317 auipc t1,0x4 + 25f6: 42e30313 addi t1,t1,1070 # 6a20 + 25fa: e28ff06f j 1c22 + 25fe: 80000737 lui a4,0x80000 + 2602: 4a99 li s5,6 + 2604: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff87bd> + pr = 6; + 2606: 4a19 li s4,6 + 2608: ee8ff06f j 1cf0 + h = (f[0] == 'G') ? hexu : hex; + 260c: 00004317 auipc t1,0x4 + 2610: 41430313 addi t1,t1,1044 # 6a20 + 2614: eb6ff06f j 1cca + 2618: 7be6 ld s7,120(sp) + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + 261a: 86c2 mv a3,a6 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 261c: 8542 mv a0,a6 + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + 261e: 88d2 mv a7,s4 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 2620: 8ade mv s5,s7 + if (pr > (stbsp__int32)l) + 2622: 0005071b sext.w a4,a0 + 2626: 01175f63 bge a4,a7,2644 + pr = l - 1; + 262a: fff5089b addiw a7,a0,-1 + tail[0] = 0; + 262e: 06010823 sb zero,112(sp) + if (fl & STBSP__NEGATIVE) { + 2632: 70028c63 beqz t0,2d4a + sign[0] = 1; + 2636: 670d lui a4,0x3 + 2638: d0170713 addi a4,a4,-767 # 2d01 + 263c: 06e11423 sh a4,104(sp) + 2640: e3aff06f j 1c7a + else if (pr) + 2644: fe0885e3 beqz a7,262e + --pr; // when using %e, there is one digit before the decimal + 2648: 38fd addiw a7,a7,-1 + 264a: b7d5 j 262e + switch (f[0]) { + 264c: 0034c783 lbu a5,3(s1) + f += 3; + 2650: 048d addi s1,s1,3 + 2652: e53fe06f j 14a4 + if (!limit || *sn == 0) + 2656: 4601 li a2,0 + 2658: 4701 li a4,0 + 265a: 4781 li a5,0 + return (stbsp__uint32)(sn - s); + 265c: bca5 j 20d4 + pr = 1; + 265e: 4885 li a7,1 + 2660: cf4ff06f j 1b54 + *s++ = sn[0]; + 2664: 000ac703 lbu a4,0(s5) + 2668: 0ce10023 sb a4,192(sp) + if (pr) + 266c: 54088563 beqz a7,2bb6 + *s++ = stbsp__period; + 2670: 00004617 auipc a2,0x4 + 2674: 3ac64603 lbu a2,940(a2) # 6a1c + if ((l - 1) > (stbsp__uint32)pr) + 2678: fff6871b addiw a4,a3,-1 + *s++ = stbsp__period; + 267c: 0cc100a3 sb a2,193(sp) + if ((l - 1) > (stbsp__uint32)pr) + 2680: 0008851b sext.w a0,a7 + 2684: 0007061b sext.w a2,a4 + 2688: 52c57163 bgeu a0,a2,2baa + l = pr + 1; + 268c: 0018869b addiw a3,a7,1 + for (n = 1; n < l; n++) + 2690: 8746 mv a4,a7 + 2692: 02071613 slli a2,a4,0x20 + 2696: 9201 srli a2,a2,0x20 + 2698: 0c210713 addi a4,sp,194 + 269c: 0a85 addi s5,s5,1 + 269e: 963a add a2,a2,a4 + *s++ = sn[n]; + 26a0: 000ac583 lbu a1,0(s5) + 26a4: 0705 addi a4,a4,1 + for (n = 1; n < l; n++) + 26a6: 0a85 addi s5,s5,1 + *s++ = sn[n]; + 26a8: feb70fa3 sb a1,-1(a4) + for (n = 1; n < l; n++) + 26ac: fec71ae3 bne a4,a2,26a0 + tail[1] = h[0xe]; + 26b0: 00e34803 lbu a6,14(t1) + dp -= 1; + 26b4: fff7871b addiw a4,a5,-1 + tail[2] = '+'; + 26b8: 02b00593 li a1,43 + tail[1] = h[0xe]; + 26bc: 070108a3 sb a6,113(sp) + if (dp < 0) { + 26c0: 00075663 bgez a4,26cc + dp = -dp; + 26c4: 4705 li a4,1 + 26c6: 9f1d subw a4,a4,a5 + tail[2] = '-'; + 26c8: 02d00593 li a1,45 + 26cc: 06b10923 sb a1,114(sp) + n = (dp >= 100) ? 5 : 4; + 26d0: 06300793 li a5,99 + 26d4: 4ee7d663 bge a5,a4,2bc0 + 26d8: 4595 li a1,5 + 26da: 4f95 li t6,5 + 26dc: 4e95 li t4,5 + tail[n] = '0' + dp % 10; + 26de: 47a9 li a5,10 + dp /= 10; + 26e0: 02f7433b divw t1,a4,a5 + --n; + 26e4: fffe8f1b addiw t5,t4,-1 + tail[n] = '0' + dp % 10; + 26e8: 020f1293 slli t0,t5,0x20 + 26ec: 220e8813 addi a6,t4,544 + 26f0: 06010893 addi a7,sp,96 + 26f4: 0202d293 srli t0,t0,0x20 + 26f8: 01180eb3 add t4,a6,a7 + 26fc: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff89d8> + 2700: 011802b3 add t0,a6,a7 + tail[0] = (char)n; + 2704: 07f10823 sb t6,112(sp) + if (n <= 3) + 2708: 4a0d li s4,3 + tail[n] = '0' + dp % 10; + 270a: 02f7673b remw a4,a4,a5 + dp /= 10; + 270e: 0003081b sext.w a6,t1 + tail[n] = '0' + dp % 10; + 2712: 02f36abb remw s5,t1,a5 + 2716: 0307071b addiw a4,a4,48 + 271a: deee8823 sb a4,-528(t4) + 271e: 030a871b addiw a4,s5,48 + 2722: dee28823 sb a4,-528(t0) + if (n <= 3) + 2726: 014f0a63 beq t5,s4,273a + dp /= 10; + 272a: 02f3483b divw a6,t1,a5 + tail[n] = '0' + dp % 10; + 272e: 02f867bb remw a5,a6,a5 + 2732: 0307879b addiw a5,a5,48 + 2736: 06f109a3 sb a5,115(sp) + tz = pr - (l - 1); + 273a: 2505 addiw a0,a0,1 + l = (stbsp__uint32)(s - (num + 64)); + 273c: 0c010a93 addi s5,sp,192 + cs = 1 + (3 << 24); // how many tens + 2740: 030002b7 lui t0,0x3000 + tz = pr - (l - 1); + 2744: 40d508bb subw a7,a0,a3 + 2748: d2c2 sw a6,100(sp) + l = (stbsp__uint32)(s - (num + 64)); + 274a: 415607b3 sub a5,a2,s5 + cs = 1 + (3 << 24); // how many tens + 274e: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff87b9> + 2750: bbc9 j 2522 + 2752: fc2e sd a1,56(sp) + 2754: d0b2 sw a2,96(sp) + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 2756: 8536 mv a0,a3 + 2758: e2cff06f j 1d84 + flt_lead: + 275c: 4581 li a1,0 + 275e: 4f81 li t6,0 + 2760: b3c9 j 2522 + n = pr + lead[0] + tail[0] + tz; + 2762: 06814a03 lbu s4,104(sp) + 2766: 000a0f9b sext.w t6,s4 + 276a: b901 j 237a + if ((f[1] == '6') && (f[2] == '4')) { + 276c: 0024c683 lbu a3,2(s1) + 2770: 03400713 li a4,52 + 2774: 00e68463 beq a3,a4,277c + 2778: e2bfe06f j 15a2 + switch (f[0]) { + 277c: 0034c783 lbu a5,3(s1) + fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); + 2780: 020e6e13 ori t3,t3,32 + f += 3; + 2784: 048d addi s1,s1,3 + 2786: d1ffe06f j 14a4 + if (pr < (stbsp__int32)l) + 278a: 0006879b sext.w a5,a3 + n = pr + lead[0] + tail[0] + tz; + 278e: 06814a03 lbu s4,104(sp) + if (pr < (stbsp__int32)l) + 2792: fff7c793 not a5,a5 + 2796: 97fd srai a5,a5,0x3f + 2798: 8ff5 and a5,a5,a3 + n = pr + lead[0] + tail[0] + tz; + 279a: 00fa063b addw a2,s4,a5 + s = (char *)sn; + 279e: 7ae6 ld s5,120(sp) + n = pr + lead[0] + tail[0] + tz; + 27a0: 8732 mv a4,a2 + if ((fl & STBSP__LEFTJUST) == 0) { + 27a2: 001e7513 andi a0,t3,1 + if (pr < (stbsp__int32)l) + 27a6: 2781 sext.w a5,a5 + if (fw < (stbsp__int32)n) + 27a8: 835a mv t1,s6 + 27aa: 00cb5363 bge s6,a2,27b0 + 27ae: 8332 mv t1,a2 + fw -= n; + 27b0: 40e3033b subw t1,t1,a4 + goto scopy; + 27b4: 4f81 li t6,0 + pr -= l; + 27b6: 40d7873b subw a4,a5,a3 + cs = 0; + 27ba: 4281 li t0,0 + tz = 0; + 27bc: 4881 li a7,0 + goto scopy; + 27be: c42ff06f j 1c00 + cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens + 27c2: 415705b3 sub a1,a4,s5 + 27c6: 030002b7 lui t0,0x3000 + 27ca: 00b282bb addw t0,t0,a1 + l = pr - n; + 27ce: 0008859b sext.w a1,a7 + if (pr) + 27d2: 42088763 beqz a7,2c00 + *s++ = stbsp__period; + 27d6: 0cca4f83 lbu t6,204(s4) + if ((l - dp) > (stbsp__uint32)pr) + 27da: 41d6833b subw t1,a3,t4 + *s++ = stbsp__period; + 27de: 00280713 addi a4,a6,2 + 27e2: 01f800a3 sb t6,1(a6) + if ((l - dp) > (stbsp__uint32)pr) + 27e6: 4065ed63 bltu a1,t1,2c00 + while (n < l) { + 27ea: 5ed57863 bgeu a0,a3,2dda + 27ee: 40c687bb subw a5,a3,a2 + 27f2: 37fd addiw a5,a5,-1 + 27f4: 1782 slli a5,a5,0x20 + 27f6: 9381 srli a5,a5,0x20 + 27f8: 1602 slli a2,a2,0x20 + 27fa: 9201 srli a2,a2,0x20 + 27fc: 0785 addi a5,a5,1 + 27fe: 967a add a2,a2,t5 + 2800: 97ba add a5,a5,a4 + *s++ = sn[n]; + 2802: 00064503 lbu a0,0(a2) + 2806: 0705 addi a4,a4,1 + while (n < l) { + 2808: 0605 addi a2,a2,1 + *s++ = sn[n]; + 280a: fea70fa3 sb a0,-1(a4) + while (n < l) { + 280e: fef71ae3 bne a4,a5,2802 + tz = pr - (l - dp); + 2812: 01d585bb addw a1,a1,t4 + 2816: 40d588bb subw a7,a1,a3 + l = (stbsp__uint32)(s - (num + 64)); + 281a: 415787b3 sub a5,a5,s5 + 281e: b99d j 2494 + fl |= STBSP__NEGATIVE; + 2820: 080e6e13 ori t3,t3,128 + tail[0] = 0; + 2824: 06010823 sb zero,112(sp) + if (fl & STBSP__NEGATIVE) { + 2828: b539 j 2636 + tail[0] = (char)n; + 282a: 4799 li a5,6 + tail[n] = '0' + dp % 10; + 282c: 06b10b23 sb a1,118(sp) + tail[0] = (char)n; + 2830: 06f10823 sb a5,112(sp) + tail[n] = '0' + dp % 10; + 2834: 4819 li a6,6 + 2836: 4f99 li t6,6 + n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); + 2838: 4599 li a1,6 + dp /= 10; + 283a: 4f29 li t5,10 + if (n <= 3) + 283c: 428d li t0,3 + 283e: 87b2 mv a5,a2 + dp /= 10; + 2840: 03e7c7bb divw a5,a5,t5 + --n; + 2844: 35fd addiw a1,a1,-1 + tail[n] = '0' + dp % 10; + 2846: 02059613 slli a2,a1,0x20 + 284a: 9201 srli a2,a2,0x20 + 284c: 06010e93 addi t4,sp,96 + 2850: 22060613 addi a2,a2,544 + 2854: 9676 add a2,a2,t4 + 2856: 03e7eebb remw t4,a5,t5 + 285a: 030e8e9b addiw t4,t4,48 + 285e: dfd60823 sb t4,-528(a2) + if (n <= 3) + 2862: fc559fe3 bne a1,t0,2840 + 2866: e6aff06f j 1ed0 + *s++ = h[(n64 >> 60) & 15]; + 286a: 93f1 srli a5,a5,0x3c + 286c: 97ae add a5,a5,a1 + 286e: 0007c303 lbu t1,0(a5) + lead[1 + lead[0]] = '0'; + 2872: 1088 addi a0,sp,96 + 2874: 22080793 addi a5,a6,544 + 2878: 97aa add a5,a5,a0 + 287a: 03000513 li a0,48 + 287e: dea78423 sb a0,-536(a5) + lead[2 + lead[0]] = 'x'; + 2882: 22068793 addi a5,a3,544 + 2886: 1094 addi a3,sp,96 + 2888: 96be add a3,a3,a5 + *s++ = stbsp__period; + 288a: 00004517 auipc a0,0x4 + 288e: 19254503 lbu a0,402(a0) # 6a1c + lead[2 + lead[0]] = 'x'; + 2892: 07800813 li a6,120 + sn = s; + 2896: 0c210793 addi a5,sp,194 + lead[2 + lead[0]] = 'x'; + 289a: df068423 sb a6,-536(a3) + *s++ = stbsp__period; + 289e: 0ca100a3 sb a0,193(sp) + lead[0] += 2; + 28a2: 07410423 sb s4,104(sp) + *s++ = h[(n64 >> 60) & 15]; + 28a6: 0c610023 sb t1,192(sp) + n64 <<= 4; + 28aa: 0732 slli a4,a4,0xc + sn = s; + 28ac: fcbe sd a5,120(sp) + n = pr; + 28ae: 0008869b sext.w a3,a7 + while (n--) { + 28b2: 4831 li a6,12 + if (n > 13) + 28b4: 4535 li a0,13 + tz = pr - n; + 28b6: 40a688bb subw a7,a3,a0 + while (n--) { + 28ba: 02081313 slli t1,a6,0x20 + 28be: 02035313 srli t1,t1,0x20 + 28c2: 22030693 addi a3,t1,544 + 28c6: 1088 addi a0,sp,96 + 28c8: 9536 add a0,a0,a3 + 28ca: e4350513 addi a0,a0,-445 + *s++ = h[(n64 >> 60) & 15]; + 28ce: 03c75693 srli a3,a4,0x3c + 28d2: 96ae add a3,a3,a1 + 28d4: 0006c683 lbu a3,0(a3) + 28d8: 0785 addi a5,a5,1 + n64 <<= 4; + 28da: 0712 slli a4,a4,0x4 + *s++ = h[(n64 >> 60) & 15]; + 28dc: fed78fa3 sb a3,-1(a5) + while (n--) { + 28e0: fea797e3 bne a5,a0,28ce + l = (int)(s - (num + 64)); + 28e4: 280d addiw a6,a6,3 + 28e6: 0008069b sext.w a3,a6 + if (pr < (stbsp__int32)l) + 28ea: fff6c713 not a4,a3 + 28ee: 977d srai a4,a4,0x3f + 28f0: 00e87733 and a4,a6,a4 + dp = (int)(s - sn); + 28f4: 0013051b addiw a0,t1,1 + if (pr < (stbsp__int32)l) + 28f8: 0007031b sext.w t1,a4 + pr -= l; + 28fc: 4107073b subw a4,a4,a6 + 2900: d76ff06f j 1e76 + *--s = stbsp__comma; + 2904: 00004a17 auipc s4,0x4 + 2908: 04ca0a13 addi s4,s4,76 # 6950 + if (n64 >= 100000000) { + 290c: 05f5e7b7 lui a5,0x5f5e + 2910: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f568b7> + n = (stbsp__uint32)(n64 % 100000000); + 2914: 05f5e637 lui a2,0x5f5e + *--s = stbsp__comma; + 2918: 0cda4b83 lbu s7,205(s4) + if (n64 >= 100000000) { + 291c: e83e sd a5,16(sp) + n = (stbsp__uint32)(n64 % 100000000); + 291e: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f568b8> + l = 0; + 2922: d082 sw zero,96(sp) + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + 2924: 040e7813 andi a6,t3,64 + 2928: 4701 li a4,0 + 292a: 4281 li t0,0 + s = num + STBSP__NUMSZ; + 292c: 28010a93 addi s5,sp,640 + n = (stbsp__uint32)(n64 % 100000000); + 2930: ec3e sd a5,24(sp) + if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { + 2932: 430d li t1,3 + n /= 10; + 2934: 45a9 li a1,10 + while (n) { + 2936: 4ea5 li t4,9 + *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; + 2938: 06400f93 li t6,100 + if (n64 >= 100000000) { + 293c: 67c2 ld a5,16(sp) + char *o = s - 8; + 293e: ff8a8513 addi a0,s5,-8 + if (n64 >= 100000000) { + 2942: 0fe7f763 bgeu a5,t5,2a30 + n = (stbsp__uint32)(n64 % 100000000); + 2946: 6662 ld a2,24(sp) + 2948: 02cf77b3 remu a5,t5,a2 + n64 /= 100000000; + 294c: 02cf5f33 divu t5,t5,a2 + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + 2950: 0e080463 beqz a6,2a38 + while (n) { + 2954: cb85 beqz a5,2984 + *--s = stbsp__comma; + 2956: 1afd addi s5,s5,-1 + if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { + 2958: 00671763 bne a4,t1,2966 + --o; + 295c: 017a8023 sb s7,0(s5) + 2960: 157d addi a0,a0,-1 + *--s = stbsp__comma; + 2962: 1afd addi s5,s5,-1 + l = 0; + 2964: 4701 li a4,0 + if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { + 2966: 2705 addiw a4,a4,1 + *--s = (char)(n % 10) + '0'; + 2968: 02b7f63b remuw a2,a5,a1 + 296c: 0306061b addiw a2,a2,48 + 2970: 00ca8023 sb a2,0(s5) + n /= 10; + 2974: 02b7d63b divuw a2,a5,a1 + while (n) { + 2978: 00fef563 bgeu t4,a5,2982 + *--s = stbsp__comma; + 297c: 1afd addi s5,s5,-1 + 297e: 87b2 mv a5,a2 + 2980: bfe1 j 2958 + while (n) { + 2982: 4285 li t0,1 + if (n64 == 0) { + 2984: 020f0063 beqz t5,29a4 + while (s != o) + 2988: fb550ae3 beq a0,s5,293c + *--s = stbsp__comma; + 298c: 1afd addi s5,s5,-1 + if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { + 298e: 00080663 beqz a6,299a + 2992: 08670863 beq a4,t1,2a22 + 2996: 2705 addiw a4,a4,1 + 2998: 4285 li t0,1 + *--s = '0'; + 299a: 03000793 li a5,48 + 299e: 00fa8023 sb a5,0(s5) + 29a2: b7dd j 2988 + 29a4: 00028363 beqz t0,29aa + 29a8: d0ba sw a4,96(sp) + if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) + 29aa: 000ac703 lbu a4,0(s5) + 29ae: 03000793 li a5,48 + 29b2: 34f70b63 beq a4,a5,2d08 + l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); + 29b6: 051c addi a5,sp,640 + 29b8: 415786bb subw a3,a5,s5 + tail[0] = 0; + 29bc: 06010823 sb zero,112(sp) + if (fl & STBSP__NEGATIVE) { + 29c0: 080e7713 andi a4,t3,128 + 29c4: 87f2 mv a5,t3 + 29c6: 32070863 beqz a4,2cf6 + 29ca: 678d lui a5,0x3 + 29cc: d017879b addiw a5,a5,-767 # 2d01 + sign[0] = 1; + 29d0: 06f11423 sh a5,104(sp) + 29d4: 4705 li a4,1 + 29d6: 4a05 li s4,1 + l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); + 29d8: d0b6 sw a3,96(sp) + if (l == 0) { + 29da: 30068163 beqz a3,2cdc + cs = l + (3 << 24); + 29de: 030002b7 lui t0,0x3000 + 29e2: 00d282bb addw t0,t0,a3 + if (pr < (stbsp__int32)l) + 29e6: 0006861b sext.w a2,a3 + if (pr < 0) + 29ea: fff8c793 not a5,a7 + 29ee: 97fd srai a5,a5,0x3f + if (pr < (stbsp__int32)l) + 29f0: 00f8f7b3 and a5,a7,a5 + 29f4: 0007859b sext.w a1,a5 + 29f8: 00c5d363 bge a1,a2,29fe + 29fc: 87b2 mv a5,a2 + n = pr + lead[0] + tail[0] + tz; + 29fe: 00f7063b addw a2,a4,a5 + 2a02: 8732 mv a4,a2 + if (pr < (stbsp__int32)l) + 2a04: 2781 sext.w a5,a5 + if ((fl & STBSP__LEFTJUST) == 0) { + 2a06: 001e7513 andi a0,t3,1 + if (fw < (stbsp__int32)n) + 2a0a: 835a mv t1,s6 + 2a0c: 00cb5363 bge s6,a2,2a12 + 2a10: 8332 mv t1,a2 + fw -= n; + 2a12: 40e3033b subw t1,t1,a4 + scopy: + 2a16: 4f81 li t6,0 + pr -= l; + 2a18: 40d7873b subw a4,a5,a3 + tz = 0; + 2a1c: 4881 li a7,0 + scopy: + 2a1e: 9e2ff06f j 1c00 + *--s = stbsp__comma; + 2a22: 87de mv a5,s7 + --o; + 2a24: 157d addi a0,a0,-1 + l = 0; + 2a26: 4701 li a4,0 + --o; + 2a28: 4285 li t0,1 + 2a2a: 00fa8023 sb a5,0(s5) + 2a2e: bfa9 j 2988 + n = (stbsp__uint32)n64; + 2a30: 000f079b sext.w a5,t5 + n64 = 0; + 2a34: 4f01 li t5,0 + 2a36: bf29 j 2950 + 2a38: f046 sd a7,32(sp) + *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; + 2a3a: 03f7f63b remuw a2,a5,t6 + s -= 2; + 2a3e: 1af9 addi s5,s5,-2 + *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; + 2a40: 0007889b sext.w a7,a5 + 2a44: 2605 addiw a2,a2,1 + 2a46: 0016161b slliw a2,a2,0x1 + 2a4a: 1602 slli a2,a2,0x20 + 2a4c: 9201 srli a2,a2,0x20 + 2a4e: 9652 add a2,a2,s4 + 2a50: 00065603 lhu a2,0(a2) + n /= 100; + 2a54: 03f7d7bb divuw a5,a5,t6 + *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; + 2a58: 00ca9023 sh a2,0(s5) + } while (n); + 2a5c: 06300613 li a2,99 + 2a60: fd166de3 bltu a2,a7,2a3a + 2a64: 7882 ld a7,32(sp) + if (n64 == 0) { + 2a66: f20f11e3 bnez t5,2988 + 2a6a: bf2d j 29a4 + *(stbsp__uint32 *)bf = 0x20202020; + 2a6c: 20202b37 lui s6,0x20202 + stbsp__cb_buf_clamp(i, fw); + 2a70: 854a mv a0,s2 + *bf++ = ' '; + 2a72: 02000a93 li s5,32 + *(stbsp__uint32 *)bf = 0x20202020; + 2a76: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201fa7d8> + stbsp__chk_cb_buf(1); + 2a7a: 1fe00a13 li s4,510 + stbsp__cb_buf_clamp(i, fw); + 2a7e: 20000b93 li s7,512 + 2a82: 891a mv s2,t1 + 2a84: 0a098063 beqz s3,2b24 + 2a88: 40a40633 sub a2,s0,a0 + 2a8c: 40cb87bb subw a5,s7,a2 + 2a90: 873e mv a4,a5 + 2a92: 00f95363 bge s2,a5,2a98 + 2a96: 874a mv a4,s2 + 2a98: 0007079b sext.w a5,a4 + fw -= i; + 2a9c: 40e9093b subw s2,s2,a4 + while (i) { + 2aa0: e799 bnez a5,2aae + 2aa2: a281 j 2be2 + *bf++ = ' '; + 2aa4: 01540023 sb s5,0(s0) + --i; + 2aa8: 37fd addiw a5,a5,-1 + *bf++ = ' '; + 2aaa: 0405 addi s0,s0,1 + while (i) { + 2aac: cba1 beqz a5,2afc + if ((((stbsp__uintptr)bf) & 3) == 0) + 2aae: 00347713 andi a4,s0,3 + 2ab2: fb6d bnez a4,2aa4 + while (i >= 4) { + 2ab4: 470d li a4,3 + 2ab6: 40f75363 bge a4,a5,2ebc + 2aba: ffc7869b addiw a3,a5,-4 + 2abe: 0026d79b srliw a5,a3,0x2 + 2ac2: 0017871b addiw a4,a5,1 + 2ac6: 070a slli a4,a4,0x2 + 2ac8: 9722 add a4,a4,s0 + *(stbsp__uint32 *)bf = 0x20202020; + 2aca: 01642023 sw s6,0(s0) + bf += 4; + 2ace: 0411 addi s0,s0,4 + while (i >= 4) { + 2ad0: fee41de3 bne s0,a4,2aca + 2ad4: 0027979b slliw a5,a5,0x2 + 2ad8: 40f687bb subw a5,a3,a5 + while (i--) + 2adc: fff7869b addiw a3,a5,-1 + 2ae0: cf91 beqz a5,2afc + 2ae2: 9fa1 addw a5,a5,s0 + *bf++ = ' '; + 2ae4: 0705 addi a4,a4,1 + while (i--) + 2ae6: 0007061b sext.w a2,a4 + *bf++ = ' '; + 2aea: ff570fa3 sb s5,-1(a4) + while (i--) + 2aee: fec79be3 bne a5,a2,2ae4 + 2af2: 2685 addiw a3,a3,1 + 2af4: 02069793 slli a5,a3,0x20 + 2af8: 9381 srli a5,a5,0x20 + 2afa: 943e add s0,s0,a5 + stbsp__chk_cb_buf(1); + 2afc: 00098f63 beqz s3,2b1a + 2b00: 40a4063b subw a2,s0,a0 + 2b04: 00ca5b63 bge s4,a2,2b1a + 2b08: 65a2 ld a1,8(sp) + 2b0a: e81e sd t2,16(sp) + 2b0c: 00cd0d3b addw s10,s10,a2 + 2b10: 9982 jalr s3 + 2b12: 80050be3 beqz a0,2328 + 2b16: 63c2 ld t2,16(sp) + 2b18: 842a mv s0,a0 + while (fw) { + 2b1a: f60915e3 bnez s2,2a84 + 2b1e: 892a mv s2,a0 + 2b20: f21fe06f j 1a40 + stbsp__cb_buf_clamp(i, fw); + 2b24: 87ca mv a5,s2 + fw -= i; + 2b26: 4901 li s2,0 + if ((((stbsp__uintptr)bf) & 3) == 0) + 2b28: b759 j 2aae + } else if (fl & STBSP__LEADINGPLUS) { + 2b2a: 002e7713 andi a4,t3,2 + 2b2e: 94070663 beqz a4,1c7a + sign[0] = 1; + 2b32: 670d lui a4,0x3 + 2b34: b0170713 addi a4,a4,-1279 # 2b01 + 2b38: 06e11423 sh a4,104(sp) + 2b3c: 93eff06f j 1c7a + if (((stbsp__uintptr)sn & 3) == 0) + 2b40: 87d6 mv a5,s5 + while (limit >= 4) { + 2b42: 470d li a4,3 + 2b44: 22d77763 bgeu a4,a3,2d72 + if ((v - 0x01010101) & (~v) & 0x80808080UL) + 2b48: feff05b7 lui a1,0xfeff0 + 2b4c: 80808637 lui a2,0x80808 + 2b50: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe86b7> + 2b54: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff80800838> + while (limit >= 4) { + 2b58: 480d li a6,3 + 2b5a: a029 j 2b64 + limit -= 4; + 2b5c: 36f1 addiw a3,a3,-4 + sn += 4; + 2b5e: 0791 addi a5,a5,4 + while (limit >= 4) { + 2b60: 20d87963 bgeu a6,a3,2d72 + stbsp__uint32 v = *(stbsp__uint32 *)sn; + 2b64: 4398 lw a4,0(a5) + if ((v - 0x01010101) & (~v) & 0x80808080UL) + 2b66: 00b7053b addw a0,a4,a1 + 2b6a: fff74713 not a4,a4 + 2b6e: 8f69 and a4,a4,a0 + 2b70: 8f71 and a4,a4,a2 + 2b72: 2701 sext.w a4,a4 + 2b74: d765 beqz a4,2b5c + 2b76: 02069713 slli a4,a3,0x20 + 2b7a: 9301 srli a4,a4,0x20 + 2b7c: 973e add a4,a4,a5 + 2b7e: a021 j 2b86 + ++sn; + 2b80: 0785 addi a5,a5,1 + while (limit && *sn) { + 2b82: 00e78663 beq a5,a4,2b8e + 2b86: 0007c683 lbu a3,0(a5) + 2b8a: fafd bnez a3,2b80 + 2b8c: 873e mv a4,a5 + return (stbsp__uint32)(sn - s); + 2b8e: 41570733 sub a4,a4,s5 + 2b92: 0007069b sext.w a3,a4 + if (pr < (stbsp__int32)l) + 2b96: fff6c793 not a5,a3 + 2b9a: 97fd srai a5,a5,0x3f + 2b9c: 8f7d and a4,a4,a5 + 2b9e: 0007079b sext.w a5,a4 + n = pr + lead[0] + tail[0] + tz; + 2ba2: 863e mv a2,a5 + pr -= l; + 2ba4: 9f15 subw a4,a4,a3 + return (stbsp__uint32)(sn - s); + 2ba6: d2eff06f j 20d4 + for (n = 1; n < l; n++) + 2baa: 4605 li a2,1 + 2bac: aed663e3 bltu a2,a3,2692 + 2bb0: 0c210613 addi a2,sp,194 + 2bb4: bcf5 j 26b0 + l = pr + 1; + 2bb6: 4685 li a3,1 + if ((l - 1) > (stbsp__uint32)pr) + 2bb8: 4501 li a0,0 + *s++ = sn[0]; + 2bba: 0c110613 addi a2,sp,193 + 2bbe: bccd j 26b0 + 2bc0: 4591 li a1,4 + 2bc2: 4f91 li t6,4 + n = (dp >= 100) ? 5 : 4; + 2bc4: 4e91 li t4,4 + 2bc6: be21 j 26de + 2bc8: 4a85 li s5,1 + 2bca: 80000737 lui a4,0x80000 + pr = 1; // default is 6 + 2bce: 4a05 li s4,1 + 2bd0: 920ff06f j 1cf0 + dp = (n64) ? -1022 : 0; + 2bd4: 4601 li a2,0 + 2bd6: c119 beqz a0,2bdc + 2bd8: c0200613 li a2,-1022 + *bits = b & ((((stbsp__uint64)1) << 52) - 1); + 2bdc: 872a mv a4,a0 + 2bde: a3aff06f j 1e18 + stbsp__chk_cb_buf(1); + 2be2: 2601 sext.w a2,a2 + 2be4: 1fe00793 li a5,510 + 2be8: f2c7c0e3 blt a5,a2,2b08 + 2bec: bd61 j 2a84 + tail[0] = (char)n; + 2bee: 4795 li a5,5 + tail[n] = '0' + dp % 10; + 2bf0: 06b10aa3 sb a1,117(sp) + tail[0] = (char)n; + 2bf4: 06f10823 sb a5,112(sp) + tail[n] = '0' + dp % 10; + 2bf8: 4815 li a6,5 + 2bfa: 4f95 li t6,5 + n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); + 2bfc: 4595 li a1,5 + 2bfe: b935 j 283a + l = pr + dp; + 2c00: 011786bb addw a3,a5,a7 + 2c04: d0b6 sw a3,96(sp) + 2c06: b6d5 j 27ea + s = (char *)"null"; + 2c08: 00002a97 auipc s5,0x2 + 2c0c: 498a8a93 addi s5,s5,1176 # 50a0 <_GLOBAL__sub_I__ZSt3cin+0xd8> + 2c10: c80ff06f j 2090 + } else if (fl & STBSP__LEADINGPLUS) { + 2c14: 002e7793 andi a5,t3,2 + 2c18: 1c079c63 bnez a5,2df0 + sign[0] = 0; + 2c1c: 4689 li a3,2 + 2c1e: 4a09 li s4,2 + 2c20: 4805 li a6,1 + 2c22: 9e8ff06f j 1e0a + sign[0] = 1; + 2c26: 670d lui a4,0x3 + 2c28: b0170713 addi a4,a4,-1279 # 2b01 + 2c2c: 06e11423 sh a4,104(sp) + 2c30: b86ff06f j 1fb6 + pr = 0; + 2c34: 4881 li a7,0 + 2c36: f1ffe06f j 1b54 + *s++ = '0'; + 2c3a: 03000713 li a4,48 + 2c3e: 0ce10023 sb a4,192(sp) + if (pr) + 2c42: 1a088c63 beqz a7,2dfa + *s++ = stbsp__period; + 2c46: 00004717 auipc a4,0x4 + 2c4a: dd674703 lbu a4,-554(a4) # 6a1c + n = -dp; + 2c4e: 40f007bb negw a5,a5 + *s++ = stbsp__period; + 2c52: 0ce100a3 sb a4,193(sp) + if ((stbsp__int32)n > pr) + 2c56: 0007871b sext.w a4,a5 + 2c5a: 00e8d363 bge a7,a4,2c60 + 2c5e: 87c6 mv a5,a7 + 2c60: 0007871b sext.w a4,a5 + if ((stbsp__int32)(l + n) > pr) + 2c64: 00d7833b addw t1,a5,a3 + 2c68: 883a mv a6,a4 + while (i) { + 2c6a: 0c210793 addi a5,sp,194 + *s++ = '0'; + 2c6e: 03000513 li a0,48 + while (i) { + 2c72: e711 bnez a4,2c7e + 2c74: a271 j 2e00 + if ((((stbsp__uintptr)s) & 3) == 0) + 2c76: 0037f613 andi a2,a5,3 + 2c7a: 18060563 beqz a2,2e04 + *s++ = '0'; + 2c7e: 85ba mv a1,a4 + 2c80: 00a78023 sb a0,0(a5) + --i; + 2c84: 377d addiw a4,a4,-1 + *s++ = '0'; + 2c86: 0785 addi a5,a5,1 + while (i) { + 2c88: f77d bnez a4,2c76 + if ((stbsp__int32)(l + n) > pr) + 2c8a: 0003071b sext.w a4,t1 + 2c8e: 4108863b subw a2,a7,a6 + 2c92: 00e8d563 bge a7,a4,2c9c + l = pr - n; + 2c96: 0006069b sext.w a3,a2 + 2c9a: d0b2 sw a2,96(sp) + while (i) { + 2c9c: c68d beqz a3,2cc6 + 2c9e: 7566 ld a0,120(sp) + 2ca0: 02069813 slli a6,a3,0x20 + 2ca4: 02085813 srli a6,a6,0x20 + 2ca8: 01078eb3 add t4,a5,a6 + 2cac: 85aa mv a1,a0 + 2cae: 873e mv a4,a5 + *s++ = *sn++; + 2cb0: 0005c883 lbu a7,0(a1) + 2cb4: 0705 addi a4,a4,1 + while (i) { + 2cb6: 0585 addi a1,a1,1 + *s++ = *sn++; + 2cb8: ff170fa3 sb a7,-1(a4) + while (i) { + 2cbc: ffd71ae3 bne a4,t4,2cb0 + 2cc0: 9542 add a0,a0,a6 + 2cc2: 97c2 add a5,a5,a6 + 2cc4: fcaa sd a0,120(sp) + l = (stbsp__uint32)(s - (num + 64)); + 2cc6: 0c010a93 addi s5,sp,192 + cs = 1 + (3 << 24); // how many tens did we write (for commas below) + 2cca: 030002b7 lui t0,0x3000 + tz = pr - (n + l); + 2cce: 40d608bb subw a7,a2,a3 + l = (stbsp__uint32)(s - (num + 64)); + 2cd2: 415787b3 sub a5,a5,s5 + cs = 1 + (3 << 24); // how many tens did we write (for commas below) + 2cd6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff87b9> + 2cd8: fbcff06f j 2494 + *--s = '0'; + 2cdc: 03000793 li a5,48 + 2ce0: fefa8fa3 sb a5,-1(s5) + l = 1; + 2ce4: 030002b7 lui t0,0x3000 + 2ce8: 4785 li a5,1 + 2cea: d0be sw a5,96(sp) + *--s = '0'; + 2cec: 1afd addi s5,s5,-1 + l = 1; + 2cee: 4605 li a2,1 + 2cf0: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff87b9> + 2cf2: 4685 li a3,1 + 2cf4: b9dd j 29ea + } else if (fl & STBSP__LEADINGSPACE) { + 2cf6: 004e7713 andi a4,t3,4 + 2cfa: e74d bnez a4,2da4 + } else if (fl & STBSP__LEADINGPLUS) { + 2cfc: 8b89 andi a5,a5,2 + 2cfe: efd9 bnez a5,2d9c + sign[0] = 0; + 2d00: 06010423 sb zero,104(sp) + 2d04: 4a01 li s4,0 + 2d06: b9c9 j 29d8 + if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) + 2d08: 051c addi a5,sp,640 + 2d0a: cafa89e3 beq s5,a5,29bc + ++s; + 2d0e: 0a85 addi s5,s5,1 + l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); + 2d10: 415786bb subw a3,a5,s5 + 2d14: b165 j 29bc + n = dp - n; + 2d16: 40ce87bb subw a5,t4,a2 + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + 2d1a: 12030e63 beqz t1,2e56 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 2d1e: 4511 li a0,4 + 2d20: 03000613 li a2,48 + *s++ = stbsp__comma; + 2d24: 00170693 addi a3,a4,1 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 2d28: 00030563 beqz t1,2d32 + 2d2c: 2585 addiw a1,a1,1 + 2d2e: 00a58963 beq a1,a0,2d40 + 2d32: 8736 mv a4,a3 + --n; + 2d34: 37fd addiw a5,a5,-1 + 2d36: fec70fa3 sb a2,-1(a4) + while (n) { + 2d3a: f7ed bnez a5,2d24 + 2d3c: f38ff06f j 2474 + 2d40: fe568fa3 sb t0,-1(a3) + *s++ = stbsp__comma; + 2d44: 0709 addi a4,a4,2 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 2d46: 4585 li a1,1 + 2d48: b7f5 j 2d34 + sign[0] = 0; + 2d4a: 06010423 sb zero,104(sp) + 2d4e: f1dfe06f j 1c6a + tail[idx + 1] = "_kMGT"[fl >> 24]; + 2d52: 00002697 auipc a3,0x2 + 2d56: 35e68693 addi a3,a3,862 # 50b0 <_GLOBAL__sub_I__ZSt3cin+0xe8> + 2d5a: 9736 add a4,a4,a3 + 2d5c: 00074683 lbu a3,0(a4) + 2d60: 1088 addi a0,sp,96 + 2d62: 22060713 addi a4,a2,544 + 2d66: 972a add a4,a4,a0 + 2d68: ded70823 sb a3,-528(a4) + idx++; + 2d6c: 8fb2 mv t6,a2 + 2d6e: fb0ff06f j 251e + while (limit && *sn) { + 2d72: e00692e3 bnez a3,2b76 + 2d76: bd19 j 2b8c + pr = (dp < (stbsp__int32)l) ? l - dp : 0; + 2d78: 0008071b sext.w a4,a6 + 2d7c: 86c2 mv a3,a6 + 2d7e: 88d2 mv a7,s4 + pr = -dp + ((pr > (stbsp__int32)l) ? (stbsp__int32) l : pr); + 2d80: 863a mv a2,a4 + 2d82: 00e8d363 bge a7,a4,2d88 + 2d86: 8646 mv a2,a7 + 2d88: 40f608bb subw a7,a2,a5 + 2d8c: 814ff06f j 1da0 + divisor = 1000.0f; + 2d90: 00003797 auipc a5,0x3 + 2d94: ac07b787 fld fa5,-1344(a5) # 5850 + 2d98: dd5fe06f j 1b6c + 2d9c: 678d lui a5,0x3 + 2d9e: b017879b addiw a5,a5,-1279 # 2b01 + 2da2: b13d j 29d0 + 2da4: 6789 lui a5,0x2 + 2da6: 2785 addiw a5,a5,1 # 2001 + 2da8: b125 j 29d0 + *s++ = stbsp__period; + 2daa: 00004517 auipc a0,0x4 + 2dae: c7254503 lbu a0,-910(a0) # 6a1c + sn = s; + 2db2: 0c210793 addi a5,sp,194 + n = pr; + 2db6: 0008869b sext.w a3,a7 + *s++ = stbsp__period; + 2dba: 0ca100a3 sb a0,193(sp) + sn = s; + 2dbe: fcbe sd a5,120(sp) + if (n > 13) + 2dc0: 4535 li a0,13 + n64 <<= 4; + 2dc2: 0712 slli a4,a4,0x4 + if (n > 13) + 2dc4: 8836 mv a6,a3 + 2dc6: 00d57363 bgeu a0,a3,2dcc + 2dca: 4835 li a6,13 + 2dcc: 0008051b sext.w a0,a6 + while (n--) { + 2dd0: 387d addiw a6,a6,-1 + if (pr > (stbsp__int32)n) + 2dd2: af1542e3 blt a0,a7,28b6 + tz = 0; + 2dd6: 4881 li a7,0 + 2dd8: b4cd j 28ba + while (n < l) { + 2dda: 87ba mv a5,a4 + 2ddc: bc1d j 2812 + tail[0] = (char)n; + 2dde: 478d li a5,3 + 2de0: 06f10823 sb a5,112(sp) + tail[n] = '0' + dp % 10; + 2de4: 06b109a3 sb a1,115(sp) + 2de8: 480d li a6,3 + 2dea: 4f8d li t6,3 + 2dec: 8e4ff06f j 1ed0 + 2df0: 678d lui a5,0x3 + 2df2: b017879b addiw a5,a5,-1279 # 2b01 + 2df6: 80aff06f j 1e00 + if (pr) + 2dfa: 8336 mv t1,a3 + *s++ = '0'; + 2dfc: 0c110793 addi a5,sp,193 + while (i) { + 2e00: 4801 li a6,0 + 2e02: b561 j 2c8a + while (i >= 4) { + 2e04: 460d li a2,3 + 2e06: 04e65663 bge a2,a4,2e52 + 2e0a: ffb5871b addiw a4,a1,-5 + 2e0e: 0027559b srliw a1,a4,0x2 + 2e12: 0015861b addiw a2,a1,1 + 2e16: 060a slli a2,a2,0x2 + *(stbsp__uint32 *)s = 0x30303030; + 2e18: 30303537 lui a0,0x30303 + 2e1c: 963e add a2,a2,a5 + 2e1e: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fb7e8> + 2e22: c388 sw a0,0(a5) + s += 4; + 2e24: 0791 addi a5,a5,4 + while (i >= 4) { + 2e26: fef61ee3 bne a2,a5,2e22 + 2e2a: 0025959b slliw a1,a1,0x2 + 2e2e: 9f0d subw a4,a4,a1 + while (i) { + 2e30: e4070de3 beqz a4,2c8a + *s++ = '0'; + 2e34: 03000513 li a0,48 + while (i) { + 2e38: 00f705bb addw a1,a4,a5 + *s++ = '0'; + 2e3c: 0605 addi a2,a2,1 + while (i) { + 2e3e: 00060e9b sext.w t4,a2 + *s++ = '0'; + 2e42: fea60fa3 sb a0,-1(a2) + while (i) { + 2e46: ffd59be3 bne a1,t4,2e3c + 2e4a: 1702 slli a4,a4,0x20 + 2e4c: 9301 srli a4,a4,0x20 + 2e4e: 97ba add a5,a5,a4 + 2e50: bd2d j 2c8a + while (i >= 4) { + 2e52: 863e mv a2,a5 + 2e54: b7c5 j 2e34 + if ((((stbsp__uintptr)s) & 3) == 0) + 2e56: 00377693 andi a3,a4,3 + 2e5a: ce81 beqz a3,2e72 + *s++ = '0'; + 2e5c: 03000693 li a3,48 + 2e60: 00d70023 sb a3,0(a4) + --n; + 2e64: 37fd addiw a5,a5,-1 + *s++ = '0'; + 2e66: 0705 addi a4,a4,1 + while (n) { + 2e68: e0078663 beqz a5,2474 + if ((((stbsp__uintptr)s) & 3) == 0) + 2e6c: 00377613 andi a2,a4,3 + 2e70: fa65 bnez a2,2e60 + while (n >= 4) { + 2e72: 468d li a3,3 + 2e74: eaf6f5e3 bgeu a3,a5,2d1e + 2e78: ffc7869b addiw a3,a5,-4 + 2e7c: 0026d69b srliw a3,a3,0x2 + 2e80: 2685 addiw a3,a3,1 + 2e82: 068a slli a3,a3,0x2 + *(stbsp__uint32 *)s = 0x30303030; + 2e84: 30303637 lui a2,0x30303 + 2e88: 96ba add a3,a3,a4 + 2e8a: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fb7e8> + 2e8e: c310 sw a2,0(a4) + s += 4; + 2e90: 0711 addi a4,a4,4 + while (n >= 4) { + 2e92: fed71ee3 bne a4,a3,2e8e + 2e96: 8b8d andi a5,a5,3 + while (n) { + 2e98: e80793e3 bnez a5,2d1e + 2e9c: dd8ff06f j 2474 + if (((stbsp__uintptr)sn & 3) == 0) + 2ea0: 87d6 mv a5,s5 + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + 2ea2: 56fd li a3,-1 + 2ea4: b155 j 2b48 + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + 2ea6: 5775 li a4,-3 + 2ea8: 00e7ce63 blt a5,a4,2ec4 + 2eac: f6fa4663 blt s4,a5,2618 + if (dp > 0) { + 2eb0: ecf054e3 blez a5,2d78 + 2eb4: 86c2 mv a3,a6 + pr = (dp < (stbsp__int32)l) ? l - dp : 0; + 2eb6: 4881 li a7,0 + 2eb8: ee9fe06f j 1da0 + while (i--) + 2ebc: fff7869b addiw a3,a5,-1 + 2ec0: 8722 mv a4,s0 + 2ec2: b105 j 2ae2 + if (pr > (stbsp__int32)l) + 2ec4: 0008071b sext.w a4,a6 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 2ec8: 7ae6 ld s5,120(sp) + if (pr > (stbsp__int32)l) + 2eca: 86c2 mv a3,a6 + 2ecc: 88d2 mv a7,s4 + 2ece: f7475d63 bge a4,s4,2648 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 2ed2: 8542 mv a0,a6 + 2ed4: f56ff06f j 262a + +0000000000002ed8 : +{ + 2ed8: 715d addi sp,sp,-80 + va_start(va, fmt); + 2eda: 02010313 addi t1,sp,32 +{ + 2ede: f032 sd a2,32(sp) + 2ee0: f436 sd a3,40(sp) + 2ee2: f83a sd a4,48(sp) + result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); + 2ee4: 86ae mv a3,a1 + 2ee6: 862a mv a2,a0 + 2ee8: 871a mv a4,t1 + 2eea: 4581 li a1,0 + 2eec: 4501 li a0,0 +{ + 2eee: ec06 sd ra,24(sp) + 2ef0: fc3e sd a5,56(sp) + 2ef2: e0c2 sd a6,64(sp) + 2ef4: e4c6 sd a7,72(sp) + va_start(va, fmt); + 2ef6: e41a sd t1,8(sp) + result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); + 2ef8: bc6fe0ef jal 12be +} + 2efc: 60e2 ld ra,24(sp) + 2efe: 6161 addi sp,sp,80 + 2f00: 8082 ret + +0000000000002f02 : +{ + 2f02: dd010113 addi sp,sp,-560 + 2f06: 22813023 sd s0,544(sp) + 2f0a: 20913c23 sd s1,536(sp) + 2f0e: 22113423 sd ra,552(sp) + 2f12: 84ae mv s1,a1 + 2f14: 842a mv s0,a0 + 2f16: 88b2 mv a7,a2 + 2f18: 8736 mv a4,a3 + if ( (count == 0) && !buf ) + 2f1a: e591 bnez a1,2f26 + 2f1c: c141 beqz a0,2f9c + c.buf = buf; + 2f1e: e02a sd a0,0(sp) + c.count = count; + 2f20: e402 sd zero,8(sp) + return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can + 2f22: 0810 addi a2,sp,16 + 2f24: a089 j 2f66 + if (len > c->count) + 2f26: 0015a593 slti a1,a1,1 + 2f2a: 40b005bb negw a1,a1 + 2f2e: 8de5 and a1,a1,s1 + c.buf = buf; + 2f30: e02a sd a0,0(sp) + c.count = count; + 2f32: c426 sw s1,8(sp) + c.length = 0; + 2f34: c602 sw zero,12(sp) + if (len > c->count) + 2f36: 2581 sext.w a1,a1 + if (len) { + 2f38: 0804d663 bgez s1,2fc4 + s = buf; + 2f3c: 4781 li a5,0 + if (buf != c->buf) { + 2f3e: c911 beqz a0,2f52 + *d++ = *s++; + 2f40: 0007c803 lbu a6,0(a5) + 2f44: 0785 addi a5,a5,1 + 2f46: 00f40533 add a0,s0,a5 + 2f4a: ff050fa3 sb a6,-1(a0) + } while (s < se); + 2f4e: feb7e9e3 bltu a5,a1,2f40 + c->count -= len; + 2f52: 40b486bb subw a3,s1,a1 + c->buf += len; + 2f56: 95a2 add a1,a1,s0 + 2f58: e02e sd a1,0(sp) + c->count -= len; + 2f5a: c436 sw a3,8(sp) + return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can + 2f5c: 1ff00793 li a5,511 + 2f60: fcd7d1e3 bge a5,a3,2f22 + 2f64: 6602 ld a2,0(sp) + STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__clamp_callback, &c, stbsp__clamp_callback(0,&c,0), fmt, va ); + 2f66: 86c6 mv a3,a7 + 2f68: 858a mv a1,sp + 2f6a: ffffd517 auipc a0,0xffffd + 2f6e: 21650513 addi a0,a0,534 # 180 + 2f72: b4cfe0ef jal 12be + l = (int)( c.buf - buf ); + 2f76: 6782 ld a5,0(sp) + 2f78: 9f81 subw a5,a5,s0 + if ( l >= count ) // should never be greater, only equal (or less) than count + 2f7a: 0097c463 blt a5,s1,2f82 + l = count - 1; + 2f7e: fff4879b addiw a5,s1,-1 + buf[l] = 0; + 2f82: 943e add s0,s0,a5 + 2f84: 00040023 sb zero,0(s0) +} + 2f88: 22813083 ld ra,552(sp) + 2f8c: 22013403 ld s0,544(sp) + 2f90: 4532 lw a0,12(sp) + 2f92: 21813483 ld s1,536(sp) + 2f96: 23010113 addi sp,sp,560 + 2f9a: 8082 ret + STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); + 2f9c: 86b2 mv a3,a2 + 2f9e: 858a mv a1,sp + 2fa0: 0810 addi a2,sp,16 + 2fa2: ffffd517 auipc a0,0xffffd + 2fa6: 22c50513 addi a0,a0,556 # 1ce + c.length = 0; + 2faa: c602 sw zero,12(sp) + STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); + 2fac: b12fe0ef jal 12be +} + 2fb0: 22813083 ld ra,552(sp) + 2fb4: 22013403 ld s0,544(sp) + 2fb8: 4532 lw a0,12(sp) + 2fba: 21813483 ld s1,536(sp) + 2fbe: 23010113 addi sp,sp,560 + 2fc2: 8082 ret + 2fc4: 86a6 mv a3,s1 + 2fc6: bf59 j 2f5c + +0000000000002fc8 : +{ + 2fc8: 715d addi sp,sp,-80 + va_start(va, fmt); + 2fca: 02810313 addi t1,sp,40 +{ + 2fce: f436 sd a3,40(sp) + result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); + 2fd0: 869a mv a3,t1 +{ + 2fd2: ec06 sd ra,24(sp) + 2fd4: f83a sd a4,48(sp) + 2fd6: fc3e sd a5,56(sp) + 2fd8: e0c2 sd a6,64(sp) + 2fda: e4c6 sd a7,72(sp) + va_start(va, fmt); + 2fdc: e41a sd t1,8(sp) + result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); + 2fde: f25ff0ef jal 2f02 +} + 2fe2: 60e2 ld ra,24(sp) + 2fe4: 6161 addi sp,sp,80 + 2fe6: 8082 ret + +0000000000002fe8 : +{ + 2fe8: 86ae mv a3,a1 + 2fea: 8732 mv a4,a2 + return STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); + 2fec: 4581 li a1,0 + 2fee: 862a mv a2,a0 + 2ff0: 4501 li a0,0 + 2ff2: accfe06f j 12be + +0000000000002ff6 : +{ + 2ff6: 7119 addi sp,sp,-128 + va_start(ap, format); + 2ff8: 05010313 addi t1,sp,80 +{ + 2ffc: e0a2 sd s0,64(sp) + 2ffe: fc26 sd s1,56(sp) + 3000: 842a mv s0,a0 + 3002: e8b2 sd a2,80(sp) + _vprintf_core(&ctx, format, ap); + 3004: 0808 addi a0,sp,16 + ctx.limit = size; + 3006: 54fd li s1,-1 + _vprintf_core(&ctx, format, ap); + 3008: 861a mv a2,t1 +{ + 300a: e486 sd ra,72(sp) + 300c: ecb6 sd a3,88(sp) + 300e: f0ba sd a4,96(sp) + 3010: f4be sd a5,104(sp) + 3012: f8c2 sd a6,112(sp) + 3014: fcc6 sd a7,120(sp) + va_start(ap, format); + 3016: e41a sd t1,8(sp) + ctx.buf = str; + 3018: e822 sd s0,16(sp) + ctx.limit = size; + 301a: ec26 sd s1,24(sp) + ctx.written = 0; + 301c: f002 sd zero,32(sp) + ctx.stream = NULL; + 301e: f402 sd zero,40(sp) + _vprintf_core(&ctx, format, ap); + 3020: 02c000ef jal 304c <_vprintf_core.constprop.0.isra.0> + if (ctx.written < size) + 3024: 7502 ld a0,32(sp) + 3026: 00950b63 beq a0,s1,303c + str[ctx.written] = '\0'; + 302a: 942a add s0,s0,a0 + 302c: 00040023 sb zero,0(s0) +} + 3030: 60a6 ld ra,72(sp) + 3032: 6406 ld s0,64(sp) + 3034: 74e2 ld s1,56(sp) + 3036: 2501 sext.w a0,a0 + 3038: 6109 addi sp,sp,128 + 303a: 8082 ret + str[size - 1] = '\0'; + 303c: fe040f23 sb zero,-2(s0) +} + 3040: 60a6 ld ra,72(sp) + 3042: 6406 ld s0,64(sp) + 3044: 74e2 ld s1,56(sp) + 3046: 2501 sext.w a0,a0 + 3048: 6109 addi sp,sp,128 + 304a: 8082 ret + +000000000000304c <_vprintf_core.constprop.0.isra.0>: +static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) + 304c: 7129 addi sp,sp,-320 + 304e: edee sd s11,216(sp) + 3050: fe06 sd ra,312(sp) + 3052: 8dae mv s11,a1 + while (*p) + 3054: 0005c583 lbu a1,0(a1) + 3058: cde9 beqz a1,3132 <_vprintf_core.constprop.0.isra.0+0xe6> + 305a: f626 sd s1,296(sp) + 305c: f24a sd s2,288(sp) + 305e: ee4e sd s3,280(sp) + 3060: e656 sd s5,264(sp) + 3062: f9e2 sd s8,240(sp) + 3064: fa22 sd s0,304(sp) + 3066: ea52 sd s4,272(sp) + 3068: e25a sd s6,256(sp) + 306a: fdde sd s7,248(sp) + 306c: f5e6 sd s9,232(sp) + 306e: f1ea sd s10,224(sp) + 3070: 84aa mv s1,a0 + 3072: 8c32 mv s8,a2 + if (*p != '%') + 3074: 02500a93 li s5,37 + 3078: 49c1 li s3,16 + 307a: 00002917 auipc s2,0x2 + 307e: 30a90913 addi s2,s2,778 # 5384 <_GLOBAL__sub_I__ZSt3cin+0x3bc> + 3082: a039 j 3090 <_vprintf_core.constprop.0.isra.0+0x44> + _out_char(ctx, spec); + 3084: 8526 mv a0,s1 + 3086: 952fe0ef jal 11d8 <_out_char> + while (*p) + 308a: 000dc583 lbu a1,0(s11) + 308e: c5d9 beqz a1,311c <_vprintf_core.constprop.0.isra.0+0xd0> + _out_char(ctx, *p++); + 3090: 0d85 addi s11,s11,1 + if (*p != '%') + 3092: ff5599e3 bne a1,s5,3084 <_vprintf_core.constprop.0.isra.0+0x38> + int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0; + 3096: 4501 li a0,0 + 3098: 4881 li a7,0 + 309a: 4581 li a1,0 + 309c: 4b01 li s6,0 + 309e: 4a01 li s4,0 + if (*p == '-') + 30a0: 000dcc83 lbu s9,0(s11) + 30a4: fe0c871b addiw a4,s9,-32 + 30a8: 0ff77713 zext.b a4,a4 + 30ac: 00e9e763 bltu s3,a4,30ba <_vprintf_core.constprop.0.isra.0+0x6e> + 30b0: 070a slli a4,a4,0x2 + 30b2: 974a add a4,a4,s2 + 30b4: 4318 lw a4,0(a4) + 30b6: 974a add a4,a4,s2 + 30b8: 8702 jr a4 + if (*p == '*') + 30ba: 02a00793 li a5,42 + 30be: 16fc9c63 bne s9,a5,3236 <_vprintf_core.constprop.0.isra.0+0x1ea> + width = va_arg(ap, int); + 30c2: 000c2403 lw s0,0(s8) + 30c6: 0c21 addi s8,s8,8 + if (width < 0) + 30c8: 00045563 bgez s0,30d2 <_vprintf_core.constprop.0.isra.0+0x86> + width = -width; + 30cc: 4080043b negw s0,s0 + flag_left = 1; + 30d0: 4a05 li s4,1 + while (*p >= '0' && *p <= '9') + 30d2: 001dcc83 lbu s9,1(s11) + p++; + 30d6: 0d85 addi s11,s11,1 + if (*p == '.') + 30d8: 02e00793 li a5,46 + int precision = -1; + 30dc: 5bfd li s7,-1 + if (*p == '.') + 30de: 18fc8a63 beq s9,a5,3272 <_vprintf_core.constprop.0.isra.0+0x226> + if (*p == 'l') + 30e2: 06c00693 li a3,108 + 30e6: 8666 mv a2,s9 + 30e8: 1adc8663 beq s9,a3,3294 <_vprintf_core.constprop.0.isra.0+0x248> + else if (*p == 'z') + 30ec: 07a00693 li a3,122 + p++; + 30f0: 0d85 addi s11,s11,1 + else if (*p == 'z') + 30f2: 24dc8163 beq s9,a3,3334 <_vprintf_core.constprop.0.isra.0+0x2e8> + if (!spec) + 30f6: 06400693 li a3,100 + 30fa: 4adc8163 beq s9,a3,359c <_vprintf_core.constprop.0.isra.0+0x550> + 30fe: 06400693 li a3,100 + int len_mod = 0; + 3102: 4e81 li t4,0 + 3104: 1b96e663 bltu a3,s9,32b0 <_vprintf_core.constprop.0.isra.0+0x264> + 3108: 04700693 li a3,71 + 310c: 2796e463 bltu a3,s9,3374 <_vprintf_core.constprop.0.isra.0+0x328> + 3110: 04400693 li a3,68 + 3114: 0596e363 bltu a3,s9,315a <_vprintf_core.constprop.0.isra.0+0x10e> + 3118: 240c9363 bnez s9,335e <_vprintf_core.constprop.0.isra.0+0x312> + 311c: 7452 ld s0,304(sp) + 311e: 74b2 ld s1,296(sp) + 3120: 7912 ld s2,288(sp) + 3122: 69f2 ld s3,280(sp) + 3124: 6a52 ld s4,272(sp) + 3126: 6ab2 ld s5,264(sp) + 3128: 6b12 ld s6,256(sp) + 312a: 7bee ld s7,248(sp) + 312c: 7c4e ld s8,240(sp) + 312e: 7cae ld s9,232(sp) + 3130: 7d0e ld s10,224(sp) +} + 3132: 70f2 ld ra,312(sp) + 3134: 6dee ld s11,216(sp) + 3136: 6131 addi sp,sp,320 + 3138: 8082 ret + if (*p == '-') + 313a: 4585 li a1,1 + p++; + 313c: 0d85 addi s11,s11,1 + if (*p == '-') + 313e: b78d j 30a0 <_vprintf_core.constprop.0.isra.0+0x54> + 3140: 4505 li a0,1 + p++; + 3142: 0d85 addi s11,s11,1 + while (1) + 3144: bfb1 j 30a0 <_vprintf_core.constprop.0.isra.0+0x54> + if (*p == '-') + 3146: 4885 li a7,1 + p++; + 3148: 0d85 addi s11,s11,1 + while (1) + 314a: bf99 j 30a0 <_vprintf_core.constprop.0.isra.0+0x54> + if (*p == '-') + 314c: 4b05 li s6,1 + p++; + 314e: 0d85 addi s11,s11,1 + while (1) + 3150: bf81 j 30a0 <_vprintf_core.constprop.0.isra.0+0x54> + if (*p == '-') + 3152: 4a05 li s4,1 + p++; + 3154: 0d85 addi s11,s11,1 + while (1) + 3156: b7a9 j 30a0 <_vprintf_core.constprop.0.isra.0+0x54> + char spec = *p++; + 3158: 8dbe mv s11,a5 + fmt_tmp[f_idx++] = '%'; + 315a: 02500693 li a3,37 + 315e: 02d10823 sb a3,48(sp) + 3162: 4d05 li s10,1 + if (flag_left) + 3164: 000a0763 beqz s4,3172 <_vprintf_core.constprop.0.isra.0+0x126> + fmt_tmp[f_idx++] = '-'; + 3168: 02d00693 li a3,45 + 316c: 02d108a3 sb a3,49(sp) + 3170: 4d09 li s10,2 + if (flag_zero) + 3172: 000b0c63 beqz s6,318a <_vprintf_core.constprop.0.isra.0+0x13e> + fmt_tmp[f_idx++] = '0'; + 3176: 0c0d0793 addi a5,s10,192 + 317a: 0818 addi a4,sp,16 + 317c: 00e786b3 add a3,a5,a4 + 3180: 03000613 li a2,48 + 3184: f6c68023 sb a2,-160(a3) + 3188: 2d05 addiw s10,s10,1 + if (flag_plus) + 318a: c999 beqz a1,31a0 <_vprintf_core.constprop.0.isra.0+0x154> + fmt_tmp[f_idx++] = '+'; + 318c: 0c0d0793 addi a5,s10,192 + 3190: 0818 addi a4,sp,16 + 3192: 00e786b3 add a3,a5,a4 + 3196: 02b00613 li a2,43 + 319a: f6c68023 sb a2,-160(a3) + 319e: 2d05 addiw s10,s10,1 + if (flag_space) + 31a0: 00088c63 beqz a7,31b8 <_vprintf_core.constprop.0.isra.0+0x16c> + fmt_tmp[f_idx++] = ' '; + 31a4: 0c0d0793 addi a5,s10,192 + 31a8: 0818 addi a4,sp,16 + 31aa: 00e786b3 add a3,a5,a4 + 31ae: 02000613 li a2,32 + 31b2: f6c68023 sb a2,-160(a3) + 31b6: 2d05 addiw s10,s10,1 + if (flag_hash) + 31b8: c919 beqz a0,31ce <_vprintf_core.constprop.0.isra.0+0x182> + fmt_tmp[f_idx++] = '#'; + 31ba: 0c0d0793 addi a5,s10,192 + 31be: 0818 addi a4,sp,16 + 31c0: 00e786b3 add a3,a5,a4 + 31c4: 02300613 li a2,35 + 31c8: f6c68023 sb a2,-160(a3) + 31cc: 2d05 addiw s10,s10,1 + if (width > 0) + 31ce: 03010a13 addi s4,sp,48 + 31d2: 28804563 bgtz s0,345c <_vprintf_core.constprop.0.isra.0+0x410> + if (precision >= 0) + 31d6: 260bd763 bgez s7,3444 <_vprintf_core.constprop.0.isra.0+0x3f8> + fmt_tmp[f_idx++] = spec; + 31da: 0c0d0793 addi a5,s10,192 + 31de: 0818 addi a4,sp,16 + 31e0: 00e78633 add a2,a5,a4 + stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); + 31e4: 000c3683 ld a3,0(s8) + fmt_tmp[f_idx] = '\0'; + 31e8: 001d071b addiw a4,s10,1 + 31ec: 0c070793 addi a5,a4,192 + 31f0: 0818 addi a4,sp,16 + fmt_tmp[f_idx++] = spec; + 31f2: f7960023 sb s9,-160(a2) + fmt_tmp[f_idx] = '\0'; + 31f6: 973e add a4,a4,a5 + stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); + 31f8: 08000593 li a1,128 + 31fc: 8652 mv a2,s4 + 31fe: 0888 addi a0,sp,80 + fmt_tmp[f_idx] = '\0'; + 3200: f6070023 sb zero,-160(a4) + stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); + 3204: dc5ff0ef jal 2fc8 + for (int i = 0; f_buf[i] != '\0'; i++) + 3208: 05014583 lbu a1,80(sp) + double f_val = va_arg(ap, double); + 320c: 0c21 addi s8,s8,8 + for (int i = 0; f_buf[i] != '\0'; i++) + 320e: 05110413 addi s0,sp,81 + 3212: e6058ce3 beqz a1,308a <_vprintf_core.constprop.0.isra.0+0x3e> + _out_char(ctx, f_buf[i]); + 3216: 8526 mv a0,s1 + 3218: fc1fd0ef jal 11d8 <_out_char> + for (int i = 0; f_buf[i] != '\0'; i++) + 321c: 00044583 lbu a1,0(s0) + 3220: 0405 addi s0,s0,1 + 3222: e60584e3 beqz a1,308a <_vprintf_core.constprop.0.isra.0+0x3e> + _out_char(ctx, f_buf[i]); + 3226: 8526 mv a0,s1 + 3228: fb1fd0ef jal 11d8 <_out_char> + for (int i = 0; f_buf[i] != '\0'; i++) + 322c: 00044583 lbu a1,0(s0) + 3230: 0405 addi s0,s0,1 + 3232: f1f5 bnez a1,3216 <_vprintf_core.constprop.0.isra.0+0x1ca> + 3234: bd99 j 308a <_vprintf_core.constprop.0.isra.0+0x3e> + while (*p >= '0' && *p <= '9') + 3236: fd0c869b addiw a3,s9,-48 + 323a: 0ff6f313 zext.b t1,a3 + 323e: 4725 li a4,9 + int width = 0; + 3240: 4401 li s0,0 + while (*p >= '0' && *p <= '9') + 3242: 4625 li a2,9 + 3244: e8676ae3 bltu a4,t1,30d8 <_vprintf_core.constprop.0.isra.0+0x8c> + 3248: 001dcc83 lbu s9,1(s11) + width = width * 10 + (*p - '0'); + 324c: 0024171b slliw a4,s0,0x2 + 3250: 9f21 addw a4,a4,s0 + 3252: 0017171b slliw a4,a4,0x1 + 3256: 00e6843b addw s0,a3,a4 + while (*p >= '0' && *p <= '9') + 325a: fd0c869b addiw a3,s9,-48 + 325e: 0ff6f713 zext.b a4,a3 + p++; + 3262: 0d85 addi s11,s11,1 + while (*p >= '0' && *p <= '9') + 3264: fee672e3 bgeu a2,a4,3248 <_vprintf_core.constprop.0.isra.0+0x1fc> + if (*p == '.') + 3268: 02e00793 li a5,46 + int precision = -1; + 326c: 5bfd li s7,-1 + if (*p == '.') + 326e: e6fc9ae3 bne s9,a5,30e2 <_vprintf_core.constprop.0.isra.0+0x96> + if (*p == '*') + 3272: 001dcc83 lbu s9,1(s11) + 3276: 02a00793 li a5,42 + 327a: 16fc9f63 bne s9,a5,33f8 <_vprintf_core.constprop.0.isra.0+0x3ac> + while (*p >= '0' && *p <= '9') + 327e: 002dcc83 lbu s9,2(s11) + if (*p == 'l') + 3282: 06c00693 li a3,108 + precision = va_arg(ap, int); + 3286: 000c2b83 lw s7,0(s8) + p++; + 328a: 0d89 addi s11,s11,2 + precision = va_arg(ap, int); + 328c: 0c21 addi s8,s8,8 + if (*p == 'l') + 328e: 8666 mv a2,s9 + 3290: e4dc9ee3 bne s9,a3,30ec <_vprintf_core.constprop.0.isra.0+0xa0> + if (*p == 'l') + 3294: 001dcc83 lbu s9,1(s11) + 3298: 08cc8d63 beq s9,a2,3332 <_vprintf_core.constprop.0.isra.0+0x2e6> + char spec = *p++; + 329c: 06400693 li a3,100 + 32a0: 0d89 addi s11,s11,2 + if (!spec) + 32a2: 4cdc8c63 beq s9,a3,377a <_vprintf_core.constprop.0.isra.0+0x72e> + 32a6: 06400693 li a3,100 + len_mod = 1; + 32aa: 4e85 li t4,1 + 32ac: e596fee3 bgeu a3,s9,3108 <_vprintf_core.constprop.0.isra.0+0xbc> + 32b0: f9bc869b addiw a3,s9,-101 + 32b4: 0ff6f693 zext.b a3,a3 + 32b8: 464d li a2,19 + 32ba: 12d66863 bltu a2,a3,33ea <_vprintf_core.constprop.0.isra.0+0x39e> + 32be: 4e05 li t3,1 + 32c0: 00091637 lui a2,0x91 + 32c4: 00de1333 sll t1,t3,a3 + 32c8: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x88fc8> + 32cc: 00c37633 and a2,t1,a2 + 32d0: 1a061463 bnez a2,3478 <_vprintf_core.constprop.0.isra.0+0x42c> + 32d4: 00737313 andi t1,t1,7 + 32d8: e80311e3 bnez t1,315a <_vprintf_core.constprop.0.isra.0+0x10e> + 32dc: 4639 li a2,14 + 32de: 10c69663 bne a3,a2,33ea <_vprintf_core.constprop.0.isra.0+0x39e> + const char *s = va_arg(ap, char *); + 32e2: 000c3c83 ld s9,0(s8) + if (!s) + 32e6: 420c8863 beqz s9,3716 <_vprintf_core.constprop.0.isra.0+0x6ca> + while (*tmp && (precision < 0 || len < precision)) + 32ea: 000cc683 lbu a3,0(s9) + 32ee: 38068863 beqz a3,367e <_vprintf_core.constprop.0.isra.0+0x632> + const char *tmp = s; + 32f2: 8666 mv a2,s9 + int len = 0; + 32f4: 4681 li a3,0 + while (*tmp && (precision < 0 || len < precision)) + 32f6: 00db8863 beq s7,a3,3306 <_vprintf_core.constprop.0.isra.0+0x2ba> + 32fa: 00164583 lbu a1,1(a2) + len++; + 32fe: 2685 addiw a3,a3,1 + tmp++; + 3300: 0605 addi a2,a2,1 + while (*tmp && (precision < 0 || len < precision)) + 3302: f9f5 bnez a1,32f6 <_vprintf_core.constprop.0.isra.0+0x2aa> + 3304: 8bb6 mv s7,a3 + int padding = (width > len) ? width - len : 0; + 3306: 268bc563 blt s7,s0,3570 <_vprintf_core.constprop.0.isra.0+0x524> + for (int i = 0; i < len; i++) + 330a: 4401 li s0,0 + 330c: 020b8163 beqz s7,332e <_vprintf_core.constprop.0.isra.0+0x2e2> + 3310: 4d01 li s10,0 + _out_char(ctx, s[i]); + 3312: 01ac86b3 add a3,s9,s10 + 3316: 0006c583 lbu a1,0(a3) + 331a: 8526 mv a0,s1 + for (int i = 0; i < len; i++) + 331c: 0d05 addi s10,s10,1 + _out_char(ctx, s[i]); + 331e: ebbfd0ef jal 11d8 <_out_char> + for (int i = 0; i < len; i++) + 3322: 000d069b sext.w a3,s10 + 3326: ff76c6e3 blt a3,s7,3312 <_vprintf_core.constprop.0.isra.0+0x2c6> + if (flag_left) + 332a: 260a1463 bnez s4,3592 <_vprintf_core.constprop.0.isra.0+0x546> + const char *s = va_arg(ap, char *); + 332e: 0c21 addi s8,s8,8 + 3330: bba9 j 308a <_vprintf_core.constprop.0.isra.0+0x3e> + p++; + 3332: 0d89 addi s11,s11,2 + char spec = *p++; + 3334: 000dcc83 lbu s9,0(s11) + 3338: 06400693 li a3,100 + 333c: 001d8793 addi a5,s11,1 + if (!spec) + 3340: 3edc8063 beq s9,a3,3720 <_vprintf_core.constprop.0.isra.0+0x6d4> + 3344: 0796ea63 bltu a3,s9,33b8 <_vprintf_core.constprop.0.isra.0+0x36c> + 3348: 04700693 li a3,71 + 334c: 0f96e263 bltu a3,s9,3430 <_vprintf_core.constprop.0.isra.0+0x3e4> + 3350: 04400693 li a3,68 + 3354: e196e2e3 bltu a3,s9,3158 <_vprintf_core.constprop.0.isra.0+0x10c> + 3358: dc0c82e3 beqz s9,311c <_vprintf_core.constprop.0.isra.0+0xd0> + char spec = *p++; + 335c: 8dbe mv s11,a5 + _out_char(ctx, '%'); + 335e: 02500593 li a1,37 + 3362: 8526 mv a0,s1 + 3364: e75fd0ef jal 11d8 <_out_char> + if (spec != '%') + 3368: 02500713 li a4,37 + 336c: d0ec8fe3 beq s9,a4,308a <_vprintf_core.constprop.0.isra.0+0x3e> + _out_char(ctx, spec); + 3370: 85e6 mv a1,s9 + 3372: bb09 j 3084 <_vprintf_core.constprop.0.isra.0+0x38> + 3374: 05800693 li a3,88 + 3378: 2edc8263 beq s9,a3,365c <_vprintf_core.constprop.0.isra.0+0x610> + 337c: 06300713 li a4,99 + 3380: 06ec9563 bne s9,a4,33ea <_vprintf_core.constprop.0.isra.0+0x39e> + char c = (char)va_arg(ap, int); + 3384: 000c4c83 lbu s9,0(s8) + int padding = (width > 1) ? width - 1 : 0; + 3388: 8722 mv a4,s0 + 338a: 00804363 bgtz s0,3390 <_vprintf_core.constprop.0.isra.0+0x344> + 338e: 4705 li a4,1 + 3390: fff7041b addiw s0,a4,-1 + if (!flag_left) + 3394: 3c0a0463 beqz s4,375c <_vprintf_core.constprop.0.isra.0+0x710> + _out_char(ctx, c); + 3398: 85e6 mv a1,s9 + 339a: 8526 mv a0,s1 + 339c: e3dfd0ef jal 11d8 <_out_char> + for (int i = 0; i < padding; i++) + 33a0: 4a01 li s4,0 + 33a2: d451 beqz s0,332e <_vprintf_core.constprop.0.isra.0+0x2e2> + _out_char(ctx, ' '); + 33a4: 02000593 li a1,32 + 33a8: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 33aa: 2a05 addiw s4,s4,1 + _out_char(ctx, ' '); + 33ac: e2dfd0ef jal 11d8 <_out_char> + for (int i = 0; i < padding; i++) + 33b0: ff441ae3 bne s0,s4,33a4 <_vprintf_core.constprop.0.isra.0+0x358> + const char *s = va_arg(ap, char *); + 33b4: 0c21 addi s8,s8,8 + 33b6: b9d1 j 308a <_vprintf_core.constprop.0.isra.0+0x3e> + 33b8: f9bc861b addiw a2,s9,-101 + 33bc: 0ff67613 zext.b a2,a2 + 33c0: 46cd li a3,19 + 33c2: 40c6e963 bltu a3,a2,37d4 <_vprintf_core.constprop.0.isra.0+0x788> + 33c6: 00091337 lui t1,0x91 + 33ca: 4685 li a3,1 + 33cc: 00c696b3 sll a3,a3,a2 + 33d0: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x88fc8> + 33d4: 0066f333 and t1,a3,t1 + 33d8: 34031c63 bnez t1,3730 <_vprintf_core.constprop.0.isra.0+0x6e4> + 33dc: 8a9d andi a3,a3,7 + 33de: d6069de3 bnez a3,3158 <_vprintf_core.constprop.0.isra.0+0x10c> + 33e2: 46b9 li a3,14 + char spec = *p++; + 33e4: 8dbe mv s11,a5 + 33e6: eed60ee3 beq a2,a3,32e2 <_vprintf_core.constprop.0.isra.0+0x296> + _out_char(ctx, '%'); + 33ea: 02500593 li a1,37 + 33ee: 8526 mv a0,s1 + 33f0: de9fd0ef jal 11d8 <_out_char> + _out_char(ctx, spec); + 33f4: 85e6 mv a1,s9 + 33f6: b179 j 3084 <_vprintf_core.constprop.0.isra.0+0x38> + while (*p >= '0' && *p <= '9') + 33f8: fd0c869b addiw a3,s9,-48 + 33fc: 0ff6fe13 zext.b t3,a3 + 3400: 4625 li a2,9 + p++; + 3402: 0d85 addi s11,s11,1 + precision = 0; + 3404: 4b81 li s7,0 + while (*p >= '0' && *p <= '9') + 3406: 4325 li t1,9 + 3408: cdc66de3 bltu a2,t3,30e2 <_vprintf_core.constprop.0.isra.0+0x96> + precision = precision * 10 + (*p - '0'); + 340c: 002b961b slliw a2,s7,0x2 + while (*p >= '0' && *p <= '9') + 3410: 001dcc83 lbu s9,1(s11) + precision = precision * 10 + (*p - '0'); + 3414: 0176073b addw a4,a2,s7 + 3418: 0017171b slliw a4,a4,0x1 + 341c: 00e68bbb addw s7,a3,a4 + while (*p >= '0' && *p <= '9') + 3420: fd0c869b addiw a3,s9,-48 + 3424: 0ff6f613 zext.b a2,a3 + p++; + 3428: 0d85 addi s11,s11,1 + while (*p >= '0' && *p <= '9') + 342a: fec371e3 bgeu t1,a2,340c <_vprintf_core.constprop.0.isra.0+0x3c0> + 342e: b955 j 30e2 <_vprintf_core.constprop.0.isra.0+0x96> + 3430: 05800693 li a3,88 + 3434: 3cdc8d63 beq s9,a3,380e <_vprintf_core.constprop.0.isra.0+0x7c2> + 3438: 06300713 li a4,99 + char spec = *p++; + 343c: 8dbe mv s11,a5 + 343e: f4ec83e3 beq s9,a4,3384 <_vprintf_core.constprop.0.isra.0+0x338> + 3442: b765 j 33ea <_vprintf_core.constprop.0.isra.0+0x39e> + f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision); + 3444: 01aa0533 add a0,s4,s10 + 3448: 865e mv a2,s7 + 344a: 00002597 auipc a1,0x2 + 344e: cbe58593 addi a1,a1,-834 # 5108 <_GLOBAL__sub_I__ZSt3cin+0x140> + 3452: ba5ff0ef jal 2ff6 + 3456: 00ad0d3b addw s10,s10,a0 + 345a: b341 j 31da <_vprintf_core.constprop.0.isra.0+0x18e> + f_idx += sprintf(&fmt_tmp[f_idx], "%d", width); + 345c: 01aa0533 add a0,s4,s10 + 3460: 8622 mv a2,s0 + 3462: 00002597 auipc a1,0x2 + 3466: c9e58593 addi a1,a1,-866 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x138> + 346a: b8dff0ef jal 2ff6 + 346e: 00ad0d3b addw s10,s10,a0 + if (precision >= 0) + 3472: d60bc4e3 bltz s7,31da <_vprintf_core.constprop.0.isra.0+0x18e> + 3476: b7f9 j 3444 <_vprintf_core.constprop.0.isra.0+0x3f8> + int is_signed = (spec == 'd' || spec == 'i'); + 3478: 06900693 li a3,105 + 347c: 10dc8e63 beq s9,a3,3598 <_vprintf_core.constprop.0.isra.0+0x54c> + val = (uint64)va_arg(ap, void *); + 3480: 008c0793 addi a5,s8,8 + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 3484: 07800693 li a3,120 + val = (uint64)va_arg(ap, void *); + 3488: e43e sd a5,8(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 348a: 38dc9d63 bne s9,a3,3824 <_vprintf_core.constprop.0.isra.0+0x7d8> + else if (len_mod == 1) + 348e: 33ce8963 beq t4,t3,37c0 <_vprintf_core.constprop.0.isra.0+0x774> + val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); + 3492: 000c6e03 lwu t3,0(s8) + 3496: 85f6 mv a1,t4 + 3498: e002 sd zero,0(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 349a: 4341 li t1,16 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 349c: 00002f97 auipc t6,0x2 + 34a0: c34f8f93 addi t6,t6,-972 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + if (val == 0) + 34a4: 120e0363 beqz t3,35ca <_vprintf_core.constprop.0.isra.0+0x57e> + 34a8: 01010293 addi t0,sp,16 + sign_char = '-'; + 34ac: 8616 mv a2,t0 + 34ae: 86f2 mv a3,t3 + buf[i++] = digits[val % base]; + 34b0: 0266f8b3 remu a7,a3,t1 + 34b4: 8f32 mv t5,a2 + while (val != 0) + 34b6: 0605 addi a2,a2,1 + 34b8: 8eb6 mv t4,a3 + buf[i++] = digits[val % base]; + 34ba: 98fe add a7,a7,t6 + 34bc: 0008c883 lbu a7,0(a7) + val /= base; + 34c0: 0266d6b3 divu a3,a3,t1 + buf[i++] = digits[val % base]; + 34c4: ff160fa3 sb a7,-1(a2) + while (val != 0) + 34c8: fe6ef4e3 bgeu t4,t1,34b0 <_vprintf_core.constprop.0.isra.0+0x464> + buf[i++] = digits[val % base]; + 34cc: 405f0f3b subw t5,t5,t0 + 34d0: 2f05 addiw t5,t5,1 + if (precision >= 0) + 34d2: 100bc363 bltz s7,35d8 <_vprintf_core.constprop.0.isra.0+0x58c> + int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; + 34d6: 1d7f4d63 blt t5,s7,36b0 <_vprintf_core.constprop.0.isra.0+0x664> + if (precision == 0 && val == 0) + 34da: 340b9163 bnez s7,381c <_vprintf_core.constprop.0.isra.0+0x7d0> + 34de: 200e0763 beqz t3,36ec <_vprintf_core.constprop.0.isra.0+0x6a0> + for (int i = digit_len - 1; i >= 0; i--) + 34e2: ffff0c1b addiw s8,t5,-1 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 34e6: 07000693 li a3,112 + for (int i = digit_len - 1; i >= 0; i--) + 34ea: 8662 mv a2,s8 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 34ec: 28dc8e63 beq s9,a3,3788 <_vprintf_core.constprop.0.isra.0+0x73c> + 34f0: 2a051663 bnez a0,379c <_vprintf_core.constprop.0.isra.0+0x750> + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + 34f4: 00bf05bb addw a1,t5,a1 + 34f8: 8d52 mv s10,s4 + 34fa: 4b01 li s6,0 + char *prefix_str = NULL; + 34fc: 4c81 li s9,0 + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + 34fe: 1085d263 bge a1,s0,3602 <_vprintf_core.constprop.0.isra.0+0x5b6> + 3502: 9c0d subw s0,s0,a1 + if (!flag_left && !flag_zero) + 3504: 100d0a63 beqz s10,3618 <_vprintf_core.constprop.0.isra.0+0x5cc> + if (sign_char) + 3508: 6782 ld a5,0(sp) + 350a: 10079263 bnez a5,360e <_vprintf_core.constprop.0.isra.0+0x5c2> + if (prefix_str) + 350e: 000c8c63 beqz s9,3526 <_vprintf_core.constprop.0.isra.0+0x4da> + _out_char(ctx, prefix_str[0]); + 3512: 000cc583 lbu a1,0(s9) + 3516: 8526 mv a0,s1 + 3518: cc1fd0ef jal 11d8 <_out_char> + _out_char(ctx, prefix_str[1]); + 351c: 001cc583 lbu a1,1(s9) + 3520: 8526 mv a0,s1 + 3522: cb7fd0ef jal 11d8 <_out_char> + int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0); + 3526: 180b0263 beqz s6,36aa <_vprintf_core.constprop.0.isra.0+0x65e> + 352a: 100a1863 bnez s4,363a <_vprintf_core.constprop.0.isra.0+0x5ee> + 352e: 008b8bbb addw s7,s7,s0 + for (int i = 0; i < total_zeros; i++) + 3532: 2a0b8363 beqz s7,37d8 <_vprintf_core.constprop.0.isra.0+0x78c> + 3536: 4c81 li s9,0 + _out_char(ctx, '0'); + 3538: 03000593 li a1,48 + 353c: 8526 mv a0,s1 + for (int i = 0; i < total_zeros; i++) + 353e: 2c85 addiw s9,s9,1 + _out_char(ctx, '0'); + 3540: c99fd0ef jal 11d8 <_out_char> + for (int i = 0; i < total_zeros; i++) + 3544: ff7c9ae3 bne s9,s7,3538 <_vprintf_core.constprop.0.isra.0+0x4ec> + for (int i = digit_len - 1; i >= 0; i--) + 3548: 57fd li a5,-1 + 354a: 00fc0f63 beq s8,a5,3568 <_vprintf_core.constprop.0.isra.0+0x51c> + 354e: 01010c93 addi s9,sp,16 + 3552: 9ce2 add s9,s9,s8 + 3554: 00f10c13 addi s8,sp,15 + _out_char(ctx, num_buf[i]); + 3558: 000cc583 lbu a1,0(s9) + 355c: 8526 mv a0,s1 + for (int i = digit_len - 1; i >= 0; i--) + 355e: 1cfd addi s9,s9,-1 + _out_char(ctx, num_buf[i]); + 3560: c79fd0ef jal 11d8 <_out_char> + for (int i = digit_len - 1; i >= 0; i--) + 3564: ff9c1ae3 bne s8,s9,3558 <_vprintf_core.constprop.0.isra.0+0x50c> + if (flag_left) + 3568: 0c0a1e63 bnez s4,3644 <_vprintf_core.constprop.0.isra.0+0x5f8> + char spec = *p++; + 356c: 6c22 ld s8,8(sp) + 356e: be31 j 308a <_vprintf_core.constprop.0.isra.0+0x3e> + int padding = (width > len) ? width - len : 0; + 3570: 4174043b subw s0,s0,s7 + if (!flag_left) + 3574: 100a0a63 beqz s4,3688 <_vprintf_core.constprop.0.isra.0+0x63c> + for (int i = 0; i < len; i++) + 3578: d80b9ce3 bnez s7,3310 <_vprintf_core.constprop.0.isra.0+0x2c4> + for (int i = 0; i < padding; i++) + 357c: 4a01 li s4,0 + _out_char(ctx, ' '); + 357e: 02000593 li a1,32 + 3582: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 3584: 2a05 addiw s4,s4,1 + _out_char(ctx, ' '); + 3586: c53fd0ef jal 11d8 <_out_char> + for (int i = 0; i < padding; i++) + 358a: ff441ae3 bne s0,s4,357e <_vprintf_core.constprop.0.isra.0+0x532> + const char *s = va_arg(ap, char *); + 358e: 0c21 addi s8,s8,8 + 3590: bced j 308a <_vprintf_core.constprop.0.isra.0+0x3e> + for (int i = 0; i < padding; i++) + 3592: f46d bnez s0,357c <_vprintf_core.constprop.0.isra.0+0x530> + const char *s = va_arg(ap, char *); + 3594: 0c21 addi s8,s8,8 + 3596: bcd5 j 308a <_vprintf_core.constprop.0.isra.0+0x3e> + else if (len_mod == 1) + 3598: 1fce8163 beq t4,t3,377a <_vprintf_core.constprop.0.isra.0+0x72e> + val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); + 359c: 000c2e03 lw t3,0(s8) + 35a0: 008c0793 addi a5,s8,8 + 35a4: e43e sd a5,8(sp) + int64 sval = (int64)val; + 35a6: 86f2 mv a3,t3 + if (sval < 0) + 35a8: 1406cb63 bltz a3,36fe <_vprintf_core.constprop.0.isra.0+0x6b2> + sign_char = '+'; + 35ac: 02b00793 li a5,43 + 35b0: e03e sd a5,0(sp) + else if (flag_plus) + 35b2: e589 bnez a1,35bc <_vprintf_core.constprop.0.isra.0+0x570> + else if (flag_space) + 35b4: 00589793 slli a5,a7,0x5 + 35b8: e03e sd a5,0(sp) + 35ba: 85c6 mv a1,a7 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 35bc: 4329 li t1,10 + 35be: 00002f97 auipc t6,0x2 + 35c2: b12f8f93 addi t6,t6,-1262 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + if (val == 0) + 35c6: ee0e11e3 bnez t3,34a8 <_vprintf_core.constprop.0.isra.0+0x45c> + buf[i++] = '0'; + 35ca: 03000693 li a3,48 + 35ce: 00d10823 sb a3,16(sp) + return i; + 35d2: 4f05 li t5,1 + if (precision >= 0) + 35d4: f00bd1e3 bgez s7,34d6 <_vprintf_core.constprop.0.isra.0+0x48a> + for (int i = digit_len - 1; i >= 0; i--) + 35d8: ffff0c1b addiw s8,t5,-1 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 35dc: 07000893 li a7,112 + if (!flag_left && !flag_zero) + 35e0: 016a6d33 or s10,s4,s6 + int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; + 35e4: 4b81 li s7,0 + for (int i = digit_len - 1; i >= 0; i--) + 35e6: 8662 mv a2,s8 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 35e8: 0d1c9f63 bne s9,a7,36c6 <_vprintf_core.constprop.0.isra.0+0x67a> + prefix_str = (spec == 'X') ? "0X" : "0x"; + 35ec: 00002c97 auipc s9,0x2 + 35f0: afcc8c93 addi s9,s9,-1284 # 50e8 <_GLOBAL__sub_I__ZSt3cin+0x120> + prefix_len += 2; + 35f4: 2589 addiw a1,a1,2 + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + 35f6: 017585bb addw a1,a1,s7 + 35fa: 01e585bb addw a1,a1,t5 + 35fe: f085c2e3 blt a1,s0,3502 <_vprintf_core.constprop.0.isra.0+0x4b6> + if (!flag_left && !flag_zero) + 3602: 080d0f63 beqz s10,36a0 <_vprintf_core.constprop.0.isra.0+0x654> + if (sign_char) + 3606: 6782 ld a5,0(sp) + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + 3608: 4401 li s0,0 + if (sign_char) + 360a: f00782e3 beqz a5,350e <_vprintf_core.constprop.0.isra.0+0x4c2> + _out_char(ctx, sign_char); + 360e: 6582 ld a1,0(sp) + 3610: 8526 mv a0,s1 + 3612: bc7fd0ef jal 11d8 <_out_char> + 3616: bde5 j 350e <_vprintf_core.constprop.0.isra.0+0x4c2> + _out_char(ctx, ' '); + 3618: 02000593 li a1,32 + 361c: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 361e: 2d05 addiw s10,s10,1 + _out_char(ctx, ' '); + 3620: bb9fd0ef jal 11d8 <_out_char> + for (int i = 0; i < padding; i++) + 3624: efa402e3 beq s0,s10,3508 <_vprintf_core.constprop.0.isra.0+0x4bc> + _out_char(ctx, ' '); + 3628: 02000593 li a1,32 + 362c: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 362e: 2d05 addiw s10,s10,1 + _out_char(ctx, ' '); + 3630: ba9fd0ef jal 11d8 <_out_char> + for (int i = 0; i < padding; i++) + 3634: ffa412e3 bne s0,s10,3618 <_vprintf_core.constprop.0.isra.0+0x5cc> + 3638: bdc1 j 3508 <_vprintf_core.constprop.0.isra.0+0x4bc> + for (int i = 0; i < total_zeros; i++) + 363a: ee0b9ee3 bnez s7,3536 <_vprintf_core.constprop.0.isra.0+0x4ea> + for (int i = digit_len - 1; i >= 0; i--) + 363e: 577d li a4,-1 + 3640: f0ec17e3 bne s8,a4,354e <_vprintf_core.constprop.0.isra.0+0x502> + for (int i = 0; i < padding; i++) + 3644: d405 beqz s0,356c <_vprintf_core.constprop.0.isra.0+0x520> + 3646: 4a01 li s4,0 + _out_char(ctx, ' '); + 3648: 02000593 li a1,32 + 364c: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 364e: 2a05 addiw s4,s4,1 + _out_char(ctx, ' '); + 3650: b89fd0ef jal 11d8 <_out_char> + for (int i = 0; i < padding; i++) + 3654: fe8a1ae3 bne s4,s0,3648 <_vprintf_core.constprop.0.isra.0+0x5fc> + char spec = *p++; + 3658: 6c22 ld s8,8(sp) + 365a: bc05 j 308a <_vprintf_core.constprop.0.isra.0+0x3e> + val = (uint64)va_arg(ap, void *); + 365c: 008c0793 addi a5,s8,8 + 3660: e43e sd a5,8(sp) + else if (len_mod == 1) + 3662: 180e9163 bnez t4,37e4 <_vprintf_core.constprop.0.isra.0+0x798> + val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); + 3666: 000c6e03 lwu t3,0(s8) + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 366a: 4581 li a1,0 + 366c: 05800c93 li s9,88 + 3670: e002 sd zero,0(sp) + 3672: 4341 li t1,16 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 3674: 00002f97 auipc t6,0x2 + 3678: a44f8f93 addi t6,t6,-1468 # 50b8 <_GLOBAL__sub_I__ZSt3cin+0xf0> + 367c: b525 j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> + int padding = (width > len) ? width - len : 0; + 367e: ca8058e3 blez s0,332e <_vprintf_core.constprop.0.isra.0+0x2e2> + if (!flag_left) + 3682: ee0a1de3 bnez s4,357c <_vprintf_core.constprop.0.isra.0+0x530> + int len = 0; + 3686: 4b81 li s7,0 + for (int i = 0; i < padding; i++) + 3688: 4d01 li s10,0 + _out_char(ctx, ' '); + 368a: 02000593 li a1,32 + 368e: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 3690: 2d05 addiw s10,s10,1 + _out_char(ctx, ' '); + 3692: b47fd0ef jal 11d8 <_out_char> + for (int i = 0; i < padding; i++) + 3696: fe8d1ae3 bne s10,s0,368a <_vprintf_core.constprop.0.isra.0+0x63e> + for (int i = 0; i < len; i++) + 369a: c60b9be3 bnez s7,3310 <_vprintf_core.constprop.0.isra.0+0x2c4> + 369e: b941 j 332e <_vprintf_core.constprop.0.isra.0+0x2e2> + if (sign_char) + 36a0: 6782 ld a5,0(sp) + 36a2: 4401 li s0,0 + 36a4: f7ad bnez a5,360e <_vprintf_core.constprop.0.isra.0+0x5c2> + if (prefix_str) + 36a6: e60c96e3 bnez s9,3512 <_vprintf_core.constprop.0.isra.0+0x4c6> + for (int i = 0; i < total_zeros; i++) + 36aa: e80b96e3 bnez s7,3536 <_vprintf_core.constprop.0.isra.0+0x4ea> + 36ae: bd69 j 3548 <_vprintf_core.constprop.0.isra.0+0x4fc> + int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; + 36b0: 41eb8bbb subw s7,s7,t5 + 36b4: 8d52 mv s10,s4 + 36b6: 4b01 li s6,0 + for (int i = digit_len - 1; i >= 0; i--) + 36b8: ffff0c1b addiw s8,t5,-1 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 36bc: 07000893 li a7,112 + for (int i = digit_len - 1; i >= 0; i--) + 36c0: 8662 mv a2,s8 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 36c2: f31c85e3 beq s9,a7,35ec <_vprintf_core.constprop.0.isra.0+0x5a0> + 36c6: cd09 beqz a0,36e0 <_vprintf_core.constprop.0.isra.0+0x694> + 36c8: 000e0c63 beqz t3,36e0 <_vprintf_core.constprop.0.isra.0+0x694> + 36cc: 07800513 li a0,120 + for (int i = digit_len - 1; i >= 0; i--) + 36d0: 00060c1b sext.w s8,a2 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 36d4: f0ac8ce3 beq s9,a0,35ec <_vprintf_core.constprop.0.isra.0+0x5a0> + 36d8: 05800613 li a2,88 + 36dc: 12cc8463 beq s9,a2,3804 <_vprintf_core.constprop.0.isra.0+0x7b8> + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + 36e0: 00bb85bb addw a1,s7,a1 + 36e4: 01e585bb addw a1,a1,t5 + char *prefix_str = NULL; + 36e8: 4c81 li s9,0 + 36ea: bd11 j 34fe <_vprintf_core.constprop.0.isra.0+0x4b2> + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 36ec: 07000693 li a3,112 + 36f0: 8d52 mv s10,s4 + 36f2: 4b01 li s6,0 + 36f4: 08dc8d63 beq s9,a3,378e <_vprintf_core.constprop.0.isra.0+0x742> + 36f8: 5c7d li s8,-1 + char *prefix_str = NULL; + 36fa: 4c81 li s9,0 + 36fc: b509 j 34fe <_vprintf_core.constprop.0.isra.0+0x4b2> + sign_char = '-'; + 36fe: 02d00793 li a5,45 + val = (uint64)(-sval); + 3702: 40d00e33 neg t3,a3 + 3706: 4585 li a1,1 + 3708: 4329 li t1,10 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 370a: 00002f97 auipc t6,0x2 + 370e: 9c6f8f93 addi t6,t6,-1594 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + sign_char = '-'; + 3712: e03e sd a5,0(sp) + 3714: bb51 j 34a8 <_vprintf_core.constprop.0.isra.0+0x45c> + s = "(null)"; + 3716: 00002c97 auipc s9,0x2 + 371a: 9e2c8c93 addi s9,s9,-1566 # 50f8 <_GLOBAL__sub_I__ZSt3cin+0x130> + 371e: bed1 j 32f2 <_vprintf_core.constprop.0.isra.0+0x2a6> + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 3720: 000c3683 ld a3,0(s8) + 3724: 008c0713 addi a4,s8,8 + 3728: e43a sd a4,8(sp) + 372a: 8dbe mv s11,a5 + 372c: 8e36 mv t3,a3 + if (is_signed) + 372e: bdad j 35a8 <_vprintf_core.constprop.0.isra.0+0x55c> + int is_signed = (spec == 'd' || spec == 'i'); + 3730: 06900693 li a3,105 + 3734: fedc86e3 beq s9,a3,3720 <_vprintf_core.constprop.0.isra.0+0x6d4> + val = (uint64)va_arg(ap, void *); + 3738: 008c0713 addi a4,s8,8 + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 373c: 07800693 li a3,120 + val = (uint64)va_arg(ap, void *); + 3740: e43a sd a4,8(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 3742: 06dc9063 bne s9,a3,37a2 <_vprintf_core.constprop.0.isra.0+0x756> + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 3746: 000c3e03 ld t3,0(s8) + 374a: 8dbe mv s11,a5 + 374c: 4581 li a1,0 + 374e: e002 sd zero,0(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 3750: 4341 li t1,16 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 3752: 00002f97 auipc t6,0x2 + 3756: 97ef8f93 addi t6,t6,-1666 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 375a: b3a9 j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> + for (int i = 0; i < padding; i++) + 375c: c809 beqz s0,376e <_vprintf_core.constprop.0.isra.0+0x722> + _out_char(ctx, ' '); + 375e: 02000593 li a1,32 + 3762: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 3764: 2a05 addiw s4,s4,1 + _out_char(ctx, ' '); + 3766: a73fd0ef jal 11d8 <_out_char> + for (int i = 0; i < padding; i++) + 376a: ff441ae3 bne s0,s4,375e <_vprintf_core.constprop.0.isra.0+0x712> + _out_char(ctx, c); + 376e: 85e6 mv a1,s9 + 3770: 8526 mv a0,s1 + 3772: a67fd0ef jal 11d8 <_out_char> + const char *s = va_arg(ap, char *); + 3776: 0c21 addi s8,s8,8 + 3778: ba09 j 308a <_vprintf_core.constprop.0.isra.0+0x3e> + val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); + 377a: 000c3683 ld a3,0(s8) + 377e: 008c0793 addi a5,s8,8 + 3782: e43e sd a5,8(sp) + 3784: 8e36 mv t3,a3 + if (is_signed) + 3786: b50d j 35a8 <_vprintf_core.constprop.0.isra.0+0x55c> + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 3788: 8d52 mv s10,s4 + 378a: 4b01 li s6,0 + 378c: b585 j 35ec <_vprintf_core.constprop.0.isra.0+0x5a0> + digit_len = 0; + 378e: 4f01 li t5,0 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 3790: 5c7d li s8,-1 + prefix_str = (spec == 'X') ? "0X" : "0x"; + 3792: 00002c97 auipc s9,0x2 + 3796: 956c8c93 addi s9,s9,-1706 # 50e8 <_GLOBAL__sub_I__ZSt3cin+0x120> + 379a: bda9 j 35f4 <_vprintf_core.constprop.0.isra.0+0x5a8> + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 379c: 8d52 mv s10,s4 + 379e: 4b01 li s6,0 + 37a0: b735 j 36cc <_vprintf_core.constprop.0.isra.0+0x680> + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 37a2: 07000693 li a3,112 + 37a6: 04dc8263 beq s9,a3,37ea <_vprintf_core.constprop.0.isra.0+0x79e> + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 37aa: 000c3e03 ld t3,0(s8) + 37ae: 8dbe mv s11,a5 + 37b0: 4581 li a1,0 + 37b2: e002 sd zero,0(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 37b4: 4329 li t1,10 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 37b6: 00002f97 auipc t6,0x2 + 37ba: 91af8f93 addi t6,t6,-1766 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 37be: b1dd j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> + val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); + 37c0: 000c3e03 ld t3,0(s8) + 37c4: 4581 li a1,0 + 37c6: e002 sd zero,0(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 37c8: 4341 li t1,16 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 37ca: 00002f97 auipc t6,0x2 + 37ce: 906f8f93 addi t6,t6,-1786 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 37d2: b9c9 j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> + char spec = *p++; + 37d4: 8dbe mv s11,a5 + 37d6: b911 j 33ea <_vprintf_core.constprop.0.isra.0+0x39e> + for (int i = digit_len - 1; i >= 0; i--) + 37d8: 577d li a4,-1 + 37da: 4401 li s0,0 + 37dc: d6ec19e3 bne s8,a4,354e <_vprintf_core.constprop.0.isra.0+0x502> + char spec = *p++; + 37e0: 6c22 ld s8,8(sp) + 37e2: b065 j 308a <_vprintf_core.constprop.0.isra.0+0x3e> + val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); + 37e4: 000c3e03 ld t3,0(s8) + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 37e8: b549 j 366a <_vprintf_core.constprop.0.isra.0+0x61e> + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 37ea: 8dbe mv s11,a5 + val = (uint64)va_arg(ap, void *); + 37ec: 000c3e03 ld t3,0(s8) + 37f0: 4581 li a1,0 + 37f2: 07000c93 li s9,112 + 37f6: e002 sd zero,0(sp) + 37f8: 4341 li t1,16 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 37fa: 00002f97 auipc t6,0x2 + 37fe: 8d6f8f93 addi t6,t6,-1834 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 3802: b14d j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> + prefix_str = (spec == 'X') ? "0X" : "0x"; + 3804: 00002c97 auipc s9,0x2 + 3808: 8ecc8c93 addi s9,s9,-1812 # 50f0 <_GLOBAL__sub_I__ZSt3cin+0x128> + 380c: b3e5 j 35f4 <_vprintf_core.constprop.0.isra.0+0x5a8> + val = (uint64)va_arg(ap, void *); + 380e: 008c0713 addi a4,s8,8 + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 3812: 000c3e03 ld t3,0(s8) + val = (uint64)va_arg(ap, void *); + 3816: e43a sd a4,8(sp) + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 3818: 8dbe mv s11,a5 + 381a: bd81 j 366a <_vprintf_core.constprop.0.isra.0+0x61e> + 381c: 8d52 mv s10,s4 + 381e: 4b01 li s6,0 + 3820: 4b81 li s7,0 + 3822: bd59 j 36b8 <_vprintf_core.constprop.0.isra.0+0x66c> + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 3824: 07000693 li a3,112 + 3828: fcdc82e3 beq s9,a3,37ec <_vprintf_core.constprop.0.isra.0+0x7a0> + else if (len_mod == 1) + 382c: 01ce8c63 beq t4,t3,3844 <_vprintf_core.constprop.0.isra.0+0x7f8> + val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); + 3830: 000c6e03 lwu t3,0(s8) + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 3834: 4581 li a1,0 + 3836: e002 sd zero,0(sp) + 3838: 4329 li t1,10 + 383a: 00002f97 auipc t6,0x2 + 383e: 896f8f93 addi t6,t6,-1898 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 3842: b18d j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> + val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); + 3844: 000c3e03 ld t3,0(s8) + if (is_signed) + 3848: b7f5 j 3834 <_vprintf_core.constprop.0.isra.0+0x7e8> + +000000000000384a : +{ + 384a: 7139 addi sp,sp,-64 + 384c: f822 sd s0,48(sp) + 384e: f426 sd s1,40(sp) + 3850: 842e mv s0,a1 + 3852: 84aa mv s1,a0 + 3854: 85b2 mv a1,a2 + _vprintf_core(&ctx, format, ap); + 3856: 850a mv a0,sp + 3858: 8636 mv a2,a3 +{ + 385a: fc06 sd ra,56(sp) + ctx.buf = str; + 385c: e026 sd s1,0(sp) + ctx.limit = size; + 385e: e422 sd s0,8(sp) + ctx.written = 0; + 3860: e802 sd zero,16(sp) + ctx.stream = NULL; + 3862: ec02 sd zero,24(sp) + _vprintf_core(&ctx, format, ap); + 3864: fe8ff0ef jal 304c <_vprintf_core.constprop.0.isra.0> + if (ctx.written < size) + 3868: 6542 ld a0,16(sp) + if (size > 0) + 386a: c411 beqz s0,3876 + if (ctx.written < size) + 386c: 00857b63 bgeu a0,s0,3882 + str[ctx.written] = '\0'; + 3870: 94aa add s1,s1,a0 + 3872: 00048023 sb zero,0(s1) +} + 3876: 70e2 ld ra,56(sp) + 3878: 7442 ld s0,48(sp) + 387a: 74a2 ld s1,40(sp) + 387c: 2501 sext.w a0,a0 + 387e: 6121 addi sp,sp,64 + 3880: 8082 ret + str[size - 1] = '\0'; + 3882: 94a2 add s1,s1,s0 + 3884: fe048fa3 sb zero,-1(s1) +} + 3888: 70e2 ld ra,56(sp) + 388a: 7442 ld s0,48(sp) + 388c: 74a2 ld s1,40(sp) + 388e: 2501 sext.w a0,a0 + 3890: 6121 addi sp,sp,64 + 3892: 8082 ret + +0000000000003894 : +{ + 3894: 7119 addi sp,sp,-128 + 3896: e0a2 sd s0,64(sp) + 3898: fc26 sd s1,56(sp) + 389a: 842e mv s0,a1 + 389c: 84aa mv s1,a0 + 389e: 85b2 mv a1,a2 + _vprintf_core(&ctx, format, ap); + 38a0: 0808 addi a0,sp,16 + va_start(ap, format); + 38a2: 08b0 addi a2,sp,88 +{ + 38a4: e486 sd ra,72(sp) + 38a6: ecb6 sd a3,88(sp) + 38a8: f0ba sd a4,96(sp) + 38aa: f4be sd a5,104(sp) + 38ac: f8c2 sd a6,112(sp) + 38ae: fcc6 sd a7,120(sp) + va_start(ap, format); + 38b0: e432 sd a2,8(sp) + ctx.buf = str; + 38b2: e826 sd s1,16(sp) + ctx.limit = size; + 38b4: ec22 sd s0,24(sp) + ctx.written = 0; + 38b6: f002 sd zero,32(sp) + ctx.stream = NULL; + 38b8: f402 sd zero,40(sp) + _vprintf_core(&ctx, format, ap); + 38ba: f92ff0ef jal 304c <_vprintf_core.constprop.0.isra.0> + if (ctx.written < size) + 38be: 7502 ld a0,32(sp) + if (size > 0) + 38c0: c411 beqz s0,38cc + if (ctx.written < size) + 38c2: 00857b63 bgeu a0,s0,38d8 + str[ctx.written] = '\0'; + 38c6: 94aa add s1,s1,a0 + 38c8: 00048023 sb zero,0(s1) +} + 38cc: 60a6 ld ra,72(sp) + 38ce: 6406 ld s0,64(sp) + 38d0: 74e2 ld s1,56(sp) + 38d2: 2501 sext.w a0,a0 + 38d4: 6109 addi sp,sp,128 + 38d6: 8082 ret + str[size - 1] = '\0'; + 38d8: 94a2 add s1,s1,s0 + 38da: fe048fa3 sb zero,-1(s1) +} + 38de: 60a6 ld ra,72(sp) + 38e0: 6406 ld s0,64(sp) + 38e2: 74e2 ld s1,56(sp) + 38e4: 2501 sext.w a0,a0 + 38e6: 6109 addi sp,sp,128 + 38e8: 8082 ret + +00000000000038ea : +{ + 38ea: 7119 addi sp,sp,-128 + va_start(ap, format); + 38ec: 04810313 addi t1,sp,72 +{ + 38f0: e4ae sd a1,72(sp) + 38f2: e8b2 sd a2,80(sp) + 38f4: f4be sd a5,104(sp) + _vprintf_core(&ctx, format, ap); + 38f6: 85aa mv a1,a0 + ctx.stream = stdout; + 38f8: 00004797 auipc a5,0x4 + 38fc: db87b783 ld a5,-584(a5) # 76b0 + _vprintf_core(&ctx, format, ap); + 3900: 0808 addi a0,sp,16 + 3902: 861a mv a2,t1 +{ + 3904: fc06 sd ra,56(sp) + 3906: ecb6 sd a3,88(sp) + 3908: f0ba sd a4,96(sp) + 390a: f8c2 sd a6,112(sp) + 390c: fcc6 sd a7,120(sp) + va_start(ap, format); + 390e: e41a sd t1,8(sp) + ctx.buf = NULL; + 3910: e802 sd zero,16(sp) + ctx.limit = 0; + 3912: ec02 sd zero,24(sp) + ctx.written = 0; + 3914: f002 sd zero,32(sp) + ctx.stream = stdout; + 3916: f43e sd a5,40(sp) + _vprintf_core(&ctx, format, ap); + 3918: f34ff0ef jal 304c <_vprintf_core.constprop.0.isra.0> +} + 391c: 70e2 ld ra,56(sp) + 391e: 5502 lw a0,32(sp) + 3920: 6109 addi sp,sp,128 + 3922: 8082 ret + +0000000000003924 : +{ + 3924: 7159 addi sp,sp,-112 + va_start(ap, format); + 3926: 04010e13 addi t3,sp,64 +{ + 392a: 8eaa mv t4,a0 + ctx.fd = -1; + 392c: 537d li t1,-1 +{ + 392e: e0b2 sd a2,64(sp) + int ret = _vscanf_core(&ctx, format, ap); + 3930: 0808 addi a0,sp,16 + 3932: 8672 mv a2,t3 +{ + 3934: fc06 sd ra,56(sp) + 3936: e4b6 sd a3,72(sp) + 3938: e8ba sd a4,80(sp) + 393a: ecbe sd a5,88(sp) + 393c: f0c2 sd a6,96(sp) + 393e: f4c6 sd a7,104(sp) + va_start(ap, format); + 3940: e472 sd t3,8(sp) + ctx.buf = str; + 3942: e876 sd t4,16(sp) + ctx.fd = -1; + 3944: cc1a sw t1,24(sp) + ctx.pos = 0; + 3946: f002 sd zero,32(sp) + ctx.ungotten = -1; + 3948: d41a sw t1,40(sp) + int ret = _vscanf_core(&ctx, format, ap); + 394a: 81efd0ef jal 968 <_vscanf_core.constprop.0> +} + 394e: 70e2 ld ra,56(sp) + 3950: 6165 addi sp,sp,112 + 3952: 8082 ret + +0000000000003954 : +{ + 3954: 7119 addi sp,sp,-128 + va_start(ap, format); + 3956: 04810313 addi t1,sp,72 +{ + 395a: e4ae sd a1,72(sp) + 395c: e8b2 sd a2,80(sp) + 395e: f4be sd a5,104(sp) + int ret = _vscanf_core(&ctx, format, ap); + 3960: 85aa mv a1,a0 + ctx.ungotten = -1; + 3962: 57fd li a5,-1 + int ret = _vscanf_core(&ctx, format, ap); + 3964: 0808 addi a0,sp,16 + 3966: 861a mv a2,t1 +{ + 3968: fc06 sd ra,56(sp) + 396a: ecb6 sd a3,88(sp) + 396c: f0ba sd a4,96(sp) + 396e: f8c2 sd a6,112(sp) + 3970: fcc6 sd a7,120(sp) + va_start(ap, format); + 3972: e41a sd t1,8(sp) + ctx.buf = NULL; + 3974: e802 sd zero,16(sp) + ctx.fd = STDIN_FD; + 3976: cc02 sw zero,24(sp) + ctx.pos = 0; + 3978: f002 sd zero,32(sp) + ctx.ungotten = -1; + 397a: d43e sw a5,40(sp) + int ret = _vscanf_core(&ctx, format, ap); + 397c: fedfc0ef jal 968 <_vscanf_core.constprop.0> +} + 3980: 70e2 ld ra,56(sp) + 3982: 6109 addi sp,sp,128 + 3984: 8082 ret + +0000000000003986 : +{ + 3986: 1101 addi sp,sp,-32 + 3988: e426 sd s1,8(sp) + 398a: 84ae mv s1,a1 + 398c: e04a sd s2,0(sp) + if (strcmp(mode, "r") == 0) + 398e: 00001597 auipc a1,0x1 + 3992: 78258593 addi a1,a1,1922 # 5110 <_GLOBAL__sub_I__ZSt3cin+0x148> +{ + 3996: 892a mv s2,a0 + if (strcmp(mode, "r") == 0) + 3998: 8526 mv a0,s1 +{ + 399a: e822 sd s0,16(sp) + 399c: ec06 sd ra,24(sp) + if (strcmp(mode, "r") == 0) + 399e: 280010ef jal 4c1e + 39a2: 842a mv s0,a0 + 39a4: c919 beqz a0,39ba + else if (strcmp(mode, "w") == 0) + 39a6: 00001597 auipc a1,0x1 + 39aa: 77258593 addi a1,a1,1906 # 5118 <_GLOBAL__sub_I__ZSt3cin+0x150> + 39ae: 8526 mv a0,s1 + 39b0: 26e010ef jal 4c1e + flags = O_WRONLY | O_CREAT | O_TRUNC; + 39b4: 24100413 li s0,577 + else if (strcmp(mode, "w") == 0) + 39b8: ed39 bnez a0,3a16 + int64 fd = open(filename, flags); + 39ba: 85a2 mv a1,s0 + 39bc: 854a mv a0,s2 + 39be: f4afc0ef jal 108 + 39c2: 84aa mv s1,a0 + if (fd < 0) + 39c4: 06054c63 bltz a0,3a3c + FILE *f = (FILE *)malloc(sizeof(FILE)); + 39c8: 42000513 li a0,1056 + 39cc: 2f3000ef jal 44be + 39d0: 892a mv s2,a0 + if (!f) + 39d2: c53d beqz a0,3a40 + memset(f, 0, sizeof(FILE)); + 39d4: 42000613 li a2,1056 + 39d8: 4581 li a1,0 + 39da: 0d6010ef jal 4ab0 + if (fd == 1) + 39de: 4785 li a5,1 + f->fd = (int)fd; + 39e0: 00992023 sw s1,0(s2) + f->flags = flags; + 39e4: 00892223 sw s0,4(s2) + if (fd == 1) + 39e8: 00f48e63 beq s1,a5,3a04 + else if (fd == 2) + 39ec: 4789 li a5,2 + 39ee: 00f48b63 beq s1,a5,3a04 + f->buf_mode = 0; + 39f2: 40092e23 sw zero,1052(s2) +} + 39f6: 60e2 ld ra,24(sp) + 39f8: 6442 ld s0,16(sp) + 39fa: 64a2 ld s1,8(sp) + 39fc: 854a mv a0,s2 + 39fe: 6902 ld s2,0(sp) + 3a00: 6105 addi sp,sp,32 + 3a02: 8082 ret + 3a04: 60e2 ld ra,24(sp) + 3a06: 6442 ld s0,16(sp) + f->buf_mode = 2; + 3a08: 40992e23 sw s1,1052(s2) +} + 3a0c: 854a mv a0,s2 + 3a0e: 64a2 ld s1,8(sp) + 3a10: 6902 ld s2,0(sp) + 3a12: 6105 addi sp,sp,32 + 3a14: 8082 ret + else if (strcmp(mode, "a") == 0) + 3a16: 00001597 auipc a1,0x1 + 3a1a: 70a58593 addi a1,a1,1802 # 5120 <_GLOBAL__sub_I__ZSt3cin+0x158> + 3a1e: 8526 mv a0,s1 + 3a20: 1fe010ef jal 4c1e + flags = O_WRONLY | O_CREAT | O_APPEND; + 3a24: 44100413 li s0,1089 + else if (strcmp(mode, "a") == 0) + 3a28: d949 beqz a0,39ba + else if (strcmp(mode, "r+") == 0) + 3a2a: 00001597 auipc a1,0x1 + 3a2e: 6fe58593 addi a1,a1,1790 # 5128 <_GLOBAL__sub_I__ZSt3cin+0x160> + 3a32: 8526 mv a0,s1 + 3a34: 1ea010ef jal 4c1e + flags = O_RDWR; + 3a38: 4409 li s0,2 + else if (strcmp(mode, "r+") == 0) + 3a3a: d141 beqz a0,39ba + return NULL; + 3a3c: 4901 li s2,0 + 3a3e: bf65 j 39f6 + close(fd); + 3a40: 8526 mv a0,s1 + 3a42: eaefc0ef jal f0 + return NULL; + 3a46: 4901 li s2,0 + 3a48: b77d j 39f6 + +0000000000003a4a : + if (!stream) + 3a4a: cd29 beqz a0,3aa4 + if (stream->buf_write_pos > 0) + 3a4c: 41052603 lw a2,1040(a0) +{ + 3a50: 1141 addi sp,sp,-16 + 3a52: e022 sd s0,0(sp) + 3a54: e406 sd ra,8(sp) + 3a56: 842a mv s0,a0 + if (stream->buf_write_pos > 0) + 3a58: 02c04a63 bgtz a2,3a8c + if (stream != stdin && stream != stdout && stream != stderr) + 3a5c: 00004797 auipc a5,0x4 + 3a60: c5478793 addi a5,a5,-940 # 76b0 + 3a64: 6798 ld a4,8(a5) + 3a66: 00870e63 beq a4,s0,3a82 + 3a6a: 6398 ld a4,0(a5) + 3a6c: 00870b63 beq a4,s0,3a82 + 3a70: 6b9c ld a5,16(a5) + 3a72: 00878863 beq a5,s0,3a82 + close(stream->fd); + 3a76: 4008 lw a0,0(s0) + 3a78: e78fc0ef jal f0 + free(stream); + 3a7c: 8522 mv a0,s0 + 3a7e: 1cb000ef jal 4448 +} + 3a82: 60a2 ld ra,8(sp) + 3a84: 6402 ld s0,0(sp) + return 0; + 3a86: 4501 li a0,0 +} + 3a88: 0141 addi sp,sp,16 + 3a8a: 8082 ret + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3a8c: 4108 lw a0,0(a0) + 3a8e: 01040593 addi a1,s0,16 + 3a92: e56fc0ef jal e8 + if (ret < stream->buf_write_pos) + 3a96: 41042783 lw a5,1040(s0) + 3a9a: 00f54763 blt a0,a5,3aa8 + stream->buf_write_pos = 0; + 3a9e: 40042823 sw zero,1040(s0) + 3aa2: bf6d j 3a5c + return -1; + 3aa4: 557d li a0,-1 +} + 3aa6: 8082 ret + stream->error = 1; + 3aa8: 4785 li a5,1 + 3aaa: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 3aac: 40042823 sw zero,1040(s0) + return EOF; + 3ab0: b775 j 3a5c + +0000000000003ab2 : + if (!stream) + 3ab2: c121 beqz a0,3af2 + if (stream->buf_write_pos > 0) + 3ab4: 41052603 lw a2,1040(a0) +{ + 3ab8: 1141 addi sp,sp,-16 + 3aba: e022 sd s0,0(sp) + 3abc: e406 sd ra,8(sp) + 3abe: 842a mv s0,a0 + if (stream->buf_write_pos > 0) + 3ac0: 00c04763 bgtz a2,3ace + return 0; + 3ac4: 4501 li a0,0 +} + 3ac6: 60a2 ld ra,8(sp) + 3ac8: 6402 ld s0,0(sp) + 3aca: 0141 addi sp,sp,16 + 3acc: 8082 ret + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3ace: 4108 lw a0,0(a0) + 3ad0: 01040593 addi a1,s0,16 + 3ad4: e14fc0ef jal e8 + if (ret < stream->buf_write_pos) + 3ad8: 41042783 lw a5,1040(s0) + 3adc: 00f54563 blt a0,a5,3ae6 + stream->buf_write_pos = 0; + 3ae0: 40042823 sw zero,1040(s0) + 3ae4: b7c5 j 3ac4 + stream->error = 1; + 3ae6: 4785 li a5,1 + 3ae8: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 3aea: 40042823 sw zero,1040(s0) + return EOF; + 3aee: 557d li a0,-1 + 3af0: bfd9 j 3ac6 + 3af2: 557d li a0,-1 +} + 3af4: 8082 ret + +0000000000003af6 : +{ + 3af6: 7159 addi sp,sp,-112 + 3af8: fc06 sd ra,56(sp) + 3afa: e0b2 sd a2,64(sp) + 3afc: e4b6 sd a3,72(sp) + 3afe: e8ba sd a4,80(sp) + 3b00: ecbe sd a5,88(sp) + 3b02: f0c2 sd a6,96(sp) + 3b04: f4c6 sd a7,104(sp) + if (!stream) + 3b06: cd19 beqz a0,3b24 + va_start(ap, format); + 3b08: 832a mv t1,a0 + 3b0a: 0090 addi a2,sp,64 + _vprintf_core(&ctx, format, ap); + 3b0c: 0808 addi a0,sp,16 + va_start(ap, format); + 3b0e: e432 sd a2,8(sp) + ctx.buf = NULL; + 3b10: e802 sd zero,16(sp) + ctx.limit = 0; + 3b12: ec02 sd zero,24(sp) + ctx.written = 0; + 3b14: f002 sd zero,32(sp) + ctx.stream = stream; + 3b16: f41a sd t1,40(sp) + _vprintf_core(&ctx, format, ap); + 3b18: d34ff0ef jal 304c <_vprintf_core.constprop.0.isra.0> + return (int)ctx.written; + 3b1c: 5502 lw a0,32(sp) +} + 3b1e: 70e2 ld ra,56(sp) + 3b20: 6165 addi sp,sp,112 + 3b22: 8082 ret + return -1; + 3b24: 557d li a0,-1 + 3b26: bfe5 j 3b1e + +0000000000003b28 : +{ + 3b28: 7159 addi sp,sp,-112 + 3b2a: fc06 sd ra,56(sp) + 3b2c: e0b2 sd a2,64(sp) + 3b2e: e4b6 sd a3,72(sp) + 3b30: e8ba sd a4,80(sp) + 3b32: ecbe sd a5,88(sp) + 3b34: f0c2 sd a6,96(sp) + 3b36: f4c6 sd a7,104(sp) + if (!stream) + 3b38: cd19 beqz a0,3b56 + ctx.fd = stream->fd; + 3b3a: 411c lw a5,0(a0) + va_start(ap, format); + 3b3c: 0090 addi a2,sp,64 + int ret = _vscanf_core(&ctx, format, ap); + 3b3e: 0808 addi a0,sp,16 + ctx.fd = stream->fd; + 3b40: cc3e sw a5,24(sp) + ctx.ungotten = -1; + 3b42: 57fd li a5,-1 + va_start(ap, format); + 3b44: e432 sd a2,8(sp) + ctx.buf = NULL; + 3b46: e802 sd zero,16(sp) + ctx.pos = 0; + 3b48: f002 sd zero,32(sp) + ctx.ungotten = -1; + 3b4a: d43e sw a5,40(sp) + int ret = _vscanf_core(&ctx, format, ap); + 3b4c: e1dfc0ef jal 968 <_vscanf_core.constprop.0> +} + 3b50: 70e2 ld ra,56(sp) + 3b52: 6165 addi sp,sp,112 + 3b54: 8082 ret + return -1; + 3b56: 557d li a0,-1 + 3b58: bfe5 j 3b50 + +0000000000003b5a : + if (!stream) + 3b5a: c1e1 beqz a1,3c1a +{ + 3b5c: 7179 addi sp,sp,-48 + 3b5e: e84a sd s2,16(sp) + if (stream->buf_mode == 2) + 3b60: 41c5a903 lw s2,1052(a1) +{ + 3b64: f022 sd s0,32(sp) + 3b66: ec26 sd s1,24(sp) + 3b68: f406 sd ra,40(sp) + if (stream->buf_mode == 2) + 3b6a: 4789 li a5,2 + 3b6c: 842e mv s0,a1 + 3b6e: 84aa mv s1,a0 + char ch = (char)c; + 3b70: 0ff57713 zext.b a4,a0 + if (stream->buf_mode == 2) + 3b74: 02f90963 beq s2,a5,3ba6 + stream->buffer[stream->buf_write_pos++] = (char)c; + 3b78: 4105a783 lw a5,1040(a1) + if (stream->buf_write_pos >= BUFSIZ) + 3b7c: 3ff00693 li a3,1023 + stream->buffer[stream->buf_write_pos++] = (char)c; + 3b80: 0017861b addiw a2,a5,1 + 3b84: 40c5a823 sw a2,1040(a1) + 3b88: 97ae add a5,a5,a1 + 3b8a: 00e78823 sb a4,16(a5) + if (stream->buf_write_pos >= BUFSIZ) + 3b8e: 06c6c463 blt a3,a2,3bf6 + else if (stream->buf_mode == 1 && c == '\n') + 3b92: 4785 li a5,1 + 3b94: 02f90e63 beq s2,a5,3bd0 + return c; + 3b98: 8526 mv a0,s1 +} + 3b9a: 70a2 ld ra,40(sp) + 3b9c: 7402 ld s0,32(sp) + 3b9e: 64e2 ld s1,24(sp) + 3ba0: 6942 ld s2,16(sp) + 3ba2: 6145 addi sp,sp,48 + 3ba4: 8082 ret + if (write(stream->fd, &ch, 1) != 1) + 3ba6: 4188 lw a0,0(a1) + 3ba8: 4605 li a2,1 + 3baa: 00f10593 addi a1,sp,15 + char ch = (char)c; + 3bae: 00e107a3 sb a4,15(sp) + if (write(stream->fd, &ch, 1) != 1) + 3bb2: d36fc0ef jal e8 + 3bb6: 872a mv a4,a0 + 3bb8: 4785 li a5,1 + return c; + 3bba: 8526 mv a0,s1 + if (write(stream->fd, &ch, 1) != 1) + 3bbc: fcf70fe3 beq a4,a5,3b9a +} + 3bc0: 70a2 ld ra,40(sp) + stream->error = 1; + 3bc2: c41c sw a5,8(s0) +} + 3bc4: 7402 ld s0,32(sp) + 3bc6: 64e2 ld s1,24(sp) + 3bc8: 6942 ld s2,16(sp) + return EOF; + 3bca: 557d li a0,-1 +} + 3bcc: 6145 addi sp,sp,48 + 3bce: 8082 ret + else if (stream->buf_mode == 1 && c == '\n') + 3bd0: 47a9 li a5,10 + 3bd2: fcf513e3 bne a0,a5,3b98 + if (stream->buf_write_pos > 0) + 3bd6: fcc051e3 blez a2,3b98 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3bda: 4188 lw a0,0(a1) + 3bdc: 05c1 addi a1,a1,16 + 3bde: d0afc0ef jal e8 + if (ret < stream->buf_write_pos) + 3be2: 41042783 lw a5,1040(s0) + 3be6: 02f55063 bge a0,a5,3c06 + stream->error = 1; + 3bea: 01242423 sw s2,8(s0) + stream->buf_write_pos = 0; + 3bee: 40042823 sw zero,1040(s0) + return c; + 3bf2: 8526 mv a0,s1 + 3bf4: b75d j 3b9a + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3bf6: 4188 lw a0,0(a1) + 3bf8: 05c1 addi a1,a1,16 + 3bfa: ceefc0ef jal e8 + if (ret < stream->buf_write_pos) + 3bfe: 41042783 lw a5,1040(s0) + 3c02: 00f54663 blt a0,a5,3c0e + stream->buf_write_pos = 0; + 3c06: 40042823 sw zero,1040(s0) + return c; + 3c0a: 8526 mv a0,s1 + 3c0c: b779 j 3b9a + stream->error = 1; + 3c0e: 4785 li a5,1 + 3c10: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 3c12: 40042823 sw zero,1040(s0) + return c; + 3c16: 8526 mv a0,s1 + 3c18: b749 j 3b9a + return EOF; + 3c1a: 557d li a0,-1 +} + 3c1c: 8082 ret + +0000000000003c1e : + if (!stream) + 3c1e: c1ed beqz a1,3d00 +{ + 3c20: 711d addi sp,sp,-96 + 3c22: e4a6 sd s1,72(sp) + 3c24: ec86 sd ra,88(sp) + while (*s) + 3c26: 00054703 lbu a4,0(a0) + 3c2a: 84aa mv s1,a0 + 3c2c: cf25 beqz a4,3ca4 + 3c2e: e8a2 sd s0,80(sp) + 3c30: e0ca sd s2,64(sp) + 3c32: fc4e sd s3,56(sp) + 3c34: f852 sd s4,48(sp) + 3c36: f456 sd s5,40(sp) + 3c38: f05a sd s6,32(sp) + 3c3a: ec5e sd s7,24(sp) + 3c3c: 842e mv s0,a1 + if (stream->buf_mode == 2) + 3c3e: 4909 li s2,2 + if (stream->buf_write_pos >= BUFSIZ) + 3c40: 3ff00b13 li s6,1023 + else if (stream->buf_mode == 1 && c == '\n') + 3c44: 4985 li s3,1 + 3c46: 4a29 li s4,10 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3c48: 01058a93 addi s5,a1,16 + if (write(stream->fd, &ch, 1) != 1) + 3c4c: 00f10b93 addi s7,sp,15 + 3c50: a031 j 3c5c + else if (stream->buf_mode == 1 && c == '\n') + 3c52: 09368563 beq a3,s3,3cdc + while (*s) + 3c56: 0004c703 lbu a4,0(s1) + 3c5a: cf15 beqz a4,3c96 + if (stream->buf_mode == 2) + 3c5c: 41c42683 lw a3,1052(s0) + if (fputc(*s++, stream) == EOF) + 3c60: 0485 addi s1,s1,1 + if (stream->buf_mode == 2) + 3c62: 05268663 beq a3,s2,3cae + stream->buffer[stream->buf_write_pos++] = (char)c; + 3c66: 41042783 lw a5,1040(s0) + 3c6a: 0017861b addiw a2,a5,1 + 3c6e: 40c42823 sw a2,1040(s0) + 3c72: 97a2 add a5,a5,s0 + 3c74: 00e78823 sb a4,16(a5) + if (stream->buf_write_pos >= BUFSIZ) + 3c78: fccb5de3 bge s6,a2,3c52 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3c7c: 4008 lw a0,0(s0) + 3c7e: 85d6 mv a1,s5 + 3c80: c68fc0ef jal e8 + if (ret < stream->buf_write_pos) + 3c84: 41042783 lw a5,1040(s0) + 3c88: 06f54763 blt a0,a5,3cf6 + stream->buf_write_pos = 0; + 3c8c: 40042823 sw zero,1040(s0) + while (*s) + 3c90: 0004c703 lbu a4,0(s1) + 3c94: f761 bnez a4,3c5c + 3c96: 6446 ld s0,80(sp) + 3c98: 6906 ld s2,64(sp) + 3c9a: 79e2 ld s3,56(sp) + 3c9c: 7a42 ld s4,48(sp) + 3c9e: 7aa2 ld s5,40(sp) + 3ca0: 7b02 ld s6,32(sp) + 3ca2: 6be2 ld s7,24(sp) +} + 3ca4: 60e6 ld ra,88(sp) + 3ca6: 64a6 ld s1,72(sp) + return 0; + 3ca8: 4501 li a0,0 +} + 3caa: 6125 addi sp,sp,96 + 3cac: 8082 ret + if (write(stream->fd, &ch, 1) != 1) + 3cae: 4008 lw a0,0(s0) + 3cb0: 4605 li a2,1 + 3cb2: 85de mv a1,s7 + char ch = (char)c; + 3cb4: 00e107a3 sb a4,15(sp) + if (write(stream->fd, &ch, 1) != 1) + 3cb8: c30fc0ef jal e8 + 3cbc: f9350de3 beq a0,s3,3c56 + stream->error = 1; + 3cc0: 01342423 sw s3,8(s0) +} + 3cc4: 60e6 ld ra,88(sp) + 3cc6: 6446 ld s0,80(sp) + 3cc8: 6906 ld s2,64(sp) + 3cca: 79e2 ld s3,56(sp) + 3ccc: 7a42 ld s4,48(sp) + 3cce: 7aa2 ld s5,40(sp) + 3cd0: 7b02 ld s6,32(sp) + 3cd2: 6be2 ld s7,24(sp) + 3cd4: 64a6 ld s1,72(sp) + return -1; + 3cd6: 557d li a0,-1 +} + 3cd8: 6125 addi sp,sp,96 + 3cda: 8082 ret + else if (stream->buf_mode == 1 && c == '\n') + 3cdc: f7471de3 bne a4,s4,3c56 + if (stream->buf_write_pos > 0) + 3ce0: f6c05be3 blez a2,3c56 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3ce4: 4008 lw a0,0(s0) + 3ce6: 01040593 addi a1,s0,16 + 3cea: bfefc0ef jal e8 + if (ret < stream->buf_write_pos) + 3cee: 41042783 lw a5,1040(s0) + 3cf2: f8f55de3 bge a0,a5,3c8c + stream->error = 1; + 3cf6: 4785 li a5,1 + 3cf8: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 3cfa: 40042823 sw zero,1040(s0) + return EOF; + 3cfe: bfa1 j 3c56 + return -1; + 3d00: 557d li a0,-1 +} + 3d02: 8082 ret + +0000000000003d04 : + if (!stream) + 3d04: c949 beqz a0,3d96 + if (stream->buf_write_pos > 0) + 3d06: 41052603 lw a2,1040(a0) +{ + 3d0a: 1141 addi sp,sp,-16 + 3d0c: e022 sd s0,0(sp) + 3d0e: e406 sd ra,8(sp) + 3d10: 842a mv s0,a0 + if (stream->buf_write_pos > 0) + 3d12: 04c04863 bgtz a2,3d62 + if (stream->buf_read_pos < stream->buf_read_cnt) + 3d16: 41442783 lw a5,1044(s0) + 3d1a: 41842703 lw a4,1048(s0) + 3d1e: 00e7dd63 bge a5,a4,3d38 + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 3d22: 0017871b addiw a4,a5,1 + 3d26: 40e42a23 sw a4,1044(s0) + 3d2a: 943e add s0,s0,a5 + 3d2c: 01044503 lbu a0,16(s0) +} + 3d30: 60a2 ld ra,8(sp) + 3d32: 6402 ld s0,0(sp) + 3d34: 0141 addi sp,sp,16 + 3d36: 8082 ret + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 3d38: 4008 lw a0,0(s0) + 3d3a: 40000613 li a2,1024 + 3d3e: 01040593 addi a1,s0,16 + 3d42: b9efc0ef jal e0 + 3d46: 87aa mv a5,a0 + if (ret <= 0) + 3d48: 02a05e63 blez a0,3d84 + stream->buf_read_cnt = (int)ret; + 3d4c: 40f42c23 sw a5,1048(s0) + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 3d50: 4785 li a5,1 + 3d52: 01044503 lbu a0,16(s0) +} + 3d56: 60a2 ld ra,8(sp) + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 3d58: 40f42a23 sw a5,1044(s0) +} + 3d5c: 6402 ld s0,0(sp) + 3d5e: 0141 addi sp,sp,16 + 3d60: 8082 ret + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3d62: 4108 lw a0,0(a0) + 3d64: 01040593 addi a1,s0,16 + 3d68: b80fc0ef jal e8 + if (ret < stream->buf_write_pos) + 3d6c: 41042783 lw a5,1040(s0) + 3d70: 00f54563 blt a0,a5,3d7a + stream->buf_write_pos = 0; + 3d74: 40042823 sw zero,1040(s0) + 3d78: bf79 j 3d16 + stream->error = 1; + 3d7a: 4785 li a5,1 + 3d7c: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 3d7e: 40042823 sw zero,1040(s0) + return EOF; + 3d82: bf51 j 3d16 + if (ret == 0) + 3d84: e509 bnez a0,3d8e + stream->eof = 1; + 3d86: 4785 li a5,1 + 3d88: c45c sw a5,12(s0) + return EOF; + 3d8a: 557d li a0,-1 + 3d8c: b755 j 3d30 + stream->error = 1; + 3d8e: 4785 li a5,1 + 3d90: c41c sw a5,8(s0) + return EOF; + 3d92: 557d li a0,-1 + 3d94: bf71 j 3d30 + 3d96: 557d li a0,-1 +} + 3d98: 8082 ret + +0000000000003d9a : + if (!stream || n <= 0) + 3d9a: ce5d beqz a2,3e58 + 3d9c: 0ab05e63 blez a1,3e58 +{ + 3da0: 715d addi sp,sp,-80 + 3da2: e0a2 sd s0,64(sp) + 3da4: fc26 sd s1,56(sp) + 3da6: f84a sd s2,48(sp) + 3da8: f44e sd s3,40(sp) + 3daa: f052 sd s4,32(sp) + 3dac: ec56 sd s5,24(sp) + 3dae: e85a sd s6,16(sp) + 3db0: e45e sd s7,8(sp) + 3db2: e486 sd ra,72(sp) + 3db4: 8432 mv s0,a2 + 3db6: 8aaa mv s5,a0 + 3db8: 892a mv s2,a0 + 3dba: fff58b9b addiw s7,a1,-1 + int i = 0, c; + 3dbe: 4481 li s1,0 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3dc0: 01060993 addi s3,a2,16 + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 3dc4: 4b05 li s6,1 + if (c == '\n') + 3dc6: 4a29 li s4,10 + while (i < n - 1) + 3dc8: 05748163 beq s1,s7,3e0a + if (stream->buf_write_pos > 0) + 3dcc: 41042603 lw a2,1040(s0) + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3dd0: 85ce mv a1,s3 + if (stream->buf_write_pos > 0) + 3dd2: 06c04963 bgtz a2,3e44 + if (stream->buf_read_pos < stream->buf_read_cnt) + 3dd6: 41442783 lw a5,1044(s0) + 3dda: 41842703 lw a4,1048(s0) + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 3dde: 40000613 li a2,1024 + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 3de2: 0017851b addiw a0,a5,1 + 3de6: 00f406b3 add a3,s0,a5 + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 3dea: 85ce mv a1,s3 + if (stream->buf_read_pos < stream->buf_read_cnt) + 3dec: 02e7de63 bge a5,a4,3e28 + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 3df0: 40a42a23 sw a0,1044(s0) + 3df4: 0106c783 lbu a5,16(a3) + 3df8: 0007871b sext.w a4,a5 + str[i++] = (char)c; + 3dfc: 00f90023 sb a5,0(s2) + 3e00: 2485 addiw s1,s1,1 + if (c == '\n') + 3e02: 0905 addi s2,s2,1 + 3e04: fd4712e3 bne a4,s4,3dc8 + str[i++] = (char)c; + 3e08: 8ba6 mv s7,s1 + str[i] = '\0'; + 3e0a: 9bd6 add s7,s7,s5 + 3e0c: 000b8023 sb zero,0(s7) + return str; + 3e10: 8556 mv a0,s5 +} + 3e12: 60a6 ld ra,72(sp) + 3e14: 6406 ld s0,64(sp) + 3e16: 74e2 ld s1,56(sp) + 3e18: 7942 ld s2,48(sp) + 3e1a: 79a2 ld s3,40(sp) + 3e1c: 7a02 ld s4,32(sp) + 3e1e: 6ae2 ld s5,24(sp) + 3e20: 6b42 ld s6,16(sp) + 3e22: 6ba2 ld s7,8(sp) + 3e24: 6161 addi sp,sp,80 + 3e26: 8082 ret + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 3e28: 4008 lw a0,0(s0) + 3e2a: ab6fc0ef jal e0 + if (ret <= 0) + 3e2e: 02a05c63 blez a0,3e66 + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 3e32: 01044783 lbu a5,16(s0) + stream->buf_read_cnt = (int)ret; + 3e36: 40a42c23 sw a0,1048(s0) + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 3e3a: 41642a23 sw s6,1044(s0) + 3e3e: 0007871b sext.w a4,a5 + if (c == -1) + 3e42: bf6d j 3dfc + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3e44: 4008 lw a0,0(s0) + 3e46: aa2fc0ef jal e8 + if (ret < stream->buf_write_pos) + 3e4a: 41042783 lw a5,1040(s0) + 3e4e: 00f54763 blt a0,a5,3e5c + stream->buf_write_pos = 0; + 3e52: 40042823 sw zero,1040(s0) + 3e56: b741 j 3dd6 + return NULL; + 3e58: 4501 li a0,0 +} + 3e5a: 8082 ret + stream->error = 1; + 3e5c: 4785 li a5,1 + 3e5e: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 3e60: 40042823 sw zero,1040(s0) + return EOF; + 3e64: bf8d j 3dd6 + stream->eof = 1; + 3e66: 4785 li a5,1 + if (ret == 0) + 3e68: e509 bnez a0,3e72 + stream->eof = 1; + 3e6a: c45c sw a5,12(s0) + if (i == 0) + 3e6c: fcd1 bnez s1,3e08 + return NULL; + 3e6e: 4501 li a0,0 + 3e70: b74d j 3e12 + stream->error = 1; + 3e72: c41c sw a5,8(s0) + if (c == -1) + 3e74: bfe5 j 3e6c + +0000000000003e76 : +{ + 3e76: 715d addi sp,sp,-80 + 3e78: e486 sd ra,72(sp) + 3e7a: f44e sd s3,40(sp) + if (!stream || size == 0 || nmemb == 0) + 3e7c: 0e068963 beqz a3,3f6e + 3e80: ec56 sd s5,24(sp) + return 0; + 3e82: 4981 li s3,0 + 3e84: 8aae mv s5,a1 + if (!stream || size == 0 || nmemb == 0) + 3e86: c9bd beqz a1,3efc + 3e88: ca35 beqz a2,3efc + if (stream->buf_write_pos > 0) + 3e8a: 4106a783 lw a5,1040(a3) + 3e8e: e0a2 sd s0,64(sp) + 3e90: f052 sd s4,32(sp) + uint64 total_bytes = size * nmemb; + 3e92: 02c589b3 mul s3,a1,a2 + 3e96: 8436 mv s0,a3 + 3e98: 8a2a mv s4,a0 + if (stream->buf_write_pos > 0) + 3e9a: 0af04d63 bgtz a5,3f54 + while (bytes_read < total_bytes) + 3e9e: 04098d63 beqz s3,3ef8 + 3ea2: fc26 sd s1,56(sp) + 3ea4: e85a sd s6,16(sp) + 3ea6: e45e sd s7,8(sp) + 3ea8: f84a sd s2,48(sp) + 3eaa: 4481 li s1,0 + if (remaining >= BUFSIZ) + 3eac: 3ff00b13 li s6,1023 + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 3eb0: 01040b93 addi s7,s0,16 + if (stream->buf_read_pos < stream->buf_read_cnt) + 3eb4: 41442703 lw a4,1044(s0) + 3eb8: 41842783 lw a5,1048(s0) + uint64 remaining = total_bytes - bytes_read; + 3ebc: 40998633 sub a2,s3,s1 + if (stream->buf_read_pos < stream->buf_read_cnt) + 3ec0: 06f74463 blt a4,a5,3f28 + int64 ret = read(stream->fd, dst + bytes_read, remaining); + 3ec4: 4008 lw a0,0(s0) + 3ec6: 009a05b3 add a1,s4,s1 + if (remaining >= BUFSIZ) + 3eca: 02cb7f63 bgeu s6,a2,3f08 + int64 ret = read(stream->fd, dst + bytes_read, remaining); + 3ece: a12fc0ef jal e0 + if (ret <= 0) + 3ed2: 0aa05463 blez a0,3f7a + bytes_read += ret; + 3ed6: 94aa add s1,s1,a0 + while (bytes_read < total_bytes) + 3ed8: fd34eee3 bltu s1,s3,3eb4 + return bytes_read / size; + 3edc: 0354d9b3 divu s3,s1,s5 + 3ee0: 6406 ld s0,64(sp) +} + 3ee2: 60a6 ld ra,72(sp) + return bytes_read / size; + 3ee4: 74e2 ld s1,56(sp) + 3ee6: 7942 ld s2,48(sp) + 3ee8: 7a02 ld s4,32(sp) + 3eea: 6ae2 ld s5,24(sp) + 3eec: 6b42 ld s6,16(sp) + 3eee: 6ba2 ld s7,8(sp) +} + 3ef0: 854e mv a0,s3 + 3ef2: 79a2 ld s3,40(sp) + 3ef4: 6161 addi sp,sp,80 + 3ef6: 8082 ret + 3ef8: 6406 ld s0,64(sp) + 3efa: 7a02 ld s4,32(sp) + 3efc: 60a6 ld ra,72(sp) + 3efe: 6ae2 ld s5,24(sp) + 3f00: 854e mv a0,s3 + 3f02: 79a2 ld s3,40(sp) + 3f04: 6161 addi sp,sp,80 + 3f06: 8082 ret + stream->buf_read_pos = 0; + 3f08: 40042a23 sw zero,1044(s0) + stream->buf_read_cnt = 0; + 3f0c: 40042c23 sw zero,1048(s0) + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 3f10: 40000613 li a2,1024 + 3f14: 85de mv a1,s7 + 3f16: 9cafc0ef jal e0 + if (ret <= 0) + 3f1a: 06a05063 blez a0,3f7a + stream->buf_read_cnt = (int)ret; + 3f1e: 40a42c23 sw a0,1048(s0) + while (bytes_read < total_bytes) + 3f22: f934e9e3 bltu s1,s3,3eb4 + 3f26: bf5d j 3edc + uint64 available = stream->buf_read_cnt - stream->buf_read_pos; + 3f28: 40e7893b subw s2,a5,a4 + memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); + 3f2c: 00eb85b3 add a1,s7,a4 + 3f30: 009a0533 add a0,s4,s1 + uint64 to_copy = (available < remaining) ? available : remaining; + 3f34: 01267363 bgeu a2,s2,3f3a + 3f38: 8932 mv s2,a2 + memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); + 3f3a: 864a mv a2,s2 + 3f3c: 3c9000ef jal 4b04 + stream->buf_read_pos += to_copy; + 3f40: 41442783 lw a5,1044(s0) + bytes_read += to_copy; + 3f44: 94ca add s1,s1,s2 + stream->buf_read_pos += to_copy; + 3f46: 012787bb addw a5,a5,s2 + 3f4a: 40f42a23 sw a5,1044(s0) + while (bytes_read < total_bytes) + 3f4e: f734e3e3 bltu s1,s3,3eb4 + 3f52: b769 j 3edc + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 3f54: 4288 lw a0,0(a3) + 3f56: 863e mv a2,a5 + 3f58: 01068593 addi a1,a3,16 + 3f5c: 98cfc0ef jal e8 + if (ret < stream->buf_write_pos) + 3f60: 41042783 lw a5,1040(s0) + 3f64: 02f54163 blt a0,a5,3f86 + stream->buf_write_pos = 0; + 3f68: 40042823 sw zero,1040(s0) + 3f6c: bf0d j 3e9e +} + 3f6e: 60a6 ld ra,72(sp) + return 0; + 3f70: 4981 li s3,0 +} + 3f72: 854e mv a0,s3 + 3f74: 79a2 ld s3,40(sp) + 3f76: 6161 addi sp,sp,80 + 3f78: 8082 ret + stream->eof = 1; + 3f7a: 4785 li a5,1 + if (ret == 0) + 3f7c: e119 bnez a0,3f82 + stream->eof = 1; + 3f7e: c45c sw a5,12(s0) + 3f80: bfb1 j 3edc + stream->error = 1; + 3f82: c41c sw a5,8(s0) + return bytes_read / size; + 3f84: bfa1 j 3edc + stream->error = 1; + 3f86: 4785 li a5,1 + 3f88: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 3f8a: 40042823 sw zero,1040(s0) + return EOF; + 3f8e: bf01 j 3e9e + +0000000000003f90 : +{ + 3f90: 711d addi sp,sp,-96 + 3f92: ec86 sd ra,88(sp) + 3f94: e0ca sd s2,64(sp) + if (!stream || !ptr || size == 0 || nmemb == 0) + 3f96: 10068063 beqz a3,4096 + 3f9a: f456 sd s5,40(sp) + 3f9c: 8aaa mv s5,a0 + 3f9e: 10050263 beqz a0,40a2 + 3fa2: f05a sd s6,32(sp) + return 0; + 3fa4: 4901 li s2,0 + 3fa6: 8b2e mv s6,a1 + if (!stream || !ptr || size == 0 || nmemb == 0) + 3fa8: c1d9 beqz a1,402e + 3faa: c251 beqz a2,402e + if (stream->buf_mode == 2) + 3fac: 41c6a703 lw a4,1052(a3) + 3fb0: e8a2 sd s0,80(sp) + 3fb2: 4789 li a5,2 + uint64 total_bytes = size * nmemb; + 3fb4: 02c58933 mul s2,a1,a2 + if (stream->buf_mode == 2) + 3fb8: 8436 mv s0,a3 + 3fba: 0ef70b63 beq a4,a5,40b0 + 3fbe: fc4e sd s3,56(sp) + 3fc0: ec5e sd s7,24(sp) + 3fc2: e862 sd s8,16(sp) + uint64 bytes_written = 0; + 3fc4: 4981 li s3,0 + 3fc6: 01068b93 addi s7,a3,16 + uint64 space_left = BUFSIZ - stream->buf_write_pos; + 3fca: 40000c13 li s8,1024 + while (bytes_written < total_bytes) + 3fce: 12090263 beqz s2,40f2 + 3fd2: e4a6 sd s1,72(sp) + 3fd4: f852 sd s4,48(sp) + 3fd6: e466 sd s9,8(sp) + uint64 space_left = BUFSIZ - stream->buf_write_pos; + 3fd8: 41042783 lw a5,1040(s0) + uint64 remaining = total_bytes - bytes_written; + 3fdc: 41390cb3 sub s9,s2,s3 + memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); + 3fe0: 013a85b3 add a1,s5,s3 + uint64 space_left = BUFSIZ - stream->buf_write_pos; + 3fe4: 40fc0a3b subw s4,s8,a5 + memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); + 3fe8: 00fb8533 add a0,s7,a5 + 3fec: 8652 mv a2,s4 + if (remaining <= space_left) + 3fee: 059a6763 bltu s4,s9,403c + memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); + 3ff2: 8666 mv a2,s9 + 3ff4: 311000ef jal 4b04 + stream->buf_write_pos += remaining; + 3ff8: 41042783 lw a5,1040(s0) + if (stream->buf_write_pos == BUFSIZ) + 3ffc: 40000713 li a4,1024 + stream->buf_write_pos += remaining; + 4000: 019786bb addw a3,a5,s9 + 4004: 40d42823 sw a3,1040(s0) + if (stream->buf_write_pos == BUFSIZ) + 4008: 06e68a63 beq a3,a4,407c + return bytes_written / size; + 400c: 03695933 divu s2,s2,s6 + 4010: 6446 ld s0,80(sp) + 4012: 64a6 ld s1,72(sp) + 4014: 79e2 ld s3,56(sp) + 4016: 7a42 ld s4,48(sp) + 4018: 7aa2 ld s5,40(sp) + 401a: 7b02 ld s6,32(sp) + 401c: 6be2 ld s7,24(sp) + 401e: 6c42 ld s8,16(sp) + 4020: 6ca2 ld s9,8(sp) +} + 4022: 60e6 ld ra,88(sp) + 4024: 854a mv a0,s2 + 4026: 6906 ld s2,64(sp) + 4028: 6125 addi sp,sp,96 + 402a: 8082 ret + 402c: 6446 ld s0,80(sp) + 402e: 60e6 ld ra,88(sp) + 4030: 7aa2 ld s5,40(sp) + 4032: 7b02 ld s6,32(sp) + 4034: 854a mv a0,s2 + 4036: 6906 ld s2,64(sp) + 4038: 6125 addi sp,sp,96 + 403a: 8082 ret + memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); + 403c: 2c9000ef jal 4b04 + stream->buf_write_pos += space_left; + 4040: 41042783 lw a5,1040(s0) + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4044: 85de mv a1,s7 + bytes_written += space_left; + 4046: 99d2 add s3,s3,s4 + stream->buf_write_pos += space_left; + 4048: 00fa04bb addw s1,s4,a5 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 404c: 02049613 slli a2,s1,0x20 + stream->buf_write_pos += space_left; + 4050: 40942823 sw s1,1040(s0) + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4054: 9201 srli a2,a2,0x20 + if (stream->buf_write_pos > 0) + 4056: 00904763 bgtz s1,4064 + while (bytes_written < total_bytes) + 405a: f729efe3 bltu s3,s2,3fd8 + return bytes_written / size; + 405e: 0369d933 divu s2,s3,s6 + 4062: b77d j 4010 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4064: 4008 lw a0,0(s0) + 4066: 882fc0ef jal e8 + if (ret < stream->buf_write_pos) + 406a: 41042783 lw a5,1040(s0) + 406e: 08f54963 blt a0,a5,4100 + stream->buf_write_pos = 0; + 4072: 40042823 sw zero,1040(s0) + while (bytes_written < total_bytes) + 4076: f729e1e3 bltu s3,s2,3fd8 + 407a: b7d5 j 405e + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 407c: 4008 lw a0,0(s0) + 407e: 40000613 li a2,1024 + 4082: 85de mv a1,s7 + 4084: 864fc0ef jal e8 + if (ret < stream->buf_write_pos) + 4088: 41042783 lw a5,1040(s0) + 408c: 08f54163 blt a0,a5,410e + stream->buf_write_pos = 0; + 4090: 40042823 sw zero,1040(s0) + 4094: bfa5 j 400c +} + 4096: 60e6 ld ra,88(sp) + return 0; + 4098: 4901 li s2,0 +} + 409a: 854a mv a0,s2 + 409c: 6906 ld s2,64(sp) + 409e: 6125 addi sp,sp,96 + 40a0: 8082 ret + 40a2: 60e6 ld ra,88(sp) + return 0; + 40a4: 4901 li s2,0 + 40a6: 7aa2 ld s5,40(sp) +} + 40a8: 854a mv a0,s2 + 40aa: 6906 ld s2,64(sp) + 40ac: 6125 addi sp,sp,96 + 40ae: 8082 ret + while (bytes_written < total_bytes) + 40b0: f6090ee3 beqz s2,402c + 40b4: e4a6 sd s1,72(sp) + uint64 bytes_written = 0; + 40b6: 4481 li s1,0 + 40b8: a021 j 40c0 + bytes_written += ret; + 40ba: 94aa add s1,s1,a0 + while (bytes_written < total_bytes) + 40bc: 0324f463 bgeu s1,s2,40e4 + int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written); + 40c0: 4008 lw a0,0(s0) + 40c2: 40990633 sub a2,s2,s1 + 40c6: 009a85b3 add a1,s5,s1 + 40ca: 81efc0ef jal e8 + if (ret <= 0) + 40ce: fea046e3 bgtz a0,40ba + stream->error = 1; + 40d2: 4785 li a5,1 + return bytes_written / size; + 40d4: 0364d933 divu s2,s1,s6 + stream->error = 1; + 40d8: c41c sw a5,8(s0) + break; + 40da: 64a6 ld s1,72(sp) + 40dc: 6446 ld s0,80(sp) + 40de: 7aa2 ld s5,40(sp) + 40e0: 7b02 ld s6,32(sp) + 40e2: b781 j 4022 + return bytes_written / size; + 40e4: 0364d933 divu s2,s1,s6 + 40e8: 6446 ld s0,80(sp) + 40ea: 64a6 ld s1,72(sp) + 40ec: 7aa2 ld s5,40(sp) + 40ee: 7b02 ld s6,32(sp) + 40f0: bf0d j 4022 + 40f2: 6446 ld s0,80(sp) + 40f4: 79e2 ld s3,56(sp) + 40f6: 7aa2 ld s5,40(sp) + 40f8: 7b02 ld s6,32(sp) + 40fa: 6be2 ld s7,24(sp) + 40fc: 6c42 ld s8,16(sp) + 40fe: b715 j 4022 + stream->error = 1; + 4100: 4785 li a5,1 + 4102: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 4104: 40042823 sw zero,1040(s0) + while (bytes_written < total_bytes) + 4108: ed29e8e3 bltu s3,s2,3fd8 + 410c: bf89 j 405e + stream->error = 1; + 410e: 4785 li a5,1 + 4110: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 4112: 40042823 sw zero,1040(s0) + return EOF; + 4116: bddd j 400c + +0000000000004118 : + if (!stream) + 4118: c925 beqz a0,4188 +{ + 411a: 1101 addi sp,sp,-32 + 411c: e04a sd s2,0(sp) + 411e: 8932 mv s2,a2 + if (stream->buf_write_pos > 0) + 4120: 41052603 lw a2,1040(a0) +{ + 4124: e822 sd s0,16(sp) + 4126: e426 sd s1,8(sp) + 4128: ec06 sd ra,24(sp) + 412a: 842a mv s0,a0 + 412c: 84ae mv s1,a1 + if (stream->buf_write_pos > 0) + 412e: 02c04863 bgtz a2,415e + if (lseek(stream->fd, offset, whence) < 0) + 4132: 4008 lw a0,0(s0) + stream->buf_read_pos = 0; + 4134: 40042a23 sw zero,1044(s0) + stream->buf_read_cnt = 0; + 4138: 40042c23 sw zero,1048(s0) + stream->eof = 0; + 413c: 00042623 sw zero,12(s0) + if (lseek(stream->fd, offset, whence) < 0) + 4140: 864a mv a2,s2 + 4142: 0004859b sext.w a1,s1 + 4146: 832fc0ef jal 178 + 414a: 87aa mv a5,a0 + return 0; + 414c: 4501 li a0,0 + if (lseek(stream->fd, offset, whence) < 0) + 414e: 0207c463 bltz a5,4176 +} + 4152: 60e2 ld ra,24(sp) + 4154: 6442 ld s0,16(sp) + 4156: 64a2 ld s1,8(sp) + 4158: 6902 ld s2,0(sp) + 415a: 6105 addi sp,sp,32 + 415c: 8082 ret + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 415e: 4108 lw a0,0(a0) + 4160: 01040593 addi a1,s0,16 + 4164: f85fb0ef jal e8 + if (ret < stream->buf_write_pos) + 4168: 41042783 lw a5,1040(s0) + 416c: 00f54963 blt a0,a5,417e + stream->buf_write_pos = 0; + 4170: 40042823 sw zero,1040(s0) + 4174: bf7d j 4132 + stream->error = 1; + 4176: 4785 li a5,1 + 4178: c41c sw a5,8(s0) + return -1; + 417a: 557d li a0,-1 + 417c: bfd9 j 4152 + stream->error = 1; + 417e: 4785 li a5,1 + 4180: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 4182: 40042823 sw zero,1040(s0) + return EOF; + 4186: b775 j 4132 + return -1; + 4188: 557d li a0,-1 +} + 418a: 8082 ret + +000000000000418c : + if (!stream) + 418c: c505 beqz a0,41b4 +{ + 418e: 1141 addi sp,sp,-16 + 4190: e022 sd s0,0(sp) + 4192: 842a mv s0,a0 + int64 ret = lseek(stream->fd, 0, SEEK_CUR); + 4194: 4108 lw a0,0(a0) + 4196: 4605 li a2,1 + 4198: 4581 li a1,0 +{ + 419a: e406 sd ra,8(sp) + int64 ret = lseek(stream->fd, 0, SEEK_CUR); + 419c: fddfb0ef jal 178 + if (ret < 0) + 41a0: 00054663 bltz a0,41ac +} + 41a4: 60a2 ld ra,8(sp) + 41a6: 6402 ld s0,0(sp) + 41a8: 0141 addi sp,sp,16 + 41aa: 8082 ret + stream->error = 1; + 41ac: 4785 li a5,1 + 41ae: c41c sw a5,8(s0) + return -1L; + 41b0: 557d li a0,-1 + 41b2: bfcd j 41a4 + 41b4: 557d li a0,-1 +} + 41b6: 8082 ret + +00000000000041b8 : + if (stream) + 41b8: c915 beqz a0,41ec + if (stream->buf_write_pos > 0) + 41ba: 41052603 lw a2,1040(a0) +{ + 41be: 1141 addi sp,sp,-16 + 41c0: e022 sd s0,0(sp) + 41c2: e406 sd ra,8(sp) + 41c4: 842a mv s0,a0 + if (stream->buf_write_pos > 0) + 41c6: 02c04463 bgtz a2,41ee + if (lseek(stream->fd, offset, whence) < 0) + 41ca: 4008 lw a0,0(s0) + stream->buf_read_pos = 0; + 41cc: 40042a23 sw zero,1044(s0) + stream->buf_read_cnt = 0; + 41d0: 40042c23 sw zero,1048(s0) + stream->eof = 0; + 41d4: 00042623 sw zero,12(s0) + if (lseek(stream->fd, offset, whence) < 0) + 41d8: 4601 li a2,0 + 41da: 4581 li a1,0 + 41dc: f9dfb0ef jal 178 +} + 41e0: 60a2 ld ra,8(sp) + stream->error = 0; + 41e2: 00042423 sw zero,8(s0) +} + 41e6: 6402 ld s0,0(sp) + 41e8: 0141 addi sp,sp,16 + 41ea: 8082 ret + 41ec: 8082 ret + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 41ee: 4108 lw a0,0(a0) + 41f0: 01040593 addi a1,s0,16 + 41f4: ef5fb0ef jal e8 + if (ret < stream->buf_write_pos) + 41f8: 41042783 lw a5,1040(s0) + 41fc: 00f54563 blt a0,a5,4206 + stream->buf_write_pos = 0; + 4200: 40042823 sw zero,1040(s0) + 4204: b7d9 j 41ca + stream->error = 1; + 4206: 4785 li a5,1 + 4208: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 420a: 40042823 sw zero,1040(s0) + return EOF; + 420e: bf75 j 41ca + +0000000000004210 : + return (stream) ? stream->eof : 1; + 4210: c119 beqz a0,4216 + 4212: 4548 lw a0,12(a0) + 4214: 8082 ret + 4216: 4505 li a0,1 +} + 4218: 8082 ret + +000000000000421a : + return (stream) ? stream->error : 1; + 421a: c119 beqz a0,4220 + 421c: 4508 lw a0,8(a0) + 421e: 8082 ret + 4220: 4505 li a0,1 +} + 4222: 8082 ret + +0000000000004224 : + if (stream) + 4224: c509 beqz a0,422e + stream->error = 0; + 4226: 00052423 sw zero,8(a0) + stream->eof = 0; + 422a: 00052623 sw zero,12(a0) +} + 422e: 8082 ret + +0000000000004230 : + if (!stream || c == EOF) + 4230: c19d beqz a1,4256 + 4232: 57fd li a5,-1 + 4234: 02f50163 beq a0,a5,4256 + if (stream->buf_read_pos > 0) + 4238: 4145a783 lw a5,1044(a1) + 423c: 00f05d63 blez a5,4256 + stream->buf_read_pos--; + 4240: fff7871b addiw a4,a5,-1 + 4244: 40e5aa23 sw a4,1044(a1) + stream->buffer[stream->buf_read_pos] = (char)c; + 4248: 00e587b3 add a5,a1,a4 + 424c: 00a78823 sb a0,16(a5) + stream->eof = 0; + 4250: 0005a623 sw zero,12(a1) + return c; + 4254: 8082 ret + return EOF; + 4256: 557d li a0,-1 + 4258: 8082 ret + +000000000000425a : + return new_ptr; +} + +/* String Conversion*/ + +unsigned long long strtoull(const char *nptr, char **endptr, int base) + 425a: 1141 addi sp,sp,-16 + 425c: e422 sd s0,8(sp) + 425e: 8eaa mv t4,a0 +{ + const char *s = nptr; + 4260: 88aa mv a7,a0 + static inline int isdigit(int c) { return c >= '0' && c <= '9'; } + static inline int islower(int c) { return c >= 'a' && c <= 'z'; } + static inline int isupper(int c) { return c >= 'A' && c <= 'Z'; } + static inline int isalpha(int c) { return islower(c) || isupper(c); } + static inline int isalnum(int c) { return isalpha(c) || isdigit(c); } + static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } + 4262: 02000313 li t1,32 + 4266: 4e11 li t3,4 + return 0; + } + + do + { + c = *s++; + 4268: 0008c783 lbu a5,0(a7) + 426c: 00188813 addi a6,a7,1 + 4270: ff77871b addiw a4,a5,-9 + 4274: 0ff77693 zext.b a3,a4 + 4278: 0007871b sext.w a4,a5 + 427c: 04678363 beq a5,t1,42c2 + 4280: 04de7163 bgeu t3,a3,42c2 + } while (isspace(c)); + + if (c == '-') + 4284: 02d00793 li a5,45 + 4288: 0ef70863 beq a4,a5,4378 + { + neg = 1; + c = *s++; + } + else if (c == '+') + 428c: 02b00793 li a5,43 + int neg = 0, any, cutlim; + 4290: 4381 li t2,0 + else if (c == '+') + 4292: 08f70c63 beq a4,a5,432a + { + c = *s++; + } + + if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) + 4296: ea05 bnez a2,42c6 + 4298: 03000793 li a5,48 + 429c: 0ef70463 beq a4,a5,4384 + 42a0: 00ccd8b7 lui a7,0xccd + 42a4: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc5485> + 42a8: 08b2 slli a7,a7,0xc + 42aa: ccd88893 addi a7,a7,-819 + 42ae: 08b2 slli a7,a7,0xc + 42b0: ccd88893 addi a7,a7,-819 + 42b4: 08b6 slli a7,a7,0xd + 42b6: 4415 li s0,5 + 42b8: 99988893 addi a7,a7,-1639 + 42bc: 42a9 li t0,10 + c = s[1]; + s += 2; + base = 16; + } + if (base == 0) + base = (c == '0' ? 8 : 10); + 42be: 4629 li a2,10 + 42c0: a829 j 42da +unsigned long long strtoull(const char *nptr, char **endptr, int base) + 42c2: 88c2 mv a7,a6 + 42c4: b755 j 4268 + if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) + 42c6: 47c1 li a5,16 + 42c8: 0cf60d63 beq a2,a5,43a2 + + cutoff = ULLONG_MAX / (unsigned long long)base; + 42cc: 58fd li a7,-1 + cutlim = ULLONG_MAX % (unsigned long long)base; + 42ce: 02c8f433 remu s0,a7,a2 + cutoff = ULLONG_MAX / (unsigned long long)base; + 42d2: 82b2 mv t0,a2 + 42d4: 02c8d8b3 divu a7,a7,a2 + cutlim = ULLONG_MAX % (unsigned long long)base; + 42d8: 2401 sext.w s0,s0 + + for (acc = 0, any = 0;; c = *s++) + 42da: 4301 li t1,0 + 42dc: 4501 li a0,0 + { + if (isdigit(c)) + 42de: 4e25 li t3,9 + static inline int isalpha(int c) { return islower(c) || isupper(c); } + 42e0: 4fe5 li t6,25 + break; + + if (c >= base) + break; + + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + 42e2: 5f7d li t5,-1 + if (isdigit(c)) + 42e4: fd07079b addiw a5,a4,-48 + static inline int isdigit(int c) { return c >= '0' && c <= '9'; } + 42e8: 0007069b sext.w a3,a4 + 42ec: 00fe7e63 bgeu t3,a5,4308 + static inline int isalpha(int c) { return islower(c) || isupper(c); } + 42f0: f9f6879b addiw a5,a3,-97 + 42f4: 04fff063 bgeu t6,a5,4334 + 42f8: fbf6869b addiw a3,a3,-65 + 42fc: 04dfe163 bltu t6,a3,433e + c -= isupper(c) ? 'A' - 10 : 'a' - 10; + 4300: 03700793 li a5,55 + 4304: 40f707bb subw a5,a4,a5 + if (c >= base) + 4308: 02c7db63 bge a5,a2,433e + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + 430c: 01e30b63 beq t1,t5,4322 + any = -1; + 4310: 537d li t1,-1 + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + 4312: 00a8e863 bltu a7,a0,4322 + 4316: 05150e63 beq a0,a7,4372 + else + { + any = 1; + 431a: 4305 li t1,1 + acc *= base; + 431c: 02550533 mul a0,a0,t0 + acc += c; + 4320: 953e add a0,a0,a5 + for (acc = 0, any = 0;; c = *s++) + 4322: 0805 addi a6,a6,1 + 4324: fff84703 lbu a4,-1(a6) + if (isdigit(c)) + 4328: bf75 j 42e4 + c = *s++; + 432a: 00084703 lbu a4,0(a6) + 432e: 00288813 addi a6,a7,2 + 4332: b795 j 4296 + c -= isupper(c) ? 'A' - 10 : 'a' - 10; + 4334: 05700793 li a5,87 + 4338: 40f707bb subw a5,a4,a5 + 433c: b7f1 j 4308 + } + } + + if (any < 0) + 433e: 57fd li a5,-1 + 4340: 00f30e63 beq t1,a5,435c + { + acc = ULLONG_MAX; + errno = ERANGE; + } + else if (neg) + 4344: 00038463 beqz t2,434c + acc = -acc; + 4348: 40a00533 neg a0,a0 + + if (endptr != 0) + 434c: c589 beqz a1,4356 + *endptr = (char *)(any ? s - 1 : nptr); + 434e: 00031f63 bnez t1,436c + 4352: 01d5b023 sd t4,0(a1) + + return acc; +} + 4356: 6422 ld s0,8(sp) + 4358: 0141 addi sp,sp,16 + 435a: 8082 ret + errno = ERANGE; + 435c: 02200793 li a5,34 + 4360: 00003717 auipc a4,0x3 + 4364: 3af72823 sw a5,944(a4) # 7710 + acc = ULLONG_MAX; + 4368: 557d li a0,-1 + if (endptr != 0) + 436a: d5f5 beqz a1,4356 + *endptr = (char *)(any ? s - 1 : nptr); + 436c: fff80e93 addi t4,a6,-1 + 4370: b7cd j 4352 + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + 4372: faf448e3 blt s0,a5,4322 + 4376: b755 j 431a + c = *s++; + 4378: 00084703 lbu a4,0(a6) + neg = 1; + 437c: 4385 li t2,1 + c = *s++; + 437e: 00288813 addi a6,a7,2 + 4382: bf11 j 4296 + if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) + 4384: 00084783 lbu a5,0(a6) + 4388: 05800693 li a3,88 + 438c: 0df7f793 andi a5,a5,223 + 4390: 02d78b63 beq a5,a3,43c6 + 4394: 58fd li a7,-1 + 4396: 441d li s0,7 + 4398: 0038d893 srli a7,a7,0x3 + 439c: 42a1 li t0,8 + base = (c == '0' ? 8 : 10); + 439e: 4621 li a2,8 + 43a0: bf2d j 42da + if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) + 43a2: 03000793 li a5,48 + 43a6: 00f70863 beq a4,a5,43b6 + 43aa: 58fd li a7,-1 + 43ac: 443d li s0,15 + 43ae: 0048d893 srli a7,a7,0x4 + 43b2: 42c1 li t0,16 + 43b4: b71d j 42da + 43b6: 00084783 lbu a5,0(a6) + 43ba: 05800693 li a3,88 + 43be: 0df7f793 andi a5,a5,223 + 43c2: fed794e3 bne a5,a3,43aa + s += 2; + 43c6: 58fd li a7,-1 + c = s[1]; + 43c8: 00184703 lbu a4,1(a6) + s += 2; + 43cc: 443d li s0,15 + 43ce: 0809 addi a6,a6,2 + 43d0: 0048d893 srli a7,a7,0x4 + 43d4: 42c1 li t0,16 + base = 16; + 43d6: 4641 li a2,16 + 43d8: b709 j 42da + +00000000000043da : + if (__atexit_func_count >= ATEXIT_MAX) + 43da: 00003717 auipc a4,0x3 + 43de: 33670713 addi a4,a4,822 # 7710 + 43e2: 435c lw a5,4(a4) + 43e4: 46fd li a3,31 + 43e6: 00f6ca63 blt a3,a5,43fa + __atexit_funcs[__atexit_func_count++] = function; + 43ea: 00379693 slli a3,a5,0x3 + 43ee: 96ba add a3,a3,a4 + 43f0: 2785 addiw a5,a5,1 + 43f2: e688 sd a0,8(a3) + 43f4: c35c sw a5,4(a4) + return 0; + 43f6: 4501 li a0,0 + 43f8: 8082 ret + return -1; + 43fa: 557d li a0,-1 +} + 43fc: 8082 ret + +00000000000043fe : +{ + 43fe: 1101 addi sp,sp,-32 + 4400: e822 sd s0,16(sp) + while (__atexit_func_count > 0) + 4402: 00003417 auipc s0,0x3 + 4406: 30e40413 addi s0,s0,782 # 7710 + 440a: 405c lw a5,4(s0) +{ + 440c: e426 sd s1,8(sp) + 440e: ec06 sd ra,24(sp) + 4410: 84aa mv s1,a0 + while (__atexit_func_count > 0) + 4412: 00f05d63 blez a5,442c + (__atexit_funcs[--__atexit_func_count])(); + 4416: fff7871b addiw a4,a5,-1 + 441a: 87ba mv a5,a4 + 441c: 070e slli a4,a4,0x3 + 441e: 9722 add a4,a4,s0 + 4420: 6718 ld a4,8(a4) + 4422: c05c sw a5,4(s0) + 4424: 9702 jalr a4 + while (__atexit_func_count > 0) + 4426: 405c lw a5,4(s0) + 4428: fef047e3 bgtz a5,4416 + sys_exit(status); + 442c: 8526 mv a0,s1 + 442e: c93fb0ef jal c0 + while (1) + 4432: a001 j 4432 + +0000000000004434 : +{ + 4434: 1141 addi sp,sp,-16 + exit(127); + 4436: 07f00513 li a0,127 +{ + 443a: e406 sd ra,8(sp) + exit(127); + 443c: fc3ff0ef jal 43fe + +0000000000004440 : +} + 4440: 4501 li a0,0 + 4442: 8082 ret + +0000000000004444 : +} + 4444: 557d li a0,-1 + 4446: 8082 ret + +0000000000004448 : + if (!ptr) + 4448: c121 beqz a0,4488 + for (p = freep; !(bp > p && bp < p->next); p = p->next) + 444a: 00003617 auipc a2,0x3 + 444e: 2c660613 addi a2,a2,710 # 7710 + 4452: 10863783 ld a5,264(a2) + bp = (header_t *)ptr - 1; + 4456: ff050693 addi a3,a0,-16 + if (p >= p->next && (bp > p || bp < p->next)) + 445a: 6798 ld a4,8(a5) + for (p = freep; !(bp > p && bp < p->next); p = p->next) + 445c: 02d7f763 bgeu a5,a3,448a + 4460: 00e6e463 bltu a3,a4,4468 + if (p >= p->next && (bp > p || bp < p->next)) + 4464: 02e7e763 bltu a5,a4,4492 + if ((char *)bp + bp->size == (char *)p->next) + 4468: ff053583 ld a1,-16(a0) + 446c: 00b68833 add a6,a3,a1 + 4470: 03070363 beq a4,a6,4496 + if ((char *)p + p->size == (char *)bp) + 4474: 638c ld a1,0(a5) + 4476: fee53c23 sd a4,-8(a0) + 447a: 00b78833 add a6,a5,a1 + 447e: 03068963 beq a3,a6,44b0 + 4482: e794 sd a3,8(a5) + freep = p; + 4484: 10f63423 sd a5,264(a2) +} + 4488: 8082 ret + if (p >= p->next && (bp > p || bp < p->next)) + 448a: 00e7e463 bltu a5,a4,4492 + 448e: fce6ede3 bltu a3,a4,4468 +{ + 4492: 87ba mv a5,a4 + 4494: b7d9 j 445a + bp->size += p->next->size; + 4496: 00073803 ld a6,0(a4) + bp->next = p->next->next; + 449a: 6718 ld a4,8(a4) + bp->size += p->next->size; + 449c: 95c2 add a1,a1,a6 + 449e: feb53823 sd a1,-16(a0) + if ((char *)p + p->size == (char *)bp) + 44a2: 638c ld a1,0(a5) + 44a4: fee53c23 sd a4,-8(a0) + 44a8: 00b78833 add a6,a5,a1 + 44ac: fd069be3 bne a3,a6,4482 + p->size += bp->size; + 44b0: ff053503 ld a0,-16(a0) + p->next = bp->next; + 44b4: 86ba mv a3,a4 + p->size += bp->size; + 44b6: 00b50733 add a4,a0,a1 + 44ba: e398 sd a4,0(a5) + p->next = bp->next; + 44bc: b7d9 j 4482 + +00000000000044be : + if (size == 0) + 44be: c54d beqz a0,4568 +{ + 44c0: 1101 addi sp,sp,-32 + 44c2: e426 sd s1,8(sp) + if ((prevp = freep) == NULL) + 44c4: 00003497 auipc s1,0x3 + 44c8: 24c48493 addi s1,s1,588 # 7710 + 44cc: 1084b783 ld a5,264(s1) +{ + 44d0: e822 sd s0,16(sp) + size = ALIGN(size + sizeof(header_t)); + 44d2: 057d addi a0,a0,31 +{ + 44d4: ec06 sd ra,24(sp) + size = ALIGN(size + sizeof(header_t)); + 44d6: ff057413 andi s0,a0,-16 + if ((prevp = freep) == NULL) + 44da: c7b5 beqz a5,4546 + for (p = prevp->next;; prevp = p, p = p->next) + 44dc: 6788 ld a0,8(a5) + if (p->size >= size) + 44de: 6118 ld a4,0(a0) + 44e0: 04877663 bgeu a4,s0,452c + 44e4: e04a sd s2,0(sp) + if (cp == (void *)-1) + 44e6: 597d li s2,-1 + 44e8: a029 j 44f2 + for (p = prevp->next;; prevp = p, p = p->next) + 44ea: 6788 ld a0,8(a5) + if (p->size >= size) + 44ec: 6118 ld a4,0(a0) + 44ee: 02877e63 bgeu a4,s0,452a + if (p == freep) + 44f2: 1084b703 ld a4,264(s1) + 44f6: 87aa mv a5,a0 + 44f8: fea719e3 bne a4,a0,44ea + cp = (char *)sbrk(nu); + 44fc: 6505 lui a0,0x1 + 44fe: c53fb0ef jal 150 + 4502: 87aa mv a5,a0 + free((void *)(up + 1)); + 4504: 0541 addi a0,a0,16 # 1010 <_vscanf_core.constprop.0+0x6a8> + if (cp == (void *)-1) + 4506: 01278963 beq a5,s2,4518 + up->size = nu; + 450a: 6705 lui a4,0x1 + 450c: e398 sd a4,0(a5) + free((void *)(up + 1)); + 450e: f3bff0ef jal 4448 + return freep; + 4512: 1084b783 ld a5,264(s1) + if ((p = morecore(nunits * sizeof(header_t))) == NULL) + 4516: fbf1 bnez a5,44ea +} + 4518: 60e2 ld ra,24(sp) + 451a: 6442 ld s0,16(sp) + errno = ENOMEM; + 451c: 47b1 li a5,12 + 451e: c09c sw a5,0(s1) + return NULL; + 4520: 6902 ld s2,0(sp) +} + 4522: 64a2 ld s1,8(sp) + return NULL; + 4524: 4501 li a0,0 +} + 4526: 6105 addi sp,sp,32 + 4528: 8082 ret + 452a: 6902 ld s2,0(sp) + if (p->size == size) + 452c: 02e40b63 beq s0,a4,4562 + p = (header_t *)((char *)p + p->size); + 4530: 953a add a0,a0,a4 + p->size = (nunits * sizeof(header_t)); + 4532: 00053023 sd zero,0(a0) +} + 4536: 60e2 ld ra,24(sp) + 4538: 6442 ld s0,16(sp) + freep = prevp; + 453a: 10f4b423 sd a5,264(s1) + return (void *)(p + 1); + 453e: 0541 addi a0,a0,16 +} + 4540: 64a2 ld s1,8(sp) + 4542: 6105 addi sp,sp,32 + 4544: 8082 ret + base.next = freep = prevp = &base; + 4546: 00003517 auipc a0,0x3 + 454a: 2da50513 addi a0,a0,730 # 7820 + 454e: 10a4b423 sd a0,264(s1) + 4552: 10a4bc23 sd a0,280(s1) + base.size = 0; + 4556: 00003797 auipc a5,0x3 + 455a: 2c07b523 sd zero,714(a5) # 7820 + if (p->size >= size) + 455e: f059 bnez s0,44e4 + base.next = freep = prevp = &base; + 4560: 87aa mv a5,a0 + prevp->next = p->next; + 4562: 6518 ld a4,8(a0) + 4564: e798 sd a4,8(a5) + 4566: bfc1 j 4536 + return NULL; + 4568: 4501 li a0,0 +} + 456a: 8082 ret + +000000000000456c : + if (__builtin_mul_overflow(nmemb, size, &total)) + 456c: 02b537b3 mulhu a5,a0,a1 +{ + 4570: 1101 addi sp,sp,-32 + 4572: e822 sd s0,16(sp) + 4574: ec06 sd ra,24(sp) + 4576: e426 sd s1,8(sp) + if (__builtin_mul_overflow(nmemb, size, &total)) + 4578: 02b50433 mul s0,a0,a1 + 457c: e385 bnez a5,459c + void *p = malloc(total); + 457e: 8522 mv a0,s0 + 4580: f3fff0ef jal 44be + 4584: 84aa mv s1,a0 + if (p) + 4586: c509 beqz a0,4590 + memset(p, 0, total); + 4588: 8622 mv a2,s0 + 458a: 4581 li a1,0 + 458c: 524000ef jal 4ab0 +} + 4590: 60e2 ld ra,24(sp) + 4592: 6442 ld s0,16(sp) + 4594: 8526 mv a0,s1 + 4596: 64a2 ld s1,8(sp) + 4598: 6105 addi sp,sp,32 + 459a: 8082 ret + 459c: 60e2 ld ra,24(sp) + 459e: 6442 ld s0,16(sp) + errno = ENOMEM; + 45a0: 47b1 li a5,12 + return NULL; + 45a2: 4481 li s1,0 + errno = ENOMEM; + 45a4: 00003717 auipc a4,0x3 + 45a8: 16f72623 sw a5,364(a4) # 7710 +} + 45ac: 8526 mv a0,s1 + 45ae: 64a2 ld s1,8(sp) + 45b0: 6105 addi sp,sp,32 + 45b2: 8082 ret + +00000000000045b4 : + if (!ptr) + 45b4: c929 beqz a0,4606 +{ + 45b6: 1101 addi sp,sp,-32 + 45b8: ec06 sd ra,24(sp) + 45ba: e426 sd s1,8(sp) + if (size == 0) + 45bc: c5b9 beqz a1,460a + if (bp->size >= new_size) + 45be: ff053703 ld a4,-16(a0) + size_t new_size = ALIGN(size + sizeof(header_t)); + 45c2: 01f58793 addi a5,a1,31 + 45c6: e822 sd s0,16(sp) + 45c8: 9bc1 andi a5,a5,-16 + 45ca: 842a mv s0,a0 + return ptr; + 45cc: 84aa mv s1,a0 + if (bp->size >= new_size) + 45ce: 00f76863 bltu a4,a5,45de + 45d2: 6442 ld s0,16(sp) +} + 45d4: 60e2 ld ra,24(sp) + 45d6: 8526 mv a0,s1 + 45d8: 64a2 ld s1,8(sp) + 45da: 6105 addi sp,sp,32 + 45dc: 8082 ret + void *new_ptr = malloc(size); + 45de: 852e mv a0,a1 + 45e0: edfff0ef jal 44be + 45e4: 84aa mv s1,a0 + if (!new_ptr) + 45e6: d575 beqz a0,45d2 + memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); + 45e8: ff043603 ld a2,-16(s0) + 45ec: 85a2 mv a1,s0 + 45ee: 1641 addi a2,a2,-16 + 45f0: 514000ef jal 4b04 + free(ptr); + 45f4: 8522 mv a0,s0 + 45f6: e53ff0ef jal 4448 +} + 45fa: 60e2 ld ra,24(sp) + free(ptr); + 45fc: 6442 ld s0,16(sp) +} + 45fe: 8526 mv a0,s1 + 4600: 64a2 ld s1,8(sp) + 4602: 6105 addi sp,sp,32 + 4604: 8082 ret + return malloc(size); + 4606: 852e mv a0,a1 + 4608: bd5d j 44be + free(ptr); + 460a: e3fff0ef jal 4448 + return NULL; + 460e: 4481 li s1,0 + 4610: b7d1 j 45d4 + +0000000000004612 : + if (base < 0 || base == 1 || base > 36) + 4612: 02400813 li a6,36 +{ + 4616: 86aa mv a3,a0 + 4618: 872e mv a4,a1 + if (base < 0 || base == 1 || base > 36) + 461a: 00c86663 bltu a6,a2,4626 + 461e: 4805 li a6,1 + 4620: 01060363 beq a2,a6,4626 + 4624: b91d j 425a + if (endptr) + 4626: c311 beqz a4,462a + *endptr = (char *)nptr; + 4628: e314 sd a3,0(a4) + errno = 0; /* EINVAL */ + 462a: 00003797 auipc a5,0x3 + 462e: 0e07a323 sw zero,230(a5) # 7710 +} + 4632: 4501 li a0,0 + 4634: 8082 ret + +0000000000004636 : + +long long strtoll(const char *nptr, char **endptr, int base) +{ + 4636: 1141 addi sp,sp,-16 + 4638: e406 sd ra,8(sp) + 463a: e022 sd s0,0(sp) + const char *s = nptr; + 463c: 86aa mv a3,a0 + static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } + 463e: 02000813 li a6,32 + 4642: 4891 li a7,4 + unsigned long long acc; + int c, neg = 0; + + do + { + c = *s++; + 4644: 0006c783 lbu a5,0(a3) + 4648: 0685 addi a3,a3,1 + 464a: ff77871b addiw a4,a5,-9 + 464e: 0ff77713 zext.b a4,a4 + 4652: 0007841b sext.w s0,a5 + 4656: ff0787e3 beq a5,a6,4644 + 465a: fee8f5e3 bgeu a7,a4,4644 + if (base < 0 || base == 1 || base > 36) + 465e: 02400793 li a5,36 + 4662: 02c7ec63 bltu a5,a2,469a + 4666: 4785 li a5,1 + 4668: 02f60963 beq a2,a5,469a + 466c: befff0ef jal 425a + if (c == '-') + neg = 1; + + acc = strtoull(nptr, endptr, base); + + if (errno == ERANGE && acc == ULLONG_MAX) + 4670: 00003797 auipc a5,0x3 + 4674: 0a078793 addi a5,a5,160 # 7710 + 4678: 4394 lw a3,0(a5) + 467a: 02200713 li a4,34 + 467e: 04e68363 beq a3,a4,46c4 + return neg ? LLONG_MIN : LLONG_MAX; + + if (!neg && acc > (unsigned long long)LLONG_MAX) + 4682: 02d00713 li a4,45 + 4686: 02e40563 beq s0,a4,46b0 + 468a: 00055f63 bgez a0,46a8 + { + errno = ERANGE; + 468e: 02200713 li a4,34 + 4692: c398 sw a4,0(a5) + return neg ? LLONG_MIN : LLONG_MAX; + 4694: 557d li a0,-1 + 4696: 8105 srli a0,a0,0x1 + 4698: a801 j 46a8 + if (endptr) + 469a: c191 beqz a1,469e + *endptr = (char *)nptr; + 469c: e188 sd a0,0(a1) + errno = 0; /* EINVAL */ + 469e: 00003797 auipc a5,0x3 + 46a2: 0607a923 sw zero,114(a5) # 7710 + { + errno = ERANGE; + return LLONG_MIN; + } + + return neg ? -(long long)acc : (long long)acc; + 46a6: 4501 li a0,0 +} + 46a8: 60a2 ld ra,8(sp) + 46aa: 6402 ld s0,0(sp) + 46ac: 0141 addi sp,sp,16 + 46ae: 8082 ret + if (neg && acc > (unsigned long long)LLONG_MAX + 1) + 46b0: 577d li a4,-1 + 46b2: 177e slli a4,a4,0x3f + 46b4: 02a76263 bltu a4,a0,46d8 +} + 46b8: 60a2 ld ra,8(sp) + 46ba: 6402 ld s0,0(sp) + return neg ? -(long long)acc : (long long)acc; + 46bc: 40a00533 neg a0,a0 +} + 46c0: 0141 addi sp,sp,16 + 46c2: 8082 ret + if (errno == ERANGE && acc == ULLONG_MAX) + 46c4: 577d li a4,-1 + 46c6: fae51ee3 bne a0,a4,4682 + return neg ? LLONG_MIN : LLONG_MAX; + 46ca: 02d00793 li a5,45 + 46ce: fcf413e3 bne s0,a5,4694 + return LLONG_MIN; + 46d2: 557d li a0,-1 + 46d4: 157e slli a0,a0,0x3f + 46d6: bfc9 j 46a8 + errno = ERANGE; + 46d8: 02200713 li a4,34 + 46dc: c398 sw a4,0(a5) + return LLONG_MIN; + 46de: bfd5 j 46d2 + +00000000000046e0 : + if (base < 0 || base == 1 || base > 36) + 46e0: 02400813 li a6,36 + +unsigned long strtoul(const char *nptr, char **endptr, int base) +{ + 46e4: 86aa mv a3,a0 + 46e6: 872e mv a4,a1 + if (base < 0 || base == 1 || base > 36) + 46e8: 00c86663 bltu a6,a2,46f4 + 46ec: 4805 li a6,1 + 46ee: 01060363 beq a2,a6,46f4 + 46f2: b6a5 j 425a + if (endptr) + 46f4: c311 beqz a4,46f8 + *endptr = (char *)nptr; + 46f6: e314 sd a3,0(a4) + errno = 0; /* EINVAL */ + 46f8: 00003797 auipc a5,0x3 + 46fc: 0007ac23 sw zero,24(a5) # 7710 + { + errno = ERANGE; + return ULONG_MAX; + } + return (unsigned long)ret; +} + 4700: 4501 li a0,0 + 4702: 8082 ret + +0000000000004704 : + +long strtol(const char *nptr, char **endptr, int base) +{ + long long ret = strtoll(nptr, endptr, base); + 4704: bf0d j 4636 + +0000000000004706 : + return LONG_MIN; + } + return (long)ret; +} + +int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } + 4706: 1141 addi sp,sp,-16 + long long ret = strtoll(nptr, endptr, base); + 4708: 4629 li a2,10 + 470a: 4581 li a1,0 +int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } + 470c: e406 sd ra,8(sp) + long long ret = strtoll(nptr, endptr, base); + 470e: f29ff0ef jal 4636 +int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } + 4712: 60a2 ld ra,8(sp) + 4714: 2501 sext.w a0,a0 + 4716: 0141 addi sp,sp,16 + 4718: 8082 ret - call main - 4: 57a000ef jal 57e
+000000000000471a : + long long ret = strtoll(nptr, endptr, base); + 471a: 4629 li a2,10 + 471c: 4581 li a1,0 + 471e: bf21 j 4636 - call exit - 8: 706000ef jal 70e - - c: a001 j c <_start+0xc> - -000000000000000e <_Z6strlenPKc>: -#include "common/fcntl.h" - -int strlen(const char *s) -{ - int n = 0; - while (s[n]) - e: 00054783 lbu a5,0(a0) - 12: cf81 beqz a5,2a <_Z6strlenPKc+0x1c> - 14: 0505 addi a0,a0,1 - 16: 87aa mv a5,a0 - 18: 0007c703 lbu a4,0(a5) - 1c: 86be mv a3,a5 - 1e: 0785 addi a5,a5,1 - 20: ff65 bnez a4,18 <_Z6strlenPKc+0xa> - n++; - 22: 40a6853b subw a0,a3,a0 - 26: 2505 addiw a0,a0,1 - 28: 8082 ret - int n = 0; - 2a: 4501 li a0,0 - return n; -} - 2c: 8082 ret - -000000000000002e <_Z5printPKc>: - while (s[n]) - 2e: 00054783 lbu a5,0(a0) - -void print(const char *s) -{ - 32: 85aa mv a1,a0 - while (s[n]) - 34: cf91 beqz a5,50 <_Z5printPKc+0x22> - 36: 00150693 addi a3,a0,1 - 3a: 87b6 mv a5,a3 - 3c: 0007c703 lbu a4,0(a5) - 40: 863e mv a2,a5 - 42: 0785 addi a5,a5,1 - 44: ff65 bnez a4,3c <_Z5printPKc+0xe> - n++; - 46: 9e15 subw a2,a2,a3 - 48: 2605 addiw a2,a2,1 - write(1, s, strlen(s)); - 4a: 4505 li a0,1 - 4c: 6e20006f j 72e - int n = 0; - 50: 4601 li a2,0 - write(1, s, strlen(s)); - 52: 4505 li a0,1 - 54: ade9 j 72e - -0000000000000056 <_Z9print_inti>: -void print_int(int n) -{ - char buf[16]; - int i = 0; - int neg = 0; - if (n == 0) - 56: c149 beqz a0,d8 <_Z9print_inti+0x82> -{ - 58: 7179 addi sp,sp,-48 - 5a: f406 sd ra,40(sp) - 5c: f022 sd s0,32(sp) - 5e: ec26 sd s1,24(sp) - int neg = 0; - 60: 4801 li a6,0 +0000000000004720 : +long atol(const char *nptr) { return strtol(nptr, NULL, 10); } +long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } + 4720: 4629 li a2,10 + 4722: 4581 li a1,0 + 4724: bf09 j 4636 + +0000000000004726 : + 4726: 02000693 li a3,32 + 472a: 4611 li a2,4 +{ + double val = 0.0; + int sign = 1; + const char *s = nptr; + + while (isspace(*s)) + 472c: 00054783 lbu a5,0(a0) + 4730: ff77871b addiw a4,a5,-9 + 4734: 0ff77713 zext.b a4,a4 + 4738: 06d78263 beq a5,a3,479c + 473c: 06e67063 bgeu a2,a4,479c + s++; + if (*s == '-') + 4740: 02d00713 li a4,45 + 4744: 08e78e63 beq a5,a4,47e0 { - write(1, "0", 1); - return; + sign = -1; + s++; } - if (n < 0) - 62: 04054c63 bltz a0,ba <_Z9print_inti+0x64> - 66: 840a mv s0,sp + else if (*s == '+') + 4748: 02b00713 li a4,43 + 474c: 0ae78263 beq a5,a4,47f0 + 4750: 00001717 auipc a4,0x1 + 4754: 0e873507 fld fa0,232(a4) # 5838 + static inline int isdigit(int c) { return c >= '0' && c <= '9'; } + 4758: fd07861b addiw a2,a5,-48 + s++; + + while (isdigit(*s)) + 475c: 46a5 li a3,9 + 475e: f20007d3 fmv.d.x fa5,zero + 4762: 8732 mv a4,a2 + 4764: 02c6e363 bltu a3,a2,478a + 4768: 00001797 auipc a5,0x1 + 476c: 0d87b687 fld fa3,216(a5) # 5840 + 4770: 4625 li a2,9 + 4772: 00154783 lbu a5,1(a0) { - neg = 1; - 68: 86a2 mv a3,s0 - 6a: 4701 li a4,0 - n = -n; + val = val * 10.0 + (*s - '0'); + 4776: d2070753 fcvt.d.w fa4,a4 + s++; + 477a: 0505 addi a0,a0,1 + 477c: fd07869b addiw a3,a5,-48 + val = val * 10.0 + (*s - '0'); + 4780: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 + 4784: 8736 mv a4,a3 + while (isdigit(*s)) + 4786: fed676e3 bgeu a2,a3,4772 } - while (n > 0) - { - buf[i++] = (n % 10) + '0'; - 6c: 4629 li a2,10 - 6e: 02c567bb remw a5,a0,a2 - while (n > 0) - 72: 0685 addi a3,a3,1 - 74: 85ba mv a1,a4 - buf[i++] = (n % 10) + '0'; - 76: 2705 addiw a4,a4,1 - n /= 10; - 78: 02c5453b divw a0,a0,a2 - buf[i++] = (n % 10) + '0'; - 7c: 0307879b addiw a5,a5,48 - 80: fef68fa3 sb a5,-1(a3) - while (n > 0) - 84: f56d bnez a0,6e <_Z9print_inti+0x18> + if (*s == '.') + 478a: 02e00713 li a4,46 + 478e: 00e78963 beq a5,a4,47a0 + val += (*s - '0') * factor; + s++; + } } - if (neg) - 86: 02081e63 bnez a6,c2 <_Z9print_inti+0x6c> - 8a: fff7079b addiw a5,a4,-1 - 8e: ffe40493 addi s1,s0,-2 - 92: 1782 slli a5,a5,0x20 - 94: fff70693 addi a3,a4,-1 - 98: 94ba add s1,s1,a4 - 9a: 9381 srli a5,a5,0x20 - 9c: 9436 add s0,s0,a3 - 9e: 8c9d sub s1,s1,a5 - buf[i++] = '-'; - while (i > 0) - write(1, &buf[--i], 1); - a0: 85a2 mv a1,s0 - a2: 4605 li a2,1 - a4: 4505 li a0,1 - while (i > 0) - a6: 147d addi s0,s0,-1 - write(1, &buf[--i], 1); - a8: 686000ef jal 72e - while (i > 0) - ac: fe849ae3 bne s1,s0,a0 <_Z9print_inti+0x4a> -} - b0: 70a2 ld ra,40(sp) - b2: 7402 ld s0,32(sp) - b4: 64e2 ld s1,24(sp) - b6: 6145 addi sp,sp,48 - b8: 8082 ret - n = -n; - ba: 40a0053b negw a0,a0 - neg = 1; - be: 4805 li a6,1 - c0: b75d j 66 <_Z9print_inti+0x10> - buf[i++] = '-'; - c2: 01070793 addi a5,a4,16 - c6: 00278733 add a4,a5,sp - ca: 02d00793 li a5,45 - ce: fef70823 sb a5,-16(a4) - d2: 0025871b addiw a4,a1,2 - d6: bf55 j 8a <_Z9print_inti+0x34> - write(1, "0", 1); - d8: 4605 li a2,1 - da: 00000597 auipc a1,0x0 - de: 6e658593 addi a1,a1,1766 # 7c0 - e2: 4505 li a0,1 - e4: a5a9 j 72e - -00000000000000e6 <_Z9print_hexy>: - -void print_hex(uint64 n) -{ - char buf[16]; - char digits[] = "0123456789ABCDEF"; - e6: 00000797 auipc a5,0x0 - ea: 6ea78793 addi a5,a5,1770 # 7d0 - ee: 6394 ld a3,0(a5) - f0: 6798 ld a4,8(a5) - f2: 0107c783 lbu a5,16(a5) -{ - f6: 715d addi sp,sp,-80 - f8: fc26 sd s1,56(sp) - write(1, "0x", 2); - fa: 4609 li a2,2 -{ - fc: 84aa mv s1,a0 - write(1, "0x", 2); - fe: 00000597 auipc a1,0x0 - 102: 6ca58593 addi a1,a1,1738 # 7c8 - 106: 4505 li a0,1 -{ - 108: e486 sd ra,72(sp) - char digits[] = "0123456789ABCDEF"; - 10a: ec36 sd a3,24(sp) - 10c: f03a sd a4,32(sp) - 10e: 02f10423 sb a5,40(sp) - write(1, "0x", 2); - 112: 61c000ef jal 72e - if (n == 0) - 116: cca1 beqz s1,16e <_Z9print_hexy+0x88> - 118: e0a2 sd s0,64(sp) - 11a: 0020 addi s0,sp,8 - 11c: 87a2 mv a5,s0 + + if (endptr) + 4792: c191 beqz a1,4796 + *endptr = (char *)s; + 4794: e188 sd a0,0(a1) + return val * sign; +} + 4796: 12a7f553 fmul.d fa0,fa5,fa0 + 479a: 8082 ret + s++; + 479c: 0505 addi a0,a0,1 + 479e: b779 j 472c + while (isdigit(*s)) + 47a0: 00154703 lbu a4,1(a0) + 47a4: 46a5 li a3,9 + s++; + 47a6: 0505 addi a0,a0,1 + 47a8: fd07071b addiw a4,a4,-48 + 47ac: 87ba mv a5,a4 + while (isdigit(*s)) + 47ae: fee6e2e3 bltu a3,a4,4792 + double factor = 1.0; + 47b2: 00001717 auipc a4,0x1 + 47b6: 08673707 fld fa4,134(a4) # 5838 + 47ba: 00001717 auipc a4,0x1 + 47be: 09e73607 fld fa2,158(a4) # 5858 + factor *= 0.1; + 47c2: 12c77753 fmul.d fa4,fa4,fa2 + while (isdigit(*s)) + 47c6: 00154703 lbu a4,1(a0) + val += (*s - '0') * factor; + 47ca: d20786d3 fcvt.d.w fa3,a5 + s++; + 47ce: 0505 addi a0,a0,1 + 47d0: fd07071b addiw a4,a4,-48 + 47d4: 87ba mv a5,a4 + val += (*s - '0') * factor; + 47d6: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 + while (isdigit(*s)) + 47da: fee6f4e3 bgeu a3,a4,47c2 + 47de: bf55 j 4792 + while (isdigit(*s)) + 47e0: 00154783 lbu a5,1(a0) + 47e4: 00001717 auipc a4,0x1 + 47e8: 04c73507 fld fa0,76(a4) # 5830 + s++; + 47ec: 0505 addi a0,a0,1 + 47ee: b7ad j 4758 + while (isdigit(*s)) + 47f0: 00154783 lbu a5,1(a0) + 47f4: 00001717 auipc a4,0x1 + 47f8: 04473507 fld fa0,68(a4) # 5838 + s++; + 47fc: 0505 addi a0,a0,1 + 47fe: bfa9 j 4758 + +0000000000004800 : + +double atof(const char *nptr) { return strtod(nptr, NULL); } + 4800: 4581 li a1,0 + 4802: b715 j 4726 + +0000000000004804 : +float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } + 4804: 1141 addi sp,sp,-16 + 4806: e406 sd ra,8(sp) + 4808: f1fff0ef jal 4726 + 480c: 60a2 ld ra,8(sp) + 480e: 40157553 fcvt.s.d fa0,fa0 + 4812: 0141 addi sp,sp,16 + 4814: 8082 ret + +0000000000004816 : + } +} + +void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) +{ + if (nmemb < 2 || size == 0) + 4816: 4785 li a5,1 + 4818: 0cb7fd63 bgeu a5,a1,48f2 +{ + 481c: 715d addi sp,sp,-80 + 481e: f44e sd s3,40(sp) + 4820: e486 sd ra,72(sp) + 4822: 89b2 mv s3,a2 + if (nmemb < 2 || size == 0) + 4824: c279 beqz a2,48ea + 4826: e85a sd s6,16(sp) + 4828: 8b2e mv s6,a1 return; + + char *base_ptr = (char *)base; + char *pivot = base_ptr + (nmemb - 1) * size; + 482a: 1b7d addi s6,s6,-1 + 482c: fc26 sd s1,56(sp) + 482e: 033b04b3 mul s1,s6,s3 + 4832: ec56 sd s5,24(sp) + 4834: 8aaa mv s5,a0 + 4836: f052 sd s4,32(sp) + 4838: e45e sd s7,8(sp) + 483a: e0a2 sd s0,64(sp) + 483c: f84a sd s2,48(sp) + 483e: 8a36 mv s4,a3 + if (nmemb < 2 || size == 0) + 4840: 4b85 li s7,1 + char *pivot = base_ptr + (nmemb - 1) * size; + 4842: 94d6 add s1,s1,s5 + char *i = base_ptr; + char *j = base_ptr; + + /* Partition */ + for (; j < pivot; j += size) + 4844: 069af763 bgeu s5,s1,48b2 + char *j = base_ptr; + 4848: 8956 mv s2,s5 + char *i = base_ptr; + 484a: 8456 mv s0,s5 + 484c: a021 j 4854 + for (; j < pivot; j += size) + 484e: 994e add s2,s2,s3 + 4850: 00997f63 bgeu s2,s1,486e + { + if (compar(j, pivot) < 0) + 4854: 85a6 mv a1,s1 + 4856: 854a mv a0,s2 + 4858: 9a02 jalr s4 + 485a: fe055ae3 bgez a0,484e + { + if (i != j) + 485e: 05241d63 bne s0,s2,48b8 + 4862: 01390633 add a2,s2,s3 + swap_bytes(i, j, size); + i += size; + 4866: 8432 mv s0,a2 + for (; j < pivot; j += size) + 4868: 994e add s2,s2,s3 + 486a: fe9965e3 bltu s2,s1,4854 + } } - int i = 0; - while (n > 0) + swap_bytes(i, pivot, size); + + /* Recurse */ + size_t left_count = (i - base_ptr) / size; + 486e: 415405b3 sub a1,s0,s5 + 4872: 0335d5b3 divu a1,a1,s3 + qsort(base, left_count, size, compar); + qsort(i + size, nmemb - left_count - 1, size, compar); + 4876: 40bb0b33 sub s6,s6,a1 + while (size--) + 487a: 013406b3 add a3,s0,s3 + *a++ = *b; + 487e: 0004c703 lbu a4,0(s1) + temp = *a; + 4882: 00044783 lbu a5,0(s0) + *b++ = temp; + 4886: 0485 addi s1,s1,1 + *a++ = *b; + 4888: 0405 addi s0,s0,1 + 488a: fee40fa3 sb a4,-1(s0) + *b++ = temp; + 488e: fef48fa3 sb a5,-1(s1) + while (size--) + 4892: fed416e3 bne s0,a3,487e + qsort(base, left_count, size, compar); + 4896: 86d2 mv a3,s4 + 4898: 864e mv a2,s3 + 489a: 8556 mv a0,s5 + 489c: f7bff0ef jal 4816 + if (nmemb < 2 || size == 0) + 48a0: 036bfe63 bgeu s7,s6,48dc + char *pivot = base_ptr + (nmemb - 1) * size; + 48a4: 1b7d addi s6,s6,-1 + 48a6: 033b04b3 mul s1,s6,s3 + 48aa: 8aa2 mv s5,s0 + 48ac: 94d6 add s1,s1,s5 + for (; j < pivot; j += size) + 48ae: f89aede3 bltu s5,s1,4848 + char *i = base_ptr; + 48b2: 8456 mv s0,s5 + for (; j < pivot; j += size) + 48b4: 4581 li a1,0 + 48b6: b7d1 j 487a + 48b8: 01340633 add a2,s0,s3 + if (i != j) + 48bc: 874a mv a4,s2 + 48be: 87a2 mv a5,s0 + *a++ = *b; + 48c0: 00074683 lbu a3,0(a4) + temp = *a; + 48c4: 0007c803 lbu a6,0(a5) + *b++ = temp; + 48c8: 0705 addi a4,a4,1 + *a++ = *b; + 48ca: 0785 addi a5,a5,1 + 48cc: fed78fa3 sb a3,-1(a5) + *b++ = temp; + 48d0: ff070fa3 sb a6,-1(a4) + while (size--) + 48d4: fec796e3 bne a5,a2,48c0 + i += size; + 48d8: 8432 mv s0,a2 + 48da: b779 j 4868 + 48dc: 6406 ld s0,64(sp) + 48de: 74e2 ld s1,56(sp) + 48e0: 7942 ld s2,48(sp) + 48e2: 7a02 ld s4,32(sp) + 48e4: 6ae2 ld s5,24(sp) + 48e6: 6b42 ld s6,16(sp) + 48e8: 6ba2 ld s7,8(sp) +} + 48ea: 60a6 ld ra,72(sp) + 48ec: 79a2 ld s3,40(sp) + 48ee: 6161 addi sp,sp,80 + 48f0: 8082 ret + 48f2: 8082 ret + +00000000000048f4 : + +void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) +{ + 48f4: 715d addi sp,sp,-80 + 48f6: e486 sd ra,72(sp) + 48f8: fc26 sd s1,56(sp) + size_t l = 0, u = nmemb; + while (l < u) + 48fa: c629 beqz a2,4944 + 48fc: f84a sd s2,48(sp) + 48fe: f44e sd s3,40(sp) + 4900: f052 sd s4,32(sp) + 4902: ec56 sd s5,24(sp) + 4904: e85a sd s6,16(sp) + 4906: e45e sd s7,8(sp) + 4908: e0a2 sd s0,64(sp) + 490a: 8932 mv s2,a2 + 490c: 8a2a mv s4,a0 + 490e: 8aae mv s5,a1 + 4910: 8b36 mv s6,a3 + 4912: 8bba mv s7,a4 + size_t l = 0, u = nmemb; + 4914: 4981 li s3,0 { - buf[i++] = digits[n % 16]; - 11e: 00f4f713 andi a4,s1,15 - 122: 03070713 addi a4,a4,48 - 126: 970a add a4,a4,sp - 128: fe874683 lbu a3,-24(a4) - n /= 16; - 12c: 8091 srli s1,s1,0x4 - 12e: 873e mv a4,a5 - buf[i++] = digits[n % 16]; - 130: 00d78023 sb a3,0(a5) - while (n > 0) - 134: 0785 addi a5,a5,1 - 136: f4e5 bnez s1,11e <_Z9print_hexy+0x38> - 138: 9f01 subw a4,a4,s0 - 13a: 0017079b addiw a5,a4,1 - 13e: fff7871b addiw a4,a5,-1 - 142: ffe40493 addi s1,s0,-2 - 146: 1702 slli a4,a4,0x20 - 148: fff78693 addi a3,a5,-1 - 14c: 94be add s1,s1,a5 - 14e: 9301 srli a4,a4,0x20 - 150: 9436 add s0,s0,a3 - 152: 8c99 sub s1,s1,a4 + size_t idx = (l + u) / 2; + 4916: 01298433 add s0,s3,s2 + 491a: 8005 srli s0,s0,0x1 + const void *p = (void *)((const char *)base + (idx * size)); + 491c: 036404b3 mul s1,s0,s6 + int cmp = compar(key, p); + 4920: 8552 mv a0,s4 + const void *p = (void *)((const char *)base + (idx * size)); + 4922: 94d6 add s1,s1,s5 + int cmp = compar(key, p); + 4924: 85a6 mv a1,s1 + 4926: 9b82 jalr s7 + if (cmp < 0) + 4928: 02054463 bltz a0,4950 + u = idx; + else if (cmp > 0) + 492c: c515 beqz a0,4958 + l = idx + 1; + 492e: 00140993 addi s3,s0,1 + while (l < u) + 4932: ff29e2e3 bltu s3,s2,4916 + 4936: 6406 ld s0,64(sp) + 4938: 7942 ld s2,48(sp) + 493a: 79a2 ld s3,40(sp) + 493c: 7a02 ld s4,32(sp) + 493e: 6ae2 ld s5,24(sp) + 4940: 6b42 ld s6,16(sp) + 4942: 6ba2 ld s7,8(sp) + else + return (void *)p; } - while (i > 0) - write(1, &buf[--i], 1); - 154: 85a2 mv a1,s0 - 156: 4605 li a2,1 - 158: 4505 li a0,1 - while (i > 0) - 15a: 147d addi s0,s0,-1 - write(1, &buf[--i], 1); - 15c: 5d2000ef jal 72e - while (i > 0) - 160: fe941ae3 bne s0,s1,154 <_Z9print_hexy+0x6e> - 164: 6406 ld s0,64(sp) -} - 166: 60a6 ld ra,72(sp) - 168: 74e2 ld s1,56(sp) - 16a: 6161 addi sp,sp,80 - 16c: 8082 ret - 16e: 60a6 ld ra,72(sp) - 170: 74e2 ld s1,56(sp) - write(1, "0", 1); - 172: 4605 li a2,1 - 174: 00000597 auipc a1,0x0 - 178: 64c58593 addi a1,a1,1612 # 7c0 - 17c: 4505 li a0,1 -} - 17e: 6161 addi sp,sp,80 - write(1, "0", 1); - 180: a37d j 72e - -0000000000000182 <_Z13test_syscallsv>: - -void test_syscalls() -{ - 182: 1101 addi sp,sp,-32 - 184: 00000697 auipc a3,0x0 - 188: 66468693 addi a3,a3,1636 # 7e8 - 18c: ec06 sd ra,24(sp) - 18e: e822 sd s0,16(sp) - 190: e426 sd s1,8(sp) - 192: 87b6 mv a5,a3 - while (s[n]) - 194: 0017c703 lbu a4,1(a5) - 198: 863e mv a2,a5 - 19a: 0785 addi a5,a5,1 - 19c: ff65 bnez a4,194 <_Z13test_syscallsv+0x12> - n++; - 19e: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 1a0: 2605 addiw a2,a2,1 - 1a2: 00000597 auipc a1,0x0 - 1a6: 64658593 addi a1,a1,1606 # 7e8 - 1aa: 4505 li a0,1 - 1ac: 582000ef jal 72e - while (s[n]) - 1b0: 00000697 auipc a3,0x0 - 1b4: 66868693 addi a3,a3,1640 # 818 - write(1, s, strlen(s)); - 1b8: 87b6 mv a5,a3 - while (s[n]) - 1ba: 0017c703 lbu a4,1(a5) - 1be: 863e mv a2,a5 - 1c0: 0785 addi a5,a5,1 - 1c2: ff65 bnez a4,1ba <_Z13test_syscallsv+0x38> - n++; - 1c4: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 1c6: 2605 addiw a2,a2,1 - 1c8: 00000597 auipc a1,0x0 - 1cc: 65058593 addi a1,a1,1616 # 818 - 1d0: 4505 li a0,1 - 1d2: 55c000ef jal 72e - print("\n=== [Test] Starting System Call Check ===\n"); - - print("[1/4] Checking getpid()... "); - int my_pid = getpid(); - 1d6: 5b8000ef jal 78e - 1da: 842a mv s0,a0 - if (my_pid > 0) - 1dc: 2aa05463 blez a0,484 <_Z13test_syscallsv+0x302> - 1e0: 00000697 auipc a3,0x0 - 1e4: 65868693 addi a3,a3,1624 # 838 - 1e8: 87b6 mv a5,a3 - while (s[n]) - 1ea: 0017c703 lbu a4,1(a5) - 1ee: 863e mv a2,a5 - 1f0: 0785 addi a5,a5,1 - 1f2: ff65 bnez a4,1ea <_Z13test_syscallsv+0x68> - n++; - 1f4: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 1f6: 2605 addiw a2,a2,1 - 1f8: 00000597 auipc a1,0x0 - 1fc: 64058593 addi a1,a1,1600 # 838 - 200: 4505 li a0,1 - 202: 52c000ef jal 72e + return NULL; +} + 4944: 60a6 ld ra,72(sp) + return NULL; + 4946: 4481 li s1,0 +} + 4948: 8526 mv a0,s1 + 494a: 74e2 ld s1,56(sp) + 494c: 6161 addi sp,sp,80 + 494e: 8082 ret + u = idx; + 4950: 8922 mv s2,s0 + while (l < u) + 4952: fd29e2e3 bltu s3,s2,4916 + 4956: b7c5 j 4936 + 4958: 6406 ld s0,64(sp) +} + 495a: 60a6 ld ra,72(sp) + 495c: 7942 ld s2,48(sp) + 495e: 79a2 ld s3,40(sp) + 4960: 7a02 ld s4,32(sp) + 4962: 6ae2 ld s5,24(sp) + 4964: 6b42 ld s6,16(sp) + 4966: 6ba2 ld s7,8(sp) + 4968: 8526 mv a0,s1 + 496a: 74e2 ld s1,56(sp) + 496c: 6161 addi sp,sp,80 + 496e: 8082 ret + +0000000000004970 : + +/* Math & Mics */ + +int abs(int j) { return (j < 0) ? -j : j; } + 4970: 41f5579b sraiw a5,a0,0x1f + 4974: 8d3d xor a0,a0,a5 + 4976: 9d1d subw a0,a0,a5 + 4978: 8082 ret + +000000000000497a : +long labs(long j) { return (j < 0) ? -j : j; } + 497a: 43f55793 srai a5,a0,0x3f + 497e: 8d3d xor a0,a0,a5 + 4980: 8d1d sub a0,a0,a5 + 4982: 8082 ret + +0000000000004984 : +long long llabs(long long j) { return (j < 0) ? -j : j; } + 4984: 43f55793 srai a5,a0,0x3f + 4988: 8d3d xor a0,a0,a5 + 498a: 8d1d sub a0,a0,a5 + 498c: 8082 ret + +000000000000498e
: + +div_t div(int numer, int denom) +{ + div_t res = {numer / denom, numer % denom}; + 498e: 02b547bb divw a5,a0,a1 +{ + 4992: 1141 addi sp,sp,-16 + return res; +} + 4994: 0141 addi sp,sp,16 + div_t res = {numer / denom, numer % denom}; + 4996: 02b5653b remw a0,a0,a1 + return res; + 499a: 1782 slli a5,a5,0x20 + 499c: 9381 srli a5,a5,0x20 + 499e: 1502 slli a0,a0,0x20 +} + 49a0: 8d5d or a0,a0,a5 + 49a2: 8082 ret + +00000000000049a4 : +ldiv_t ldiv(long numer, long denom) +{ + 49a4: 1141 addi sp,sp,-16 + 49a6: 87aa mv a5,a0 + ldiv_t res = {numer / denom, numer % denom}; + return res; +} + 49a8: 02b54533 div a0,a0,a1 + 49ac: 0141 addi sp,sp,16 + 49ae: 02b7e5b3 rem a1,a5,a1 + 49b2: 8082 ret + +00000000000049b4 : +lldiv_t lldiv(long long numer, long long denom) +{ + 49b4: 1141 addi sp,sp,-16 + 49b6: 87aa mv a5,a0 + lldiv_t res = {numer / denom, numer % denom}; + return res; +} + 49b8: 02b54533 div a0,a0,a1 + 49bc: 0141 addi sp,sp,16 + 49be: 02b7e5b3 rem a1,a5,a1 + 49c2: 8082 ret + +00000000000049c4 : + +static unsigned long next = 1; +int rand(void) +{ + next = next * 1103515245 + 12345; + 49c4: 00003697 auipc a3,0x3 + 49c8: d0468693 addi a3,a3,-764 # 76c8 + 49cc: 629c ld a5,0(a3) + 49ce: 41c65737 lui a4,0x41c65 + 49d2: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5d625> + 49d6: 02e787b3 mul a5,a5,a4 + 49da: 670d lui a4,0x3 + 49dc: 03970713 addi a4,a4,57 # 3039 + 49e0: 97ba add a5,a5,a4 + return (unsigned int)(next / 65536) % 32768; + 49e2: 02179513 slli a0,a5,0x21 + next = next * 1103515245 + 12345; + 49e6: e29c sd a5,0(a3) +} + 49e8: 9145 srli a0,a0,0x31 + 49ea: 8082 ret + +00000000000049ec : +void srand(unsigned int seed) { next = seed; } + 49ec: 1502 slli a0,a0,0x20 + 49ee: 9101 srli a0,a0,0x20 + 49f0: 00003797 auipc a5,0x3 + 49f4: cca7bc23 sd a0,-808(a5) # 76c8 + 49f8: 8082 ret + +00000000000049fa : + +/* Stub */ +int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } + 49fa: c901 beqz a0,4a0a + 49fc: 00054783 lbu a5,0(a0) + 4a00: 4501 li a0,0 + 4a02: c789 beqz a5,4a0c + 4a04: 00b03533 snez a0,a1 + 4a08: 8082 ret + 4a0a: 4501 li a0,0 + 4a0c: 8082 ret + +0000000000004a0e : +int mbtowc(wchar_t *pwc, const char *s, size_t n) +{ + 4a0e: 87aa mv a5,a0 + if (!s) + 4a10: cd81 beqz a1,4a28 + return 0; + if (n == 0) + return -1; + 4a12: 557d li a0,-1 + if (n == 0) + 4a14: ca19 beqz a2,4a2a + if (pwc) + 4a16: c781 beqz a5,4a1e + *pwc = (wchar_t)*s; + 4a18: 0005c703 lbu a4,0(a1) + 4a1c: c398 sw a4,0(a5) + return (*s != 0); + 4a1e: 0005c503 lbu a0,0(a1) + 4a22: 00a03533 snez a0,a0 + 4a26: 8082 ret + return 0; + 4a28: 4501 li a0,0 +} + 4a2a: 8082 ret + +0000000000004a2c : +int wctomb(char *s, wchar_t wchar) +{ + if (!s) + 4a2c: c509 beqz a0,4a36 + return 0; + *s = (char)wchar; + 4a2e: 00b50023 sb a1,0(a0) + return 1; + 4a32: 4505 li a0,1 + 4a34: 8082 ret + return 0; + 4a36: 4501 li a0,0 +} + 4a38: 8082 ret + +0000000000004a3a : +size_t mbstowcs(wchar_t *dest, const char *src, size_t n) +{ + size_t i = 0; + while (src[i] && i < n) + 4a3a: 0005c703 lbu a4,0(a1) + 4a3e: cb0d beqz a4,4a70 + 4a40: ca15 beqz a2,4a74 + 4a42: 86aa mv a3,a0 + size_t i = 0; + 4a44: 4781 li a5,0 + 4a46: a019 j 4a4c + while (src[i] && i < n) + 4a48: 02f60263 beq a2,a5,4a6c { - print("PASS (PID="); - print_int(my_pid); - 206: 8522 mv a0,s0 - 208: e4fff0ef jal 56 <_Z9print_inti> - while (s[n]) - 20c: 00000697 auipc a3,0x0 - 210: 63c68693 addi a3,a3,1596 # 848 - print_int(my_pid); - 214: 87b6 mv a5,a3 - while (s[n]) - 216: 0017c703 lbu a4,1(a5) - 21a: 863e mv a2,a5 - 21c: 0785 addi a5,a5,1 - 21e: ff65 bnez a4,216 <_Z13test_syscallsv+0x94> - n++; - 220: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 222: 2605 addiw a2,a2,1 - 224: 00000597 auipc a1,0x0 - 228: 62458593 addi a1,a1,1572 # 848 - 22c: 4505 li a0,1 - 22e: 500000ef jal 72e - while (s[n]) - 232: 00000697 auipc a3,0x0 - 236: 63668693 addi a3,a3,1590 # 868 - if (my_pid > 0) - 23a: 87b6 mv a5,a3 - while (s[n]) - 23c: 0017c703 lbu a4,1(a5) - 240: 863e mv a2,a5 - 242: 0785 addi a5,a5,1 - 244: ff65 bnez a4,23c <_Z13test_syscallsv+0xba> - n++; - 246: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 248: 2605 addiw a2,a2,1 - 24a: 00000597 auipc a1,0x0 - 24e: 61e58593 addi a1,a1,1566 # 868 - 252: 4505 li a0,1 - 254: 4da000ef jal 72e + dest[i] = (wchar_t)src[i]; + i++; + 4a4c: 0785 addi a5,a5,1 + dest[i] = (wchar_t)src[i]; + 4a4e: c298 sw a4,0(a3) + while (src[i] && i < n) + 4a50: 00f58733 add a4,a1,a5 + 4a54: 00074703 lbu a4,0(a4) + 4a58: 0691 addi a3,a3,4 + 4a5a: f77d bnez a4,4a48 + } + if (i < n) + 4a5c: 00c7f763 bgeu a5,a2,4a6a + dest[i] = 0; + 4a60: 00279713 slli a4,a5,0x2 + 4a64: 953a add a0,a0,a4 + 4a66: 00052023 sw zero,0(a0) + size_t i = 0; + 4a6a: 863e mv a2,a5 + 4a6c: 8532 mv a0,a2 + 4a6e: 8082 ret + 4a70: 4781 li a5,0 + 4a72: b7ed j 4a5c + 4a74: 4501 li a0,0 + return i; +} + 4a76: 8082 ret + +0000000000004a78 : +size_t wcstombs(char *dest, const wchar_t *src, size_t n) +{ + size_t i = 0; + while (src[i] && i < n) + 4a78: 4198 lw a4,0(a1) + 4a7a: c71d beqz a4,4aa8 + 4a7c: ca05 beqz a2,4aac + 4a7e: 0591 addi a1,a1,4 + size_t i = 0; + 4a80: 4781 li a5,0 + 4a82: a019 j 4a88 + while (src[i] && i < n) + 4a84: 02f60063 beq a2,a5,4aa4 { - print("FAIL (Invalid PID)\n"); + dest[i] = (char)src[i]; + 4a88: 00f506b3 add a3,a0,a5 + 4a8c: 00e68023 sb a4,0(a3) + while (src[i] && i < n) + 4a90: 4198 lw a4,0(a1) + i++; + 4a92: 0785 addi a5,a5,1 + while (src[i] && i < n) + 4a94: 0591 addi a1,a1,4 + 4a96: f77d bnez a4,4a84 } + if (i < n) + 4a98: 00c7f563 bgeu a5,a2,4aa2 + dest[i] = 0; + 4a9c: 953e add a0,a0,a5 + 4a9e: 00050023 sb zero,0(a0) + size_t i = 0; + 4aa2: 863e mv a2,a5 + 4aa4: 8532 mv a0,a2 + 4aa6: 8082 ret + 4aa8: 4781 li a5,0 + 4aaa: b7fd j 4a98 + 4aac: 4501 li a0,0 + return i; + 4aae: 8082 ret + +0000000000004ab0 : + +void *memset(void *dst, int c, size_t n) +{ + char *cdst = (char *)dst; + for (size_t i = 0; i < n; i++) + cdst[i] = (char)c; + 4ab0: 0ff5f593 zext.b a1,a1 + 4ab4: 87aa mv a5,a0 + 4ab6: 00a60733 add a4,a2,a0 + for (size_t i = 0; i < n; i++) + 4aba: c611 beqz a2,4ac6 + cdst[i] = (char)c; + 4abc: 00b78023 sb a1,0(a5) + for (size_t i = 0; i < n; i++) + 4ac0: 0785 addi a5,a5,1 + 4ac2: fee79de3 bne a5,a4,4abc + return dst; +} + 4ac6: 8082 ret + +0000000000004ac8 : + +void *memmove(void *vdst, const void *vsrc, size_t n) +{ + char *dst = (char *)vdst; + const char *src = (const char *)vsrc; + if (dst == src) + 4ac8: 02b50d63 beq a0,a1,4b02 + return vdst; - print("[2/4] Checking sbrk() heap allocation... "); - char *p = sbrk(4096); - 258: 6505 lui a0,0x1 - 25a: 53c000ef jal 796 - if (p == (char *)-1) - 25e: 57fd li a5,-1 - char *p = sbrk(4096); - 260: 84aa mv s1,a0 - if (p == (char *)-1) - 262: 24f50563 beq a0,a5,4ac <_Z13test_syscallsv+0x32a> + if (src > dst) + 4acc: 00b57e63 bgeu a0,a1,4ae8 { - print("FAIL (sbrk returned error)\n"); + while (n--) + 4ad0: ca0d beqz a2,4b02 + 4ad2: 962a add a2,a2,a0 + char *dst = (char *)vdst; + 4ad4: 87aa mv a5,a0 + *dst++ = *src++; + 4ad6: 0005c703 lbu a4,0(a1) + 4ada: 0785 addi a5,a5,1 + 4adc: 0585 addi a1,a1,1 + 4ade: fee78fa3 sb a4,-1(a5) + while (n--) + 4ae2: fec79ae3 bne a5,a2,4ad6 + 4ae6: 8082 ret } else { - p[0] = 'A'; - 266: 04100793 li a5,65 - 26a: 00f50023 sb a5,0(a0) # 1000 - p[4095] = 'Z'; - 26e: 6785 lui a5,0x1 - 270: 97aa add a5,a5,a0 - 272: 00000697 auipc a3,0x0 - 276: 64668693 addi a3,a3,1606 # 8b8 - 27a: 05a00713 li a4,90 - 27e: fee78fa3 sb a4,-1(a5) # fff - 282: 87b6 mv a5,a3 - while (s[n]) - 284: 0017c703 lbu a4,1(a5) - 288: 863e mv a2,a5 - 28a: 0785 addi a5,a5,1 - 28c: ff65 bnez a4,284 <_Z13test_syscallsv+0x102> - n++; - 28e: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 290: 2605 addiw a2,a2,1 - 292: 00000597 auipc a1,0x0 - 296: 62658593 addi a1,a1,1574 # 8b8 - 29a: 4505 li a0,1 - 29c: 492000ef jal 72e - if (p[0] == 'A' && p[4095] == 'Z') - { - print("PASS (Allocated at "); - print_hex((uint64)p); - 2a0: 8526 mv a0,s1 - 2a2: e45ff0ef jal e6 <_Z9print_hexy> - while (s[n]) - 2a6: 00000697 auipc a3,0x0 - 2aa: 5a268693 addi a3,a3,1442 # 848 - print_hex((uint64)p); - 2ae: 87b6 mv a5,a3 - while (s[n]) - 2b0: 0017c703 lbu a4,1(a5) - 2b4: 863e mv a2,a5 - 2b6: 0785 addi a5,a5,1 - 2b8: ff65 bnez a4,2b0 <_Z13test_syscallsv+0x12e> - n++; - 2ba: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 2bc: 2605 addiw a2,a2,1 - 2be: 00000597 auipc a1,0x0 - 2c2: 58a58593 addi a1,a1,1418 # 848 - 2c6: 4505 li a0,1 - 2c8: 466000ef jal 72e - while (s[n]) - 2cc: 00000697 auipc a3,0x0 - 2d0: 60468693 addi a3,a3,1540 # 8d0 - print_hex((uint64)p); - 2d4: 87b6 mv a5,a3 - while (s[n]) - 2d6: 0017c703 lbu a4,1(a5) - 2da: 863e mv a2,a5 - 2dc: 0785 addi a5,a5,1 - 2de: ff65 bnez a4,2d6 <_Z13test_syscallsv+0x154> - n++; - 2e0: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 2e2: 2605 addiw a2,a2,1 - 2e4: 00000597 auipc a1,0x0 - 2e8: 5ec58593 addi a1,a1,1516 # 8d0 - 2ec: 4505 li a0,1 - 2ee: 440000ef jal 72e - print("FAIL (Memory read/write check failed)\n"); - } + dst += n; + 4ae8: 00c50733 add a4,a0,a2 + src += n; + 4aec: 00c587b3 add a5,a1,a2 + while (n-- > 0) + 4af0: ca09 beqz a2,4b02 + *--dst = *--src; + 4af2: fff7c683 lbu a3,-1(a5) + 4af6: 17fd addi a5,a5,-1 + 4af8: 177d addi a4,a4,-1 + 4afa: 00d70023 sb a3,0(a4) + while (n-- > 0) + 4afe: fef59ae3 bne a1,a5,4af2 } + return vdst; +} + 4b02: 8082 ret + +0000000000004b04 : - print("[3/4] Checking fork() and wait()...\n"); - int pid = fork(); - 2f2: 414000ef jal 706 - 2f6: 84aa mv s1,a0 +void *memcpy(void *vdst, const void *vsrc, size_t n) +{ + return memmove(vdst, vsrc, n); + 4b04: b7d1 j 4ac8 + +0000000000004b06 : - if (pid < 0) - 2f8: 1c054e63 bltz a0,4d4 <_Z13test_syscallsv+0x352> +int memcmp(const void *s1, const void *s2, size_t n) +{ + const unsigned char *p1 = (const unsigned char *)s1; + const unsigned char *p2 = (const unsigned char *)s2; + while (n--) + 4b06: c205 beqz a2,4b26 + 4b08: 962a add a2,a2,a0 + 4b0a: a019 j 4b10 + 4b0c: 00c50d63 beq a0,a2,4b26 { - print(" FAIL: fork error\n"); + if (*p1 != *p2) + 4b10: 00054783 lbu a5,0(a0) + 4b14: 0005c703 lbu a4,0(a1) + return *p1 - *p2; + p1++; + 4b18: 0505 addi a0,a0,1 + p2++; + 4b1a: 0585 addi a1,a1,1 + if (*p1 != *p2) + 4b1c: fee788e3 beq a5,a4,4b0c + return *p1 - *p2; + 4b20: 40e7853b subw a0,a5,a4 + 4b24: 8082 ret } - else if (pid == 0) - 2fc: e179 bnez a0,3c2 <_Z13test_syscallsv+0x240> + return 0; + 4b26: 4501 li a0,0 +} + 4b28: 8082 ret + +0000000000004b2a : + +void *memchr(const void *s, int c, size_t n) +{ + const unsigned char *p = (const unsigned char *)s; + while (n--) + 4b2a: ce09 beqz a2,4b44 { - int child_pid = getpid(); - 2fe: 490000ef jal 78e - 302: 84aa mv s1,a0 - if (child_pid == my_pid) - 304: 24a40563 beq s0,a0,54e <_Z13test_syscallsv+0x3cc> - while (s[n]) - 308: 00000697 auipc a3,0x0 - 30c: 63868693 addi a3,a3,1592 # 940 - if (child_pid == my_pid) - 310: 87b6 mv a5,a3 - while (s[n]) - 312: 0017c703 lbu a4,1(a5) - 316: 863e mv a2,a5 - 318: 0785 addi a5,a5,1 - 31a: ff65 bnez a4,312 <_Z13test_syscallsv+0x190> - n++; - 31c: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 31e: 2605 addiw a2,a2,1 - 320: 00000597 auipc a1,0x0 - 324: 62058593 addi a1,a1,1568 # 940 - 328: 4505 li a0,1 - 32a: 404000ef jal 72e - { - print(" FAIL: Child has same PID as parent\n"); - exit(1); - } - print(" [Child] I am alive. PID="); - print_int(child_pid); - 32e: 8526 mv a0,s1 - 330: d27ff0ef jal 56 <_Z9print_inti> - write(1, s, strlen(s)); - 334: 4605 li a2,1 - 336: 00000597 auipc a1,0x0 - 33a: 62a58593 addi a1,a1,1578 # 960 - 33e: 4505 li a0,1 - 340: 3ee000ef jal 72e - while (s[n]) - 344: 00000697 auipc a3,0x0 - 348: 62468693 addi a3,a3,1572 # 968 - write(1, s, strlen(s)); - 34c: 87b6 mv a5,a3 - while (s[n]) - 34e: 0017c703 lbu a4,1(a5) - 352: 863e mv a2,a5 - 354: 0785 addi a5,a5,1 - 356: ff65 bnez a4,34e <_Z13test_syscallsv+0x1cc> - n++; - 358: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 35a: 2605 addiw a2,a2,1 - 35c: 00000597 auipc a1,0x0 - 360: 60c58593 addi a1,a1,1548 # 968 - 364: 4505 li a0,1 - 366: 3c8000ef jal 72e - print("\n"); - print(" [Child] Exiting now.\n"); - exit(0); - 36a: 4501 li a0,0 - 36c: 3a2000ef jal 70e - while (s[n]) - 370: 00000697 auipc a3,0x0 - 374: 6c868693 addi a3,a3,1736 # a38 - print("PASS (Fork/Wait cycle)\n"); - } - else - { - print("FAIL (Wait returned "); - print_int(waited_pid); - 378: 87b6 mv a5,a3 - while (s[n]) - 37a: 0017c703 lbu a4,1(a5) - 37e: 863e mv a2,a5 - 380: 0785 addi a5,a5,1 - 382: ff65 bnez a4,37a <_Z13test_syscallsv+0x1f8> - n++; - 384: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 386: 2605 addiw a2,a2,1 - 388: 00000597 auipc a1,0x0 - 38c: 6b058593 addi a1,a1,1712 # a38 - 390: 4505 li a0,1 - 392: 39c000ef jal 72e - while (s[n]) - 396: 00000697 auipc a3,0x0 - 39a: 6d268693 addi a3,a3,1746 # a68 - write(1, s, strlen(s)); - 39e: 87b6 mv a5,a3 - while (s[n]) - 3a0: 0017c703 lbu a4,1(a5) - 3a4: 863e mv a2,a5 - 3a6: 0785 addi a5,a5,1 - 3a8: ff65 bnez a4,3a0 <_Z13test_syscallsv+0x21e> + if (*p == (unsigned char)c) + 4b2c: 0ff5f593 zext.b a1,a1 + 4b30: 962a add a2,a2,a0 + 4b32: a021 j 4b3a + return (void *)p; + p++; + 4b34: 0505 addi a0,a0,1 + while (n--) + 4b36: 00a60763 beq a2,a0,4b44 + if (*p == (unsigned char)c) + 4b3a: 00054783 lbu a5,0(a0) + 4b3e: feb79be3 bne a5,a1,4b34 } + return NULL; +} + 4b42: 8082 ret + return NULL; + 4b44: 4501 li a0,0 +} + 4b46: 8082 ret - print("[4/4] Checking write()... PASS (Self-evident)\n"); - - print("=== [Test] All Tests Finished ===\n"); -} - 3aa: 6442 ld s0,16(sp) - 3ac: 60e2 ld ra,24(sp) - 3ae: 64a2 ld s1,8(sp) - n++; - 3b0: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 3b2: 2605 addiw a2,a2,1 - 3b4: 00000597 auipc a1,0x0 - 3b8: 6b458593 addi a1,a1,1716 # a68 - 3bc: 4505 li a0,1 -} - 3be: 6105 addi sp,sp,32 - write(1, s, strlen(s)); - 3c0: a6bd j 72e - 3c2: 00000697 auipc a3,0x0 - 3c6: 5c668693 addi a3,a3,1478 # 988 - else if (pid == 0) - 3ca: 87b6 mv a5,a3 - while (s[n]) - 3cc: 0017c703 lbu a4,1(a5) - 3d0: 863e mv a2,a5 - 3d2: 0785 addi a5,a5,1 - 3d4: ff65 bnez a4,3cc <_Z13test_syscallsv+0x24a> - n++; - 3d6: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 3d8: 2605 addiw a2,a2,1 - 3da: 00000597 auipc a1,0x0 - 3de: 5ae58593 addi a1,a1,1454 # 988 - 3e2: 4505 li a0,1 - 3e4: 34a000ef jal 72e - print_int(pid); - 3e8: 8526 mv a0,s1 - 3ea: c6dff0ef jal 56 <_Z9print_inti> - write(1, s, strlen(s)); - 3ee: 4605 li a2,1 - 3f0: 00000597 auipc a1,0x0 - 3f4: 57058593 addi a1,a1,1392 # 960 - 3f8: 4505 li a0,1 - 3fa: 334000ef jal 72e - while (s[n]) - 3fe: 00000697 auipc a3,0x0 - 402: 5b268693 addi a3,a3,1458 # 9b0 - write(1, s, strlen(s)); - 406: 87b6 mv a5,a3 - while (s[n]) - 408: 0017c703 lbu a4,1(a5) - 40c: 863e mv a2,a5 - 40e: 0785 addi a5,a5,1 - 410: ff65 bnez a4,408 <_Z13test_syscallsv+0x286> - n++; - 412: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 414: 2605 addiw a2,a2,1 - 416: 00000597 auipc a1,0x0 - 41a: 59a58593 addi a1,a1,1434 # 9b0 - 41e: 4505 li a0,1 - 420: 30e000ef jal 72e - int waited_pid = wait(0); - 424: 4501 li a0,0 - 426: 2f0000ef jal 716 - 42a: 00000697 auipc a3,0x0 - 42e: 5f668693 addi a3,a3,1526 # a20 - 432: 842a mv s0,a0 - if (waited_pid == pid) - 434: 87b6 mv a5,a3 - 436: 0ca48363 beq s1,a0,4fc <_Z13test_syscallsv+0x37a> - while (s[n]) - 43a: 0017c703 lbu a4,1(a5) - 43e: 863e mv a2,a5 - 440: 0785 addi a5,a5,1 - 442: ff65 bnez a4,43a <_Z13test_syscallsv+0x2b8> - n++; - 444: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 446: 2605 addiw a2,a2,1 - 448: 00000597 auipc a1,0x0 - 44c: 5d858593 addi a1,a1,1496 # a20 - 450: 4505 li a0,1 - 452: 2dc000ef jal 72e - print_int(waited_pid); - 456: 8522 mv a0,s0 - 458: bffff0ef jal 56 <_Z9print_inti> - while (s[n]) - 45c: 00000697 auipc a3,0x0 - 460: 3ec68693 addi a3,a3,1004 # 848 - print_int(waited_pid); - 464: 87b6 mv a5,a3 - while (s[n]) - 466: 0017c703 lbu a4,1(a5) - 46a: 863e mv a2,a5 - 46c: 0785 addi a5,a5,1 - 46e: ff65 bnez a4,466 <_Z13test_syscallsv+0x2e4> - n++; - 470: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 472: 2605 addiw a2,a2,1 - 474: 00000597 auipc a1,0x0 - 478: 3d458593 addi a1,a1,980 # 848 - 47c: 4505 li a0,1 - 47e: 2b0000ef jal 72e -} - 482: b5fd j 370 <_Z13test_syscallsv+0x1ee> - 484: 00000697 auipc a3,0x0 - 488: 3cc68693 addi a3,a3,972 # 850 - if (my_pid > 0) - 48c: 87b6 mv a5,a3 - while (s[n]) - 48e: 0017c703 lbu a4,1(a5) - 492: 863e mv a2,a5 - 494: 0785 addi a5,a5,1 - 496: ff65 bnez a4,48e <_Z13test_syscallsv+0x30c> - n++; - 498: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 49a: 2605 addiw a2,a2,1 - 49c: 00000597 auipc a1,0x0 - 4a0: 3b458593 addi a1,a1,948 # 850 - 4a4: 4505 li a0,1 - 4a6: 288000ef jal 72e -} - 4aa: b361 j 232 <_Z13test_syscallsv+0xb0> - 4ac: 00000697 auipc a3,0x0 - 4b0: 3ec68693 addi a3,a3,1004 # 898 - if (p == (char *)-1) - 4b4: 87b6 mv a5,a3 - while (s[n]) - 4b6: 0017c703 lbu a4,1(a5) - 4ba: 863e mv a2,a5 - 4bc: 0785 addi a5,a5,1 - 4be: ff65 bnez a4,4b6 <_Z13test_syscallsv+0x334> - n++; - 4c0: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 4c2: 2605 addiw a2,a2,1 - 4c4: 00000597 auipc a1,0x0 - 4c8: 3d458593 addi a1,a1,980 # 898 - 4cc: 4505 li a0,1 - 4ce: 260000ef jal 72e -} - 4d2: bbed j 2cc <_Z13test_syscallsv+0x14a> - 4d4: 00000697 auipc a3,0x0 - 4d8: 42468693 addi a3,a3,1060 # 8f8 - if (pid < 0) - 4dc: 87b6 mv a5,a3 - while (s[n]) - 4de: 0017c703 lbu a4,1(a5) - 4e2: 863e mv a2,a5 - 4e4: 0785 addi a5,a5,1 - 4e6: ff65 bnez a4,4de <_Z13test_syscallsv+0x35c> - n++; - 4e8: 9e15 subw a2,a2,a3 - write(1, s, strlen(s)); - 4ea: 2605 addiw a2,a2,1 - 4ec: 00000597 auipc a1,0x0 - 4f0: 40c58593 addi a1,a1,1036 # 8f8 - 4f4: 4505 li a0,1 - 4f6: 238000ef jal 72e -} - 4fa: bd9d j 370 <_Z13test_syscallsv+0x1ee> - 4fc: 00000617 auipc a2,0x0 - 500: 4dc60613 addi a2,a2,1244 # 9d8 - if (waited_pid == pid) - 504: 87b2 mv a5,a2 - while (s[n]) - 506: 0017c703 lbu a4,1(a5) - 50a: 86be mv a3,a5 - 50c: 0785 addi a5,a5,1 - 50e: ff65 bnez a4,506 <_Z13test_syscallsv+0x384> - n++; - 510: 40c6863b subw a2,a3,a2 - write(1, s, strlen(s)); - 514: 2605 addiw a2,a2,1 - 516: 00000597 auipc a1,0x0 - 51a: 4c258593 addi a1,a1,1218 # 9d8 - 51e: 4505 li a0,1 - 520: 20e000ef jal 72e - while (s[n]) - 524: 00000617 auipc a2,0x0 - 528: 4e460613 addi a2,a2,1252 # a08 - write(1, s, strlen(s)); - 52c: 87b2 mv a5,a2 - while (s[n]) - 52e: 0017c703 lbu a4,1(a5) - 532: 86be mv a3,a5 - 534: 0785 addi a5,a5,1 - 536: ff65 bnez a4,52e <_Z13test_syscallsv+0x3ac> - n++; - 538: 40c6863b subw a2,a3,a2 - write(1, s, strlen(s)); - 53c: 2605 addiw a2,a2,1 - 53e: 00000597 auipc a1,0x0 - 542: 4ca58593 addi a1,a1,1226 # a08 - 546: 4505 li a0,1 - 548: 1e6000ef jal 72e -} - 54c: b515 j 370 <_Z13test_syscallsv+0x1ee> - 54e: 00000617 auipc a2,0x0 - 552: 3c260613 addi a2,a2,962 # 910 - if (child_pid == my_pid) - 556: 87b2 mv a5,a2 - while (s[n]) - 558: 0017c703 lbu a4,1(a5) - 55c: 86be mv a3,a5 - 55e: 0785 addi a5,a5,1 - 560: ff65 bnez a4,558 <_Z13test_syscallsv+0x3d6> - n++; - 562: 40c6863b subw a2,a3,a2 - write(1, s, strlen(s)); - 566: 2605 addiw a2,a2,1 - 568: 00000597 auipc a1,0x0 - 56c: 3a858593 addi a1,a1,936 # 910 - 570: 4505 li a0,1 - 572: 1bc000ef jal 72e - exit(1); - 576: 4505 li a0,1 - 578: 196000ef jal 70e - 57c: b371 j 308 <_Z13test_syscallsv+0x186> +0000000000004b48 : +/* String Manipulation Functions */ -000000000000057e
: +size_t strlen(const char *s) +{ + const char *p = s; + while (*p) + 4b48: 00054783 lbu a5,0(a0) + 4b4c: cb89 beqz a5,4b5e + const char *p = s; + 4b4e: 87aa mv a5,a0 + while (*p) + 4b50: 0017c703 lbu a4,1(a5) + p++; + 4b54: 0785 addi a5,a5,1 + while (*p) + 4b56: ff6d bnez a4,4b50 + return (size_t)(p - s); + 4b58: 40a78533 sub a0,a5,a0 + 4b5c: 8082 ret + while (*p) + 4b5e: 4501 li a0,0 +} + 4b60: 8082 ret +0000000000004b62 : -int main() +char *strcpy(char *dst, const char *src) { - 57e: 7119 addi sp,sp,-128 - print("\n[Lume Shell] Init process started.\n"); - 580: 00000517 auipc a0,0x0 - 584: 51050513 addi a0,a0,1296 # a90 -{ - 588: fc86 sd ra,120(sp) - 58a: f8a2 sd s0,112(sp) - 58c: f4a6 sd s1,104(sp) - 58e: f0ca sd s2,96(sp) - 590: ecce sd s3,88(sp) - 592: e8d2 sd s4,80(sp) - 594: e4d6 sd s5,72(sp) - 596: e0da sd s6,64(sp) - print("\n[Lume Shell] Init process started.\n"); - 598: a97ff0ef jal 2e <_Z5printPKc> - print("[Test] Opening test.txt...\n"); - 59c: 00000517 auipc a0,0x0 - 5a0: 51c50513 addi a0,a0,1308 # ab8 - 5a4: a8bff0ef jal 2e <_Z5printPKc> - int fd = open("test.txt", O_RDONLY); - 5a8: 4581 li a1,0 - 5aa: 00000517 auipc a0,0x0 - 5ae: 52e50513 addi a0,a0,1326 # ad8 - 5b2: 19c000ef jal 74e - if (fd < 0) - 5b6: 14054063 bltz a0,6f6 - 5ba: 84aa mv s1,a0 + char *os = dst; + while ((*dst++ = *src++) != 0) + 4b62: 87aa mv a5,a0 + 4b64: 0005c703 lbu a4,0(a1) + 4b68: 0785 addi a5,a5,1 + 4b6a: 0585 addi a1,a1,1 + 4b6c: fee78fa3 sb a4,-1(a5) + 4b70: fb75 bnez a4,4b64 + ; + return os; +} + 4b72: 8082 ret + +0000000000004b74 : +char *strncpy(char *dst, const char *src, size_t n) +{ + char *os = dst; + size_t i; + + for (i = 0; i < n && src[i] != '\0'; i++) + 4b74: 4781 li a5,0 + 4b76: e619 bnez a2,4b84 + 4b78: 8082 ret + dst[i] = src[i]; + 4b7a: 00e68023 sb a4,0(a3) + for (i = 0; i < n && src[i] != '\0'; i++) + 4b7e: 0785 addi a5,a5,1 + 4b80: 02f60263 beq a2,a5,4ba4 + 4b84: 00f58733 add a4,a1,a5 + 4b88: 00074703 lbu a4,0(a4) + dst[i] = src[i]; + 4b8c: 00f506b3 add a3,a0,a5 + for (i = 0; i < n && src[i] != '\0'; i++) + 4b90: f76d bnez a4,4b7a + + for (; i < n; i++) + 4b92: 00c7f963 bgeu a5,a2,4ba4 + 4b96: 87b6 mv a5,a3 + 4b98: 962a add a2,a2,a0 + dst[i] = '\0'; + 4b9a: 00078023 sb zero,0(a5) + for (; i < n; i++) + 4b9e: 0785 addi a5,a5,1 + 4ba0: fec79de3 bne a5,a2,4b9a + + return os; +} + 4ba4: 8082 ret + +0000000000004ba6 : + +char *strcat(char *dst, const char *src) +{ + char *os = dst; + while (*dst) + 4ba6: 00054783 lbu a5,0(a0) + 4baa: cf91 beqz a5,4bc6 + 4bac: 87aa mv a5,a0 + 4bae: 0017c703 lbu a4,1(a5) + dst++; + 4bb2: 0785 addi a5,a5,1 + while (*dst) + 4bb4: ff6d bnez a4,4bae + while ((*dst++ = *src++) != 0) + 4bb6: 0005c703 lbu a4,0(a1) + 4bba: 0785 addi a5,a5,1 + 4bbc: 0585 addi a1,a1,1 + 4bbe: fee78fa3 sb a4,-1(a5) + 4bc2: fb75 bnez a4,4bb6 + ; + return os; +} + 4bc4: 8082 ret + while ((*dst++ = *src++) != 0) + 4bc6: 0005c703 lbu a4,0(a1) + while (*dst) + 4bca: 87aa mv a5,a0 + while ((*dst++ = *src++) != 0) + 4bcc: 0785 addi a5,a5,1 + 4bce: fee78fa3 sb a4,-1(a5) + 4bd2: 0585 addi a1,a1,1 + 4bd4: f36d bnez a4,4bb6 + 4bd6: 8082 ret + +0000000000004bd8 : + while (*p) + 4bd8: 00054783 lbu a5,0(a0) + const char *p = s; + 4bdc: 872a mv a4,a0 + while (*p) + 4bde: c789 beqz a5,4be8 + 4be0: 00174783 lbu a5,1(a4) + p++; + 4be4: 0705 addi a4,a4,1 + while (*p) + 4be6: ffed bnez a5,4be0 + size_t dest_len = strlen(dst); + size_t i; + + dst += dest_len; + + for (i = 0; i < n && src[i] != '\0'; i++) + 4be8: 86ba mv a3,a4 + 4bea: 4781 li a5,0 + 4bec: 88ba mv a7,a4 + 4bee: ea01 bnez a2,4bfe + 4bf0: a839 j 4c0e + dst[i] = src[i]; + 4bf2: 01068023 sb a6,0(a3) + for (i = 0; i < n && src[i] != '\0'; i++) + 4bf6: 00188693 addi a3,a7,1 + 4bfa: 00f60d63 beq a2,a5,4c14 + 4bfe: 00f58833 add a6,a1,a5 + 4c02: 00084803 lbu a6,0(a6) + 4c06: 0785 addi a5,a5,1 + dst[i] = src[i]; + 4c08: 88b6 mv a7,a3 + for (i = 0; i < n && src[i] != '\0'; i++) + 4c0a: fe0814e3 bnez a6,4bf2 + + dst[i] = '\0'; + 4c0e: 00088023 sb zero,0(a7) + + return os; +} + 4c12: 8082 ret + dst[i] = '\0'; + 4c14: 00c708b3 add a7,a4,a2 + 4c18: 00088023 sb zero,0(a7) +} + 4c1c: 8082 ret + +0000000000004c1e : + +int strcmp(const char *p, const char *q) +{ + while (*p && *p == *q) + 4c1e: 00054783 lbu a5,0(a0) + 4c22: e791 bnez a5,4c2e + 4c24: a02d j 4c4e + 4c26: 00054783 lbu a5,0(a0) + 4c2a: cf89 beqz a5,4c44 + 4c2c: 85b6 mv a1,a3 + 4c2e: 0005c703 lbu a4,0(a1) { - print("[Test] Open failed (Is test.txt in fs.img?)\n"); + p++; + 4c32: 0505 addi a0,a0,1 + q++; + 4c34: 00158693 addi a3,a1,1 + while (*p && *p == *q) + 4c38: fef707e3 beq a4,a5,4c26 } - else + return (int)((unsigned char)*p - (unsigned char)*q); + 4c3c: 0007851b sext.w a0,a5 +} + 4c40: 9d19 subw a0,a0,a4 + 4c42: 8082 ret + return (int)((unsigned char)*p - (unsigned char)*q); + 4c44: 0015c703 lbu a4,1(a1) + 4c48: 4501 li a0,0 +} + 4c4a: 9d19 subw a0,a0,a4 + 4c4c: 8082 ret + return (int)((unsigned char)*p - (unsigned char)*q); + 4c4e: 0005c703 lbu a4,0(a1) + 4c52: 4501 li a0,0 + 4c54: b7f5 j 4c40 + +0000000000004c56 : + +int strncmp(const char *s1, const char *s2, size_t n) +{ + if (n == 0) + 4c56: ca0d beqz a2,4c88 + return 0; + + while (n-- > 0 && *s1 && *s1 == *s2) + 4c58: 00054783 lbu a5,0(a0) + 4c5c: 167d addi a2,a2,-1 + 4c5e: 00c506b3 add a3,a0,a2 + 4c62: eb89 bnez a5,4c74 + 4c64: a80d j 4c96 { - print("[Test] Open success! fd="); - 5bc: 00000517 auipc a0,0x0 - 5c0: 55c50513 addi a0,a0,1372 # b18 - 5c4: a6bff0ef jal 2e <_Z5printPKc> - print_int(fd); - 5c8: 8526 mv a0,s1 - 5ca: a8dff0ef jal 56 <_Z9print_inti> - print("\n"); - 5ce: 00000517 auipc a0,0x0 - 5d2: 39250513 addi a0,a0,914 # 960 - 5d6: a59ff0ef jal 2e <_Z5printPKc> - - char buf[64]; - int n = read(fd, buf, 63); - 5da: 840a mv s0,sp - 5dc: 03f00613 li a2,63 - 5e0: 85a2 mv a1,s0 - 5e2: 8526 mv a0,s1 - 5e4: 142000ef jal 726 - 5e8: 892a mv s2,a0 - if (n > 0) - 5ea: 0ca05663 blez a0,6b6 - { - buf[n] = 0; - 5ee: 04050793 addi a5,a0,64 - 5f2: 00278933 add s2,a5,sp - print("[Test] Read content:\n---\n"); - 5f6: 00000517 auipc a0,0x0 - 5fa: 54250513 addi a0,a0,1346 # b38 - buf[n] = 0; - 5fe: fc090023 sb zero,-64(s2) - print("[Test] Read content:\n---\n"); - 602: a2dff0ef jal 2e <_Z5printPKc> - print(buf); - 606: 8522 mv a0,s0 - 608: a27ff0ef jal 2e <_Z5printPKc> - print("\n---\n"); - 60c: 00000517 auipc a0,0x0 - 610: 54c50513 addi a0,a0,1356 # b58 - 614: a1bff0ef jal 2e <_Z5printPKc> - { - print("[Test] Read returned "); - print_int(n); - print("\n"); - } - close(fd); - 618: 8526 mv a0,s1 - 61a: 11c000ef jal 736 - print("[Test] File closed.\n"); - 61e: 00000517 auipc a0,0x0 - 622: 55a50513 addi a0,a0,1370 # b78 - 626: a09ff0ef jal 2e <_Z5printPKc> + if (n == 0 || *s1 == '\0') + 4c66: 00d50d63 beq a0,a3,4c80 + while (n-- > 0 && *s1 && *s1 == *s2) + 4c6a: 00154783 lbu a5,1(a0) + break; + s1++; + 4c6e: 0505 addi a0,a0,1 + while (n-- > 0 && *s1 && *s1 == *s2) + 4c70: cf91 beqz a5,4c8c + 4c72: 85b2 mv a1,a2 + 4c74: 0005c703 lbu a4,0(a1) + s2++; + 4c78: 00158613 addi a2,a1,1 + while (n-- > 0 && *s1 && *s1 == *s2) + 4c7c: fef705e3 beq a4,a5,4c66 } + return (int)((unsigned char)*s1 - (unsigned char)*s2); + 4c80: 0007851b sext.w a0,a5 + 4c84: 9d19 subw a0,a0,a4 + 4c86: 8082 ret + return 0; + 4c88: 4501 li a0,0 +} + 4c8a: 8082 ret + return (int)((unsigned char)*s1 - (unsigned char)*s2); + 4c8c: 0015c703 lbu a4,1(a1) + 4c90: 4501 li a0,0 + 4c92: 9d19 subw a0,a0,a4 + 4c94: 8082 ret + 4c96: 0005c703 lbu a4,0(a1) + 4c9a: 4501 li a0,0 + 4c9c: b7e5 j 4c84 - +0000000000004c9e : - print("Commands:\n"); - 62a: 00000517 auipc a0,0x0 - 62e: 56650513 addi a0,a0,1382 # b90 - 632: 9fdff0ef jal 2e <_Z5printPKc> - print(" s: Run System Call Tests (fork, wait, mm)\n"); - 636: 00000517 auipc a0,0x0 - 63a: 56a50513 addi a0,a0,1386 # ba0 - 63e: 9f1ff0ef jal 2e <_Z5printPKc> - print(" t: Run Disk Driver Test (VirtIO)\n"); - 642: 00000517 auipc a0,0x0 - 646: 58e50513 addi a0,a0,1422 # bd0 - 64a: 00000b17 auipc s6,0x0 - 64e: 5b6b0b13 addi s6,s6,1462 # c00 - n++; - 652: 4a85 li s5,1 - print(" t: Run Disk Driver Test (VirtIO)\n"); - 654: 9dbff0ef jal 2e <_Z5printPKc> +char *strchr(const char *s, int c) +{ + while (*s != (char)c) + 4c9e: 0ff5f593 zext.b a1,a1 + 4ca2: a019 j 4ca8 + { + if (!*s++) + 4ca4: 0505 addi a0,a0,1 + 4ca6: c791 beqz a5,4cb2 + while (*s != (char)c) + 4ca8: 00054783 lbu a5,0(a0) + 4cac: feb79ce3 bne a5,a1,4ca4 + 4cb0: 8082 ret + return NULL; + 4cb2: 4501 li a0,0 + } + return (char *)s; +} + 4cb4: 8082 ret - while (1) +0000000000004cb6 : + +char *strrchr(const char *s, int c) +{ + 4cb6: 87aa mv a5,a0 + const char *last = NULL; + do { - char buf[16]; - write(1, "$ ", 2); - 658: 00000497 auipc s1,0x0 - 65c: 5a048493 addi s1,s1,1440 # bf8 + if (*s == (char)c) + 4cb8: 0ff5f593 zext.b a1,a1 + const char *last = NULL; + 4cbc: 4501 li a0,0 + if (*s == (char)c) + 4cbe: 0007c703 lbu a4,0(a5) + 4cc2: 00e59363 bne a1,a4,4cc8 + last = s; + 4cc6: 853e mv a0,a5 + } while (*s++); + 4cc8: 0785 addi a5,a5,1 + 4cca: fb75 bnez a4,4cbe + + return (char *)last; +} + 4ccc: 8082 ret + +0000000000004cce : + while (*p) + 4cce: 0005c883 lbu a7,0(a1) + 4cd2: 04088a63 beqz a7,4d26 + const char *p = s; + 4cd6: 87ae mv a5,a1 + while (*p) + 4cd8: 0017c703 lbu a4,1(a5) + p++; + 4cdc: 0785 addi a5,a5,1 + while (*p) + 4cde: ff6d bnez a4,4cd8 + return (size_t)(p - s); + 4ce0: 40b78833 sub a6,a5,a1 + + +char *strstr(const char *haystack, const char *needle) +{ + size_t n_len = strlen(needle); + if (n_len == 0) + 4ce4: 04b78163 beq a5,a1,4d26 + return (char *)haystack; - int n = read(0, buf, sizeof(buf)); - if (n <= 0) + for (; *haystack; haystack++) + 4ce8: 00054783 lbu a5,0(a0) + 4cec: cf85 beqz a5,4d24 + 4cee: 187d addi a6,a6,-1 + 4cf0: 982a add a6,a6,a0 + { + if (*haystack != *needle) + 4cf2: 02f89463 bne a7,a5,4d1a + while (n-- > 0 && *s1 && *s1 == *s2) + 4cf6: 00054703 lbu a4,0(a0) + 4cfa: 8646 mv a2,a7 + 4cfc: 86ae mv a3,a1 + 4cfe: 87aa mv a5,a0 + 4d00: eb11 bnez a4,4d14 + 4d02: a821 j 4d1a + if (n == 0 || *s1 == '\0') + 4d04: 03078163 beq a5,a6,4d26 + while (n-- > 0 && *s1 && *s1 == *s2) + 4d08: 0017c703 lbu a4,1(a5) + return (int)((unsigned char)*s1 - (unsigned char)*s2); + 4d0c: 0006c603 lbu a2,0(a3) + s1++; + 4d10: 0785 addi a5,a5,1 + while (n-- > 0 && *s1 && *s1 == *s2) + 4d12: cb19 beqz a4,4d28 + s2++; + 4d14: 0685 addi a3,a3,1 + while (n-- > 0 && *s1 && *s1 == *s2) + 4d16: fee607e3 beq a2,a4,4d04 + for (; *haystack; haystack++) + 4d1a: 00154783 lbu a5,1(a0) + 4d1e: 0805 addi a6,a6,1 + 4d20: 0505 addi a0,a0,1 + 4d22: fbe1 bnez a5,4cf2 continue; - if (buf[0] == 's') - 660: 07300913 li s2,115 + if (strncmp(haystack, needle, n_len) == 0) + return (char *)haystack; + } + return NULL; + 4d24: 4501 li a0,0 +} + 4d26: 8082 ret + if (strncmp(haystack, needle, n_len) == 0) + 4d28: de7d beqz a2,4d26 + for (; *haystack; haystack++) + 4d2a: 00154783 lbu a5,1(a0) + 4d2e: 0805 addi a6,a6,1 + 4d30: 0505 addi a0,a0,1 + 4d32: f3e1 bnez a5,4cf2 + 4d34: bfc5 j 4d24 + +0000000000004d36 : + +char *strdup(const char *s) +{ + 4d36: 1101 addi sp,sp,-32 + 4d38: e426 sd s1,8(sp) + 4d3a: ec06 sd ra,24(sp) + 4d3c: e822 sd s0,16(sp) + while (*p) + 4d3e: 00054783 lbu a5,0(a0) +{ + 4d42: 84aa mv s1,a0 + while (*p) + 4d44: cb8d beqz a5,4d76 + const char *p = s; + 4d46: 862a mv a2,a0 + while (*p) + 4d48: 00164783 lbu a5,1(a2) + p++; + 4d4c: 0605 addi a2,a2,1 + while (*p) + 4d4e: ffed bnez a5,4d48 + return (size_t)(p - s); + 4d50: 8e05 sub a2,a2,s1 + size_t len = strlen(s) + 1; + 4d52: 00160413 addi s0,a2,1 + char *new_str = (char *)malloc(len); + 4d56: 8522 mv a0,s0 + 4d58: f66ff0ef jal 44be + if (new_str == NULL) + 4d5c: c901 beqz a0,4d6c + return memmove(vdst, vsrc, n); + 4d5e: 8622 mv a2,s0 + return NULL; + + return (char *)memcpy(new_str, s, len); +} + 4d60: 6442 ld s0,16(sp) + 4d62: 60e2 ld ra,24(sp) + return memmove(vdst, vsrc, n); + 4d64: 85a6 mv a1,s1 +} + 4d66: 64a2 ld s1,8(sp) + 4d68: 6105 addi sp,sp,32 + return memmove(vdst, vsrc, n); + 4d6a: bbb9 j 4ac8 +} + 4d6c: 60e2 ld ra,24(sp) + 4d6e: 6442 ld s0,16(sp) + 4d70: 64a2 ld s1,8(sp) + 4d72: 6105 addi sp,sp,32 + 4d74: 8082 ret + while (*p) + 4d76: 4405 li s0,1 + 4d78: bff9 j 4d56 + +0000000000004d7a : + 4d7a: 0005c783 lbu a5,0(a1) + +size_t strlcpy(char *dst, const char *src, size_t size) +{ + 4d7e: 1101 addi sp,sp,-32 + 4d80: ec06 sd ra,24(sp) + 4d82: e822 sd s0,16(sp) + 4d84: 86b2 mv a3,a2 + while (*p) + 4d86: cf8d beqz a5,4dc0 + const char *p = s; + 4d88: 87ae mv a5,a1 + while (*p) + 4d8a: 0017c703 lbu a4,1(a5) + p++; + 4d8e: 0785 addi a5,a5,1 + while (*p) + 4d90: ff6d bnez a4,4d8a + return (size_t)(p - s); + 4d92: 40b78433 sub s0,a5,a1 + size_t src_len = strlen(src); + + if (size > 0) + 4d96: c285 beqz a3,4db6 + 4d98: e426 sd s1,8(sp) + { + size_t copy_len = (src_len >= size) ? size - 1 : src_len; + 4d9a: fff68613 addi a2,a3,-1 + memcpy(dst, src, copy_len); + dst[copy_len] = '\0'; + 4d9e: 00c504b3 add s1,a0,a2 + size_t copy_len = (src_len >= size) ? size - 1 : src_len; + 4da2: 00d47563 bgeu s0,a3,4dac + dst[copy_len] = '\0'; + 4da6: 008504b3 add s1,a0,s0 + size_t copy_len = (src_len >= size) ? size - 1 : src_len; + 4daa: 8622 mv a2,s0 + return memmove(vdst, vsrc, n); + 4dac: d1dff0ef jal 4ac8 + dst[copy_len] = '\0'; + 4db0: 00048023 sb zero,0(s1) + } + + return src_len; + 4db4: 64a2 ld s1,8(sp) +} + 4db6: 60e2 ld ra,24(sp) + 4db8: 8522 mv a0,s0 + 4dba: 6442 ld s0,16(sp) + 4dbc: 6105 addi sp,sp,32 + 4dbe: 8082 ret + if (size > 0) + 4dc0: e219 bnez a2,4dc6 + return (size_t)(p - s); + 4dc2: 4401 li s0,0 + 4dc4: bfcd j 4db6 + 4dc6: e426 sd s1,8(sp) + 4dc8: 4401 li s0,0 + if (size > 0) + 4dca: 84aa mv s1,a0 + size_t copy_len = (src_len >= size) ? size - 1 : src_len; + 4dcc: 4601 li a2,0 + 4dce: bff9 j 4dac + +0000000000004dd0 : + while (*p) + 4dd0: 0005c783 lbu a5,0(a1) + +size_t strlcat(char *dst, const char *src, size_t size) +{ + 4dd4: 7179 addi sp,sp,-48 + 4dd6: e84a sd s2,16(sp) + 4dd8: f406 sd ra,40(sp) + 4dda: f022 sd s0,32(sp) + 4ddc: ec26 sd s1,24(sp) + 4dde: 892a mv s2,a0 + while (*p) + 4de0: c7b5 beqz a5,4e4c + const char *p = s; + 4de2: 87ae mv a5,a1 + while (*p) + 4de4: 0017c703 lbu a4,1(a5) + p++; + 4de8: 0785 addi a5,a5,1 + while (*p) + 4dea: ff6d bnez a4,4de4 + return (size_t)(p - s); + 4dec: 40b784b3 sub s1,a5,a1 + size_t dst_len = 0; + 4df0: 4401 li s0,0 + size_t src_len = strlen(src); + + while (dst_len < size && dst[dst_len] != '\0') + 4df2: e609 bnez a2,4dfc + 4df4: a0a1 j 4e3c + dst_len++; + 4df6: 0405 addi s0,s0,1 + while (dst_len < size && dst[dst_len] != '\0') + 4df8: 04860263 beq a2,s0,4e3c + 4dfc: 00890533 add a0,s2,s0 + 4e00: 00054783 lbu a5,0(a0) + 4e04: fbed bnez a5,4df6 + + if (dst_len == size) + 4e06: 02860b63 beq a2,s0,4e3c + 4e0a: e44e sd s3,8(sp) + return size + src_len; + + size_t space_left = size - dst_len; + 4e0c: 408607b3 sub a5,a2,s0 + size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; + 4e10: 89a6 mv s3,s1 + 4e12: 02f4f263 bgeu s1,a5,4e36 + + memcpy(dst + dst_len, src, copy_len); + dst[dst_len + copy_len] = '\0'; + 4e16: 994e add s2,s2,s3 + 4e18: 9922 add s2,s2,s0 + return memmove(vdst, vsrc, n); + 4e1a: 864e mv a2,s3 + 4e1c: cadff0ef jal 4ac8 + dst[dst_len + copy_len] = '\0'; + 4e20: 00090023 sb zero,0(s2) + + return dst_len + src_len; + 4e24: 00940533 add a0,s0,s1 +} + 4e28: 70a2 ld ra,40(sp) + 4e2a: 7402 ld s0,32(sp) + return dst_len + src_len; + 4e2c: 69a2 ld s3,8(sp) +} + 4e2e: 64e2 ld s1,24(sp) + 4e30: 6942 ld s2,16(sp) + 4e32: 6145 addi sp,sp,48 + 4e34: 8082 ret + size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; + 4e36: fff78993 addi s3,a5,-1 + 4e3a: bff1 j 4e16 +} + 4e3c: 70a2 ld ra,40(sp) + 4e3e: 7402 ld s0,32(sp) + 4e40: 6942 ld s2,16(sp) + return size + src_len; + 4e42: 00960533 add a0,a2,s1 +} + 4e46: 64e2 ld s1,24(sp) + 4e48: 6145 addi sp,sp,48 + 4e4a: 8082 ret + while (*p) + 4e4c: 4481 li s1,0 + 4e4e: b74d j 4df0 + +0000000000004e50 : +size_t strspn(const char *s, const char *accept) +{ + const char *p = s; + const char *a; + + while (*p) + 4e50: 00054683 lbu a3,0(a0) + 4e54: c695 beqz a3,4e80 + { + for (a = accept; *a; a++) + 4e56: 0005c803 lbu a6,0(a1) + 4e5a: 862a mv a2,a0 + 4e5c: 00080f63 beqz a6,4e7a + 4e60: 87ae mv a5,a1 + 4e62: 8742 mv a4,a6 + 4e64: a021 j 4e6c + 4e66: 0007c703 lbu a4,0(a5) + 4e6a: cb01 beqz a4,4e7a + 4e6c: 0785 addi a5,a5,1 { - test_syscalls(); + if (*p == *a) + 4e6e: fee69ce3 bne a3,a4,4e66 + while (*p) + 4e72: 00164683 lbu a3,1(a2) + break; } - else if (buf[0] == 't') - 664: 07400993 li s3,116 - disk_test(); - exit(0); - } - wait(0); + if (*a == '\0') + return (size_t)(p - s); + p++; + 4e76: 0605 addi a2,a2,1 + while (*p) + 4e78: f6e5 bnez a3,4e60 + } + return (size_t)(p - s); + 4e7a: 40a60533 sub a0,a2,a0 + 4e7e: 8082 ret + while (*p) + 4e80: 4501 li a0,0 +} + 4e82: 8082 ret + +0000000000004e84 : +size_t strcspn(const char *s, const char *reject) +{ + const char *p = s; + const char *r; + + while (*p) + 4e84: 00054683 lbu a3,0(a0) + 4e88: ce85 beqz a3,4ec0 + { + for (r = reject; *r; r++) + 4e8a: 0005c803 lbu a6,0(a1) + const char *p = s; + 4e8e: 862a mv a2,a0 + for (r = reject; *r; r++) + 4e90: 02080363 beqz a6,4eb6 + 4e94: 87ae mv a5,a1 + 4e96: 8742 mv a4,a6 + 4e98: a021 j 4ea0 + 4e9a: 0007c703 lbu a4,0(a5) + 4e9e: c719 beqz a4,4eac + 4ea0: 0785 addi a5,a5,1 + { + if (*p == *r) + 4ea2: fed71ce3 bne a4,a3,4e9a + return (size_t)(p - s); } - else if (buf[0] != '\n') - 668: 4a29 li s4,10 - n++; - 66a: 416a8abb subw s5,s5,s6 - write(1, "$ ", 2); - 66e: 4609 li a2,2 - 670: 85a6 mv a1,s1 - 672: 4505 li a0,1 - 674: 0ba000ef jal 72e - int n = read(0, buf, sizeof(buf)); - 678: 4641 li a2,16 - 67a: 85a2 mv a1,s0 - 67c: 4501 li a0,0 - 67e: 0a8000ef jal 726 - if (n <= 0) - 682: fea056e3 blez a0,66e - if (buf[0] == 's') - 686: 00014783 lbu a5,0(sp) - 68a: 05278663 beq a5,s2,6d6 - else if (buf[0] == 't') - 68e: 05378763 beq a5,s3,6dc - else if (buf[0] != '\n') - 692: fd478ee3 beq a5,s4,66e - 696: 00000797 auipc a5,0x0 - 69a: 56a78793 addi a5,a5,1386 # c00 - while (s[n]) - 69e: 0017c703 lbu a4,1(a5) - 6a2: 863e mv a2,a5 - 6a4: 0785 addi a5,a5,1 - 6a6: ff65 bnez a4,69e - write(1, s, strlen(s)); - 6a8: 00ca863b addw a2,s5,a2 - 6ac: 85da mv a1,s6 - 6ae: 4505 li a0,1 - 6b0: 07e000ef jal 72e -} - 6b4: bf6d j 66e - print("[Test] Read returned "); - 6b6: 00000517 auipc a0,0x0 - 6ba: 4aa50513 addi a0,a0,1194 # b60 - 6be: 971ff0ef jal 2e <_Z5printPKc> - print_int(n); - 6c2: 854a mv a0,s2 - 6c4: 993ff0ef jal 56 <_Z9print_inti> - print("\n"); - 6c8: 00000517 auipc a0,0x0 - 6cc: 29850513 addi a0,a0,664 # 960 - 6d0: 95fff0ef jal 2e <_Z5printPKc> - 6d4: b791 j 618 - test_syscalls(); - 6d6: aadff0ef jal 182 <_Z13test_syscallsv> - 6da: bf51 j 66e - if (fork() == 0) - 6dc: 02a000ef jal 706 - 6e0: c509 beqz a0,6ea - wait(0); - 6e2: 4501 li a0,0 - 6e4: 032000ef jal 716 - 6e8: b759 j 66e - disk_test(); - 6ea: 0cc000ef jal 7b6 - exit(0); - 6ee: 4501 li a0,0 - 6f0: 01e000ef jal 70e - 6f4: b7fd j 6e2 - print("[Test] Open failed (Is test.txt in fs.img?)\n"); - 6f6: 00000517 auipc a0,0x0 - 6fa: 3f250513 addi a0,a0,1010 # ae8 - 6fe: 931ff0ef jal 2e <_Z5printPKc> - 702: 840a mv s0,sp - 704: b71d j 62a - -0000000000000706 : - name: \ - li a7, SYS_ ## name; \ - ecall; \ - ret + p++; + } + return (size_t)(p - s); + 4ea6: 40a60533 sub a0,a2,a0 + 4eaa: 8082 ret + while (*p) + 4eac: 00164683 lbu a3,1(a2) + p++; + 4eb0: 0605 addi a2,a2,1 + while (*p) + 4eb2: f2ed bnez a3,4e94 + 4eb4: bfcd j 4ea6 + 4eb6: 00164683 lbu a3,1(a2) + p++; + 4eba: 0605 addi a2,a2,1 + while (*p) + 4ebc: feed bnez a3,4eb6 + 4ebe: b7e5 j 4ea6 + 4ec0: 4501 li a0,0 +} + 4ec2: 8082 ret -SYSCALL(fork) - 706: 4889 li a7,2 - 708: 00000073 ecall - 70c: 8082 ret +0000000000004ec4 : -000000000000070e : -SYSCALL(exit) - 70e: 488d li a7,3 - 710: 00000073 ecall - 714: 8082 ret +char *strpbrk(const char *s, const char *accept) +{ + const char *a; + while (*s) + 4ec4: 00054683 lbu a3,0(a0) + 4ec8: c295 beqz a3,4eec + { + for (a = accept; *a; a++) + 4eca: 0005c603 lbu a2,0(a1) + 4ece: c20d beqz a2,4ef0 + 4ed0: 87ae mv a5,a1 + 4ed2: 8732 mv a4,a2 + 4ed4: a021 j 4edc + 4ed6: 0007c703 lbu a4,0(a5) + 4eda: c709 beqz a4,4ee4 + 4edc: 0785 addi a5,a5,1 + { + if (*s == *a) + 4ede: fed71ce3 bne a4,a3,4ed6 + return (char *)s; + } + s++; + } + return NULL; +} + 4ee2: 8082 ret + while (*s) + 4ee4: 00154683 lbu a3,1(a0) + s++; + 4ee8: 0505 addi a0,a0,1 + while (*s) + 4eea: f2fd bnez a3,4ed0 + return NULL; + 4eec: 4501 li a0,0 +} + 4eee: 8082 ret + while (*s) + 4ef0: 00154683 lbu a3,1(a0) + s++; + 4ef4: 0505 addi a0,a0,1 + while (*s) + 4ef6: feed bnez a3,4ef0 + 4ef8: bfd5 j 4eec -0000000000000716 : -SYSCALL(wait) - 716: 4891 li a7,4 - 718: 00000073 ecall - 71c: 8082 ret +0000000000004efa : +char *strtok(char *str, const char *delim) +{ + static char *olds; + char *token; -000000000000071e : -SYSCALL(pipe) - 71e: 4895 li a7,5 - 720: 00000073 ecall - 724: 8082 ret + if (str == NULL) + 4efa: 00003897 auipc a7,0x3 + 4efe: 93688893 addi a7,a7,-1738 # 7830 + 4f02: cd25 beqz a0,4f7a + while (*p) + 4f04: 00054683 lbu a3,0(a0) + 4f08: c295 beqz a3,4f2c + for (a = accept; *a; a++) + 4f0a: 0005c803 lbu a6,0(a1) + 4f0e: 02080463 beqz a6,4f36 + 4f12: 87ae mv a5,a1 + 4f14: 8742 mv a4,a6 + 4f16: a021 j 4f1e + 4f18: 0007c703 lbu a4,0(a5) + 4f1c: cf09 beqz a4,4f36 + 4f1e: 0785 addi a5,a5,1 + if (*p == *a) + 4f20: fee69ce3 bne a3,a4,4f18 + while (*p) + 4f24: 00154683 lbu a3,1(a0) + p++; + 4f28: 0505 addi a0,a0,1 + while (*p) + 4f2a: f6e5 bnez a3,4f12 + 4f2c: 87aa mv a5,a0 + str = olds; -0000000000000726 : -SYSCALL(read) - 726: 4899 li a7,6 - 728: 00000073 ecall - 72c: 8082 ret + str += strspn(str, delim); + if (*str == '\0') + { + olds = str; + 4f2e: 00f8b023 sd a5,0(a7) + return NULL; + 4f32: 4501 li a0,0 + *str = '\0'; + olds = str + 1; + } -000000000000072e : -SYSCALL(write) - 72e: 48c5 li a7,17 - 730: 00000073 ecall - 734: 8082 ret + return token; +} + 4f34: 8082 ret + if (*str == '\0') + 4f36: 00054603 lbu a2,0(a0) + 4f3a: da6d beqz a2,4f2c + 4f3c: 86aa mv a3,a0 + for (a = accept; *a; a++) + 4f3e: 04080163 beqz a6,4f80 + 4f42: 8742 mv a4,a6 + 4f44: 87ae mv a5,a1 + 4f46: a021 j 4f4e + 4f48: 0007c703 lbu a4,0(a5) + 4f4c: cb19 beqz a4,4f62 + 4f4e: 0785 addi a5,a5,1 + if (*s == *a) + 4f50: fee61ce3 bne a2,a4,4f48 + olds = str + 1; + 4f54: 00168793 addi a5,a3,1 + *str = '\0'; + 4f58: 00068023 sb zero,0(a3) + olds = str; + 4f5c: 00f8b023 sd a5,0(a7) +} + 4f60: 8082 ret + while (*s) + 4f62: 0016c603 lbu a2,1(a3) + s++; + 4f66: 0685 addi a3,a3,1 + while (*s) + 4f68: fe69 bnez a2,4f42 + 4f6a: 87aa mv a5,a0 + while (*s != (char)c) + 4f6c: 0017c703 lbu a4,1(a5) + if (!*s++) + 4f70: 0785 addi a5,a5,1 + while (*s != (char)c) + 4f72: ff6d bnez a4,4f6c + olds = str; + 4f74: 00f8b023 sd a5,0(a7) +} + 4f78: 8082 ret + str = olds; + 4f7a: 0008b503 ld a0,0(a7) + 4f7e: b759 j 4f04 + while (*s) + 4f80: 0016c603 lbu a2,1(a3) + s++; + 4f84: 0685 addi a3,a3,1 + while (*s) + 4f86: fe6d bnez a2,4f80 + 4f88: b7cd j 4f6a -0000000000000736 : -SYSCALL(close) - 736: 48d9 li a7,22 - 738: 00000073 ecall - 73c: 8082 ret +0000000000004f8a : -000000000000073e : -SYSCALL(kill) - 73e: 489d li a7,7 - 740: 00000073 ecall - 744: 8082 ret +char *strerror(int errnum) +{ + 4f8a: 87aa mv a5,a0 + + switch (errnum) + 4f8c: cd09 beqz a0,4fa6 + 4f8e: 4731 li a4,12 + 4f90: 00000517 auipc a0,0x0 + 4f94: 1a850513 addi a0,a0,424 # 5138 <_GLOBAL__sub_I__ZSt3cin+0x170> + 4f98: 00e78b63 beq a5,a4,4fae + return "Success"; + // case EINVAL: return "Invalid argument"; + case ENOMEM: return "Out of memory"; + + default: + return "Unknown error"; + 4f9c: 00000517 auipc a0,0x0 + 4fa0: 1ac50513 addi a0,a0,428 # 5148 <_GLOBAL__sub_I__ZSt3cin+0x180> + 4fa4: 8082 ret + return "Success"; + 4fa6: 00000517 auipc a0,0x0 + 4faa: 18a50513 addi a0,a0,394 # 5130 <_GLOBAL__sub_I__ZSt3cin+0x168> + } + 4fae: 8082 ret -0000000000000746 : -SYSCALL(exec) - 746: 48a1 li a7,8 - 748: 00000073 ecall - 74c: 8082 ret +0000000000004fb0 <_Znwm>: +#include "ulib/stdlib.h" -000000000000074e : -SYSCALL(open) - 74e: 48c1 li a7,16 - 750: 00000073 ecall - 754: 8082 ret +void *operator new(unsigned long n) +{ + return malloc(n); + 4fb0: d0eff06f j 44be -0000000000000756 : -SYSCALL(mknod) - 756: 48c9 li a7,18 - 758: 00000073 ecall - 75c: 8082 ret +0000000000004fb4 <_Znam>: +} -000000000000075e : -SYSCALL(unlink) - 75e: 48cd li a7,19 - 760: 00000073 ecall - 764: 8082 ret +void *operator new[](unsigned long n) + 4fb4: d0aff06f j 44be -0000000000000766 : -SYSCALL(fstat) - 766: 48a5 li a7,9 - 768: 00000073 ecall - 76c: 8082 ret +0000000000004fb8 <_ZdlPv>: + return malloc(n); +} -000000000000076e : -SYSCALL(link) - 76e: 48d1 li a7,20 - 770: 00000073 ecall - 774: 8082 ret +void operator delete(void *p) +{ + free(p); + 4fb8: c90ff06f j 4448 -0000000000000776 : -SYSCALL(mkdir) - 776: 48d5 li a7,21 - 778: 00000073 ecall - 77c: 8082 ret +0000000000004fbc <_ZdaPv>: +} -000000000000077e : -SYSCALL(chdir) - 77e: 48a9 li a7,10 - 780: 00000073 ecall - 784: 8082 ret +void operator delete[](void *p) + 4fbc: c8cff06f j 4448 -0000000000000786 : -SYSCALL(dup) - 786: 48ad li a7,11 - 788: 00000073 ecall - 78c: 8082 ret +0000000000004fc0 <_ZdlPvm>: + free(p); +} -000000000000078e : -SYSCALL(getpid) - 78e: 48b1 li a7,12 - 790: 00000073 ecall - 794: 8082 ret +void operator delete(void *p, unsigned long) +{ + free(p); + 4fc0: c88ff06f j 4448 -0000000000000796 : -SYSCALL(sbrk) - 796: 48b5 li a7,13 - 798: 00000073 ecall - 79c: 8082 ret +0000000000004fc4 <_ZdaPvm>: +} -000000000000079e : -SYSCALL(sleep) - 79e: 48b9 li a7,14 - 7a0: 00000073 ecall - 7a4: 8082 ret +void operator delete[](void *p, unsigned long) + 4fc4: c84ff06f j 4448 -00000000000007a6 : -SYSCALL(uptime) - 7a6: 48bd li a7,15 - 7a8: 00000073 ecall - 7ac: 8082 ret +0000000000004fc8 <_GLOBAL__sub_I__ZSt3cin>: +#include "ulib/iostream" -00000000000007ae : -SYSCALL(putc) - 7ae: 4885 li a7,1 - 7b0: 00000073 ecall - 7b4: 8082 ret - -00000000000007b6 : - 7b6: 48dd li a7,23 - 7b8: 00000073 ecall - 7bc: 8082 ret +namespace std +{ + istream cin(stdin); + 4fc8: 00002797 auipc a5,0x2 + 4fcc: 7187b783 ld a5,1816(a5) # 76e0 <_GLOBAL_OFFSET_TABLE_+0x10> + 4fd0: 6390 ld a2,0(a5) + ostream cout(stdout); + 4fd2: 00002797 auipc a5,0x2 + 4fd6: 7067b783 ld a5,1798(a5) # 76d8 <_GLOBAL_OFFSET_TABLE_+0x8> + 4fda: 6394 ld a3,0(a5) + ostream cerr(stderr); + 4fdc: 00002797 auipc a5,0x2 + 4fe0: 70c7b783 ld a5,1804(a5) # 76e8 <_GLOBAL_OFFSET_TABLE_+0x18> + 4fe4: 6398 ld a4,0(a5) + + class istream{ + private: + FILE* _stream; + public: + istream(FILE *f) : _stream(f) {} + 4fe6: 00003797 auipc a5,0x3 + 4fea: 85278793 addi a5,a5,-1966 # 7838 <_ZSt3cin> + 4fee: e390 sd a2,0(a5) + ostream(FILE* f) : _stream(f) {} + 4ff0: e794 sd a3,8(a5) + 4ff2: eb98 sd a4,16(a5) +} // namespace std + 4ff4: 8082 ret diff --git a/build/user/initcode.out b/build/user/initcode.out index 78c9958..dd7157c 100755 Binary files a/build/user/initcode.out and b/build/user/initcode.out differ diff --git a/build/user/sh b/build/user/sh new file mode 100755 index 0000000..0637773 Binary files /dev/null and b/build/user/sh differ diff --git a/build/user/sh.asm b/build/user/sh.asm new file mode 100644 index 0000000..dc5f44d --- /dev/null +++ b/build/user/sh.asm @@ -0,0 +1,12620 @@ + +build/user/sh: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000000000000 <_Z5panicPKc>: +constexpr int MAX_ARGS = 10; +const char *WHITESPACE = " \t\r\n\v"; +const char *SYMBOLS = "<|>&;()"; + +void panic(const char *s) +{ + 0: 1141 addi sp,sp,-16 + 2: 85aa mv a1,a0 + printf("shell panic: %s\n", s); + 4: 00006517 auipc a0,0x6 + 8: 00450513 addi a0,a0,4 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> +{ + c: e406 sd ra,8(sp) + printf("shell panic: %s\n", s); + e: 0bd040ef jal 48ca + exit(1); +} + 12: 60a2 ld ra,8(sp) + exit(1); + 14: 4505 li a0,1 +} + 16: 0141 addi sp,sp,16 + exit(1); + 18: 3c60506f j 53de + +000000000000001c <_Z13fork_or_panicv>: + +int fork_or_panic() +{ + 1c: 1141 addi sp,sp,-16 + 1e: e022 sd s0,0(sp) + 20: e406 sd ra,8(sp) + int pid = fork(); + 22: 086010ef jal 10a8 + if (pid == -1) + 26: 57fd li a5,-1 + int pid = fork(); + 28: 842a mv s0,a0 + if (pid == -1) + 2a: 00f50763 beq a0,a5,38 <_Z13fork_or_panicv+0x1c> + panic("fork"); + return pid; +} + 2e: 60a2 ld ra,8(sp) + 30: 8522 mv a0,s0 + 32: 6402 ld s0,0(sp) + 34: 0141 addi sp,sp,16 + 36: 8082 ret + printf("shell panic: %s\n", s); + 38: 00006597 auipc a1,0x6 + 3c: fc858593 addi a1,a1,-56 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + 40: 00006517 auipc a0,0x6 + 44: fc850513 addi a0,a0,-56 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + 48: 083040ef jal 48ca + exit(1); + 4c: 4505 li a0,1 + 4e: 390050ef jal 53de +} + 52: 60a2 ld ra,8(sp) + 54: 8522 mv a0,s0 + 56: 6402 ld s0,0(sp) + 58: 0141 addi sp,sp,16 + 5a: 8082 ret + +000000000000005c <_Z6getcmdPci>: + return cmd; + } +}; + +int getcmd(char *buf, int nbuf) +{ + 5c: 7159 addi sp,sp,-112 + 5e: e8ca sd s2,80(sp) + 60: e4ce sd s3,72(sp) + 62: 892e mv s2,a1 + 64: 89aa mv s3,a0 + write(1, "$ ", 2); + 66: 4609 li a2,2 + 68: 00006597 auipc a1,0x6 + 6c: 02058593 addi a1,a1,32 # 6088 <_GLOBAL__sub_I__ZSt3cin+0xe0> + 70: 4505 li a0,1 +{ + 72: f486 sd ra,104(sp) + write(1, "$ ", 2); + 74: 054010ef jal 10c8 + memset(buf, 0, nbuf); + 78: 864a mv a2,s2 + 7a: 4581 li a1,0 + 7c: 854e mv a0,s3 + 7e: 213050ef jal 5a90 + + int i = 0; + while (i < nbuf - 1) + 82: 4785 li a5,1 + 84: 0927d063 bge a5,s2,104 <_Z6getcmdPci+0xa8> + 88: f0a2 sd s0,96(sp) + 8a: eca6 sd s1,88(sp) + 8c: e0d2 sd s4,64(sp) + 8e: fc56 sd s5,56(sp) + 90: f85a sd s6,48(sp) + 92: f45e sd s7,40(sp) + 94: f062 sd s8,32(sp) + 96: ec66 sd s9,24(sp) + 98: fff90b1b addiw s6,s2,-1 + 9c: 4401 li s0,0 + 9e: 00f10493 addi s1,sp,15 + char c; + int n = read(0, &c, 1); + if (n <= 0) + return -1; + + if (c == '\b' || c == 127) + a2: 4a21 li s4,8 + { + if (i > 0) + { + write(1, "\b \b", 3); + a4: 00006b97 auipc s7,0x6 + a8: fecb8b93 addi s7,s7,-20 # 6090 <_GLOBAL__sub_I__ZSt3cin+0xe8> + if (c == '\b' || c == 127) + ac: 07f00a93 li s5,127 + i--; + } + } + else if (c == '\n' || c == '\r') + b0: 4c29 li s8,10 + b2: 4cb5 li s9,13 + int n = read(0, &c, 1); + b4: 4605 li a2,1 + b6: 85a6 mv a1,s1 + b8: 4501 li a0,0 + ba: 006010ef jal 10c0 + be: 87aa mv a5,a0 + buf[i] = 0; + return 0; + } + else + { + write(1, &c, 1); + c0: 4605 li a2,1 + c2: 85a6 mv a1,s1 + c4: 4505 li a0,1 + if (n <= 0) + c6: 06f05063 blez a5,126 <_Z6getcmdPci+0xca> + if (c == '\b' || c == 127) + ca: 00f14783 lbu a5,15(sp) + buf[i++] = c; + ce: 00898933 add s2,s3,s0 + if (c == '\b' || c == 127) + d2: 03478f63 beq a5,s4,110 <_Z6getcmdPci+0xb4> + d6: 03578d63 beq a5,s5,110 <_Z6getcmdPci+0xb4> + else if (c == '\n' || c == '\r') + da: 07878463 beq a5,s8,142 <_Z6getcmdPci+0xe6> + de: 07978263 beq a5,s9,142 <_Z6getcmdPci+0xe6> + write(1, &c, 1); + e2: 7e7000ef jal 10c8 + buf[i++] = c; + e6: 00f14783 lbu a5,15(sp) + ea: 2405 addiw s0,s0,1 + ec: 00f90023 sb a5,0(s2) + while (i < nbuf - 1) + f0: fd6442e3 blt s0,s6,b4 <_Z6getcmdPci+0x58> + f4: 7406 ld s0,96(sp) + f6: 64e6 ld s1,88(sp) + f8: 6a06 ld s4,64(sp) + fa: 7ae2 ld s5,56(sp) + fc: 7b42 ld s6,48(sp) + fe: 7ba2 ld s7,40(sp) + 100: 7c02 ld s8,32(sp) + 102: 6ce2 ld s9,24(sp) + } + } + return -1; +} + 104: 70a6 ld ra,104(sp) + 106: 6946 ld s2,80(sp) + 108: 69a6 ld s3,72(sp) + return -1; + 10a: 557d li a0,-1 +} + 10c: 6165 addi sp,sp,112 + 10e: 8082 ret + write(1, "\b \b", 3); + 110: 460d li a2,3 + 112: 85de mv a1,s7 + 114: 4505 li a0,1 + if (i > 0) + 116: f8805fe3 blez s0,b4 <_Z6getcmdPci+0x58> + i--; + 11a: 347d addiw s0,s0,-1 + write(1, "\b \b", 3); + 11c: 7ad000ef jal 10c8 + while (i < nbuf - 1) + 120: f9644ae3 blt s0,s6,b4 <_Z6getcmdPci+0x58> + 124: bfc1 j f4 <_Z6getcmdPci+0x98> + return -1; + 126: 557d li a0,-1 + 128: 7406 ld s0,96(sp) +} + 12a: 70a6 ld ra,104(sp) + return -1; + 12c: 64e6 ld s1,88(sp) + 12e: 6a06 ld s4,64(sp) + 130: 7ae2 ld s5,56(sp) + 132: 7b42 ld s6,48(sp) + 134: 7ba2 ld s7,40(sp) + 136: 7c02 ld s8,32(sp) + 138: 6ce2 ld s9,24(sp) +} + 13a: 6946 ld s2,80(sp) + 13c: 69a6 ld s3,72(sp) + 13e: 6165 addi sp,sp,112 + 140: 8082 ret + write(1, "\n", 1); + 142: 4605 li a2,1 + 144: 00006597 auipc a1,0x6 + 148: f5458593 addi a1,a1,-172 # 6098 <_GLOBAL__sub_I__ZSt3cin+0xf0> + 14c: 4505 li a0,1 + 14e: 77b000ef jal 10c8 + return 0; + 152: 4501 li a0,0 + buf[i] = 0; + 154: 00090023 sb zero,0(s2) + return 0; + 158: bfc1 j 128 <_Z6getcmdPci+0xcc> + +000000000000015a <_ZN12RedirCommandD1Ev>: + ~RedirCommand() { delete sub_cmd; } + 15a: 87aa mv a5,a0 + 15c: 6508 ld a0,8(a0) + 15e: 00008717 auipc a4,0x8 + 162: c6a70713 addi a4,a4,-918 # 7dc8 <_ZTV12RedirCommand+0x10> + 166: e398 sd a4,0(a5) + 168: c501 beqz a0,170 <_ZN12RedirCommandD1Ev+0x16> + 16a: 611c ld a5,0(a0) + 16c: 679c ld a5,8(a5) + 16e: 8782 jr a5 + 170: 8082 ret + +0000000000000172 <_ZN11PipeCommandD1Ev>: + ~PipeCommand() + 172: 1141 addi sp,sp,-16 + 174: e022 sd s0,0(sp) + 176: 842a mv s0,a0 + delete left; + 178: 6508 ld a0,8(a0) + ~PipeCommand() + 17a: e406 sd ra,8(sp) + { + 17c: 00008797 auipc a5,0x8 + 180: c7478793 addi a5,a5,-908 # 7df0 <_ZTV11PipeCommand+0x10> + 184: e01c sd a5,0(s0) + delete left; + 186: c501 beqz a0,18e <_ZN11PipeCommandD1Ev+0x1c> + 188: 611c ld a5,0(a0) + 18a: 679c ld a5,8(a5) + 18c: 9782 jalr a5 + delete right; + 18e: 6808 ld a0,16(s0) + 190: c519 beqz a0,19e <_ZN11PipeCommandD1Ev+0x2c> + 192: 611c ld a5,0(a0) + } + 194: 6402 ld s0,0(sp) + 196: 60a2 ld ra,8(sp) + delete right; + 198: 679c ld a5,8(a5) + } + 19a: 0141 addi sp,sp,16 + delete right; + 19c: 8782 jr a5 + } + 19e: 60a2 ld ra,8(sp) + 1a0: 6402 ld s0,0(sp) + 1a2: 0141 addi sp,sp,16 + 1a4: 8082 ret + +00000000000001a6 <_ZN11ListCommandD1Ev>: + ~ListCommand() + 1a6: 1141 addi sp,sp,-16 + 1a8: e022 sd s0,0(sp) + 1aa: 842a mv s0,a0 + delete left; + 1ac: 6508 ld a0,8(a0) + ~ListCommand() + 1ae: e406 sd ra,8(sp) + { + 1b0: 00008797 auipc a5,0x8 + 1b4: c6878793 addi a5,a5,-920 # 7e18 <_ZTV11ListCommand+0x10> + 1b8: e01c sd a5,0(s0) + delete left; + 1ba: c501 beqz a0,1c2 <_ZN11ListCommandD1Ev+0x1c> + 1bc: 611c ld a5,0(a0) + 1be: 679c ld a5,8(a5) + 1c0: 9782 jalr a5 + delete right; + 1c2: 6808 ld a0,16(s0) + 1c4: c519 beqz a0,1d2 <_ZN11ListCommandD1Ev+0x2c> + 1c6: 611c ld a5,0(a0) + } + 1c8: 6402 ld s0,0(sp) + 1ca: 60a2 ld ra,8(sp) + delete right; + 1cc: 679c ld a5,8(a5) + } + 1ce: 0141 addi sp,sp,16 + delete right; + 1d0: 8782 jr a5 + } + 1d2: 60a2 ld ra,8(sp) + 1d4: 6402 ld s0,0(sp) + 1d6: 0141 addi sp,sp,16 + 1d8: 8082 ret + +00000000000001da <_ZN11BackCommandD1Ev>: + ~BackCommand() { delete sub_cmd; } + 1da: 87aa mv a5,a0 + 1dc: 6508 ld a0,8(a0) + 1de: 00008717 auipc a4,0x8 + 1e2: c6270713 addi a4,a4,-926 # 7e40 <_ZTV11BackCommand+0x10> + 1e6: e398 sd a4,0(a5) + 1e8: c501 beqz a0,1f0 <_ZN11BackCommandD1Ev+0x16> + 1ea: 611c ld a5,0(a0) + 1ec: 679c ld a5,8(a5) + 1ee: 8782 jr a5 + 1f0: 8082 ret + +00000000000001f2 <_ZN11ExecCommandD1Ev>: +struct ExecCommand : public Command + 1f2: 8082 ret + +00000000000001f4 <_ZN12RedirCommand3runEv>: + void run() override + 1f4: 1141 addi sp,sp,-16 + 1f6: e022 sd s0,0(sp) + 1f8: 842a mv s0,a0 + close(fd); + 1fa: 5148 lw a0,36(a0) + void run() override + 1fc: e406 sd ra,8(sp) + close(fd); + 1fe: 6d3000ef jal 10d0 + if (open(file, mode) < 0) + 202: 500c lw a1,32(s0) + 204: 6808 ld a0,16(s0) + 206: 6e3000ef jal 10e8 + 20a: 00054963 bltz a0,21c <_ZN12RedirCommand3runEv+0x28> + sub_cmd->run(); + 20e: 6408 ld a0,8(s0) + } + 210: 6402 ld s0,0(sp) + 212: 60a2 ld ra,8(sp) + sub_cmd->run(); + 214: 611c ld a5,0(a0) + 216: 6b9c ld a5,16(a5) + } + 218: 0141 addi sp,sp,16 + sub_cmd->run(); + 21a: 8782 jr a5 + printf("open %s failed\n", file); + 21c: 680c ld a1,16(s0) + 21e: 00006517 auipc a0,0x6 + 222: dc250513 addi a0,a0,-574 # 5fe0 <_GLOBAL__sub_I__ZSt3cin+0x38> + 226: 6a4040ef jal 48ca + exit(1); + 22a: 4505 li a0,1 + 22c: 1b2050ef jal 53de + sub_cmd->run(); + 230: 6408 ld a0,8(s0) + } + 232: 6402 ld s0,0(sp) + 234: 60a2 ld ra,8(sp) + sub_cmd->run(); + 236: 611c ld a5,0(a0) + 238: 6b9c ld a5,16(a5) + } + 23a: 0141 addi sp,sp,16 + sub_cmd->run(); + 23c: 8782 jr a5 + +000000000000023e <_ZN11ExecCommand3runEv>: + void run() override + 23e: 1141 addi sp,sp,-16 + 240: e022 sd s0,0(sp) + 242: 842a mv s0,a0 + if (argv[0] == nullptr) + 244: 6508 ld a0,8(a0) + void run() override + 246: e406 sd ra,8(sp) + if (argv[0] == nullptr) + 248: c115 beqz a0,26c <_ZN11ExecCommand3runEv+0x2e> + exec(argv[0], argv); + 24a: 00840593 addi a1,s0,8 + 24e: 693000ef jal 10e0 + printf("exec %s failed\n", argv[0]); + 252: 640c ld a1,8(s0) + 254: 00006517 auipc a0,0x6 + 258: d9c50513 addi a0,a0,-612 # 5ff0 <_GLOBAL__sub_I__ZSt3cin+0x48> + 25c: 66e040ef jal 48ca + } + 260: 6402 ld s0,0(sp) + 262: 60a2 ld ra,8(sp) + exit(1); + 264: 4505 li a0,1 + } + 266: 0141 addi sp,sp,16 + exit(1); + 268: 1760506f j 53de + exit(1); + 26c: 4505 li a0,1 + 26e: 170050ef jal 53de + exec(argv[0], argv); + 272: 6408 ld a0,8(s0) + 274: bfd9 j 24a <_ZN11ExecCommand3runEv+0xc> + +0000000000000276 <_ZN11ExecCommandD0Ev>: +struct ExecCommand : public Command + 276: 05800593 li a1,88 + 27a: 5270506f j 5fa0 <_ZdlPvm> + +000000000000027e <_ZN12RedirCommandD0Ev>: + ~RedirCommand() { delete sub_cmd; } + 27e: 1141 addi sp,sp,-16 + 280: e022 sd s0,0(sp) + 282: 842a mv s0,a0 + 284: 6508 ld a0,8(a0) + 286: e406 sd ra,8(sp) + 288: 00008797 auipc a5,0x8 + 28c: b4078793 addi a5,a5,-1216 # 7dc8 <_ZTV12RedirCommand+0x10> + 290: e01c sd a5,0(s0) + 292: c501 beqz a0,29a <_ZN12RedirCommandD0Ev+0x1c> + 294: 611c ld a5,0(a0) + 296: 679c ld a5,8(a5) + 298: 9782 jalr a5 + 29a: 8522 mv a0,s0 + 29c: 6402 ld s0,0(sp) + 29e: 60a2 ld ra,8(sp) + 2a0: 02800593 li a1,40 + 2a4: 0141 addi sp,sp,16 + 2a6: 4fb0506f j 5fa0 <_ZdlPvm> + +00000000000002aa <_ZN11BackCommandD0Ev>: + ~BackCommand() { delete sub_cmd; } + 2aa: 1141 addi sp,sp,-16 + 2ac: e022 sd s0,0(sp) + 2ae: 842a mv s0,a0 + 2b0: 6508 ld a0,8(a0) + 2b2: e406 sd ra,8(sp) + 2b4: 00008797 auipc a5,0x8 + 2b8: b8c78793 addi a5,a5,-1140 # 7e40 <_ZTV11BackCommand+0x10> + 2bc: e01c sd a5,0(s0) + 2be: c501 beqz a0,2c6 <_ZN11BackCommandD0Ev+0x1c> + 2c0: 611c ld a5,0(a0) + 2c2: 679c ld a5,8(a5) + 2c4: 9782 jalr a5 + 2c6: 8522 mv a0,s0 + 2c8: 6402 ld s0,0(sp) + 2ca: 60a2 ld ra,8(sp) + 2cc: 45c1 li a1,16 + 2ce: 0141 addi sp,sp,16 + 2d0: 4d10506f j 5fa0 <_ZdlPvm> + +00000000000002d4 <_ZN11PipeCommandD0Ev>: + ~PipeCommand() + 2d4: 1141 addi sp,sp,-16 + 2d6: e022 sd s0,0(sp) + 2d8: 842a mv s0,a0 + delete left; + 2da: 6508 ld a0,8(a0) + ~PipeCommand() + 2dc: e406 sd ra,8(sp) + { + 2de: 00008797 auipc a5,0x8 + 2e2: b1278793 addi a5,a5,-1262 # 7df0 <_ZTV11PipeCommand+0x10> + 2e6: e01c sd a5,0(s0) + delete left; + 2e8: c501 beqz a0,2f0 <_ZN11PipeCommandD0Ev+0x1c> + 2ea: 611c ld a5,0(a0) + 2ec: 679c ld a5,8(a5) + 2ee: 9782 jalr a5 + delete right; + 2f0: 6808 ld a0,16(s0) + 2f2: c501 beqz a0,2fa <_ZN11PipeCommandD0Ev+0x26> + 2f4: 611c ld a5,0(a0) + 2f6: 679c ld a5,8(a5) + 2f8: 9782 jalr a5 + } + 2fa: 8522 mv a0,s0 + 2fc: 6402 ld s0,0(sp) + 2fe: 60a2 ld ra,8(sp) + 300: 45e1 li a1,24 + 302: 0141 addi sp,sp,16 + 304: 49d0506f j 5fa0 <_ZdlPvm> + +0000000000000308 <_ZN11ListCommandD0Ev>: + ~ListCommand() + 308: 1141 addi sp,sp,-16 + 30a: e022 sd s0,0(sp) + 30c: 842a mv s0,a0 + delete left; + 30e: 6508 ld a0,8(a0) + ~ListCommand() + 310: e406 sd ra,8(sp) + { + 312: 00008797 auipc a5,0x8 + 316: b0678793 addi a5,a5,-1274 # 7e18 <_ZTV11ListCommand+0x10> + 31a: e01c sd a5,0(s0) + delete left; + 31c: c501 beqz a0,324 <_ZN11ListCommandD0Ev+0x1c> + 31e: 611c ld a5,0(a0) + 320: 679c ld a5,8(a5) + 322: 9782 jalr a5 + delete right; + 324: 6808 ld a0,16(s0) + 326: c501 beqz a0,32e <_ZN11ListCommandD0Ev+0x26> + 328: 611c ld a5,0(a0) + 32a: 679c ld a5,8(a5) + 32c: 9782 jalr a5 + } + 32e: 8522 mv a0,s0 + 330: 6402 ld s0,0(sp) + 332: 60a2 ld ra,8(sp) + 334: 45e1 li a1,24 + 336: 0141 addi sp,sp,16 + 338: 4690506f j 5fa0 <_ZdlPvm> + +000000000000033c <_ZN11BackCommand3runEv>: + void run() override + 33c: 1141 addi sp,sp,-16 + 33e: e022 sd s0,0(sp) + 340: e406 sd ra,8(sp) + 342: 842a mv s0,a0 + int pid = fork(); + 344: 565000ef jal 10a8 + if (pid == -1) + 348: 57fd li a5,-1 + 34a: 00f50d63 beq a0,a5,364 <_ZN11BackCommand3runEv+0x28> + if (fork_or_panic() == 0) + 34e: e509 bnez a0,358 <_ZN11BackCommand3runEv+0x1c> + sub_cmd->run(); + 350: 6408 ld a0,8(s0) + 352: 611c ld a5,0(a0) + 354: 6b9c ld a5,16(a5) + 356: 9782 jalr a5 + } + 358: 6402 ld s0,0(sp) + 35a: 60a2 ld ra,8(sp) + exit(0); + 35c: 4501 li a0,0 + } + 35e: 0141 addi sp,sp,16 + exit(0); + 360: 07e0506f j 53de + printf("shell panic: %s\n", s); + 364: 00006597 auipc a1,0x6 + 368: c9c58593 addi a1,a1,-868 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + 36c: 00006517 auipc a0,0x6 + 370: c9c50513 addi a0,a0,-868 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + 374: 556040ef jal 48ca + exit(1); + 378: 4505 li a0,1 + 37a: 064050ef jal 53de + } + 37e: 6402 ld s0,0(sp) + 380: 60a2 ld ra,8(sp) + exit(0); + 382: 4501 li a0,0 + } + 384: 0141 addi sp,sp,16 + exit(0); + 386: 0580506f j 53de + +000000000000038a <_ZN11ListCommand3runEv>: + void run() override + 38a: 1141 addi sp,sp,-16 + 38c: e022 sd s0,0(sp) + 38e: e406 sd ra,8(sp) + 390: 842a mv s0,a0 + int pid = fork(); + 392: 517000ef jal 10a8 + if (pid == -1) + 396: 57fd li a5,-1 + 398: 02f50163 beq a0,a5,3ba <_ZN11ListCommand3runEv+0x30> + if (fork_or_panic() == 0) + 39c: e509 bnez a0,3a6 <_ZN11ListCommand3runEv+0x1c> + left->run(); + 39e: 6408 ld a0,8(s0) + 3a0: 611c ld a5,0(a0) + 3a2: 6b9c ld a5,16(a5) + 3a4: 9782 jalr a5 + wait(0); + 3a6: 4501 li a0,0 + 3a8: 509000ef jal 10b0 + right->run(); + 3ac: 6808 ld a0,16(s0) + } + 3ae: 6402 ld s0,0(sp) + 3b0: 60a2 ld ra,8(sp) + right->run(); + 3b2: 611c ld a5,0(a0) + 3b4: 6b9c ld a5,16(a5) + } + 3b6: 0141 addi sp,sp,16 + right->run(); + 3b8: 8782 jr a5 + printf("shell panic: %s\n", s); + 3ba: 00006597 auipc a1,0x6 + 3be: c4658593 addi a1,a1,-954 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + 3c2: 00006517 auipc a0,0x6 + 3c6: c4650513 addi a0,a0,-954 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + 3ca: 500040ef jal 48ca + exit(1); + 3ce: 4505 li a0,1 + 3d0: 00e050ef jal 53de + return pid; + 3d4: bfc9 j 3a6 <_ZN11ListCommand3runEv+0x1c> + +00000000000003d6 <_ZN11PipeCommand3runEv>: + void run() override + 3d6: 1101 addi sp,sp,-32 + 3d8: e822 sd s0,16(sp) + 3da: 842a mv s0,a0 + if (pipe(p) < 0) + 3dc: 0028 addi a0,sp,8 + void run() override + 3de: ec06 sd ra,24(sp) + if (pipe(p) < 0) + 3e0: 4d9000ef jal 10b8 + 3e4: 0a054463 bltz a0,48c <_ZN11PipeCommand3runEv+0xb6> + int pid = fork(); + 3e8: 4c1000ef jal 10a8 + if (pid == -1) + 3ec: 57fd li a5,-1 + 3ee: 0cf50163 beq a0,a5,4b0 <_ZN11PipeCommand3runEv+0xda> + if (fork_or_panic() == 0) + 3f2: c931 beqz a0,446 <_ZN11PipeCommand3runEv+0x70> + int pid = fork(); + 3f4: 4b5000ef jal 10a8 + if (pid == -1) + 3f8: 577d li a4,-1 + 3fa: 06e50b63 beq a0,a4,470 <_ZN11PipeCommand3runEv+0x9a> + if (fork_or_panic() == 0) + 3fe: c505 beqz a0,426 <_ZN11PipeCommand3runEv+0x50> + close(p[0]); + 400: 4522 lw a0,8(sp) + 402: 4cf000ef jal 10d0 + close(p[1]); + 406: 4532 lw a0,12(sp) + 408: 4c9000ef jal 10d0 + wait(0); + 40c: 4501 li a0,0 + 40e: 4a3000ef jal 10b0 + wait(0); + 412: 4501 li a0,0 + 414: 49d000ef jal 10b0 + exit(0); + 418: 4501 li a0,0 + 41a: 7c5040ef jal 53de + } + 41e: 60e2 ld ra,24(sp) + 420: 6442 ld s0,16(sp) + 422: 6105 addi sp,sp,32 + 424: 8082 ret + close(0); // close stdin + 426: 4ab000ef jal 10d0 + dup(p[0]); // dup read-end to stdin + 42a: 4522 lw a0,8(sp) + 42c: 4f5000ef jal 1120 + close(p[0]); + 430: 4522 lw a0,8(sp) + 432: 49f000ef jal 10d0 + close(p[1]); + 436: 4532 lw a0,12(sp) + 438: 499000ef jal 10d0 + right->run(); + 43c: 6808 ld a0,16(s0) + 43e: 611c ld a5,0(a0) + 440: 6b9c ld a5,16(a5) + 442: 9782 jalr a5 + 444: bf75 j 400 <_ZN11PipeCommand3runEv+0x2a> + close(1); // close stdout + 446: 4505 li a0,1 + 448: 489000ef jal 10d0 + dup(p[1]); // dup write-end to stdout + 44c: 4532 lw a0,12(sp) + 44e: 4d3000ef jal 1120 + close(p[0]); + 452: 4522 lw a0,8(sp) + 454: 47d000ef jal 10d0 + close(p[1]); + 458: 4532 lw a0,12(sp) + 45a: 477000ef jal 10d0 + left->run(); + 45e: 6408 ld a0,8(s0) + 460: 611c ld a5,0(a0) + 462: 6b9c ld a5,16(a5) + 464: 9782 jalr a5 + int pid = fork(); + 466: 443000ef jal 10a8 + if (pid == -1) + 46a: 577d li a4,-1 + 46c: f8e519e3 bne a0,a4,3fe <_ZN11PipeCommand3runEv+0x28> + printf("shell panic: %s\n", s); + 470: 00006597 auipc a1,0x6 + 474: b9058593 addi a1,a1,-1136 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + 478: 00006517 auipc a0,0x6 + 47c: b9050513 addi a0,a0,-1136 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + 480: 44a040ef jal 48ca + exit(1); + 484: 4505 li a0,1 + 486: 759040ef jal 53de + return pid; + 48a: bf9d j 400 <_ZN11PipeCommand3runEv+0x2a> + printf("shell panic: %s\n", s); + 48c: 00006597 auipc a1,0x6 + 490: b9458593 addi a1,a1,-1132 # 6020 <_GLOBAL__sub_I__ZSt3cin+0x78> + 494: 00006517 auipc a0,0x6 + 498: b7450513 addi a0,a0,-1164 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + 49c: 42e040ef jal 48ca + exit(1); + 4a0: 4505 li a0,1 + 4a2: 73d040ef jal 53de + int pid = fork(); + 4a6: 403000ef jal 10a8 + if (pid == -1) + 4aa: 57fd li a5,-1 + 4ac: f4f513e3 bne a0,a5,3f2 <_ZN11PipeCommand3runEv+0x1c> + printf("shell panic: %s\n", s); + 4b0: 00006597 auipc a1,0x6 + 4b4: b5058593 addi a1,a1,-1200 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + 4b8: 00006517 auipc a0,0x6 + 4bc: b5050513 addi a0,a0,-1200 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + 4c0: 40a040ef jal 48ca + exit(1); + 4c4: 4505 li a0,1 + 4c6: 719040ef jal 53de + return pid; + 4ca: b72d j 3f4 <_ZN11PipeCommand3runEv+0x1e> + +00000000000004cc <_ZN6Parser12parse_redirsEP7CommandPPcS2_>: + : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} + 4cc: 4785 li a5,1 + 4ce: 1782 slli a5,a5,0x20 + static Command *parse_redirs(Command *cmd, char **ps, char *es) + 4d0: 7119 addi sp,sp,-128 + : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} + 4d2: 60178793 addi a5,a5,1537 + static Command *parse_redirs(Command *cmd, char **ps, char *es) + 4d6: f8a2 sd s0,112(sp) + 4d8: f4a6 sd s1,104(sp) + 4da: e4d6 sd s5,72(sp) + 4dc: e0da sd s6,64(sp) + 4de: f862 sd s8,48(sp) + 4e0: f466 sd s9,40(sp) + 4e2: fc86 sd ra,120(sp) + 4e4: f0ca sd s2,96(sp) + 4e6: ecce sd s3,88(sp) + 4e8: e8d2 sd s4,80(sp) + 4ea: fc5e sd s7,56(sp) + 4ec: f06a sd s10,32(sp) + 4ee: ec6e sd s11,24(sp) + 4f0: 8aae mv s5,a1 + 4f2: 8432 mv s0,a2 + while (peek(ps, es, "<>")) + 4f4: 8c2a mv s8,a0 + 4f6: 00008497 auipc s1,0x8 + 4fa: 96248493 addi s1,s1,-1694 # 7e58 + switch (*s) + 4fe: 03c00b13 li s6,60 + if (get_token(ps, es, &q, &eq) != 'a') + 502: 06100c93 li s9,97 + : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} + 506: e43e sd a5,8(sp) + char *s = *ps; + 508: 000ab903 ld s2,0(s5) + while (s < es && strchr(WHITESPACE, *s)) + 50c: 00896663 bltu s2,s0,518 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x4c> + 510: a811 j 524 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x58> + s++; + 512: 0905 addi s2,s2,1 + while (s < es && strchr(WHITESPACE, *s)) + 514: 01240863 beq s0,s2,524 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x58> + 518: 00094583 lbu a1,0(s2) + 51c: 6088 ld a0,0(s1) + 51e: 760050ef jal 5c7e + 522: f965 bnez a0,512 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x46> + *ps = s; + 524: 012ab023 sd s2,0(s5) + return *s && strchr(toks, *s); + 528: 00094583 lbu a1,0(s2) + 52c: e18d bnez a1,54e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x82> + } + 52e: 70e6 ld ra,120(sp) + 530: 7446 ld s0,112(sp) + 532: 74a6 ld s1,104(sp) + 534: 7906 ld s2,96(sp) + 536: 69e6 ld s3,88(sp) + 538: 6a46 ld s4,80(sp) + 53a: 6aa6 ld s5,72(sp) + 53c: 6b06 ld s6,64(sp) + 53e: 7be2 ld s7,56(sp) + 540: 7ca2 ld s9,40(sp) + 542: 7d02 ld s10,32(sp) + 544: 6de2 ld s11,24(sp) + 546: 8562 mv a0,s8 + 548: 7c42 ld s8,48(sp) + 54a: 6109 addi sp,sp,128 + 54c: 8082 ret + return *s && strchr(toks, *s); + 54e: 00006517 auipc a0,0x6 + 552: afa50513 addi a0,a0,-1286 # 6048 <_GLOBAL__sub_I__ZSt3cin+0xa0> + 556: 728050ef jal 5c7e + 55a: d971 beqz a0,52e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x62> + s = *ps; + 55c: 000abd83 ld s11,0(s5) + while (s < es && strchr(WHITESPACE, *s)) + 560: 008de663 bltu s11,s0,56c <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xa0> + 564: a811 j 578 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xac> + s++; + 566: 0d85 addi s11,s11,1 + while (s < es && strchr(WHITESPACE, *s)) + 568: 01b40863 beq s0,s11,578 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xac> + 56c: 000dc583 lbu a1,0(s11) + 570: 6088 ld a0,0(s1) + 572: 70c050ef jal 5c7e + 576: f965 bnez a0,566 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x9a> + ret = *s; + 578: 000dc983 lbu s3,0(s11) + switch (*s) + 57c: 193b6e63 bltu s6,s3,718 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x24c> + 580: 03a00713 li a4,58 + 584: 01376f63 bltu a4,s3,5a2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd6> + 588: 00098e63 beqz s3,5a4 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd8> + 58c: 02600713 li a4,38 + 590: 00e98963 beq s3,a4,5a2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd6> + 594: fd89871b addiw a4,s3,-40 + 598: 0ff77713 zext.b a4,a4 + 59c: 4685 li a3,1 + 59e: 0ce6ef63 bltu a3,a4,67c <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1b0> + s++; + 5a2: 0d85 addi s11,s11,1 + while (s < es && strchr(WHITESPACE, *s)) + 5a4: 108df363 bgeu s11,s0,6aa <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1de> + 5a8: 8926 mv s2,s1 + 5aa: a021 j 5b2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xe6> + s++; + 5ac: 0d85 addi s11,s11,1 + while (s < es && strchr(WHITESPACE, *s)) + 5ae: 25b40963 beq s0,s11,800 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x334> + 5b2: 000dc583 lbu a1,0(s11) + 5b6: 6088 ld a0,0(s1) + 5b8: 6c6050ef jal 5c7e + 5bc: f965 bnez a0,5ac <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xe0> + *ps = s; + 5be: 01bab023 sd s11,0(s5) + while (s < es && strchr(WHITESPACE, *s)) + 5c2: 008de663 bltu s11,s0,5ce <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x102> + 5c6: a0e5 j 6ae <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1e2> + s++; + 5c8: 0d85 addi s11,s11,1 + while (s < es && strchr(WHITESPACE, *s)) + 5ca: 01b40863 beq s0,s11,5da <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x10e> + 5ce: 000dc583 lbu a1,0(s11) + 5d2: 6088 ld a0,0(s1) + 5d4: 6aa050ef jal 5c7e + 5d8: f965 bnez a0,5c8 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xfc> + ret = *s; + 5da: 000dca03 lbu s4,0(s11) + switch (*s) + 5de: 154b6963 bltu s6,s4,730 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x264> + 5e2: 03a00713 li a4,58 + 5e6: 01476f63 bltu a4,s4,604 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> + 5ea: 0c0a0c63 beqz s4,6c2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1f6> + 5ee: 02600713 li a4,38 + 5f2: 00ea0963 beq s4,a4,604 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> + 5f6: fd8a071b addiw a4,s4,-40 + 5fa: 0ff77713 zext.b a4,a4 + 5fe: 4685 li a3,1 + 600: 18e6e163 bltu a3,a4,782 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2b6> + ret = *s; + 604: 8bee mv s7,s11 + s++; + 606: 0d85 addi s11,s11,1 + ret = *s; + 608: 2a01 sext.w s4,s4 + while (s < es && strchr(WHITESPACE, *s)) + 60a: 8926 mv s2,s1 + 60c: 0c8df063 bgeu s11,s0,6cc <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x200> + ret = *s; + 610: 8d6e mv s10,s11 + 612: a021 j 61a <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x14e> + s++; + 614: 0d05 addi s10,s10,1 + while (s < es && strchr(WHITESPACE, *s)) + 616: 008d7963 bgeu s10,s0,628 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x15c> + 61a: 000d4583 lbu a1,0(s10) + 61e: 00093503 ld a0,0(s2) + 622: 65c050ef jal 5c7e + 626: f57d bnez a0,614 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x148> + *ps = s; + 628: 01aab023 sd s10,0(s5) + if (get_token(ps, es, &q, &eq) != 'a') + 62c: 0b9a1263 bne s4,s9,6d0 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x204> + *eq = 0; // Null terminate filename immediately + 630: 000d8023 sb zero,0(s11) + switch (tok) + 634: 0b698f63 beq s3,s6,6f2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x226> + 638: 03e00713 li a4,62 + 63c: 10e98c63 beq s3,a4,754 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x288> + 640: 02b00713 li a4,43 + 644: ece992e3 bne s3,a4,508 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x3c> + cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE, 1); // Append not fully supported in simple OS yet? + 648: 02800513 li a0,40 + 64c: 145050ef jal 5f90 <_Znwm> + : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} + 650: 4705 li a4,1 + 652: 1702 slli a4,a4,0x20 + 654: 20170713 addi a4,a4,513 + 658: 00007797 auipc a5,0x7 + 65c: 77078793 addi a5,a5,1904 # 7dc8 <_ZTV12RedirCommand+0x10> + 660: 01853423 sd s8,8(a0) + 664: e11c sd a5,0(a0) + 666: 01753823 sd s7,16(a0) + 66a: 01b53c23 sd s11,24(a0) + 66e: f118 sd a4,32(a0) + cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE, 1); // Append not fully supported in simple OS yet? + 670: 8c2a mv s8,a0 + break; + 672: bd59 j 508 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x3c> + switch (*s) + 674: 07c00713 li a4,124 + 678: f2e985e3 beq s3,a4,5a2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd6> + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + 67c: 008dec63 bltu s11,s0,694 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1c8> + 680: a01d j 6a6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1da> + 682: 000dc583 lbu a1,0(s11) + 686: 6488 ld a0,8(s1) + 688: 5f6050ef jal 5c7e + 68c: e911 bnez a0,6a0 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1d4> + s++; + 68e: 0d85 addi s11,s11,1 + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + 690: 01b40b63 beq s0,s11,6a6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1da> + 694: 000dc583 lbu a1,0(s11) + 698: 6088 ld a0,0(s1) + 69a: 5e4050ef jal 5c7e + 69e: d175 beqz a0,682 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1b6> + 6a0: 06100993 li s3,97 + 6a4: b701 j 5a4 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd8> + 6a6: 06100993 li s3,97 + *ps = s; + 6aa: 01bab023 sd s11,0(s5) + ret = *s; + 6ae: 000dca03 lbu s4,0(s11) + switch (*s) + 6b2: 114b6963 bltu s6,s4,7c4 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2f8> + 6b6: 03a00713 li a4,58 + 6ba: f54765e3 bltu a4,s4,604 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> + 6be: 120a1063 bnez s4,7de <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x312> + while (s < es && strchr(WHITESPACE, *s)) + 6c2: 8bee mv s7,s11 + ret = *s; + 6c4: 4a01 li s4,0 + 6c6: 8926 mv s2,s1 + while (s < es && strchr(WHITESPACE, *s)) + 6c8: f48de4e3 bltu s11,s0,610 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x144> + *ps = s; + 6cc: 01bab023 sd s11,0(s5) + printf("shell panic: %s\n", s); + 6d0: 00006597 auipc a1,0x6 + 6d4: 95858593 addi a1,a1,-1704 # 6028 <_GLOBAL__sub_I__ZSt3cin+0x80> + 6d8: 00006517 auipc a0,0x6 + 6dc: 93050513 addi a0,a0,-1744 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + 6e0: 1ea040ef jal 48ca + exit(1); + 6e4: 4505 li a0,1 + 6e6: 4f9040ef jal 53de + *eq = 0; // Null terminate filename immediately + 6ea: 000d8023 sb zero,0(s11) + switch (tok) + 6ee: f56995e3 bne s3,s6,638 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x16c> + cmd = new RedirCommand(cmd, q, eq, O_RDONLY, 0); + 6f2: 02800513 li a0,40 + 6f6: 09b050ef jal 5f90 <_Znwm> + : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} + 6fa: 00007797 auipc a5,0x7 + 6fe: 6ce78793 addi a5,a5,1742 # 7dc8 <_ZTV12RedirCommand+0x10> + 702: 01853423 sd s8,8(a0) + 706: e11c sd a5,0(a0) + 708: 01753823 sd s7,16(a0) + 70c: 01b53c23 sd s11,24(a0) + 710: 02053023 sd zero,32(a0) + cmd = new RedirCommand(cmd, q, eq, O_RDONLY, 0); + 714: 8c2a mv s8,a0 + break; + 716: bbcd j 508 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x3c> + switch (*s) + 718: 03e00713 li a4,62 + 71c: f4e99ce3 bne s3,a4,674 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1a8> + if (*s == '>') + 720: 001dc703 lbu a4,1(s11) + 724: e7371fe3 bne a4,s3,5a2 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd6> + s++; + 728: 0d89 addi s11,s11,2 + 72a: 02b00993 li s3,43 + 72e: bd9d j 5a4 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd8> + switch (*s) + 730: 03e00713 li a4,62 + 734: 8bee mv s7,s11 + 736: 04ea1263 bne s4,a4,77a <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2ae> + if (*s == '>') + 73a: 001dc683 lbu a3,1(s11) + 73e: 03e00713 li a4,62 + 742: 06e68a63 beq a3,a4,7b6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2ea> + s++; + 746: 0d85 addi s11,s11,1 + ret = *s; + 748: 03e00a13 li s4,62 + 74c: 8926 mv s2,s1 + while (s < es && strchr(WHITESPACE, *s)) + 74e: ec8de1e3 bltu s11,s0,610 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x144> + 752: bfad j 6cc <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x200> + cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE | O_TRUNC, 1); + 754: 02800513 li a0,40 + 758: 039050ef jal 5f90 <_Znwm> + : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} + 75c: 00007797 auipc a5,0x7 + 760: 66c78793 addi a5,a5,1644 # 7dc8 <_ZTV12RedirCommand+0x10> + 764: e11c sd a5,0(a0) + 766: 67a2 ld a5,8(sp) + 768: 01853423 sd s8,8(a0) + 76c: 01753823 sd s7,16(a0) + 770: 01b53c23 sd s11,24(a0) + 774: f11c sd a5,32(a0) + cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE | O_TRUNC, 1); + 776: 8c2a mv s8,a0 + break; + 778: bb41 j 508 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x3c> + switch (*s) + 77a: 07c00713 li a4,124 + 77e: e8ea03e3 beq s4,a4,604 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + 782: 048dfa63 bgeu s11,s0,7d6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x30a> + 786: 8d6e mv s10,s11 + 788: a811 j 79c <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2d0> + 78a: 000d4583 lbu a1,0(s10) + 78e: 6488 ld a0,8(s1) + 790: 4ee050ef jal 5c7e + 794: e911 bnez a0,7a8 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2dc> + s++; + 796: 0d05 addi s10,s10,1 + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + 798: 05a40f63 beq s0,s10,7f6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x32a> + 79c: 000d4583 lbu a1,0(s10) + 7a0: 6088 ld a0,0(s1) + 7a2: 4dc050ef jal 5c7e + 7a6: d175 beqz a0,78a <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2be> + while (s < es && strchr(WHITESPACE, *s)) + 7a8: 048d7763 bgeu s10,s0,7f6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x32a> + 7ac: 8bee mv s7,s11 + 7ae: 06100a13 li s4,97 + 7b2: 8dea mv s11,s10 + 7b4: bdb1 j 610 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x144> + s++; + 7b6: 0d89 addi s11,s11,2 + ret = '+'; + 7b8: 02b00a13 li s4,43 + 7bc: 8926 mv s2,s1 + while (s < es && strchr(WHITESPACE, *s)) + 7be: e48de9e3 bltu s11,s0,610 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x144> + 7c2: b729 j 6cc <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x200> + switch (*s) + 7c4: 03e00713 li a4,62 + 7c8: 8bee mv s7,s11 + 7ca: f6ea08e3 beq s4,a4,73a <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x26e> + 7ce: 07c00713 li a4,124 + 7d2: e2ea09e3 beq s4,a4,604 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> + *ps = s; + 7d6: 01bab023 sd s11,0(s5) + 7da: 8bee mv s7,s11 + 7dc: bd91 j 630 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x164> + switch (*s) + 7de: 02600713 li a4,38 + 7e2: e2ea01e3 beq s4,a4,604 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> + 7e6: fd8a071b addiw a4,s4,-40 + 7ea: 0ff77713 zext.b a4,a4 + 7ee: 4685 li a3,1 + 7f0: e0e6fae3 bgeu a3,a4,604 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x138> + 7f4: b7cd j 7d6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x30a> + *ps = s; + 7f6: 8bee mv s7,s11 + 7f8: 01aab023 sd s10,0(s5) + 7fc: 8dea mv s11,s10 + 7fe: bd0d j 630 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x164> + 800: 008ab023 sd s0,0(s5) + while (s < es && strchr(WHITESPACE, *s)) + 804: b56d j 6ae <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1e2> + +0000000000000806 <_ZN6Parser10parse_pipeEPPcS0_>: + static Command *parse_pipe(char **ps, char *es) + 806: 7119 addi sp,sp,-128 + 808: e8d2 sd s4,80(sp) + 80a: 8a2a mv s4,a0 + ExecCommand *cmd = new ExecCommand(); + 80c: 05800513 li a0,88 + static Command *parse_pipe(char **ps, char *es) + 810: fc86 sd ra,120(sp) + 812: f8a2 sd s0,112(sp) + 814: f4a6 sd s1,104(sp) + 816: 842e mv s0,a1 + 818: e4d6 sd s5,72(sp) + 81a: e0da sd s6,64(sp) + 81c: fc5e sd s7,56(sp) + 81e: f466 sd s9,40(sp) + 820: f06a sd s10,32(sp) + 822: f0ca sd s2,96(sp) + 824: ecce sd s3,88(sp) + 826: f862 sd s8,48(sp) + 828: ec6e sd s11,24(sp) + ExecCommand *cmd = new ExecCommand(); + 82a: 766050ef jal 5f90 <_Znwm> + 82e: 84aa mv s1,a0 + { + 830: 00007797 auipc a5,0x7 + 834: 57078793 addi a5,a5,1392 # 7da0 <_ZTV11ExecCommand+0x10> + memset(argv, 0, sizeof(argv)); + 838: 00850b93 addi s7,a0,8 + { + 83c: e09c sd a5,0(s1) + ExecCommand *cmd = new ExecCommand(); + 83e: e42a sd a0,8(sp) + memset(argv, 0, sizeof(argv)); + 840: 05000613 li a2,80 + 844: 4581 li a1,0 + 846: 855e mv a0,s7 + 848: 248050ef jal 5a90 + ret = parse_redirs(ret, ps, es); + 84c: 8526 mv a0,s1 + 84e: 8622 mv a2,s0 + 850: 85d2 mv a1,s4 + 852: c7bff0ef jal 4cc <_ZN6Parser12parse_redirsEP7CommandPPcS2_> + char *s = *ps; + 856: 000a3d03 ld s10,0(s4) + ret = parse_redirs(ret, ps, es); + 85a: 8aaa mv s5,a0 + argc = 0; + 85c: 4b01 li s6,0 + while (s < es && strchr(WHITESPACE, *s)) + 85e: 00007497 auipc s1,0x7 + 862: 5fa48493 addi s1,s1,1530 # 7e58 + if (*s == '>') + 866: 03e00c93 li s9,62 + while (s < es && strchr(WHITESPACE, *s)) + 86a: 0c8d7f63 bgeu s10,s0,948 <_ZN6Parser10parse_pipeEPPcS0_+0x142> + 86e: 89a6 mv s3,s1 + 870: a021 j 878 <_ZN6Parser10parse_pipeEPPcS0_+0x72> + s++; + 872: 0d05 addi s10,s10,1 + while (s < es && strchr(WHITESPACE, *s)) + 874: 01a40863 beq s0,s10,884 <_ZN6Parser10parse_pipeEPPcS0_+0x7e> + 878: 000d4583 lbu a1,0(s10) + 87c: 6088 ld a0,0(s1) + 87e: 400050ef jal 5c7e + 882: f965 bnez a0,872 <_ZN6Parser10parse_pipeEPPcS0_+0x6c> + *ps = s; + 884: 01aa3023 sd s10,0(s4) + return *s && strchr(toks, *s); + 888: 000d4583 lbu a1,0(s10) + 88c: 10059063 bnez a1,98c <_ZN6Parser10parse_pipeEPPcS0_+0x186> + while (s < es && strchr(WHITESPACE, *s)) + 890: 008d6863 bltu s10,s0,8a0 <_ZN6Parser10parse_pipeEPPcS0_+0x9a> + 894: a6ad j bfe <_ZN6Parser10parse_pipeEPPcS0_+0x3f8> + s++; + 896: 0d05 addi s10,s10,1 + ret = *s; + 898: 000d4903 lbu s2,0(s10) + while (s < es && strchr(WHITESPACE, *s)) + 89c: 0ba40f63 beq s0,s10,95a <_ZN6Parser10parse_pipeEPPcS0_+0x154> + 8a0: 000d4583 lbu a1,0(s10) + 8a4: 6088 ld a0,0(s1) + 8a6: 3d8050ef jal 5c7e + 8aa: f575 bnez a0,896 <_ZN6Parser10parse_pipeEPPcS0_+0x90> + ret = *s; + 8ac: 000d4903 lbu s2,0(s10) + switch (*s) + 8b0: 08090f63 beqz s2,94e <_ZN6Parser10parse_pipeEPPcS0_+0x148> + 8b4: 1b990663 beq s2,s9,a60 <_ZN6Parser10parse_pipeEPPcS0_+0x25a> + 8b8: 2d2ceb63 bltu s9,s2,b8e <_ZN6Parser10parse_pipeEPPcS0_+0x388> + 8bc: 02900713 li a4,41 + 8c0: 29276663 bltu a4,s2,b4c <_ZN6Parser10parse_pipeEPPcS0_+0x346> + 8c4: 02700713 li a4,39 + 8c8: 01276663 bltu a4,s2,8d4 <_ZN6Parser10parse_pipeEPPcS0_+0xce> + 8cc: 02600713 li a4,38 + 8d0: 28e91563 bne s2,a4,b5a <_ZN6Parser10parse_pipeEPPcS0_+0x354> + ret = *s; + 8d4: 8c6a mv s8,s10 + s++; + 8d6: 0d05 addi s10,s10,1 + ret = *s; + 8d8: 2901 sext.w s2,s2 + 8da: 89a6 mv s3,s1 + while (s < es && strchr(WHITESPACE, *s)) + 8dc: 168d7f63 bgeu s10,s0,a5a <_ZN6Parser10parse_pipeEPPcS0_+0x254> + ret = *s; + 8e0: 8dea mv s11,s10 + 8e2: a021 j 8ea <_ZN6Parser10parse_pipeEPPcS0_+0xe4> + s++; + 8e4: 0d85 addi s11,s11,1 + while (s < es && strchr(WHITESPACE, *s)) + 8e6: 008df963 bgeu s11,s0,8f8 <_ZN6Parser10parse_pipeEPPcS0_+0xf2> + 8ea: 000dc583 lbu a1,0(s11) + 8ee: 0009b503 ld a0,0(s3) + 8f2: 38c050ef jal 5c7e + 8f6: f57d bnez a0,8e4 <_ZN6Parser10parse_pipeEPPcS0_+0xde> + *ps = s; + 8f8: 01ba3023 sd s11,0(s4) + if ((tok = get_token(ps, es, &q, &eq)) == 0) + 8fc: 0a090163 beqz s2,99e <_ZN6Parser10parse_pipeEPPcS0_+0x198> + if (tok != 'a') + 900: 06100793 li a5,97 + 904: 00f90f63 beq s2,a5,922 <_ZN6Parser10parse_pipeEPPcS0_+0x11c> + printf("shell panic: %s\n", s); + 908: 00005597 auipc a1,0x5 + 90c: 74858593 addi a1,a1,1864 # 6050 <_GLOBAL__sub_I__ZSt3cin+0xa8> + 910: 00005517 auipc a0,0x5 + 914: 6f850513 addi a0,a0,1784 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + 918: 7b3030ef jal 48ca + exit(1); + 91c: 4505 li a0,1 + 91e: 2c1040ef jal 53de + cmd->argv[argc] = q; + 922: 018bb023 sd s8,0(s7) + *eq = 0; // Temp + 926: 000d0023 sb zero,0(s10) + argc++; + 92a: 2b05 addiw s6,s6,1 + if (argc >= MAX_ARGS) + 92c: 47a5 li a5,9 + 92e: 0d67c463 blt a5,s6,9f6 <_ZN6Parser10parse_pipeEPPcS0_+0x1f0> + ret = parse_redirs(ret, ps, es); + 932: 8556 mv a0,s5 + 934: 8622 mv a2,s0 + 936: 85d2 mv a1,s4 + 938: b95ff0ef jal 4cc <_ZN6Parser12parse_redirsEP7CommandPPcS2_> + char *s = *ps; + 93c: 000a3d03 ld s10,0(s4) + ret = parse_redirs(ret, ps, es); + 940: 8aaa mv s5,a0 + 942: 0ba1 addi s7,s7,8 + while (s < es && strchr(WHITESPACE, *s)) + 944: f28d65e3 bltu s10,s0,86e <_ZN6Parser10parse_pipeEPPcS0_+0x68> + return *s && strchr(toks, *s); + 948: 000d4583 lbu a1,0(s10) + 94c: e1a1 bnez a1,98c <_ZN6Parser10parse_pipeEPPcS0_+0x186> + while (s < es && strchr(WHITESPACE, *s)) + 94e: 2a8d7863 bgeu s10,s0,bfe <_ZN6Parser10parse_pipeEPPcS0_+0x3f8> + 952: 8c6a mv s8,s10 + ret = *s; + 954: 4901 li s2,0 + 956: 89a6 mv s3,s1 + 958: b761 j 8e0 <_ZN6Parser10parse_pipeEPPcS0_+0xda> + switch (*s) + 95a: 0f990463 beq s2,s9,a42 <_ZN6Parser10parse_pipeEPPcS0_+0x23c> + 95e: 0d2cea63 bltu s9,s2,a32 <_ZN6Parser10parse_pipeEPPcS0_+0x22c> + 962: 02900793 li a5,41 + 966: 1127ef63 bltu a5,s2,a84 <_ZN6Parser10parse_pipeEPPcS0_+0x27e> + 96a: 02700713 li a4,39 + 96e: f72763e3 bltu a4,s2,8d4 <_ZN6Parser10parse_pipeEPPcS0_+0xce> + 972: 28090663 beqz s2,bfe <_ZN6Parser10parse_pipeEPPcS0_+0x3f8> + 976: 02600713 li a4,38 + 97a: 0ce91063 bne s2,a4,a3a <_ZN6Parser10parse_pipeEPPcS0_+0x234> + ret = *s; + 97e: 8c6a mv s8,s10 + s++; + 980: 0d05 addi s10,s10,1 + ret = *s; + 982: 2901 sext.w s2,s2 + 984: 89a6 mv s3,s1 + while (s < es && strchr(WHITESPACE, *s)) + 986: f48d6de3 bltu s10,s0,8e0 <_ZN6Parser10parse_pipeEPPcS0_+0xda> + 98a: a8c1 j a5a <_ZN6Parser10parse_pipeEPPcS0_+0x254> + return *s && strchr(toks, *s); + 98c: 00005517 auipc a0,0x5 + 990: 6dc50513 addi a0,a0,1756 # 6068 <_GLOBAL__sub_I__ZSt3cin+0xc0> + 994: 2ea050ef jal 5c7e + 998: cd2d beqz a0,a12 <_ZN6Parser10parse_pipeEPPcS0_+0x20c> + char *s = *ps; + 99a: 000a3d83 ld s11,0(s4) + cmd->argv[argc] = 0; + 99e: 67a2 ld a5,8(sp) + 9a0: 0b0e slli s6,s6,0x3 + 9a2: 97da add a5,a5,s6 + 9a4: 0007b423 sd zero,8(a5) + while (s < es && strchr(WHITESPACE, *s)) + 9a8: 028df163 bgeu s11,s0,9ca <_ZN6Parser10parse_pipeEPPcS0_+0x1c4> + 9ac: 00007997 auipc s3,0x7 + 9b0: 4ac98993 addi s3,s3,1196 # 7e58 + 9b4: a021 j 9bc <_ZN6Parser10parse_pipeEPPcS0_+0x1b6> + s++; + 9b6: 0d85 addi s11,s11,1 + while (s < es && strchr(WHITESPACE, *s)) + 9b8: 01b40963 beq s0,s11,9ca <_ZN6Parser10parse_pipeEPPcS0_+0x1c4> + 9bc: 000dc583 lbu a1,0(s11) + 9c0: 0009b503 ld a0,0(s3) + 9c4: 2ba050ef jal 5c7e + 9c8: f57d bnez a0,9b6 <_ZN6Parser10parse_pipeEPPcS0_+0x1b0> + *ps = s; + 9ca: 01ba3023 sd s11,0(s4) + return *s && strchr(toks, *s); + 9ce: 000dc583 lbu a1,0(s11) + 9d2: e5f9 bnez a1,aa0 <_ZN6Parser10parse_pipeEPPcS0_+0x29a> + Command *cmd = parse_exec(ps, es); + 9d4: 8456 mv s0,s5 + } + 9d6: 70e6 ld ra,120(sp) + 9d8: 8522 mv a0,s0 + 9da: 7446 ld s0,112(sp) + 9dc: 74a6 ld s1,104(sp) + 9de: 7906 ld s2,96(sp) + 9e0: 69e6 ld s3,88(sp) + 9e2: 6a46 ld s4,80(sp) + 9e4: 6aa6 ld s5,72(sp) + 9e6: 6b06 ld s6,64(sp) + 9e8: 7be2 ld s7,56(sp) + 9ea: 7c42 ld s8,48(sp) + 9ec: 7ca2 ld s9,40(sp) + 9ee: 7d02 ld s10,32(sp) + 9f0: 6de2 ld s11,24(sp) + 9f2: 6109 addi sp,sp,128 + 9f4: 8082 ret + printf("shell panic: %s\n", s); + 9f6: 00005597 auipc a1,0x5 + 9fa: 66258593 addi a1,a1,1634 # 6058 <_GLOBAL__sub_I__ZSt3cin+0xb0> + 9fe: 00005517 auipc a0,0x5 + a02: 60a50513 addi a0,a0,1546 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + a06: 6c5030ef jal 48ca + exit(1); + a0a: 4505 li a0,1 + a0c: 1d3040ef jal 53de +} + a10: b70d j 932 <_ZN6Parser10parse_pipeEPPcS0_+0x12c> + char *s = *ps; + a12: 000a3d03 ld s10,0(s4) + a16: 89a6 mv s3,s1 + ret = *s; + a18: 000d4903 lbu s2,0(s10) + while (s < es && strchr(WHITESPACE, *s)) + a1c: e88d62e3 bltu s10,s0,8a0 <_ZN6Parser10parse_pipeEPPcS0_+0x9a> + switch (*s) + a20: 03c00713 li a4,60 + a24: 1f277163 bgeu a4,s2,c06 <_ZN6Parser10parse_pipeEPPcS0_+0x400> + a28: 03e00713 li a4,62 + a2c: 8c6a mv s8,s10 + a2e: 00e90b63 beq s2,a4,a44 <_ZN6Parser10parse_pipeEPPcS0_+0x23e> + a32: 07c00713 li a4,124 + a36: e8e90fe3 beq s2,a4,8d4 <_ZN6Parser10parse_pipeEPPcS0_+0xce> + *ps = s; + a3a: 01aa3023 sd s10,0(s4) + a3e: 8c6a mv s8,s10 + a40: b5cd j 922 <_ZN6Parser10parse_pipeEPPcS0_+0x11c> + switch (*s) + a42: 8c22 mv s8,s0 + if (*s == '>') + a44: 001c4783 lbu a5,1(s8) + a48: 03978163 beq a5,s9,a6a <_ZN6Parser10parse_pipeEPPcS0_+0x264> + s++; + a4c: 001c0d13 addi s10,s8,1 + ret = *s; + a50: 03e00913 li s2,62 + a54: 89a6 mv s3,s1 + while (s < es && strchr(WHITESPACE, *s)) + a56: e88d65e3 bltu s10,s0,8e0 <_ZN6Parser10parse_pipeEPPcS0_+0xda> + *ps = s; + a5a: 01aa3023 sd s10,0(s4) + if (tok != 'a') + a5e: b56d j 908 <_ZN6Parser10parse_pipeEPPcS0_+0x102> + switch (*s) + a60: 8c6a mv s8,s10 + if (*s == '>') + a62: 001c4783 lbu a5,1(s8) + a66: ff9793e3 bne a5,s9,a4c <_ZN6Parser10parse_pipeEPPcS0_+0x246> + s++; + a6a: 002c0d13 addi s10,s8,2 + ret = '+'; + a6e: 02b00913 li s2,43 + a72: 00007997 auipc s3,0x7 + a76: 3e698993 addi s3,s3,998 # 7e58 + while (s < es && strchr(WHITESPACE, *s)) + a7a: e68d63e3 bltu s10,s0,8e0 <_ZN6Parser10parse_pipeEPPcS0_+0xda> + *ps = s; + a7e: 01aa3023 sd s10,0(s4) + if (tok != 'a') + a82: b559 j 908 <_ZN6Parser10parse_pipeEPPcS0_+0x102> + switch (*s) + a84: fc59071b addiw a4,s2,-59 + a88: 0ff77713 zext.b a4,a4 + a8c: 4685 li a3,1 + a8e: fae6e6e3 bltu a3,a4,a3a <_ZN6Parser10parse_pipeEPPcS0_+0x234> + ret = *s; + a92: 8c6a mv s8,s10 + s++; + a94: 0d05 addi s10,s10,1 + ret = *s; + a96: 2901 sext.w s2,s2 + a98: 89a6 mv s3,s1 + while (s < es && strchr(WHITESPACE, *s)) + a9a: e48d63e3 bltu s10,s0,8e0 <_ZN6Parser10parse_pipeEPPcS0_+0xda> + a9e: bf75 j a5a <_ZN6Parser10parse_pipeEPPcS0_+0x254> + return *s && strchr(toks, *s); + aa0: 00005517 auipc a0,0x5 + aa4: 5d050513 addi a0,a0,1488 # 6070 <_GLOBAL__sub_I__ZSt3cin+0xc8> + aa8: 1d6050ef jal 5c7e + aac: d505 beqz a0,9d4 <_ZN6Parser10parse_pipeEPPcS0_+0x1ce> + s = *ps; + aae: 000a3483 ld s1,0(s4) + while (s < es && strchr(WHITESPACE, *s)) + ab2: 0284f163 bgeu s1,s0,ad4 <_ZN6Parser10parse_pipeEPPcS0_+0x2ce> + ab6: 00007997 auipc s3,0x7 + aba: 3a298993 addi s3,s3,930 # 7e58 + abe: a021 j ac6 <_ZN6Parser10parse_pipeEPPcS0_+0x2c0> + s++; + ac0: 0485 addi s1,s1,1 + while (s < es && strchr(WHITESPACE, *s)) + ac2: 00940963 beq s0,s1,ad4 <_ZN6Parser10parse_pipeEPPcS0_+0x2ce> + ac6: 0004c583 lbu a1,0(s1) + aca: 0009b503 ld a0,0(s3) + ace: 1b0050ef jal 5c7e + ad2: f57d bnez a0,ac0 <_ZN6Parser10parse_pipeEPPcS0_+0x2ba> + ret = *s; + ad4: 0004c783 lbu a5,0(s1) + switch (*s) + ad8: 03c00713 li a4,60 + adc: 0cf76963 bltu a4,a5,bae <_ZN6Parser10parse_pipeEPPcS0_+0x3a8> + ae0: 03a00713 li a4,58 + ae4: 00f76e63 bltu a4,a5,b00 <_ZN6Parser10parse_pipeEPPcS0_+0x2fa> + ae8: cf89 beqz a5,b02 <_ZN6Parser10parse_pipeEPPcS0_+0x2fc> + aea: 02600713 li a4,38 + aee: 00e78963 beq a5,a4,b00 <_ZN6Parser10parse_pipeEPPcS0_+0x2fa> + af2: fd87879b addiw a5,a5,-40 + af6: 0ff7f793 zext.b a5,a5 + afa: 4705 li a4,1 + afc: 0cf76763 bltu a4,a5,bca <_ZN6Parser10parse_pipeEPPcS0_+0x3c4> + s++; + b00: 0485 addi s1,s1,1 + while (s < es && strchr(WHITESPACE, *s)) + b02: 00007997 auipc s3,0x7 + b06: 35698993 addi s3,s3,854 # 7e58 + b0a: 0084e663 bltu s1,s0,b16 <_ZN6Parser10parse_pipeEPPcS0_+0x310> + b0e: a819 j b24 <_ZN6Parser10parse_pipeEPPcS0_+0x31e> + s++; + b10: 0485 addi s1,s1,1 + while (s < es && strchr(WHITESPACE, *s)) + b12: 0e940463 beq s0,s1,bfa <_ZN6Parser10parse_pipeEPPcS0_+0x3f4> + b16: 0004c583 lbu a1,0(s1) + b1a: 0009b503 ld a0,0(s3) + b1e: 160050ef jal 5c7e + b22: f57d bnez a0,b10 <_ZN6Parser10parse_pipeEPPcS0_+0x30a> + *ps = s; + b24: 009a3023 sd s1,0(s4) + cmd = new PipeCommand(cmd, parse_pipe(ps, es)); + b28: 4561 li a0,24 + b2a: 466050ef jal 5f90 <_Znwm> + b2e: 87aa mv a5,a0 + b30: 85a2 mv a1,s0 + b32: 8552 mv a0,s4 + b34: 843e mv s0,a5 + b36: cd1ff0ef jal 806 <_ZN6Parser10parse_pipeEPPcS0_> + PipeCommand(Command *l, Command *r) : left(l), right(r) {} + b3a: 00007797 auipc a5,0x7 + b3e: 2b678793 addi a5,a5,694 # 7df0 <_ZTV11PipeCommand+0x10> + b42: e01c sd a5,0(s0) + b44: 01543423 sd s5,8(s0) + b48: e808 sd a0,16(s0) + b4a: b571 j 9d6 <_ZN6Parser10parse_pipeEPPcS0_+0x1d0> + switch (*s) + b4c: fc59071b addiw a4,s2,-59 + b50: 0ff77713 zext.b a4,a4 + b54: 4685 li a3,1 + b56: d6e6ffe3 bgeu a3,a4,8d4 <_ZN6Parser10parse_pipeEPPcS0_+0xce> + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + b5a: ee8d70e3 bgeu s10,s0,a3a <_ZN6Parser10parse_pipeEPPcS0_+0x234> + b5e: 8dea mv s11,s10 + b60: a811 j b74 <_ZN6Parser10parse_pipeEPPcS0_+0x36e> + b62: 000dc583 lbu a1,0(s11) + b66: 6488 ld a0,8(s1) + b68: 116050ef jal 5c7e + b6c: e911 bnez a0,b80 <_ZN6Parser10parse_pipeEPPcS0_+0x37a> + s++; + b6e: 0d85 addi s11,s11,1 + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + b70: 03b40a63 beq s0,s11,ba4 <_ZN6Parser10parse_pipeEPPcS0_+0x39e> + b74: 000dc583 lbu a1,0(s11) + b78: 6088 ld a0,0(s1) + b7a: 104050ef jal 5c7e + b7e: d175 beqz a0,b62 <_ZN6Parser10parse_pipeEPPcS0_+0x35c> + while (s < es && strchr(WHITESPACE, *s)) + b80: 8c6a mv s8,s10 + b82: 0a8df463 bgeu s11,s0,c2a <_ZN6Parser10parse_pipeEPPcS0_+0x424> + b86: 06100913 li s2,97 + b8a: 8d6e mv s10,s11 + b8c: bb91 j 8e0 <_ZN6Parser10parse_pipeEPPcS0_+0xda> + switch (*s) + b8e: 07c00713 li a4,124 + b92: fce914e3 bne s2,a4,b5a <_ZN6Parser10parse_pipeEPPcS0_+0x354> + ret = *s; + b96: 8c6a mv s8,s10 + s++; + b98: 0d05 addi s10,s10,1 + ret = *s; + b9a: 2901 sext.w s2,s2 + b9c: 89a6 mv s3,s1 + while (s < es && strchr(WHITESPACE, *s)) + b9e: d48d61e3 bltu s10,s0,8e0 <_ZN6Parser10parse_pipeEPPcS0_+0xda> + ba2: bd65 j a5a <_ZN6Parser10parse_pipeEPPcS0_+0x254> + *ps = s; + ba4: 8c6a mv s8,s10 + ba6: 008a3023 sd s0,0(s4) + baa: 8d22 mv s10,s0 + bac: bb9d j 922 <_ZN6Parser10parse_pipeEPPcS0_+0x11c> + switch (*s) + bae: 03e00713 li a4,62 + bb2: 00e79863 bne a5,a4,bc2 <_ZN6Parser10parse_pipeEPPcS0_+0x3bc> + if (*s == '>') + bb6: 0014c703 lbu a4,1(s1) + bba: f4f713e3 bne a4,a5,b00 <_ZN6Parser10parse_pipeEPPcS0_+0x2fa> + s++; + bbe: 0489 addi s1,s1,2 + bc0: b789 j b02 <_ZN6Parser10parse_pipeEPPcS0_+0x2fc> + switch (*s) + bc2: 07c00713 li a4,124 + bc6: f2e78de3 beq a5,a4,b00 <_ZN6Parser10parse_pipeEPPcS0_+0x2fa> + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + bca: f484fde3 bgeu s1,s0,b24 <_ZN6Parser10parse_pipeEPPcS0_+0x31e> + bce: 00007997 auipc s3,0x7 + bd2: 28a98993 addi s3,s3,650 # 7e58 + bd6: 0004c583 lbu a1,0(s1) + bda: 0009b503 ld a0,0(s3) + bde: 0a0050ef jal 5c7e + be2: f105 bnez a0,b02 <_ZN6Parser10parse_pipeEPPcS0_+0x2fc> + be4: 0004c583 lbu a1,0(s1) + be8: 0089b503 ld a0,8(s3) + bec: 092050ef jal 5c7e + bf0: f00519e3 bnez a0,b02 <_ZN6Parser10parse_pipeEPPcS0_+0x2fc> + s++; + bf4: 0485 addi s1,s1,1 + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + bf6: fe9410e3 bne s0,s1,bd6 <_ZN6Parser10parse_pipeEPPcS0_+0x3d0> + bfa: 84a2 mv s1,s0 + bfc: b725 j b24 <_ZN6Parser10parse_pipeEPPcS0_+0x31e> + *ps = s; + bfe: 01aa3023 sd s10,0(s4) + c02: 8dea mv s11,s10 + c04: bb69 j 99e <_ZN6Parser10parse_pipeEPPcS0_+0x198> + switch (*s) + c06: 03a00713 li a4,58 + c0a: cd2765e3 bltu a4,s2,8d4 <_ZN6Parser10parse_pipeEPPcS0_+0xce> + c0e: fe0908e3 beqz s2,bfe <_ZN6Parser10parse_pipeEPPcS0_+0x3f8> + c12: 02600713 li a4,38 + c16: cae90fe3 beq s2,a4,8d4 <_ZN6Parser10parse_pipeEPPcS0_+0xce> + c1a: fd89071b addiw a4,s2,-40 + c1e: 0ff77713 zext.b a4,a4 + c22: 4685 li a3,1 + c24: cae6f8e3 bgeu a3,a4,8d4 <_ZN6Parser10parse_pipeEPPcS0_+0xce> + c28: bd09 j a3a <_ZN6Parser10parse_pipeEPPcS0_+0x234> + *ps = s; + c2a: 01ba3023 sd s11,0(s4) + c2e: 8d6e mv s10,s11 + c30: 06100913 li s2,97 + c34: b1f1 j 900 <_ZN6Parser10parse_pipeEPPcS0_+0xfa> + +0000000000000c36 <_ZN6Parser10parse_lineEPPcS0_>: + static Command *parse_line(char **ps, char *es) + c36: 7159 addi sp,sp,-112 + c38: eca6 sd s1,88(sp) + c3a: e8ca sd s2,80(sp) + c3c: e4ce sd s3,72(sp) + c3e: e0d2 sd s4,64(sp) + c40: fc56 sd s5,56(sp) + c42: f85a sd s6,48(sp) + c44: f45e sd s7,40(sp) + c46: f062 sd s8,32(sp) + c48: ec66 sd s9,24(sp) + c4a: e86a sd s10,16(sp) + c4c: e46e sd s11,8(sp) + c4e: f486 sd ra,104(sp) + c50: f0a2 sd s0,96(sp) + c52: 89aa mv s3,a0 + c54: 84ae mv s1,a1 + Command *cmd = parse_pipe(ps, es); + c56: bb1ff0ef jal 806 <_ZN6Parser10parse_pipeEPPcS0_> + c5a: 8a2a mv s4,a0 + while (peek(ps, es, "&")) + c5c: 00007917 auipc s2,0x7 + c60: 1fc90913 addi s2,s2,508 # 7e58 + return *s && strchr(toks, *s); + c64: 00005c97 auipc s9,0x5 + c68: 414c8c93 addi s9,s9,1044 # 6078 <_GLOBAL__sub_I__ZSt3cin+0xd0> + switch (*s) + c6c: 03c00b13 li s6,60 + c70: 03e00b93 li s7,62 + c74: 07c00d93 li s11,124 + c78: 03a00c13 li s8,58 + c7c: 02600d13 li s10,38 + BackCommand(Command *c) : sub_cmd(c) {} + c80: 00007a97 auipc s5,0x7 + c84: 1c0a8a93 addi s5,s5,448 # 7e40 <_ZTV11BackCommand+0x10> + char *s = *ps; + c88: 0009b403 ld s0,0(s3) + while (s < es && strchr(WHITESPACE, *s)) + c8c: 00946663 bltu s0,s1,c98 <_ZN6Parser10parse_lineEPPcS0_+0x62> + c90: a819 j ca6 <_ZN6Parser10parse_lineEPPcS0_+0x70> + s++; + c92: 0405 addi s0,s0,1 + while (s < es && strchr(WHITESPACE, *s)) + c94: 00848963 beq s1,s0,ca6 <_ZN6Parser10parse_lineEPPcS0_+0x70> + c98: 00044583 lbu a1,0(s0) + c9c: 00093503 ld a0,0(s2) + ca0: 7df040ef jal 5c7e + ca4: f57d bnez a0,c92 <_ZN6Parser10parse_lineEPPcS0_+0x5c> + *ps = s; + ca6: 0089b023 sd s0,0(s3) + return *s && strchr(toks, *s); + caa: 00044583 lbu a1,0(s0) + cae: e9a9 bnez a1,d00 <_ZN6Parser10parse_lineEPPcS0_+0xca> + while (s < es && strchr(WHITESPACE, *s)) + cb0: 02947163 bgeu s0,s1,cd2 <_ZN6Parser10parse_lineEPPcS0_+0x9c> + cb4: 00007917 auipc s2,0x7 + cb8: 1a490913 addi s2,s2,420 # 7e58 + cbc: a021 j cc4 <_ZN6Parser10parse_lineEPPcS0_+0x8e> + s++; + cbe: 0405 addi s0,s0,1 + while (s < es && strchr(WHITESPACE, *s)) + cc0: 00848963 beq s1,s0,cd2 <_ZN6Parser10parse_lineEPPcS0_+0x9c> + cc4: 00044583 lbu a1,0(s0) + cc8: 00093503 ld a0,0(s2) + ccc: 7b3040ef jal 5c7e + cd0: f57d bnez a0,cbe <_ZN6Parser10parse_lineEPPcS0_+0x88> + *ps = s; + cd2: 0089b023 sd s0,0(s3) + return *s && strchr(toks, *s); + cd6: 00044583 lbu a1,0(s0) + cda: 0e059a63 bnez a1,dce <_ZN6Parser10parse_lineEPPcS0_+0x198> + cde: 8452 mv s0,s4 + } + ce0: 70a6 ld ra,104(sp) + ce2: 8522 mv a0,s0 + ce4: 7406 ld s0,96(sp) + ce6: 64e6 ld s1,88(sp) + ce8: 6946 ld s2,80(sp) + cea: 69a6 ld s3,72(sp) + cec: 6a06 ld s4,64(sp) + cee: 7ae2 ld s5,56(sp) + cf0: 7b42 ld s6,48(sp) + cf2: 7ba2 ld s7,40(sp) + cf4: 7c02 ld s8,32(sp) + cf6: 6ce2 ld s9,24(sp) + cf8: 6d42 ld s10,16(sp) + cfa: 6da2 ld s11,8(sp) + cfc: 6165 addi sp,sp,112 + cfe: 8082 ret + return *s && strchr(toks, *s); + d00: 8566 mv a0,s9 + d02: 77d040ef jal 5c7e + s = *ps; + d06: 0009b403 ld s0,0(s3) + return *s && strchr(toks, *s); + d0a: d15d beqz a0,cb0 <_ZN6Parser10parse_lineEPPcS0_+0x7a> + while (s < es && strchr(WHITESPACE, *s)) + d0c: 00946663 bltu s0,s1,d18 <_ZN6Parser10parse_lineEPPcS0_+0xe2> + d10: a819 j d26 <_ZN6Parser10parse_lineEPPcS0_+0xf0> + s++; + d12: 0405 addi s0,s0,1 + while (s < es && strchr(WHITESPACE, *s)) + d14: 00848963 beq s1,s0,d26 <_ZN6Parser10parse_lineEPPcS0_+0xf0> + d18: 00044583 lbu a1,0(s0) + d1c: 00093503 ld a0,0(s2) + d20: 75f040ef jal 5c7e + d24: f57d bnez a0,d12 <_ZN6Parser10parse_lineEPPcS0_+0xdc> + ret = *s; + d26: 00044783 lbu a5,0(s0) + switch (*s) + d2a: 08fb6a63 bltu s6,a5,dbe <_ZN6Parser10parse_lineEPPcS0_+0x188> + d2e: 00fc6c63 bltu s8,a5,d46 <_ZN6Parser10parse_lineEPPcS0_+0x110> + d32: cb99 beqz a5,d48 <_ZN6Parser10parse_lineEPPcS0_+0x112> + d34: 01a78963 beq a5,s10,d46 <_ZN6Parser10parse_lineEPPcS0_+0x110> + d38: fd87879b addiw a5,a5,-40 + d3c: 0ff7f793 zext.b a5,a5 + d40: 4705 li a4,1 + d42: 02f76d63 bltu a4,a5,d7c <_ZN6Parser10parse_lineEPPcS0_+0x146> + s++; + d46: 0405 addi s0,s0,1 + while (s < es && strchr(WHITESPACE, *s)) + d48: 00946663 bltu s0,s1,d54 <_ZN6Parser10parse_lineEPPcS0_+0x11e> + d4c: a819 j d62 <_ZN6Parser10parse_lineEPPcS0_+0x12c> + s++; + d4e: 0405 addi s0,s0,1 + while (s < es && strchr(WHITESPACE, *s)) + d50: 04848b63 beq s1,s0,da6 <_ZN6Parser10parse_lineEPPcS0_+0x170> + d54: 00044583 lbu a1,0(s0) + d58: 00093503 ld a0,0(s2) + d5c: 723040ef jal 5c7e + d60: f57d bnez a0,d4e <_ZN6Parser10parse_lineEPPcS0_+0x118> + *ps = s; + d62: 0089b023 sd s0,0(s3) + cmd = new BackCommand(cmd); + d66: 4541 li a0,16 + d68: 228050ef jal 5f90 <_Znwm> + BackCommand(Command *c) : sub_cmd(c) {} + d6c: 01453423 sd s4,8(a0) + d70: 01553023 sd s5,0(a0) + cmd = new BackCommand(cmd); + d74: 8a2a mv s4,a0 + d76: bf09 j c88 <_ZN6Parser10parse_lineEPPcS0_+0x52> + switch (*s) + d78: fdb787e3 beq a5,s11,d46 <_ZN6Parser10parse_lineEPPcS0_+0x110> + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + d7c: 00946d63 bltu s0,s1,d96 <_ZN6Parser10parse_lineEPPcS0_+0x160> + d80: b7cd j d62 <_ZN6Parser10parse_lineEPPcS0_+0x12c> + d82: 00044583 lbu a1,0(s0) + d86: 00893503 ld a0,8(s2) + d8a: 6f5040ef jal 5c7e + d8e: fd4d bnez a0,d48 <_ZN6Parser10parse_lineEPPcS0_+0x112> + s++; + d90: 0405 addi s0,s0,1 + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + d92: 00848a63 beq s1,s0,da6 <_ZN6Parser10parse_lineEPPcS0_+0x170> + d96: 00044583 lbu a1,0(s0) + d9a: 00093503 ld a0,0(s2) + d9e: 6e1040ef jal 5c7e + da2: d165 beqz a0,d82 <_ZN6Parser10parse_lineEPPcS0_+0x14c> + da4: b755 j d48 <_ZN6Parser10parse_lineEPPcS0_+0x112> + da6: 8426 mv s0,s1 + *ps = s; + da8: 0089b023 sd s0,0(s3) + cmd = new BackCommand(cmd); + dac: 4541 li a0,16 + dae: 1e2050ef jal 5f90 <_Znwm> + BackCommand(Command *c) : sub_cmd(c) {} + db2: 01453423 sd s4,8(a0) + db6: 01553023 sd s5,0(a0) + cmd = new BackCommand(cmd); + dba: 8a2a mv s4,a0 + dbc: b5f1 j c88 <_ZN6Parser10parse_lineEPPcS0_+0x52> + switch (*s) + dbe: fb779de3 bne a5,s7,d78 <_ZN6Parser10parse_lineEPPcS0_+0x142> + if (*s == '>') + dc2: 00144783 lbu a5,1(s0) + dc6: f97790e3 bne a5,s7,d46 <_ZN6Parser10parse_lineEPPcS0_+0x110> + s++; + dca: 0409 addi s0,s0,2 + dcc: bfb5 j d48 <_ZN6Parser10parse_lineEPPcS0_+0x112> + return *s && strchr(toks, *s); + dce: 00005517 auipc a0,0x5 + dd2: 2b250513 addi a0,a0,690 # 6080 <_GLOBAL__sub_I__ZSt3cin+0xd8> + dd6: 6a9040ef jal 5c7e + dda: f00502e3 beqz a0,cde <_ZN6Parser10parse_lineEPPcS0_+0xa8> + s = *ps; + dde: 0009b403 ld s0,0(s3) + ret = *s; + de2: 00044783 lbu a5,0(s0) + while (s < es && strchr(WHITESPACE, *s)) + de6: 0e947863 bgeu s0,s1,ed6 <_ZN6Parser10parse_lineEPPcS0_+0x2a0> + dea: 00007917 auipc s2,0x7 + dee: 06e90913 addi s2,s2,110 # 7e58 + df2: a021 j dfa <_ZN6Parser10parse_lineEPPcS0_+0x1c4> + s++; + df4: 0405 addi s0,s0,1 + while (s < es && strchr(WHITESPACE, *s)) + df6: 00848963 beq s1,s0,e08 <_ZN6Parser10parse_lineEPPcS0_+0x1d2> + dfa: 00044583 lbu a1,0(s0) + dfe: 00093503 ld a0,0(s2) + e02: 67d040ef jal 5c7e + e06: f57d bnez a0,df4 <_ZN6Parser10parse_lineEPPcS0_+0x1be> + ret = *s; + e08: 00044783 lbu a5,0(s0) + switch (*s) + e0c: 02900713 li a4,41 + e10: 04f76b63 bltu a4,a5,e66 <_ZN6Parser10parse_lineEPPcS0_+0x230> + e14: 02700713 li a4,39 + e18: 08f76f63 bltu a4,a5,eb6 <_ZN6Parser10parse_lineEPPcS0_+0x280> + e1c: efd9 bnez a5,eba <_ZN6Parser10parse_lineEPPcS0_+0x284> + while (s < es && strchr(WHITESPACE, *s)) + e1e: 00007917 auipc s2,0x7 + e22: 03a90913 addi s2,s2,58 # 7e58 + e26: 00946663 bltu s0,s1,e32 <_ZN6Parser10parse_lineEPPcS0_+0x1fc> + e2a: a819 j e40 <_ZN6Parser10parse_lineEPPcS0_+0x20a> + s++; + e2c: 0405 addi s0,s0,1 + while (s < es && strchr(WHITESPACE, *s)) + e2e: 06848c63 beq s1,s0,ea6 <_ZN6Parser10parse_lineEPPcS0_+0x270> + e32: 00044583 lbu a1,0(s0) + e36: 00093503 ld a0,0(s2) + e3a: 645040ef jal 5c7e + e3e: f57d bnez a0,e2c <_ZN6Parser10parse_lineEPPcS0_+0x1f6> + *ps = s; + e40: 0089b023 sd s0,0(s3) + cmd = new ListCommand(cmd, parse_line(ps, es)); + e44: 4561 li a0,24 + e46: 14a050ef jal 5f90 <_Znwm> + e4a: 842a mv s0,a0 + e4c: 85a6 mv a1,s1 + e4e: 854e mv a0,s3 + e50: de7ff0ef jal c36 <_ZN6Parser10parse_lineEPPcS0_> + ListCommand(Command *l, Command *r) : left(l), right(r) {} + e54: 00007797 auipc a5,0x7 + e58: fc478793 addi a5,a5,-60 # 7e18 <_ZTV11ListCommand+0x10> + e5c: e01c sd a5,0(s0) + e5e: 01443423 sd s4,8(s0) + e62: e808 sd a0,16(s0) + e64: bdb5 j ce0 <_ZN6Parser10parse_lineEPPcS0_+0xaa> + switch (*s) + e66: 03e00713 li a4,62 + e6a: 04e78063 beq a5,a4,eaa <_ZN6Parser10parse_lineEPPcS0_+0x274> + e6e: 04f76c63 bltu a4,a5,ec6 <_ZN6Parser10parse_lineEPPcS0_+0x290> + e72: fc57879b addiw a5,a5,-59 + e76: 0ff7f793 zext.b a5,a5 + e7a: 4705 li a4,1 + e7c: 02f77d63 bgeu a4,a5,eb6 <_ZN6Parser10parse_lineEPPcS0_+0x280> + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + e80: fc9470e3 bgeu s0,s1,e40 <_ZN6Parser10parse_lineEPPcS0_+0x20a> + e84: 00044583 lbu a1,0(s0) + e88: 00093503 ld a0,0(s2) + e8c: 5f3040ef jal 5c7e + e90: f559 bnez a0,e1e <_ZN6Parser10parse_lineEPPcS0_+0x1e8> + e92: 00044583 lbu a1,0(s0) + e96: 00893503 ld a0,8(s2) + e9a: 5e5040ef jal 5c7e + e9e: f141 bnez a0,e1e <_ZN6Parser10parse_lineEPPcS0_+0x1e8> + s++; + ea0: 0405 addi s0,s0,1 + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + ea2: fe8491e3 bne s1,s0,e84 <_ZN6Parser10parse_lineEPPcS0_+0x24e> + ea6: 8426 mv s0,s1 + ea8: bf61 j e40 <_ZN6Parser10parse_lineEPPcS0_+0x20a> + if (*s == '>') + eaa: 00144703 lbu a4,1(s0) + eae: 03e00793 li a5,62 + eb2: 02f70063 beq a4,a5,ed2 <_ZN6Parser10parse_lineEPPcS0_+0x29c> + s++; + eb6: 0405 addi s0,s0,1 + eb8: b79d j e1e <_ZN6Parser10parse_lineEPPcS0_+0x1e8> + switch (*s) + eba: 02600713 li a4,38 + ebe: fce791e3 bne a5,a4,e80 <_ZN6Parser10parse_lineEPPcS0_+0x24a> + s++; + ec2: 0405 addi s0,s0,1 + ec4: bfa9 j e1e <_ZN6Parser10parse_lineEPPcS0_+0x1e8> + switch (*s) + ec6: 07c00713 li a4,124 + eca: fae79be3 bne a5,a4,e80 <_ZN6Parser10parse_lineEPPcS0_+0x24a> + s++; + ece: 0405 addi s0,s0,1 + ed0: b7b9 j e1e <_ZN6Parser10parse_lineEPPcS0_+0x1e8> + s++; + ed2: 0409 addi s0,s0,2 + ed4: b7a9 j e1e <_ZN6Parser10parse_lineEPPcS0_+0x1e8> + switch (*s) + ed6: 03c00713 li a4,60 + eda: 02f76463 bltu a4,a5,f02 <_ZN6Parser10parse_lineEPPcS0_+0x2cc> + ede: 03a00713 li a4,58 + ee2: fcf76ae3 bltu a4,a5,eb6 <_ZN6Parser10parse_lineEPPcS0_+0x280> + ee6: dfa9 beqz a5,e40 <_ZN6Parser10parse_lineEPPcS0_+0x20a> + ee8: 02600713 li a4,38 + eec: fce785e3 beq a5,a4,eb6 <_ZN6Parser10parse_lineEPPcS0_+0x280> + ef0: fd87879b addiw a5,a5,-40 + ef4: 0ff7f793 zext.b a5,a5 + ef8: 4705 li a4,1 + efa: f4f763e3 bltu a4,a5,e40 <_ZN6Parser10parse_lineEPPcS0_+0x20a> + s++; + efe: 0405 addi s0,s0,1 + f00: bf39 j e1e <_ZN6Parser10parse_lineEPPcS0_+0x1e8> + switch (*s) + f02: 03e00713 li a4,62 + f06: fae782e3 beq a5,a4,eaa <_ZN6Parser10parse_lineEPPcS0_+0x274> + f0a: 07c00713 li a4,124 + f0e: f2e799e3 bne a5,a4,e40 <_ZN6Parser10parse_lineEPPcS0_+0x20a> + f12: b755 j eb6 <_ZN6Parser10parse_lineEPPcS0_+0x280> + +0000000000000f14
: + +int main() +{ + f14: 7159 addi sp,sp,-112 + // close(fd); + // break; + // } + // } + + printf("\n[Lume Shell] Initialized! \n"); + f16: 00005517 auipc a0,0x5 + f1a: 18a50513 addi a0,a0,394 # 60a0 <_GLOBAL__sub_I__ZSt3cin+0xf8> +{ + f1e: e8ca sd s2,80(sp) + f20: e4ce sd s3,72(sp) + f22: e0d2 sd s4,64(sp) + f24: fc56 sd s5,56(sp) + f26: f85a sd s6,48(sp) + f28: f45e sd s7,40(sp) + f2a: f062 sd s8,32(sp) + f2c: ec66 sd s9,24(sp) + f2e: f486 sd ra,104(sp) + f30: f0a2 sd s0,96(sp) + f32: eca6 sd s1,88(sp) + f34: e86a sd s10,16(sp) + f36: 00008917 auipc s2,0x8 + f3a: cea90913 addi s2,s2,-790 # 8c20 <_ZZ4mainE3buf> + printf("\n[Lume Shell] Initialized! \n"); + f3e: 18d030ef jal 48ca + + while (getcmd(buf, sizeof(buf)) >= 0) + { + if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' ') + f42: 06300a13 li s4,99 + if (pid == -1) + f46: 5afd li s5,-1 + Command *cmd = parse_line(&s, es); + f48: 00810b13 addi s6,sp,8 + printf("leftovers: %s\n", s); + f4c: 00005c97 auipc s9,0x5 + f50: 184c8c93 addi s9,s9,388 # 60d0 <_GLOBAL__sub_I__ZSt3cin+0x128> + f54: 00007997 auipc s3,0x7 + f58: f0498993 addi s3,s3,-252 # 7e58 + printf("shell panic: %s\n", s); + f5c: 00005c17 auipc s8,0x5 + f60: 0a4c0c13 addi s8,s8,164 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + f64: 00005b97 auipc s7,0x5 + f68: 0a4b8b93 addi s7,s7,164 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + while (getcmd(buf, sizeof(buf)) >= 0) + f6c: a021 j f74 + cmd->run(); + delete cmd; + } + exit(0); + } + wait(0); + f6e: 4501 li a0,0 + f70: 140000ef jal 10b0 + while (getcmd(buf, sizeof(buf)) >= 0) + f74: 06400593 li a1,100 + f78: 854a mv a0,s2 + f7a: 8e2ff0ef jal 5c <_Z6getcmdPci> + f7e: 0e054b63 bltz a0,1074 + if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' ') + f82: 00094783 lbu a5,0(s2) + f86: 01479863 bne a5,s4,f96 + f8a: 00194703 lbu a4,1(s2) + f8e: 06400793 li a5,100 + f92: 08f70e63 beq a4,a5,102e + int pid = fork(); + f96: 112000ef jal 10a8 + if (pid == -1) + f9a: 09550263 beq a0,s5,101e + if (fork_or_panic() == 0) + f9e: f961 bnez a0,f6e + char *es = s + strlen(s); + fa0: 854a mv a0,s2 + fa2: e44a sd s2,8(sp) + fa4: 385040ef jal 5b28 + fa8: 00a904b3 add s1,s2,a0 + Command *cmd = parse_line(&s, es); + fac: 85a6 mv a1,s1 + fae: 855a mv a0,s6 + fb0: c87ff0ef jal c36 <_ZN6Parser10parse_lineEPPcS0_> + char *s = *ps; + fb4: 6422 ld s0,8(sp) + Command *cmd = parse_line(&s, es); + fb6: 8d2a mv s10,a0 + while (s < es && strchr(WHITESPACE, *s)) + fb8: 00946663 bltu s0,s1,fc4 + fbc: a819 j fd2 + s++; + fbe: 0405 addi s0,s0,1 + while (s < es && strchr(WHITESPACE, *s)) + fc0: 04848363 beq s1,s0,1006 + fc4: 00044583 lbu a1,0(s0) + fc8: 0009b503 ld a0,0(s3) + fcc: 4b3040ef jal 5c7e + fd0: f57d bnez a0,fbe + *ps = s; + fd2: e422 sd s0,8(sp) + return *s && strchr(toks, *s); + fd4: 00044583 lbu a1,0(s0) + fd8: e99d bnez a1,100e + if (s != es) + fda: 00848663 beq s1,s0,fe6 + printf("leftovers: %s\n", s); + fde: 85a2 mv a1,s0 + fe0: 8566 mv a0,s9 + fe2: 0e9030ef jal 48ca + if (cmd) + fe6: 000d0c63 beqz s10,ffe + cmd->run(); + fea: 000d3783 ld a5,0(s10) + fee: 856a mv a0,s10 + ff0: 6b9c ld a5,16(a5) + ff2: 9782 jalr a5 + delete cmd; + ff4: 000d3783 ld a5,0(s10) + ff8: 856a mv a0,s10 + ffa: 679c ld a5,8(a5) + ffc: 9782 jalr a5 + exit(0); + ffe: 4501 li a0,0 + 1000: 3de040ef jal 53de + 1004: b7ad j f6e + return *s && strchr(toks, *s); + 1006: 0004c583 lbu a1,0(s1) + *ps = s; + 100a: e426 sd s1,8(sp) + return *s && strchr(toks, *s); + 100c: dde9 beqz a1,fe6 + 100e: 00005517 auipc a0,0x5 + 1012: 00a50513 addi a0,a0,10 # 6018 <_GLOBAL__sub_I__ZSt3cin+0x70> + 1016: 469040ef jal 5c7e + if (s != es) + 101a: 6422 ld s0,8(sp) + 101c: bf7d j fda + printf("shell panic: %s\n", s); + 101e: 85e2 mv a1,s8 + 1020: 855e mv a0,s7 + 1022: 0a9030ef jal 48ca + exit(1); + 1026: 4505 li a0,1 + 1028: 3b6040ef jal 53de + return pid; + 102c: b789 j f6e + if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' ') + 102e: 00294703 lbu a4,2(s2) + 1032: 02000793 li a5,32 + 1036: f6f710e3 bne a4,a5,f96 + buf[strlen(buf) - 1] = 0; // chop \n + 103a: 00008517 auipc a0,0x8 + 103e: be650513 addi a0,a0,-1050 # 8c20 <_ZZ4mainE3buf> + 1042: 2e7040ef jal 5b28 + 1046: 00a907b3 add a5,s2,a0 + if (chdir(buf + 3) < 0) + 104a: 00008517 auipc a0,0x8 + 104e: bd950513 addi a0,a0,-1063 # 8c23 <_ZZ4mainE3buf+0x3> + buf[strlen(buf) - 1] = 0; // chop \n + 1052: fe078fa3 sb zero,-1(a5) + if (chdir(buf + 3) < 0) + 1056: 0c2000ef jal 1118 + 105a: f0055de3 bgez a0,f74 + printf("cannot cd %s\n", buf + 3); + 105e: 00008597 auipc a1,0x8 + 1062: bc558593 addi a1,a1,-1083 # 8c23 <_ZZ4mainE3buf+0x3> + 1066: 00005517 auipc a0,0x5 + 106a: 05a50513 addi a0,a0,90 # 60c0 <_GLOBAL__sub_I__ZSt3cin+0x118> + 106e: 05d030ef jal 48ca + 1072: b709 j f74 + } + return 0; + 1074: 70a6 ld ra,104(sp) + 1076: 7406 ld s0,96(sp) + 1078: 64e6 ld s1,88(sp) + 107a: 6946 ld s2,80(sp) + 107c: 69a6 ld s3,72(sp) + 107e: 6a06 ld s4,64(sp) + 1080: 7ae2 ld s5,56(sp) + 1082: 7b42 ld s6,48(sp) + 1084: 7ba2 ld s7,40(sp) + 1086: 7c02 ld s8,32(sp) + 1088: 6ce2 ld s9,24(sp) + 108a: 6d42 ld s10,16(sp) + 108c: 4501 li a0,0 + 108e: 6165 addi sp,sp,112 + 1090: 8082 ret + +0000000000001092 <_start>: +.section .text +.global _start + +_start: + li a0, 0 + 1092: 4501 li a0,0 + li a1, 0 + 1094: 4581 li a1,0 + + call main + 1096: e7fff0ef jal f14
+ + call exit + 109a: 344040ef jal 53de + + 109e: a001 j 109e <_start+0xc> + +00000000000010a0 : + name: \ + li a7, SYS_ ## sysname; \ + ecall; \ + ret + +SYSCALL_NAME(sys_exit, exit) + 10a0: 488d li a7,3 + 10a2: 00000073 ecall + 10a6: 8082 ret + +00000000000010a8 : + +SYSCALL(fork) + 10a8: 4889 li a7,2 + 10aa: 00000073 ecall + 10ae: 8082 ret + +00000000000010b0 : +SYSCALL(wait) + 10b0: 4891 li a7,4 + 10b2: 00000073 ecall + 10b6: 8082 ret + +00000000000010b8 : +SYSCALL(pipe) + 10b8: 4895 li a7,5 + 10ba: 00000073 ecall + 10be: 8082 ret + +00000000000010c0 : +SYSCALL(read) + 10c0: 4899 li a7,6 + 10c2: 00000073 ecall + 10c6: 8082 ret + +00000000000010c8 : +SYSCALL(write) + 10c8: 48c5 li a7,17 + 10ca: 00000073 ecall + 10ce: 8082 ret + +00000000000010d0 : +SYSCALL(close) + 10d0: 48d9 li a7,22 + 10d2: 00000073 ecall + 10d6: 8082 ret + +00000000000010d8 : +SYSCALL(kill) + 10d8: 489d li a7,7 + 10da: 00000073 ecall + 10de: 8082 ret + +00000000000010e0 : +SYSCALL(exec) + 10e0: 48a1 li a7,8 + 10e2: 00000073 ecall + 10e6: 8082 ret + +00000000000010e8 : +SYSCALL(open) + 10e8: 48c1 li a7,16 + 10ea: 00000073 ecall + 10ee: 8082 ret + +00000000000010f0 : +SYSCALL(mknod) + 10f0: 48c9 li a7,18 + 10f2: 00000073 ecall + 10f6: 8082 ret + +00000000000010f8 : +SYSCALL(unlink) + 10f8: 48cd li a7,19 + 10fa: 00000073 ecall + 10fe: 8082 ret + +0000000000001100 : +SYSCALL(fstat) + 1100: 48a5 li a7,9 + 1102: 00000073 ecall + 1106: 8082 ret + +0000000000001108 : +SYSCALL(link) + 1108: 48d1 li a7,20 + 110a: 00000073 ecall + 110e: 8082 ret + +0000000000001110 : +SYSCALL(mkdir) + 1110: 48d5 li a7,21 + 1112: 00000073 ecall + 1116: 8082 ret + +0000000000001118 : +SYSCALL(chdir) + 1118: 48a9 li a7,10 + 111a: 00000073 ecall + 111e: 8082 ret + +0000000000001120 : +SYSCALL(dup) + 1120: 48ad li a7,11 + 1122: 00000073 ecall + 1126: 8082 ret + +0000000000001128 : +SYSCALL(getpid) + 1128: 48b1 li a7,12 + 112a: 00000073 ecall + 112e: 8082 ret + +0000000000001130 : +SYSCALL(sbrk) + 1130: 48b5 li a7,13 + 1132: 00000073 ecall + 1136: 8082 ret + +0000000000001138 : +SYSCALL(sleep) + 1138: 48b9 li a7,14 + 113a: 00000073 ecall + 113e: 8082 ret + +0000000000001140 : +SYSCALL(uptime) + 1140: 48bd li a7,15 + 1142: 00000073 ecall + 1146: 8082 ret + +0000000000001148 : +SYSCALL(putc) + 1148: 4885 li a7,1 + 114a: 00000073 ecall + 114e: 8082 ret + +0000000000001150 : +SYSCALL(disk_test) + 1150: 48dd li a7,23 + 1152: 00000073 ecall + 1156: 8082 ret + +0000000000001158 : + 1158: 48e1 li a7,24 + 115a: 00000073 ecall + 115e: 8082 ret + +0000000000001160 : + 1160: 45dc lw a5,12(a1) + 1162: 4598 lw a4,8(a1) + 1164: 9fb1 addw a5,a5,a2 + 1166: c5dc sw a5,12(a1) + 1168: 0007069b sext.w a3,a4 + 116c: 00e65463 bge a2,a4,1174 + 1170: 0006069b sext.w a3,a2 + 1174: c685 beqz a3,119c + 1176: 619c ld a5,0(a1) + 1178: 00a78e63 beq a5,a0,1194 + 117c: 00d50633 add a2,a0,a3 + 1180: 00054703 lbu a4,0(a0) + 1184: 0505 addi a0,a0,1 + 1186: 0785 addi a5,a5,1 + 1188: fee78fa3 sb a4,-1(a5) + 118c: fec56ae3 bltu a0,a2,1180 + 1190: 6188 ld a0,0(a1) + 1192: 4598 lw a4,8(a1) + 1194: 9f15 subw a4,a4,a3 + 1196: 9536 add a0,a0,a3 + 1198: e188 sd a0,0(a1) + 119a: c598 sw a4,8(a1) + 119c: 1ff00793 li a5,511 + 11a0: 00e7d463 bge a5,a4,11a8 + 11a4: 6188 ld a0,0(a1) + 11a6: 8082 ret + 11a8: 01058513 addi a0,a1,16 + 11ac: 8082 ret + +00000000000011ae : + 11ae: 45dc lw a5,12(a1) + 11b0: 01058513 addi a0,a1,16 + 11b4: 9fb1 addw a5,a5,a2 + 11b6: c5dc sw a5,12(a1) + 11b8: 8082 ret + +00000000000011ba : + 11ba: e20508d3 fmv.x.d a7,fa0 + 11be: 82aa mv t0,a0 + 11c0: 4348d813 srai a6,a7,0x34 + 11c4: 8ec6 mv t4,a7 + 11c6: 7ff87813 andi a6,a6,2047 + 11ca: 8346 mv t1,a7 + 11cc: 03f8d513 srli a0,a7,0x3f + 11d0: 0008d663 bgez a7,11dc + 11d4: 22a517d3 fneg.d fa5,fa0 + 11d8: e20788d3 fmv.x.d a7,fa5 + 11dc: 7ff00e13 li t3,2047 + 11e0: 35c80663 beq a6,t3,152c + 11e4: 1101 addi sp,sp,-32 + 11e6: 14080363 beqz a6,132c + 11ea: c018081b addiw a6,a6,-1023 + 11ee: ec22 sd s0,24(sp) + 11f0: 02081313 slli t1,a6,0x20 + 11f4: 66034d63 bltz t1,186e + 11f8: 4d100313 li t1,1233 + 11fc: 0303033b mulw t1,t1,a6 + 1200: 4849 li a6,18 + 1202: 40c3531b sraiw t1,t1,0xc + 1206: 0013039b addiw t2,t1,1 + 120a: 4078083b subw a6,a6,t2 + 120e: 4359 li t1,22 + 1210: 17036163 bltu t1,a6,1372 + 1214: 00005317 auipc t1,0x5 + 1218: 21430313 addi t1,t1,532 # 6428 + 121c: 080e slli a6,a6,0x3 + 121e: 981a add a6,a6,t1 + 1220: 00083e03 ld t3,0(a6) + 1224: 00083607 fld fa2,0(a6) + 1228: f20887d3 fmv.d.x fa5,a7 + 122c: f8000837 lui a6,0xf8000 + 1230: 01187333 and t1,a6,a7 + 1234: 01c87833 and a6,a6,t3 + 1238: 12f676d3 fmul.d fa3,fa2,fa5 + 123c: f20807d3 fmv.d.x fa5,a6 + 1240: f2030753 fmv.d.x fa4,t1 + 1244: f20305d3 fmv.d.x fa1,t1 + 1248: 0af67653 fsub.d fa2,fa2,fa5 + 124c: f20887d3 fmv.d.x fa5,a7 + 1250: 0ae7f753 fsub.d fa4,fa5,fa4 + 1254: f20807d3 fmv.d.x fa5,a6 + 1258: 6ab7f7c7 fmsub.d fa5,fa5,fa1,fa3 + 125c: 7ab677c3 fmadd.d fa5,fa2,fa1,fa5 + 1260: f20805d3 fmv.d.x fa1,a6 + 1264: 7ab777c3 fmadd.d fa5,fa4,fa1,fa5 + 1268: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 + 126c: 02d777d3 fadd.d fa5,fa4,fa3 + 1270: 3782e837 lui a6,0x3782e + 1274: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37824d0f> + 1278: 0832 slli a6,a6,0xc + 127a: 9d980813 addi a6,a6,-1575 + 127e: 084a slli a6,a6,0x12 + 1280: 187d addi a6,a6,-1 + 1282: c22798d3 fcvt.l.d a7,fa5,rtz + 1286: 0ad7f6d3 fsub.d fa3,fa5,fa3 + 128a: 00070e1b sext.w t3,a4 + 128e: d228f653 fcvt.d.l fa2,a7 + 1292: 0ac7f5d3 fsub.d fa1,fa5,fa2 + 1296: 0ad77753 fsub.d fa4,fa4,fa3 + 129a: 0af5f6d3 fsub.d fa3,fa1,fa5 + 129e: 0ad5f553 fsub.d fa0,fa1,fa3 + 12a2: 02d67653 fadd.d fa2,fa2,fa3 + 12a6: 0aa7f7d3 fsub.d fa5,fa5,fa0 + 12aa: 0ac7f7d3 fsub.d fa5,fa5,fa2 + 12ae: 02b7f7d3 fadd.d fa5,fa5,fa1 + 12b2: 02e7f7d3 fadd.d fa5,fa5,fa4 + 12b6: c2279fd3 fcvt.l.d t6,fa5,rtz + 12ba: 9fc6 add t6,t6,a7 + 12bc: 19f87063 bgeu a6,t6,143c + 12c0: 2385 addiw t2,t2,1 + 12c2: 300e4363 bltz t3,15c8 + 12c6: 00e3833b addw t1,t2,a4 + 12ca: 475d li a4,23 + 12cc: 30677663 bgeu a4,t1,15d8 + 12d0: 577d li a4,-1 + 12d2: 9301 srli a4,a4,0x20 + 12d4: 43f75863 bge a4,t6,1704 + 12d8: 07d00313 li t1,125 + 12dc: 877e mv a4,t6 + 12de: 4e01 li t3,0 + 12e0: 3e800813 li a6,1000 + 12e4: 130e slli t1,t1,0x23 + 12e6: a039 j 12f4 + 12e8: 030747b3 div a5,a4,a6 + 12ec: 4e05 li t3,1 + 12ee: 40674c63 blt a4,t1,1706 + 12f2: 873e mv a4,a5 + 12f4: 030768b3 rem a7,a4,a6 + 12f8: fe0888e3 beqz a7,12e8 + 12fc: 400e0163 beqz t3,16fe + 1300: 8fbe mv t6,a5 + 1302: 05f5e7b7 lui a5,0x5f5e + 1306: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5533f> + 130a: 04060413 addi s0,a2,64 + 130e: 03860613 addi a2,a2,56 + 1312: 15f7c863 blt a5,t6,1462 + 1316: 000f871b sext.w a4,t6 + 131a: 20070463 beqz a4,1522 + 131e: 4f01 li t5,0 + 1320: 4f81 li t6,0 + 1322: 00007e97 auipc t4,0x7 + 1326: b46e8e93 addi t4,t4,-1210 # 7e68 + 132a: aaa9 j 1484 + 132c: 0306 slli t1,t1,0x1 + 132e: 3e030e63 beqz t1,172a + 1332: 4305 li t1,1 + 1334: ec22 sd s0,24(sp) + 1336: 00ce9e13 slli t3,t4,0xc + 133a: 134e slli t1,t1,0x33 + 133c: 520e4063 bltz t3,185c + 1340: 40135313 srai t1,t1,0x1 + 1344: 01d37e33 and t3,t1,t4 + 1348: 8f42 mv t5,a6 + 134a: 387d addiw a6,a6,-1 + 134c: fe0e0ae3 beqz t3,1340 + 1350: 26900313 li t1,617 + 1354: c00f081b addiw a6,t5,-1024 + 1358: 0268083b mulw a6,a6,t1 + 135c: 41f8531b sraiw t1,a6,0x1f + 1360: 0153531b srliw t1,t1,0x15 + 1364: 0103033b addw t1,t1,a6 + 1368: 40b3539b sraiw t2,t1,0xb + 136c: 4849 li a6,18 + 136e: 4078083b subw a6,a6,t2 + 1372: 41f8531b sraiw t1,a6,0x1f + 1376: 00684eb3 xor t4,a6,t1 + 137a: 406e8f3b subw t5,t4,t1 + 137e: 2c900313 li t1,713 + 1382: 03e3033b mulw t1,t1,t5 + 1386: 4e35 li t3,13 + 1388: 8efa mv t4,t5 + 138a: 40e35f9b sraiw t6,t1,0xe + 138e: 837e mv t1,t6 + 1390: 23fe4363 blt t3,t6,15b6 + 1394: 5e25 li t3,-23 + 1396: 026e0e3b mulw t3,t3,t1 + 139a: 01de0ebb addw t4,t3,t4 + 139e: 22084f63 bltz a6,15dc + 13a2: f2000753 fmv.d.x fa4,zero + 13a6: 00005e17 auipc t3,0x5 + 13aa: 082e0e13 addi t3,t3,130 # 6428 + 13ae: 380e9e63 bnez t4,174a + 13b2: f20887d3 fmv.d.x fa5,a7 + 13b6: fff30f1b addiw t5,t1,-1 + 13ba: 0f0e slli t5,t5,0x3 + 13bc: 02f777d3 fadd.d fa5,fa4,fa5 + 13c0: 030e slli t1,t1,0x3 + 13c2: 9f72 add t5,t5,t3 + 13c4: 9e1a add t3,t3,t1 + 13c6: 2e0e3e03 ld t3,736(t3) + 13ca: 2e8f3587 fld fa1,744(t5) + 13ce: f8000837 lui a6,0xf8000 + 13d2: e2078ed3 fmv.x.d t4,fa5 + 13d6: 12b7f6d3 fmul.d fa3,fa5,fa1 + 13da: f2088653 fmv.d.x fa2,a7 + 13de: 01d87333 and t1,a6,t4 + 13e2: 01c87833 and a6,a6,t3 + 13e6: f20807d3 fmv.d.x fa5,a6 + 13ea: f2030053 fmv.d.x ft0,t1 + 13ee: 0af5f553 fsub.d fa0,fa1,fa5 + 13f2: f20e87d3 fmv.d.x fa5,t4 + 13f6: 0ac7f0d3 fsub.d ft1,fa5,fa2 + 13fa: f20807d3 fmv.d.x fa5,a6 + 13fe: f2030653 fmv.d.x fa2,t1 + 1402: 6ac7f647 fmsub.d fa2,fa5,fa2,fa3 + 1406: f20e87d3 fmv.d.x fa5,t4 + 140a: 0a177753 fsub.d fa4,fa4,ft1 + 140e: f20300d3 fmv.d.x ft1,t1 + 1412: 0a07f7d3 fsub.d fa5,fa5,ft0 + 1416: 350f3007 fld ft0,848(t5) + 141a: 62157643 fmadd.d fa2,fa0,ft1,fa2 + 141e: 12b77753 fmul.d fa4,fa4,fa1 + 1422: f20805d3 fmv.d.x fa1,a6 + 1426: 62b7f643 fmadd.d fa2,fa5,fa1,fa2 + 142a: f20e85d3 fmv.d.x fa1,t4 + 142e: 7205f743 fmadd.d fa4,fa1,ft0,fa4 + 1432: 62a7f7c3 fmadd.d fa5,fa5,fa0,fa2 + 1436: 02e7f753 fadd.d fa4,fa5,fa4 + 143a: bd0d j 126c + 143c: 00e3833b addw t1,t2,a4 + 1440: 2a0e4663 bltz t3,16ec + 1444: 475d li a4,23 + 1446: 10677663 bgeu a4,t1,1552 + 144a: e80f93e3 bnez t6,12d0 + 144e: 05f5e7b7 lui a5,0x5f5e + 1452: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5533f> + 1456: 04060413 addi s0,a2,64 + 145a: 03860613 addi a2,a2,56 + 145e: ebf7dce3 bge a5,t6,1316 + 1462: 4f01 li t5,0 + 1464: 00007e97 auipc t4,0x7 + 1468: a04e8e93 addi t4,t4,-1532 # 7e68 + 146c: 05f5e7b7 lui a5,0x5f5e + 1470: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f55340> + 1474: 02ffe833 rem a6,t6,a5 + 1478: 02ffcfb3 div t6,t6,a5 + 147c: 0008071b sext.w a4,a6 + 1480: 0a080463 beqz a6,1528 + 1484: 8822 mv a6,s0 + 1486: 06400893 li a7,100 + 148a: 06300e13 li t3,99 + 148e: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff723e> + 1490: 0007031b sext.w t1,a4 + 1494: 031777bb remuw a5,a4,a7 + 1498: 2785 addiw a5,a5,1 + 149a: 0017979b slliw a5,a5,0x1 + 149e: 1782 slli a5,a5,0x20 + 14a0: 9381 srli a5,a5,0x20 + 14a2: 97f6 add a5,a5,t4 + 14a4: 0007d783 lhu a5,0(a5) + 14a8: 0317573b divuw a4,a4,a7 + 14ac: 00f81023 sh a5,0(a6) + 14b0: fc6e6fe3 bltu t3,t1,148e + 14b4: 008f0f3b addw t5,t5,s0 + 14b8: 410f0f3b subw t5,t5,a6 + 14bc: 020f8f63 beqz t6,14fa + 14c0: 87c2 mv a5,a6 + 14c2: 03000713 li a4,48 + 14c6: 04c80c63 beq a6,a2,151e + 14ca: 17fd addi a5,a5,-1 + 14cc: 00e78023 sb a4,0(a5) + 14d0: fec79de3 bne a5,a2,14ca + 14d4: 408807b3 sub a5,a6,s0 + 14d8: 00ff07bb addw a5,t5,a5 + 14dc: 1461 addi s0,s0,-8 + 14de: 00878f1b addiw t5,a5,8 + 14e2: 05f5e7b7 lui a5,0x5f5e + 14e6: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5533f> + 14ea: ff840613 addi a2,s0,-8 + 14ee: f7f7cfe3 blt a5,t6,146c + 14f2: 000f871b sext.w a4,t6 + 14f6: 4f81 li t6,0 + 14f8: b771 j 1484 + 14fa: 020f0563 beqz t5,1524 + 14fe: 00084703 lbu a4,0(a6) + 1502: 03000793 li a5,48 + 1506: 22f70f63 beq a4,a5,1744 + 150a: 2f01 sext.w t5,t5 + 150c: 0076a023 sw t2,0(a3) + 1510: 6462 ld s0,24(sp) + 1512: 0102b023 sd a6,0(t0) + 1516: 01e5a023 sw t5,0(a1) + 151a: 6105 addi sp,sp,32 + 151c: 8082 ret + 151e: 8442 mv s0,a6 + 1520: b7c9 j 14e2 + 1522: 8822 mv a6,s0 + 1524: 4f01 li t5,0 + 1526: b7dd j 150c + 1528: 8822 mv a6,s0 + 152a: bf59 j 14c0 + 152c: 0eb2 slli t4,t4,0xc + 152e: 00005797 auipc a5,0x5 + 1532: bca78793 addi a5,a5,-1078 # 60f8 <_GLOBAL__sub_I__ZSt3cin+0x150> + 1536: 000e8663 beqz t4,1542 + 153a: 00005797 auipc a5,0x5 + 153e: bb678793 addi a5,a5,-1098 # 60f0 <_GLOBAL__sub_I__ZSt3cin+0x148> + 1542: 00f2b023 sd a5,0(t0) + 1546: 679d lui a5,0x7 + 1548: c29c sw a5,0(a3) + 154a: 4f0d li t5,3 + 154c: 01e5a023 sw t5,0(a1) + 1550: 8082 ret + 1552: 3b9ad737 lui a4,0x3b9ad + 1556: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a3c3f> + 155a: 07f76f63 bltu a4,t6,15d8 + 155e: 4805 li a6,1 + 1560: 02081713 slli a4,a6,0x20 + 1564: 01d75893 srli a7,a4,0x1d + 1568: 00005717 auipc a4,0x5 + 156c: 27870713 addi a4,a4,632 # 67e0 + 1570: 9746 add a4,a4,a7 + 1572: 4e51 li t3,20 + 1574: a021 j 157c + 1576: 2805 addiw a6,a6,1 + 1578: edc809e3 beq a6,t3,144a + 157c: 00073883 ld a7,0(a4) + 1580: 0721 addi a4,a4,8 + 1582: ff1ffae3 bgeu t6,a7,1576 + 1586: ed0372e3 bgeu t1,a6,144a + 158a: 4068083b subw a6,a6,t1 + 158e: 475d li a4,23 + 1590: eb076de3 bltu a4,a6,144a + 1594: 080e slli a6,a6,0x3 + 1596: 00005717 auipc a4,0x5 + 159a: e9270713 addi a4,a4,-366 # 6428 + 159e: 9742 add a4,a4,a6 + 15a0: 3b873803 ld a6,952(a4) + 15a4: 00185713 srli a4,a6,0x1 + 15a8: 977e add a4,a4,t6 + 15aa: 01176363 bltu a4,a7,15b0 + 15ae: 2385 addiw t2,t2,1 + 15b0: 03075fb3 divu t6,a4,a6 + 15b4: bd59 j 144a + 15b6: 4335 li t1,13 + 15b8: 5e25 li t3,-23 + 15ba: 026e0e3b mulw t3,t3,t1 + 15be: 01de0ebb addw t4,t3,t4 + 15c2: de0850e3 bgez a6,13a2 + 15c6: a819 j 15dc + 15c8: 02571313 slli t1,a4,0x25 + 15cc: 02535313 srli t1,t1,0x25 + 15d0: 0305 addi t1,t1,1 + 15d2: 475d li a4,23 + 15d4: ce676ee3 bltu a4,t1,12d0 + 15d8: 4829 li a6,10 + 15da: b759 j 1560 + 15dc: 260e8663 beqz t4,1848 + 15e0: 00231e13 slli t3,t1,0x2 + 15e4: 41c30e33 sub t3,t1,t3 + 15e8: 0e0e slli t3,t3,0x3 + 15ea: 9e1a add t3,t3,t1 + 15ec: fffe881b addiw a6,t4,-1 + 15f0: 9e7a add t3,t3,t5 + 15f2: 00005e97 auipc t4,0x5 + 15f6: e36e8e93 addi t4,t4,-458 # 6428 + 15fa: 0e0e slli t3,t3,0x3 + 15fc: 080e slli a6,a6,0x3 + 15fe: 9876 add a6,a6,t4 + 1600: 9ef2 add t4,t4,t3 + 1602: 0b883607 fld fa2,184(a6) + 1606: f20887d3 fmv.d.x fa5,a7 + 160a: 0b0ebf03 ld t5,176(t4) + 160e: f8000e37 lui t3,0xf8000 + 1612: 011e7eb3 and t4,t3,a7 + 1616: 12f676d3 fmul.d fa3,fa2,fa5 + 161a: 01ee7e33 and t3,t3,t5 + 161e: f20e07d3 fmv.d.x fa5,t3 + 1622: f20e0753 fmv.d.x fa4,t3 + 1626: f20e8553 fmv.d.x fa0,t4 + 162a: 0af67653 fsub.d fa2,fa2,fa5 + 162e: f20e87d3 fmv.d.x fa5,t4 + 1632: f20e85d3 fmv.d.x fa1,t4 + 1636: 6ae7f7c7 fmsub.d fa5,fa5,fa4,fa3 + 163a: f2088753 fmv.d.x fa4,a7 + 163e: 0ab775d3 fsub.d fa1,fa4,fa1 + 1642: 16883707 fld fa4,360(a6) + 1646: 7aa677c3 fmadd.d fa5,fa2,fa0,fa5 + 164a: f20e0553 fmv.d.x fa0,t3 + 164e: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 + 1652: 7ac5f5c3 fmadd.d fa1,fa1,fa2,fa5 + 1656: f20887d3 fmv.d.x fa5,a7 + 165a: 5af77743 fmadd.d fa4,fa4,fa5,fa1 + 165e: c00f87e3 beqz t6,126c + 1662: 02d777d3 fadd.d fa5,fa4,fa3 + 1666: fff3089b addiw a7,t1,-1 + 166a: 00005817 auipc a6,0x5 + 166e: dbe80813 addi a6,a6,-578 # 6428 + 1672: 030e slli t1,t1,0x3 + 1674: 088e slli a7,a7,0x3 + 1676: 98c2 add a7,a7,a6 + 1678: 981a add a6,a6,t1 + 167a: e2078e53 fmv.x.d t3,fa5 + 167e: 21083e83 ld t4,528(a6) + 1682: f8000837 lui a6,0xf8000 + 1686: 2188b507 fld fa0,536(a7) + 168a: 01c87333 and t1,a6,t3 + 168e: 01d87833 and a6,a6,t4 + 1692: f2080653 fmv.d.x fa2,a6 + 1696: 12f577d3 fmul.d fa5,fa0,fa5 + 169a: 2808b587 fld fa1,640(a7) + 169e: 0ac57053 fsub.d ft0,fa0,fa2 + 16a2: f20e0653 fmv.d.x fa2,t3 + 16a6: 0ad67153 fsub.d ft2,fa2,fa3 + 16aa: f20806d3 fmv.d.x fa3,a6 + 16ae: f2030653 fmv.d.x fa2,t1 + 16b2: 7ac6f0c7 fmsub.d ft1,fa3,fa2,fa5 + 16b6: f20e06d3 fmv.d.x fa3,t3 + 16ba: 0ac6f653 fsub.d fa2,fa3,fa2 + 16be: 22f786d3 fmv.d fa3,fa5 + 16c2: 0a2777d3 fsub.d fa5,fa4,ft2 + 16c6: f2030753 fmv.d.x fa4,t1 + 16ca: 0ae07743 fmadd.d fa4,ft0,fa4,ft1 + 16ce: 12a7f7d3 fmul.d fa5,fa5,fa0 + 16d2: f2080553 fmv.d.x fa0,a6 + 16d6: 72a67743 fmadd.d fa4,fa2,fa0,fa4 + 16da: f20e0553 fmv.d.x fa0,t3 + 16de: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 + 16e2: 72067643 fmadd.d fa2,fa2,ft0,fa4 + 16e6: 02f67753 fadd.d fa4,fa2,fa5 + 16ea: b649 j 126c + 16ec: 02571313 slli t1,a4,0x25 + 16f0: 02535313 srli t1,t1,0x25 + 16f4: 0305 addi t1,t1,1 + 16f6: 475d li a4,23 + 16f8: d46769e3 bltu a4,t1,144a + 16fc: bd99 j 1552 + 16fe: 87fe mv a5,t6 + 1700: 8fbe mv t6,a5 + 1702: b101 j 1302 + 1704: 87fe mv a5,t6 + 1706: 3e800713 li a4,1000 + 170a: 02e7f73b remuw a4,a5,a4 + 170e: 2781 sext.w a5,a5 + 1710: eb01 bnez a4,1720 + 1712: 3e800813 li a6,1000 + 1716: 0307d7bb divuw a5,a5,a6 + 171a: 0307f73b remuw a4,a5,a6 + 171e: df65 beqz a4,1716 + 1720: 02079f93 slli t6,a5,0x20 + 1724: 020fdf93 srli t6,t6,0x20 + 1728: b31d j 144e + 172a: 4785 li a5,1 + 172c: c29c sw a5,0(a3) + 172e: 00c2b023 sd a2,0(t0) + 1732: 03000793 li a5,48 + 1736: 00f60023 sb a5,0(a2) + 173a: 4f05 li t5,1 + 173c: 01e5a023 sw t5,0(a1) + 1740: 6105 addi sp,sp,32 + 1742: 8082 ret + 1744: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff7241> + 1746: 3f7d addiw t5,t5,-1 + 1748: b3d1 j 150c + 174a: e826 sd s1,16(sp) + 174c: e44a sd s2,8(sp) + 174e: 4859 li a6,22 + 1750: 8976 mv s2,t4 + 1752: 11d84363 blt a6,t4,1858 + 1756: 0009049b sext.w s1,s2 + 175a: 00005e17 auipc t3,0x5 + 175e: ccee0e13 addi t3,t3,-818 # 6428 + 1762: 00349813 slli a6,s1,0x3 + 1766: 9872 add a6,a6,t3 + 1768: 00083687 fld fa3,0(a6) + 176c: 00083803 ld a6,0(a6) + 1770: f20887d3 fmv.d.x fa5,a7 + 1774: f8000fb7 lui t6,0xf8000 + 1778: 010ff833 and a6,t6,a6 + 177c: 12f6f553 fmul.d fa0,fa3,fa5 + 1780: f20807d3 fmv.d.x fa5,a6 + 1784: 011ff433 and s0,t6,a7 + 1788: f2040753 fmv.d.x fa4,s0 + 178c: 0af6f6d3 fsub.d fa3,fa3,fa5 + 1790: f20887d3 fmv.d.x fa5,a7 + 1794: f2080653 fmv.d.x fa2,a6 + 1798: 412e8ebb subw t4,t4,s2 + 179c: 0ae7f753 fsub.d fa4,fa5,fa4 + 17a0: f20407d3 fmv.d.x fa5,s0 + 17a4: e20508d3 fmv.x.d a7,fa0 + 17a8: 52c7f7c7 fmsub.d fa5,fa5,fa2,fa0 + 17ac: f2040653 fmv.d.x fa2,s0 + 17b0: 7ac6f7c3 fmadd.d fa5,fa3,fa2,fa5 + 17b4: f2080653 fmv.d.x fa2,a6 + 17b8: 7ac777c3 fmadd.d fa5,fa4,fa2,fa5 + 17bc: 7ad77743 fmadd.d fa4,fa4,fa3,fa5 + 17c0: 080e8963 beqz t4,1852 + 17c4: 02e577d3 fadd.d fa5,fa0,fa4 + 17c8: 0e8e slli t4,t4,0x3 + 17ca: 01de0833 add a6,t3,t4 + 17ce: 00083587 fld fa1,0(a6) + 17d2: 00231893 slli a7,t1,0x2 + 17d6: 411308b3 sub a7,t1,a7 + 17da: 00389813 slli a6,a7,0x3 + 17de: e2078453 fmv.x.d s0,fa5 + 17e2: 12f5f7d3 fmul.d fa5,fa1,fa5 + 17e6: 981a add a6,a6,t1 + 17e8: 987a add a6,a6,t5 + 17ea: 40980833 sub a6,a6,s1 + 17ee: 080e slli a6,a6,0x3 + 17f0: 9872 add a6,a6,t3 + 17f2: 00083e83 ld t4,0(a6) + 17f6: 008ff833 and a6,t6,s0 + 17fa: e20788d3 fmv.x.d a7,fa5 + 17fe: f20806d3 fmv.d.x fa3,a6 + 1802: f20407d3 fmv.d.x fa5,s0 + 1806: 01dfffb3 and t6,t6,t4 + 180a: f20880d3 fmv.d.x ft1,a7 + 180e: 0ad7f653 fsub.d fa2,fa5,fa3 + 1812: f20f87d3 fmv.d.x fa5,t6 + 1816: 64c2 ld s1,16(sp) + 1818: 6922 ld s2,8(sp) + 181a: 0af5f053 fsub.d ft0,fa1,fa5 + 181e: 0ad7f6c7 fmsub.d fa3,fa5,fa3,ft1 + 1822: f20407d3 fmv.d.x fa5,s0 + 1826: 0aa7f7d3 fsub.d fa5,fa5,fa0 + 182a: f2080553 fmv.d.x fa0,a6 + 182e: 6aa076c3 fmadd.d fa3,ft0,fa0,fa3 + 1832: 0af77753 fsub.d fa4,fa4,fa5 + 1836: f20f87d3 fmv.d.x fa5,t6 + 183a: 6af677c3 fmadd.d fa5,fa2,fa5,fa3 + 183e: 7a067643 fmadd.d fa2,fa2,ft0,fa5 + 1842: 62e5f743 fmadd.d fa4,fa1,fa4,fa2 + 1846: b6b5 j 13b2 + 1848: f20886d3 fmv.d.x fa3,a7 + 184c: f2000753 fmv.d.x fa4,zero + 1850: b539 j 165e + 1852: 64c2 ld s1,16(sp) + 1854: 6922 ld s2,8(sp) + 1856: beb1 j 13b2 + 1858: 4959 li s2,22 + 185a: bdf5 j 1756 + 185c: e826 sd s1,16(sp) + 185e: e44a sd s2,8(sp) + 1860: ecc00393 li t2,-308 + 1864: 4eed li t4,27 + 1866: 4335 li t1,13 + 1868: 14600f13 li t5,326 + 186c: b5cd j 174e + 186e: 26900313 li t1,617 + 1872: 0303083b mulw a6,t1,a6 + 1876: 41f8531b sraiw t1,a6,0x1f + 187a: 0153531b srliw t1,t1,0x15 + 187e: 0103033b addw t1,t1,a6 + 1882: 40b3539b sraiw t2,t1,0xb + 1886: 4849 li a6,18 + 1888: 4078083b subw a6,a6,t2 + 188c: b249 j 120e + +000000000000188e <_in_char.part.0>: +static int _in_char(_InContext *ctx) + 188e: 87aa mv a5,a0 + if (ctx->fd == -1) + 1890: 4508 lw a0,8(a0) + 1892: 577d li a4,-1 + 1894: 00e51d63 bne a0,a4,18ae <_in_char.part.0+0x20> + if (ctx->buf[ctx->pos] == '\0') + 1898: 6b94 ld a3,16(a5) + 189a: 6398 ld a4,0(a5) + 189c: 9736 add a4,a4,a3 + 189e: 00074603 lbu a2,0(a4) + 18a2: c60d beqz a2,18cc <_in_char.part.0+0x3e> + return (unsigned char)ctx->buf[ctx->pos++]; + 18a4: 0685 addi a3,a3,1 + 18a6: eb94 sd a3,16(a5) + 18a8: 00074503 lbu a0,0(a4) + 18ac: 8082 ret +static int _in_char(_InContext *ctx) + 18ae: 1101 addi sp,sp,-32 + if (read(ctx->fd, &c, 1) == 1) + 18b0: 4605 li a2,1 + 18b2: 00f10593 addi a1,sp,15 +static int _in_char(_InContext *ctx) + 18b6: ec06 sd ra,24(sp) + if (read(ctx->fd, &c, 1) == 1) + 18b8: 809ff0ef jal 10c0 + 18bc: 4785 li a5,1 + 18be: 00f51963 bne a0,a5,18d0 <_in_char.part.0+0x42> + return (unsigned char)c; + 18c2: 00f14503 lbu a0,15(sp) +} + 18c6: 60e2 ld ra,24(sp) + 18c8: 6105 addi sp,sp,32 + 18ca: 8082 ret + return -1; + 18cc: 557d li a0,-1 +} + 18ce: 8082 ret + return -1; + 18d0: 557d li a0,-1 + 18d2: bfd5 j 18c6 <_in_char.part.0+0x38> + +00000000000018d4 <_skip_space>: +{ + 18d4: 7139 addi sp,sp,-64 + 18d6: f822 sd s0,48(sp) + 18d8: f426 sd s1,40(sp) + 18da: f04a sd s2,32(sp) + 18dc: ec4e sd s3,24(sp) + 18de: e852 sd s4,16(sp) + 18e0: fc06 sd ra,56(sp) + 18e2: 842a mv s0,a0 + ctx->ungotten = -1; + 18e4: 54fd li s1,-1 + if (read(ctx->fd, &c, 1) == 1) + 18e6: 00f10a13 addi s4,sp,15 + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 18ea: 02000913 li s2,32 + 18ee: 4991 li s3,4 + if (ctx->ungotten >= 0) + 18f0: 4c1c lw a5,24(s0) + 18f2: 0407d163 bgez a5,1934 <_skip_space+0x60> + if (ctx->fd == -1) + 18f6: 4408 lw a0,8(s0) + if (read(ctx->fd, &c, 1) == 1) + 18f8: 4605 li a2,1 + 18fa: 85d2 mv a1,s4 + if (ctx->fd == -1) + 18fc: 02951e63 bne a0,s1,1938 <_skip_space+0x64> + if (ctx->buf[ctx->pos] == '\0') + 1900: 6818 ld a4,16(s0) + 1902: 601c ld a5,0(s0) + return (unsigned char)ctx->buf[ctx->pos++]; + 1904: 00170693 addi a3,a4,1 + if (ctx->buf[ctx->pos] == '\0') + 1908: 97ba add a5,a5,a4 + 190a: 0007c703 lbu a4,0(a5) # 7000 + 190e: cb19 beqz a4,1924 <_skip_space+0x50> + return (unsigned char)ctx->buf[ctx->pos++]; + 1910: e814 sd a3,16(s0) + 1912: 0007c783 lbu a5,0(a5) + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 1916: ff77871b addiw a4,a5,-9 + 191a: fd278be3 beq a5,s2,18f0 <_skip_space+0x1c> + 191e: fce9f9e3 bgeu s3,a4,18f0 <_skip_space+0x1c> + ctx->ungotten = c; + 1922: cc1c sw a5,24(s0) +} + 1924: 70e2 ld ra,56(sp) + 1926: 7442 ld s0,48(sp) + 1928: 74a2 ld s1,40(sp) + 192a: 7902 ld s2,32(sp) + 192c: 69e2 ld s3,24(sp) + 192e: 6a42 ld s4,16(sp) + 1930: 6121 addi sp,sp,64 + 1932: 8082 ret + ctx->ungotten = -1; + 1934: cc04 sw s1,24(s0) + return c; + 1936: b7c5 j 1916 <_skip_space+0x42> + if (read(ctx->fd, &c, 1) == 1) + 1938: f88ff0ef jal 10c0 + 193c: 4785 li a5,1 + 193e: fef513e3 bne a0,a5,1924 <_skip_space+0x50> + return (unsigned char)c; + 1942: 00f14783 lbu a5,15(sp) + 1946: bfc1 j 1916 <_skip_space+0x42> + +0000000000001948 <_vscanf_core.constprop.0>: +static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) + 1948: 7155 addi sp,sp,-208 + 194a: e586 sd ra,200(sp) + 194c: e95a sd s6,144(sp) + while (*p) + 194e: 0005c783 lbu a5,0(a1) +static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) + 1952: e432 sd a2,8(sp) + while (*p) + 1954: 68078b63 beqz a5,1fea <_vscanf_core.constprop.0+0x6a2> + 1958: e1a2 sd s0,192(sp) + 195a: fd26 sd s1,184(sp) + 195c: f152 sd s4,160(sp) + 195e: ed56 sd s5,152(sp) + 1960: f4ee sd s11,104(sp) + 1962: 842e mv s0,a1 + 1964: 8daa mv s11,a0 + int assigned = 0; + 1966: 4b01 li s6,0 + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 1968: 02000493 li s1,32 + 196c: 4a91 li s5,4 + if (*p != '%') + 196e: 02500a13 li s4,37 + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 1972: 04978763 beq a5,s1,19c0 <_vscanf_core.constprop.0+0x78> + 1976: ff77869b addiw a3,a5,-9 + 197a: 0ff6f693 zext.b a3,a3 + 197e: 04daf163 bgeu s5,a3,19c0 <_vscanf_core.constprop.0+0x78> + if (*p != '%') + 1982: 07478d63 beq a5,s4,19fc <_vscanf_core.constprop.0+0xb4> + _skip_space(ctx); + 1986: 856e mv a0,s11 + 1988: f4dff0ef jal 18d4 <_skip_space> + if (ctx->ungotten >= 0) + 198c: 018da503 lw a0,24(s11) + 1990: 04055a63 bgez a0,19e4 <_vscanf_core.constprop.0+0x9c> + 1994: 856e mv a0,s11 + 1996: ef9ff0ef jal 188e <_in_char.part.0> + if (c != *p) + 199a: 00044783 lbu a5,0(s0) + 199e: 04a78a63 beq a5,a0,19f2 <_vscanf_core.constprop.0+0xaa> + if (c != -1) + 19a2: 57fd li a5,-1 + 19a4: 00f50463 beq a0,a5,19ac <_vscanf_core.constprop.0+0x64> + ctx->ungotten = c; + 19a8: 00adac23 sw a0,24(s11) + 19ac: 640e ld s0,192(sp) + 19ae: 74ea ld s1,184(sp) + 19b0: 7a0a ld s4,160(sp) + 19b2: 6aea ld s5,152(sp) + 19b4: 7da6 ld s11,104(sp) +} + 19b6: 60ae ld ra,200(sp) + 19b8: 855a mv a0,s6 + 19ba: 6b4a ld s6,144(sp) + 19bc: 6169 addi sp,sp,208 + 19be: 8082 ret + _skip_space(ctx); + 19c0: 856e mv a0,s11 + 19c2: f13ff0ef jal 18d4 <_skip_space> + while (isspace(*p)) + 19c6: 00044783 lbu a5,0(s0) + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 19ca: 4611 li a2,4 + 19cc: ff77869b addiw a3,a5,-9 + 19d0: 0ff6f693 zext.b a3,a3 + 19d4: 00978663 beq a5,s1,19e0 <_vscanf_core.constprop.0+0x98> + 19d8: 00d67463 bgeu a2,a3,19e0 <_vscanf_core.constprop.0+0x98> + while (*p) + 19dc: fbd9 bnez a5,1972 <_vscanf_core.constprop.0+0x2a> + 19de: b7f9 j 19ac <_vscanf_core.constprop.0+0x64> + p++; + 19e0: 0405 addi s0,s0,1 + 19e2: b7d5 j 19c6 <_vscanf_core.constprop.0+0x7e> + ctx->ungotten = -1; + 19e4: 57fd li a5,-1 + 19e6: 00fdac23 sw a5,24(s11) + if (c != *p) + 19ea: 00044783 lbu a5,0(s0) + 19ee: faa79ae3 bne a5,a0,19a2 <_vscanf_core.constprop.0+0x5a> + while (*p) + 19f2: 00144783 lbu a5,1(s0) + p++; + 19f6: 0405 addi s0,s0,1 + while (*p) + 19f8: ffad bnez a5,1972 <_vscanf_core.constprop.0+0x2a> + 19fa: bf4d j 19ac <_vscanf_core.constprop.0+0x64> + 19fc: f94a sd s2,176(sp) + 19fe: f54e sd s3,168(sp) + 1a00: e55e sd s7,136(sp) + 1a02: e162 sd s8,128(sp) + if (*p == '*') + 1a04: 00144583 lbu a1,1(s0) + 1a08: 02a00793 li a5,42 + 1a0c: 22f58d63 beq a1,a5,1c46 <_vscanf_core.constprop.0+0x2fe> + p++; + 1a10: 0405 addi s0,s0,1 + int suppress = 0; + 1a12: 4981 li s3,0 + while (*p >= '0' && *p <= '9') + 1a14: fd05861b addiw a2,a1,-48 + 1a18: 0ff67693 zext.b a3,a2 + 1a1c: 47a5 li a5,9 + 1a1e: 36d7e763 bltu a5,a3,1d8c <_vscanf_core.constprop.0+0x444> + 1a22: 4781 li a5,0 + 1a24: 4825 li a6,9 + 1a26: a019 j 1a2c <_vscanf_core.constprop.0+0xe4> + width = width * 10 + (*p - '0'); + 1a28: 0016979b slliw a5,a3,0x1 + while (*p >= '0' && *p <= '9') + 1a2c: 00144583 lbu a1,1(s0) + width = width * 10 + (*p - '0'); + 1a30: 00f6093b addw s2,a2,a5 + 1a34: 0029169b slliw a3,s2,0x2 + while (*p >= '0' && *p <= '9') + 1a38: fd05861b addiw a2,a1,-48 + 1a3c: 0ff67513 zext.b a0,a2 + width = width * 10 + (*p - '0'); + 1a40: 012686bb addw a3,a3,s2 + p++; + 1a44: 0405 addi s0,s0,1 + while (*p >= '0' && *p <= '9') + 1a46: fea871e3 bgeu a6,a0,1a28 <_vscanf_core.constprop.0+0xe0> + if (*p == 'l') + 1a4a: 06c00693 li a3,108 + p++; + 1a4e: 00140b93 addi s7,s0,1 + if (*p == 'l') + 1a52: 1ed58f63 beq a1,a3,1c50 <_vscanf_core.constprop.0+0x308> + else if (*p == 'h') + 1a56: 06800693 li a3,104 + 1a5a: 2ad58863 beq a1,a3,1d0a <_vscanf_core.constprop.0+0x3c2> + char spec = *p++; + 1a5e: 00044c03 lbu s8,0(s0) + 1a62: 8ba2 mv s7,s0 + int len_mod = 0; + 1a64: ec02 sd zero,24(sp) + char spec = *p++; + 1a66: 06300693 li a3,99 + 1a6a: 001b8413 addi s0,s7,1 + if (!spec) + 1a6e: 2adc0863 beq s8,a3,1d1e <_vscanf_core.constprop.0+0x3d6> + 1a72: 1f86fc63 bgeu a3,s8,1c6a <_vscanf_core.constprop.0+0x322> + 1a76: f9cc069b addiw a3,s8,-100 + 1a7a: 0ff6f693 zext.b a3,a3 + 1a7e: 4651 li a2,20 + 1a80: 0cd66e63 bltu a2,a3,1b5c <_vscanf_core.constprop.0+0x214> + 1a84: 00120637 lui a2,0x120 + 1a88: 4585 li a1,1 + 1a8a: 00d595b3 sll a1,a1,a3 + 1a8e: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x117261> + 1a92: 8e6d and a2,a2,a1 + 1a94: ee69 bnez a2,1b6e <_vscanf_core.constprop.0+0x226> + 1a96: 89b9 andi a1,a1,14 + 1a98: 1e059263 bnez a1,1c7c <_vscanf_core.constprop.0+0x334> + 1a9c: 463d li a2,15 + 1a9e: 0ac69f63 bne a3,a2,1b5c <_vscanf_core.constprop.0+0x214> + _skip_space(ctx); + 1aa2: 856e mv a0,s11 + 1aa4: e31ff0ef jal 18d4 <_skip_space> + char *buf = suppress ? NULL : va_arg(ap, char *); + 1aa8: ec02 sd zero,24(sp) + 1aaa: 00099763 bnez s3,1ab8 <_vscanf_core.constprop.0+0x170> + 1aae: 67a2 ld a5,8(sp) + 1ab0: 6398 ld a4,0(a5) + 1ab2: 07a1 addi a5,a5,8 + 1ab4: e43e sd a5,8(sp) + 1ab6: ec3a sd a4,24(sp) + if (ctx->ungotten >= 0) + 1ab8: 018da503 lw a0,24(s11) + 1abc: 2e055b63 bgez a0,1db2 <_vscanf_core.constprop.0+0x46a> + 1ac0: 856e mv a0,s11 + 1ac2: dcdff0ef jal 188e <_in_char.part.0> + while (c != -1 && !isspace(c)) + 1ac6: 56fd li a3,-1 + 1ac8: 6ad50363 beq a0,a3,216e <_vscanf_core.constprop.0+0x826> + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 1acc: 02000693 li a3,32 + 1ad0: 3ed50963 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> + 1ad4: 46a5 li a3,9 + 1ad6: 3ed50663 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> + 1ada: 46a9 li a3,10 + 1adc: 3ed50363 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> + 1ae0: 46ad li a3,11 + 1ae2: 3ed50063 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> + 1ae6: 46b1 li a3,12 + 1ae8: 3cd50d63 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> + 1aec: 46b5 li a3,13 + 1aee: 3cd50a63 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> + 1af2: 67e2 ld a5,24(sp) + 1af4: fce6 sd s9,120(sp) + 1af6: f8ea sd s10,112(sp) + 1af8: e83e sd a5,16(sp) + 1afa: 4d01 li s10,0 + while (c != -1 && !isspace(c)) + 1afc: 5c7d li s8,-1 + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 1afe: 02000c93 li s9,32 + if (width > 0 && i >= width) + 1b02: 01205463 blez s2,1b0a <_vscanf_core.constprop.0+0x1c2> + 1b06: 052d5563 bge s10,s2,1b50 <_vscanf_core.constprop.0+0x208> + if (!suppress) + 1b0a: 00099563 bnez s3,1b14 <_vscanf_core.constprop.0+0x1cc> + buf[i] = (char)c; + 1b0e: 67c2 ld a5,16(sp) + 1b10: 00a78023 sb a0,0(a5) + if (ctx->ungotten >= 0) + 1b14: 018da503 lw a0,24(s11) + i++; + 1b18: 2d05 addiw s10,s10,1 + if (ctx->ungotten >= 0) + 1b1a: 30055963 bgez a0,1e2c <_vscanf_core.constprop.0+0x4e4> + 1b1e: 856e mv a0,s11 + 1b20: d6fff0ef jal 188e <_in_char.part.0> + while (c != -1 && !isspace(c)) + 1b24: 27850663 beq a0,s8,1d90 <_vscanf_core.constprop.0+0x448> + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; + 1b28: 03950463 beq a0,s9,1b50 <_vscanf_core.constprop.0+0x208> + 1b2c: 47a5 li a5,9 + 1b2e: 02f50163 beq a0,a5,1b50 <_vscanf_core.constprop.0+0x208> + 1b32: 47a9 li a5,10 + 1b34: 00f50e63 beq a0,a5,1b50 <_vscanf_core.constprop.0+0x208> + 1b38: 47ad li a5,11 + 1b3a: 00f50b63 beq a0,a5,1b50 <_vscanf_core.constprop.0+0x208> + 1b3e: 47b1 li a5,12 + 1b40: 00f50863 beq a0,a5,1b50 <_vscanf_core.constprop.0+0x208> + 1b44: 67c2 ld a5,16(sp) + 1b46: 0785 addi a5,a5,1 + 1b48: e83e sd a5,16(sp) + 1b4a: 47b5 li a5,13 + 1b4c: faf51be3 bne a0,a5,1b02 <_vscanf_core.constprop.0+0x1ba> + if (!suppress) + 1b50: 64098a63 beqz s3,21a4 <_vscanf_core.constprop.0+0x85c> + 1b54: 7ce6 ld s9,120(sp) + 1b56: 7d46 ld s10,112(sp) + ctx->ungotten = c; + 1b58: 00adac23 sw a0,24(s11) + while (*p) + 1b5c: 001bc783 lbu a5,1(s7) + 1b60: 794a ld s2,176(sp) + 1b62: 79aa ld s3,168(sp) + 1b64: 6baa ld s7,136(sp) + 1b66: 6c0a ld s8,128(sp) + 1b68: e00795e3 bnez a5,1972 <_vscanf_core.constprop.0+0x2a> + 1b6c: b581 j 19ac <_vscanf_core.constprop.0+0x64> + _skip_space(ctx); + 1b6e: 856e mv a0,s11 + 1b70: f8ea sd s10,112(sp) + 1b72: d63ff0ef jal 18d4 <_skip_space> + if (ctx->ungotten >= 0) + 1b76: 018da503 lw a0,24(s11) + 1b7a: 24055063 bgez a0,1dba <_vscanf_core.constprop.0+0x472> + 1b7e: 856e mv a0,s11 + 1b80: d0fff0ef jal 188e <_in_char.part.0> + if (c == '-' || c == '+') + 1b84: fd55069b addiw a3,a0,-43 + 1b88: 9af5 andi a3,a3,-3 + 1b8a: 2681 sext.w a3,a3 + int i = 0, c = _in_char(ctx); + 1b8c: 4d01 li s10,0 + if (c == '-' || c == '+') + 1b8e: 3e068863 beqz a3,1f7e <_vscanf_core.constprop.0+0x636> + int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); + 1b92: 07800693 li a3,120 + 1b96: 4641 li a2,16 + 1b98: 00dc0863 beq s8,a3,1ba8 <_vscanf_core.constprop.0+0x260> + 1b9c: 06900693 li a3,105 + 1ba0: 4629 li a2,10 + 1ba2: 00dc1363 bne s8,a3,1ba8 <_vscanf_core.constprop.0+0x260> + 1ba6: 4601 li a2,0 + while (c != -1 && i < 63) + 1ba8: 56fd li a3,-1 + 1baa: 5cd50863 beq a0,a3,217a <_vscanf_core.constprop.0+0x832> + 1bae: fce6 sd s9,120(sp) + 1bb0: 02010893 addi a7,sp,32 + 1bb4: 01a88c33 add s8,a7,s10 + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + 1bb8: 4cc1 li s9,16 + int digit = (c >= '0' && c <= '9'); + 1bba: fd05069b addiw a3,a0,-48 + 1bbe: 0005031b sext.w t1,a0 + 1bc2: 00a6b593 sltiu a1,a3,10 + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + 1bc6: 27960a63 beq a2,s9,1e3a <_vscanf_core.constprop.0+0x4f2> + 1bca: 2a060d63 beqz a2,1e84 <_vscanf_core.constprop.0+0x53c> + int x = (c == 'x' || c == 'X'); + 1bce: 07800793 li a5,120 + 1bd2: 2ef50363 beq a0,a5,1eb8 <_vscanf_core.constprop.0+0x570> + 1bd6: fa850693 addi a3,a0,-88 + 1bda: 0016b693 seqz a3,a3 + 1bde: 4301 li t1,0 + if (width > 0 && i >= width) + 1be0: 01205463 blez s2,1be8 <_vscanf_core.constprop.0+0x2a0> + 1be4: 032d5a63 bge s10,s2,1c18 <_vscanf_core.constprop.0+0x2d0> + if (digit || hex || x) + 1be8: 0066e6b3 or a3,a3,t1 + 1bec: 8ecd or a3,a3,a1 + 1bee: c68d beqz a3,1c18 <_vscanf_core.constprop.0+0x2d0> + num_buf[i++] = (char)c; + 1bf0: 00ac0023 sb a0,0(s8) + if (ctx->ungotten >= 0) + 1bf4: 018da503 lw a0,24(s11) + num_buf[i++] = (char)c; + 1bf8: 2d05 addiw s10,s10,1 + if (ctx->ungotten >= 0) + 1bfa: 22055c63 bgez a0,1e32 <_vscanf_core.constprop.0+0x4ea> + 1bfe: 856e mv a0,s11 + 1c00: e832 sd a2,16(sp) + 1c02: c8dff0ef jal 188e <_in_char.part.0> + while (c != -1 && i < 63) + 1c06: 57fd li a5,-1 + 1c08: 6642 ld a2,16(sp) + 1c0a: 3cf50263 beq a0,a5,1fce <_vscanf_core.constprop.0+0x686> + 1c0e: 03f00693 li a3,63 + 1c12: 0c05 addi s8,s8,1 + 1c14: fadd13e3 bne s10,a3,1bba <_vscanf_core.constprop.0+0x272> + num_buf[i] = '\0'; + 1c18: 040d0793 addi a5,s10,64 + 1c1c: 1018 addi a4,sp,32 + 1c1e: 97ba add a5,a5,a4 + 1c20: fc078023 sb zero,-64(a5) + ctx->ungotten = c; + 1c24: 00adac23 sw a0,24(s11) + 1c28: 7ce6 ld s9,120(sp) + if (i == 0) + 1c2a: 1e0d0663 beqz s10,1e16 <_vscanf_core.constprop.0+0x4ce> + if (!suppress) + 1c2e: 36098363 beqz s3,1f94 <_vscanf_core.constprop.0+0x64c> + while (*p) + 1c32: 001bc783 lbu a5,1(s7) + { + 1c36: 794a ld s2,176(sp) + 1c38: 79aa ld s3,168(sp) + 1c3a: 6baa ld s7,136(sp) + 1c3c: 6c0a ld s8,128(sp) + 1c3e: 7d46 ld s10,112(sp) + while (*p) + 1c40: d20799e3 bnez a5,1972 <_vscanf_core.constprop.0+0x2a> + 1c44: b3a5 j 19ac <_vscanf_core.constprop.0+0x64> + while (*p >= '0' && *p <= '9') + 1c46: 00244583 lbu a1,2(s0) + suppress = 1; + 1c4a: 4985 li s3,1 + p++; + 1c4c: 0409 addi s0,s0,2 + 1c4e: b3d9 j 1a14 <_vscanf_core.constprop.0+0xcc> + if (*p == 'l') + 1c50: 00144c03 lbu s8,1(s0) + len_mod = 1; + 1c54: 4785 li a5,1 + 1c56: ec3e sd a5,24(sp) + if (*p == 'l') + 1c58: e0bc17e3 bne s8,a1,1a66 <_vscanf_core.constprop.0+0x11e> + len_mod = 2; + 1c5c: 4789 li a5,2 + char spec = *p++; + 1c5e: 00244c03 lbu s8,2(s0) + p++; + 1c62: 00240b93 addi s7,s0,2 + len_mod = 2; + 1c66: ec3e sd a5,24(sp) + 1c68: bbfd j 1a66 <_vscanf_core.constprop.0+0x11e> + 1c6a: 100c0763 beqz s8,1d78 <_vscanf_core.constprop.0+0x430> + 1c6e: fbbc079b addiw a5,s8,-69 + 1c72: 0ff7f793 zext.b a5,a5 + 1c76: 4689 li a3,2 + 1c78: eef6e2e3 bltu a3,a5,1b5c <_vscanf_core.constprop.0+0x214> + _skip_space(ctx); + 1c7c: 856e mv a0,s11 + 1c7e: f8ea sd s10,112(sp) + 1c80: c55ff0ef jal 18d4 <_skip_space> + if (ctx->ungotten >= 0) + 1c84: 018da783 lw a5,24(s11) + 1c88: 1207dd63 bgez a5,1dc2 <_vscanf_core.constprop.0+0x47a> + 1c8c: 856e mv a0,s11 + 1c8e: c01ff0ef jal 188e <_in_char.part.0> + if (c == '-' || c == '+') + 1c92: fd55069b addiw a3,a0,-43 + 1c96: ffd6f613 andi a2,a3,-3 + 1c9a: 2601 sext.w a2,a2 + 1c9c: 87aa mv a5,a0 + 1c9e: 12060c63 beqz a2,1dd6 <_vscanf_core.constprop.0+0x48e> + while (c != -1 && i < 63) + 1ca2: 567d li a2,-1 + 1ca4: 16c50963 beq a0,a2,1e16 <_vscanf_core.constprop.0+0x4ce> + 1ca8: fce6 sd s9,120(sp) + int i = 0, c = _in_char(ctx); + 1caa: 4d01 li s10,0 + 1cac: 80000937 lui s2,0x80000 + 1cb0: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff723f> + 1cb2: 0932 slli s2,s2,0xc + 1cb4: 80194913 xori s2,s2,-2047 + 1cb8: 093e slli s2,s2,0xf + 1cba: 02010813 addi a6,sp,32 + 1cbe: 01a80cb3 add s9,a6,s10 + 1cc2: 03a00c13 li s8,58 + 1cc6: 1935 addi s2,s2,-19 + 1cc8: a831 j 1ce4 <_vscanf_core.constprop.0+0x39c> + 1cca: bc5ff0ef jal 188e <_in_char.part.0> + while (c != -1 && i < 63) + 1cce: 577d li a4,-1 + 1cd0: 87aa mv a5,a0 + 1cd2: 2ee50563 beq a0,a4,1fbc <_vscanf_core.constprop.0+0x674> + 1cd6: 03f00713 li a4,63 + 1cda: 0c85 addi s9,s9,1 + 1cdc: 1eed0e63 beq s10,a4,1ed8 <_vscanf_core.constprop.0+0x590> + 1ce0: fd57869b addiw a3,a5,-43 + int c = ctx->ungotten; + 1ce4: 00d95633 srl a2,s2,a3 + 1ce8: 856e mv a0,s11 + 1cea: 8a05 andi a2,a2,1 + 1cec: 1edc6663 bltu s8,a3,1ed8 <_vscanf_core.constprop.0+0x590> + 1cf0: 1e060463 beqz a2,1ed8 <_vscanf_core.constprop.0+0x590> + num_buf[i++] = (char)c; + 1cf4: 00fc8023 sb a5,0(s9) + if (ctx->ungotten >= 0) + 1cf8: 018da783 lw a5,24(s11) + num_buf[i++] = (char)c; + 1cfc: 2d05 addiw s10,s10,1 + if (ctx->ungotten >= 0) + 1cfe: fc07c6e3 bltz a5,1cca <_vscanf_core.constprop.0+0x382> + ctx->ungotten = -1; + 1d02: 577d li a4,-1 + 1d04: 00edac23 sw a4,24(s11) + while (c != -1 && i < 63) + 1d08: b7f9 j 1cd6 <_vscanf_core.constprop.0+0x38e> + if (*p == 'h') + 1d0a: 00144c03 lbu s8,1(s0) + int len_mod = 0; + 1d0e: ec02 sd zero,24(sp) + if (*p == 'h') + 1d10: d4bc1be3 bne s8,a1,1a66 <_vscanf_core.constprop.0+0x11e> + char spec = *p++; + 1d14: 00244c03 lbu s8,2(s0) + p++; + 1d18: 00240b93 addi s7,s0,2 + 1d1c: b3a9 j 1a66 <_vscanf_core.constprop.0+0x11e> + 1d1e: fce6 sd s9,120(sp) + 1d20: f8ea sd s10,112(sp) + int count = (width > 0) ? width : 1; + 1d22: 00090c1b sext.w s8,s2 + 1d26: 0d205a63 blez s2,1dfa <_vscanf_core.constprop.0+0x4b2> + char *buf = suppress ? NULL : va_arg(ap, char *); + 1d2a: 4d01 li s10,0 + 1d2c: 06098d63 beqz s3,1da6 <_vscanf_core.constprop.0+0x45e> + for (int i = 0; i < count; i++) + 1d30: 9c6a add s8,s8,s10 + if (c == -1) + 1d32: 5cfd li s9,-1 + if (ctx->ungotten >= 0) + 1d34: 018da783 lw a5,24(s11) + ctx->ungotten = -1; + 1d38: 856e mv a0,s11 + if (ctx->ungotten >= 0) + 1d3a: 0207dc63 bgez a5,1d72 <_vscanf_core.constprop.0+0x42a> + 1d3e: b51ff0ef jal 188e <_in_char.part.0> + 1d42: 87aa mv a5,a0 + if (c == -1) + 1d44: 0b950d63 beq a0,s9,1dfe <_vscanf_core.constprop.0+0x4b6> + if (!suppress) + 1d48: 00099463 bnez s3,1d50 <_vscanf_core.constprop.0+0x408> + buf[i] = (char)c; + 1d4c: 00fd0023 sb a5,0(s10) + for (int i = 0; i < count; i++) + 1d50: 0d05 addi s10,s10,1 + 1d52: ffac11e3 bne s8,s10,1d34 <_vscanf_core.constprop.0+0x3ec> + while (*p) + 1d56: 001bc783 lbu a5,1(s7) + if (!suppress) + 1d5a: 00099363 bnez s3,1d60 <_vscanf_core.constprop.0+0x418> + assigned++; + 1d5e: 2b05 addiw s6,s6,1 + 1d60: 794a ld s2,176(sp) + 1d62: 79aa ld s3,168(sp) + 1d64: 6baa ld s7,136(sp) + 1d66: 6c0a ld s8,128(sp) + 1d68: 7ce6 ld s9,120(sp) + 1d6a: 7d46 ld s10,112(sp) + while (*p) + 1d6c: c00793e3 bnez a5,1972 <_vscanf_core.constprop.0+0x2a> + 1d70: b935 j 19ac <_vscanf_core.constprop.0+0x64> + ctx->ungotten = -1; + 1d72: 019dac23 sw s9,24(s11) + if (c == -1) + 1d76: bfc9 j 1d48 <_vscanf_core.constprop.0+0x400> + 1d78: 640e ld s0,192(sp) + 1d7a: 74ea ld s1,184(sp) + 1d7c: 794a ld s2,176(sp) + 1d7e: 79aa ld s3,168(sp) + 1d80: 7a0a ld s4,160(sp) + 1d82: 6aea ld s5,152(sp) + 1d84: 6baa ld s7,136(sp) + 1d86: 6c0a ld s8,128(sp) + 1d88: 7da6 ld s11,104(sp) + 1d8a: b135 j 19b6 <_vscanf_core.constprop.0+0x6e> + int width = -1; + 1d8c: 597d li s2,-1 + 1d8e: b975 j 1a4a <_vscanf_core.constprop.0+0x102> + if (!suppress) + 1d90: 3c099c63 bnez s3,2168 <_vscanf_core.constprop.0+0x820> + buf[i] = '\0'; + 1d94: 67e2 ld a5,24(sp) + 1d96: 01a786b3 add a3,a5,s10 + 1d9a: 00068023 sb zero,0(a3) + while (*p) + 1d9e: 001bc783 lbu a5,1(s7) + assigned++; + 1da2: 2b05 addiw s6,s6,1 + 1da4: bf75 j 1d60 <_vscanf_core.constprop.0+0x418> + char *buf = suppress ? NULL : va_arg(ap, char *); + 1da6: 67a2 ld a5,8(sp) + 1da8: 0007bd03 ld s10,0(a5) + 1dac: 07a1 addi a5,a5,8 + 1dae: e43e sd a5,8(sp) + 1db0: b741 j 1d30 <_vscanf_core.constprop.0+0x3e8> + ctx->ungotten = -1; + 1db2: 56fd li a3,-1 + 1db4: 00ddac23 sw a3,24(s11) + while (c != -1 && !isspace(c)) + 1db8: bb11 j 1acc <_vscanf_core.constprop.0+0x184> + ctx->ungotten = -1; + 1dba: 56fd li a3,-1 + 1dbc: 00ddac23 sw a3,24(s11) + return c; + 1dc0: b3d1 j 1b84 <_vscanf_core.constprop.0+0x23c> + if (c == '-' || c == '+') + 1dc2: fd57869b addiw a3,a5,-43 + 1dc6: ffd6f613 andi a2,a3,-3 + ctx->ungotten = -1; + 1dca: 55fd li a1,-1 + 1dcc: 00bdac23 sw a1,24(s11) + if (c == '-' || c == '+') + 1dd0: 2601 sext.w a2,a2 + 1dd2: ec061be3 bnez a2,1ca8 <_vscanf_core.constprop.0+0x360> + num_buf[i++] = (char)c; + 1dd6: 02f10023 sb a5,32(sp) + if (ctx->ungotten >= 0) + 1dda: 018da783 lw a5,24(s11) + 1dde: 2207da63 bgez a5,2012 <_vscanf_core.constprop.0+0x6ca> + 1de2: 856e mv a0,s11 + 1de4: aabff0ef jal 188e <_in_char.part.0> + while (c != -1 && i < 63) + 1de8: 567d li a2,-1 + 1dea: 87aa mv a5,a0 + num_buf[i++] = (char)c; + 1dec: 4d05 li s10,1 + 1dee: fd55069b addiw a3,a0,-43 + while (c != -1 && i < 63) + 1df2: 3ac50163 beq a0,a2,2194 <_vscanf_core.constprop.0+0x84c> + 1df6: fce6 sd s9,120(sp) + 1df8: bd55 j 1cac <_vscanf_core.constprop.0+0x364> + int count = (width > 0) ? width : 1; + 1dfa: 4c05 li s8,1 + 1dfc: b73d j 1d2a <_vscanf_core.constprop.0+0x3e2> + 1dfe: 640e ld s0,192(sp) + 1e00: 74ea ld s1,184(sp) + 1e02: 794a ld s2,176(sp) + 1e04: 79aa ld s3,168(sp) + 1e06: 7a0a ld s4,160(sp) + 1e08: 6aea ld s5,152(sp) + 1e0a: 6baa ld s7,136(sp) + 1e0c: 6c0a ld s8,128(sp) + 1e0e: 7ce6 ld s9,120(sp) + 1e10: 7d46 ld s10,112(sp) + 1e12: 7da6 ld s11,104(sp) + 1e14: b64d j 19b6 <_vscanf_core.constprop.0+0x6e> + 1e16: 640e ld s0,192(sp) + 1e18: 74ea ld s1,184(sp) + 1e1a: 794a ld s2,176(sp) + 1e1c: 79aa ld s3,168(sp) + 1e1e: 7a0a ld s4,160(sp) + 1e20: 6aea ld s5,152(sp) + 1e22: 6baa ld s7,136(sp) + 1e24: 6c0a ld s8,128(sp) + 1e26: 7d46 ld s10,112(sp) + 1e28: 7da6 ld s11,104(sp) + 1e2a: b671 j 19b6 <_vscanf_core.constprop.0+0x6e> + ctx->ungotten = -1; + 1e2c: 018dac23 sw s8,24(s11) + while (c != -1 && !isspace(c)) + 1e30: b9e5 j 1b28 <_vscanf_core.constprop.0+0x1e0> + ctx->ungotten = -1; + 1e32: 57fd li a5,-1 + 1e34: 00fdac23 sw a5,24(s11) + while (c != -1 && i < 63) + 1e38: bbd9 j 1c0e <_vscanf_core.constprop.0+0x2c6> + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + 1e3a: f9f3069b addiw a3,t1,-97 + 1e3e: 4795 li a5,5 + 1e40: 06d7f263 bgeu a5,a3,1ea4 <_vscanf_core.constprop.0+0x55c> + 1e44: fbf3031b addiw t1,t1,-65 + 1e48: 4795 li a5,5 + 1e4a: 0467fd63 bgeu a5,t1,1ea4 <_vscanf_core.constprop.0+0x55c> + int x = (c == 'x' || c == 'X'); + 1e4e: 07800693 li a3,120 + 1e52: 18d50763 beq a0,a3,1fe0 <_vscanf_core.constprop.0+0x698> + 1e56: fa850693 addi a3,a0,-88 + 1e5a: 0016b693 seqz a3,a3 + if (base == 0 && i == 1 && num_buf[0] == '0' && x) + 1e5e: 4301 li t1,0 + 1e60: 32061663 bnez a2,218c <_vscanf_core.constprop.0+0x844> + 1e64: 4785 li a5,1 + 1e66: 4601 li a2,0 + 1e68: d6fd1ce3 bne s10,a5,1be0 <_vscanf_core.constprop.0+0x298> + 1e6c: 02014e03 lbu t3,32(sp) + 1e70: 03000793 li a5,48 + 1e74: d6fe16e3 bne t3,a5,1be0 <_vscanf_core.constprop.0+0x298> + 1e78: d60684e3 beqz a3,1be0 <_vscanf_core.constprop.0+0x298> + base = 16; + 1e7c: 4641 li a2,16 + if (width > 0 && i >= width) + 1e7e: d7a919e3 bne s2,s10,1bf0 <_vscanf_core.constprop.0+0x2a8> + 1e82: bb59 j 1c18 <_vscanf_core.constprop.0+0x2d0> + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + 1e84: f9f3069b addiw a3,t1,-97 + 1e88: 4795 li a5,5 + 1e8a: 02d7f263 bgeu a5,a3,1eae <_vscanf_core.constprop.0+0x566> + 1e8e: fbf3031b addiw t1,t1,-65 + 1e92: 0467f063 bgeu a5,t1,1ed2 <_vscanf_core.constprop.0+0x58a> + int x = (c == 'x' || c == 'X'); + 1e96: 07800693 li a3,120 + 1e9a: fad51ee3 bne a0,a3,1e56 <_vscanf_core.constprop.0+0x50e> + 1e9e: 4301 li t1,0 + 1ea0: 4685 li a3,1 + 1ea2: b7c9 j 1e64 <_vscanf_core.constprop.0+0x51c> + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + 1ea4: 4305 li t1,1 + int x = (c == 'x' || c == 'X'); + 1ea6: 4681 li a3,0 + if (width > 0 && i >= width) + 1ea8: d3204ee3 bgtz s2,1be4 <_vscanf_core.constprop.0+0x29c> + 1eac: bb35 j 1be8 <_vscanf_core.constprop.0+0x2a0> + int x = (c == 'x' || c == 'X'); + 1eae: 4681 li a3,0 + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + 1eb0: 4305 li t1,1 + if (width > 0 && i >= width) + 1eb2: d32049e3 bgtz s2,1be4 <_vscanf_core.constprop.0+0x29c> + 1eb6: bb0d j 1be8 <_vscanf_core.constprop.0+0x2a0> + 1eb8: 4301 li t1,0 + int x = (c == 'x' || c == 'X'); + 1eba: 4685 li a3,1 + if (width > 0 && i >= width) + 1ebc: d32044e3 bgtz s2,1be4 <_vscanf_core.constprop.0+0x29c> + 1ec0: bb05 j 1bf0 <_vscanf_core.constprop.0+0x2a8> + if (!suppress) + 1ec2: c8099be3 bnez s3,1b58 <_vscanf_core.constprop.0+0x210> + buf[i] = '\0'; + 1ec6: 67e2 ld a5,24(sp) + 1ec8: 00078023 sb zero,0(a5) + ctx->ungotten = c; + 1ecc: 00adac23 sw a0,24(s11) + if (i > 0 && !suppress) + 1ed0: b171 j 1b5c <_vscanf_core.constprop.0+0x214> + int x = (c == 'x' || c == 'X'); + 1ed2: 4681 li a3,0 + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + 1ed4: 4305 li t1,1 + 1ed6: b779 j 1e64 <_vscanf_core.constprop.0+0x51c> + num_buf[i] = '\0'; + 1ed8: 040d0713 addi a4,s10,64 + 1edc: 1014 addi a3,sp,32 + 1ede: 96ba add a3,a3,a4 + 1ee0: fc068023 sb zero,-64(a3) + ctx->ungotten = c; + 1ee4: 00fdac23 sw a5,24(s11) + if (i == 0) + 1ee8: f00d0be3 beqz s10,1dfe <_vscanf_core.constprop.0+0x4b6> + 1eec: 7ce6 ld s9,120(sp) + if (!suppress) + 1eee: d40992e3 bnez s3,1c32 <_vscanf_core.constprop.0+0x2ea> + if (*str == '-') + 1ef2: 02014603 lbu a2,32(sp) + 1ef6: 02d00793 li a5,45 + 1efa: 1af60963 beq a2,a5,20ac <_vscanf_core.constprop.0+0x764> + else if (*str == '+') + 1efe: 02b00793 li a5,43 + 1f02: 20f60a63 beq a2,a5,2116 <_vscanf_core.constprop.0+0x7ce> + 1f06: 00005797 auipc a5,0x5 + 1f0a: 9927b587 fld fa1,-1646(a5) # 6898 + 1f0e: 101c addi a5,sp,32 + while (*str >= '0' && *str <= '9') + 1f10: fd06069b addiw a3,a2,-48 + 1f14: 0ff6f513 zext.b a0,a3 + 1f18: 45a5 li a1,9 + 1f1a: f20007d3 fmv.d.x fa5,zero + 1f1e: 02a5e463 bltu a1,a0,1f46 <_vscanf_core.constprop.0+0x5fe> + 1f22: 00005717 auipc a4,0x5 + 1f26: 97e73707 fld fa4,-1666(a4) # 68a0 + 1f2a: 4525 li a0,9 + 1f2c: 0017c603 lbu a2,1(a5) + val = val * 10.0 + (*str - '0'); + 1f30: d20686d3 fcvt.d.w fa3,a3 + str++; + 1f34: 0785 addi a5,a5,1 + while (*str >= '0' && *str <= '9') + 1f36: fd06069b addiw a3,a2,-48 + 1f3a: 0ff6f593 zext.b a1,a3 + val = val * 10.0 + (*str - '0'); + 1f3e: 6ae7f7c3 fmadd.d fa5,fa5,fa4,fa3 + while (*str >= '0' && *str <= '9') + 1f42: feb575e3 bgeu a0,a1,1f2c <_vscanf_core.constprop.0+0x5e4> + if (*str == '.') + 1f46: 02e00693 li a3,46 + 1f4a: 16d60a63 beq a2,a3,20be <_vscanf_core.constprop.0+0x776> + if (*str == 'e' || *str == 'E') + 1f4e: 0007c683 lbu a3,0(a5) + 1f52: 0df6f693 andi a3,a3,223 + 1f56: 04500613 li a2,69 + 1f5a: 0cc68463 beq a3,a2,2022 <_vscanf_core.constprop.0+0x6da> + *va_arg(ap, double *) = val; + 1f5e: 6722 ld a4,8(sp) + if (len_mod == 1) + 1f60: 4685 li a3,1 + return sign * val; + 1f62: 12b7f7d3 fmul.d fa5,fa5,fa1 + *va_arg(ap, double *) = val; + 1f66: 631c ld a5,0(a4) + *va_arg(ap, int64 *) = val; + 1f68: 0721 addi a4,a4,8 + 1f6a: e43a sd a4,8(sp) + if (len_mod == 1) + 1f6c: 6762 ld a4,24(sp) + 1f6e: 18d70b63 beq a4,a3,2104 <_vscanf_core.constprop.0+0x7bc> + *va_arg(ap, float *) = (float)val; + 1f72: 4017f7d3 fcvt.s.d fa5,fa5 + assigned++; + 1f76: 2b05 addiw s6,s6,1 + *va_arg(ap, float *) = (float)val; + 1f78: 00f7a027 fsw fa5,0(a5) + 1f7c: b95d j 1c32 <_vscanf_core.constprop.0+0x2ea> + num_buf[i++] = (char)c; + 1f7e: 02a10023 sb a0,32(sp) + if (ctx->ungotten >= 0) + 1f82: 018da503 lw a0,24(s11) + 1f86: 06055463 bgez a0,1fee <_vscanf_core.constprop.0+0x6a6> + 1f8a: 856e mv a0,s11 + 1f8c: 903ff0ef jal 188e <_in_char.part.0> + num_buf[i++] = (char)c; + 1f90: 4d05 li s10,1 + 1f92: b101 j 1b92 <_vscanf_core.constprop.0+0x24a> + int64 val = strtoll(num_buf, NULL, base); + 1f94: 4581 li a1,0 + 1f96: 1008 addi a0,sp,32 + 1f98: 67e030ef jal 5616 + *va_arg(ap, int64 *) = val; + 1f9c: 67a2 ld a5,8(sp) + if (len_mod == 2) + 1f9e: 6762 ld a4,24(sp) + 1fa0: 4689 li a3,2 + *va_arg(ap, int64 *) = val; + 1fa2: 07a1 addi a5,a5,8 + if (len_mod == 2) + 1fa4: 16d70363 beq a4,a3,210a <_vscanf_core.constprop.0+0x7c2> + *va_arg(ap, int64 *) = val; + 1fa8: 6722 ld a4,8(sp) + else if (len_mod == 1) + 1faa: 4605 li a2,1 + *va_arg(ap, int64 *) = val; + 1fac: 6314 ld a3,0(a4) + else if (len_mod == 1) + 1fae: 6762 ld a4,24(sp) + 1fb0: 16c70163 beq a4,a2,2112 <_vscanf_core.constprop.0+0x7ca> + *va_arg(ap, int *) = (int)val; + 1fb4: c288 sw a0,0(a3) + assigned++; + 1fb6: 2b05 addiw s6,s6,1 + 1fb8: e43e sd a5,8(sp) + 1fba: b9a5 j 1c32 <_vscanf_core.constprop.0+0x2ea> + num_buf[i] = '\0'; + 1fbc: 040d0793 addi a5,s10,64 + 1fc0: 1018 addi a4,sp,32 + 1fc2: 00e785b3 add a1,a5,a4 + 1fc6: fc058023 sb zero,-64(a1) + if (i == 0) + 1fca: 7ce6 ld s9,120(sp) + 1fcc: b70d j 1eee <_vscanf_core.constprop.0+0x5a6> + num_buf[i] = '\0'; + 1fce: 040d0793 addi a5,s10,64 + 1fd2: 1018 addi a4,sp,32 + 1fd4: 00e78833 add a6,a5,a4 + 1fd8: fc080023 sb zero,-64(a6) + if (i == 0) + 1fdc: 7ce6 ld s9,120(sp) + 1fde: b981 j 1c2e <_vscanf_core.constprop.0+0x2e6> + int x = (c == 'x' || c == 'X'); + 1fe0: 4301 li t1,0 + 1fe2: 4685 li a3,1 + if (width > 0 && i >= width) + 1fe4: c12040e3 bgtz s2,1be4 <_vscanf_core.constprop.0+0x29c> + 1fe8: b101 j 1be8 <_vscanf_core.constprop.0+0x2a0> + int assigned = 0; + 1fea: 4b01 li s6,0 + 1fec: b2e9 j 19b6 <_vscanf_core.constprop.0+0x6e> + ctx->ungotten = -1; + 1fee: 56fd li a3,-1 + 1ff0: fce6 sd s9,120(sp) + 1ff2: 00ddac23 sw a3,24(s11) + int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); + 1ff6: 07800693 li a3,120 + 1ffa: 4641 li a2,16 + num_buf[i++] = (char)c; + 1ffc: 4d05 li s10,1 + int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); + 1ffe: badc09e3 beq s8,a3,1bb0 <_vscanf_core.constprop.0+0x268> + 2002: 06900693 li a3,105 + 2006: 4629 li a2,10 + num_buf[i++] = (char)c; + 2008: 4d05 li s10,1 + int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); + 200a: badc13e3 bne s8,a3,1bb0 <_vscanf_core.constprop.0+0x268> + 200e: 4601 li a2,0 + 2010: b645 j 1bb0 <_vscanf_core.constprop.0+0x268> + ctx->ungotten = -1; + 2012: 56fd li a3,-1 + 2014: fce6 sd s9,120(sp) + 2016: 00ddac23 sw a3,24(s11) + num_buf[i++] = (char)c; + 201a: 4d05 li s10,1 + 201c: fd57869b addiw a3,a5,-43 + 2020: b171 j 1cac <_vscanf_core.constprop.0+0x364> + if (*str == '-') + 2022: 0017c583 lbu a1,1(a5) + 2026: 02d00693 li a3,45 + 202a: 0ed58f63 beq a1,a3,2128 <_vscanf_core.constprop.0+0x7e0> + else if (*str == '+') + 202e: 02b00693 li a3,43 + 2032: 10d58e63 beq a1,a3,214e <_vscanf_core.constprop.0+0x806> + while (*str >= '0' && *str <= '9') + 2036: fd05861b addiw a2,a1,-48 + 203a: 0ff67513 zext.b a0,a2 + 203e: 45a5 li a1,9 + str++; + 2040: 00178693 addi a3,a5,1 + int esign = 1; + 2044: 4805 li a6,1 + while (*str >= '0' && *str <= '9') + 2046: 04a5ec63 bltu a1,a0,209e <_vscanf_core.constprop.0+0x756> + 204a: 4525 li a0,9 + 204c: 0016c583 lbu a1,1(a3) + eval = eval * 10 + (*str - '0'); + 2050: 0029979b slliw a5,s3,0x2 + 2054: 013787bb addw a5,a5,s3 + 2058: 0017979b slliw a5,a5,0x1 + 205c: 00f609bb addw s3,a2,a5 + while (*str >= '0' && *str <= '9') + 2060: fd05861b addiw a2,a1,-48 + 2064: 0ff67593 zext.b a1,a2 + str++; + 2068: 0685 addi a3,a3,1 + while (*str >= '0' && *str <= '9') + 206a: feb571e3 bgeu a0,a1,204c <_vscanf_core.constprop.0+0x704> + while (eval--) + 206e: fff9879b addiw a5,s3,-1 + 2072: 12098463 beqz s3,219a <_vscanf_core.constprop.0+0x852> + double p = 1.0; + 2076: 00005717 auipc a4,0x5 + 207a: 82273687 fld fa3,-2014(a4) # 6898 + 207e: 00005717 auipc a4,0x5 + 2082: 82273707 fld fa4,-2014(a4) # 68a0 + while (eval--) + 2086: 56fd li a3,-1 + 2088: 37fd addiw a5,a5,-1 + p *= 10.0; + 208a: 12e6f6d3 fmul.d fa3,fa3,fa4 + while (eval--) + 208e: fed79de3 bne a5,a3,2088 <_vscanf_core.constprop.0+0x740> + if (esign == 1) + 2092: 4785 li a5,1 + 2094: 00f80963 beq a6,a5,20a6 <_vscanf_core.constprop.0+0x75e> + val /= p; + 2098: 1ad7f7d3 fdiv.d fa5,fa5,fa3 + 209c: b5c9 j 1f5e <_vscanf_core.constprop.0+0x616> + double p = 1.0; + 209e: 00004797 auipc a5,0x4 + 20a2: 7fa7b687 fld fa3,2042(a5) # 6898 + val *= p; + 20a6: 12d7f7d3 fmul.d fa5,fa5,fa3 + 20aa: bd55 j 1f5e <_vscanf_core.constprop.0+0x616> + while (*str >= '0' && *str <= '9') + 20ac: 00004797 auipc a5,0x4 + 20b0: 7e47b587 fld fa1,2020(a5) # 6890 + 20b4: 02114603 lbu a2,33(sp) + str++; + 20b8: 02110793 addi a5,sp,33 + 20bc: bd91 j 1f10 <_vscanf_core.constprop.0+0x5c8> + while (*str >= '0' && *str <= '9') + 20be: 0017c683 lbu a3,1(a5) + 20c2: 45a5 li a1,9 + str++; + 20c4: 0785 addi a5,a5,1 + while (*str >= '0' && *str <= '9') + 20c6: fd06861b addiw a2,a3,-48 + 20ca: 0ff67513 zext.b a0,a2 + 20ce: e8a5e2e3 bltu a1,a0,1f52 <_vscanf_core.constprop.0+0x60a> + double div = 10.0; + 20d2: 00004717 auipc a4,0x4 + 20d6: 7ce73707 fld fa4,1998(a4) # 68a0 + 20da: 22e70653 fmv.d fa2,fa4 + while (*str >= '0' && *str <= '9') + 20de: 4525 li a0,9 + val += (*str - '0') / div; + 20e0: d20606d3 fcvt.d.w fa3,a2 + while (*str >= '0' && *str <= '9') + 20e4: 0017c683 lbu a3,1(a5) + str++; + 20e8: 0785 addi a5,a5,1 + val += (*str - '0') / div; + 20ea: 1ac6f6d3 fdiv.d fa3,fa3,fa2 + while (*str >= '0' && *str <= '9') + 20ee: fd06861b addiw a2,a3,-48 + 20f2: 0ff67593 zext.b a1,a2 + div *= 10.0; + 20f6: 12e67653 fmul.d fa2,fa2,fa4 + val += (*str - '0') / div; + 20fa: 02d7f7d3 fadd.d fa5,fa5,fa3 + while (*str >= '0' && *str <= '9') + 20fe: feb571e3 bgeu a0,a1,20e0 <_vscanf_core.constprop.0+0x798> + 2102: bd81 j 1f52 <_vscanf_core.constprop.0+0x60a> + *va_arg(ap, double *) = val; + 2104: a39c fsd fa5,0(a5) + assigned++; + 2106: 2b05 addiw s6,s6,1 + 2108: b62d j 1c32 <_vscanf_core.constprop.0+0x2ea> + *va_arg(ap, int64 *) = val; + 210a: 6722 ld a4,8(sp) + 210c: 6314 ld a3,0(a4) + 210e: e288 sd a0,0(a3) + 2110: b55d j 1fb6 <_vscanf_core.constprop.0+0x66e> + *va_arg(ap, long *) = (long)val; + 2112: e288 sd a0,0(a3) + 2114: b54d j 1fb6 <_vscanf_core.constprop.0+0x66e> + while (*str >= '0' && *str <= '9') + 2116: 00004797 auipc a5,0x4 + 211a: 7827b587 fld fa1,1922(a5) # 6898 + 211e: 02114603 lbu a2,33(sp) + str++; + 2122: 02110793 addi a5,sp,33 + 2126: b3ed j 1f10 <_vscanf_core.constprop.0+0x5c8> + while (*str >= '0' && *str <= '9') + 2128: 0027c583 lbu a1,2(a5) + str++; + 212c: 00278693 addi a3,a5,2 + while (*str >= '0' && *str <= '9') + 2130: 4525 li a0,9 + 2132: fd05861b addiw a2,a1,-48 + 2136: 0ff67793 zext.b a5,a2 + esign = -1; + 213a: 587d li a6,-1 + while (*str >= '0' && *str <= '9') + 213c: f0f577e3 bgeu a0,a5,204a <_vscanf_core.constprop.0+0x702> + double p = 1.0; + 2140: 00004797 auipc a5,0x4 + 2144: 7587b687 fld fa3,1880(a5) # 6898 + val /= p; + 2148: 1ad7f7d3 fdiv.d fa5,fa5,fa3 + 214c: bd09 j 1f5e <_vscanf_core.constprop.0+0x616> + while (*str >= '0' && *str <= '9') + 214e: 0027c583 lbu a1,2(a5) + str++; + 2152: 00278693 addi a3,a5,2 + while (*str >= '0' && *str <= '9') + 2156: 4525 li a0,9 + 2158: fd05861b addiw a2,a1,-48 + 215c: 0ff67793 zext.b a5,a2 + 2160: f2f56fe3 bltu a0,a5,209e <_vscanf_core.constprop.0+0x756> + int esign = 1; + 2164: 4805 li a6,1 + 2166: b5d5 j 204a <_vscanf_core.constprop.0+0x702> + while (*p) + 2168: 001bc783 lbu a5,1(s7) + 216c: bed5 j 1d60 <_vscanf_core.constprop.0+0x418> + if (!suppress) + 216e: 9e0997e3 bnez s3,1b5c <_vscanf_core.constprop.0+0x214> + buf[i] = '\0'; + 2172: 67e2 ld a5,24(sp) + 2174: 00078023 sb zero,0(a5) + 2178: b2d5 j 1b5c <_vscanf_core.constprop.0+0x214> + num_buf[i] = '\0'; + 217a: 040d0793 addi a5,s10,64 + 217e: 1018 addi a4,sp,32 + 2180: 97ba add a5,a5,a4 + 2182: fc078023 sb zero,-64(a5) + if (i == 0) + 2186: aa0d14e3 bnez s10,1c2e <_vscanf_core.constprop.0+0x2e6> + 218a: b171 j 1e16 <_vscanf_core.constprop.0+0x4ce> + 218c: 4641 li a2,16 + if (width > 0 && i >= width) + 218e: a5204be3 bgtz s2,1be4 <_vscanf_core.constprop.0+0x29c> + 2192: bc99 j 1be8 <_vscanf_core.constprop.0+0x2a0> + num_buf[i] = '\0'; + 2194: 020100a3 sb zero,33(sp) + if (i == 0) + 2198: bb99 j 1eee <_vscanf_core.constprop.0+0x5a6> + double p = 1.0; + 219a: 00004797 auipc a5,0x4 + 219e: 6fe7b687 fld fa3,1790(a5) # 6898 + 21a2: bdc5 j 2092 <_vscanf_core.constprop.0+0x74a> + buf[i] = '\0'; + 21a4: 67e2 ld a5,24(sp) + 21a6: 01a786b3 add a3,a5,s10 + 21aa: 00068023 sb zero,0(a3) + ctx->ungotten = c; + 21ae: 00adac23 sw a0,24(s11) + while (*p) + 21b2: 001bc783 lbu a5,1(s7) + 21b6: b6f5 j 1da2 <_vscanf_core.constprop.0+0x45a> + +00000000000021b8 <_out_char>: +{ + 21b8: 7179 addi sp,sp,-48 + 21ba: ec26 sd s1,24(sp) + if (ctx->stream) + 21bc: 6d04 ld s1,24(a0) +{ + 21be: f022 sd s0,32(sp) + 21c0: f406 sd ra,40(sp) + 21c2: 842a mv s0,a0 + 21c4: 872e mv a4,a1 + if (ctx->stream) + 21c6: c0a1 beqz s1,2206 <_out_char+0x4e> + 21c8: e84a sd s2,16(sp) + if (stream->buf_mode == 2) + 21ca: 41c4a903 lw s2,1052(s1) + 21ce: 4789 li a5,2 + 21d0: 04f90d63 beq s2,a5,222a <_out_char+0x72> + stream->buffer[stream->buf_write_pos++] = (char)c; + 21d4: 4104a783 lw a5,1040(s1) + if (stream->buf_write_pos >= BUFSIZ) + 21d8: 3ff00693 li a3,1023 + stream->buffer[stream->buf_write_pos++] = (char)c; + 21dc: 0017861b addiw a2,a5,1 + 21e0: 40c4a823 sw a2,1040(s1) + 21e4: 97a6 add a5,a5,s1 + 21e6: 00b78823 sb a1,16(a5) + if (stream->buf_write_pos >= BUFSIZ) + 21ea: 08c6c063 blt a3,a2,226a <_out_char+0xb2> + else if (stream->buf_mode == 1 && c == '\n') + 21ee: 4785 li a5,1 + 21f0: 04f90a63 beq s2,a5,2244 <_out_char+0x8c> + ctx->written++; + 21f4: 681c ld a5,16(s0) + 21f6: 6942 ld s2,16(sp) +} + 21f8: 70a2 ld ra,40(sp) + ctx->written++; + 21fa: 0785 addi a5,a5,1 + 21fc: e81c sd a5,16(s0) +} + 21fe: 7402 ld s0,32(sp) + 2200: 64e2 ld s1,24(sp) + 2202: 6145 addi sp,sp,48 + 2204: 8082 ret + if (ctx->limit > 0 && ctx->written < ctx->limit - 1) + 2206: 6514 ld a3,8(a0) + 2208: 691c ld a5,16(a0) + 220a: ca89 beqz a3,221c <_out_char+0x64> + 220c: 16fd addi a3,a3,-1 + 220e: 00d7f763 bgeu a5,a3,221c <_out_char+0x64> + ctx->buf[ctx->written] = c; + 2212: 6114 ld a3,0(a0) + 2214: 97b6 add a5,a5,a3 + 2216: 00b78023 sb a1,0(a5) + ctx->written++; + 221a: 691c ld a5,16(a0) + 221c: 0785 addi a5,a5,1 +} + 221e: 70a2 ld ra,40(sp) + ctx->written++; + 2220: e81c sd a5,16(s0) +} + 2222: 7402 ld s0,32(sp) + 2224: 64e2 ld s1,24(sp) + 2226: 6145 addi sp,sp,48 + 2228: 8082 ret + if (write(stream->fd, &ch, 1) != 1) + 222a: 4088 lw a0,0(s1) + 222c: 4605 li a2,1 + 222e: 00f10593 addi a1,sp,15 + char ch = (char)c; + 2232: 00e107a3 sb a4,15(sp) + if (write(stream->fd, &ch, 1) != 1) + 2236: e93fe0ef jal 10c8 + 223a: 4785 li a5,1 + 223c: faf50ce3 beq a0,a5,21f4 <_out_char+0x3c> + stream->error = 1; + 2240: c49c sw a5,8(s1) + return EOF; + 2242: bf4d j 21f4 <_out_char+0x3c> + else if (stream->buf_mode == 1 && c == '\n') + 2244: 47a9 li a5,10 + 2246: faf597e3 bne a1,a5,21f4 <_out_char+0x3c> + if (stream->buf_write_pos > 0) + 224a: fac055e3 blez a2,21f4 <_out_char+0x3c> + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 224e: 4088 lw a0,0(s1) + 2250: 01048593 addi a1,s1,16 + 2254: e75fe0ef jal 10c8 + if (ret < stream->buf_write_pos) + 2258: 4104a783 lw a5,1040(s1) + 225c: 02f55063 bge a0,a5,227c <_out_char+0xc4> + stream->error = 1; + 2260: 0124a423 sw s2,8(s1) + stream->buf_write_pos = 0; + 2264: 4004a823 sw zero,1040(s1) + return EOF; + 2268: b771 j 21f4 <_out_char+0x3c> + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 226a: 4088 lw a0,0(s1) + 226c: 01048593 addi a1,s1,16 + 2270: e59fe0ef jal 10c8 + if (ret < stream->buf_write_pos) + 2274: 4104a783 lw a5,1040(s1) + 2278: 00f54563 blt a0,a5,2282 <_out_char+0xca> + stream->buf_write_pos = 0; + 227c: 4004a823 sw zero,1040(s1) + 2280: bf95 j 21f4 <_out_char+0x3c> + stream->error = 1; + 2282: 4785 li a5,1 + 2284: c49c sw a5,8(s1) + stream->buf_write_pos = 0; + 2286: 4004a823 sw zero,1040(s1) + return EOF; + 228a: b7ad j 21f4 <_out_char+0x3c> + +000000000000228c : + "75767778798081828384858687888990919293949596979899" +}; + +STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod) +{ + stbsp__period = pperiod; + 228c: 00006797 auipc a5,0x6 + 2290: bdc78793 addi a5,a5,-1060 # 7e68 + 2294: 0cb78623 sb a1,204(a5) + stbsp__comma = pcomma; + 2298: 0ca786a3 sb a0,205(a5) +} + 229c: 8082 ret + +000000000000229e : + + return (stbsp__uint32)(sn - s); +} + +STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(vsprintfcb)(STBSP_SPRINTFCB *callback, void *user, char *buf, char const *fmt, va_list va) +{ + 229e: d1010113 addi sp,sp,-752 + // Check if the next 4 bytes contain %(0x25) or end of string. + // Using the 'hasless' trick: + // https://graphics.stanford.edu/~seander/bithacks.html#HasLessInWord + stbsp__uint32 v, c; + v = *(stbsp__uint32 *)f; + c = (~v) & 0x80808080; + 22a2: 808087b7 lui a5,0x80808 + if (((v ^ 0x25252525) - 0x01010101) & c) + 22a6: 252523b7 lui t2,0x25252 + 22aa: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x25249765> +{ + 22ae: 29913c23 sd s9,664(sp) + 22b2: 29b13423 sd s11,648(sp) + int tlen = 0; + 22b6: 4c81 li s9,0 + if (((v ^ 0x25252525) - 0x01010101) & c) + 22b8: feff0db7 lui s11,0xfeff0 + c = (~v) & 0x80808080; + 22bc: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff807ff2c0> +{ + 22c0: 2e813023 sd s0,736(sp) + 22c4: 2c913c23 sd s1,728(sp) + 22c8: 2d213823 sd s2,720(sp) + 22cc: 2d313423 sd s3,712(sp) + 22d0: 2b713423 sd s7,680(sp) + 22d4: 2b813023 sd s8,672(sp) + 22d8: 29a13823 sd s10,656(sp) + 22dc: 2e113423 sd ra,744(sp) + 22e0: 8d66 mv s10,s9 + 22e2: 8432 mv s0,a2 + 22e4: 8c9e mv s9,t2 + 22e6: 89aa mv s3,a0 + 22e8: e42e sd a1,8(sp) + 22ea: 84b6 mv s1,a3 + 22ec: 8bba mv s7,a4 + 22ee: fc02 sd zero,56(sp) + for (;;) { + 22f0: 8932 mv s2,a2 + if (((v ^ 0x25252525) - 0x01010101) & c) + 22f2: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe713f> + goto schk1; + if ((v - 0x01010101) & c) + goto schk2; + if (callback) + if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) + 22f6: 20000c13 li s8,512 + 22fa: 83be mv t2,a5 + while (((stbsp__uintptr)f) & 3) { + 22fc: 0034f793 andi a5,s1,3 + 2300: c7a9 beqz a5,234a + if (f[0] == '%') + 2302: 0004c783 lbu a5,0(s1) + 2306: 02500713 li a4,37 + 230a: 0ee78263 beq a5,a4,23ee + if (f[0] == 0) + 230e: cbd9 beqz a5,23a4 + stbsp__chk_cb_buf(1); + 2310: 02098663 beqz s3,233c + 2314: 4124063b subw a2,s0,s2 + 2318: 1fe00713 li a4,510 + 231c: 02c75063 bge a4,a2,233c + 2320: 65a2 ld a1,8(sp) + 2322: 854a mv a0,s2 + 2324: e81e sd t2,16(sp) + 2326: 00cd0d3b addw s10,s10,a2 + 232a: 9982 jalr s3 + 232c: 892a mv s2,a0 + 232e: e119 bnez a0,2334 + 2330: 0200106f j 3350 + *bf++ = f[0]; + 2334: 0004c783 lbu a5,0(s1) + stbsp__chk_cb_buf(1); + 2338: 63c2 ld t2,16(sp) + 233a: 842a mv s0,a0 + ++f; + 233c: 0485 addi s1,s1,1 + *bf++ = f[0]; + 233e: 00f40023 sb a5,0(s0) + while (((stbsp__uintptr)f) & 3) { + 2342: 0034f793 andi a5,s1,3 + *bf++ = f[0]; + 2346: 0405 addi s0,s0,1 + while (((stbsp__uintptr)f) & 3) { + 2348: ffcd bnez a5,2302 + v = *(stbsp__uint32 *)f; + 234a: 4094 lw a3,0(s1) + c = (~v) & 0x80808080; + 234c: fff6c793 not a5,a3 + if (((v ^ 0x25252525) - 0x01010101) & c) + 2350: 0196c733 xor a4,a3,s9 + c = (~v) & 0x80808080; + 2354: 0077f7b3 and a5,a5,t2 + if (((v ^ 0x25252525) - 0x01010101) & c) + 2358: 01b7073b addw a4,a4,s11 + 235c: 8f7d and a4,a4,a5 + 235e: 2701 sext.w a4,a4 + 2360: f34d bnez a4,2302 + if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) + 2362: 460d li a2,3 + 2364: a805 j 2394 + if (callback) + 2366: 00098863 beqz s3,2376 + if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) + 236a: 412407b3 sub a5,s0,s2 + 236e: 40fc07bb subw a5,s8,a5 + 2372: f8f658e3 bge a2,a5,2302 + bf[2] = f[2]; + bf[3] = f[3]; + } else + #endif + { + *(stbsp__uint32 *)bf = v; + 2376: c014 sw a3,0(s0) + v = *(stbsp__uint32 *)f; + 2378: 40d4 lw a3,4(s1) + } + bf += 4; + 237a: 0411 addi s0,s0,4 + f += 4; + 237c: 0491 addi s1,s1,4 + c = (~v) & 0x80808080; + 237e: fff6c793 not a5,a3 + if (((v ^ 0x25252525) - 0x01010101) & c) + 2382: 0196c733 xor a4,a3,s9 + c = (~v) & 0x80808080; + 2386: 0077f7b3 and a5,a5,t2 + if (((v ^ 0x25252525) - 0x01010101) & c) + 238a: 01b7073b addw a4,a4,s11 + 238e: 8f7d and a4,a4,a5 + 2390: 2701 sext.w a4,a4 + 2392: fb25 bnez a4,2302 + if ((v - 0x01010101) & c) + 2394: 01b6873b addw a4,a3,s11 + 2398: 8ff9 and a5,a5,a4 + 239a: 2781 sext.w a5,a5 + 239c: d7e9 beqz a5,2366 + if (f[0] == 0) + 239e: 0004c783 lbu a5,0(s1) + 23a2: f7bd bnez a5,2310 +endfmt: + + if (!callback) + *bf = 0; + else + stbsp__flush_cb(); + 23a4: 8cea mv s9,s10 + 23a6: 412404bb subw s1,s0,s2 + if (!callback) + 23aa: 70098563 beqz s3,2ab4 + stbsp__flush_cb(); + 23ae: 00905663 blez s1,23ba + 23b2: 65a2 ld a1,8(sp) + 23b4: 8626 mv a2,s1 + 23b6: 854a mv a0,s2 + 23b8: 9982 jalr s3 + 23ba: 009c8cbb addw s9,s9,s1 + +done: + return tlen + (int)(bf - buf); +} + 23be: 2e813083 ld ra,744(sp) + 23c2: 2e013403 ld s0,736(sp) + 23c6: 2d813483 ld s1,728(sp) + 23ca: 2d013903 ld s2,720(sp) + 23ce: 2c813983 ld s3,712(sp) + 23d2: 2a813b83 ld s7,680(sp) + 23d6: 2a013c03 ld s8,672(sp) + 23da: 29013d03 ld s10,656(sp) + 23de: 28813d83 ld s11,648(sp) + 23e2: 8566 mv a0,s9 + 23e4: 29813c83 ld s9,664(sp) + 23e8: 2f010113 addi sp,sp,752 + 23ec: 8082 ret + 23ee: 2d413023 sd s4,704(sp) + 23f2: 2b513c23 sd s5,696(sp) + 23f6: 2b613823 sd s6,688(sp) + tz = 0; + 23fa: 00248693 addi a3,s1,2 + fl = 0; + 23fe: 4e01 li t3,0 + switch (f[0]) { + 2400: 03f00593 li a1,63 + 2404: 00004617 auipc a2,0x4 + 2408: db460613 addi a2,a2,-588 # 61b8 <_GLOBAL__sub_I__ZSt3cin+0x210> + 240c: fff6c783 lbu a5,-1(a3) + 2410: fff68493 addi s1,a3,-1 + 2414: fe07871b addiw a4,a5,-32 + 2418: 0ff77713 zext.b a4,a4 + 241c: 00e5ec63 bltu a1,a4,2434 + 2420: 070a slli a4,a4,0x2 + 2422: 9732 add a4,a4,a2 + 2424: 4318 lw a4,0(a4) + 2426: 9732 add a4,a4,a2 + 2428: 8702 jr a4 + if (f[0] == '*') { + 242a: 0014c783 lbu a5,1(s1) + fl |= STBSP__LEADINGZERO; + 242e: 010e6e13 ori t3,t3,16 + ++f; + 2432: 0485 addi s1,s1,1 + if (f[0] == '*') { + 2434: 02a00713 li a4,42 + 2438: 0ce79163 bne a5,a4,24fa + fw = va_arg(va, stbsp__uint32); + 243c: 000bab03 lw s6,0(s7) + while ((f[0] >= '0') && (f[0] <= '9')) { + 2440: 0014c783 lbu a5,1(s1) + fw = va_arg(va, stbsp__uint32); + 2444: 0ba1 addi s7,s7,8 + ++f; + 2446: 0485 addi s1,s1,1 + if (f[0] == '.') { + 2448: 02e00713 li a4,46 + pr = -1; + 244c: 58fd li a7,-1 + if (f[0] == '.') { + 244e: 0ee78663 beq a5,a4,253a + switch (f[0]) { + 2452: 04900713 li a4,73 + 2456: 10e78263 beq a5,a4,255a + 245a: f987871b addiw a4,a5,-104 + 245e: 0ff77713 zext.b a4,a4 + 2462: 46c9 li a3,18 + 2464: 02e6e063 bltu a3,a4,2484 + 2468: 00004697 auipc a3,0x4 + 246c: e5068693 addi a3,a3,-432 # 62b8 <_GLOBAL__sub_I__ZSt3cin+0x310> + 2470: 070a slli a4,a4,0x2 + 2472: 9736 add a4,a4,a3 + 2474: 4318 lw a4,0(a4) + 2476: 9736 add a4,a4,a3 + 2478: 8702 jr a4 + if (f[0] == 'h') + 247a: 0014c783 lbu a5,1(s1) + fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; + 247e: 020e6e13 ori t3,t3,32 + ++f; + 2482: 0485 addi s1,s1,1 + switch (f[0]) { + 2484: fbf7871b addiw a4,a5,-65 + 2488: 0ff77713 zext.b a4,a4 + 248c: 03700693 li a3,55 + 2490: 0ee6ea63 bltu a3,a4,2584 + 2494: 00004697 auipc a3,0x4 + 2498: e7068693 addi a3,a3,-400 # 6304 <_GLOBAL__sub_I__ZSt3cin+0x35c> + 249c: 070a slli a4,a4,0x2 + 249e: 9736 add a4,a4,a3 + 24a0: 4318 lw a4,0(a4) + 24a2: 9736 add a4,a4,a3 + 24a4: 8702 jr a4 + fl |= STBSP__METRIC_NOSPACE; + 24a6: 400e6e13 ori t3,t3,1024 + continue; + 24aa: 0685 addi a3,a3,1 + 24ac: b785 j 240c + fl |= STBSP__LEFTJUST; + 24ae: 001e6e13 ori t3,t3,1 + continue; + 24b2: 0685 addi a3,a3,1 + 24b4: bfa1 j 240c + fl |= STBSP__LEADINGPLUS; + 24b6: 002e6e13 ori t3,t3,2 + continue; + 24ba: 0685 addi a3,a3,1 + 24bc: bf81 j 240c + fl |= STBSP__TRIPLET_COMMA; + 24be: 040e6e13 ori t3,t3,64 + continue; + 24c2: 0685 addi a3,a3,1 + 24c4: b7a1 j 240c + if (fl & STBSP__METRIC_SUFFIX) { + 24c6: 100e7793 andi a5,t3,256 + 24ca: 8772 mv a4,t3 + 24cc: 56078363 beqz a5,2a32 + if (fl & STBSP__METRIC_1024) { + 24d0: 6785 lui a5,0x1 + 24d2: 034e1513 slli a0,t3,0x34 + 24d6: 80078793 addi a5,a5,-2048 # 800 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x334> + 24da: 5c055863 bgez a0,2aaa + fl |= STBSP__METRIC_JEDEC; + 24de: 6785 lui a5,0x1 + 24e0: 8f5d or a4,a4,a5 + 24e2: 00070e1b sext.w t3,a4 + 24e6: 0685 addi a3,a3,1 + 24e8: b715 j 240c + fl |= STBSP__LEADING_0X; + 24ea: 008e6e13 ori t3,t3,8 + continue; + 24ee: 0685 addi a3,a3,1 + 24f0: bf31 j 240c + fl |= STBSP__LEADINGSPACE; + 24f2: 004e6e13 ori t3,t3,4 + continue; + 24f6: 0685 addi a3,a3,1 + 24f8: bf11 j 240c + while ((f[0] >= '0') && (f[0] <= '9')) { + 24fa: fd07871b addiw a4,a5,-48 # fd0 + 24fe: 0ff77713 zext.b a4,a4 + 2502: 4625 li a2,9 + fw = 0; + 2504: 4b01 li s6,0 + while ((f[0] >= '0') && (f[0] <= '9')) { + 2506: 46a5 li a3,9 + 2508: f4e660e3 bltu a2,a4,2448 + fw = fw * 10 + f[0] - '0'; + 250c: 002b171b slliw a4,s6,0x2 + 2510: 0167073b addw a4,a4,s6 + 2514: 0017171b slliw a4,a4,0x1 + f++; + 2518: 0485 addi s1,s1,1 + fw = fw * 10 + f[0] - '0'; + 251a: 9f3d addw a4,a4,a5 + while ((f[0] >= '0') && (f[0] <= '9')) { + 251c: 0004c783 lbu a5,0(s1) + fw = fw * 10 + f[0] - '0'; + 2520: fd070b1b addiw s6,a4,-48 + while ((f[0] >= '0') && (f[0] <= '9')) { + 2524: fd07871b addiw a4,a5,-48 + 2528: 0ff77713 zext.b a4,a4 + 252c: fee6f0e3 bgeu a3,a4,250c + if (f[0] == '.') { + 2530: 02e00713 li a4,46 + pr = -1; + 2534: 58fd li a7,-1 + if (f[0] == '.') { + 2536: f0e79ee3 bne a5,a4,2452 + if (f[0] == '*') { + 253a: 0014c783 lbu a5,1(s1) + 253e: 02a00713 li a4,42 + 2542: 52e79763 bne a5,a4,2a70 + while ((f[0] >= '0') && (f[0] <= '9')) { + 2546: 0024c783 lbu a5,2(s1) + switch (f[0]) { + 254a: 04900713 li a4,73 + pr = va_arg(va, stbsp__uint32); + 254e: 000ba883 lw a7,0(s7) + ++f; + 2552: 0489 addi s1,s1,2 + pr = va_arg(va, stbsp__uint32); + 2554: 0ba1 addi s7,s7,8 + switch (f[0]) { + 2556: f0e792e3 bne a5,a4,245a + if ((f[1] == '6') && (f[2] == '4')) { + 255a: 0014c783 lbu a5,1(s1) + 255e: 03600713 li a4,54 + 2562: 00e79463 bne a5,a4,256a + 2566: 1e60106f j 374c + } else if ((f[1] == '3') && (f[2] == '2')) { + 256a: 03300713 li a4,51 + 256e: 6ae796e3 bne a5,a4,341a + 2572: 0024c683 lbu a3,2(s1) + 2576: 03200713 li a4,50 + 257a: 00e69463 bne a3,a4,2582 + 257e: 0ae0106f j 362c + ++f; + 2582: 0485 addi s1,s1,1 + *s = f[0]; + 2584: 26f10fa3 sb a5,639(sp) + l = 1; + 2588: 4785 li a5,1 + 258a: d0be sw a5,96(sp) + lead[0] = 0; + 258c: 06010423 sb zero,104(sp) + tail[0] = 0; + 2590: 06010823 sb zero,112(sp) + dp = 0; + 2594: d282 sw zero,100(sp) + 2596: e0de sd s7,64(sp) + 2598: 4701 li a4,0 + 259a: 4301 li t1,0 + 259c: 4f81 li t6,0 + 259e: 4685 li a3,1 + 25a0: 4a01 li s4,0 + cs = 0; + 25a2: 4281 li t0,0 + s = num + STBSP__NUMSZ - 1; + 25a4: 27f10a93 addi s5,sp,639 + fw = fl = 0; + 25a8: 4e01 li t3,0 + tz = 0; + 25aa: 4881 li a7,0 + if (fl & STBSP__LEADINGZERO) // if leading zeros, everything is in pr + 25ac: 010e7793 andi a5,t3,16 + 25b0: 40078ee3 beqz a5,31cc + pr = (fw > pr) ? fw : pr; + 25b4: 87ba mv a5,a4 + 25b6: 00675363 bge a4,t1,25bc + 25ba: 879a mv a5,t1 + 25bc: 0007871b sext.w a4,a5 + fw = 0; + 25c0: 4301 li t1,0 + if (fw + pr) { + 25c2: 62070563 beqz a4,2bec + sn = lead + 1; + 25c6: 06910793 addi a5,sp,105 + 25ca: fcbe sd a5,120(sp) + while (lead[0]) { + 25cc: 0a0a0863 beqz s4,267c + stbsp__cb_buf_clamp(i, lead[0]); + 25d0: f026 sd s1,32(sp) + 25d2: f436 sd a3,40(sp) + 25d4: 854a mv a0,s2 + 25d6: 86d2 mv a3,s4 + 25d8: 84ce mv s1,s3 + stbsp__chk_cb_buf(1); + 25da: 1fe00b93 li s7,510 + stbsp__cb_buf_clamp(i, lead[0]); + 25de: 89be mv s3,a5 + 25e0: 20000b13 li s6,512 + 25e4: 87a2 mv a5,s0 + 25e6: e846 sd a7,16(sp) + 25e8: 846a mv s0,s10 + 25ea: ec7e sd t6,24(sp) + 25ec: 8d6e mv s10,s11 + 25ee: f872 sd t3,48(sp) + 25f0: 8de6 mv s11,s9 + 25f2: 8a3a mv s4,a4 + 25f4: e496 sd t0,72(sp) + 25f6: 891a mv s2,t1 + 25f8: 8c9e mv s9,t2 + 25fa: 0006871b sext.w a4,a3 + 25fe: 2e0482e3 beqz s1,30e2 + 2602: 40a7863b subw a2,a5,a0 + 2606: 40cb083b subw a6,s6,a2 + 260a: 85c2 mv a1,a6 + 260c: 01075363 bge a4,a6,2612 + 2610: 85ba mv a1,a4 + lead[0] -= (char)i; + 2612: 9e8d subw a3,a3,a1 + stbsp__cb_buf_clamp(i, lead[0]); + 2614: 0005871b sext.w a4,a1 + lead[0] -= (char)i; + 2618: 06d10423 sb a3,104(sp) + while (i) { + 261c: c70d beqz a4,2646 + 261e: 7866 ld a6,120(sp) + 2620: 02071593 slli a1,a4,0x20 + 2624: 9181 srli a1,a1,0x20 + 2626: 00b78633 add a2,a5,a1 + 262a: 8742 mv a4,a6 + *bf++ = *sn++; + 262c: 00074683 lbu a3,0(a4) + 2630: 0785 addi a5,a5,1 + while (i) { + 2632: 0705 addi a4,a4,1 + *bf++ = *sn++; + 2634: fed78fa3 sb a3,-1(a5) + while (i) { + 2638: fec79ae3 bne a5,a2,262c + 263c: 982e add a6,a6,a1 + 263e: fcc2 sd a6,120(sp) + stbsp__chk_cb_buf(1); + 2640: c899 beqz s1,2656 + 2642: 40a7863b subw a2,a5,a0 + 2646: 00cbd863 bge s7,a2,2656 + 264a: 65a2 ld a1,8(sp) + 264c: 9c31 addw s0,s0,a2 + 264e: 9482 jalr s1 + 2650: 34050ee3 beqz a0,31ac + 2654: 87aa mv a5,a0 + while (lead[0]) { + 2656: 06814683 lbu a3,104(sp) + 265a: f2c5 bnez a3,25fa + 265c: 83e6 mv t2,s9 + 265e: 68c2 ld a7,16(sp) + 2660: 8cee mv s9,s11 + 2662: 6fe2 ld t6,24(sp) + 2664: 8dea mv s11,s10 + 2666: 76a2 ld a3,40(sp) + 2668: 8d22 mv s10,s0 + 266a: 7e42 ld t3,48(sp) + 266c: 843e mv s0,a5 + 266e: 62a6 ld t0,72(sp) + 2670: 87ce mv a5,s3 + 2672: 89a6 mv s3,s1 + 2674: 7482 ld s1,32(sp) + 2676: 834a mv t1,s2 + 2678: 8752 mv a4,s4 + 267a: 892a mv s2,a0 + cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; + 267c: 040e7b13 andi s6,t3,64 + c = cs >> 24; + 2680: 0182d61b srliw a2,t0,0x18 + 2684: 0182db9b srliw s7,t0,0x18 + cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; + 2688: 4a01 li s4,0 + 268a: 000b0e63 beqz s6,26a6 + cs &= 0xffffff; + 268e: 02829a13 slli s4,t0,0x28 + 2692: 028a5a13 srli s4,s4,0x28 + cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; + 2696: 00ea0a3b addw s4,s4,a4 + 269a: 0016059b addiw a1,a2,1 + 269e: 02ba7a3b remuw s4,s4,a1 + 26a2: 41460a3b subw s4,a2,s4 + while (pr > 0) { + 26a6: 0ce05763 blez a4,2774 + *(stbsp__uint32 *)bf = 0x30303030; + 26aa: 30303837 lui a6,0x30303 + 26ae: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fa270> + 26b2: f026 sd s1,32(sp) + 26b4: 854a mv a0,s2 + 26b6: 84da mv s1,s6 + 26b8: 895e mv s2,s7 + 26ba: e4d6 sd s5,72(sp) + 26bc: 8b4e mv s6,s3 + 26be: 8aea mv s5,s10 + stbsp__chk_cb_buf(1); + 26c0: 1fe00293 li t0,510 + 26c4: 8d6e mv s10,s11 + *bf++ = stbsp__comma; + 26c6: 00005f17 auipc t5,0x5 + 26ca: 7a2f0f13 addi t5,t5,1954 # 7e68 + 26ce: 8de6 mv s11,s9 + *bf++ = '0'; + 26d0: 03000e93 li t4,48 + 26d4: e846 sd a7,16(sp) + 26d6: ec7e sd t6,24(sp) + 26d8: f436 sd a3,40(sp) + 26da: f872 sd t3,48(sp) + 26dc: e89a sd t1,80(sp) + 26de: 89ba mv s3,a4 + 26e0: ecbe sd a5,88(sp) + 26e2: 8bc2 mv s7,a6 + 26e4: 8c9e mv s9,t2 + stbsp__cb_buf_clamp(i, pr); + 26e6: 240b0ee3 beqz s6,3142 + 26ea: 40a407b3 sub a5,s0,a0 + 26ee: 40fc063b subw a2,s8,a5 + 26f2: 87b2 mv a5,a2 + 26f4: 00c9d363 bge s3,a2,26fa + 26f8: 87ce mv a5,s3 + 26fa: 0007859b sext.w a1,a5 + pr -= i; + 26fe: 40f989bb subw s3,s3,a5 + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + 2702: 32048c63 beqz s1,2a3a + while (i) { + 2706: 34058a63 beqz a1,2a5a + 270a: 1582 slli a1,a1,0x20 + *bf++ = stbsp__comma; + 270c: 0cdf4603 lbu a2,205(t5) + 2710: 9181 srli a1,a1,0x20 + 2712: 95a2 add a1,a1,s0 + 2714: 0405 addi s0,s0,1 + if ((fl & STBSP__TRIPLET_COMMA) && (cs++ == c)) { + 2716: c481 beqz s1,271e + 2718: 1d4901e3 beq s2,s4,30da + 271c: 2a05 addiw s4,s4,1 + *bf++ = '0'; + 271e: 03000793 li a5,48 + 2722: fef40fa3 sb a5,-1(s0) + while (i) { + 2726: fe8597e3 bne a1,s0,2714 + stbsp__chk_cb_buf(1); + 272a: 320b0b63 beqz s6,2a60 + 272e: 40a5863b subw a2,a1,a0 + 2732: 32c2d763 bge t0,a2,2a60 + 2736: 65a2 ld a1,8(sp) + 2738: 01560abb addw s5,a2,s5 + 273c: 9b02 jalr s6 + 273e: 3a050ce3 beqz a0,32f6 + 2742: 842a mv s0,a0 + 2744: 1fe00293 li t0,510 + 2748: 00005f17 auipc t5,0x5 + 274c: 720f0f13 addi t5,t5,1824 # 7e68 + 2750: 03000e93 li t4,48 + while (pr > 0) { + 2754: f93049e3 bgtz s3,26e6 + while (lead[0]) { + 2758: 83e6 mv t2,s9 + 275a: 68c2 ld a7,16(sp) + 275c: 8cee mv s9,s11 + 275e: 6fe2 ld t6,24(sp) + 2760: 8dea mv s11,s10 + 2762: 7482 ld s1,32(sp) + 2764: 8d56 mv s10,s5 + 2766: 76a2 ld a3,40(sp) + 2768: 7e42 ld t3,48(sp) + 276a: 6346 ld t1,80(sp) + 276c: 67e6 ld a5,88(sp) + 276e: 6aa6 ld s5,72(sp) + 2770: 892a mv s2,a0 + 2772: 89da mv s3,s6 + 2774: 06814a03 lbu s4,104(sp) + sn = lead + 1; + 2778: fcbe sd a5,120(sp) + while (lead[0]) { + 277a: 0a0a0263 beqz s4,281e + stbsp__cb_buf_clamp(i, lead[0]); + 277e: ec26 sd s1,24(sp) + 2780: f036 sd a3,32(sp) + 2782: 854a mv a0,s2 + 2784: 86d2 mv a3,s4 + 2786: 84ce mv s1,s3 + 2788: 87a2 mv a5,s0 + stbsp__chk_cb_buf(1); + 278a: 1fe00b93 li s7,510 + stbsp__cb_buf_clamp(i, lead[0]); + 278e: 846a mv s0,s10 + 2790: 20000b13 li s6,512 + 2794: 8d6e mv s10,s11 + 2796: e846 sd a7,16(sp) + 2798: 8de6 mv s11,s9 + 279a: 8a7e mv s4,t6 + 279c: 8972 mv s2,t3 + 279e: 899a mv s3,t1 + 27a0: 8c9e mv s9,t2 + 27a2: 0006871b sext.w a4,a3 + 27a6: 140482e3 beqz s1,30ea + 27aa: 40a7863b subw a2,a5,a0 + 27ae: 40cb083b subw a6,s6,a2 + 27b2: 85c2 mv a1,a6 + 27b4: 01075363 bge a4,a6,27ba + 27b8: 85ba mv a1,a4 + lead[0] -= (char)i; + 27ba: 9e8d subw a3,a3,a1 + stbsp__cb_buf_clamp(i, lead[0]); + 27bc: 0005871b sext.w a4,a1 + lead[0] -= (char)i; + 27c0: 06d10423 sb a3,104(sp) + while (i) { + 27c4: c70d beqz a4,27ee + 27c6: 7866 ld a6,120(sp) + 27c8: 02071593 slli a1,a4,0x20 + 27cc: 9181 srli a1,a1,0x20 + 27ce: 00b78633 add a2,a5,a1 + 27d2: 8742 mv a4,a6 + *bf++ = *sn++; + 27d4: 00074683 lbu a3,0(a4) + 27d8: 0785 addi a5,a5,1 + while (i) { + 27da: 0705 addi a4,a4,1 + *bf++ = *sn++; + 27dc: fed78fa3 sb a3,-1(a5) + while (i) { + 27e0: fec79ae3 bne a5,a2,27d4 + 27e4: 982e add a6,a6,a1 + 27e6: fcc2 sd a6,120(sp) + stbsp__chk_cb_buf(1); + 27e8: c899 beqz s1,27fe + 27ea: 40a7863b subw a2,a5,a0 + 27ee: 00cbd863 bge s7,a2,27fe + 27f2: 65a2 ld a1,8(sp) + 27f4: 9c31 addw s0,s0,a2 + 27f6: 9482 jalr s1 + 27f8: 1a050ae3 beqz a0,31ac + 27fc: 87aa mv a5,a0 + while (lead[0]) { + 27fe: 06814683 lbu a3,104(sp) + 2802: f2c5 bnez a3,27a2 + 2804: 834e mv t1,s3 + 2806: 68c2 ld a7,16(sp) + 2808: 89a6 mv s3,s1 + 280a: 7682 ld a3,32(sp) + 280c: 64e2 ld s1,24(sp) + 280e: 8e4a mv t3,s2 + 2810: 83e6 mv t2,s9 + 2812: 8fd2 mv t6,s4 + 2814: 8cee mv s9,s11 + 2816: 892a mv s2,a0 + 2818: 8dea mv s11,s10 + 281a: 8d22 mv s10,s0 + 281c: 843e mv s0,a5 + while (n) { + 281e: c6f9 beqz a3,28ec + STBSP__UNALIGNED(while (i >= 4) { + 2820: ec26 sd s1,24(sp) + 2822: 854a mv a0,s2 + 2824: 84d6 mv s1,s5 + 2826: 896a mv s2,s10 + 2828: 87a2 mv a5,s0 + 282a: 8d6e mv s10,s11 + stbsp__chk_cb_buf(1); + 282c: 1fe00b93 li s7,510 + STBSP__UNALIGNED(while (i >= 4) { + 2830: 8de6 mv s11,s9 + stbsp__cb_buf_clamp(i, n); + 2832: 20000b13 li s6,512 + STBSP__UNALIGNED(while (i >= 4) { + 2836: 4a0d li s4,3 + 2838: e87e sd t6,16(sp) + 283a: f072 sd t3,32(sp) + 283c: 8ac6 mv s5,a7 + 283e: f41a sd t1,40(sp) + 2840: 8436 mv s0,a3 + 2842: 8c9e mv s9,t2 + stbsp__cb_buf_clamp(i, n); + 2844: 0004071b sext.w a4,s0 + 2848: 100982e3 beqz s3,314c + 284c: 40a78633 sub a2,a5,a0 + 2850: 40cb05bb subw a1,s6,a2 + 2854: 862e mv a2,a1 + 2856: 00b75363 bge a4,a1,285c + 285a: 863a mv a2,a4 + 285c: 0006071b sext.w a4,a2 + n -= i; + 2860: 9c11 subw s0,s0,a2 + STBSP__UNALIGNED(while (i >= 4) { + 2862: 14ea50e3 bge s4,a4,31a2 + 2866: ffc70f1b addiw t5,a4,-4 + 286a: 002f5e9b srliw t4,t5,0x2 + 286e: 001e8e1b addiw t3,t4,1 + 2872: 0e0a slli t3,t3,0x2 + 2874: 01c785b3 add a1,a5,t3 + 2878: 8626 mv a2,s1 + 287a: 4218 lw a4,0(a2) + 287c: 0791 addi a5,a5,4 + 287e: 0611 addi a2,a2,4 + 2880: 2701 sext.w a4,a4 + 2882: fee7ae23 sw a4,-4(a5) + 2886: feb79ae3 bne a5,a1,287a + 288a: 002e9e9b slliw t4,t4,0x2 + 288e: 41df073b subw a4,t5,t4 + while (i) { + 2892: 94f2 add s1,s1,t3 + 2894: c31d beqz a4,28ba + 2896: 8626 mv a2,s1 + 2898: 87ae mv a5,a1 + 289a: 00e58f3b addw t5,a1,a4 + *bf++ = *s++; + 289e: 00064e83 lbu t4,0(a2) + 28a2: 0785 addi a5,a5,1 + while (i) { + 28a4: 00078e1b sext.w t3,a5 + *bf++ = *s++; + 28a8: ffd78fa3 sb t4,-1(a5) + 28ac: 0605 addi a2,a2,1 + while (i) { + 28ae: ffcf18e3 bne t5,t3,289e + 28b2: 1702 slli a4,a4,0x20 + 28b4: 9301 srli a4,a4,0x20 + 28b6: 95ba add a1,a1,a4 + 28b8: 94ba add s1,s1,a4 + stbsp__chk_cb_buf(1); + 28ba: 1a098763 beqz s3,2a68 + 28be: 40a5863b subw a2,a1,a0 + 28c2: 1acbd363 bge s7,a2,2a68 + 28c6: 65a2 ld a1,8(sp) + 28c8: 0126093b addw s2,a2,s2 + 28cc: 9982 jalr s3 + 28ce: 20050be3 beqz a0,32e4 + 28d2: 87aa mv a5,a0 + while (n) { + 28d4: f825 bnez s0,2844 + 28d6: 6fc2 ld t6,16(sp) + 28d8: 64e2 ld s1,24(sp) + 28da: 7e02 ld t3,32(sp) + 28dc: 7322 ld t1,40(sp) + 28de: 83e6 mv t2,s9 + 28e0: 88d6 mv a7,s5 + 28e2: 8cee mv s9,s11 + 28e4: 843e mv s0,a5 + 28e6: 8dea mv s11,s10 + 28e8: 8d4a mv s10,s2 + 28ea: 892a mv s2,a0 + while (tz) { + 28ec: 08088863 beqz a7,297c + *(stbsp__uint32 *)bf = 0x30303030; + 28f0: 30303b37 lui s6,0x30303 + *bf++ = '0'; + 28f4: 03000a13 li s4,48 + while (i >= 4) { + 28f8: 4a8d li s5,3 + stbsp__chk_cb_buf(1); + 28fa: 1fe00693 li a3,510 + *(stbsp__uint32 *)bf = 0x30303030; + 28fe: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fa270> + stbsp__cb_buf_clamp(i, tz); + 2902: 20000b93 li s7,512 + 2906: 040989e3 beqz s3,3158 + 290a: 41240633 sub a2,s0,s2 + 290e: 40cb87bb subw a5,s7,a2 + 2912: 873e mv a4,a5 + 2914: 00f8d363 bge a7,a5,291a + 2918: 8746 mv a4,a7 + 291a: 0007079b sext.w a5,a4 + tz -= i; + 291e: 40e888bb subw a7,a7,a4 + while (i) { + 2922: 08078ee3 beqz a5,31be + if ((((stbsp__uintptr)bf) & 3) == 0) + 2926: 00347713 andi a4,s0,3 + 292a: e719 bnez a4,2938 + 292c: 0390006f j 3164 + 2930: 00347713 andi a4,s0,3 + 2934: 7a070f63 beqz a4,30f2 + *bf++ = '0'; + 2938: 01440023 sb s4,0(s0) + --i; + 293c: 37fd addiw a5,a5,-1 + *bf++ = '0'; + 293e: 0405 addi s0,s0,1 + while (i) { + 2940: fbe5 bnez a5,2930 + stbsp__chk_cb_buf(1); + 2942: 02098b63 beqz s3,2978 + 2946: 4124063b subw a2,s0,s2 + 294a: 02c6d763 bge a3,a2,2978 + 294e: 65a2 ld a1,8(sp) + 2950: 854a mv a0,s2 + 2952: f81e sd t2,48(sp) + 2954: f41a sd t1,40(sp) + 2956: f072 sd t3,32(sp) + 2958: ec7e sd t6,24(sp) + 295a: e846 sd a7,16(sp) + 295c: 00cd0d3b addw s10,s10,a2 + 2960: 9982 jalr s3 + 2962: 892a mv s2,a0 + 2964: 1a0502e3 beqz a0,3308 + 2968: 73c2 ld t2,48(sp) + 296a: 7322 ld t1,40(sp) + 296c: 7e02 ld t3,32(sp) + 296e: 6fe2 ld t6,24(sp) + 2970: 68c2 ld a7,16(sp) + 2972: 842a mv s0,a0 + 2974: 1fe00693 li a3,510 + while (tz) { + 2978: f80897e3 bnez a7,2906 + sn = tail + 1; + 297c: 07110793 addi a5,sp,113 + 2980: fcbe sd a5,120(sp) + while (tail[0]) { + 2982: 080f8763 beqz t6,2a10 + stbsp__cb_buf_clamp(i, tail[0]); + 2986: 854a mv a0,s2 + 2988: 8b6a mv s6,s10 + stbsp__chk_cb_buf(1); + 298a: 1fe00a93 li s5,510 + stbsp__cb_buf_clamp(i, tail[0]); + 298e: 8d4e mv s10,s3 + 2990: 20000a13 li s4,512 + 2994: 8bf2 mv s7,t3 + 2996: 891a mv s2,t1 + 2998: 899e mv s3,t2 + 299a: 000f879b sext.w a5,t6 + 299e: 7c0d0863 beqz s10,316e + 29a2: 40a4063b subw a2,s0,a0 + 29a6: 40ca06bb subw a3,s4,a2 + 29aa: 8736 mv a4,a3 + 29ac: 00d7d363 bge a5,a3,29b2 + 29b0: 873e mv a4,a5 + tail[0] -= (char)i; + 29b2: 40ef8fbb subw t6,t6,a4 + stbsp__cb_buf_clamp(i, tail[0]); + 29b6: 0007079b sext.w a5,a4 + tail[0] -= (char)i; + 29ba: 07f10823 sb t6,112(sp) + while (i) { + 29be: c795 beqz a5,29ea + 29c0: 75e6 ld a1,120(sp) + 29c2: 02079613 slli a2,a5,0x20 + 29c6: 9201 srli a2,a2,0x20 + 29c8: 00c406b3 add a3,s0,a2 + 29cc: 87ae mv a5,a1 + *bf++ = *sn++; + 29ce: 0007c703 lbu a4,0(a5) + 29d2: 0405 addi s0,s0,1 + while (i) { + 29d4: 0785 addi a5,a5,1 + *bf++ = *sn++; + 29d6: fee40fa3 sb a4,-1(s0) + while (i) { + 29da: fed41ae3 bne s0,a3,29ce + 29de: 95b2 add a1,a1,a2 + 29e0: fcae sd a1,120(sp) + stbsp__chk_cb_buf(1); + 29e2: 000d0d63 beqz s10,29fc + 29e6: 40a4063b subw a2,s0,a0 + 29ea: 00cad963 bge s5,a2,29fc + 29ee: 65a2 ld a1,8(sp) + 29f0: 00cb0b3b addw s6,s6,a2 + 29f4: 9d02 jalr s10 + 29f6: 200509e3 beqz a0,3408 + 29fa: 842a mv s0,a0 + while (tail[0]) { + 29fc: 07014f83 lbu t6,112(sp) + 2a00: f80f9de3 bnez t6,299a + 2a04: 834a mv t1,s2 + 2a06: 83ce mv t2,s3 + 2a08: 8e5e mv t3,s7 + 2a0a: 89ea mv s3,s10 + 2a0c: 892a mv s2,a0 + 2a0e: 8d5a mv s10,s6 + if (fl & STBSP__LEFTJUST) + 2a10: 001e7e13 andi t3,t3,1 + 2a14: 000e0663 beqz t3,2a20 + if (fw > 0) { + 2a18: 00605463 blez t1,2a20 + 2a1c: 0300106f j 3a4c + for (;;) { + 2a20: 6b86 ld s7,64(sp) + 2a22: 2c013a03 ld s4,704(sp) + 2a26: 2b813a83 ld s5,696(sp) + 2a2a: 2b013b03 ld s6,688(sp) + ++f; + 2a2e: 0485 addi s1,s1,1 + for (;;) { + 2a30: b0f1 j 22fc + fl |= STBSP__METRIC_SUFFIX; + 2a32: 100e6e13 ori t3,t3,256 + continue; + 2a36: 0685 addi a3,a3,1 + 2a38: bad1 j 240c + while (i) { + 2a3a: 0e0580e3 beqz a1,331a + if ((((stbsp__uintptr)bf) & 3) == 0) + 2a3e: 00347793 andi a5,s0,3 + 2a42: e799 bnez a5,2a50 + 2a44: 0dd0006f j 3320 + 2a48: 00347793 andi a5,s0,3 + 2a4c: 72078463 beqz a5,3174 + *bf++ = '0'; + 2a50: 01d40023 sb t4,0(s0) + --i; + 2a54: 35fd addiw a1,a1,-1 + *bf++ = '0'; + 2a56: 0405 addi s0,s0,1 + while (i) { + 2a58: f9e5 bnez a1,2a48 + while (i) { + 2a5a: 85a2 mv a1,s0 + stbsp__chk_cb_buf(1); + 2a5c: cc0b19e3 bnez s6,272e + 2a60: 842e mv s0,a1 + while (pr > 0) { + 2a62: c93042e3 bgtz s3,26e6 + 2a66: b9cd j 2758 + while (i) { + 2a68: 87ae mv a5,a1 + while (n) { + 2a6a: dc041de3 bnez s0,2844 + 2a6e: b5a5 j 28d6 + while ((f[0] >= '0') && (f[0] <= '9')) { + 2a70: fd07871b addiw a4,a5,-48 + 2a74: 0ff77713 zext.b a4,a4 + 2a78: 4625 li a2,9 + ++f; + 2a7a: 0485 addi s1,s1,1 + pr = 0; + 2a7c: 4881 li a7,0 + while ((f[0] >= '0') && (f[0] <= '9')) { + 2a7e: 46a5 li a3,9 + 2a80: 9ce669e3 bltu a2,a4,2452 + pr = pr * 10 + f[0] - '0'; + 2a84: 0028971b slliw a4,a7,0x2 + 2a88: 0117073b addw a4,a4,a7 + 2a8c: 0017171b slliw a4,a4,0x1 + f++; + 2a90: 0485 addi s1,s1,1 + pr = pr * 10 + f[0] - '0'; + 2a92: 9f3d addw a4,a4,a5 + while ((f[0] >= '0') && (f[0] <= '9')) { + 2a94: 0004c783 lbu a5,0(s1) + pr = pr * 10 + f[0] - '0'; + 2a98: fd07089b addiw a7,a4,-48 + while ((f[0] >= '0') && (f[0] <= '9')) { + 2a9c: fd07871b addiw a4,a5,-48 + 2aa0: 0ff77713 zext.b a4,a4 + 2aa4: fee6f0e3 bgeu a3,a4,2a84 + 2aa8: b26d j 2452 + fl |= STBSP__METRIC_1024; + 2aaa: 8f5d or a4,a4,a5 + 2aac: 00070e1b sext.w t3,a4 + 2ab0: 0685 addi a3,a3,1 + 2ab2: baa9 j 240c + *bf = 0; + 2ab4: 00040023 sb zero,0(s0) + 2ab8: b209 j 23ba + if (f[0] == 'l') { + 2aba: 0014c783 lbu a5,1(s1) + 2abe: 06c00713 li a4,108 + fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); + 2ac2: 020e6e13 ori t3,t3,32 + if (f[0] == 'l') { + 2ac6: 00e78c63 beq a5,a4,2ade + ++f; + 2aca: 0485 addi s1,s1,1 + 2acc: ba65 j 2484 + if (f[0] == 'h') + 2ace: 0014c783 lbu a5,1(s1) + 2ad2: 06800713 li a4,104 + fl |= STBSP__HALFWIDTH; + 2ad6: 200e6e13 ori t3,t3,512 + if (f[0] == 'h') + 2ada: fee798e3 bne a5,a4,2aca + if ((f[1] == '6') && (f[2] == '4')) { + 2ade: 0024c783 lbu a5,2(s1) + ++f; + 2ae2: 0489 addi s1,s1,2 + 2ae4: b245 j 2484 + s = va_arg(va, char *); + 2ae6: 008b8713 addi a4,s7,8 + 2aea: e0ba sd a4,64(sp) + if (fl & STBSP__INTMAX) { + 2aec: 020e7693 andi a3,t3,32 + 2af0: 8772 mv a4,t3 + 2af2: 24069ee3 bnez a3,354e + stbsp__int32 i = va_arg(va, stbsp__int32); + 2af6: 000ba683 lw a3,0(s7) + if ((f[0] != 'u') && (i < 0)) { + 2afa: 07500613 li a2,117 + n64 = (stbsp__uint32)i; + 2afe: 02069f13 slli t5,a3,0x20 + 2b02: 020f5f13 srli t5,t5,0x20 + if ((f[0] != 'u') && (i < 0)) { + 2b06: 00c78a63 beq a5,a2,2b1a + 2b0a: 0006d863 bgez a3,2b1a + fl |= STBSP__NEGATIVE; + 2b0e: 08076713 ori a4,a4,128 + n64 = (stbsp__uint32)-i; + 2b12: 40d00f3b negw t5,a3 + fl |= STBSP__NEGATIVE; + 2b16: 00070e1b sext.w t3,a4 + if (fl & STBSP__METRIC_SUFFIX) { + 2b1a: 100e7693 andi a3,t3,256 + 2b1e: 5c0683e3 beqz a3,38e4 + if (n64 < 1024) + 2b22: 3ff00793 li a5,1023 + 2b26: 01e7e463 bltu a5,t5,2b2e + 2b2a: 0ea0106f j 3c14 + else if (pr == -1) + 2b2e: 57fd li a5,-1 + 2b30: 30f887e3 beq a7,a5,363e + fv = (double)(stbsp__int64)n64; + 2b34: d22f7553 fcvt.d.l fa0,t5 + if (fl & STBSP__METRIC_1024) + 2b38: 034e1793 slli a5,t3,0x34 + 2b3c: 0007c463 bltz a5,2b44 + 2b40: 2300106f j 3d70 + divisor = 1024.0; + 2b44: 00004797 auipc a5,0x4 + 2b48: d647b787 fld fa5,-668(a5) # 68a8 + if ((fv < divisor) && (fv > -divisor)) + 2b4c: 22f79753 fneg.d fa4,fa5 + fl += 0x1000000; + 2b50: 010006b7 lui a3,0x1000 + while (fl < 0x4000000) { + 2b54: 04000737 lui a4,0x4000 + if ((fv < divisor) && (fv > -divisor)) + 2b58: a2f517d3 flt.d a5,fa0,fa5 + 2b5c: c789 beqz a5,2b66 + 2b5e: a2a717d3 flt.d a5,fa4,fa0 + 2b62: 3e079863 bnez a5,2f52 + fl += 0x1000000; + 2b66: 01c68e3b addw t3,a3,t3 + fv /= divisor; + 2b6a: 1af57553 fdiv.d fa0,fa0,fa5 + while (fl < 0x4000000) { + 2b6e: feee65e3 bltu t3,a4,2b58 + 2b72: a6c5 j 2f52 + h = (f[0] == 'X') ? hexu : hex; + 2b74: 05800693 li a3,88 + if (fl & STBSP__INTMAX) { + 2b78: 020e7713 andi a4,t3,32 + h = (f[0] == 'X') ? hexu : hex; + 2b7c: 00005817 auipc a6,0x5 + 2b80: 3d480813 addi a6,a6,980 # 7f50 + 2b84: 00d79663 bne a5,a3,2b90 + 2b88: 00005817 auipc a6,0x5 + 2b8c: 3b080813 addi a6,a6,944 # 7f38 + l = (4 << 4) | (4 << 8); + 2b90: 44000793 li a5,1088 + 2b94: d0be sw a5,96(sp) + if (fl & STBSP__LEADING_0X) { + 2b96: 008e7793 andi a5,t3,8 + 2b9a: 7a079263 bnez a5,333e + lead[0] = 0; + 2b9e: 06010423 sb zero,104(sp) + s = va_arg(va, char *); + 2ba2: 008b8793 addi a5,s7,8 + 2ba6: e0be sd a5,64(sp) + if (fl & STBSP__INTMAX) + 2ba8: 72070b63 beqz a4,32de + n64 = va_arg(va, stbsp__uint64); + 2bac: 000bb683 ld a3,0(s7) + dp = 0; + 2bb0: d282 sw zero,100(sp) + tail[0] = 0; + 2bb2: 06010823 sb zero,112(sp) + if ((fl & STBSP__LEFTJUST) == 0) { + 2bb6: 001e7513 andi a0,t3,1 + if (n64 == 0) { + 2bba: 380694e3 bnez a3,3742 + lead[0] = 0; + 2bbe: 06010423 sb zero,104(sp) + if (pr == 0) { + 2bc2: 78089a63 bnez a7,3356 + if (fw < (stbsp__int32)n) + 2bc6: fffb4313 not t1,s6 + 2bca: 43f35313 srai t1,t1,0x3f + l = 0; + 2bce: d082 sw zero,96(sp) + if (fw < (stbsp__int32)n) + 2bd0: 01637333 and t1,t1,s6 + goto scopy; + 2bd4: 4701 li a4,0 + 2bd6: 4f81 li t6,0 + 2bd8: 4a01 li s4,0 + cs = 0; + 2bda: 4281 li t0,0 + s = num + STBSP__NUMSZ; + 2bdc: 28010a93 addi s5,sp,640 + if ((fl & STBSP__LEFTJUST) == 0) { + 2be0: 9c0506e3 beqz a0,25ac + if (fw + pr) { + 2be4: 00e307bb addw a5,t1,a4 + 2be8: 9c079fe3 bnez a5,25c6 + 2bec: 06910793 addi a5,sp,105 + 2bf0: b661 j 2778 + h = (f[0] == 'E') ? hexu : hex; + 2bf2: 04500713 li a4,69 + 2bf6: 00005317 auipc t1,0x5 + 2bfa: 35a30313 addi t1,t1,858 # 7f50 + 2bfe: 1ce78ae3 beq a5,a4,35d2 + fv = va_arg(va, double); + 2c02: 008b8713 addi a4,s7,8 + if (pr == -1) + 2c06: 57fd li a5,-1 + fv = va_arg(va, double); + 2c08: e0ba sd a4,64(sp) + 2c0a: 000bb507 fld fa0,0(s7) + if (pr == -1) + 2c0e: 1af88ce3 beq a7,a5,35c6 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) + 2c12: 80000737 lui a4,0x80000 + 2c16: 00e8e733 or a4,a7,a4 + 2c1a: 2701 sext.w a4,a4 + 2c1c: 10d4 addi a3,sp,100 + 2c1e: 0110 addi a2,sp,128 + 2c20: 108c addi a1,sp,96 + 2c22: 18a8 addi a0,sp,120 + 2c24: f41e sd t2,40(sp) + 2c26: f01a sd t1,32(sp) + 2c28: ec72 sd t3,24(sp) + 2c2a: e846 sd a7,16(sp) + 2c2c: d8efe0ef jal 11ba + 2c30: 68c2 ld a7,16(sp) + 2c32: 6e62 ld t3,24(sp) + 2c34: 7302 ld t1,32(sp) + 2c36: 73a2 ld t2,40(sp) + if (dp == STBSP__SPECIAL) { + 2c38: 5796 lw a5,100(sp) + s = (char *)sn; + 2c3a: 7ae6 ld s5,120(sp) + if ((l - 1) > (stbsp__uint32)pr) + 2c3c: 5686 lw a3,96(sp) + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) + 2c3e: 3c0511e3 bnez a0,3800 + tail[0] = 0; + 2c42: 06010823 sb zero,112(sp) + sign[0] = 0; + 2c46: 06010423 sb zero,104(sp) + } else if (fl & STBSP__LEADINGSPACE) { + 2c4a: 004e7713 andi a4,t3,4 + 2c4e: 6a070ee3 beqz a4,3b0a + sign[0] = 1; + 2c52: 6709 lui a4,0x2 + 2c54: 0705 addi a4,a4,1 # 2001 <_vscanf_core.constprop.0+0x6b9> + 2c56: 06e11423 sh a4,104(sp) + if (dp == STBSP__SPECIAL) { + 2c5a: 671d lui a4,0x7 + 2c5c: 1ee794e3 bne a5,a4,3644 + if (pr < (stbsp__int32)l) + 2c60: 0006879b sext.w a5,a3 + n = pr + lead[0] + tail[0] + tz; + 2c64: 06814a03 lbu s4,104(sp) + if (pr < (stbsp__int32)l) + 2c68: fff7c793 not a5,a5 + n = pr + lead[0] + tail[0] + tz; + 2c6c: 07014f83 lbu t6,112(sp) + if (pr < (stbsp__int32)l) + 2c70: 97fd srai a5,a5,0x3f + 2c72: 8ff5 and a5,a5,a3 + n = pr + lead[0] + tail[0] + tz; + 2c74: 00fa073b addw a4,s4,a5 + 2c78: 01f7063b addw a2,a4,t6 + 2c7c: 8732 mv a4,a2 + if ((fl & STBSP__LEFTJUST) == 0) { + 2c7e: 001e7513 andi a0,t3,1 + if (pr < (stbsp__int32)l) + 2c82: 2781 sext.w a5,a5 + if (fw < (stbsp__int32)n) + 2c84: 835a mv t1,s6 + 2c86: 00cb5363 bge s6,a2,2c8c + 2c8a: 8332 mv t1,a2 + fw -= n; + 2c8c: 40e3033b subw t1,t1,a4 + cs = 0; + 2c90: 4281 li t0,0 + pr -= l; + 2c92: 40d7873b subw a4,a5,a3 + tz = 0; + 2c96: 4881 li a7,0 + goto scopy; + 2c98: b7a1 j 2be0 + h = (f[0] == 'G') ? hexu : hex; + 2c9a: 04700713 li a4,71 + 2c9e: 00005317 auipc t1,0x5 + 2ca2: 2b230313 addi t1,t1,690 # 7f50 + 2ca6: 14e783e3 beq a5,a4,35ec + fv = va_arg(va, double); + 2caa: 008b8713 addi a4,s7,8 + if (pr == -1) + 2cae: 57fd li a5,-1 + fv = va_arg(va, double); + 2cb0: e0ba sd a4,64(sp) + 2cb2: 000bb507 fld fa0,0(s7) + if (pr == -1) + 2cb6: 12f884e3 beq a7,a5,35de + else if (pr == 0) + 2cba: 6e0887e3 beqz a7,3ba8 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) + 2cbe: fff8871b addiw a4,a7,-1 + 2cc2: 800007b7 lui a5,0x80000 + 2cc6: 8f5d or a4,a4,a5 + 2cc8: 2701 sext.w a4,a4 + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + 2cca: 00088a9b sext.w s5,a7 + 2cce: 8a46 mv s4,a7 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) + 2cd0: 10d4 addi a3,sp,100 + 2cd2: 0110 addi a2,sp,128 + 2cd4: 108c addi a1,sp,96 + 2cd6: 18a8 addi a0,sp,120 + 2cd8: f01e sd t2,32(sp) + 2cda: ec1a sd t1,24(sp) + 2cdc: e872 sd t3,16(sp) + 2cde: cdcfe0ef jal 11ba + 2ce2: 6e42 ld t3,16(sp) + 2ce4: 6362 ld t1,24(sp) + 2ce6: 7382 ld t2,32(sp) + 2ce8: 4281 li t0,0 + 2cea: c509 beqz a0,2cf4 + fl |= STBSP__NEGATIVE; + 2cec: 080e6e13 ori t3,t3,128 + 2cf0: 08000293 li t0,128 + if (l > (stbsp__uint32)pr) + 2cf4: 5806 lw a6,96(sp) + 2cf6: 010af463 bgeu s5,a6,2cfe + l = pr; + 2cfa: d0d6 sw s5,96(sp) + 2cfc: 8856 mv a6,s5 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 2cfe: 4705 li a4,1 + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + 2d00: 5796 lw a5,100(sp) + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 2d02: 01076463 bltu a4,a6,2d0a + 2d06: 1800106f j 3e86 + 2d0a: 7be6 ld s7,120(sp) + 2d0c: fff8071b addiw a4,a6,-1 + 2d10: 1702 slli a4,a4,0x20 + 2d12: 9301 srli a4,a4,0x20 + 2d14: 001a0e9b addiw t4,s4,1 + 2d18: 75e2 ld a1,56(sp) + 2d1a: 8ade mv s5,s7 + 2d1c: 975e add a4,a4,s7 + 2d1e: 410e8ebb subw t4,t4,a6 + 2d22: 88d2 mv a7,s4 + 2d24: 86c2 mv a3,a6 + 2d26: 4f01 li t5,0 + 2d28: 03000f93 li t6,48 + 2d2c: e842 sd a6,16(sp) + 2d2e: a809 j 2d40 + --pr; + 2d30: 38fd addiw a7,a7,-1 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 2d32: 211e80e3 beq t4,a7,3732 + 2d36: 177d addi a4,a4,-1 # 6fff + 2d38: 4f05 li t5,1 + 2d3a: 1e088ce3 beqz a7,3732 + --l; + 2d3e: 85b6 mv a1,a3 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 2d40: 00074803 lbu a6,0(a4) + 2d44: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff723f> + 2d48: 0006851b sext.w a0,a3 + 2d4c: 2581 sext.w a1,a1 + 2d4e: 0006069b sext.w a3,a2 + 2d52: fdf80fe3 beq a6,t6,2d30 + 2d56: 6842 ld a6,16(sp) + 2d58: fc2e sd a1,56(sp) + 2d5a: 86c2 mv a3,a6 + 2d5c: 000f0463 beqz t5,2d64 + 2d60: d0ae sw a1,96(sp) + 2d62: 86ae mv a3,a1 + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + 2d64: 5775 li a4,-3 + 2d66: 08e7cee3 blt a5,a4,3602 + 2d6a: 08fa4be3 blt s4,a5,3600 + pr = (dp < (stbsp__int32)l) ? l - dp : 0; + 2d6e: 0005071b sext.w a4,a0 + if (dp > 0) { + 2d72: 7ef057e3 blez a5,3d60 + pr = (dp < (stbsp__int32)l) ? l - dp : 0; + 2d76: 4881 li a7,0 + 2d78: 00e7d463 bge a5,a4,2d80 + 2d7c: 40f508bb subw a7,a0,a5 + tail[0] = 0; + 2d80: 06010823 sb zero,112(sp) + if (fl & STBSP__NEGATIVE) { + 2d84: 20029463 bnez t0,2f8c + } else if (fl & STBSP__LEADINGSPACE) { + 2d88: 004e7713 andi a4,t3,4 + 2d8c: 000715e3 bnez a4,3596 + } else if (fl & STBSP__LEADINGPLUS) { + 2d90: 002e7713 andi a4,t3,2 + 2d94: 660719e3 bnez a4,3c06 + sign[0] = 0; + 2d98: 06010423 sb zero,104(sp) + 2d9c: aaed j 2f96 + h = (f[0] == 'A') ? hexu : hex; + 2d9e: 04100713 li a4,65 + 2da2: 00005597 auipc a1,0x5 + 2da6: 1ae58593 addi a1,a1,430 # 7f50 + 2daa: 00e783e3 beq a5,a4,35b0 + fv = va_arg(va, double); + 2dae: 008b8693 addi a3,s7,8 + if (pr == -1) + 2db2: 577d li a4,-1 + fv = va_arg(va, double); + 2db4: e0b6 sd a3,64(sp) + 2db6: 000bb783 ld a5,0(s7) + if (pr == -1) + 2dba: 7ee88963 beq a7,a4,35ac + d = value; + + STBSP__COPYFP(b, d); + + *bits = b & ((((stbsp__uint64)1) << 52) - 1); + *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); + 2dbe: 4347d613 srai a2,a5,0x34 + *bits = b & ((((stbsp__uint64)1) << 52) - 1); + 2dc2: 00c79513 slli a0,a5,0xc + *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); + 2dc6: 7ff67613 andi a2,a2,2047 + *bits = b & ((((stbsp__uint64)1) << 52) - 1); + 2dca: 8131 srli a0,a0,0xc + *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); + 2dcc: c016061b addiw a2,a2,-1023 + if (stbsp__real_to_parts((stbsp__int64 *)&n64, &dp, fv)) + 2dd0: 7a07c863 bltz a5,3580 + } else if (fl & STBSP__LEADINGSPACE) { + 2dd4: 004e7793 andi a5,t3,4 + 2dd8: 60078ee3 beqz a5,3bf4 + 2ddc: 6789 lui a5,0x2 + 2dde: 2785 addiw a5,a5,1 # 2001 <_vscanf_core.constprop.0+0x6b9> + sign[0] = 1; + 2de0: 06f11423 sh a5,104(sp) + 2de4: 468d li a3,3 + 2de6: 4a0d li s4,3 + 2de8: 4809 li a6,2 + n64 |= (((stbsp__uint64)1) << 52); + 2dea: 4705 li a4,1 + 2dec: 1752 slli a4,a4,0x34 + if (dp == -1023) + 2dee: c0100793 li a5,-1023 + n64 |= (((stbsp__uint64)1) << 52); + 2df2: 8f49 or a4,a4,a0 + if (dp == -1023) + 2df4: 5cf600e3 beq a2,a5,3bb4 + if (pr < 15) + 2df8: 4539 li a0,14 + n64 <<= (64 - 56); + 2dfa: 00871793 slli a5,a4,0x8 + if (pr < 15) + 2dfe: 251546e3 blt a0,a7,384a + n64 += ((((stbsp__uint64)8) << 56) >> (pr * 4)); + 2e02: 4705 li a4,1 + 2e04: 0028951b slliw a0,a7,0x2 + 2e08: 176e slli a4,a4,0x3b + 2e0a: 00a75733 srl a4,a4,a0 + 2e0e: 973e add a4,a4,a5 + *s++ = h[(n64 >> 60) & 15]; + 2e10: 03c75793 srli a5,a4,0x3c + 2e14: 97ae add a5,a5,a1 + 2e16: 0007c503 lbu a0,0(a5) + lead[1 + lead[0]] = '0'; + 2e1a: 22080793 addi a5,a6,544 + 2e1e: 06010813 addi a6,sp,96 + 2e22: 97c2 add a5,a5,a6 + 2e24: 03000813 li a6,48 + 2e28: df078423 sb a6,-536(a5) + lead[2 + lead[0]] = 'x'; + 2e2c: 22068793 addi a5,a3,544 + 2e30: 1094 addi a3,sp,96 + 2e32: 96be add a3,a3,a5 + 2e34: 07800793 li a5,120 + 2e38: def68423 sb a5,-536(a3) + lead[0] += 2; + 2e3c: 07410423 sb s4,104(sp) + *s++ = h[(n64 >> 60) & 15]; + 2e40: 0ca10023 sb a0,192(sp) + if (pr) + 2e44: 740893e3 bnez a7,3d8a + sn = s; + 2e48: 0c110793 addi a5,sp,193 + 2e4c: fcbe sd a5,120(sp) + 2e4e: 4701 li a4,0 + 2e50: 4501 li a0,0 + 2e52: 4305 li t1,1 + 2e54: 4685 li a3,1 + tail[1] = h[17]; + 2e56: 0115c583 lbu a1,17(a1) + tail[2] = '+'; + 2e5a: 02b00793 li a5,43 + tail[1] = h[17]; + 2e5e: 06b108a3 sb a1,113(sp) + if (dp < 0) { + 2e62: 00065663 bgez a2,2e6e + dp = -dp; + 2e66: 40c0063b negw a2,a2 + tail[2] = '-'; + 2e6a: 02d00793 li a5,45 + tail[n] = '0' + dp % 10; + 2e6e: 4829 li a6,10 + 2e70: 030665bb remw a1,a2,a6 + 2e74: 06f10923 sb a5,114(sp) + n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); + 2e78: 3e700e93 li t4,999 + tail[n] = '0' + dp % 10; + 2e7c: 0305859b addiw a1,a1,48 + 2e80: 0ff5f593 zext.b a1,a1 + n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); + 2e84: 18cec3e3 blt t4,a2,380a + 2e88: 06300e93 li t4,99 + 2e8c: 54cec1e3 blt t4,a2,3bce + 2e90: 4ea5 li t4,9 + 2e92: 72ced6e3 bge t4,a2,3dbe + dp /= 10; + 2e96: 030647bb divw a5,a2,a6 + tail[0] = (char)n; + 2e9a: 4611 li a2,4 + 2e9c: 06c10823 sb a2,112(sp) + tail[n] = '0' + dp % 10; + 2ea0: 06b10a23 sb a1,116(sp) + 2ea4: 4811 li a6,4 + 2ea6: 4f91 li t6,4 + 2ea8: 0307879b addiw a5,a5,48 + 2eac: 06f109a3 sb a5,115(sp) + n = pr + lead[0] + tail[0] + tz; + 2eb0: 006a07bb addw a5,s4,t1 + 2eb4: 010787bb addw a5,a5,a6 + 2eb8: 0117863b addw a2,a5,a7 + dp = (int)(s - sn); + 2ebc: d2aa sw a0,100(sp) + l = (int)(s - (num + 64)); + 2ebe: d0b6 sw a3,96(sp) + n = pr + lead[0] + tail[0] + tz; + 2ec0: 87b2 mv a5,a2 + if ((fl & STBSP__LEFTJUST) == 0) { + 2ec2: 001e7513 andi a0,t3,1 + if (fw < (stbsp__int32)n) + 2ec6: 835a mv t1,s6 + 2ec8: 00cb5363 bge s6,a2,2ece + 2ecc: 8332 mv t1,a2 + cs = 1 + (3 << 24); + 2ece: 030002b7 lui t0,0x3000 + fw -= n; + 2ed2: 40f3033b subw t1,t1,a5 + cs = 1 + (3 << 24); + 2ed6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7241> + s = num + 64; + 2ed8: 0c010a93 addi s5,sp,192 + goto scopy; + 2edc: b311 j 2be0 + h = (f[0] == 'B') ? hexu : hex; + 2ede: 04200713 li a4,66 + 2ee2: 00005817 auipc a6,0x5 + 2ee6: 06e80813 addi a6,a6,110 # 7f50 + 2eea: 6ce78963 beq a5,a4,35bc + if (fl & STBSP__LEADING_0X) { + 2eee: 008e7793 andi a5,t3,8 + 2ef2: 66079e63 bnez a5,356e + lead[0] = 0; + 2ef6: 06010423 sb zero,104(sp) + l = (8 << 4) | (1 << 8); + 2efa: 18000793 li a5,384 + 2efe: d0be sw a5,96(sp) + if (fl & STBSP__INTMAX) { + 2f00: 020e7713 andi a4,t3,32 + goto radixnum; + 2f04: b979 j 2ba2 + *s = (char)va_arg(va, int); + 2f06: 000ba783 lw a5,0(s7) + l = 1; + 2f0a: 4705 li a4,1 + 2f0c: d0ba sw a4,96(sp) + *s = (char)va_arg(va, int); + 2f0e: 26f10fa3 sb a5,639(sp) + 2f12: 008b8793 addi a5,s7,8 + lead[0] = 0; + 2f16: 06010423 sb zero,104(sp) + tail[0] = 0; + 2f1a: 06010823 sb zero,112(sp) + dp = 0; + 2f1e: d282 sw zero,100(sp) + *s = (char)va_arg(va, int); + 2f20: e0be sd a5,64(sp) + if ((fl & STBSP__LEFTJUST) == 0) { + 2f22: 001e7513 andi a0,t3,1 + if (fw < (stbsp__int32)n) + 2f26: 835a mv t1,s6 + 2f28: 69605063 blez s6,35a8 + fw -= n; + 2f2c: 337d addiw t1,t1,-1 + goto scopy; + 2f2e: 4701 li a4,0 + 2f30: 4f81 li t6,0 + 2f32: 4685 li a3,1 + 2f34: 4a01 li s4,0 + cs = 0; + 2f36: 4281 li t0,0 + s = num + STBSP__NUMSZ - 1; + 2f38: 27f10a93 addi s5,sp,639 + tz = 0; + 2f3c: 4881 li a7,0 + goto scopy; + 2f3e: b14d j 2be0 + fv = va_arg(va, double); + 2f40: 008b8713 addi a4,s7,8 + if (fl & STBSP__METRIC_SUFFIX) { + 2f44: 100e7793 andi a5,t3,256 + fv = va_arg(va, double); + 2f48: e0ba sd a4,64(sp) + 2f4a: 000bb507 fld fa0,0(s7) + if (fl & STBSP__METRIC_SUFFIX) { + 2f4e: be0795e3 bnez a5,2b38 + if (pr == -1) + 2f52: 57fd li a5,-1 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) + 2f54: 0008871b sext.w a4,a7 + if (pr == -1) + 2f58: 00f89463 bne a7,a5,2f60 + 2f5c: 4719 li a4,6 + pr = 6; // default is 6 + 2f5e: 4899 li a7,6 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) + 2f60: 10d4 addi a3,sp,100 + 2f62: 0110 addi a2,sp,128 + 2f64: 108c addi a1,sp,96 + 2f66: 18a8 addi a0,sp,120 + 2f68: f01e sd t2,32(sp) + 2f6a: ec72 sd t3,24(sp) + 2f6c: e846 sd a7,16(sp) + 2f6e: a4cfe0ef jal 11ba + 2f72: 6e62 ld t3,24(sp) + 2f74: 68c2 ld a7,16(sp) + 2f76: 7382 ld t2,32(sp) + if (dp == STBSP__SPECIAL) { + 2f78: 5796 lw a5,100(sp) + if ((stbsp__int32)(l + n) > pr) + 2f7a: 5686 lw a3,96(sp) + if (fl & STBSP__NEGATIVE) { + 2f7c: 080e7293 andi t0,t3,128 + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) + 2f80: e00500e3 beqz a0,2d80 + fl |= STBSP__NEGATIVE; + 2f84: 080e6e13 ori t3,t3,128 + tail[0] = 0; + 2f88: 06010823 sb zero,112(sp) + sign[0] = 1; + 2f8c: 670d lui a4,0x3 + 2f8e: d0170713 addi a4,a4,-767 # 2d01 + 2f92: 06e11423 sh a4,104(sp) + if (dp == STBSP__SPECIAL) { + 2f96: 671d lui a4,0x7 + 2f98: 7ce78963 beq a5,a4,376a + if (dp <= 0) { + 2f9c: 46f05fe3 blez a5,3c1a + cs = (fl & STBSP__TRIPLET_COMMA) ? ((600 - (stbsp__uint32)dp) % 3) : 0; + 2fa0: 040e7313 andi t1,t3,64 + 2fa4: 00078e9b sext.w t4,a5 + 2fa8: 4581 li a1,0 + 2faa: 00030963 beqz t1,2fbc + 2fae: 25800593 li a1,600 + 2fb2: 41d585bb subw a1,a1,t4 + 2fb6: 470d li a4,3 + 2fb8: 02e5f5bb remuw a1,a1,a4 + *s++ = stbsp__comma; + 2fbc: 00005a17 auipc s4,0x5 + 2fc0: eaca0a13 addi s4,s4,-340 # 7e68 + s = (char *)sn; + 2fc4: 7f66 ld t5,120(sp) + *s++ = stbsp__comma; + 2fc6: 0cda4283 lbu t0,205(s4) + s = num + 64; + 2fca: 0c010a93 addi s5,sp,192 + if ((stbsp__uint32)dp >= l) { + 2fce: 44defb63 bgeu t4,a3,3424 + n = 0; + 2fd2: 4501 li a0,0 + s = num + 64; + 2fd4: 8756 mv a4,s5 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 2fd6: 4b91 li s7,4 + 2fd8: a015 j 2ffc + 2fda: 8642 mv a2,a6 + 2fdc: 883a mv a6,a4 + 2fde: 8732 mv a4,a2 + *s++ = sn[n]; + 2fe0: 02051613 slli a2,a0,0x20 + 2fe4: 9201 srli a2,a2,0x20 + 2fe6: 967a add a2,a2,t5 + 2fe8: 00064f83 lbu t6,0(a2) + ++n; + 2fec: 0015061b addiw a2,a0,1 + 2ff0: 0006051b sext.w a0,a2 + *s++ = sn[n]; + 2ff4: fff70fa3 sb t6,-1(a4) # 6fff + if (n >= (stbsp__uint32)dp) + 2ff8: 7bd57563 bgeu a0,t4,37a2 + *s++ = stbsp__comma; + 2ffc: 00170813 addi a6,a4,1 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 3000: fc030de3 beqz t1,2fda + 3004: 2585 addiw a1,a1,1 + 3006: fd759ae3 bne a1,s7,2fda + *s++ = stbsp__comma; + 300a: fe580fa3 sb t0,-1(a6) + 300e: 0709 addi a4,a4,2 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 3010: 4585 li a1,1 + 3012: b7f9 j 2fe0 + *d = tlen + (int)(bf - buf); + 3014: 000bb703 ld a4,0(s7) + 3018: 412407b3 sub a5,s0,s2 + 301c: 01a787bb addw a5,a5,s10 + int *d = va_arg(va, int *); + 3020: 008b8693 addi a3,s7,8 + 3024: e0b6 sd a3,64(sp) + *d = tlen + (int)(bf - buf); + 3026: c31c sw a5,0(a4) + } break; + 3028: bae5 j 2a20 + if (fl & STBSP__LEADING_0X) { + 302a: 008e7793 andi a5,t3,8 + 302e: 50079b63 bnez a5,3544 + lead[0] = 0; + 3032: 06010423 sb zero,104(sp) + l = (3 << 4) | (3 << 8); + 3036: 33000793 li a5,816 + 303a: d0be sw a5,96(sp) + if (fl & STBSP__INTMAX) { + 303c: 020e7713 andi a4,t3,32 + h = hexu; + 3040: 00005817 auipc a6,0x5 + 3044: ef880813 addi a6,a6,-264 # 7f38 + goto radixnum; + 3048: bea9 j 2ba2 + fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros + 304a: fefe7e13 andi t3,t3,-17 + 304e: 020e6e13 ori t3,t3,32 + 3052: 02000713 li a4,32 + pr = sizeof(void *) * 2; + 3056: 48c1 li a7,16 + h = (f[0] == 'X') ? hexu : hex; + 3058: 00005817 auipc a6,0x5 + 305c: ef880813 addi a6,a6,-264 # 7f50 + 3060: be05 j 2b90 + s = va_arg(va, char *); + 3062: 000bba83 ld s5,0(s7) + 3066: 008b8793 addi a5,s7,8 + 306a: e0be sd a5,64(sp) + if (s == 0) + 306c: 360a8ee3 beqz s5,3be8 + if (((stbsp__uintptr)sn & 3) == 0) + 3070: 003af793 andi a5,s5,3 + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + 3074: 5208c663 bltz a7,35a0 + 3078: 0008869b sext.w a3,a7 + if (((stbsp__uintptr)sn & 3) == 0) + 307c: 2a0782e3 beqz a5,3b20 + if (!limit || *sn == 0) + 3080: 5a068b63 beqz a3,3636 + if (((stbsp__uintptr)sn & 3) == 0) + 3084: 87d6 mv a5,s5 + 3086: a801 j 3096 + ++sn; + 3088: 0785 addi a5,a5,1 + if (((stbsp__uintptr)sn & 3) == 0) + 308a: 0037f713 andi a4,a5,3 + --limit; + 308e: 36fd addiw a3,a3,-1 + if (((stbsp__uintptr)sn & 3) == 0) + 3090: 280709e3 beqz a4,3b22 + if (!limit || *sn == 0) + 3094: c681 beqz a3,309c + 3096: 0007c703 lbu a4,0(a5) + 309a: f77d bnez a4,3088 + return (stbsp__uint32)(sn - s); + 309c: 415787b3 sub a5,a5,s5 + 30a0: 0007869b sext.w a3,a5 + if (pr < (stbsp__int32)l) + 30a4: fff6c713 not a4,a3 + 30a8: 977d srai a4,a4,0x3f + 30aa: 8f7d and a4,a4,a5 + 30ac: 0007079b sext.w a5,a4 + n = pr + lead[0] + tail[0] + tz; + 30b0: 863e mv a2,a5 + pr -= l; + 30b2: 9f15 subw a4,a4,a3 + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + 30b4: d0b6 sw a3,96(sp) + lead[0] = 0; + 30b6: 06010423 sb zero,104(sp) + tail[0] = 0; + 30ba: 06010823 sb zero,112(sp) + dp = 0; + 30be: d282 sw zero,100(sp) + if ((fl & STBSP__LEFTJUST) == 0) { + 30c0: 001e7513 andi a0,t3,1 + if (fw < (stbsp__int32)n) + 30c4: 835a mv t1,s6 + 30c6: 00fb5363 bge s6,a5,30cc + 30ca: 833e mv t1,a5 + fw -= n; + 30cc: 40c3033b subw t1,t1,a2 + goto scopy; + 30d0: 4f81 li t6,0 + 30d2: 4a01 li s4,0 + cs = 0; + 30d4: 4281 li t0,0 + tz = 0; + 30d6: 4881 li a7,0 + goto scopy; + 30d8: b621 j 2be0 + *bf++ = stbsp__comma; + 30da: 87b2 mv a5,a2 + cs = 0; + 30dc: 4a01 li s4,0 + 30de: e44ff06f j 2722 + lead[0] -= (char)i; + 30e2: 06010423 sb zero,104(sp) + while (i) { + 30e6: d38ff06f j 261e + lead[0] -= (char)i; + 30ea: 06010423 sb zero,104(sp) + while (i) { + 30ee: ed8ff06f j 27c6 + while (i >= 4) { + 30f2: 06fadc63 bge s5,a5,316a + tz -= i; + 30f6: 8722 mv a4,s0 + 30f8: 0007851b sext.w a0,a5 + while (i >= 4) { + 30fc: 008785bb addw a1,a5,s0 + *(stbsp__uint32 *)bf = 0x30303030; + 3100: 01672023 sw s6,0(a4) + bf += 4; + 3104: 0711 addi a4,a4,4 + while (i >= 4) { + 3106: 40e5863b subw a2,a1,a4 + 310a: fecacbe3 blt s5,a2,3100 + 310e: ffc5061b addiw a2,a0,-4 + 3112: 0026561b srliw a2,a2,0x2 + 3116: 0016071b addiw a4,a2,1 + 311a: 37f1 addiw a5,a5,-4 + 311c: 0026161b slliw a2,a2,0x2 + 3120: 070a slli a4,a4,0x2 + 3122: 9722 add a4,a4,s0 + 3124: 9f91 subw a5,a5,a2 + while (i) { + 3126: 843a mv s0,a4 + 3128: 80078de3 beqz a5,2942 + 312c: 1782 slli a5,a5,0x20 + 312e: 9381 srli a5,a5,0x20 + 3130: 00f70433 add s0,a4,a5 + *bf++ = '0'; + 3134: 0705 addi a4,a4,1 + 3136: ff470fa3 sb s4,-1(a4) + while (i) { + 313a: fe871de3 bne a4,s0,3134 + 313e: 805ff06f j 2942 + stbsp__cb_buf_clamp(i, pr); + 3142: 85ce mv a1,s3 + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + 3144: 4981 li s3,0 + 3146: dc049263 bnez s1,270a + 314a: b8d5 j 2a3e + STBSP__UNALIGNED(while (i >= 4) { + 314c: 4401 li s0,0 + 314e: 85be mv a1,a5 + 3150: f0ea4b63 blt s4,a4,2866 + 3154: f42ff06f j 2896 + if ((((stbsp__uintptr)bf) & 3) == 0) + 3158: 00347713 andi a4,s0,3 + stbsp__cb_buf_clamp(i, tz); + 315c: 87c6 mv a5,a7 + tz -= i; + 315e: 4881 li a7,0 + if ((((stbsp__uintptr)bf) & 3) == 0) + 3160: fc071c63 bnez a4,2938 + while (i >= 4) { + 3164: 470d li a4,3 + 3166: f8f748e3 blt a4,a5,30f6 + 316a: 8722 mv a4,s0 + 316c: b7c1 j 312c + tail[0] -= (char)i; + 316e: 06010823 sb zero,112(sp) + while (i) { + 3172: b0b9 j 29c0 + while (i >= 4) { + 3174: 478d li a5,3 + 3176: 8622 mv a2,s0 + 3178: d8b7d963 bge a5,a1,270a + 317c: ffc5839b addiw t2,a1,-4 + 3180: 0023d79b srliw a5,t2,0x2 + 3184: 0017859b addiw a1,a5,1 + 3188: 058a slli a1,a1,0x2 + 318a: 942e add s0,s0,a1 + *(stbsp__uint32 *)bf = 0x30303030; + 318c: 01762023 sw s7,0(a2) + bf += 4; + 3190: 0611 addi a2,a2,4 + while (i >= 4) { + 3192: fe861de3 bne a2,s0,318c + 3196: 0027979b slliw a5,a5,0x2 + 319a: 40f385bb subw a1,t2,a5 + 319e: d68ff06f j 2706 + while (i) { + 31a2: 85be mv a1,a5 + 31a4: ee071963 bnez a4,2896 + 31a8: f16ff06f j 28be + 31ac: 2c013a03 ld s4,704(sp) + 31b0: 2b813a83 ld s5,696(sp) + 31b4: 2b013b03 ld s6,688(sp) + 31b8: 8ca2 mv s9,s0 + 31ba: a04ff06f j 23be + stbsp__chk_cb_buf(1); + 31be: 2601 sext.w a2,a2 + 31c0: 1fe00793 li a5,510 + 31c4: f8c7c563 blt a5,a2,294e + 31c8: f3eff06f j 2906 + fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas + 31cc: fbfe7e13 andi t3,t3,-65 + if (fw + pr) { + 31d0: 006707bb addw a5,a4,t1 + fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas + 31d4: 2e01 sext.w t3,t3 + if (fw + pr) { + 31d6: a0078be3 beqz a5,2bec + while (fw > 0) { + 31da: be605663 blez t1,25c6 + *(stbsp__uint32 *)bf = 0x20202020; + 31de: 20202837 lui a6,0x20202 + stbsp__cb_buf_clamp(i, fw); + 31e2: 854a mv a0,s2 + 31e4: 894e mv s2,s3 + 31e6: 69a2 ld s3,8(sp) + *(stbsp__uint32 *)bf = 0x20202020; + 31e8: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201f9260> + stbsp__cb_buf_clamp(i, fw); + 31ec: ec52 sd s4,24(sp) + 31ee: f426 sd s1,40(sp) + 31f0: 87a2 mv a5,s0 + 31f2: 84ea mv s1,s10 + stbsp__chk_cb_buf(1); + 31f4: 1fe00f13 li t5,510 + stbsp__cb_buf_clamp(i, fw); + 31f8: 8d6e mv s10,s11 + *bf++ = ' '; + 31fa: 02000b13 li s6,32 + stbsp__cb_buf_clamp(i, fw); + 31fe: 8de6 mv s11,s9 + while (i >= 4) { + 3200: 4b8d li s7,3 + stbsp__cb_buf_clamp(i, fw); + 3202: 20000e93 li t4,512 + 3206: e846 sd a7,16(sp) + 3208: f07e sd t6,32(sp) + 320a: f836 sd a3,48(sp) + 320c: e4f2 sd t3,72(sp) + 320e: e8ba sd a4,80(sp) + 3210: ec96 sd t0,88(sp) + 3212: 841a mv s0,t1 + 3214: 8a42 mv s4,a6 + 3216: 8c9e mv s9,t2 + 3218: 0c090063 beqz s2,32d8 + 321c: 40a78633 sub a2,a5,a0 + 3220: 40ce873b subw a4,t4,a2 + 3224: 86ba mv a3,a4 + 3226: 00e45363 bge s0,a4,322c + 322a: 86a2 mv a3,s0 + 322c: 0006871b sext.w a4,a3 + fw -= i; + 3230: 9c15 subw s0,s0,a3 + while (i) { + 3232: e719 bnez a4,3240 + 3234: a095 j 3298 + *bf++ = ' '; + 3236: 01678023 sb s6,0(a5) + --i; + 323a: 377d addiw a4,a4,-1 + *bf++ = ' '; + 323c: 0785 addi a5,a5,1 + while (i) { + 323e: cb29 beqz a4,3290 + if ((((stbsp__uintptr)bf) & 3) == 0) + 3240: 0037f693 andi a3,a5,3 + 3244: faed bnez a3,3236 + while (i >= 4) { + 3246: 86be mv a3,a5 + 3248: 00070f9b sext.w t6,a4 + 324c: 00f705bb addw a1,a4,a5 + 3250: 02ebd763 bge s7,a4,327e + *(stbsp__uint32 *)bf = 0x20202020; + 3254: 0146a023 sw s4,0(a3) + bf += 4; + 3258: 0691 addi a3,a3,4 + while (i >= 4) { + 325a: 40d5863b subw a2,a1,a3 + 325e: fecbcbe3 blt s7,a2,3254 + 3262: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff723c> + 3266: 0026561b srliw a2,a2,0x2 + 326a: 0016069b addiw a3,a2,1 + 326e: 3771 addiw a4,a4,-4 + 3270: 0026161b slliw a2,a2,0x2 + 3274: 068a slli a3,a3,0x2 + 3276: 96be add a3,a3,a5 + 3278: 9f11 subw a4,a4,a2 + while (i) { + 327a: 87b6 mv a5,a3 + 327c: cb11 beqz a4,3290 + 327e: 1702 slli a4,a4,0x20 + 3280: 9301 srli a4,a4,0x20 + 3282: 00e687b3 add a5,a3,a4 + *bf++ = ' '; + 3286: 0685 addi a3,a3,1 + 3288: ff668fa3 sb s6,-1(a3) + while (i) { + 328c: fef69de3 bne a3,a5,3286 + stbsp__chk_cb_buf(1); + 3290: 40a78633 sub a2,a5,a0 + 3294: 00090e63 beqz s2,32b0 + 3298: 2601 sext.w a2,a2 + 329a: 00cf5b63 bge t5,a2,32b0 + 329e: 85ce mv a1,s3 + 32a0: 9cb1 addw s1,s1,a2 + 32a2: 9902 jalr s2 + 32a4: c541 beqz a0,332c + 32a6: 87aa mv a5,a0 + 32a8: 20000e93 li t4,512 + 32ac: 1fe00f13 li t5,510 + while (fw > 0) { + 32b0: f68044e3 bgtz s0,3218 + 32b4: 8322 mv t1,s0 + 32b6: 89ca mv s3,s2 + 32b8: 83e6 mv t2,s9 + 32ba: 68c2 ld a7,16(sp) + 32bc: 8cee mv s9,s11 + 32be: 6a62 ld s4,24(sp) + 32c0: 8dea mv s11,s10 + 32c2: 7f82 ld t6,32(sp) + 32c4: 8d26 mv s10,s1 + 32c6: 76c2 ld a3,48(sp) + 32c8: 6e26 ld t3,72(sp) + 32ca: 6746 ld a4,80(sp) + 32cc: 62e6 ld t0,88(sp) + 32ce: 74a2 ld s1,40(sp) + 32d0: 892a mv s2,a0 + 32d2: 843e mv s0,a5 + 32d4: af2ff06f j 25c6 + stbsp__cb_buf_clamp(i, fw); + 32d8: 8722 mv a4,s0 + 32da: 4401 li s0,0 + if ((((stbsp__uintptr)bf) & 3) == 0) + 32dc: b795 j 3240 + n64 = va_arg(va, stbsp__uint32); + 32de: 000be683 lwu a3,0(s7) + 32e2: b0f9 j 2bb0 + 32e4: 2c013a03 ld s4,704(sp) + 32e8: 2b813a83 ld s5,696(sp) + 32ec: 2b013b03 ld s6,688(sp) + 32f0: 8cca mv s9,s2 + 32f2: 8ccff06f j 23be + 32f6: 8cd6 mv s9,s5 + 32f8: 2c013a03 ld s4,704(sp) + 32fc: 2b813a83 ld s5,696(sp) + 3300: 2b013b03 ld s6,688(sp) + 3304: 8baff06f j 23be + 3308: 2c013a03 ld s4,704(sp) + 330c: 2b813a83 ld s5,696(sp) + 3310: 2b013b03 ld s6,688(sp) + 3314: 8cea mv s9,s10 + 3316: 8a8ff06f j 23be + while (i) { + 331a: 85a2 mv a1,s0 + 331c: c12ff06f j 272e + while (i >= 4) { + 3320: 478d li a5,3 + 3322: 8622 mv a2,s0 + 3324: e4b7cce3 blt a5,a1,317c + 3328: be2ff06f j 270a + 332c: 2c013a03 ld s4,704(sp) + 3330: 2b813a83 ld s5,696(sp) + 3334: 2b013b03 ld s6,688(sp) + 3338: 8ca6 mv s9,s1 + 333a: 884ff06f j 23be + lead[2] = h[16]; + 333e: 01084683 lbu a3,16(a6) + lead[0] = 2; + 3342: 678d lui a5,0x3 + 3344: 0789 addi a5,a5,2 # 3002 + 3346: 06f11423 sh a5,104(sp) + lead[2] = h[16]; + 334a: 06d10523 sb a3,106(sp) + 334e: b891 j 2ba2 + 3350: 8cea mv s9,s10 + 3352: 86cff06f j 23be + 3356: 4f81 li t6,0 + 3358: 4a01 li s4,0 + 335a: 5586 lw a1,96(sp) + *--s = stbsp__comma; + 335c: 00005f17 auipc t5,0x5 + 3360: bd9f4f03 lbu t5,-1063(t5) # 7f35 + 3364: 0510 addi a2,sp,640 + 3366: 0085d71b srliw a4,a1,0x8 + *--s = h[n64 & ((1 << (l >> 8)) - 1)]; + 336a: 4305 li t1,1 + if (fl & STBSP__TRIPLET_COMMA) { + 336c: 040e7e93 andi t4,t3,64 + *--s = h[n64 & ((1 << (l >> 8)) - 1)]; + 3370: 0007029b sext.w t0,a4 + 3374: 005317bb sllw a5,t1,t0 + 3378: 37fd addiw a5,a5,-1 + 337a: 8ff5 and a5,a5,a3 + 337c: 97c2 add a5,a5,a6 + 337e: 0007c783 lbu a5,0(a5) + n64 >>= (l >> 8); + 3382: 0056d6b3 srl a3,a3,t0 + *--s = h[n64 & ((1 << (l >> 8)) - 1)]; + 3386: fff60a93 addi s5,a2,-1 + 338a: fef60fa3 sb a5,-1(a2) + if (!((n64) || ((stbsp__int32)((num + STBSP__NUMSZ) - s) < pr))) + 338e: e691 bnez a3,339a + 3390: 051c addi a5,sp,640 + 3392: 415787bb subw a5,a5,s5 + 3396: 0317dd63 bge a5,a7,33d0 + if (fl & STBSP__TRIPLET_COMMA) { + 339a: 020e8963 beqz t4,33cc + ++l; + 339e: 0015879b addiw a5,a1,1 + if ((l & 15) == ((l >> 4) & 15)) { + 33a2: 0047d29b srliw t0,a5,0x4 + 33a6: 00f2c2b3 xor t0,t0,a5 + 33aa: 00f2f293 andi t0,t0,15 + ++l; + 33ae: 0007859b sext.w a1,a5 + if ((l & 15) == ((l >> 4) & 15)) { + 33b2: 0087d71b srliw a4,a5,0x8 + 33b6: 00029b63 bnez t0,33cc + l &= ~15; + 33ba: 9bc1 andi a5,a5,-16 + 33bc: 0007859b sext.w a1,a5 + *--s = stbsp__comma; + 33c0: ffe60a93 addi s5,a2,-2 + 33c4: ffe60f23 sb t5,-2(a2) + 33c8: 0087d71b srliw a4,a5,0x8 + 33cc: 8656 mv a2,s5 + 33ce: b74d j 3370 + cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); + 33d0: 0045d29b srliw t0,a1,0x4 + 33d4: 0f0006b7 lui a3,0xf000 + if (pr < (stbsp__int32)l) + 33d8: 0007871b sext.w a4,a5 + cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); + 33dc: 0182929b slliw t0,t0,0x18 + 33e0: 00d2f2b3 and t0,t0,a3 + n = pr + lead[0] + tail[0] + tz; + 33e4: 00ef863b addw a2,t6,a4 + l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); + 33e8: d0be sw a5,96(sp) + n = pr + lead[0] + tail[0] + tz; + 33ea: 8fb2 mv t6,a2 + cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); + 33ec: 86be mv a3,a5 + 33ee: 00f282bb addw t0,t0,a5 + if (fw < (stbsp__int32)n) + 33f2: 835a mv t1,s6 + 33f4: 00cb5363 bge s6,a2,33fa + 33f8: 8332 mv t1,a2 + fw -= n; + 33fa: 41f3033b subw t1,t1,t6 + pr -= l; + 33fe: 9f1d subw a4,a4,a5 + goto scopy; + 3400: 4f81 li t6,0 + tz = 0; + 3402: 4881 li a7,0 + goto scopy; + 3404: fdcff06f j 2be0 + 3408: 8cda mv s9,s6 + 340a: 2c013a03 ld s4,704(sp) + 340e: 2b813a83 ld s5,696(sp) + 3412: 2b013b03 ld s6,688(sp) + 3416: fa9fe06f j 23be + fl |= ((sizeof(void *) == 8) ? STBSP__INTMAX : 0); + 341a: 020e6e13 ori t3,t3,32 + ++f; + 341e: 0485 addi s1,s1,1 + 3420: 864ff06f j 2484 + n = 0; + 3424: 4601 li a2,0 + s = num + 64; + 3426: 8756 mv a4,s5 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 3428: 4511 li a0,4 + *s++ = stbsp__comma; + 342a: 00170793 addi a5,a4,1 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 342e: 00030563 beqz t1,3438 + 3432: 2585 addiw a1,a1,1 + 3434: 10a58363 beq a1,a0,353a + 3438: 873e mv a4,a5 + *s++ = sn[n]; + 343a: 02061793 slli a5,a2,0x20 + 343e: 9381 srli a5,a5,0x20 + 3440: 97fa add a5,a5,t5 + 3442: 0007c803 lbu a6,0(a5) + ++n; + 3446: 2605 addiw a2,a2,1 + *s++ = sn[n]; + 3448: ff070fa3 sb a6,-1(a4) + if (n >= l) + 344c: fcd66fe3 bltu a2,a3,342a + if (n < (stbsp__uint32)dp) { + 3450: 0bd663e3 bltu a2,t4,3cf6 + cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens + 3454: 415707b3 sub a5,a4,s5 + 3458: 030002b7 lui t0,0x3000 + 345c: 00f282bb addw t0,t0,a5 + if (pr) { + 3460: 00088a63 beqz a7,3474 + *s++ = stbsp__period; + 3464: 0cca4683 lbu a3,204(s4) + 3468: 00170793 addi a5,a4,1 + l = (stbsp__uint32)(s - (num + 64)); + 346c: 415787b3 sub a5,a5,s5 + *s++ = stbsp__period; + 3470: 00d70023 sb a3,0(a4) + if (fl & STBSP__METRIC_SUFFIX) { + 3474: 100e7713 andi a4,t3,256 + 3478: 86f2 mv a3,t3 + 347a: 2c070163 beqz a4,373c + if (fl & STBSP__METRIC_NOSPACE) + 347e: 40ae5f9b sraiw t6,t3,0xa + 3482: 001fcf93 xori t6,t6,1 + 3486: 001fff93 andi t6,t6,1 + tail[1] = ' '; + 348a: 02000713 li a4,32 + 348e: 06e108a3 sb a4,113(sp) + tail[0] = idx; + 3492: 07f10823 sb t6,112(sp) + if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. + 3496: 018e561b srliw a2,t3,0x18 + 349a: 018e571b srliw a4,t3,0x18 + n = pr + lead[0] + tail[0] + tz; + 349e: 000f859b sext.w a1,t6 + if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. + 34a2: c225 beqz a2,3502 + if (fl & STBSP__METRIC_1024) + 34a4: 001f859b addiw a1,t6,1 + 34a8: 0ff5f613 zext.b a2,a1 + tail[idx + 1] = "_KMGT"[fl >> 24]; + 34ac: 1702 slli a4,a4,0x20 + if (fl & STBSP__METRIC_1024) + 34ae: 03469513 slli a0,a3,0x34 + tail[idx + 1] = "_KMGT"[fl >> 24]; + 34b2: 85b2 mv a1,a2 + 34b4: 9301 srli a4,a4,0x20 + if (fl & STBSP__METRIC_1024) + 34b6: 06055ee3 bgez a0,3d32 + tail[idx + 1] = "_KMGT"[fl >> 24]; + 34ba: 00003517 auipc a0,0x3 + 34be: c4e50513 addi a0,a0,-946 # 6108 <_GLOBAL__sub_I__ZSt3cin+0x160> + 34c2: 972a add a4,a4,a0 + 34c4: 00074503 lbu a0,0(a4) + if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { + 34c8: 6709 lui a4,0x2 + 34ca: 80070713 addi a4,a4,-2048 # 1800 + 34ce: 8f75 and a4,a4,a3 + tail[idx + 1] = "_KMGT"[fl >> 24]; + 34d0: 06010813 addi a6,sp,96 + 34d4: 22060693 addi a3,a2,544 + 34d8: 96c2 add a3,a3,a6 + 34da: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff7030> + if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { + 34de: 8007071b addiw a4,a4,-2048 + 34e2: 060715e3 bnez a4,3d4c + tail[idx + 1] = 'i'; + 34e6: 2f89 addiw t6,t6,2 + 34e8: 0ffff593 zext.b a1,t6 + 34ec: 1094 addi a3,sp,96 + 34ee: 22058713 addi a4,a1,544 + 34f2: 9736 add a4,a4,a3 + 34f4: 06900693 li a3,105 + 34f8: 8fae mv t6,a1 + 34fa: ded70823 sb a3,-528(a4) + tail[0] = idx; + 34fe: 07f10823 sb t6,112(sp) + l = (stbsp__uint32)(s - (num + 64)); + 3502: 0007869b sext.w a3,a5 + n = pr + lead[0] + tail[0] + tz; + 3506: 06814a03 lbu s4,104(sp) + if (pr < (stbsp__int32)l) + 350a: fff6c713 not a4,a3 + 350e: 977d srai a4,a4,0x3f + 3510: 8ff9 and a5,a5,a4 + n = pr + lead[0] + tail[0] + tz; + 3512: 00fa073b addw a4,s4,a5 + 3516: 9f2d addw a4,a4,a1 + 3518: 0117063b addw a2,a4,a7 + l = (stbsp__uint32)(s - (num + 64)); + 351c: d0b6 sw a3,96(sp) + n = pr + lead[0] + tail[0] + tz; + 351e: 8732 mv a4,a2 + if (pr < (stbsp__int32)l) + 3520: 2781 sext.w a5,a5 + if ((fl & STBSP__LEFTJUST) == 0) { + 3522: 001e7513 andi a0,t3,1 + if (fw < (stbsp__int32)n) + 3526: 835a mv t1,s6 + 3528: 00cb5363 bge s6,a2,352e + 352c: 8332 mv t1,a2 + fw -= n; + 352e: 40e3033b subw t1,t1,a4 + pr -= l; + 3532: 40d7873b subw a4,a5,a3 + goto scopy; + 3536: eaaff06f j 2be0 + *s++ = stbsp__comma; + 353a: fe578fa3 sb t0,-1(a5) + 353e: 0709 addi a4,a4,2 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 3540: 4585 li a1,1 + 3542: bde5 j 343a + lead[0] = 1; + 3544: 678d lui a5,0x3 + 3546: 0785 addi a5,a5,1 # 3001 + 3548: 06f11423 sh a5,104(sp) + 354c: b4ed j 3036 + if ((f[0] != 'u') && (i64 < 0)) { + 354e: 07500693 li a3,117 + stbsp__int64 i64 = va_arg(va, stbsp__int64); + 3552: 000bbf03 ld t5,0(s7) + if ((f[0] != 'u') && (i64 < 0)) { + 3556: dcd78263 beq a5,a3,2b1a + 355a: dc0f5063 bgez t5,2b1a + fl |= STBSP__NEGATIVE; + 355e: 08076713 ori a4,a4,128 + n64 = (stbsp__uint64)-i64; + 3562: 41e00f33 neg t5,t5 + fl |= STBSP__NEGATIVE; + 3566: 00070e1b sext.w t3,a4 + 356a: db0ff06f j 2b1a + lead[2] = h[0xb]; + 356e: 00b84703 lbu a4,11(a6) + lead[0] = 2; + 3572: 678d lui a5,0x3 + 3574: 0789 addi a5,a5,2 # 3002 + 3576: 06f11423 sh a5,104(sp) + lead[2] = h[0xb]; + 357a: 06e10523 sb a4,106(sp) + 357e: bab5 j 2efa + sign[0] = 1; + 3580: 678d lui a5,0x3 + 3582: d0178793 addi a5,a5,-767 # 2d01 + fl |= STBSP__NEGATIVE; + 3586: 080e6e13 ori t3,t3,128 + sign[0] = 1; + 358a: 06f11423 sh a5,104(sp) + 358e: 468d li a3,3 + 3590: 4a0d li s4,3 + 3592: 4809 li a6,2 + 3594: b899 j 2dea + sign[0] = 1; + 3596: 6709 lui a4,0x2 + 3598: 0705 addi a4,a4,1 # 2001 <_vscanf_core.constprop.0+0x6b9> + 359a: 06e11423 sh a4,104(sp) + 359e: bae5 j 2f96 + if (((stbsp__uintptr)sn & 3) == 0) + 35a0: 0e0780e3 beqz a5,3e80 + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + 35a4: 56fd li a3,-1 + 35a6: bcf9 j 3084 + if (fw < (stbsp__int32)n) + 35a8: 4305 li t1,1 + 35aa: b249 j 2f2c + pr = 6; // default is 6 + 35ac: 4899 li a7,6 + 35ae: b801 j 2dbe + h = (f[0] == 'A') ? hexu : hex; + 35b0: 00005597 auipc a1,0x5 + 35b4: 98858593 addi a1,a1,-1656 # 7f38 + 35b8: ff6ff06f j 2dae + h = (f[0] == 'B') ? hexu : hex; + 35bc: 00005817 auipc a6,0x5 + 35c0: 97c80813 addi a6,a6,-1668 # 7f38 + 35c4: b22d j 2eee + 35c6: 80000737 lui a4,0x80000 + 35ca: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff7246> + pr = 6; // default is 6 + 35cc: 4899 li a7,6 + 35ce: e4eff06f j 2c1c + h = (f[0] == 'E') ? hexu : hex; + 35d2: 00005317 auipc t1,0x5 + 35d6: 96630313 addi t1,t1,-1690 # 7f38 + 35da: e28ff06f j 2c02 + 35de: 80000737 lui a4,0x80000 + 35e2: 4a99 li s5,6 + 35e4: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff7245> + pr = 6; + 35e6: 4a19 li s4,6 + 35e8: ee8ff06f j 2cd0 + h = (f[0] == 'G') ? hexu : hex; + 35ec: 00005317 auipc t1,0x5 + 35f0: 94c30313 addi t1,t1,-1716 # 7f38 + 35f4: eb6ff06f j 2caa + 35f8: 7be6 ld s7,120(sp) + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + 35fa: 86c2 mv a3,a6 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 35fc: 8542 mv a0,a6 + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + 35fe: 88d2 mv a7,s4 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 3600: 8ade mv s5,s7 + if (pr > (stbsp__int32)l) + 3602: 0005071b sext.w a4,a0 + 3606: 01175f63 bge a4,a7,3624 + pr = l - 1; + 360a: fff5089b addiw a7,a0,-1 + tail[0] = 0; + 360e: 06010823 sb zero,112(sp) + if (fl & STBSP__NEGATIVE) { + 3612: 70028c63 beqz t0,3d2a + sign[0] = 1; + 3616: 670d lui a4,0x3 + 3618: d0170713 addi a4,a4,-767 # 2d01 + 361c: 06e11423 sh a4,104(sp) + 3620: e3aff06f j 2c5a + else if (pr) + 3624: fe0885e3 beqz a7,360e + --pr; // when using %e, there is one digit before the decimal + 3628: 38fd addiw a7,a7,-1 + 362a: b7d5 j 360e + switch (f[0]) { + 362c: 0034c783 lbu a5,3(s1) + f += 3; + 3630: 048d addi s1,s1,3 + 3632: e53fe06f j 2484 + if (!limit || *sn == 0) + 3636: 4601 li a2,0 + 3638: 4701 li a4,0 + 363a: 4781 li a5,0 + return (stbsp__uint32)(sn - s); + 363c: bca5 j 30b4 + pr = 1; + 363e: 4885 li a7,1 + 3640: cf4ff06f j 2b34 + *s++ = sn[0]; + 3644: 000ac703 lbu a4,0(s5) + 3648: 0ce10023 sb a4,192(sp) + if (pr) + 364c: 54088563 beqz a7,3b96 + *s++ = stbsp__period; + 3650: 00005617 auipc a2,0x5 + 3654: 8e464603 lbu a2,-1820(a2) # 7f34 + if ((l - 1) > (stbsp__uint32)pr) + 3658: fff6871b addiw a4,a3,-1 + *s++ = stbsp__period; + 365c: 0cc100a3 sb a2,193(sp) + if ((l - 1) > (stbsp__uint32)pr) + 3660: 0008851b sext.w a0,a7 + 3664: 0007061b sext.w a2,a4 + 3668: 52c57163 bgeu a0,a2,3b8a + l = pr + 1; + 366c: 0018869b addiw a3,a7,1 + for (n = 1; n < l; n++) + 3670: 8746 mv a4,a7 + 3672: 02071613 slli a2,a4,0x20 + 3676: 9201 srli a2,a2,0x20 + 3678: 0c210713 addi a4,sp,194 + 367c: 0a85 addi s5,s5,1 + 367e: 963a add a2,a2,a4 + *s++ = sn[n]; + 3680: 000ac583 lbu a1,0(s5) + 3684: 0705 addi a4,a4,1 + for (n = 1; n < l; n++) + 3686: 0a85 addi s5,s5,1 + *s++ = sn[n]; + 3688: feb70fa3 sb a1,-1(a4) + for (n = 1; n < l; n++) + 368c: fec71ae3 bne a4,a2,3680 + tail[1] = h[0xe]; + 3690: 00e34803 lbu a6,14(t1) + dp -= 1; + 3694: fff7871b addiw a4,a5,-1 + tail[2] = '+'; + 3698: 02b00593 li a1,43 + tail[1] = h[0xe]; + 369c: 070108a3 sb a6,113(sp) + if (dp < 0) { + 36a0: 00075663 bgez a4,36ac + dp = -dp; + 36a4: 4705 li a4,1 + 36a6: 9f1d subw a4,a4,a5 + tail[2] = '-'; + 36a8: 02d00593 li a1,45 + 36ac: 06b10923 sb a1,114(sp) + n = (dp >= 100) ? 5 : 4; + 36b0: 06300793 li a5,99 + 36b4: 4ee7d663 bge a5,a4,3ba0 + 36b8: 4595 li a1,5 + 36ba: 4f95 li t6,5 + 36bc: 4e95 li t4,5 + tail[n] = '0' + dp % 10; + 36be: 47a9 li a5,10 + dp /= 10; + 36c0: 02f7433b divw t1,a4,a5 + --n; + 36c4: fffe8f1b addiw t5,t4,-1 + tail[n] = '0' + dp % 10; + 36c8: 020f1293 slli t0,t5,0x20 + 36cc: 220e8813 addi a6,t4,544 + 36d0: 06010893 addi a7,sp,96 + 36d4: 0202d293 srli t0,t0,0x20 + 36d8: 01180eb3 add t4,a6,a7 + 36dc: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff7460> + 36e0: 011802b3 add t0,a6,a7 + tail[0] = (char)n; + 36e4: 07f10823 sb t6,112(sp) + if (n <= 3) + 36e8: 4a0d li s4,3 + tail[n] = '0' + dp % 10; + 36ea: 02f7673b remw a4,a4,a5 + dp /= 10; + 36ee: 0003081b sext.w a6,t1 + tail[n] = '0' + dp % 10; + 36f2: 02f36abb remw s5,t1,a5 + 36f6: 0307071b addiw a4,a4,48 + 36fa: deee8823 sb a4,-528(t4) + 36fe: 030a871b addiw a4,s5,48 + 3702: dee28823 sb a4,-528(t0) + if (n <= 3) + 3706: 014f0a63 beq t5,s4,371a + dp /= 10; + 370a: 02f3483b divw a6,t1,a5 + tail[n] = '0' + dp % 10; + 370e: 02f867bb remw a5,a6,a5 + 3712: 0307879b addiw a5,a5,48 + 3716: 06f109a3 sb a5,115(sp) + tz = pr - (l - 1); + 371a: 2505 addiw a0,a0,1 + l = (stbsp__uint32)(s - (num + 64)); + 371c: 0c010a93 addi s5,sp,192 + cs = 1 + (3 << 24); // how many tens + 3720: 030002b7 lui t0,0x3000 + tz = pr - (l - 1); + 3724: 40d508bb subw a7,a0,a3 + 3728: d2c2 sw a6,100(sp) + l = (stbsp__uint32)(s - (num + 64)); + 372a: 415607b3 sub a5,a2,s5 + cs = 1 + (3 << 24); // how many tens + 372e: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7241> + 3730: bbc9 j 3502 + 3732: fc2e sd a1,56(sp) + 3734: d0b2 sw a2,96(sp) + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 3736: 8536 mv a0,a3 + 3738: e2cff06f j 2d64 + flt_lead: + 373c: 4581 li a1,0 + 373e: 4f81 li t6,0 + 3740: b3c9 j 3502 + n = pr + lead[0] + tail[0] + tz; + 3742: 06814a03 lbu s4,104(sp) + 3746: 000a0f9b sext.w t6,s4 + 374a: b901 j 335a + if ((f[1] == '6') && (f[2] == '4')) { + 374c: 0024c683 lbu a3,2(s1) + 3750: 03400713 li a4,52 + 3754: 00e68463 beq a3,a4,375c + 3758: e2bfe06f j 2582 + switch (f[0]) { + 375c: 0034c783 lbu a5,3(s1) + fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); + 3760: 020e6e13 ori t3,t3,32 + f += 3; + 3764: 048d addi s1,s1,3 + 3766: d1ffe06f j 2484 + if (pr < (stbsp__int32)l) + 376a: 0006879b sext.w a5,a3 + n = pr + lead[0] + tail[0] + tz; + 376e: 06814a03 lbu s4,104(sp) + if (pr < (stbsp__int32)l) + 3772: fff7c793 not a5,a5 + 3776: 97fd srai a5,a5,0x3f + 3778: 8ff5 and a5,a5,a3 + n = pr + lead[0] + tail[0] + tz; + 377a: 00fa063b addw a2,s4,a5 + s = (char *)sn; + 377e: 7ae6 ld s5,120(sp) + n = pr + lead[0] + tail[0] + tz; + 3780: 8732 mv a4,a2 + if ((fl & STBSP__LEFTJUST) == 0) { + 3782: 001e7513 andi a0,t3,1 + if (pr < (stbsp__int32)l) + 3786: 2781 sext.w a5,a5 + if (fw < (stbsp__int32)n) + 3788: 835a mv t1,s6 + 378a: 00cb5363 bge s6,a2,3790 + 378e: 8332 mv t1,a2 + fw -= n; + 3790: 40e3033b subw t1,t1,a4 + goto scopy; + 3794: 4f81 li t6,0 + pr -= l; + 3796: 40d7873b subw a4,a5,a3 + cs = 0; + 379a: 4281 li t0,0 + tz = 0; + 379c: 4881 li a7,0 + goto scopy; + 379e: c42ff06f j 2be0 + cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens + 37a2: 415705b3 sub a1,a4,s5 + 37a6: 030002b7 lui t0,0x3000 + 37aa: 00b282bb addw t0,t0,a1 + l = pr - n; + 37ae: 0008859b sext.w a1,a7 + if (pr) + 37b2: 42088763 beqz a7,3be0 + *s++ = stbsp__period; + 37b6: 0cca4f83 lbu t6,204(s4) + if ((l - dp) > (stbsp__uint32)pr) + 37ba: 41d6833b subw t1,a3,t4 + *s++ = stbsp__period; + 37be: 00280713 addi a4,a6,2 + 37c2: 01f800a3 sb t6,1(a6) + if ((l - dp) > (stbsp__uint32)pr) + 37c6: 4065ed63 bltu a1,t1,3be0 + while (n < l) { + 37ca: 5ed57863 bgeu a0,a3,3dba + 37ce: 40c687bb subw a5,a3,a2 + 37d2: 37fd addiw a5,a5,-1 + 37d4: 1782 slli a5,a5,0x20 + 37d6: 9381 srli a5,a5,0x20 + 37d8: 1602 slli a2,a2,0x20 + 37da: 9201 srli a2,a2,0x20 + 37dc: 0785 addi a5,a5,1 + 37de: 967a add a2,a2,t5 + 37e0: 97ba add a5,a5,a4 + *s++ = sn[n]; + 37e2: 00064503 lbu a0,0(a2) + 37e6: 0705 addi a4,a4,1 + while (n < l) { + 37e8: 0605 addi a2,a2,1 + *s++ = sn[n]; + 37ea: fea70fa3 sb a0,-1(a4) + while (n < l) { + 37ee: fef71ae3 bne a4,a5,37e2 + tz = pr - (l - dp); + 37f2: 01d585bb addw a1,a1,t4 + 37f6: 40d588bb subw a7,a1,a3 + l = (stbsp__uint32)(s - (num + 64)); + 37fa: 415787b3 sub a5,a5,s5 + 37fe: b99d j 3474 + fl |= STBSP__NEGATIVE; + 3800: 080e6e13 ori t3,t3,128 + tail[0] = 0; + 3804: 06010823 sb zero,112(sp) + if (fl & STBSP__NEGATIVE) { + 3808: b539 j 3616 + tail[0] = (char)n; + 380a: 4799 li a5,6 + tail[n] = '0' + dp % 10; + 380c: 06b10b23 sb a1,118(sp) + tail[0] = (char)n; + 3810: 06f10823 sb a5,112(sp) + tail[n] = '0' + dp % 10; + 3814: 4819 li a6,6 + 3816: 4f99 li t6,6 + n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); + 3818: 4599 li a1,6 + dp /= 10; + 381a: 4f29 li t5,10 + if (n <= 3) + 381c: 428d li t0,3 + 381e: 87b2 mv a5,a2 + dp /= 10; + 3820: 03e7c7bb divw a5,a5,t5 + --n; + 3824: 35fd addiw a1,a1,-1 + tail[n] = '0' + dp % 10; + 3826: 02059613 slli a2,a1,0x20 + 382a: 9201 srli a2,a2,0x20 + 382c: 06010e93 addi t4,sp,96 + 3830: 22060613 addi a2,a2,544 + 3834: 9676 add a2,a2,t4 + 3836: 03e7eebb remw t4,a5,t5 + 383a: 030e8e9b addiw t4,t4,48 + 383e: dfd60823 sb t4,-528(a2) + if (n <= 3) + 3842: fc559fe3 bne a1,t0,3820 + 3846: e6aff06f j 2eb0 + *s++ = h[(n64 >> 60) & 15]; + 384a: 93f1 srli a5,a5,0x3c + 384c: 97ae add a5,a5,a1 + 384e: 0007c303 lbu t1,0(a5) + lead[1 + lead[0]] = '0'; + 3852: 1088 addi a0,sp,96 + 3854: 22080793 addi a5,a6,544 + 3858: 97aa add a5,a5,a0 + 385a: 03000513 li a0,48 + 385e: dea78423 sb a0,-536(a5) + lead[2 + lead[0]] = 'x'; + 3862: 22068793 addi a5,a3,544 + 3866: 1094 addi a3,sp,96 + 3868: 96be add a3,a3,a5 + *s++ = stbsp__period; + 386a: 00004517 auipc a0,0x4 + 386e: 6ca54503 lbu a0,1738(a0) # 7f34 + lead[2 + lead[0]] = 'x'; + 3872: 07800813 li a6,120 + sn = s; + 3876: 0c210793 addi a5,sp,194 + lead[2 + lead[0]] = 'x'; + 387a: df068423 sb a6,-536(a3) + *s++ = stbsp__period; + 387e: 0ca100a3 sb a0,193(sp) + lead[0] += 2; + 3882: 07410423 sb s4,104(sp) + *s++ = h[(n64 >> 60) & 15]; + 3886: 0c610023 sb t1,192(sp) + n64 <<= 4; + 388a: 0732 slli a4,a4,0xc + sn = s; + 388c: fcbe sd a5,120(sp) + n = pr; + 388e: 0008869b sext.w a3,a7 + while (n--) { + 3892: 4831 li a6,12 + if (n > 13) + 3894: 4535 li a0,13 + tz = pr - n; + 3896: 40a688bb subw a7,a3,a0 + while (n--) { + 389a: 02081313 slli t1,a6,0x20 + 389e: 02035313 srli t1,t1,0x20 + 38a2: 22030693 addi a3,t1,544 + 38a6: 1088 addi a0,sp,96 + 38a8: 9536 add a0,a0,a3 + 38aa: e4350513 addi a0,a0,-445 + *s++ = h[(n64 >> 60) & 15]; + 38ae: 03c75693 srli a3,a4,0x3c + 38b2: 96ae add a3,a3,a1 + 38b4: 0006c683 lbu a3,0(a3) + 38b8: 0785 addi a5,a5,1 + n64 <<= 4; + 38ba: 0712 slli a4,a4,0x4 + *s++ = h[(n64 >> 60) & 15]; + 38bc: fed78fa3 sb a3,-1(a5) + while (n--) { + 38c0: fea797e3 bne a5,a0,38ae + l = (int)(s - (num + 64)); + 38c4: 280d addiw a6,a6,3 + 38c6: 0008069b sext.w a3,a6 + if (pr < (stbsp__int32)l) + 38ca: fff6c713 not a4,a3 + 38ce: 977d srai a4,a4,0x3f + 38d0: 00e87733 and a4,a6,a4 + dp = (int)(s - sn); + 38d4: 0013051b addiw a0,t1,1 + if (pr < (stbsp__int32)l) + 38d8: 0007031b sext.w t1,a4 + pr -= l; + 38dc: 4107073b subw a4,a4,a6 + 38e0: d76ff06f j 2e56 + *--s = stbsp__comma; + 38e4: 00004a17 auipc s4,0x4 + 38e8: 584a0a13 addi s4,s4,1412 # 7e68 + if (n64 >= 100000000) { + 38ec: 05f5e7b7 lui a5,0x5f5e + 38f0: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5533f> + n = (stbsp__uint32)(n64 % 100000000); + 38f4: 05f5e637 lui a2,0x5f5e + *--s = stbsp__comma; + 38f8: 0cda4b83 lbu s7,205(s4) + if (n64 >= 100000000) { + 38fc: e83e sd a5,16(sp) + n = (stbsp__uint32)(n64 % 100000000); + 38fe: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f55340> + l = 0; + 3902: d082 sw zero,96(sp) + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + 3904: 040e7813 andi a6,t3,64 + 3908: 4701 li a4,0 + 390a: 4281 li t0,0 + s = num + STBSP__NUMSZ; + 390c: 28010a93 addi s5,sp,640 + n = (stbsp__uint32)(n64 % 100000000); + 3910: ec3e sd a5,24(sp) + if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { + 3912: 430d li t1,3 + n /= 10; + 3914: 45a9 li a1,10 + while (n) { + 3916: 4ea5 li t4,9 + *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; + 3918: 06400f93 li t6,100 + if (n64 >= 100000000) { + 391c: 67c2 ld a5,16(sp) + char *o = s - 8; + 391e: ff8a8513 addi a0,s5,-8 + if (n64 >= 100000000) { + 3922: 0fe7f763 bgeu a5,t5,3a10 + n = (stbsp__uint32)(n64 % 100000000); + 3926: 6662 ld a2,24(sp) + 3928: 02cf77b3 remu a5,t5,a2 + n64 /= 100000000; + 392c: 02cf5f33 divu t5,t5,a2 + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + 3930: 0e080463 beqz a6,3a18 + while (n) { + 3934: cb85 beqz a5,3964 + *--s = stbsp__comma; + 3936: 1afd addi s5,s5,-1 + if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { + 3938: 00671763 bne a4,t1,3946 + --o; + 393c: 017a8023 sb s7,0(s5) + 3940: 157d addi a0,a0,-1 + *--s = stbsp__comma; + 3942: 1afd addi s5,s5,-1 + l = 0; + 3944: 4701 li a4,0 + if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { + 3946: 2705 addiw a4,a4,1 + *--s = (char)(n % 10) + '0'; + 3948: 02b7f63b remuw a2,a5,a1 + 394c: 0306061b addiw a2,a2,48 + 3950: 00ca8023 sb a2,0(s5) + n /= 10; + 3954: 02b7d63b divuw a2,a5,a1 + while (n) { + 3958: 00fef563 bgeu t4,a5,3962 + *--s = stbsp__comma; + 395c: 1afd addi s5,s5,-1 + 395e: 87b2 mv a5,a2 + 3960: bfe1 j 3938 + while (n) { + 3962: 4285 li t0,1 + if (n64 == 0) { + 3964: 020f0063 beqz t5,3984 + while (s != o) + 3968: fb550ae3 beq a0,s5,391c + *--s = stbsp__comma; + 396c: 1afd addi s5,s5,-1 + if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { + 396e: 00080663 beqz a6,397a + 3972: 08670863 beq a4,t1,3a02 + 3976: 2705 addiw a4,a4,1 + 3978: 4285 li t0,1 + *--s = '0'; + 397a: 03000793 li a5,48 + 397e: 00fa8023 sb a5,0(s5) + 3982: b7dd j 3968 + 3984: 00028363 beqz t0,398a + 3988: d0ba sw a4,96(sp) + if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) + 398a: 000ac703 lbu a4,0(s5) + 398e: 03000793 li a5,48 + 3992: 34f70b63 beq a4,a5,3ce8 + l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); + 3996: 051c addi a5,sp,640 + 3998: 415786bb subw a3,a5,s5 + tail[0] = 0; + 399c: 06010823 sb zero,112(sp) + if (fl & STBSP__NEGATIVE) { + 39a0: 080e7713 andi a4,t3,128 + 39a4: 87f2 mv a5,t3 + 39a6: 32070863 beqz a4,3cd6 + 39aa: 678d lui a5,0x3 + 39ac: d017879b addiw a5,a5,-767 # 2d01 + sign[0] = 1; + 39b0: 06f11423 sh a5,104(sp) + 39b4: 4705 li a4,1 + 39b6: 4a05 li s4,1 + l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); + 39b8: d0b6 sw a3,96(sp) + if (l == 0) { + 39ba: 30068163 beqz a3,3cbc + cs = l + (3 << 24); + 39be: 030002b7 lui t0,0x3000 + 39c2: 00d282bb addw t0,t0,a3 + if (pr < (stbsp__int32)l) + 39c6: 0006861b sext.w a2,a3 + if (pr < 0) + 39ca: fff8c793 not a5,a7 + 39ce: 97fd srai a5,a5,0x3f + if (pr < (stbsp__int32)l) + 39d0: 00f8f7b3 and a5,a7,a5 + 39d4: 0007859b sext.w a1,a5 + 39d8: 00c5d363 bge a1,a2,39de + 39dc: 87b2 mv a5,a2 + n = pr + lead[0] + tail[0] + tz; + 39de: 00f7063b addw a2,a4,a5 + 39e2: 8732 mv a4,a2 + if (pr < (stbsp__int32)l) + 39e4: 2781 sext.w a5,a5 + if ((fl & STBSP__LEFTJUST) == 0) { + 39e6: 001e7513 andi a0,t3,1 + if (fw < (stbsp__int32)n) + 39ea: 835a mv t1,s6 + 39ec: 00cb5363 bge s6,a2,39f2 + 39f0: 8332 mv t1,a2 + fw -= n; + 39f2: 40e3033b subw t1,t1,a4 + scopy: + 39f6: 4f81 li t6,0 + pr -= l; + 39f8: 40d7873b subw a4,a5,a3 + tz = 0; + 39fc: 4881 li a7,0 + scopy: + 39fe: 9e2ff06f j 2be0 + *--s = stbsp__comma; + 3a02: 87de mv a5,s7 + --o; + 3a04: 157d addi a0,a0,-1 + l = 0; + 3a06: 4701 li a4,0 + --o; + 3a08: 4285 li t0,1 + 3a0a: 00fa8023 sb a5,0(s5) + 3a0e: bfa9 j 3968 + n = (stbsp__uint32)n64; + 3a10: 000f079b sext.w a5,t5 + n64 = 0; + 3a14: 4f01 li t5,0 + 3a16: bf29 j 3930 + 3a18: f046 sd a7,32(sp) + *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; + 3a1a: 03f7f63b remuw a2,a5,t6 + s -= 2; + 3a1e: 1af9 addi s5,s5,-2 + *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; + 3a20: 0007889b sext.w a7,a5 + 3a24: 2605 addiw a2,a2,1 + 3a26: 0016161b slliw a2,a2,0x1 + 3a2a: 1602 slli a2,a2,0x20 + 3a2c: 9201 srli a2,a2,0x20 + 3a2e: 9652 add a2,a2,s4 + 3a30: 00065603 lhu a2,0(a2) + n /= 100; + 3a34: 03f7d7bb divuw a5,a5,t6 + *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; + 3a38: 00ca9023 sh a2,0(s5) + } while (n); + 3a3c: 06300613 li a2,99 + 3a40: fd166de3 bltu a2,a7,3a1a + 3a44: 7882 ld a7,32(sp) + if (n64 == 0) { + 3a46: f20f11e3 bnez t5,3968 + 3a4a: bf2d j 3984 + *(stbsp__uint32 *)bf = 0x20202020; + 3a4c: 20202b37 lui s6,0x20202 + stbsp__cb_buf_clamp(i, fw); + 3a50: 854a mv a0,s2 + *bf++ = ' '; + 3a52: 02000a93 li s5,32 + *(stbsp__uint32 *)bf = 0x20202020; + 3a56: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201f9260> + stbsp__chk_cb_buf(1); + 3a5a: 1fe00a13 li s4,510 + stbsp__cb_buf_clamp(i, fw); + 3a5e: 20000b93 li s7,512 + 3a62: 891a mv s2,t1 + 3a64: 0a098063 beqz s3,3b04 + 3a68: 40a40633 sub a2,s0,a0 + 3a6c: 40cb87bb subw a5,s7,a2 + 3a70: 873e mv a4,a5 + 3a72: 00f95363 bge s2,a5,3a78 + 3a76: 874a mv a4,s2 + 3a78: 0007079b sext.w a5,a4 + fw -= i; + 3a7c: 40e9093b subw s2,s2,a4 + while (i) { + 3a80: e799 bnez a5,3a8e + 3a82: a281 j 3bc2 + *bf++ = ' '; + 3a84: 01540023 sb s5,0(s0) + --i; + 3a88: 37fd addiw a5,a5,-1 + *bf++ = ' '; + 3a8a: 0405 addi s0,s0,1 + while (i) { + 3a8c: cba1 beqz a5,3adc + if ((((stbsp__uintptr)bf) & 3) == 0) + 3a8e: 00347713 andi a4,s0,3 + 3a92: fb6d bnez a4,3a84 + while (i >= 4) { + 3a94: 470d li a4,3 + 3a96: 40f75363 bge a4,a5,3e9c + 3a9a: ffc7869b addiw a3,a5,-4 + 3a9e: 0026d79b srliw a5,a3,0x2 + 3aa2: 0017871b addiw a4,a5,1 + 3aa6: 070a slli a4,a4,0x2 + 3aa8: 9722 add a4,a4,s0 + *(stbsp__uint32 *)bf = 0x20202020; + 3aaa: 01642023 sw s6,0(s0) + bf += 4; + 3aae: 0411 addi s0,s0,4 + while (i >= 4) { + 3ab0: fee41de3 bne s0,a4,3aaa + 3ab4: 0027979b slliw a5,a5,0x2 + 3ab8: 40f687bb subw a5,a3,a5 + while (i--) + 3abc: fff7869b addiw a3,a5,-1 + 3ac0: cf91 beqz a5,3adc + 3ac2: 9fa1 addw a5,a5,s0 + *bf++ = ' '; + 3ac4: 0705 addi a4,a4,1 + while (i--) + 3ac6: 0007061b sext.w a2,a4 + *bf++ = ' '; + 3aca: ff570fa3 sb s5,-1(a4) + while (i--) + 3ace: fec79be3 bne a5,a2,3ac4 + 3ad2: 2685 addiw a3,a3,1 + 3ad4: 02069793 slli a5,a3,0x20 + 3ad8: 9381 srli a5,a5,0x20 + 3ada: 943e add s0,s0,a5 + stbsp__chk_cb_buf(1); + 3adc: 00098f63 beqz s3,3afa + 3ae0: 40a4063b subw a2,s0,a0 + 3ae4: 00ca5b63 bge s4,a2,3afa + 3ae8: 65a2 ld a1,8(sp) + 3aea: e81e sd t2,16(sp) + 3aec: 00cd0d3b addw s10,s10,a2 + 3af0: 9982 jalr s3 + 3af2: 80050be3 beqz a0,3308 + 3af6: 63c2 ld t2,16(sp) + 3af8: 842a mv s0,a0 + while (fw) { + 3afa: f60915e3 bnez s2,3a64 + 3afe: 892a mv s2,a0 + 3b00: f21fe06f j 2a20 + stbsp__cb_buf_clamp(i, fw); + 3b04: 87ca mv a5,s2 + fw -= i; + 3b06: 4901 li s2,0 + if ((((stbsp__uintptr)bf) & 3) == 0) + 3b08: b759 j 3a8e + } else if (fl & STBSP__LEADINGPLUS) { + 3b0a: 002e7713 andi a4,t3,2 + 3b0e: 94070663 beqz a4,2c5a + sign[0] = 1; + 3b12: 670d lui a4,0x3 + 3b14: b0170713 addi a4,a4,-1279 # 2b01 + 3b18: 06e11423 sh a4,104(sp) + 3b1c: 93eff06f j 2c5a + if (((stbsp__uintptr)sn & 3) == 0) + 3b20: 87d6 mv a5,s5 + while (limit >= 4) { + 3b22: 470d li a4,3 + 3b24: 22d77763 bgeu a4,a3,3d52 + if ((v - 0x01010101) & (~v) & 0x80808080UL) + 3b28: feff05b7 lui a1,0xfeff0 + 3b2c: 80808637 lui a2,0x80808 + 3b30: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe713f> + 3b34: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff807ff2c0> + while (limit >= 4) { + 3b38: 480d li a6,3 + 3b3a: a029 j 3b44 + limit -= 4; + 3b3c: 36f1 addiw a3,a3,-4 + sn += 4; + 3b3e: 0791 addi a5,a5,4 + while (limit >= 4) { + 3b40: 20d87963 bgeu a6,a3,3d52 + stbsp__uint32 v = *(stbsp__uint32 *)sn; + 3b44: 4398 lw a4,0(a5) + if ((v - 0x01010101) & (~v) & 0x80808080UL) + 3b46: 00b7053b addw a0,a4,a1 + 3b4a: fff74713 not a4,a4 + 3b4e: 8f69 and a4,a4,a0 + 3b50: 8f71 and a4,a4,a2 + 3b52: 2701 sext.w a4,a4 + 3b54: d765 beqz a4,3b3c + 3b56: 02069713 slli a4,a3,0x20 + 3b5a: 9301 srli a4,a4,0x20 + 3b5c: 973e add a4,a4,a5 + 3b5e: a021 j 3b66 + ++sn; + 3b60: 0785 addi a5,a5,1 + while (limit && *sn) { + 3b62: 00e78663 beq a5,a4,3b6e + 3b66: 0007c683 lbu a3,0(a5) + 3b6a: fafd bnez a3,3b60 + 3b6c: 873e mv a4,a5 + return (stbsp__uint32)(sn - s); + 3b6e: 41570733 sub a4,a4,s5 + 3b72: 0007069b sext.w a3,a4 + if (pr < (stbsp__int32)l) + 3b76: fff6c793 not a5,a3 + 3b7a: 97fd srai a5,a5,0x3f + 3b7c: 8f7d and a4,a4,a5 + 3b7e: 0007079b sext.w a5,a4 + n = pr + lead[0] + tail[0] + tz; + 3b82: 863e mv a2,a5 + pr -= l; + 3b84: 9f15 subw a4,a4,a3 + return (stbsp__uint32)(sn - s); + 3b86: d2eff06f j 30b4 + for (n = 1; n < l; n++) + 3b8a: 4605 li a2,1 + 3b8c: aed663e3 bltu a2,a3,3672 + 3b90: 0c210613 addi a2,sp,194 + 3b94: bcf5 j 3690 + l = pr + 1; + 3b96: 4685 li a3,1 + if ((l - 1) > (stbsp__uint32)pr) + 3b98: 4501 li a0,0 + *s++ = sn[0]; + 3b9a: 0c110613 addi a2,sp,193 + 3b9e: bccd j 3690 + 3ba0: 4591 li a1,4 + 3ba2: 4f91 li t6,4 + n = (dp >= 100) ? 5 : 4; + 3ba4: 4e91 li t4,4 + 3ba6: be21 j 36be + 3ba8: 4a85 li s5,1 + 3baa: 80000737 lui a4,0x80000 + pr = 1; // default is 6 + 3bae: 4a05 li s4,1 + 3bb0: 920ff06f j 2cd0 + dp = (n64) ? -1022 : 0; + 3bb4: 4601 li a2,0 + 3bb6: c119 beqz a0,3bbc + 3bb8: c0200613 li a2,-1022 + *bits = b & ((((stbsp__uint64)1) << 52) - 1); + 3bbc: 872a mv a4,a0 + 3bbe: a3aff06f j 2df8 + stbsp__chk_cb_buf(1); + 3bc2: 2601 sext.w a2,a2 + 3bc4: 1fe00793 li a5,510 + 3bc8: f2c7c0e3 blt a5,a2,3ae8 + 3bcc: bd61 j 3a64 + tail[0] = (char)n; + 3bce: 4795 li a5,5 + tail[n] = '0' + dp % 10; + 3bd0: 06b10aa3 sb a1,117(sp) + tail[0] = (char)n; + 3bd4: 06f10823 sb a5,112(sp) + tail[n] = '0' + dp % 10; + 3bd8: 4815 li a6,5 + 3bda: 4f95 li t6,5 + n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); + 3bdc: 4595 li a1,5 + 3bde: b935 j 381a + l = pr + dp; + 3be0: 011786bb addw a3,a5,a7 + 3be4: d0b6 sw a3,96(sp) + 3be6: b6d5 j 37ca + s = (char *)"null"; + 3be8: 00002a97 auipc s5,0x2 + 3bec: 518a8a93 addi s5,s5,1304 # 6100 <_GLOBAL__sub_I__ZSt3cin+0x158> + 3bf0: c80ff06f j 3070 + } else if (fl & STBSP__LEADINGPLUS) { + 3bf4: 002e7793 andi a5,t3,2 + 3bf8: 1c079c63 bnez a5,3dd0 + sign[0] = 0; + 3bfc: 4689 li a3,2 + 3bfe: 4a09 li s4,2 + 3c00: 4805 li a6,1 + 3c02: 9e8ff06f j 2dea + sign[0] = 1; + 3c06: 670d lui a4,0x3 + 3c08: b0170713 addi a4,a4,-1279 # 2b01 + 3c0c: 06e11423 sh a4,104(sp) + 3c10: b86ff06f j 2f96 + pr = 0; + 3c14: 4881 li a7,0 + 3c16: f1ffe06f j 2b34 + *s++ = '0'; + 3c1a: 03000713 li a4,48 + 3c1e: 0ce10023 sb a4,192(sp) + if (pr) + 3c22: 1a088c63 beqz a7,3dda + *s++ = stbsp__period; + 3c26: 00004717 auipc a4,0x4 + 3c2a: 30e74703 lbu a4,782(a4) # 7f34 + n = -dp; + 3c2e: 40f007bb negw a5,a5 + *s++ = stbsp__period; + 3c32: 0ce100a3 sb a4,193(sp) + if ((stbsp__int32)n > pr) + 3c36: 0007871b sext.w a4,a5 + 3c3a: 00e8d363 bge a7,a4,3c40 + 3c3e: 87c6 mv a5,a7 + 3c40: 0007871b sext.w a4,a5 + if ((stbsp__int32)(l + n) > pr) + 3c44: 00d7833b addw t1,a5,a3 + 3c48: 883a mv a6,a4 + while (i) { + 3c4a: 0c210793 addi a5,sp,194 + *s++ = '0'; + 3c4e: 03000513 li a0,48 + while (i) { + 3c52: e711 bnez a4,3c5e + 3c54: a271 j 3de0 + if ((((stbsp__uintptr)s) & 3) == 0) + 3c56: 0037f613 andi a2,a5,3 + 3c5a: 18060563 beqz a2,3de4 + *s++ = '0'; + 3c5e: 85ba mv a1,a4 + 3c60: 00a78023 sb a0,0(a5) + --i; + 3c64: 377d addiw a4,a4,-1 + *s++ = '0'; + 3c66: 0785 addi a5,a5,1 + while (i) { + 3c68: f77d bnez a4,3c56 + if ((stbsp__int32)(l + n) > pr) + 3c6a: 0003071b sext.w a4,t1 + 3c6e: 4108863b subw a2,a7,a6 + 3c72: 00e8d563 bge a7,a4,3c7c + l = pr - n; + 3c76: 0006069b sext.w a3,a2 + 3c7a: d0b2 sw a2,96(sp) + while (i) { + 3c7c: c68d beqz a3,3ca6 + 3c7e: 7566 ld a0,120(sp) + 3c80: 02069813 slli a6,a3,0x20 + 3c84: 02085813 srli a6,a6,0x20 + 3c88: 01078eb3 add t4,a5,a6 + 3c8c: 85aa mv a1,a0 + 3c8e: 873e mv a4,a5 + *s++ = *sn++; + 3c90: 0005c883 lbu a7,0(a1) + 3c94: 0705 addi a4,a4,1 + while (i) { + 3c96: 0585 addi a1,a1,1 + *s++ = *sn++; + 3c98: ff170fa3 sb a7,-1(a4) + while (i) { + 3c9c: ffd71ae3 bne a4,t4,3c90 + 3ca0: 9542 add a0,a0,a6 + 3ca2: 97c2 add a5,a5,a6 + 3ca4: fcaa sd a0,120(sp) + l = (stbsp__uint32)(s - (num + 64)); + 3ca6: 0c010a93 addi s5,sp,192 + cs = 1 + (3 << 24); // how many tens did we write (for commas below) + 3caa: 030002b7 lui t0,0x3000 + tz = pr - (n + l); + 3cae: 40d608bb subw a7,a2,a3 + l = (stbsp__uint32)(s - (num + 64)); + 3cb2: 415787b3 sub a5,a5,s5 + cs = 1 + (3 << 24); // how many tens did we write (for commas below) + 3cb6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7241> + 3cb8: fbcff06f j 3474 + *--s = '0'; + 3cbc: 03000793 li a5,48 + 3cc0: fefa8fa3 sb a5,-1(s5) + l = 1; + 3cc4: 030002b7 lui t0,0x3000 + 3cc8: 4785 li a5,1 + 3cca: d0be sw a5,96(sp) + *--s = '0'; + 3ccc: 1afd addi s5,s5,-1 + l = 1; + 3cce: 4605 li a2,1 + 3cd0: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7241> + 3cd2: 4685 li a3,1 + 3cd4: b9dd j 39ca + } else if (fl & STBSP__LEADINGSPACE) { + 3cd6: 004e7713 andi a4,t3,4 + 3cda: e74d bnez a4,3d84 + } else if (fl & STBSP__LEADINGPLUS) { + 3cdc: 8b89 andi a5,a5,2 + 3cde: efd9 bnez a5,3d7c + sign[0] = 0; + 3ce0: 06010423 sb zero,104(sp) + 3ce4: 4a01 li s4,0 + 3ce6: b9c9 j 39b8 + if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) + 3ce8: 051c addi a5,sp,640 + 3cea: cafa89e3 beq s5,a5,399c + ++s; + 3cee: 0a85 addi s5,s5,1 + l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); + 3cf0: 415786bb subw a3,a5,s5 + 3cf4: b165 j 399c + n = dp - n; + 3cf6: 40ce87bb subw a5,t4,a2 + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + 3cfa: 12030e63 beqz t1,3e36 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 3cfe: 4511 li a0,4 + 3d00: 03000613 li a2,48 + *s++ = stbsp__comma; + 3d04: 00170693 addi a3,a4,1 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 3d08: 00030563 beqz t1,3d12 + 3d0c: 2585 addiw a1,a1,1 + 3d0e: 00a58963 beq a1,a0,3d20 + 3d12: 8736 mv a4,a3 + --n; + 3d14: 37fd addiw a5,a5,-1 + 3d16: fec70fa3 sb a2,-1(a4) + while (n) { + 3d1a: f7ed bnez a5,3d04 + 3d1c: f38ff06f j 3454 + 3d20: fe568fa3 sb t0,-1(a3) + *s++ = stbsp__comma; + 3d24: 0709 addi a4,a4,2 + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + 3d26: 4585 li a1,1 + 3d28: b7f5 j 3d14 + sign[0] = 0; + 3d2a: 06010423 sb zero,104(sp) + 3d2e: f1dfe06f j 2c4a + tail[idx + 1] = "_kMGT"[fl >> 24]; + 3d32: 00002697 auipc a3,0x2 + 3d36: 3de68693 addi a3,a3,990 # 6110 <_GLOBAL__sub_I__ZSt3cin+0x168> + 3d3a: 9736 add a4,a4,a3 + 3d3c: 00074683 lbu a3,0(a4) + 3d40: 1088 addi a0,sp,96 + 3d42: 22060713 addi a4,a2,544 + 3d46: 972a add a4,a4,a0 + 3d48: ded70823 sb a3,-528(a4) + idx++; + 3d4c: 8fb2 mv t6,a2 + 3d4e: fb0ff06f j 34fe + while (limit && *sn) { + 3d52: e00692e3 bnez a3,3b56 + 3d56: bd19 j 3b6c + pr = (dp < (stbsp__int32)l) ? l - dp : 0; + 3d58: 0008071b sext.w a4,a6 + 3d5c: 86c2 mv a3,a6 + 3d5e: 88d2 mv a7,s4 + pr = -dp + ((pr > (stbsp__int32)l) ? (stbsp__int32) l : pr); + 3d60: 863a mv a2,a4 + 3d62: 00e8d363 bge a7,a4,3d68 + 3d66: 8646 mv a2,a7 + 3d68: 40f608bb subw a7,a2,a5 + 3d6c: 814ff06f j 2d80 + divisor = 1000.0f; + 3d70: 00003797 auipc a5,0x3 + 3d74: b407b787 fld fa5,-1216(a5) # 68b0 + 3d78: dd5fe06f j 2b4c + 3d7c: 678d lui a5,0x3 + 3d7e: b017879b addiw a5,a5,-1279 # 2b01 + 3d82: b13d j 39b0 + 3d84: 6789 lui a5,0x2 + 3d86: 2785 addiw a5,a5,1 # 2001 <_vscanf_core.constprop.0+0x6b9> + 3d88: b125 j 39b0 + *s++ = stbsp__period; + 3d8a: 00004517 auipc a0,0x4 + 3d8e: 1aa54503 lbu a0,426(a0) # 7f34 + sn = s; + 3d92: 0c210793 addi a5,sp,194 + n = pr; + 3d96: 0008869b sext.w a3,a7 + *s++ = stbsp__period; + 3d9a: 0ca100a3 sb a0,193(sp) + sn = s; + 3d9e: fcbe sd a5,120(sp) + if (n > 13) + 3da0: 4535 li a0,13 + n64 <<= 4; + 3da2: 0712 slli a4,a4,0x4 + if (n > 13) + 3da4: 8836 mv a6,a3 + 3da6: 00d57363 bgeu a0,a3,3dac + 3daa: 4835 li a6,13 + 3dac: 0008051b sext.w a0,a6 + while (n--) { + 3db0: 387d addiw a6,a6,-1 + if (pr > (stbsp__int32)n) + 3db2: af1542e3 blt a0,a7,3896 + tz = 0; + 3db6: 4881 li a7,0 + 3db8: b4cd j 389a + while (n < l) { + 3dba: 87ba mv a5,a4 + 3dbc: bc1d j 37f2 + tail[0] = (char)n; + 3dbe: 478d li a5,3 + 3dc0: 06f10823 sb a5,112(sp) + tail[n] = '0' + dp % 10; + 3dc4: 06b109a3 sb a1,115(sp) + 3dc8: 480d li a6,3 + 3dca: 4f8d li t6,3 + 3dcc: 8e4ff06f j 2eb0 + 3dd0: 678d lui a5,0x3 + 3dd2: b017879b addiw a5,a5,-1279 # 2b01 + 3dd6: 80aff06f j 2de0 + if (pr) + 3dda: 8336 mv t1,a3 + *s++ = '0'; + 3ddc: 0c110793 addi a5,sp,193 + while (i) { + 3de0: 4801 li a6,0 + 3de2: b561 j 3c6a + while (i >= 4) { + 3de4: 460d li a2,3 + 3de6: 04e65663 bge a2,a4,3e32 + 3dea: ffb5871b addiw a4,a1,-5 + 3dee: 0027559b srliw a1,a4,0x2 + 3df2: 0015861b addiw a2,a1,1 + 3df6: 060a slli a2,a2,0x2 + *(stbsp__uint32 *)s = 0x30303030; + 3df8: 30303537 lui a0,0x30303 + 3dfc: 963e add a2,a2,a5 + 3dfe: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fa270> + 3e02: c388 sw a0,0(a5) + s += 4; + 3e04: 0791 addi a5,a5,4 + while (i >= 4) { + 3e06: fef61ee3 bne a2,a5,3e02 + 3e0a: 0025959b slliw a1,a1,0x2 + 3e0e: 9f0d subw a4,a4,a1 + while (i) { + 3e10: e4070de3 beqz a4,3c6a + *s++ = '0'; + 3e14: 03000513 li a0,48 + while (i) { + 3e18: 00f705bb addw a1,a4,a5 + *s++ = '0'; + 3e1c: 0605 addi a2,a2,1 + while (i) { + 3e1e: 00060e9b sext.w t4,a2 + *s++ = '0'; + 3e22: fea60fa3 sb a0,-1(a2) + while (i) { + 3e26: ffd59be3 bne a1,t4,3e1c + 3e2a: 1702 slli a4,a4,0x20 + 3e2c: 9301 srli a4,a4,0x20 + 3e2e: 97ba add a5,a5,a4 + 3e30: bd2d j 3c6a + while (i >= 4) { + 3e32: 863e mv a2,a5 + 3e34: b7c5 j 3e14 + if ((((stbsp__uintptr)s) & 3) == 0) + 3e36: 00377693 andi a3,a4,3 + 3e3a: ce81 beqz a3,3e52 + *s++ = '0'; + 3e3c: 03000693 li a3,48 + 3e40: 00d70023 sb a3,0(a4) + --n; + 3e44: 37fd addiw a5,a5,-1 + *s++ = '0'; + 3e46: 0705 addi a4,a4,1 + while (n) { + 3e48: e0078663 beqz a5,3454 + if ((((stbsp__uintptr)s) & 3) == 0) + 3e4c: 00377613 andi a2,a4,3 + 3e50: fa65 bnez a2,3e40 + while (n >= 4) { + 3e52: 468d li a3,3 + 3e54: eaf6f5e3 bgeu a3,a5,3cfe + 3e58: ffc7869b addiw a3,a5,-4 + 3e5c: 0026d69b srliw a3,a3,0x2 + 3e60: 2685 addiw a3,a3,1 + 3e62: 068a slli a3,a3,0x2 + *(stbsp__uint32 *)s = 0x30303030; + 3e64: 30303637 lui a2,0x30303 + 3e68: 96ba add a3,a3,a4 + 3e6a: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fa270> + 3e6e: c310 sw a2,0(a4) + s += 4; + 3e70: 0711 addi a4,a4,4 + while (n >= 4) { + 3e72: fed71ee3 bne a4,a3,3e6e + 3e76: 8b8d andi a5,a5,3 + while (n) { + 3e78: e80793e3 bnez a5,3cfe + 3e7c: dd8ff06f j 3454 + if (((stbsp__uintptr)sn & 3) == 0) + 3e80: 87d6 mv a5,s5 + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + 3e82: 56fd li a3,-1 + 3e84: b155 j 3b28 + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + 3e86: 5775 li a4,-3 + 3e88: 00e7ce63 blt a5,a4,3ea4 + 3e8c: f6fa4663 blt s4,a5,35f8 + if (dp > 0) { + 3e90: ecf054e3 blez a5,3d58 + 3e94: 86c2 mv a3,a6 + pr = (dp < (stbsp__int32)l) ? l - dp : 0; + 3e96: 4881 li a7,0 + 3e98: ee9fe06f j 2d80 + while (i--) + 3e9c: fff7869b addiw a3,a5,-1 + 3ea0: 8722 mv a4,s0 + 3ea2: b105 j 3ac2 + if (pr > (stbsp__int32)l) + 3ea4: 0008071b sext.w a4,a6 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 3ea8: 7ae6 ld s5,120(sp) + if (pr > (stbsp__int32)l) + 3eaa: 86c2 mv a3,a6 + 3eac: 88d2 mv a7,s4 + 3eae: f7475d63 bge a4,s4,3628 + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + 3eb2: 8542 mv a0,a6 + 3eb4: f56ff06f j 360a + +0000000000003eb8 : +{ + 3eb8: 715d addi sp,sp,-80 + va_start(va, fmt); + 3eba: 02010313 addi t1,sp,32 +{ + 3ebe: f032 sd a2,32(sp) + 3ec0: f436 sd a3,40(sp) + 3ec2: f83a sd a4,48(sp) + result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); + 3ec4: 86ae mv a3,a1 + 3ec6: 862a mv a2,a0 + 3ec8: 871a mv a4,t1 + 3eca: 4581 li a1,0 + 3ecc: 4501 li a0,0 +{ + 3ece: ec06 sd ra,24(sp) + 3ed0: fc3e sd a5,56(sp) + 3ed2: e0c2 sd a6,64(sp) + 3ed4: e4c6 sd a7,72(sp) + va_start(va, fmt); + 3ed6: e41a sd t1,8(sp) + result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); + 3ed8: bc6fe0ef jal 229e +} + 3edc: 60e2 ld ra,24(sp) + 3ede: 6161 addi sp,sp,80 + 3ee0: 8082 ret + +0000000000003ee2 : +{ + 3ee2: dd010113 addi sp,sp,-560 + 3ee6: 22813023 sd s0,544(sp) + 3eea: 20913c23 sd s1,536(sp) + 3eee: 22113423 sd ra,552(sp) + 3ef2: 84ae mv s1,a1 + 3ef4: 842a mv s0,a0 + 3ef6: 88b2 mv a7,a2 + 3ef8: 8736 mv a4,a3 + if ( (count == 0) && !buf ) + 3efa: e591 bnez a1,3f06 + 3efc: c141 beqz a0,3f7c + c.buf = buf; + 3efe: e02a sd a0,0(sp) + c.count = count; + 3f00: e402 sd zero,8(sp) + return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can + 3f02: 0810 addi a2,sp,16 + 3f04: a089 j 3f46 + if (len > c->count) + 3f06: 0015a593 slti a1,a1,1 + 3f0a: 40b005bb negw a1,a1 + 3f0e: 8de5 and a1,a1,s1 + c.buf = buf; + 3f10: e02a sd a0,0(sp) + c.count = count; + 3f12: c426 sw s1,8(sp) + c.length = 0; + 3f14: c602 sw zero,12(sp) + if (len > c->count) + 3f16: 2581 sext.w a1,a1 + if (len) { + 3f18: 0804d663 bgez s1,3fa4 + s = buf; + 3f1c: 4781 li a5,0 + if (buf != c->buf) { + 3f1e: c911 beqz a0,3f32 + *d++ = *s++; + 3f20: 0007c803 lbu a6,0(a5) + 3f24: 0785 addi a5,a5,1 + 3f26: 00f40533 add a0,s0,a5 + 3f2a: ff050fa3 sb a6,-1(a0) + } while (s < se); + 3f2e: feb7e9e3 bltu a5,a1,3f20 + c->count -= len; + 3f32: 40b486bb subw a3,s1,a1 + c->buf += len; + 3f36: 95a2 add a1,a1,s0 + 3f38: e02e sd a1,0(sp) + c->count -= len; + 3f3a: c436 sw a3,8(sp) + return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can + 3f3c: 1ff00793 li a5,511 + 3f40: fcd7d1e3 bge a5,a3,3f02 + 3f44: 6602 ld a2,0(sp) + STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__clamp_callback, &c, stbsp__clamp_callback(0,&c,0), fmt, va ); + 3f46: 86c6 mv a3,a7 + 3f48: 858a mv a1,sp + 3f4a: ffffd517 auipc a0,0xffffd + 3f4e: 21650513 addi a0,a0,534 # 1160 + 3f52: b4cfe0ef jal 229e + l = (int)( c.buf - buf ); + 3f56: 6782 ld a5,0(sp) + 3f58: 9f81 subw a5,a5,s0 + if ( l >= count ) // should never be greater, only equal (or less) than count + 3f5a: 0097c463 blt a5,s1,3f62 + l = count - 1; + 3f5e: fff4879b addiw a5,s1,-1 + buf[l] = 0; + 3f62: 943e add s0,s0,a5 + 3f64: 00040023 sb zero,0(s0) +} + 3f68: 22813083 ld ra,552(sp) + 3f6c: 22013403 ld s0,544(sp) + 3f70: 4532 lw a0,12(sp) + 3f72: 21813483 ld s1,536(sp) + 3f76: 23010113 addi sp,sp,560 + 3f7a: 8082 ret + STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); + 3f7c: 86b2 mv a3,a2 + 3f7e: 858a mv a1,sp + 3f80: 0810 addi a2,sp,16 + 3f82: ffffd517 auipc a0,0xffffd + 3f86: 22c50513 addi a0,a0,556 # 11ae + c.length = 0; + 3f8a: c602 sw zero,12(sp) + STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); + 3f8c: b12fe0ef jal 229e +} + 3f90: 22813083 ld ra,552(sp) + 3f94: 22013403 ld s0,544(sp) + 3f98: 4532 lw a0,12(sp) + 3f9a: 21813483 ld s1,536(sp) + 3f9e: 23010113 addi sp,sp,560 + 3fa2: 8082 ret + 3fa4: 86a6 mv a3,s1 + 3fa6: bf59 j 3f3c + +0000000000003fa8 : +{ + 3fa8: 715d addi sp,sp,-80 + va_start(va, fmt); + 3faa: 02810313 addi t1,sp,40 +{ + 3fae: f436 sd a3,40(sp) + result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); + 3fb0: 869a mv a3,t1 +{ + 3fb2: ec06 sd ra,24(sp) + 3fb4: f83a sd a4,48(sp) + 3fb6: fc3e sd a5,56(sp) + 3fb8: e0c2 sd a6,64(sp) + 3fba: e4c6 sd a7,72(sp) + va_start(va, fmt); + 3fbc: e41a sd t1,8(sp) + result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); + 3fbe: f25ff0ef jal 3ee2 +} + 3fc2: 60e2 ld ra,24(sp) + 3fc4: 6161 addi sp,sp,80 + 3fc6: 8082 ret + +0000000000003fc8 : +{ + 3fc8: 86ae mv a3,a1 + 3fca: 8732 mv a4,a2 + return STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); + 3fcc: 4581 li a1,0 + 3fce: 862a mv a2,a0 + 3fd0: 4501 li a0,0 + 3fd2: accfe06f j 229e + +0000000000003fd6 : +{ + 3fd6: 7119 addi sp,sp,-128 + va_start(ap, format); + 3fd8: 05010313 addi t1,sp,80 +{ + 3fdc: e0a2 sd s0,64(sp) + 3fde: fc26 sd s1,56(sp) + 3fe0: 842a mv s0,a0 + 3fe2: e8b2 sd a2,80(sp) + _vprintf_core(&ctx, format, ap); + 3fe4: 0808 addi a0,sp,16 + ctx.limit = size; + 3fe6: 54fd li s1,-1 + _vprintf_core(&ctx, format, ap); + 3fe8: 861a mv a2,t1 +{ + 3fea: e486 sd ra,72(sp) + 3fec: ecb6 sd a3,88(sp) + 3fee: f0ba sd a4,96(sp) + 3ff0: f4be sd a5,104(sp) + 3ff2: f8c2 sd a6,112(sp) + 3ff4: fcc6 sd a7,120(sp) + va_start(ap, format); + 3ff6: e41a sd t1,8(sp) + ctx.buf = str; + 3ff8: e822 sd s0,16(sp) + ctx.limit = size; + 3ffa: ec26 sd s1,24(sp) + ctx.written = 0; + 3ffc: f002 sd zero,32(sp) + ctx.stream = NULL; + 3ffe: f402 sd zero,40(sp) + _vprintf_core(&ctx, format, ap); + 4000: 02c000ef jal 402c <_vprintf_core.constprop.0.isra.0> + if (ctx.written < size) + 4004: 7502 ld a0,32(sp) + 4006: 00950b63 beq a0,s1,401c + str[ctx.written] = '\0'; + 400a: 942a add s0,s0,a0 + 400c: 00040023 sb zero,0(s0) +} + 4010: 60a6 ld ra,72(sp) + 4012: 6406 ld s0,64(sp) + 4014: 74e2 ld s1,56(sp) + 4016: 2501 sext.w a0,a0 + 4018: 6109 addi sp,sp,128 + 401a: 8082 ret + str[size - 1] = '\0'; + 401c: fe040f23 sb zero,-2(s0) +} + 4020: 60a6 ld ra,72(sp) + 4022: 6406 ld s0,64(sp) + 4024: 74e2 ld s1,56(sp) + 4026: 2501 sext.w a0,a0 + 4028: 6109 addi sp,sp,128 + 402a: 8082 ret + +000000000000402c <_vprintf_core.constprop.0.isra.0>: +static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) + 402c: 7129 addi sp,sp,-320 + 402e: edee sd s11,216(sp) + 4030: fe06 sd ra,312(sp) + 4032: 8dae mv s11,a1 + while (*p) + 4034: 0005c583 lbu a1,0(a1) + 4038: cde9 beqz a1,4112 <_vprintf_core.constprop.0.isra.0+0xe6> + 403a: f626 sd s1,296(sp) + 403c: f24a sd s2,288(sp) + 403e: ee4e sd s3,280(sp) + 4040: e656 sd s5,264(sp) + 4042: f9e2 sd s8,240(sp) + 4044: fa22 sd s0,304(sp) + 4046: ea52 sd s4,272(sp) + 4048: e25a sd s6,256(sp) + 404a: fdde sd s7,248(sp) + 404c: f5e6 sd s9,232(sp) + 404e: f1ea sd s10,224(sp) + 4050: 84aa mv s1,a0 + 4052: 8c32 mv s8,a2 + if (*p != '%') + 4054: 02500a93 li s5,37 + 4058: 49c1 li s3,16 + 405a: 00002917 auipc s2,0x2 + 405e: 38a90913 addi s2,s2,906 # 63e4 <_GLOBAL__sub_I__ZSt3cin+0x43c> + 4062: a039 j 4070 <_vprintf_core.constprop.0.isra.0+0x44> + _out_char(ctx, spec); + 4064: 8526 mv a0,s1 + 4066: 952fe0ef jal 21b8 <_out_char> + while (*p) + 406a: 000dc583 lbu a1,0(s11) + 406e: c5d9 beqz a1,40fc <_vprintf_core.constprop.0.isra.0+0xd0> + _out_char(ctx, *p++); + 4070: 0d85 addi s11,s11,1 + if (*p != '%') + 4072: ff5599e3 bne a1,s5,4064 <_vprintf_core.constprop.0.isra.0+0x38> + int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0; + 4076: 4501 li a0,0 + 4078: 4881 li a7,0 + 407a: 4581 li a1,0 + 407c: 4b01 li s6,0 + 407e: 4a01 li s4,0 + if (*p == '-') + 4080: 000dcc83 lbu s9,0(s11) + 4084: fe0c871b addiw a4,s9,-32 + 4088: 0ff77713 zext.b a4,a4 + 408c: 00e9e763 bltu s3,a4,409a <_vprintf_core.constprop.0.isra.0+0x6e> + 4090: 070a slli a4,a4,0x2 + 4092: 974a add a4,a4,s2 + 4094: 4318 lw a4,0(a4) + 4096: 974a add a4,a4,s2 + 4098: 8702 jr a4 + if (*p == '*') + 409a: 02a00793 li a5,42 + 409e: 16fc9c63 bne s9,a5,4216 <_vprintf_core.constprop.0.isra.0+0x1ea> + width = va_arg(ap, int); + 40a2: 000c2403 lw s0,0(s8) + 40a6: 0c21 addi s8,s8,8 + if (width < 0) + 40a8: 00045563 bgez s0,40b2 <_vprintf_core.constprop.0.isra.0+0x86> + width = -width; + 40ac: 4080043b negw s0,s0 + flag_left = 1; + 40b0: 4a05 li s4,1 + while (*p >= '0' && *p <= '9') + 40b2: 001dcc83 lbu s9,1(s11) + p++; + 40b6: 0d85 addi s11,s11,1 + if (*p == '.') + 40b8: 02e00793 li a5,46 + int precision = -1; + 40bc: 5bfd li s7,-1 + if (*p == '.') + 40be: 18fc8a63 beq s9,a5,4252 <_vprintf_core.constprop.0.isra.0+0x226> + if (*p == 'l') + 40c2: 06c00693 li a3,108 + 40c6: 8666 mv a2,s9 + 40c8: 1adc8663 beq s9,a3,4274 <_vprintf_core.constprop.0.isra.0+0x248> + else if (*p == 'z') + 40cc: 07a00693 li a3,122 + p++; + 40d0: 0d85 addi s11,s11,1 + else if (*p == 'z') + 40d2: 24dc8163 beq s9,a3,4314 <_vprintf_core.constprop.0.isra.0+0x2e8> + if (!spec) + 40d6: 06400693 li a3,100 + 40da: 4adc8163 beq s9,a3,457c <_vprintf_core.constprop.0.isra.0+0x550> + 40de: 06400693 li a3,100 + int len_mod = 0; + 40e2: 4e81 li t4,0 + 40e4: 1b96e663 bltu a3,s9,4290 <_vprintf_core.constprop.0.isra.0+0x264> + 40e8: 04700693 li a3,71 + 40ec: 2796e463 bltu a3,s9,4354 <_vprintf_core.constprop.0.isra.0+0x328> + 40f0: 04400693 li a3,68 + 40f4: 0596e363 bltu a3,s9,413a <_vprintf_core.constprop.0.isra.0+0x10e> + 40f8: 240c9363 bnez s9,433e <_vprintf_core.constprop.0.isra.0+0x312> + 40fc: 7452 ld s0,304(sp) + 40fe: 74b2 ld s1,296(sp) + 4100: 7912 ld s2,288(sp) + 4102: 69f2 ld s3,280(sp) + 4104: 6a52 ld s4,272(sp) + 4106: 6ab2 ld s5,264(sp) + 4108: 6b12 ld s6,256(sp) + 410a: 7bee ld s7,248(sp) + 410c: 7c4e ld s8,240(sp) + 410e: 7cae ld s9,232(sp) + 4110: 7d0e ld s10,224(sp) +} + 4112: 70f2 ld ra,312(sp) + 4114: 6dee ld s11,216(sp) + 4116: 6131 addi sp,sp,320 + 4118: 8082 ret + if (*p == '-') + 411a: 4585 li a1,1 + p++; + 411c: 0d85 addi s11,s11,1 + if (*p == '-') + 411e: b78d j 4080 <_vprintf_core.constprop.0.isra.0+0x54> + 4120: 4505 li a0,1 + p++; + 4122: 0d85 addi s11,s11,1 + while (1) + 4124: bfb1 j 4080 <_vprintf_core.constprop.0.isra.0+0x54> + if (*p == '-') + 4126: 4885 li a7,1 + p++; + 4128: 0d85 addi s11,s11,1 + while (1) + 412a: bf99 j 4080 <_vprintf_core.constprop.0.isra.0+0x54> + if (*p == '-') + 412c: 4b05 li s6,1 + p++; + 412e: 0d85 addi s11,s11,1 + while (1) + 4130: bf81 j 4080 <_vprintf_core.constprop.0.isra.0+0x54> + if (*p == '-') + 4132: 4a05 li s4,1 + p++; + 4134: 0d85 addi s11,s11,1 + while (1) + 4136: b7a9 j 4080 <_vprintf_core.constprop.0.isra.0+0x54> + char spec = *p++; + 4138: 8dbe mv s11,a5 + fmt_tmp[f_idx++] = '%'; + 413a: 02500693 li a3,37 + 413e: 02d10823 sb a3,48(sp) + 4142: 4d05 li s10,1 + if (flag_left) + 4144: 000a0763 beqz s4,4152 <_vprintf_core.constprop.0.isra.0+0x126> + fmt_tmp[f_idx++] = '-'; + 4148: 02d00693 li a3,45 + 414c: 02d108a3 sb a3,49(sp) + 4150: 4d09 li s10,2 + if (flag_zero) + 4152: 000b0c63 beqz s6,416a <_vprintf_core.constprop.0.isra.0+0x13e> + fmt_tmp[f_idx++] = '0'; + 4156: 0c0d0793 addi a5,s10,192 + 415a: 0818 addi a4,sp,16 + 415c: 00e786b3 add a3,a5,a4 + 4160: 03000613 li a2,48 + 4164: f6c68023 sb a2,-160(a3) + 4168: 2d05 addiw s10,s10,1 + if (flag_plus) + 416a: c999 beqz a1,4180 <_vprintf_core.constprop.0.isra.0+0x154> + fmt_tmp[f_idx++] = '+'; + 416c: 0c0d0793 addi a5,s10,192 + 4170: 0818 addi a4,sp,16 + 4172: 00e786b3 add a3,a5,a4 + 4176: 02b00613 li a2,43 + 417a: f6c68023 sb a2,-160(a3) + 417e: 2d05 addiw s10,s10,1 + if (flag_space) + 4180: 00088c63 beqz a7,4198 <_vprintf_core.constprop.0.isra.0+0x16c> + fmt_tmp[f_idx++] = ' '; + 4184: 0c0d0793 addi a5,s10,192 + 4188: 0818 addi a4,sp,16 + 418a: 00e786b3 add a3,a5,a4 + 418e: 02000613 li a2,32 + 4192: f6c68023 sb a2,-160(a3) + 4196: 2d05 addiw s10,s10,1 + if (flag_hash) + 4198: c919 beqz a0,41ae <_vprintf_core.constprop.0.isra.0+0x182> + fmt_tmp[f_idx++] = '#'; + 419a: 0c0d0793 addi a5,s10,192 + 419e: 0818 addi a4,sp,16 + 41a0: 00e786b3 add a3,a5,a4 + 41a4: 02300613 li a2,35 + 41a8: f6c68023 sb a2,-160(a3) + 41ac: 2d05 addiw s10,s10,1 + if (width > 0) + 41ae: 03010a13 addi s4,sp,48 + 41b2: 28804563 bgtz s0,443c <_vprintf_core.constprop.0.isra.0+0x410> + if (precision >= 0) + 41b6: 260bd763 bgez s7,4424 <_vprintf_core.constprop.0.isra.0+0x3f8> + fmt_tmp[f_idx++] = spec; + 41ba: 0c0d0793 addi a5,s10,192 + 41be: 0818 addi a4,sp,16 + 41c0: 00e78633 add a2,a5,a4 + stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); + 41c4: 000c3683 ld a3,0(s8) + fmt_tmp[f_idx] = '\0'; + 41c8: 001d071b addiw a4,s10,1 + 41cc: 0c070793 addi a5,a4,192 + 41d0: 0818 addi a4,sp,16 + fmt_tmp[f_idx++] = spec; + 41d2: f7960023 sb s9,-160(a2) + fmt_tmp[f_idx] = '\0'; + 41d6: 973e add a4,a4,a5 + stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); + 41d8: 08000593 li a1,128 + 41dc: 8652 mv a2,s4 + 41de: 0888 addi a0,sp,80 + fmt_tmp[f_idx] = '\0'; + 41e0: f6070023 sb zero,-160(a4) + stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); + 41e4: dc5ff0ef jal 3fa8 + for (int i = 0; f_buf[i] != '\0'; i++) + 41e8: 05014583 lbu a1,80(sp) + double f_val = va_arg(ap, double); + 41ec: 0c21 addi s8,s8,8 + for (int i = 0; f_buf[i] != '\0'; i++) + 41ee: 05110413 addi s0,sp,81 + 41f2: e6058ce3 beqz a1,406a <_vprintf_core.constprop.0.isra.0+0x3e> + _out_char(ctx, f_buf[i]); + 41f6: 8526 mv a0,s1 + 41f8: fc1fd0ef jal 21b8 <_out_char> + for (int i = 0; f_buf[i] != '\0'; i++) + 41fc: 00044583 lbu a1,0(s0) + 4200: 0405 addi s0,s0,1 + 4202: e60584e3 beqz a1,406a <_vprintf_core.constprop.0.isra.0+0x3e> + _out_char(ctx, f_buf[i]); + 4206: 8526 mv a0,s1 + 4208: fb1fd0ef jal 21b8 <_out_char> + for (int i = 0; f_buf[i] != '\0'; i++) + 420c: 00044583 lbu a1,0(s0) + 4210: 0405 addi s0,s0,1 + 4212: f1f5 bnez a1,41f6 <_vprintf_core.constprop.0.isra.0+0x1ca> + 4214: bd99 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + while (*p >= '0' && *p <= '9') + 4216: fd0c869b addiw a3,s9,-48 + 421a: 0ff6f313 zext.b t1,a3 + 421e: 4725 li a4,9 + int width = 0; + 4220: 4401 li s0,0 + while (*p >= '0' && *p <= '9') + 4222: 4625 li a2,9 + 4224: e8676ae3 bltu a4,t1,40b8 <_vprintf_core.constprop.0.isra.0+0x8c> + 4228: 001dcc83 lbu s9,1(s11) + width = width * 10 + (*p - '0'); + 422c: 0024171b slliw a4,s0,0x2 + 4230: 9f21 addw a4,a4,s0 + 4232: 0017171b slliw a4,a4,0x1 + 4236: 00e6843b addw s0,a3,a4 + while (*p >= '0' && *p <= '9') + 423a: fd0c869b addiw a3,s9,-48 + 423e: 0ff6f713 zext.b a4,a3 + p++; + 4242: 0d85 addi s11,s11,1 + while (*p >= '0' && *p <= '9') + 4244: fee672e3 bgeu a2,a4,4228 <_vprintf_core.constprop.0.isra.0+0x1fc> + if (*p == '.') + 4248: 02e00793 li a5,46 + int precision = -1; + 424c: 5bfd li s7,-1 + if (*p == '.') + 424e: e6fc9ae3 bne s9,a5,40c2 <_vprintf_core.constprop.0.isra.0+0x96> + if (*p == '*') + 4252: 001dcc83 lbu s9,1(s11) + 4256: 02a00793 li a5,42 + 425a: 16fc9f63 bne s9,a5,43d8 <_vprintf_core.constprop.0.isra.0+0x3ac> + while (*p >= '0' && *p <= '9') + 425e: 002dcc83 lbu s9,2(s11) + if (*p == 'l') + 4262: 06c00693 li a3,108 + precision = va_arg(ap, int); + 4266: 000c2b83 lw s7,0(s8) + p++; + 426a: 0d89 addi s11,s11,2 + precision = va_arg(ap, int); + 426c: 0c21 addi s8,s8,8 + if (*p == 'l') + 426e: 8666 mv a2,s9 + 4270: e4dc9ee3 bne s9,a3,40cc <_vprintf_core.constprop.0.isra.0+0xa0> + if (*p == 'l') + 4274: 001dcc83 lbu s9,1(s11) + 4278: 08cc8d63 beq s9,a2,4312 <_vprintf_core.constprop.0.isra.0+0x2e6> + char spec = *p++; + 427c: 06400693 li a3,100 + 4280: 0d89 addi s11,s11,2 + if (!spec) + 4282: 4cdc8c63 beq s9,a3,475a <_vprintf_core.constprop.0.isra.0+0x72e> + 4286: 06400693 li a3,100 + len_mod = 1; + 428a: 4e85 li t4,1 + 428c: e596fee3 bgeu a3,s9,40e8 <_vprintf_core.constprop.0.isra.0+0xbc> + 4290: f9bc869b addiw a3,s9,-101 + 4294: 0ff6f693 zext.b a3,a3 + 4298: 464d li a2,19 + 429a: 12d66863 bltu a2,a3,43ca <_vprintf_core.constprop.0.isra.0+0x39e> + 429e: 4e05 li t3,1 + 42a0: 00091637 lui a2,0x91 + 42a4: 00de1333 sll t1,t3,a3 + 42a8: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x87a50> + 42ac: 00c37633 and a2,t1,a2 + 42b0: 1a061463 bnez a2,4458 <_vprintf_core.constprop.0.isra.0+0x42c> + 42b4: 00737313 andi t1,t1,7 + 42b8: e80311e3 bnez t1,413a <_vprintf_core.constprop.0.isra.0+0x10e> + 42bc: 4639 li a2,14 + 42be: 10c69663 bne a3,a2,43ca <_vprintf_core.constprop.0.isra.0+0x39e> + const char *s = va_arg(ap, char *); + 42c2: 000c3c83 ld s9,0(s8) + if (!s) + 42c6: 420c8863 beqz s9,46f6 <_vprintf_core.constprop.0.isra.0+0x6ca> + while (*tmp && (precision < 0 || len < precision)) + 42ca: 000cc683 lbu a3,0(s9) + 42ce: 38068863 beqz a3,465e <_vprintf_core.constprop.0.isra.0+0x632> + const char *tmp = s; + 42d2: 8666 mv a2,s9 + int len = 0; + 42d4: 4681 li a3,0 + while (*tmp && (precision < 0 || len < precision)) + 42d6: 00db8863 beq s7,a3,42e6 <_vprintf_core.constprop.0.isra.0+0x2ba> + 42da: 00164583 lbu a1,1(a2) + len++; + 42de: 2685 addiw a3,a3,1 + tmp++; + 42e0: 0605 addi a2,a2,1 + while (*tmp && (precision < 0 || len < precision)) + 42e2: f9f5 bnez a1,42d6 <_vprintf_core.constprop.0.isra.0+0x2aa> + 42e4: 8bb6 mv s7,a3 + int padding = (width > len) ? width - len : 0; + 42e6: 268bc563 blt s7,s0,4550 <_vprintf_core.constprop.0.isra.0+0x524> + for (int i = 0; i < len; i++) + 42ea: 4401 li s0,0 + 42ec: 020b8163 beqz s7,430e <_vprintf_core.constprop.0.isra.0+0x2e2> + 42f0: 4d01 li s10,0 + _out_char(ctx, s[i]); + 42f2: 01ac86b3 add a3,s9,s10 + 42f6: 0006c583 lbu a1,0(a3) + 42fa: 8526 mv a0,s1 + for (int i = 0; i < len; i++) + 42fc: 0d05 addi s10,s10,1 + _out_char(ctx, s[i]); + 42fe: ebbfd0ef jal 21b8 <_out_char> + for (int i = 0; i < len; i++) + 4302: 000d069b sext.w a3,s10 + 4306: ff76c6e3 blt a3,s7,42f2 <_vprintf_core.constprop.0.isra.0+0x2c6> + if (flag_left) + 430a: 260a1463 bnez s4,4572 <_vprintf_core.constprop.0.isra.0+0x546> + const char *s = va_arg(ap, char *); + 430e: 0c21 addi s8,s8,8 + 4310: bba9 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + p++; + 4312: 0d89 addi s11,s11,2 + char spec = *p++; + 4314: 000dcc83 lbu s9,0(s11) + 4318: 06400693 li a3,100 + 431c: 001d8793 addi a5,s11,1 + if (!spec) + 4320: 3edc8063 beq s9,a3,4700 <_vprintf_core.constprop.0.isra.0+0x6d4> + 4324: 0796ea63 bltu a3,s9,4398 <_vprintf_core.constprop.0.isra.0+0x36c> + 4328: 04700693 li a3,71 + 432c: 0f96e263 bltu a3,s9,4410 <_vprintf_core.constprop.0.isra.0+0x3e4> + 4330: 04400693 li a3,68 + 4334: e196e2e3 bltu a3,s9,4138 <_vprintf_core.constprop.0.isra.0+0x10c> + 4338: dc0c82e3 beqz s9,40fc <_vprintf_core.constprop.0.isra.0+0xd0> + char spec = *p++; + 433c: 8dbe mv s11,a5 + _out_char(ctx, '%'); + 433e: 02500593 li a1,37 + 4342: 8526 mv a0,s1 + 4344: e75fd0ef jal 21b8 <_out_char> + if (spec != '%') + 4348: 02500713 li a4,37 + 434c: d0ec8fe3 beq s9,a4,406a <_vprintf_core.constprop.0.isra.0+0x3e> + _out_char(ctx, spec); + 4350: 85e6 mv a1,s9 + 4352: bb09 j 4064 <_vprintf_core.constprop.0.isra.0+0x38> + 4354: 05800693 li a3,88 + 4358: 2edc8263 beq s9,a3,463c <_vprintf_core.constprop.0.isra.0+0x610> + 435c: 06300713 li a4,99 + 4360: 06ec9563 bne s9,a4,43ca <_vprintf_core.constprop.0.isra.0+0x39e> + char c = (char)va_arg(ap, int); + 4364: 000c4c83 lbu s9,0(s8) + int padding = (width > 1) ? width - 1 : 0; + 4368: 8722 mv a4,s0 + 436a: 00804363 bgtz s0,4370 <_vprintf_core.constprop.0.isra.0+0x344> + 436e: 4705 li a4,1 + 4370: fff7041b addiw s0,a4,-1 + if (!flag_left) + 4374: 3c0a0463 beqz s4,473c <_vprintf_core.constprop.0.isra.0+0x710> + _out_char(ctx, c); + 4378: 85e6 mv a1,s9 + 437a: 8526 mv a0,s1 + 437c: e3dfd0ef jal 21b8 <_out_char> + for (int i = 0; i < padding; i++) + 4380: 4a01 li s4,0 + 4382: d451 beqz s0,430e <_vprintf_core.constprop.0.isra.0+0x2e2> + _out_char(ctx, ' '); + 4384: 02000593 li a1,32 + 4388: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 438a: 2a05 addiw s4,s4,1 + _out_char(ctx, ' '); + 438c: e2dfd0ef jal 21b8 <_out_char> + for (int i = 0; i < padding; i++) + 4390: ff441ae3 bne s0,s4,4384 <_vprintf_core.constprop.0.isra.0+0x358> + const char *s = va_arg(ap, char *); + 4394: 0c21 addi s8,s8,8 + 4396: b9d1 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + 4398: f9bc861b addiw a2,s9,-101 + 439c: 0ff67613 zext.b a2,a2 + 43a0: 46cd li a3,19 + 43a2: 40c6e963 bltu a3,a2,47b4 <_vprintf_core.constprop.0.isra.0+0x788> + 43a6: 00091337 lui t1,0x91 + 43aa: 4685 li a3,1 + 43ac: 00c696b3 sll a3,a3,a2 + 43b0: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x87a50> + 43b4: 0066f333 and t1,a3,t1 + 43b8: 34031c63 bnez t1,4710 <_vprintf_core.constprop.0.isra.0+0x6e4> + 43bc: 8a9d andi a3,a3,7 + 43be: d6069de3 bnez a3,4138 <_vprintf_core.constprop.0.isra.0+0x10c> + 43c2: 46b9 li a3,14 + char spec = *p++; + 43c4: 8dbe mv s11,a5 + 43c6: eed60ee3 beq a2,a3,42c2 <_vprintf_core.constprop.0.isra.0+0x296> + _out_char(ctx, '%'); + 43ca: 02500593 li a1,37 + 43ce: 8526 mv a0,s1 + 43d0: de9fd0ef jal 21b8 <_out_char> + _out_char(ctx, spec); + 43d4: 85e6 mv a1,s9 + 43d6: b179 j 4064 <_vprintf_core.constprop.0.isra.0+0x38> + while (*p >= '0' && *p <= '9') + 43d8: fd0c869b addiw a3,s9,-48 + 43dc: 0ff6fe13 zext.b t3,a3 + 43e0: 4625 li a2,9 + p++; + 43e2: 0d85 addi s11,s11,1 + precision = 0; + 43e4: 4b81 li s7,0 + while (*p >= '0' && *p <= '9') + 43e6: 4325 li t1,9 + 43e8: cdc66de3 bltu a2,t3,40c2 <_vprintf_core.constprop.0.isra.0+0x96> + precision = precision * 10 + (*p - '0'); + 43ec: 002b961b slliw a2,s7,0x2 + while (*p >= '0' && *p <= '9') + 43f0: 001dcc83 lbu s9,1(s11) + precision = precision * 10 + (*p - '0'); + 43f4: 0176073b addw a4,a2,s7 + 43f8: 0017171b slliw a4,a4,0x1 + 43fc: 00e68bbb addw s7,a3,a4 + while (*p >= '0' && *p <= '9') + 4400: fd0c869b addiw a3,s9,-48 + 4404: 0ff6f613 zext.b a2,a3 + p++; + 4408: 0d85 addi s11,s11,1 + while (*p >= '0' && *p <= '9') + 440a: fec371e3 bgeu t1,a2,43ec <_vprintf_core.constprop.0.isra.0+0x3c0> + 440e: b955 j 40c2 <_vprintf_core.constprop.0.isra.0+0x96> + 4410: 05800693 li a3,88 + 4414: 3cdc8d63 beq s9,a3,47ee <_vprintf_core.constprop.0.isra.0+0x7c2> + 4418: 06300713 li a4,99 + char spec = *p++; + 441c: 8dbe mv s11,a5 + 441e: f4ec83e3 beq s9,a4,4364 <_vprintf_core.constprop.0.isra.0+0x338> + 4422: b765 j 43ca <_vprintf_core.constprop.0.isra.0+0x39e> + f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision); + 4424: 01aa0533 add a0,s4,s10 + 4428: 865e mv a2,s7 + 442a: 00002597 auipc a1,0x2 + 442e: d3e58593 addi a1,a1,-706 # 6168 <_GLOBAL__sub_I__ZSt3cin+0x1c0> + 4432: ba5ff0ef jal 3fd6 + 4436: 00ad0d3b addw s10,s10,a0 + 443a: b341 j 41ba <_vprintf_core.constprop.0.isra.0+0x18e> + f_idx += sprintf(&fmt_tmp[f_idx], "%d", width); + 443c: 01aa0533 add a0,s4,s10 + 4440: 8622 mv a2,s0 + 4442: 00002597 auipc a1,0x2 + 4446: d1e58593 addi a1,a1,-738 # 6160 <_GLOBAL__sub_I__ZSt3cin+0x1b8> + 444a: b8dff0ef jal 3fd6 + 444e: 00ad0d3b addw s10,s10,a0 + if (precision >= 0) + 4452: d60bc4e3 bltz s7,41ba <_vprintf_core.constprop.0.isra.0+0x18e> + 4456: b7f9 j 4424 <_vprintf_core.constprop.0.isra.0+0x3f8> + int is_signed = (spec == 'd' || spec == 'i'); + 4458: 06900693 li a3,105 + 445c: 10dc8e63 beq s9,a3,4578 <_vprintf_core.constprop.0.isra.0+0x54c> + val = (uint64)va_arg(ap, void *); + 4460: 008c0793 addi a5,s8,8 + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 4464: 07800693 li a3,120 + val = (uint64)va_arg(ap, void *); + 4468: e43e sd a5,8(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 446a: 38dc9d63 bne s9,a3,4804 <_vprintf_core.constprop.0.isra.0+0x7d8> + else if (len_mod == 1) + 446e: 33ce8963 beq t4,t3,47a0 <_vprintf_core.constprop.0.isra.0+0x774> + val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); + 4472: 000c6e03 lwu t3,0(s8) + 4476: 85f6 mv a1,t4 + 4478: e002 sd zero,0(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 447a: 4341 li t1,16 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 447c: 00002f97 auipc t6,0x2 + 4480: cb4f8f93 addi t6,t6,-844 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + if (val == 0) + 4484: 120e0363 beqz t3,45aa <_vprintf_core.constprop.0.isra.0+0x57e> + 4488: 01010293 addi t0,sp,16 + sign_char = '-'; + 448c: 8616 mv a2,t0 + 448e: 86f2 mv a3,t3 + buf[i++] = digits[val % base]; + 4490: 0266f8b3 remu a7,a3,t1 + 4494: 8f32 mv t5,a2 + while (val != 0) + 4496: 0605 addi a2,a2,1 + 4498: 8eb6 mv t4,a3 + buf[i++] = digits[val % base]; + 449a: 98fe add a7,a7,t6 + 449c: 0008c883 lbu a7,0(a7) + val /= base; + 44a0: 0266d6b3 divu a3,a3,t1 + buf[i++] = digits[val % base]; + 44a4: ff160fa3 sb a7,-1(a2) + while (val != 0) + 44a8: fe6ef4e3 bgeu t4,t1,4490 <_vprintf_core.constprop.0.isra.0+0x464> + buf[i++] = digits[val % base]; + 44ac: 405f0f3b subw t5,t5,t0 + 44b0: 2f05 addiw t5,t5,1 + if (precision >= 0) + 44b2: 100bc363 bltz s7,45b8 <_vprintf_core.constprop.0.isra.0+0x58c> + int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; + 44b6: 1d7f4d63 blt t5,s7,4690 <_vprintf_core.constprop.0.isra.0+0x664> + if (precision == 0 && val == 0) + 44ba: 340b9163 bnez s7,47fc <_vprintf_core.constprop.0.isra.0+0x7d0> + 44be: 200e0763 beqz t3,46cc <_vprintf_core.constprop.0.isra.0+0x6a0> + for (int i = digit_len - 1; i >= 0; i--) + 44c2: ffff0c1b addiw s8,t5,-1 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 44c6: 07000693 li a3,112 + for (int i = digit_len - 1; i >= 0; i--) + 44ca: 8662 mv a2,s8 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 44cc: 28dc8e63 beq s9,a3,4768 <_vprintf_core.constprop.0.isra.0+0x73c> + 44d0: 2a051663 bnez a0,477c <_vprintf_core.constprop.0.isra.0+0x750> + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + 44d4: 00bf05bb addw a1,t5,a1 + 44d8: 8d52 mv s10,s4 + 44da: 4b01 li s6,0 + char *prefix_str = NULL; + 44dc: 4c81 li s9,0 + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + 44de: 1085d263 bge a1,s0,45e2 <_vprintf_core.constprop.0.isra.0+0x5b6> + 44e2: 9c0d subw s0,s0,a1 + if (!flag_left && !flag_zero) + 44e4: 100d0a63 beqz s10,45f8 <_vprintf_core.constprop.0.isra.0+0x5cc> + if (sign_char) + 44e8: 6782 ld a5,0(sp) + 44ea: 10079263 bnez a5,45ee <_vprintf_core.constprop.0.isra.0+0x5c2> + if (prefix_str) + 44ee: 000c8c63 beqz s9,4506 <_vprintf_core.constprop.0.isra.0+0x4da> + _out_char(ctx, prefix_str[0]); + 44f2: 000cc583 lbu a1,0(s9) + 44f6: 8526 mv a0,s1 + 44f8: cc1fd0ef jal 21b8 <_out_char> + _out_char(ctx, prefix_str[1]); + 44fc: 001cc583 lbu a1,1(s9) + 4500: 8526 mv a0,s1 + 4502: cb7fd0ef jal 21b8 <_out_char> + int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0); + 4506: 180b0263 beqz s6,468a <_vprintf_core.constprop.0.isra.0+0x65e> + 450a: 100a1863 bnez s4,461a <_vprintf_core.constprop.0.isra.0+0x5ee> + 450e: 008b8bbb addw s7,s7,s0 + for (int i = 0; i < total_zeros; i++) + 4512: 2a0b8363 beqz s7,47b8 <_vprintf_core.constprop.0.isra.0+0x78c> + 4516: 4c81 li s9,0 + _out_char(ctx, '0'); + 4518: 03000593 li a1,48 + 451c: 8526 mv a0,s1 + for (int i = 0; i < total_zeros; i++) + 451e: 2c85 addiw s9,s9,1 + _out_char(ctx, '0'); + 4520: c99fd0ef jal 21b8 <_out_char> + for (int i = 0; i < total_zeros; i++) + 4524: ff7c9ae3 bne s9,s7,4518 <_vprintf_core.constprop.0.isra.0+0x4ec> + for (int i = digit_len - 1; i >= 0; i--) + 4528: 57fd li a5,-1 + 452a: 00fc0f63 beq s8,a5,4548 <_vprintf_core.constprop.0.isra.0+0x51c> + 452e: 01010c93 addi s9,sp,16 + 4532: 9ce2 add s9,s9,s8 + 4534: 00f10c13 addi s8,sp,15 + _out_char(ctx, num_buf[i]); + 4538: 000cc583 lbu a1,0(s9) + 453c: 8526 mv a0,s1 + for (int i = digit_len - 1; i >= 0; i--) + 453e: 1cfd addi s9,s9,-1 + _out_char(ctx, num_buf[i]); + 4540: c79fd0ef jal 21b8 <_out_char> + for (int i = digit_len - 1; i >= 0; i--) + 4544: ff9c1ae3 bne s8,s9,4538 <_vprintf_core.constprop.0.isra.0+0x50c> + if (flag_left) + 4548: 0c0a1e63 bnez s4,4624 <_vprintf_core.constprop.0.isra.0+0x5f8> + char spec = *p++; + 454c: 6c22 ld s8,8(sp) + 454e: be31 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + int padding = (width > len) ? width - len : 0; + 4550: 4174043b subw s0,s0,s7 + if (!flag_left) + 4554: 100a0a63 beqz s4,4668 <_vprintf_core.constprop.0.isra.0+0x63c> + for (int i = 0; i < len; i++) + 4558: d80b9ce3 bnez s7,42f0 <_vprintf_core.constprop.0.isra.0+0x2c4> + for (int i = 0; i < padding; i++) + 455c: 4a01 li s4,0 + _out_char(ctx, ' '); + 455e: 02000593 li a1,32 + 4562: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 4564: 2a05 addiw s4,s4,1 + _out_char(ctx, ' '); + 4566: c53fd0ef jal 21b8 <_out_char> + for (int i = 0; i < padding; i++) + 456a: ff441ae3 bne s0,s4,455e <_vprintf_core.constprop.0.isra.0+0x532> + const char *s = va_arg(ap, char *); + 456e: 0c21 addi s8,s8,8 + 4570: bced j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + for (int i = 0; i < padding; i++) + 4572: f46d bnez s0,455c <_vprintf_core.constprop.0.isra.0+0x530> + const char *s = va_arg(ap, char *); + 4574: 0c21 addi s8,s8,8 + 4576: bcd5 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + else if (len_mod == 1) + 4578: 1fce8163 beq t4,t3,475a <_vprintf_core.constprop.0.isra.0+0x72e> + val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); + 457c: 000c2e03 lw t3,0(s8) + 4580: 008c0793 addi a5,s8,8 + 4584: e43e sd a5,8(sp) + int64 sval = (int64)val; + 4586: 86f2 mv a3,t3 + if (sval < 0) + 4588: 1406cb63 bltz a3,46de <_vprintf_core.constprop.0.isra.0+0x6b2> + sign_char = '+'; + 458c: 02b00793 li a5,43 + 4590: e03e sd a5,0(sp) + else if (flag_plus) + 4592: e589 bnez a1,459c <_vprintf_core.constprop.0.isra.0+0x570> + else if (flag_space) + 4594: 00589793 slli a5,a7,0x5 + 4598: e03e sd a5,0(sp) + 459a: 85c6 mv a1,a7 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 459c: 4329 li t1,10 + 459e: 00002f97 auipc t6,0x2 + 45a2: b92f8f93 addi t6,t6,-1134 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + if (val == 0) + 45a6: ee0e11e3 bnez t3,4488 <_vprintf_core.constprop.0.isra.0+0x45c> + buf[i++] = '0'; + 45aa: 03000693 li a3,48 + 45ae: 00d10823 sb a3,16(sp) + return i; + 45b2: 4f05 li t5,1 + if (precision >= 0) + 45b4: f00bd1e3 bgez s7,44b6 <_vprintf_core.constprop.0.isra.0+0x48a> + for (int i = digit_len - 1; i >= 0; i--) + 45b8: ffff0c1b addiw s8,t5,-1 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 45bc: 07000893 li a7,112 + if (!flag_left && !flag_zero) + 45c0: 016a6d33 or s10,s4,s6 + int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; + 45c4: 4b81 li s7,0 + for (int i = digit_len - 1; i >= 0; i--) + 45c6: 8662 mv a2,s8 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 45c8: 0d1c9f63 bne s9,a7,46a6 <_vprintf_core.constprop.0.isra.0+0x67a> + prefix_str = (spec == 'X') ? "0X" : "0x"; + 45cc: 00002c97 auipc s9,0x2 + 45d0: b7cc8c93 addi s9,s9,-1156 # 6148 <_GLOBAL__sub_I__ZSt3cin+0x1a0> + prefix_len += 2; + 45d4: 2589 addiw a1,a1,2 + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + 45d6: 017585bb addw a1,a1,s7 + 45da: 01e585bb addw a1,a1,t5 + 45de: f085c2e3 blt a1,s0,44e2 <_vprintf_core.constprop.0.isra.0+0x4b6> + if (!flag_left && !flag_zero) + 45e2: 080d0f63 beqz s10,4680 <_vprintf_core.constprop.0.isra.0+0x654> + if (sign_char) + 45e6: 6782 ld a5,0(sp) + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + 45e8: 4401 li s0,0 + if (sign_char) + 45ea: f00782e3 beqz a5,44ee <_vprintf_core.constprop.0.isra.0+0x4c2> + _out_char(ctx, sign_char); + 45ee: 6582 ld a1,0(sp) + 45f0: 8526 mv a0,s1 + 45f2: bc7fd0ef jal 21b8 <_out_char> + 45f6: bde5 j 44ee <_vprintf_core.constprop.0.isra.0+0x4c2> + _out_char(ctx, ' '); + 45f8: 02000593 li a1,32 + 45fc: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 45fe: 2d05 addiw s10,s10,1 + _out_char(ctx, ' '); + 4600: bb9fd0ef jal 21b8 <_out_char> + for (int i = 0; i < padding; i++) + 4604: efa402e3 beq s0,s10,44e8 <_vprintf_core.constprop.0.isra.0+0x4bc> + _out_char(ctx, ' '); + 4608: 02000593 li a1,32 + 460c: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 460e: 2d05 addiw s10,s10,1 + _out_char(ctx, ' '); + 4610: ba9fd0ef jal 21b8 <_out_char> + for (int i = 0; i < padding; i++) + 4614: ffa412e3 bne s0,s10,45f8 <_vprintf_core.constprop.0.isra.0+0x5cc> + 4618: bdc1 j 44e8 <_vprintf_core.constprop.0.isra.0+0x4bc> + for (int i = 0; i < total_zeros; i++) + 461a: ee0b9ee3 bnez s7,4516 <_vprintf_core.constprop.0.isra.0+0x4ea> + for (int i = digit_len - 1; i >= 0; i--) + 461e: 577d li a4,-1 + 4620: f0ec17e3 bne s8,a4,452e <_vprintf_core.constprop.0.isra.0+0x502> + for (int i = 0; i < padding; i++) + 4624: d405 beqz s0,454c <_vprintf_core.constprop.0.isra.0+0x520> + 4626: 4a01 li s4,0 + _out_char(ctx, ' '); + 4628: 02000593 li a1,32 + 462c: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 462e: 2a05 addiw s4,s4,1 + _out_char(ctx, ' '); + 4630: b89fd0ef jal 21b8 <_out_char> + for (int i = 0; i < padding; i++) + 4634: fe8a1ae3 bne s4,s0,4628 <_vprintf_core.constprop.0.isra.0+0x5fc> + char spec = *p++; + 4638: 6c22 ld s8,8(sp) + 463a: bc05 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + val = (uint64)va_arg(ap, void *); + 463c: 008c0793 addi a5,s8,8 + 4640: e43e sd a5,8(sp) + else if (len_mod == 1) + 4642: 180e9163 bnez t4,47c4 <_vprintf_core.constprop.0.isra.0+0x798> + val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); + 4646: 000c6e03 lwu t3,0(s8) + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 464a: 4581 li a1,0 + 464c: 05800c93 li s9,88 + 4650: e002 sd zero,0(sp) + 4652: 4341 li t1,16 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 4654: 00002f97 auipc t6,0x2 + 4658: ac4f8f93 addi t6,t6,-1340 # 6118 <_GLOBAL__sub_I__ZSt3cin+0x170> + 465c: b525 j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + int padding = (width > len) ? width - len : 0; + 465e: ca8058e3 blez s0,430e <_vprintf_core.constprop.0.isra.0+0x2e2> + if (!flag_left) + 4662: ee0a1de3 bnez s4,455c <_vprintf_core.constprop.0.isra.0+0x530> + int len = 0; + 4666: 4b81 li s7,0 + for (int i = 0; i < padding; i++) + 4668: 4d01 li s10,0 + _out_char(ctx, ' '); + 466a: 02000593 li a1,32 + 466e: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 4670: 2d05 addiw s10,s10,1 + _out_char(ctx, ' '); + 4672: b47fd0ef jal 21b8 <_out_char> + for (int i = 0; i < padding; i++) + 4676: fe8d1ae3 bne s10,s0,466a <_vprintf_core.constprop.0.isra.0+0x63e> + for (int i = 0; i < len; i++) + 467a: c60b9be3 bnez s7,42f0 <_vprintf_core.constprop.0.isra.0+0x2c4> + 467e: b941 j 430e <_vprintf_core.constprop.0.isra.0+0x2e2> + if (sign_char) + 4680: 6782 ld a5,0(sp) + 4682: 4401 li s0,0 + 4684: f7ad bnez a5,45ee <_vprintf_core.constprop.0.isra.0+0x5c2> + if (prefix_str) + 4686: e60c96e3 bnez s9,44f2 <_vprintf_core.constprop.0.isra.0+0x4c6> + for (int i = 0; i < total_zeros; i++) + 468a: e80b96e3 bnez s7,4516 <_vprintf_core.constprop.0.isra.0+0x4ea> + 468e: bd69 j 4528 <_vprintf_core.constprop.0.isra.0+0x4fc> + int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; + 4690: 41eb8bbb subw s7,s7,t5 + 4694: 8d52 mv s10,s4 + 4696: 4b01 li s6,0 + for (int i = digit_len - 1; i >= 0; i--) + 4698: ffff0c1b addiw s8,t5,-1 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 469c: 07000893 li a7,112 + for (int i = digit_len - 1; i >= 0; i--) + 46a0: 8662 mv a2,s8 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 46a2: f31c85e3 beq s9,a7,45cc <_vprintf_core.constprop.0.isra.0+0x5a0> + 46a6: cd09 beqz a0,46c0 <_vprintf_core.constprop.0.isra.0+0x694> + 46a8: 000e0c63 beqz t3,46c0 <_vprintf_core.constprop.0.isra.0+0x694> + 46ac: 07800513 li a0,120 + for (int i = digit_len - 1; i >= 0; i--) + 46b0: 00060c1b sext.w s8,a2 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 46b4: f0ac8ce3 beq s9,a0,45cc <_vprintf_core.constprop.0.isra.0+0x5a0> + 46b8: 05800613 li a2,88 + 46bc: 12cc8463 beq s9,a2,47e4 <_vprintf_core.constprop.0.isra.0+0x7b8> + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + 46c0: 00bb85bb addw a1,s7,a1 + 46c4: 01e585bb addw a1,a1,t5 + char *prefix_str = NULL; + 46c8: 4c81 li s9,0 + 46ca: bd11 j 44de <_vprintf_core.constprop.0.isra.0+0x4b2> + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 46cc: 07000693 li a3,112 + 46d0: 8d52 mv s10,s4 + 46d2: 4b01 li s6,0 + 46d4: 08dc8d63 beq s9,a3,476e <_vprintf_core.constprop.0.isra.0+0x742> + 46d8: 5c7d li s8,-1 + char *prefix_str = NULL; + 46da: 4c81 li s9,0 + 46dc: b509 j 44de <_vprintf_core.constprop.0.isra.0+0x4b2> + sign_char = '-'; + 46de: 02d00793 li a5,45 + val = (uint64)(-sval); + 46e2: 40d00e33 neg t3,a3 + 46e6: 4585 li a1,1 + 46e8: 4329 li t1,10 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 46ea: 00002f97 auipc t6,0x2 + 46ee: a46f8f93 addi t6,t6,-1466 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + sign_char = '-'; + 46f2: e03e sd a5,0(sp) + 46f4: bb51 j 4488 <_vprintf_core.constprop.0.isra.0+0x45c> + s = "(null)"; + 46f6: 00002c97 auipc s9,0x2 + 46fa: a62c8c93 addi s9,s9,-1438 # 6158 <_GLOBAL__sub_I__ZSt3cin+0x1b0> + 46fe: bed1 j 42d2 <_vprintf_core.constprop.0.isra.0+0x2a6> + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 4700: 000c3683 ld a3,0(s8) + 4704: 008c0713 addi a4,s8,8 + 4708: e43a sd a4,8(sp) + 470a: 8dbe mv s11,a5 + 470c: 8e36 mv t3,a3 + if (is_signed) + 470e: bdad j 4588 <_vprintf_core.constprop.0.isra.0+0x55c> + int is_signed = (spec == 'd' || spec == 'i'); + 4710: 06900693 li a3,105 + 4714: fedc86e3 beq s9,a3,4700 <_vprintf_core.constprop.0.isra.0+0x6d4> + val = (uint64)va_arg(ap, void *); + 4718: 008c0713 addi a4,s8,8 + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 471c: 07800693 li a3,120 + val = (uint64)va_arg(ap, void *); + 4720: e43a sd a4,8(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 4722: 06dc9063 bne s9,a3,4782 <_vprintf_core.constprop.0.isra.0+0x756> + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 4726: 000c3e03 ld t3,0(s8) + 472a: 8dbe mv s11,a5 + 472c: 4581 li a1,0 + 472e: e002 sd zero,0(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 4730: 4341 li t1,16 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 4732: 00002f97 auipc t6,0x2 + 4736: 9fef8f93 addi t6,t6,-1538 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + 473a: b3a9 j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + for (int i = 0; i < padding; i++) + 473c: c809 beqz s0,474e <_vprintf_core.constprop.0.isra.0+0x722> + _out_char(ctx, ' '); + 473e: 02000593 li a1,32 + 4742: 8526 mv a0,s1 + for (int i = 0; i < padding; i++) + 4744: 2a05 addiw s4,s4,1 + _out_char(ctx, ' '); + 4746: a73fd0ef jal 21b8 <_out_char> + for (int i = 0; i < padding; i++) + 474a: ff441ae3 bne s0,s4,473e <_vprintf_core.constprop.0.isra.0+0x712> + _out_char(ctx, c); + 474e: 85e6 mv a1,s9 + 4750: 8526 mv a0,s1 + 4752: a67fd0ef jal 21b8 <_out_char> + const char *s = va_arg(ap, char *); + 4756: 0c21 addi s8,s8,8 + 4758: ba09 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); + 475a: 000c3683 ld a3,0(s8) + 475e: 008c0793 addi a5,s8,8 + 4762: e43e sd a5,8(sp) + 4764: 8e36 mv t3,a3 + if (is_signed) + 4766: b50d j 4588 <_vprintf_core.constprop.0.isra.0+0x55c> + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 4768: 8d52 mv s10,s4 + 476a: 4b01 li s6,0 + 476c: b585 j 45cc <_vprintf_core.constprop.0.isra.0+0x5a0> + digit_len = 0; + 476e: 4f01 li t5,0 + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 4770: 5c7d li s8,-1 + prefix_str = (spec == 'X') ? "0X" : "0x"; + 4772: 00002c97 auipc s9,0x2 + 4776: 9d6c8c93 addi s9,s9,-1578 # 6148 <_GLOBAL__sub_I__ZSt3cin+0x1a0> + 477a: bda9 j 45d4 <_vprintf_core.constprop.0.isra.0+0x5a8> + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + 477c: 8d52 mv s10,s4 + 477e: 4b01 li s6,0 + 4780: b735 j 46ac <_vprintf_core.constprop.0.isra.0+0x680> + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 4782: 07000693 li a3,112 + 4786: 04dc8263 beq s9,a3,47ca <_vprintf_core.constprop.0.isra.0+0x79e> + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 478a: 000c3e03 ld t3,0(s8) + 478e: 8dbe mv s11,a5 + 4790: 4581 li a1,0 + 4792: e002 sd zero,0(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 4794: 4329 li t1,10 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 4796: 00002f97 auipc t6,0x2 + 479a: 99af8f93 addi t6,t6,-1638 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + 479e: b1dd j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); + 47a0: 000c3e03 ld t3,0(s8) + 47a4: 4581 li a1,0 + 47a6: e002 sd zero,0(sp) + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 47a8: 4341 li t1,16 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 47aa: 00002f97 auipc t6,0x2 + 47ae: 986f8f93 addi t6,t6,-1658 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + 47b2: b9c9 j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + char spec = *p++; + 47b4: 8dbe mv s11,a5 + 47b6: b911 j 43ca <_vprintf_core.constprop.0.isra.0+0x39e> + for (int i = digit_len - 1; i >= 0; i--) + 47b8: 577d li a4,-1 + 47ba: 4401 li s0,0 + 47bc: d6ec19e3 bne s8,a4,452e <_vprintf_core.constprop.0.isra.0+0x502> + char spec = *p++; + 47c0: 6c22 ld s8,8(sp) + 47c2: b065 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); + 47c4: 000c3e03 ld t3,0(s8) + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 47c8: b549 j 464a <_vprintf_core.constprop.0.isra.0+0x61e> + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 47ca: 8dbe mv s11,a5 + val = (uint64)va_arg(ap, void *); + 47cc: 000c3e03 ld t3,0(s8) + 47d0: 4581 li a1,0 + 47d2: 07000c93 li s9,112 + 47d6: e002 sd zero,0(sp) + 47d8: 4341 li t1,16 + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 47da: 00002f97 auipc t6,0x2 + 47de: 956f8f93 addi t6,t6,-1706 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + 47e2: b14d j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + prefix_str = (spec == 'X') ? "0X" : "0x"; + 47e4: 00002c97 auipc s9,0x2 + 47e8: 96cc8c93 addi s9,s9,-1684 # 6150 <_GLOBAL__sub_I__ZSt3cin+0x1a8> + 47ec: b3e5 j 45d4 <_vprintf_core.constprop.0.isra.0+0x5a8> + val = (uint64)va_arg(ap, void *); + 47ee: 008c0713 addi a4,s8,8 + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 47f2: 000c3e03 ld t3,0(s8) + val = (uint64)va_arg(ap, void *); + 47f6: e43a sd a4,8(sp) + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + 47f8: 8dbe mv s11,a5 + 47fa: bd81 j 464a <_vprintf_core.constprop.0.isra.0+0x61e> + 47fc: 8d52 mv s10,s4 + 47fe: 4b01 li s6,0 + 4800: 4b81 li s7,0 + 4802: bd59 j 4698 <_vprintf_core.constprop.0.isra.0+0x66c> + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + 4804: 07000693 li a3,112 + 4808: fcdc82e3 beq s9,a3,47cc <_vprintf_core.constprop.0.isra.0+0x7a0> + else if (len_mod == 1) + 480c: 01ce8c63 beq t4,t3,4824 <_vprintf_core.constprop.0.isra.0+0x7f8> + val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); + 4810: 000c6e03 lwu t3,0(s8) + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + 4814: 4581 li a1,0 + 4816: e002 sd zero,0(sp) + 4818: 4329 li t1,10 + 481a: 00002f97 auipc t6,0x2 + 481e: 916f8f93 addi t6,t6,-1770 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + 4822: b18d j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); + 4824: 000c3e03 ld t3,0(s8) + if (is_signed) + 4828: b7f5 j 4814 <_vprintf_core.constprop.0.isra.0+0x7e8> + +000000000000482a : +{ + 482a: 7139 addi sp,sp,-64 + 482c: f822 sd s0,48(sp) + 482e: f426 sd s1,40(sp) + 4830: 842e mv s0,a1 + 4832: 84aa mv s1,a0 + 4834: 85b2 mv a1,a2 + _vprintf_core(&ctx, format, ap); + 4836: 850a mv a0,sp + 4838: 8636 mv a2,a3 +{ + 483a: fc06 sd ra,56(sp) + ctx.buf = str; + 483c: e026 sd s1,0(sp) + ctx.limit = size; + 483e: e422 sd s0,8(sp) + ctx.written = 0; + 4840: e802 sd zero,16(sp) + ctx.stream = NULL; + 4842: ec02 sd zero,24(sp) + _vprintf_core(&ctx, format, ap); + 4844: fe8ff0ef jal 402c <_vprintf_core.constprop.0.isra.0> + if (ctx.written < size) + 4848: 6542 ld a0,16(sp) + if (size > 0) + 484a: c411 beqz s0,4856 + if (ctx.written < size) + 484c: 00857b63 bgeu a0,s0,4862 + str[ctx.written] = '\0'; + 4850: 94aa add s1,s1,a0 + 4852: 00048023 sb zero,0(s1) +} + 4856: 70e2 ld ra,56(sp) + 4858: 7442 ld s0,48(sp) + 485a: 74a2 ld s1,40(sp) + 485c: 2501 sext.w a0,a0 + 485e: 6121 addi sp,sp,64 + 4860: 8082 ret + str[size - 1] = '\0'; + 4862: 94a2 add s1,s1,s0 + 4864: fe048fa3 sb zero,-1(s1) +} + 4868: 70e2 ld ra,56(sp) + 486a: 7442 ld s0,48(sp) + 486c: 74a2 ld s1,40(sp) + 486e: 2501 sext.w a0,a0 + 4870: 6121 addi sp,sp,64 + 4872: 8082 ret + +0000000000004874 : +{ + 4874: 7119 addi sp,sp,-128 + 4876: e0a2 sd s0,64(sp) + 4878: fc26 sd s1,56(sp) + 487a: 842e mv s0,a1 + 487c: 84aa mv s1,a0 + 487e: 85b2 mv a1,a2 + _vprintf_core(&ctx, format, ap); + 4880: 0808 addi a0,sp,16 + va_start(ap, format); + 4882: 08b0 addi a2,sp,88 +{ + 4884: e486 sd ra,72(sp) + 4886: ecb6 sd a3,88(sp) + 4888: f0ba sd a4,96(sp) + 488a: f4be sd a5,104(sp) + 488c: f8c2 sd a6,112(sp) + 488e: fcc6 sd a7,120(sp) + va_start(ap, format); + 4890: e432 sd a2,8(sp) + ctx.buf = str; + 4892: e826 sd s1,16(sp) + ctx.limit = size; + 4894: ec22 sd s0,24(sp) + ctx.written = 0; + 4896: f002 sd zero,32(sp) + ctx.stream = NULL; + 4898: f402 sd zero,40(sp) + _vprintf_core(&ctx, format, ap); + 489a: f92ff0ef jal 402c <_vprintf_core.constprop.0.isra.0> + if (ctx.written < size) + 489e: 7502 ld a0,32(sp) + if (size > 0) + 48a0: c411 beqz s0,48ac + if (ctx.written < size) + 48a2: 00857b63 bgeu a0,s0,48b8 + str[ctx.written] = '\0'; + 48a6: 94aa add s1,s1,a0 + 48a8: 00048023 sb zero,0(s1) +} + 48ac: 60a6 ld ra,72(sp) + 48ae: 6406 ld s0,64(sp) + 48b0: 74e2 ld s1,56(sp) + 48b2: 2501 sext.w a0,a0 + 48b4: 6109 addi sp,sp,128 + 48b6: 8082 ret + str[size - 1] = '\0'; + 48b8: 94a2 add s1,s1,s0 + 48ba: fe048fa3 sb zero,-1(s1) +} + 48be: 60a6 ld ra,72(sp) + 48c0: 6406 ld s0,64(sp) + 48c2: 74e2 ld s1,56(sp) + 48c4: 2501 sext.w a0,a0 + 48c6: 6109 addi sp,sp,128 + 48c8: 8082 ret + +00000000000048ca : +{ + 48ca: 7119 addi sp,sp,-128 + va_start(ap, format); + 48cc: 04810313 addi t1,sp,72 +{ + 48d0: e4ae sd a1,72(sp) + 48d2: e8b2 sd a2,80(sp) + 48d4: f4be sd a5,104(sp) + _vprintf_core(&ctx, format, ap); + 48d6: 85aa mv a1,a0 + ctx.stream = stdout; + 48d8: 00004797 auipc a5,0x4 + 48dc: 2f07b783 ld a5,752(a5) # 8bc8 + _vprintf_core(&ctx, format, ap); + 48e0: 0808 addi a0,sp,16 + 48e2: 861a mv a2,t1 +{ + 48e4: fc06 sd ra,56(sp) + 48e6: ecb6 sd a3,88(sp) + 48e8: f0ba sd a4,96(sp) + 48ea: f8c2 sd a6,112(sp) + 48ec: fcc6 sd a7,120(sp) + va_start(ap, format); + 48ee: e41a sd t1,8(sp) + ctx.buf = NULL; + 48f0: e802 sd zero,16(sp) + ctx.limit = 0; + 48f2: ec02 sd zero,24(sp) + ctx.written = 0; + 48f4: f002 sd zero,32(sp) + ctx.stream = stdout; + 48f6: f43e sd a5,40(sp) + _vprintf_core(&ctx, format, ap); + 48f8: f34ff0ef jal 402c <_vprintf_core.constprop.0.isra.0> +} + 48fc: 70e2 ld ra,56(sp) + 48fe: 5502 lw a0,32(sp) + 4900: 6109 addi sp,sp,128 + 4902: 8082 ret + +0000000000004904 : +{ + 4904: 7159 addi sp,sp,-112 + va_start(ap, format); + 4906: 04010e13 addi t3,sp,64 +{ + 490a: 8eaa mv t4,a0 + ctx.fd = -1; + 490c: 537d li t1,-1 +{ + 490e: e0b2 sd a2,64(sp) + int ret = _vscanf_core(&ctx, format, ap); + 4910: 0808 addi a0,sp,16 + 4912: 8672 mv a2,t3 +{ + 4914: fc06 sd ra,56(sp) + 4916: e4b6 sd a3,72(sp) + 4918: e8ba sd a4,80(sp) + 491a: ecbe sd a5,88(sp) + 491c: f0c2 sd a6,96(sp) + 491e: f4c6 sd a7,104(sp) + va_start(ap, format); + 4920: e472 sd t3,8(sp) + ctx.buf = str; + 4922: e876 sd t4,16(sp) + ctx.fd = -1; + 4924: cc1a sw t1,24(sp) + ctx.pos = 0; + 4926: f002 sd zero,32(sp) + ctx.ungotten = -1; + 4928: d41a sw t1,40(sp) + int ret = _vscanf_core(&ctx, format, ap); + 492a: 81efd0ef jal 1948 <_vscanf_core.constprop.0> +} + 492e: 70e2 ld ra,56(sp) + 4930: 6165 addi sp,sp,112 + 4932: 8082 ret + +0000000000004934 : +{ + 4934: 7119 addi sp,sp,-128 + va_start(ap, format); + 4936: 04810313 addi t1,sp,72 +{ + 493a: e4ae sd a1,72(sp) + 493c: e8b2 sd a2,80(sp) + 493e: f4be sd a5,104(sp) + int ret = _vscanf_core(&ctx, format, ap); + 4940: 85aa mv a1,a0 + ctx.ungotten = -1; + 4942: 57fd li a5,-1 + int ret = _vscanf_core(&ctx, format, ap); + 4944: 0808 addi a0,sp,16 + 4946: 861a mv a2,t1 +{ + 4948: fc06 sd ra,56(sp) + 494a: ecb6 sd a3,88(sp) + 494c: f0ba sd a4,96(sp) + 494e: f8c2 sd a6,112(sp) + 4950: fcc6 sd a7,120(sp) + va_start(ap, format); + 4952: e41a sd t1,8(sp) + ctx.buf = NULL; + 4954: e802 sd zero,16(sp) + ctx.fd = STDIN_FD; + 4956: cc02 sw zero,24(sp) + ctx.pos = 0; + 4958: f002 sd zero,32(sp) + ctx.ungotten = -1; + 495a: d43e sw a5,40(sp) + int ret = _vscanf_core(&ctx, format, ap); + 495c: fedfc0ef jal 1948 <_vscanf_core.constprop.0> +} + 4960: 70e2 ld ra,56(sp) + 4962: 6109 addi sp,sp,128 + 4964: 8082 ret + +0000000000004966 : +{ + 4966: 1101 addi sp,sp,-32 + 4968: e426 sd s1,8(sp) + 496a: 84ae mv s1,a1 + 496c: e04a sd s2,0(sp) + if (strcmp(mode, "r") == 0) + 496e: 00002597 auipc a1,0x2 + 4972: 80258593 addi a1,a1,-2046 # 6170 <_GLOBAL__sub_I__ZSt3cin+0x1c8> +{ + 4976: 892a mv s2,a0 + if (strcmp(mode, "r") == 0) + 4978: 8526 mv a0,s1 +{ + 497a: e822 sd s0,16(sp) + 497c: ec06 sd ra,24(sp) + if (strcmp(mode, "r") == 0) + 497e: 280010ef jal 5bfe + 4982: 842a mv s0,a0 + 4984: c919 beqz a0,499a + else if (strcmp(mode, "w") == 0) + 4986: 00001597 auipc a1,0x1 + 498a: 7f258593 addi a1,a1,2034 # 6178 <_GLOBAL__sub_I__ZSt3cin+0x1d0> + 498e: 8526 mv a0,s1 + 4990: 26e010ef jal 5bfe + flags = O_WRONLY | O_CREAT | O_TRUNC; + 4994: 24100413 li s0,577 + else if (strcmp(mode, "w") == 0) + 4998: ed39 bnez a0,49f6 + int64 fd = open(filename, flags); + 499a: 85a2 mv a1,s0 + 499c: 854a mv a0,s2 + 499e: f4afc0ef jal 10e8 + 49a2: 84aa mv s1,a0 + if (fd < 0) + 49a4: 06054c63 bltz a0,4a1c + FILE *f = (FILE *)malloc(sizeof(FILE)); + 49a8: 42000513 li a0,1056 + 49ac: 2f3000ef jal 549e + 49b0: 892a mv s2,a0 + if (!f) + 49b2: c53d beqz a0,4a20 + memset(f, 0, sizeof(FILE)); + 49b4: 42000613 li a2,1056 + 49b8: 4581 li a1,0 + 49ba: 0d6010ef jal 5a90 + if (fd == 1) + 49be: 4785 li a5,1 + f->fd = (int)fd; + 49c0: 00992023 sw s1,0(s2) + f->flags = flags; + 49c4: 00892223 sw s0,4(s2) + if (fd == 1) + 49c8: 00f48e63 beq s1,a5,49e4 + else if (fd == 2) + 49cc: 4789 li a5,2 + 49ce: 00f48b63 beq s1,a5,49e4 + f->buf_mode = 0; + 49d2: 40092e23 sw zero,1052(s2) +} + 49d6: 60e2 ld ra,24(sp) + 49d8: 6442 ld s0,16(sp) + 49da: 64a2 ld s1,8(sp) + 49dc: 854a mv a0,s2 + 49de: 6902 ld s2,0(sp) + 49e0: 6105 addi sp,sp,32 + 49e2: 8082 ret + 49e4: 60e2 ld ra,24(sp) + 49e6: 6442 ld s0,16(sp) + f->buf_mode = 2; + 49e8: 40992e23 sw s1,1052(s2) +} + 49ec: 854a mv a0,s2 + 49ee: 64a2 ld s1,8(sp) + 49f0: 6902 ld s2,0(sp) + 49f2: 6105 addi sp,sp,32 + 49f4: 8082 ret + else if (strcmp(mode, "a") == 0) + 49f6: 00001597 auipc a1,0x1 + 49fa: 78a58593 addi a1,a1,1930 # 6180 <_GLOBAL__sub_I__ZSt3cin+0x1d8> + 49fe: 8526 mv a0,s1 + 4a00: 1fe010ef jal 5bfe + flags = O_WRONLY | O_CREAT | O_APPEND; + 4a04: 44100413 li s0,1089 + else if (strcmp(mode, "a") == 0) + 4a08: d949 beqz a0,499a + else if (strcmp(mode, "r+") == 0) + 4a0a: 00001597 auipc a1,0x1 + 4a0e: 77e58593 addi a1,a1,1918 # 6188 <_GLOBAL__sub_I__ZSt3cin+0x1e0> + 4a12: 8526 mv a0,s1 + 4a14: 1ea010ef jal 5bfe + flags = O_RDWR; + 4a18: 4409 li s0,2 + else if (strcmp(mode, "r+") == 0) + 4a1a: d141 beqz a0,499a + return NULL; + 4a1c: 4901 li s2,0 + 4a1e: bf65 j 49d6 + close(fd); + 4a20: 8526 mv a0,s1 + 4a22: eaefc0ef jal 10d0 + return NULL; + 4a26: 4901 li s2,0 + 4a28: b77d j 49d6 + +0000000000004a2a : + if (!stream) + 4a2a: cd29 beqz a0,4a84 + if (stream->buf_write_pos > 0) + 4a2c: 41052603 lw a2,1040(a0) +{ + 4a30: 1141 addi sp,sp,-16 + 4a32: e022 sd s0,0(sp) + 4a34: e406 sd ra,8(sp) + 4a36: 842a mv s0,a0 + if (stream->buf_write_pos > 0) + 4a38: 02c04a63 bgtz a2,4a6c + if (stream != stdin && stream != stdout && stream != stderr) + 4a3c: 00004797 auipc a5,0x4 + 4a40: 18c78793 addi a5,a5,396 # 8bc8 + 4a44: 6798 ld a4,8(a5) + 4a46: 00870e63 beq a4,s0,4a62 + 4a4a: 6398 ld a4,0(a5) + 4a4c: 00870b63 beq a4,s0,4a62 + 4a50: 6b9c ld a5,16(a5) + 4a52: 00878863 beq a5,s0,4a62 + close(stream->fd); + 4a56: 4008 lw a0,0(s0) + 4a58: e78fc0ef jal 10d0 + free(stream); + 4a5c: 8522 mv a0,s0 + 4a5e: 1cb000ef jal 5428 +} + 4a62: 60a2 ld ra,8(sp) + 4a64: 6402 ld s0,0(sp) + return 0; + 4a66: 4501 li a0,0 +} + 4a68: 0141 addi sp,sp,16 + 4a6a: 8082 ret + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4a6c: 4108 lw a0,0(a0) + 4a6e: 01040593 addi a1,s0,16 + 4a72: e56fc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 4a76: 41042783 lw a5,1040(s0) + 4a7a: 00f54763 blt a0,a5,4a88 + stream->buf_write_pos = 0; + 4a7e: 40042823 sw zero,1040(s0) + 4a82: bf6d j 4a3c + return -1; + 4a84: 557d li a0,-1 +} + 4a86: 8082 ret + stream->error = 1; + 4a88: 4785 li a5,1 + 4a8a: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 4a8c: 40042823 sw zero,1040(s0) + return EOF; + 4a90: b775 j 4a3c + +0000000000004a92 : + if (!stream) + 4a92: c121 beqz a0,4ad2 + if (stream->buf_write_pos > 0) + 4a94: 41052603 lw a2,1040(a0) +{ + 4a98: 1141 addi sp,sp,-16 + 4a9a: e022 sd s0,0(sp) + 4a9c: e406 sd ra,8(sp) + 4a9e: 842a mv s0,a0 + if (stream->buf_write_pos > 0) + 4aa0: 00c04763 bgtz a2,4aae + return 0; + 4aa4: 4501 li a0,0 +} + 4aa6: 60a2 ld ra,8(sp) + 4aa8: 6402 ld s0,0(sp) + 4aaa: 0141 addi sp,sp,16 + 4aac: 8082 ret + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4aae: 4108 lw a0,0(a0) + 4ab0: 01040593 addi a1,s0,16 + 4ab4: e14fc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 4ab8: 41042783 lw a5,1040(s0) + 4abc: 00f54563 blt a0,a5,4ac6 + stream->buf_write_pos = 0; + 4ac0: 40042823 sw zero,1040(s0) + 4ac4: b7c5 j 4aa4 + stream->error = 1; + 4ac6: 4785 li a5,1 + 4ac8: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 4aca: 40042823 sw zero,1040(s0) + return EOF; + 4ace: 557d li a0,-1 + 4ad0: bfd9 j 4aa6 + 4ad2: 557d li a0,-1 +} + 4ad4: 8082 ret + +0000000000004ad6 : +{ + 4ad6: 7159 addi sp,sp,-112 + 4ad8: fc06 sd ra,56(sp) + 4ada: e0b2 sd a2,64(sp) + 4adc: e4b6 sd a3,72(sp) + 4ade: e8ba sd a4,80(sp) + 4ae0: ecbe sd a5,88(sp) + 4ae2: f0c2 sd a6,96(sp) + 4ae4: f4c6 sd a7,104(sp) + if (!stream) + 4ae6: cd19 beqz a0,4b04 + va_start(ap, format); + 4ae8: 832a mv t1,a0 + 4aea: 0090 addi a2,sp,64 + _vprintf_core(&ctx, format, ap); + 4aec: 0808 addi a0,sp,16 + va_start(ap, format); + 4aee: e432 sd a2,8(sp) + ctx.buf = NULL; + 4af0: e802 sd zero,16(sp) + ctx.limit = 0; + 4af2: ec02 sd zero,24(sp) + ctx.written = 0; + 4af4: f002 sd zero,32(sp) + ctx.stream = stream; + 4af6: f41a sd t1,40(sp) + _vprintf_core(&ctx, format, ap); + 4af8: d34ff0ef jal 402c <_vprintf_core.constprop.0.isra.0> + return (int)ctx.written; + 4afc: 5502 lw a0,32(sp) +} + 4afe: 70e2 ld ra,56(sp) + 4b00: 6165 addi sp,sp,112 + 4b02: 8082 ret + return -1; + 4b04: 557d li a0,-1 + 4b06: bfe5 j 4afe + +0000000000004b08 : +{ + 4b08: 7159 addi sp,sp,-112 + 4b0a: fc06 sd ra,56(sp) + 4b0c: e0b2 sd a2,64(sp) + 4b0e: e4b6 sd a3,72(sp) + 4b10: e8ba sd a4,80(sp) + 4b12: ecbe sd a5,88(sp) + 4b14: f0c2 sd a6,96(sp) + 4b16: f4c6 sd a7,104(sp) + if (!stream) + 4b18: cd19 beqz a0,4b36 + ctx.fd = stream->fd; + 4b1a: 411c lw a5,0(a0) + va_start(ap, format); + 4b1c: 0090 addi a2,sp,64 + int ret = _vscanf_core(&ctx, format, ap); + 4b1e: 0808 addi a0,sp,16 + ctx.fd = stream->fd; + 4b20: cc3e sw a5,24(sp) + ctx.ungotten = -1; + 4b22: 57fd li a5,-1 + va_start(ap, format); + 4b24: e432 sd a2,8(sp) + ctx.buf = NULL; + 4b26: e802 sd zero,16(sp) + ctx.pos = 0; + 4b28: f002 sd zero,32(sp) + ctx.ungotten = -1; + 4b2a: d43e sw a5,40(sp) + int ret = _vscanf_core(&ctx, format, ap); + 4b2c: e1dfc0ef jal 1948 <_vscanf_core.constprop.0> +} + 4b30: 70e2 ld ra,56(sp) + 4b32: 6165 addi sp,sp,112 + 4b34: 8082 ret + return -1; + 4b36: 557d li a0,-1 + 4b38: bfe5 j 4b30 + +0000000000004b3a : + if (!stream) + 4b3a: c1e1 beqz a1,4bfa +{ + 4b3c: 7179 addi sp,sp,-48 + 4b3e: e84a sd s2,16(sp) + if (stream->buf_mode == 2) + 4b40: 41c5a903 lw s2,1052(a1) +{ + 4b44: f022 sd s0,32(sp) + 4b46: ec26 sd s1,24(sp) + 4b48: f406 sd ra,40(sp) + if (stream->buf_mode == 2) + 4b4a: 4789 li a5,2 + 4b4c: 842e mv s0,a1 + 4b4e: 84aa mv s1,a0 + char ch = (char)c; + 4b50: 0ff57713 zext.b a4,a0 + if (stream->buf_mode == 2) + 4b54: 02f90963 beq s2,a5,4b86 + stream->buffer[stream->buf_write_pos++] = (char)c; + 4b58: 4105a783 lw a5,1040(a1) + if (stream->buf_write_pos >= BUFSIZ) + 4b5c: 3ff00693 li a3,1023 + stream->buffer[stream->buf_write_pos++] = (char)c; + 4b60: 0017861b addiw a2,a5,1 + 4b64: 40c5a823 sw a2,1040(a1) + 4b68: 97ae add a5,a5,a1 + 4b6a: 00e78823 sb a4,16(a5) + if (stream->buf_write_pos >= BUFSIZ) + 4b6e: 06c6c463 blt a3,a2,4bd6 + else if (stream->buf_mode == 1 && c == '\n') + 4b72: 4785 li a5,1 + 4b74: 02f90e63 beq s2,a5,4bb0 + return c; + 4b78: 8526 mv a0,s1 +} + 4b7a: 70a2 ld ra,40(sp) + 4b7c: 7402 ld s0,32(sp) + 4b7e: 64e2 ld s1,24(sp) + 4b80: 6942 ld s2,16(sp) + 4b82: 6145 addi sp,sp,48 + 4b84: 8082 ret + if (write(stream->fd, &ch, 1) != 1) + 4b86: 4188 lw a0,0(a1) + 4b88: 4605 li a2,1 + 4b8a: 00f10593 addi a1,sp,15 + char ch = (char)c; + 4b8e: 00e107a3 sb a4,15(sp) + if (write(stream->fd, &ch, 1) != 1) + 4b92: d36fc0ef jal 10c8 + 4b96: 872a mv a4,a0 + 4b98: 4785 li a5,1 + return c; + 4b9a: 8526 mv a0,s1 + if (write(stream->fd, &ch, 1) != 1) + 4b9c: fcf70fe3 beq a4,a5,4b7a +} + 4ba0: 70a2 ld ra,40(sp) + stream->error = 1; + 4ba2: c41c sw a5,8(s0) +} + 4ba4: 7402 ld s0,32(sp) + 4ba6: 64e2 ld s1,24(sp) + 4ba8: 6942 ld s2,16(sp) + return EOF; + 4baa: 557d li a0,-1 +} + 4bac: 6145 addi sp,sp,48 + 4bae: 8082 ret + else if (stream->buf_mode == 1 && c == '\n') + 4bb0: 47a9 li a5,10 + 4bb2: fcf513e3 bne a0,a5,4b78 + if (stream->buf_write_pos > 0) + 4bb6: fcc051e3 blez a2,4b78 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4bba: 4188 lw a0,0(a1) + 4bbc: 05c1 addi a1,a1,16 + 4bbe: d0afc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 4bc2: 41042783 lw a5,1040(s0) + 4bc6: 02f55063 bge a0,a5,4be6 + stream->error = 1; + 4bca: 01242423 sw s2,8(s0) + stream->buf_write_pos = 0; + 4bce: 40042823 sw zero,1040(s0) + return c; + 4bd2: 8526 mv a0,s1 + 4bd4: b75d j 4b7a + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4bd6: 4188 lw a0,0(a1) + 4bd8: 05c1 addi a1,a1,16 + 4bda: ceefc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 4bde: 41042783 lw a5,1040(s0) + 4be2: 00f54663 blt a0,a5,4bee + stream->buf_write_pos = 0; + 4be6: 40042823 sw zero,1040(s0) + return c; + 4bea: 8526 mv a0,s1 + 4bec: b779 j 4b7a + stream->error = 1; + 4bee: 4785 li a5,1 + 4bf0: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 4bf2: 40042823 sw zero,1040(s0) + return c; + 4bf6: 8526 mv a0,s1 + 4bf8: b749 j 4b7a + return EOF; + 4bfa: 557d li a0,-1 +} + 4bfc: 8082 ret + +0000000000004bfe : + if (!stream) + 4bfe: c1ed beqz a1,4ce0 +{ + 4c00: 711d addi sp,sp,-96 + 4c02: e4a6 sd s1,72(sp) + 4c04: ec86 sd ra,88(sp) + while (*s) + 4c06: 00054703 lbu a4,0(a0) + 4c0a: 84aa mv s1,a0 + 4c0c: cf25 beqz a4,4c84 + 4c0e: e8a2 sd s0,80(sp) + 4c10: e0ca sd s2,64(sp) + 4c12: fc4e sd s3,56(sp) + 4c14: f852 sd s4,48(sp) + 4c16: f456 sd s5,40(sp) + 4c18: f05a sd s6,32(sp) + 4c1a: ec5e sd s7,24(sp) + 4c1c: 842e mv s0,a1 + if (stream->buf_mode == 2) + 4c1e: 4909 li s2,2 + if (stream->buf_write_pos >= BUFSIZ) + 4c20: 3ff00b13 li s6,1023 + else if (stream->buf_mode == 1 && c == '\n') + 4c24: 4985 li s3,1 + 4c26: 4a29 li s4,10 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4c28: 01058a93 addi s5,a1,16 + if (write(stream->fd, &ch, 1) != 1) + 4c2c: 00f10b93 addi s7,sp,15 + 4c30: a031 j 4c3c + else if (stream->buf_mode == 1 && c == '\n') + 4c32: 09368563 beq a3,s3,4cbc + while (*s) + 4c36: 0004c703 lbu a4,0(s1) + 4c3a: cf15 beqz a4,4c76 + if (stream->buf_mode == 2) + 4c3c: 41c42683 lw a3,1052(s0) + if (fputc(*s++, stream) == EOF) + 4c40: 0485 addi s1,s1,1 + if (stream->buf_mode == 2) + 4c42: 05268663 beq a3,s2,4c8e + stream->buffer[stream->buf_write_pos++] = (char)c; + 4c46: 41042783 lw a5,1040(s0) + 4c4a: 0017861b addiw a2,a5,1 + 4c4e: 40c42823 sw a2,1040(s0) + 4c52: 97a2 add a5,a5,s0 + 4c54: 00e78823 sb a4,16(a5) + if (stream->buf_write_pos >= BUFSIZ) + 4c58: fccb5de3 bge s6,a2,4c32 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4c5c: 4008 lw a0,0(s0) + 4c5e: 85d6 mv a1,s5 + 4c60: c68fc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 4c64: 41042783 lw a5,1040(s0) + 4c68: 06f54763 blt a0,a5,4cd6 + stream->buf_write_pos = 0; + 4c6c: 40042823 sw zero,1040(s0) + while (*s) + 4c70: 0004c703 lbu a4,0(s1) + 4c74: f761 bnez a4,4c3c + 4c76: 6446 ld s0,80(sp) + 4c78: 6906 ld s2,64(sp) + 4c7a: 79e2 ld s3,56(sp) + 4c7c: 7a42 ld s4,48(sp) + 4c7e: 7aa2 ld s5,40(sp) + 4c80: 7b02 ld s6,32(sp) + 4c82: 6be2 ld s7,24(sp) +} + 4c84: 60e6 ld ra,88(sp) + 4c86: 64a6 ld s1,72(sp) + return 0; + 4c88: 4501 li a0,0 +} + 4c8a: 6125 addi sp,sp,96 + 4c8c: 8082 ret + if (write(stream->fd, &ch, 1) != 1) + 4c8e: 4008 lw a0,0(s0) + 4c90: 4605 li a2,1 + 4c92: 85de mv a1,s7 + char ch = (char)c; + 4c94: 00e107a3 sb a4,15(sp) + if (write(stream->fd, &ch, 1) != 1) + 4c98: c30fc0ef jal 10c8 + 4c9c: f9350de3 beq a0,s3,4c36 + stream->error = 1; + 4ca0: 01342423 sw s3,8(s0) +} + 4ca4: 60e6 ld ra,88(sp) + 4ca6: 6446 ld s0,80(sp) + 4ca8: 6906 ld s2,64(sp) + 4caa: 79e2 ld s3,56(sp) + 4cac: 7a42 ld s4,48(sp) + 4cae: 7aa2 ld s5,40(sp) + 4cb0: 7b02 ld s6,32(sp) + 4cb2: 6be2 ld s7,24(sp) + 4cb4: 64a6 ld s1,72(sp) + return -1; + 4cb6: 557d li a0,-1 +} + 4cb8: 6125 addi sp,sp,96 + 4cba: 8082 ret + else if (stream->buf_mode == 1 && c == '\n') + 4cbc: f7471de3 bne a4,s4,4c36 + if (stream->buf_write_pos > 0) + 4cc0: f6c05be3 blez a2,4c36 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4cc4: 4008 lw a0,0(s0) + 4cc6: 01040593 addi a1,s0,16 + 4cca: bfefc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 4cce: 41042783 lw a5,1040(s0) + 4cd2: f8f55de3 bge a0,a5,4c6c + stream->error = 1; + 4cd6: 4785 li a5,1 + 4cd8: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 4cda: 40042823 sw zero,1040(s0) + return EOF; + 4cde: bfa1 j 4c36 + return -1; + 4ce0: 557d li a0,-1 +} + 4ce2: 8082 ret + +0000000000004ce4 : + if (!stream) + 4ce4: c949 beqz a0,4d76 + if (stream->buf_write_pos > 0) + 4ce6: 41052603 lw a2,1040(a0) +{ + 4cea: 1141 addi sp,sp,-16 + 4cec: e022 sd s0,0(sp) + 4cee: e406 sd ra,8(sp) + 4cf0: 842a mv s0,a0 + if (stream->buf_write_pos > 0) + 4cf2: 04c04863 bgtz a2,4d42 + if (stream->buf_read_pos < stream->buf_read_cnt) + 4cf6: 41442783 lw a5,1044(s0) + 4cfa: 41842703 lw a4,1048(s0) + 4cfe: 00e7dd63 bge a5,a4,4d18 + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 4d02: 0017871b addiw a4,a5,1 + 4d06: 40e42a23 sw a4,1044(s0) + 4d0a: 943e add s0,s0,a5 + 4d0c: 01044503 lbu a0,16(s0) +} + 4d10: 60a2 ld ra,8(sp) + 4d12: 6402 ld s0,0(sp) + 4d14: 0141 addi sp,sp,16 + 4d16: 8082 ret + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 4d18: 4008 lw a0,0(s0) + 4d1a: 40000613 li a2,1024 + 4d1e: 01040593 addi a1,s0,16 + 4d22: b9efc0ef jal 10c0 + 4d26: 87aa mv a5,a0 + if (ret <= 0) + 4d28: 02a05e63 blez a0,4d64 + stream->buf_read_cnt = (int)ret; + 4d2c: 40f42c23 sw a5,1048(s0) + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 4d30: 4785 li a5,1 + 4d32: 01044503 lbu a0,16(s0) +} + 4d36: 60a2 ld ra,8(sp) + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 4d38: 40f42a23 sw a5,1044(s0) +} + 4d3c: 6402 ld s0,0(sp) + 4d3e: 0141 addi sp,sp,16 + 4d40: 8082 ret + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4d42: 4108 lw a0,0(a0) + 4d44: 01040593 addi a1,s0,16 + 4d48: b80fc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 4d4c: 41042783 lw a5,1040(s0) + 4d50: 00f54563 blt a0,a5,4d5a + stream->buf_write_pos = 0; + 4d54: 40042823 sw zero,1040(s0) + 4d58: bf79 j 4cf6 + stream->error = 1; + 4d5a: 4785 li a5,1 + 4d5c: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 4d5e: 40042823 sw zero,1040(s0) + return EOF; + 4d62: bf51 j 4cf6 + if (ret == 0) + 4d64: e509 bnez a0,4d6e + stream->eof = 1; + 4d66: 4785 li a5,1 + 4d68: c45c sw a5,12(s0) + return EOF; + 4d6a: 557d li a0,-1 + 4d6c: b755 j 4d10 + stream->error = 1; + 4d6e: 4785 li a5,1 + 4d70: c41c sw a5,8(s0) + return EOF; + 4d72: 557d li a0,-1 + 4d74: bf71 j 4d10 + 4d76: 557d li a0,-1 +} + 4d78: 8082 ret + +0000000000004d7a : + if (!stream || n <= 0) + 4d7a: ce5d beqz a2,4e38 + 4d7c: 0ab05e63 blez a1,4e38 +{ + 4d80: 715d addi sp,sp,-80 + 4d82: e0a2 sd s0,64(sp) + 4d84: fc26 sd s1,56(sp) + 4d86: f84a sd s2,48(sp) + 4d88: f44e sd s3,40(sp) + 4d8a: f052 sd s4,32(sp) + 4d8c: ec56 sd s5,24(sp) + 4d8e: e85a sd s6,16(sp) + 4d90: e45e sd s7,8(sp) + 4d92: e486 sd ra,72(sp) + 4d94: 8432 mv s0,a2 + 4d96: 8aaa mv s5,a0 + 4d98: 892a mv s2,a0 + 4d9a: fff58b9b addiw s7,a1,-1 + int i = 0, c; + 4d9e: 4481 li s1,0 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4da0: 01060993 addi s3,a2,16 + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 4da4: 4b05 li s6,1 + if (c == '\n') + 4da6: 4a29 li s4,10 + while (i < n - 1) + 4da8: 05748163 beq s1,s7,4dea + if (stream->buf_write_pos > 0) + 4dac: 41042603 lw a2,1040(s0) + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4db0: 85ce mv a1,s3 + if (stream->buf_write_pos > 0) + 4db2: 06c04963 bgtz a2,4e24 + if (stream->buf_read_pos < stream->buf_read_cnt) + 4db6: 41442783 lw a5,1044(s0) + 4dba: 41842703 lw a4,1048(s0) + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 4dbe: 40000613 li a2,1024 + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 4dc2: 0017851b addiw a0,a5,1 + 4dc6: 00f406b3 add a3,s0,a5 + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 4dca: 85ce mv a1,s3 + if (stream->buf_read_pos < stream->buf_read_cnt) + 4dcc: 02e7de63 bge a5,a4,4e08 + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 4dd0: 40a42a23 sw a0,1044(s0) + 4dd4: 0106c783 lbu a5,16(a3) + 4dd8: 0007871b sext.w a4,a5 + str[i++] = (char)c; + 4ddc: 00f90023 sb a5,0(s2) + 4de0: 2485 addiw s1,s1,1 + if (c == '\n') + 4de2: 0905 addi s2,s2,1 + 4de4: fd4712e3 bne a4,s4,4da8 + str[i++] = (char)c; + 4de8: 8ba6 mv s7,s1 + str[i] = '\0'; + 4dea: 9bd6 add s7,s7,s5 + 4dec: 000b8023 sb zero,0(s7) + return str; + 4df0: 8556 mv a0,s5 +} + 4df2: 60a6 ld ra,72(sp) + 4df4: 6406 ld s0,64(sp) + 4df6: 74e2 ld s1,56(sp) + 4df8: 7942 ld s2,48(sp) + 4dfa: 79a2 ld s3,40(sp) + 4dfc: 7a02 ld s4,32(sp) + 4dfe: 6ae2 ld s5,24(sp) + 4e00: 6b42 ld s6,16(sp) + 4e02: 6ba2 ld s7,8(sp) + 4e04: 6161 addi sp,sp,80 + 4e06: 8082 ret + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 4e08: 4008 lw a0,0(s0) + 4e0a: ab6fc0ef jal 10c0 + if (ret <= 0) + 4e0e: 02a05c63 blez a0,4e46 + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 4e12: 01044783 lbu a5,16(s0) + stream->buf_read_cnt = (int)ret; + 4e16: 40a42c23 sw a0,1048(s0) + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + 4e1a: 41642a23 sw s6,1044(s0) + 4e1e: 0007871b sext.w a4,a5 + if (c == -1) + 4e22: bf6d j 4ddc + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4e24: 4008 lw a0,0(s0) + 4e26: aa2fc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 4e2a: 41042783 lw a5,1040(s0) + 4e2e: 00f54763 blt a0,a5,4e3c + stream->buf_write_pos = 0; + 4e32: 40042823 sw zero,1040(s0) + 4e36: b741 j 4db6 + return NULL; + 4e38: 4501 li a0,0 +} + 4e3a: 8082 ret + stream->error = 1; + 4e3c: 4785 li a5,1 + 4e3e: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 4e40: 40042823 sw zero,1040(s0) + return EOF; + 4e44: bf8d j 4db6 + stream->eof = 1; + 4e46: 4785 li a5,1 + if (ret == 0) + 4e48: e509 bnez a0,4e52 + stream->eof = 1; + 4e4a: c45c sw a5,12(s0) + if (i == 0) + 4e4c: fcd1 bnez s1,4de8 + return NULL; + 4e4e: 4501 li a0,0 + 4e50: b74d j 4df2 + stream->error = 1; + 4e52: c41c sw a5,8(s0) + if (c == -1) + 4e54: bfe5 j 4e4c + +0000000000004e56 : +{ + 4e56: 715d addi sp,sp,-80 + 4e58: e486 sd ra,72(sp) + 4e5a: f44e sd s3,40(sp) + if (!stream || size == 0 || nmemb == 0) + 4e5c: 0e068963 beqz a3,4f4e + 4e60: ec56 sd s5,24(sp) + return 0; + 4e62: 4981 li s3,0 + 4e64: 8aae mv s5,a1 + if (!stream || size == 0 || nmemb == 0) + 4e66: c9bd beqz a1,4edc + 4e68: ca35 beqz a2,4edc + if (stream->buf_write_pos > 0) + 4e6a: 4106a783 lw a5,1040(a3) + 4e6e: e0a2 sd s0,64(sp) + 4e70: f052 sd s4,32(sp) + uint64 total_bytes = size * nmemb; + 4e72: 02c589b3 mul s3,a1,a2 + 4e76: 8436 mv s0,a3 + 4e78: 8a2a mv s4,a0 + if (stream->buf_write_pos > 0) + 4e7a: 0af04d63 bgtz a5,4f34 + while (bytes_read < total_bytes) + 4e7e: 04098d63 beqz s3,4ed8 + 4e82: fc26 sd s1,56(sp) + 4e84: e85a sd s6,16(sp) + 4e86: e45e sd s7,8(sp) + 4e88: f84a sd s2,48(sp) + 4e8a: 4481 li s1,0 + if (remaining >= BUFSIZ) + 4e8c: 3ff00b13 li s6,1023 + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 4e90: 01040b93 addi s7,s0,16 + if (stream->buf_read_pos < stream->buf_read_cnt) + 4e94: 41442703 lw a4,1044(s0) + 4e98: 41842783 lw a5,1048(s0) + uint64 remaining = total_bytes - bytes_read; + 4e9c: 40998633 sub a2,s3,s1 + if (stream->buf_read_pos < stream->buf_read_cnt) + 4ea0: 06f74463 blt a4,a5,4f08 + int64 ret = read(stream->fd, dst + bytes_read, remaining); + 4ea4: 4008 lw a0,0(s0) + 4ea6: 009a05b3 add a1,s4,s1 + if (remaining >= BUFSIZ) + 4eaa: 02cb7f63 bgeu s6,a2,4ee8 + int64 ret = read(stream->fd, dst + bytes_read, remaining); + 4eae: a12fc0ef jal 10c0 + if (ret <= 0) + 4eb2: 0aa05463 blez a0,4f5a + bytes_read += ret; + 4eb6: 94aa add s1,s1,a0 + while (bytes_read < total_bytes) + 4eb8: fd34eee3 bltu s1,s3,4e94 + return bytes_read / size; + 4ebc: 0354d9b3 divu s3,s1,s5 + 4ec0: 6406 ld s0,64(sp) +} + 4ec2: 60a6 ld ra,72(sp) + return bytes_read / size; + 4ec4: 74e2 ld s1,56(sp) + 4ec6: 7942 ld s2,48(sp) + 4ec8: 7a02 ld s4,32(sp) + 4eca: 6ae2 ld s5,24(sp) + 4ecc: 6b42 ld s6,16(sp) + 4ece: 6ba2 ld s7,8(sp) +} + 4ed0: 854e mv a0,s3 + 4ed2: 79a2 ld s3,40(sp) + 4ed4: 6161 addi sp,sp,80 + 4ed6: 8082 ret + 4ed8: 6406 ld s0,64(sp) + 4eda: 7a02 ld s4,32(sp) + 4edc: 60a6 ld ra,72(sp) + 4ede: 6ae2 ld s5,24(sp) + 4ee0: 854e mv a0,s3 + 4ee2: 79a2 ld s3,40(sp) + 4ee4: 6161 addi sp,sp,80 + 4ee6: 8082 ret + stream->buf_read_pos = 0; + 4ee8: 40042a23 sw zero,1044(s0) + stream->buf_read_cnt = 0; + 4eec: 40042c23 sw zero,1048(s0) + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + 4ef0: 40000613 li a2,1024 + 4ef4: 85de mv a1,s7 + 4ef6: 9cafc0ef jal 10c0 + if (ret <= 0) + 4efa: 06a05063 blez a0,4f5a + stream->buf_read_cnt = (int)ret; + 4efe: 40a42c23 sw a0,1048(s0) + while (bytes_read < total_bytes) + 4f02: f934e9e3 bltu s1,s3,4e94 + 4f06: bf5d j 4ebc + uint64 available = stream->buf_read_cnt - stream->buf_read_pos; + 4f08: 40e7893b subw s2,a5,a4 + memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); + 4f0c: 00eb85b3 add a1,s7,a4 + 4f10: 009a0533 add a0,s4,s1 + uint64 to_copy = (available < remaining) ? available : remaining; + 4f14: 01267363 bgeu a2,s2,4f1a + 4f18: 8932 mv s2,a2 + memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); + 4f1a: 864a mv a2,s2 + 4f1c: 3c9000ef jal 5ae4 + stream->buf_read_pos += to_copy; + 4f20: 41442783 lw a5,1044(s0) + bytes_read += to_copy; + 4f24: 94ca add s1,s1,s2 + stream->buf_read_pos += to_copy; + 4f26: 012787bb addw a5,a5,s2 + 4f2a: 40f42a23 sw a5,1044(s0) + while (bytes_read < total_bytes) + 4f2e: f734e3e3 bltu s1,s3,4e94 + 4f32: b769 j 4ebc + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 4f34: 4288 lw a0,0(a3) + 4f36: 863e mv a2,a5 + 4f38: 01068593 addi a1,a3,16 + 4f3c: 98cfc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 4f40: 41042783 lw a5,1040(s0) + 4f44: 02f54163 blt a0,a5,4f66 + stream->buf_write_pos = 0; + 4f48: 40042823 sw zero,1040(s0) + 4f4c: bf0d j 4e7e +} + 4f4e: 60a6 ld ra,72(sp) + return 0; + 4f50: 4981 li s3,0 +} + 4f52: 854e mv a0,s3 + 4f54: 79a2 ld s3,40(sp) + 4f56: 6161 addi sp,sp,80 + 4f58: 8082 ret + stream->eof = 1; + 4f5a: 4785 li a5,1 + if (ret == 0) + 4f5c: e119 bnez a0,4f62 + stream->eof = 1; + 4f5e: c45c sw a5,12(s0) + 4f60: bfb1 j 4ebc + stream->error = 1; + 4f62: c41c sw a5,8(s0) + return bytes_read / size; + 4f64: bfa1 j 4ebc + stream->error = 1; + 4f66: 4785 li a5,1 + 4f68: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 4f6a: 40042823 sw zero,1040(s0) + return EOF; + 4f6e: bf01 j 4e7e + +0000000000004f70 : +{ + 4f70: 711d addi sp,sp,-96 + 4f72: ec86 sd ra,88(sp) + 4f74: e0ca sd s2,64(sp) + if (!stream || !ptr || size == 0 || nmemb == 0) + 4f76: 10068063 beqz a3,5076 + 4f7a: f456 sd s5,40(sp) + 4f7c: 8aaa mv s5,a0 + 4f7e: 10050263 beqz a0,5082 + 4f82: f05a sd s6,32(sp) + return 0; + 4f84: 4901 li s2,0 + 4f86: 8b2e mv s6,a1 + if (!stream || !ptr || size == 0 || nmemb == 0) + 4f88: c1d9 beqz a1,500e + 4f8a: c251 beqz a2,500e + if (stream->buf_mode == 2) + 4f8c: 41c6a703 lw a4,1052(a3) + 4f90: e8a2 sd s0,80(sp) + 4f92: 4789 li a5,2 + uint64 total_bytes = size * nmemb; + 4f94: 02c58933 mul s2,a1,a2 + if (stream->buf_mode == 2) + 4f98: 8436 mv s0,a3 + 4f9a: 0ef70b63 beq a4,a5,5090 + 4f9e: fc4e sd s3,56(sp) + 4fa0: ec5e sd s7,24(sp) + 4fa2: e862 sd s8,16(sp) + uint64 bytes_written = 0; + 4fa4: 4981 li s3,0 + 4fa6: 01068b93 addi s7,a3,16 + uint64 space_left = BUFSIZ - stream->buf_write_pos; + 4faa: 40000c13 li s8,1024 + while (bytes_written < total_bytes) + 4fae: 12090263 beqz s2,50d2 + 4fb2: e4a6 sd s1,72(sp) + 4fb4: f852 sd s4,48(sp) + 4fb6: e466 sd s9,8(sp) + uint64 space_left = BUFSIZ - stream->buf_write_pos; + 4fb8: 41042783 lw a5,1040(s0) + uint64 remaining = total_bytes - bytes_written; + 4fbc: 41390cb3 sub s9,s2,s3 + memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); + 4fc0: 013a85b3 add a1,s5,s3 + uint64 space_left = BUFSIZ - stream->buf_write_pos; + 4fc4: 40fc0a3b subw s4,s8,a5 + memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); + 4fc8: 00fb8533 add a0,s7,a5 + 4fcc: 8652 mv a2,s4 + if (remaining <= space_left) + 4fce: 059a6763 bltu s4,s9,501c + memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); + 4fd2: 8666 mv a2,s9 + 4fd4: 311000ef jal 5ae4 + stream->buf_write_pos += remaining; + 4fd8: 41042783 lw a5,1040(s0) + if (stream->buf_write_pos == BUFSIZ) + 4fdc: 40000713 li a4,1024 + stream->buf_write_pos += remaining; + 4fe0: 019786bb addw a3,a5,s9 + 4fe4: 40d42823 sw a3,1040(s0) + if (stream->buf_write_pos == BUFSIZ) + 4fe8: 06e68a63 beq a3,a4,505c + return bytes_written / size; + 4fec: 03695933 divu s2,s2,s6 + 4ff0: 6446 ld s0,80(sp) + 4ff2: 64a6 ld s1,72(sp) + 4ff4: 79e2 ld s3,56(sp) + 4ff6: 7a42 ld s4,48(sp) + 4ff8: 7aa2 ld s5,40(sp) + 4ffa: 7b02 ld s6,32(sp) + 4ffc: 6be2 ld s7,24(sp) + 4ffe: 6c42 ld s8,16(sp) + 5000: 6ca2 ld s9,8(sp) +} + 5002: 60e6 ld ra,88(sp) + 5004: 854a mv a0,s2 + 5006: 6906 ld s2,64(sp) + 5008: 6125 addi sp,sp,96 + 500a: 8082 ret + 500c: 6446 ld s0,80(sp) + 500e: 60e6 ld ra,88(sp) + 5010: 7aa2 ld s5,40(sp) + 5012: 7b02 ld s6,32(sp) + 5014: 854a mv a0,s2 + 5016: 6906 ld s2,64(sp) + 5018: 6125 addi sp,sp,96 + 501a: 8082 ret + memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); + 501c: 2c9000ef jal 5ae4 + stream->buf_write_pos += space_left; + 5020: 41042783 lw a5,1040(s0) + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 5024: 85de mv a1,s7 + bytes_written += space_left; + 5026: 99d2 add s3,s3,s4 + stream->buf_write_pos += space_left; + 5028: 00fa04bb addw s1,s4,a5 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 502c: 02049613 slli a2,s1,0x20 + stream->buf_write_pos += space_left; + 5030: 40942823 sw s1,1040(s0) + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 5034: 9201 srli a2,a2,0x20 + if (stream->buf_write_pos > 0) + 5036: 00904763 bgtz s1,5044 + while (bytes_written < total_bytes) + 503a: f729efe3 bltu s3,s2,4fb8 + return bytes_written / size; + 503e: 0369d933 divu s2,s3,s6 + 5042: b77d j 4ff0 + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 5044: 4008 lw a0,0(s0) + 5046: 882fc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 504a: 41042783 lw a5,1040(s0) + 504e: 08f54963 blt a0,a5,50e0 + stream->buf_write_pos = 0; + 5052: 40042823 sw zero,1040(s0) + while (bytes_written < total_bytes) + 5056: f729e1e3 bltu s3,s2,4fb8 + 505a: b7d5 j 503e + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 505c: 4008 lw a0,0(s0) + 505e: 40000613 li a2,1024 + 5062: 85de mv a1,s7 + 5064: 864fc0ef jal 10c8 + if (ret < stream->buf_write_pos) + 5068: 41042783 lw a5,1040(s0) + 506c: 08f54163 blt a0,a5,50ee + stream->buf_write_pos = 0; + 5070: 40042823 sw zero,1040(s0) + 5074: bfa5 j 4fec +} + 5076: 60e6 ld ra,88(sp) + return 0; + 5078: 4901 li s2,0 +} + 507a: 854a mv a0,s2 + 507c: 6906 ld s2,64(sp) + 507e: 6125 addi sp,sp,96 + 5080: 8082 ret + 5082: 60e6 ld ra,88(sp) + return 0; + 5084: 4901 li s2,0 + 5086: 7aa2 ld s5,40(sp) +} + 5088: 854a mv a0,s2 + 508a: 6906 ld s2,64(sp) + 508c: 6125 addi sp,sp,96 + 508e: 8082 ret + while (bytes_written < total_bytes) + 5090: f6090ee3 beqz s2,500c + 5094: e4a6 sd s1,72(sp) + uint64 bytes_written = 0; + 5096: 4481 li s1,0 + 5098: a021 j 50a0 + bytes_written += ret; + 509a: 94aa add s1,s1,a0 + while (bytes_written < total_bytes) + 509c: 0324f463 bgeu s1,s2,50c4 + int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written); + 50a0: 4008 lw a0,0(s0) + 50a2: 40990633 sub a2,s2,s1 + 50a6: 009a85b3 add a1,s5,s1 + 50aa: 81efc0ef jal 10c8 + if (ret <= 0) + 50ae: fea046e3 bgtz a0,509a + stream->error = 1; + 50b2: 4785 li a5,1 + return bytes_written / size; + 50b4: 0364d933 divu s2,s1,s6 + stream->error = 1; + 50b8: c41c sw a5,8(s0) + break; + 50ba: 64a6 ld s1,72(sp) + 50bc: 6446 ld s0,80(sp) + 50be: 7aa2 ld s5,40(sp) + 50c0: 7b02 ld s6,32(sp) + 50c2: b781 j 5002 + return bytes_written / size; + 50c4: 0364d933 divu s2,s1,s6 + 50c8: 6446 ld s0,80(sp) + 50ca: 64a6 ld s1,72(sp) + 50cc: 7aa2 ld s5,40(sp) + 50ce: 7b02 ld s6,32(sp) + 50d0: bf0d j 5002 + 50d2: 6446 ld s0,80(sp) + 50d4: 79e2 ld s3,56(sp) + 50d6: 7aa2 ld s5,40(sp) + 50d8: 7b02 ld s6,32(sp) + 50da: 6be2 ld s7,24(sp) + 50dc: 6c42 ld s8,16(sp) + 50de: b715 j 5002 + stream->error = 1; + 50e0: 4785 li a5,1 + 50e2: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 50e4: 40042823 sw zero,1040(s0) + while (bytes_written < total_bytes) + 50e8: ed29e8e3 bltu s3,s2,4fb8 + 50ec: bf89 j 503e + stream->error = 1; + 50ee: 4785 li a5,1 + 50f0: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 50f2: 40042823 sw zero,1040(s0) + return EOF; + 50f6: bddd j 4fec + +00000000000050f8 : + if (!stream) + 50f8: c925 beqz a0,5168 +{ + 50fa: 1101 addi sp,sp,-32 + 50fc: e04a sd s2,0(sp) + 50fe: 8932 mv s2,a2 + if (stream->buf_write_pos > 0) + 5100: 41052603 lw a2,1040(a0) +{ + 5104: e822 sd s0,16(sp) + 5106: e426 sd s1,8(sp) + 5108: ec06 sd ra,24(sp) + 510a: 842a mv s0,a0 + 510c: 84ae mv s1,a1 + if (stream->buf_write_pos > 0) + 510e: 02c04863 bgtz a2,513e + if (lseek(stream->fd, offset, whence) < 0) + 5112: 4008 lw a0,0(s0) + stream->buf_read_pos = 0; + 5114: 40042a23 sw zero,1044(s0) + stream->buf_read_cnt = 0; + 5118: 40042c23 sw zero,1048(s0) + stream->eof = 0; + 511c: 00042623 sw zero,12(s0) + if (lseek(stream->fd, offset, whence) < 0) + 5120: 864a mv a2,s2 + 5122: 0004859b sext.w a1,s1 + 5126: 832fc0ef jal 1158 + 512a: 87aa mv a5,a0 + return 0; + 512c: 4501 li a0,0 + if (lseek(stream->fd, offset, whence) < 0) + 512e: 0207c463 bltz a5,5156 +} + 5132: 60e2 ld ra,24(sp) + 5134: 6442 ld s0,16(sp) + 5136: 64a2 ld s1,8(sp) + 5138: 6902 ld s2,0(sp) + 513a: 6105 addi sp,sp,32 + 513c: 8082 ret + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 513e: 4108 lw a0,0(a0) + 5140: 01040593 addi a1,s0,16 + 5144: f85fb0ef jal 10c8 + if (ret < stream->buf_write_pos) + 5148: 41042783 lw a5,1040(s0) + 514c: 00f54963 blt a0,a5,515e + stream->buf_write_pos = 0; + 5150: 40042823 sw zero,1040(s0) + 5154: bf7d j 5112 + stream->error = 1; + 5156: 4785 li a5,1 + 5158: c41c sw a5,8(s0) + return -1; + 515a: 557d li a0,-1 + 515c: bfd9 j 5132 + stream->error = 1; + 515e: 4785 li a5,1 + 5160: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 5162: 40042823 sw zero,1040(s0) + return EOF; + 5166: b775 j 5112 + return -1; + 5168: 557d li a0,-1 +} + 516a: 8082 ret + +000000000000516c : + if (!stream) + 516c: c505 beqz a0,5194 +{ + 516e: 1141 addi sp,sp,-16 + 5170: e022 sd s0,0(sp) + 5172: 842a mv s0,a0 + int64 ret = lseek(stream->fd, 0, SEEK_CUR); + 5174: 4108 lw a0,0(a0) + 5176: 4605 li a2,1 + 5178: 4581 li a1,0 +{ + 517a: e406 sd ra,8(sp) + int64 ret = lseek(stream->fd, 0, SEEK_CUR); + 517c: fddfb0ef jal 1158 + if (ret < 0) + 5180: 00054663 bltz a0,518c +} + 5184: 60a2 ld ra,8(sp) + 5186: 6402 ld s0,0(sp) + 5188: 0141 addi sp,sp,16 + 518a: 8082 ret + stream->error = 1; + 518c: 4785 li a5,1 + 518e: c41c sw a5,8(s0) + return -1L; + 5190: 557d li a0,-1 + 5192: bfcd j 5184 + 5194: 557d li a0,-1 +} + 5196: 8082 ret + +0000000000005198 : + if (stream) + 5198: c915 beqz a0,51cc + if (stream->buf_write_pos > 0) + 519a: 41052603 lw a2,1040(a0) +{ + 519e: 1141 addi sp,sp,-16 + 51a0: e022 sd s0,0(sp) + 51a2: e406 sd ra,8(sp) + 51a4: 842a mv s0,a0 + if (stream->buf_write_pos > 0) + 51a6: 02c04463 bgtz a2,51ce + if (lseek(stream->fd, offset, whence) < 0) + 51aa: 4008 lw a0,0(s0) + stream->buf_read_pos = 0; + 51ac: 40042a23 sw zero,1044(s0) + stream->buf_read_cnt = 0; + 51b0: 40042c23 sw zero,1048(s0) + stream->eof = 0; + 51b4: 00042623 sw zero,12(s0) + if (lseek(stream->fd, offset, whence) < 0) + 51b8: 4601 li a2,0 + 51ba: 4581 li a1,0 + 51bc: f9dfb0ef jal 1158 +} + 51c0: 60a2 ld ra,8(sp) + stream->error = 0; + 51c2: 00042423 sw zero,8(s0) +} + 51c6: 6402 ld s0,0(sp) + 51c8: 0141 addi sp,sp,16 + 51ca: 8082 ret + 51cc: 8082 ret + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + 51ce: 4108 lw a0,0(a0) + 51d0: 01040593 addi a1,s0,16 + 51d4: ef5fb0ef jal 10c8 + if (ret < stream->buf_write_pos) + 51d8: 41042783 lw a5,1040(s0) + 51dc: 00f54563 blt a0,a5,51e6 + stream->buf_write_pos = 0; + 51e0: 40042823 sw zero,1040(s0) + 51e4: b7d9 j 51aa + stream->error = 1; + 51e6: 4785 li a5,1 + 51e8: c41c sw a5,8(s0) + stream->buf_write_pos = 0; + 51ea: 40042823 sw zero,1040(s0) + return EOF; + 51ee: bf75 j 51aa + +00000000000051f0 : + return (stream) ? stream->eof : 1; + 51f0: c119 beqz a0,51f6 + 51f2: 4548 lw a0,12(a0) + 51f4: 8082 ret + 51f6: 4505 li a0,1 +} + 51f8: 8082 ret + +00000000000051fa : + return (stream) ? stream->error : 1; + 51fa: c119 beqz a0,5200 + 51fc: 4508 lw a0,8(a0) + 51fe: 8082 ret + 5200: 4505 li a0,1 +} + 5202: 8082 ret + +0000000000005204 : + if (stream) + 5204: c509 beqz a0,520e + stream->error = 0; + 5206: 00052423 sw zero,8(a0) + stream->eof = 0; + 520a: 00052623 sw zero,12(a0) +} + 520e: 8082 ret + +0000000000005210 : + if (!stream || c == EOF) + 5210: c19d beqz a1,5236 + 5212: 57fd li a5,-1 + 5214: 02f50163 beq a0,a5,5236 + if (stream->buf_read_pos > 0) + 5218: 4145a783 lw a5,1044(a1) + 521c: 00f05d63 blez a5,5236 + stream->buf_read_pos--; + 5220: fff7871b addiw a4,a5,-1 + 5224: 40e5aa23 sw a4,1044(a1) + stream->buffer[stream->buf_read_pos] = (char)c; + 5228: 00e587b3 add a5,a1,a4 + 522c: 00a78823 sb a0,16(a5) + stream->eof = 0; + 5230: 0005a623 sw zero,12(a1) + return c; + 5234: 8082 ret + return EOF; + 5236: 557d li a0,-1 + 5238: 8082 ret + +000000000000523a : + return new_ptr; +} + +/* String Conversion*/ + +unsigned long long strtoull(const char *nptr, char **endptr, int base) + 523a: 1141 addi sp,sp,-16 + 523c: e422 sd s0,8(sp) + 523e: 8eaa mv t4,a0 +{ + const char *s = nptr; + 5240: 88aa mv a7,a0 + static inline int isdigit(int c) { return c >= '0' && c <= '9'; } + static inline int islower(int c) { return c >= 'a' && c <= 'z'; } + static inline int isupper(int c) { return c >= 'A' && c <= 'Z'; } + static inline int isalpha(int c) { return islower(c) || isupper(c); } + static inline int isalnum(int c) { return isalpha(c) || isdigit(c); } + static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } + 5242: 02000313 li t1,32 + 5246: 4e11 li t3,4 + return 0; + } + + do + { + c = *s++; + 5248: 0008c783 lbu a5,0(a7) + 524c: 00188813 addi a6,a7,1 + 5250: ff77871b addiw a4,a5,-9 + 5254: 0ff77693 zext.b a3,a4 + 5258: 0007871b sext.w a4,a5 + 525c: 04678363 beq a5,t1,52a2 + 5260: 04de7163 bgeu t3,a3,52a2 + } while (isspace(c)); + + if (c == '-') + 5264: 02d00793 li a5,45 + 5268: 0ef70863 beq a4,a5,5358 + { + neg = 1; + c = *s++; + } + else if (c == '+') + 526c: 02b00793 li a5,43 + int neg = 0, any, cutlim; + 5270: 4381 li t2,0 + else if (c == '+') + 5272: 08f70c63 beq a4,a5,530a + { + c = *s++; + } + + if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) + 5276: ea05 bnez a2,52a6 + 5278: 03000793 li a5,48 + 527c: 0ef70463 beq a4,a5,5364 + 5280: 00ccd8b7 lui a7,0xccd + 5284: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc3f0d> + 5288: 08b2 slli a7,a7,0xc + 528a: ccd88893 addi a7,a7,-819 + 528e: 08b2 slli a7,a7,0xc + 5290: ccd88893 addi a7,a7,-819 + 5294: 08b6 slli a7,a7,0xd + 5296: 4415 li s0,5 + 5298: 99988893 addi a7,a7,-1639 + 529c: 42a9 li t0,10 + c = s[1]; + s += 2; + base = 16; + } + if (base == 0) + base = (c == '0' ? 8 : 10); + 529e: 4629 li a2,10 + 52a0: a829 j 52ba +unsigned long long strtoull(const char *nptr, char **endptr, int base) + 52a2: 88c2 mv a7,a6 + 52a4: b755 j 5248 + if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) + 52a6: 47c1 li a5,16 + 52a8: 0cf60d63 beq a2,a5,5382 + + cutoff = ULLONG_MAX / (unsigned long long)base; + 52ac: 58fd li a7,-1 + cutlim = ULLONG_MAX % (unsigned long long)base; + 52ae: 02c8f433 remu s0,a7,a2 + cutoff = ULLONG_MAX / (unsigned long long)base; + 52b2: 82b2 mv t0,a2 + 52b4: 02c8d8b3 divu a7,a7,a2 + cutlim = ULLONG_MAX % (unsigned long long)base; + 52b8: 2401 sext.w s0,s0 + + for (acc = 0, any = 0;; c = *s++) + 52ba: 4301 li t1,0 + 52bc: 4501 li a0,0 + { + if (isdigit(c)) + 52be: 4e25 li t3,9 + static inline int isalpha(int c) { return islower(c) || isupper(c); } + 52c0: 4fe5 li t6,25 + break; + + if (c >= base) + break; + + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + 52c2: 5f7d li t5,-1 + if (isdigit(c)) + 52c4: fd07079b addiw a5,a4,-48 + static inline int isdigit(int c) { return c >= '0' && c <= '9'; } + 52c8: 0007069b sext.w a3,a4 + 52cc: 00fe7e63 bgeu t3,a5,52e8 + static inline int isalpha(int c) { return islower(c) || isupper(c); } + 52d0: f9f6879b addiw a5,a3,-97 + 52d4: 04fff063 bgeu t6,a5,5314 + 52d8: fbf6869b addiw a3,a3,-65 + 52dc: 04dfe163 bltu t6,a3,531e + c -= isupper(c) ? 'A' - 10 : 'a' - 10; + 52e0: 03700793 li a5,55 + 52e4: 40f707bb subw a5,a4,a5 + if (c >= base) + 52e8: 02c7db63 bge a5,a2,531e + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + 52ec: 01e30b63 beq t1,t5,5302 + any = -1; + 52f0: 537d li t1,-1 + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + 52f2: 00a8e863 bltu a7,a0,5302 + 52f6: 05150e63 beq a0,a7,5352 + else + { + any = 1; + 52fa: 4305 li t1,1 + acc *= base; + 52fc: 02550533 mul a0,a0,t0 + acc += c; + 5300: 953e add a0,a0,a5 + for (acc = 0, any = 0;; c = *s++) + 5302: 0805 addi a6,a6,1 + 5304: fff84703 lbu a4,-1(a6) + if (isdigit(c)) + 5308: bf75 j 52c4 + c = *s++; + 530a: 00084703 lbu a4,0(a6) + 530e: 00288813 addi a6,a7,2 + 5312: b795 j 5276 + c -= isupper(c) ? 'A' - 10 : 'a' - 10; + 5314: 05700793 li a5,87 + 5318: 40f707bb subw a5,a4,a5 + 531c: b7f1 j 52e8 + } + } + + if (any < 0) + 531e: 57fd li a5,-1 + 5320: 00f30e63 beq t1,a5,533c + { + acc = ULLONG_MAX; + errno = ERANGE; + } + else if (neg) + 5324: 00038463 beqz t2,532c + acc = -acc; + 5328: 40a00533 neg a0,a0 + + if (endptr != 0) + 532c: c589 beqz a1,5336 + *endptr = (char *)(any ? s - 1 : nptr); + 532e: 00031f63 bnez t1,534c + 5332: 01d5b023 sd t4,0(a1) + + return acc; +} + 5336: 6422 ld s0,8(sp) + 5338: 0141 addi sp,sp,16 + 533a: 8082 ret + errno = ERANGE; + 533c: 02200793 li a5,34 + 5340: 00004717 auipc a4,0x4 + 5344: 94f72423 sw a5,-1720(a4) # 8c88 + acc = ULLONG_MAX; + 5348: 557d li a0,-1 + if (endptr != 0) + 534a: d5f5 beqz a1,5336 + *endptr = (char *)(any ? s - 1 : nptr); + 534c: fff80e93 addi t4,a6,-1 + 5350: b7cd j 5332 + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + 5352: faf448e3 blt s0,a5,5302 + 5356: b755 j 52fa + c = *s++; + 5358: 00084703 lbu a4,0(a6) + neg = 1; + 535c: 4385 li t2,1 + c = *s++; + 535e: 00288813 addi a6,a7,2 + 5362: bf11 j 5276 + if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) + 5364: 00084783 lbu a5,0(a6) + 5368: 05800693 li a3,88 + 536c: 0df7f793 andi a5,a5,223 + 5370: 02d78b63 beq a5,a3,53a6 + 5374: 58fd li a7,-1 + 5376: 441d li s0,7 + 5378: 0038d893 srli a7,a7,0x3 + 537c: 42a1 li t0,8 + base = (c == '0' ? 8 : 10); + 537e: 4621 li a2,8 + 5380: bf2d j 52ba + if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) + 5382: 03000793 li a5,48 + 5386: 00f70863 beq a4,a5,5396 + 538a: 58fd li a7,-1 + 538c: 443d li s0,15 + 538e: 0048d893 srli a7,a7,0x4 + 5392: 42c1 li t0,16 + 5394: b71d j 52ba + 5396: 00084783 lbu a5,0(a6) + 539a: 05800693 li a3,88 + 539e: 0df7f793 andi a5,a5,223 + 53a2: fed794e3 bne a5,a3,538a + s += 2; + 53a6: 58fd li a7,-1 + c = s[1]; + 53a8: 00184703 lbu a4,1(a6) + s += 2; + 53ac: 443d li s0,15 + 53ae: 0809 addi a6,a6,2 + 53b0: 0048d893 srli a7,a7,0x4 + 53b4: 42c1 li t0,16 + base = 16; + 53b6: 4641 li a2,16 + 53b8: b709 j 52ba + +00000000000053ba : + if (__atexit_func_count >= ATEXIT_MAX) + 53ba: 00004717 auipc a4,0x4 + 53be: 8ce70713 addi a4,a4,-1842 # 8c88 + 53c2: 435c lw a5,4(a4) + 53c4: 46fd li a3,31 + 53c6: 00f6ca63 blt a3,a5,53da + __atexit_funcs[__atexit_func_count++] = function; + 53ca: 00379693 slli a3,a5,0x3 + 53ce: 96ba add a3,a3,a4 + 53d0: 2785 addiw a5,a5,1 + 53d2: e688 sd a0,8(a3) + 53d4: c35c sw a5,4(a4) + return 0; + 53d6: 4501 li a0,0 + 53d8: 8082 ret + return -1; + 53da: 557d li a0,-1 +} + 53dc: 8082 ret + +00000000000053de : +{ + 53de: 1101 addi sp,sp,-32 + 53e0: e822 sd s0,16(sp) + while (__atexit_func_count > 0) + 53e2: 00004417 auipc s0,0x4 + 53e6: 8a640413 addi s0,s0,-1882 # 8c88 + 53ea: 405c lw a5,4(s0) +{ + 53ec: e426 sd s1,8(sp) + 53ee: ec06 sd ra,24(sp) + 53f0: 84aa mv s1,a0 + while (__atexit_func_count > 0) + 53f2: 00f05d63 blez a5,540c + (__atexit_funcs[--__atexit_func_count])(); + 53f6: fff7871b addiw a4,a5,-1 + 53fa: 87ba mv a5,a4 + 53fc: 070e slli a4,a4,0x3 + 53fe: 9722 add a4,a4,s0 + 5400: 6718 ld a4,8(a4) + 5402: c05c sw a5,4(s0) + 5404: 9702 jalr a4 + while (__atexit_func_count > 0) + 5406: 405c lw a5,4(s0) + 5408: fef047e3 bgtz a5,53f6 + sys_exit(status); + 540c: 8526 mv a0,s1 + 540e: c93fb0ef jal 10a0 + while (1) + 5412: a001 j 5412 + +0000000000005414 : +{ + 5414: 1141 addi sp,sp,-16 + exit(127); + 5416: 07f00513 li a0,127 +{ + 541a: e406 sd ra,8(sp) + exit(127); + 541c: fc3ff0ef jal 53de + +0000000000005420 : +} + 5420: 4501 li a0,0 + 5422: 8082 ret + +0000000000005424 : +} + 5424: 557d li a0,-1 + 5426: 8082 ret + +0000000000005428 : + if (!ptr) + 5428: c121 beqz a0,5468 + for (p = freep; !(bp > p && bp < p->next); p = p->next) + 542a: 00004617 auipc a2,0x4 + 542e: 85e60613 addi a2,a2,-1954 # 8c88 + 5432: 10863783 ld a5,264(a2) + bp = (header_t *)ptr - 1; + 5436: ff050693 addi a3,a0,-16 + if (p >= p->next && (bp > p || bp < p->next)) + 543a: 6798 ld a4,8(a5) + for (p = freep; !(bp > p && bp < p->next); p = p->next) + 543c: 02d7f763 bgeu a5,a3,546a + 5440: 00e6e463 bltu a3,a4,5448 + if (p >= p->next && (bp > p || bp < p->next)) + 5444: 02e7e763 bltu a5,a4,5472 + if ((char *)bp + bp->size == (char *)p->next) + 5448: ff053583 ld a1,-16(a0) + 544c: 00b68833 add a6,a3,a1 + 5450: 03070363 beq a4,a6,5476 + if ((char *)p + p->size == (char *)bp) + 5454: 638c ld a1,0(a5) + 5456: fee53c23 sd a4,-8(a0) + 545a: 00b78833 add a6,a5,a1 + 545e: 03068963 beq a3,a6,5490 + 5462: e794 sd a3,8(a5) + freep = p; + 5464: 10f63423 sd a5,264(a2) +} + 5468: 8082 ret + if (p >= p->next && (bp > p || bp < p->next)) + 546a: 00e7e463 bltu a5,a4,5472 + 546e: fce6ede3 bltu a3,a4,5448 +{ + 5472: 87ba mv a5,a4 + 5474: b7d9 j 543a + bp->size += p->next->size; + 5476: 00073803 ld a6,0(a4) + bp->next = p->next->next; + 547a: 6718 ld a4,8(a4) + bp->size += p->next->size; + 547c: 95c2 add a1,a1,a6 + 547e: feb53823 sd a1,-16(a0) + if ((char *)p + p->size == (char *)bp) + 5482: 638c ld a1,0(a5) + 5484: fee53c23 sd a4,-8(a0) + 5488: 00b78833 add a6,a5,a1 + 548c: fd069be3 bne a3,a6,5462 + p->size += bp->size; + 5490: ff053503 ld a0,-16(a0) + p->next = bp->next; + 5494: 86ba mv a3,a4 + p->size += bp->size; + 5496: 00b50733 add a4,a0,a1 + 549a: e398 sd a4,0(a5) + p->next = bp->next; + 549c: b7d9 j 5462 + +000000000000549e : + if (size == 0) + 549e: c54d beqz a0,5548 +{ + 54a0: 1101 addi sp,sp,-32 + 54a2: e426 sd s1,8(sp) + if ((prevp = freep) == NULL) + 54a4: 00003497 auipc s1,0x3 + 54a8: 7e448493 addi s1,s1,2020 # 8c88 + 54ac: 1084b783 ld a5,264(s1) +{ + 54b0: e822 sd s0,16(sp) + size = ALIGN(size + sizeof(header_t)); + 54b2: 057d addi a0,a0,31 +{ + 54b4: ec06 sd ra,24(sp) + size = ALIGN(size + sizeof(header_t)); + 54b6: ff057413 andi s0,a0,-16 + if ((prevp = freep) == NULL) + 54ba: c7b5 beqz a5,5526 + for (p = prevp->next;; prevp = p, p = p->next) + 54bc: 6788 ld a0,8(a5) + if (p->size >= size) + 54be: 6118 ld a4,0(a0) + 54c0: 04877663 bgeu a4,s0,550c + 54c4: e04a sd s2,0(sp) + if (cp == (void *)-1) + 54c6: 597d li s2,-1 + 54c8: a029 j 54d2 + for (p = prevp->next;; prevp = p, p = p->next) + 54ca: 6788 ld a0,8(a5) + if (p->size >= size) + 54cc: 6118 ld a4,0(a0) + 54ce: 02877e63 bgeu a4,s0,550a + if (p == freep) + 54d2: 1084b703 ld a4,264(s1) + 54d6: 87aa mv a5,a0 + 54d8: fea719e3 bne a4,a0,54ca + cp = (char *)sbrk(nu); + 54dc: 6505 lui a0,0x1 + 54de: c53fb0ef jal 1130 + 54e2: 87aa mv a5,a0 + free((void *)(up + 1)); + 54e4: 0541 addi a0,a0,16 # 1010 + if (cp == (void *)-1) + 54e6: 01278963 beq a5,s2,54f8 + up->size = nu; + 54ea: 6705 lui a4,0x1 + 54ec: e398 sd a4,0(a5) + free((void *)(up + 1)); + 54ee: f3bff0ef jal 5428 + return freep; + 54f2: 1084b783 ld a5,264(s1) + if ((p = morecore(nunits * sizeof(header_t))) == NULL) + 54f6: fbf1 bnez a5,54ca +} + 54f8: 60e2 ld ra,24(sp) + 54fa: 6442 ld s0,16(sp) + errno = ENOMEM; + 54fc: 47b1 li a5,12 + 54fe: c09c sw a5,0(s1) + return NULL; + 5500: 6902 ld s2,0(sp) +} + 5502: 64a2 ld s1,8(sp) + return NULL; + 5504: 4501 li a0,0 +} + 5506: 6105 addi sp,sp,32 + 5508: 8082 ret + 550a: 6902 ld s2,0(sp) + if (p->size == size) + 550c: 02e40b63 beq s0,a4,5542 + p = (header_t *)((char *)p + p->size); + 5510: 953a add a0,a0,a4 + p->size = (nunits * sizeof(header_t)); + 5512: 00053023 sd zero,0(a0) +} + 5516: 60e2 ld ra,24(sp) + 5518: 6442 ld s0,16(sp) + freep = prevp; + 551a: 10f4b423 sd a5,264(s1) + return (void *)(p + 1); + 551e: 0541 addi a0,a0,16 +} + 5520: 64a2 ld s1,8(sp) + 5522: 6105 addi sp,sp,32 + 5524: 8082 ret + base.next = freep = prevp = &base; + 5526: 00004517 auipc a0,0x4 + 552a: 87250513 addi a0,a0,-1934 # 8d98 + 552e: 10a4b423 sd a0,264(s1) + 5532: 10a4bc23 sd a0,280(s1) + base.size = 0; + 5536: 00004797 auipc a5,0x4 + 553a: 8607b123 sd zero,-1950(a5) # 8d98 + if (p->size >= size) + 553e: f059 bnez s0,54c4 + base.next = freep = prevp = &base; + 5540: 87aa mv a5,a0 + prevp->next = p->next; + 5542: 6518 ld a4,8(a0) + 5544: e798 sd a4,8(a5) + 5546: bfc1 j 5516 + return NULL; + 5548: 4501 li a0,0 +} + 554a: 8082 ret + +000000000000554c : + if (__builtin_mul_overflow(nmemb, size, &total)) + 554c: 02b537b3 mulhu a5,a0,a1 +{ + 5550: 1101 addi sp,sp,-32 + 5552: e822 sd s0,16(sp) + 5554: ec06 sd ra,24(sp) + 5556: e426 sd s1,8(sp) + if (__builtin_mul_overflow(nmemb, size, &total)) + 5558: 02b50433 mul s0,a0,a1 + 555c: e385 bnez a5,557c + void *p = malloc(total); + 555e: 8522 mv a0,s0 + 5560: f3fff0ef jal 549e + 5564: 84aa mv s1,a0 + if (p) + 5566: c509 beqz a0,5570 + memset(p, 0, total); + 5568: 8622 mv a2,s0 + 556a: 4581 li a1,0 + 556c: 524000ef jal 5a90 +} + 5570: 60e2 ld ra,24(sp) + 5572: 6442 ld s0,16(sp) + 5574: 8526 mv a0,s1 + 5576: 64a2 ld s1,8(sp) + 5578: 6105 addi sp,sp,32 + 557a: 8082 ret + 557c: 60e2 ld ra,24(sp) + 557e: 6442 ld s0,16(sp) + errno = ENOMEM; + 5580: 47b1 li a5,12 + return NULL; + 5582: 4481 li s1,0 + errno = ENOMEM; + 5584: 00003717 auipc a4,0x3 + 5588: 70f72223 sw a5,1796(a4) # 8c88 +} + 558c: 8526 mv a0,s1 + 558e: 64a2 ld s1,8(sp) + 5590: 6105 addi sp,sp,32 + 5592: 8082 ret + +0000000000005594 : + if (!ptr) + 5594: c929 beqz a0,55e6 +{ + 5596: 1101 addi sp,sp,-32 + 5598: ec06 sd ra,24(sp) + 559a: e426 sd s1,8(sp) + if (size == 0) + 559c: c5b9 beqz a1,55ea + if (bp->size >= new_size) + 559e: ff053703 ld a4,-16(a0) + size_t new_size = ALIGN(size + sizeof(header_t)); + 55a2: 01f58793 addi a5,a1,31 + 55a6: e822 sd s0,16(sp) + 55a8: 9bc1 andi a5,a5,-16 + 55aa: 842a mv s0,a0 + return ptr; + 55ac: 84aa mv s1,a0 + if (bp->size >= new_size) + 55ae: 00f76863 bltu a4,a5,55be + 55b2: 6442 ld s0,16(sp) +} + 55b4: 60e2 ld ra,24(sp) + 55b6: 8526 mv a0,s1 + 55b8: 64a2 ld s1,8(sp) + 55ba: 6105 addi sp,sp,32 + 55bc: 8082 ret + void *new_ptr = malloc(size); + 55be: 852e mv a0,a1 + 55c0: edfff0ef jal 549e + 55c4: 84aa mv s1,a0 + if (!new_ptr) + 55c6: d575 beqz a0,55b2 + memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); + 55c8: ff043603 ld a2,-16(s0) + 55cc: 85a2 mv a1,s0 + 55ce: 1641 addi a2,a2,-16 + 55d0: 514000ef jal 5ae4 + free(ptr); + 55d4: 8522 mv a0,s0 + 55d6: e53ff0ef jal 5428 +} + 55da: 60e2 ld ra,24(sp) + free(ptr); + 55dc: 6442 ld s0,16(sp) +} + 55de: 8526 mv a0,s1 + 55e0: 64a2 ld s1,8(sp) + 55e2: 6105 addi sp,sp,32 + 55e4: 8082 ret + return malloc(size); + 55e6: 852e mv a0,a1 + 55e8: bd5d j 549e + free(ptr); + 55ea: e3fff0ef jal 5428 + return NULL; + 55ee: 4481 li s1,0 + 55f0: b7d1 j 55b4 + +00000000000055f2 : + if (base < 0 || base == 1 || base > 36) + 55f2: 02400813 li a6,36 +{ + 55f6: 86aa mv a3,a0 + 55f8: 872e mv a4,a1 + if (base < 0 || base == 1 || base > 36) + 55fa: 00c86663 bltu a6,a2,5606 + 55fe: 4805 li a6,1 + 5600: 01060363 beq a2,a6,5606 + 5604: b91d j 523a + if (endptr) + 5606: c311 beqz a4,560a + *endptr = (char *)nptr; + 5608: e314 sd a3,0(a4) + errno = 0; /* EINVAL */ + 560a: 00003797 auipc a5,0x3 + 560e: 6607af23 sw zero,1662(a5) # 8c88 +} + 5612: 4501 li a0,0 + 5614: 8082 ret + +0000000000005616 : + +long long strtoll(const char *nptr, char **endptr, int base) +{ + 5616: 1141 addi sp,sp,-16 + 5618: e406 sd ra,8(sp) + 561a: e022 sd s0,0(sp) + const char *s = nptr; + 561c: 86aa mv a3,a0 + static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } + 561e: 02000813 li a6,32 + 5622: 4891 li a7,4 + unsigned long long acc; + int c, neg = 0; + + do + { + c = *s++; + 5624: 0006c783 lbu a5,0(a3) + 5628: 0685 addi a3,a3,1 + 562a: ff77871b addiw a4,a5,-9 + 562e: 0ff77713 zext.b a4,a4 + 5632: 0007841b sext.w s0,a5 + 5636: ff0787e3 beq a5,a6,5624 + 563a: fee8f5e3 bgeu a7,a4,5624 + if (base < 0 || base == 1 || base > 36) + 563e: 02400793 li a5,36 + 5642: 02c7ec63 bltu a5,a2,567a + 5646: 4785 li a5,1 + 5648: 02f60963 beq a2,a5,567a + 564c: befff0ef jal 523a + if (c == '-') + neg = 1; + + acc = strtoull(nptr, endptr, base); + + if (errno == ERANGE && acc == ULLONG_MAX) + 5650: 00003797 auipc a5,0x3 + 5654: 63878793 addi a5,a5,1592 # 8c88 + 5658: 4394 lw a3,0(a5) + 565a: 02200713 li a4,34 + 565e: 04e68363 beq a3,a4,56a4 + return neg ? LLONG_MIN : LLONG_MAX; + + if (!neg && acc > (unsigned long long)LLONG_MAX) + 5662: 02d00713 li a4,45 + 5666: 02e40563 beq s0,a4,5690 + 566a: 00055f63 bgez a0,5688 + { + errno = ERANGE; + 566e: 02200713 li a4,34 + 5672: c398 sw a4,0(a5) + return neg ? LLONG_MIN : LLONG_MAX; + 5674: 557d li a0,-1 + 5676: 8105 srli a0,a0,0x1 + 5678: a801 j 5688 + if (endptr) + 567a: c191 beqz a1,567e + *endptr = (char *)nptr; + 567c: e188 sd a0,0(a1) + errno = 0; /* EINVAL */ + 567e: 00003797 auipc a5,0x3 + 5682: 6007a523 sw zero,1546(a5) # 8c88 + { + errno = ERANGE; + return LLONG_MIN; + } + + return neg ? -(long long)acc : (long long)acc; + 5686: 4501 li a0,0 +} + 5688: 60a2 ld ra,8(sp) + 568a: 6402 ld s0,0(sp) + 568c: 0141 addi sp,sp,16 + 568e: 8082 ret + if (neg && acc > (unsigned long long)LLONG_MAX + 1) + 5690: 577d li a4,-1 + 5692: 177e slli a4,a4,0x3f + 5694: 02a76263 bltu a4,a0,56b8 +} + 5698: 60a2 ld ra,8(sp) + 569a: 6402 ld s0,0(sp) + return neg ? -(long long)acc : (long long)acc; + 569c: 40a00533 neg a0,a0 +} + 56a0: 0141 addi sp,sp,16 + 56a2: 8082 ret + if (errno == ERANGE && acc == ULLONG_MAX) + 56a4: 577d li a4,-1 + 56a6: fae51ee3 bne a0,a4,5662 + return neg ? LLONG_MIN : LLONG_MAX; + 56aa: 02d00793 li a5,45 + 56ae: fcf413e3 bne s0,a5,5674 + return LLONG_MIN; + 56b2: 557d li a0,-1 + 56b4: 157e slli a0,a0,0x3f + 56b6: bfc9 j 5688 + errno = ERANGE; + 56b8: 02200713 li a4,34 + 56bc: c398 sw a4,0(a5) + return LLONG_MIN; + 56be: bfd5 j 56b2 + +00000000000056c0 : + if (base < 0 || base == 1 || base > 36) + 56c0: 02400813 li a6,36 + +unsigned long strtoul(const char *nptr, char **endptr, int base) +{ + 56c4: 86aa mv a3,a0 + 56c6: 872e mv a4,a1 + if (base < 0 || base == 1 || base > 36) + 56c8: 00c86663 bltu a6,a2,56d4 + 56cc: 4805 li a6,1 + 56ce: 01060363 beq a2,a6,56d4 + 56d2: b6a5 j 523a + if (endptr) + 56d4: c311 beqz a4,56d8 + *endptr = (char *)nptr; + 56d6: e314 sd a3,0(a4) + errno = 0; /* EINVAL */ + 56d8: 00003797 auipc a5,0x3 + 56dc: 5a07a823 sw zero,1456(a5) # 8c88 + { + errno = ERANGE; + return ULONG_MAX; + } + return (unsigned long)ret; +} + 56e0: 4501 li a0,0 + 56e2: 8082 ret + +00000000000056e4 : + +long strtol(const char *nptr, char **endptr, int base) +{ + long long ret = strtoll(nptr, endptr, base); + 56e4: bf0d j 5616 + +00000000000056e6 : + return LONG_MIN; + } + return (long)ret; +} + +int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } + 56e6: 1141 addi sp,sp,-16 + long long ret = strtoll(nptr, endptr, base); + 56e8: 4629 li a2,10 + 56ea: 4581 li a1,0 +int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } + 56ec: e406 sd ra,8(sp) + long long ret = strtoll(nptr, endptr, base); + 56ee: f29ff0ef jal 5616 +int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } + 56f2: 60a2 ld ra,8(sp) + 56f4: 2501 sext.w a0,a0 + 56f6: 0141 addi sp,sp,16 + 56f8: 8082 ret + +00000000000056fa : + long long ret = strtoll(nptr, endptr, base); + 56fa: 4629 li a2,10 + 56fc: 4581 li a1,0 + 56fe: bf21 j 5616 + +0000000000005700 : +long atol(const char *nptr) { return strtol(nptr, NULL, 10); } +long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } + 5700: 4629 li a2,10 + 5702: 4581 li a1,0 + 5704: bf09 j 5616 + +0000000000005706 : + 5706: 02000693 li a3,32 + 570a: 4611 li a2,4 +{ + double val = 0.0; + int sign = 1; + const char *s = nptr; + + while (isspace(*s)) + 570c: 00054783 lbu a5,0(a0) + 5710: ff77871b addiw a4,a5,-9 + 5714: 0ff77713 zext.b a4,a4 + 5718: 06d78263 beq a5,a3,577c + 571c: 06e67063 bgeu a2,a4,577c + s++; + if (*s == '-') + 5720: 02d00713 li a4,45 + 5724: 08e78e63 beq a5,a4,57c0 + { + sign = -1; + s++; + } + else if (*s == '+') + 5728: 02b00713 li a4,43 + 572c: 0ae78263 beq a5,a4,57d0 + 5730: 00001717 auipc a4,0x1 + 5734: 16873507 fld fa0,360(a4) # 6898 + static inline int isdigit(int c) { return c >= '0' && c <= '9'; } + 5738: fd07861b addiw a2,a5,-48 + s++; + + while (isdigit(*s)) + 573c: 46a5 li a3,9 + 573e: f20007d3 fmv.d.x fa5,zero + 5742: 8732 mv a4,a2 + 5744: 02c6e363 bltu a3,a2,576a + 5748: 00001797 auipc a5,0x1 + 574c: 1587b687 fld fa3,344(a5) # 68a0 + 5750: 4625 li a2,9 + 5752: 00154783 lbu a5,1(a0) + { + val = val * 10.0 + (*s - '0'); + 5756: d2070753 fcvt.d.w fa4,a4 + s++; + 575a: 0505 addi a0,a0,1 + 575c: fd07869b addiw a3,a5,-48 + val = val * 10.0 + (*s - '0'); + 5760: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 + 5764: 8736 mv a4,a3 + while (isdigit(*s)) + 5766: fed676e3 bgeu a2,a3,5752 + } + if (*s == '.') + 576a: 02e00713 li a4,46 + 576e: 00e78963 beq a5,a4,5780 + val += (*s - '0') * factor; + s++; + } + } + + if (endptr) + 5772: c191 beqz a1,5776 + *endptr = (char *)s; + 5774: e188 sd a0,0(a1) + return val * sign; +} + 5776: 12a7f553 fmul.d fa0,fa5,fa0 + 577a: 8082 ret + s++; + 577c: 0505 addi a0,a0,1 + 577e: b779 j 570c + while (isdigit(*s)) + 5780: 00154703 lbu a4,1(a0) + 5784: 46a5 li a3,9 + s++; + 5786: 0505 addi a0,a0,1 + 5788: fd07071b addiw a4,a4,-48 + 578c: 87ba mv a5,a4 + while (isdigit(*s)) + 578e: fee6e2e3 bltu a3,a4,5772 + double factor = 1.0; + 5792: 00001717 auipc a4,0x1 + 5796: 10673707 fld fa4,262(a4) # 6898 + 579a: 00001717 auipc a4,0x1 + 579e: 11e73607 fld fa2,286(a4) # 68b8 + factor *= 0.1; + 57a2: 12c77753 fmul.d fa4,fa4,fa2 + while (isdigit(*s)) + 57a6: 00154703 lbu a4,1(a0) + val += (*s - '0') * factor; + 57aa: d20786d3 fcvt.d.w fa3,a5 + s++; + 57ae: 0505 addi a0,a0,1 + 57b0: fd07071b addiw a4,a4,-48 + 57b4: 87ba mv a5,a4 + val += (*s - '0') * factor; + 57b6: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 + while (isdigit(*s)) + 57ba: fee6f4e3 bgeu a3,a4,57a2 + 57be: bf55 j 5772 + while (isdigit(*s)) + 57c0: 00154783 lbu a5,1(a0) + 57c4: 00001717 auipc a4,0x1 + 57c8: 0cc73507 fld fa0,204(a4) # 6890 + s++; + 57cc: 0505 addi a0,a0,1 + 57ce: b7ad j 5738 + while (isdigit(*s)) + 57d0: 00154783 lbu a5,1(a0) + 57d4: 00001717 auipc a4,0x1 + 57d8: 0c473507 fld fa0,196(a4) # 6898 + s++; + 57dc: 0505 addi a0,a0,1 + 57de: bfa9 j 5738 + +00000000000057e0 : + +double atof(const char *nptr) { return strtod(nptr, NULL); } + 57e0: 4581 li a1,0 + 57e2: b715 j 5706 + +00000000000057e4 : +float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } + 57e4: 1141 addi sp,sp,-16 + 57e6: e406 sd ra,8(sp) + 57e8: f1fff0ef jal 5706 + 57ec: 60a2 ld ra,8(sp) + 57ee: 40157553 fcvt.s.d fa0,fa0 + 57f2: 0141 addi sp,sp,16 + 57f4: 8082 ret + +00000000000057f6 : + } +} + +void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) +{ + if (nmemb < 2 || size == 0) + 57f6: 4785 li a5,1 + 57f8: 0cb7fd63 bgeu a5,a1,58d2 +{ + 57fc: 715d addi sp,sp,-80 + 57fe: f44e sd s3,40(sp) + 5800: e486 sd ra,72(sp) + 5802: 89b2 mv s3,a2 + if (nmemb < 2 || size == 0) + 5804: c279 beqz a2,58ca + 5806: e85a sd s6,16(sp) + 5808: 8b2e mv s6,a1 + return; + + char *base_ptr = (char *)base; + char *pivot = base_ptr + (nmemb - 1) * size; + 580a: 1b7d addi s6,s6,-1 + 580c: fc26 sd s1,56(sp) + 580e: 033b04b3 mul s1,s6,s3 + 5812: ec56 sd s5,24(sp) + 5814: 8aaa mv s5,a0 + 5816: f052 sd s4,32(sp) + 5818: e45e sd s7,8(sp) + 581a: e0a2 sd s0,64(sp) + 581c: f84a sd s2,48(sp) + 581e: 8a36 mv s4,a3 + if (nmemb < 2 || size == 0) + 5820: 4b85 li s7,1 + char *pivot = base_ptr + (nmemb - 1) * size; + 5822: 94d6 add s1,s1,s5 + char *i = base_ptr; + char *j = base_ptr; + + /* Partition */ + for (; j < pivot; j += size) + 5824: 069af763 bgeu s5,s1,5892 + char *j = base_ptr; + 5828: 8956 mv s2,s5 + char *i = base_ptr; + 582a: 8456 mv s0,s5 + 582c: a021 j 5834 + for (; j < pivot; j += size) + 582e: 994e add s2,s2,s3 + 5830: 00997f63 bgeu s2,s1,584e + { + if (compar(j, pivot) < 0) + 5834: 85a6 mv a1,s1 + 5836: 854a mv a0,s2 + 5838: 9a02 jalr s4 + 583a: fe055ae3 bgez a0,582e + { + if (i != j) + 583e: 05241d63 bne s0,s2,5898 + 5842: 01390633 add a2,s2,s3 + swap_bytes(i, j, size); + i += size; + 5846: 8432 mv s0,a2 + for (; j < pivot; j += size) + 5848: 994e add s2,s2,s3 + 584a: fe9965e3 bltu s2,s1,5834 + } + } + swap_bytes(i, pivot, size); + + /* Recurse */ + size_t left_count = (i - base_ptr) / size; + 584e: 415405b3 sub a1,s0,s5 + 5852: 0335d5b3 divu a1,a1,s3 + qsort(base, left_count, size, compar); + qsort(i + size, nmemb - left_count - 1, size, compar); + 5856: 40bb0b33 sub s6,s6,a1 + while (size--) + 585a: 013406b3 add a3,s0,s3 + *a++ = *b; + 585e: 0004c703 lbu a4,0(s1) + temp = *a; + 5862: 00044783 lbu a5,0(s0) + *b++ = temp; + 5866: 0485 addi s1,s1,1 + *a++ = *b; + 5868: 0405 addi s0,s0,1 + 586a: fee40fa3 sb a4,-1(s0) + *b++ = temp; + 586e: fef48fa3 sb a5,-1(s1) + while (size--) + 5872: fed416e3 bne s0,a3,585e + qsort(base, left_count, size, compar); + 5876: 86d2 mv a3,s4 + 5878: 864e mv a2,s3 + 587a: 8556 mv a0,s5 + 587c: f7bff0ef jal 57f6 + if (nmemb < 2 || size == 0) + 5880: 036bfe63 bgeu s7,s6,58bc + char *pivot = base_ptr + (nmemb - 1) * size; + 5884: 1b7d addi s6,s6,-1 + 5886: 033b04b3 mul s1,s6,s3 + 588a: 8aa2 mv s5,s0 + 588c: 94d6 add s1,s1,s5 + for (; j < pivot; j += size) + 588e: f89aede3 bltu s5,s1,5828 + char *i = base_ptr; + 5892: 8456 mv s0,s5 + for (; j < pivot; j += size) + 5894: 4581 li a1,0 + 5896: b7d1 j 585a + 5898: 01340633 add a2,s0,s3 + if (i != j) + 589c: 874a mv a4,s2 + 589e: 87a2 mv a5,s0 + *a++ = *b; + 58a0: 00074683 lbu a3,0(a4) + temp = *a; + 58a4: 0007c803 lbu a6,0(a5) + *b++ = temp; + 58a8: 0705 addi a4,a4,1 + *a++ = *b; + 58aa: 0785 addi a5,a5,1 + 58ac: fed78fa3 sb a3,-1(a5) + *b++ = temp; + 58b0: ff070fa3 sb a6,-1(a4) + while (size--) + 58b4: fec796e3 bne a5,a2,58a0 + i += size; + 58b8: 8432 mv s0,a2 + 58ba: b779 j 5848 + 58bc: 6406 ld s0,64(sp) + 58be: 74e2 ld s1,56(sp) + 58c0: 7942 ld s2,48(sp) + 58c2: 7a02 ld s4,32(sp) + 58c4: 6ae2 ld s5,24(sp) + 58c6: 6b42 ld s6,16(sp) + 58c8: 6ba2 ld s7,8(sp) +} + 58ca: 60a6 ld ra,72(sp) + 58cc: 79a2 ld s3,40(sp) + 58ce: 6161 addi sp,sp,80 + 58d0: 8082 ret + 58d2: 8082 ret + +00000000000058d4 : + +void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) +{ + 58d4: 715d addi sp,sp,-80 + 58d6: e486 sd ra,72(sp) + 58d8: fc26 sd s1,56(sp) + size_t l = 0, u = nmemb; + while (l < u) + 58da: c629 beqz a2,5924 + 58dc: f84a sd s2,48(sp) + 58de: f44e sd s3,40(sp) + 58e0: f052 sd s4,32(sp) + 58e2: ec56 sd s5,24(sp) + 58e4: e85a sd s6,16(sp) + 58e6: e45e sd s7,8(sp) + 58e8: e0a2 sd s0,64(sp) + 58ea: 8932 mv s2,a2 + 58ec: 8a2a mv s4,a0 + 58ee: 8aae mv s5,a1 + 58f0: 8b36 mv s6,a3 + 58f2: 8bba mv s7,a4 + size_t l = 0, u = nmemb; + 58f4: 4981 li s3,0 + { + size_t idx = (l + u) / 2; + 58f6: 01298433 add s0,s3,s2 + 58fa: 8005 srli s0,s0,0x1 + const void *p = (void *)((const char *)base + (idx * size)); + 58fc: 036404b3 mul s1,s0,s6 + int cmp = compar(key, p); + 5900: 8552 mv a0,s4 + const void *p = (void *)((const char *)base + (idx * size)); + 5902: 94d6 add s1,s1,s5 + int cmp = compar(key, p); + 5904: 85a6 mv a1,s1 + 5906: 9b82 jalr s7 + if (cmp < 0) + 5908: 02054463 bltz a0,5930 + u = idx; + else if (cmp > 0) + 590c: c515 beqz a0,5938 + l = idx + 1; + 590e: 00140993 addi s3,s0,1 + while (l < u) + 5912: ff29e2e3 bltu s3,s2,58f6 + 5916: 6406 ld s0,64(sp) + 5918: 7942 ld s2,48(sp) + 591a: 79a2 ld s3,40(sp) + 591c: 7a02 ld s4,32(sp) + 591e: 6ae2 ld s5,24(sp) + 5920: 6b42 ld s6,16(sp) + 5922: 6ba2 ld s7,8(sp) + else + return (void *)p; + } + return NULL; +} + 5924: 60a6 ld ra,72(sp) + return NULL; + 5926: 4481 li s1,0 +} + 5928: 8526 mv a0,s1 + 592a: 74e2 ld s1,56(sp) + 592c: 6161 addi sp,sp,80 + 592e: 8082 ret + u = idx; + 5930: 8922 mv s2,s0 + while (l < u) + 5932: fd29e2e3 bltu s3,s2,58f6 + 5936: b7c5 j 5916 + 5938: 6406 ld s0,64(sp) +} + 593a: 60a6 ld ra,72(sp) + 593c: 7942 ld s2,48(sp) + 593e: 79a2 ld s3,40(sp) + 5940: 7a02 ld s4,32(sp) + 5942: 6ae2 ld s5,24(sp) + 5944: 6b42 ld s6,16(sp) + 5946: 6ba2 ld s7,8(sp) + 5948: 8526 mv a0,s1 + 594a: 74e2 ld s1,56(sp) + 594c: 6161 addi sp,sp,80 + 594e: 8082 ret + +0000000000005950 : + +/* Math & Mics */ + +int abs(int j) { return (j < 0) ? -j : j; } + 5950: 41f5579b sraiw a5,a0,0x1f + 5954: 8d3d xor a0,a0,a5 + 5956: 9d1d subw a0,a0,a5 + 5958: 8082 ret + +000000000000595a : +long labs(long j) { return (j < 0) ? -j : j; } + 595a: 43f55793 srai a5,a0,0x3f + 595e: 8d3d xor a0,a0,a5 + 5960: 8d1d sub a0,a0,a5 + 5962: 8082 ret + +0000000000005964 : +long long llabs(long long j) { return (j < 0) ? -j : j; } + 5964: 43f55793 srai a5,a0,0x3f + 5968: 8d3d xor a0,a0,a5 + 596a: 8d1d sub a0,a0,a5 + 596c: 8082 ret + +000000000000596e
: + +div_t div(int numer, int denom) +{ + div_t res = {numer / denom, numer % denom}; + 596e: 02b547bb divw a5,a0,a1 +{ + 5972: 1141 addi sp,sp,-16 + return res; +} + 5974: 0141 addi sp,sp,16 + div_t res = {numer / denom, numer % denom}; + 5976: 02b5653b remw a0,a0,a1 + return res; + 597a: 1782 slli a5,a5,0x20 + 597c: 9381 srli a5,a5,0x20 + 597e: 1502 slli a0,a0,0x20 +} + 5980: 8d5d or a0,a0,a5 + 5982: 8082 ret + +0000000000005984 : +ldiv_t ldiv(long numer, long denom) +{ + 5984: 1141 addi sp,sp,-16 + 5986: 87aa mv a5,a0 + ldiv_t res = {numer / denom, numer % denom}; + return res; +} + 5988: 02b54533 div a0,a0,a1 + 598c: 0141 addi sp,sp,16 + 598e: 02b7e5b3 rem a1,a5,a1 + 5992: 8082 ret + +0000000000005994 : +lldiv_t lldiv(long long numer, long long denom) +{ + 5994: 1141 addi sp,sp,-16 + 5996: 87aa mv a5,a0 + lldiv_t res = {numer / denom, numer % denom}; + return res; +} + 5998: 02b54533 div a0,a0,a1 + 599c: 0141 addi sp,sp,16 + 599e: 02b7e5b3 rem a1,a5,a1 + 59a2: 8082 ret + +00000000000059a4 : + +static unsigned long next = 1; +int rand(void) +{ + next = next * 1103515245 + 12345; + 59a4: 00003697 auipc a3,0x3 + 59a8: 23c68693 addi a3,a3,572 # 8be0 + 59ac: 629c ld a5,0(a3) + 59ae: 41c65737 lui a4,0x41c65 + 59b2: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5c0ad> + 59b6: 02e787b3 mul a5,a5,a4 + 59ba: 670d lui a4,0x3 + 59bc: 03970713 addi a4,a4,57 # 3039 + 59c0: 97ba add a5,a5,a4 + return (unsigned int)(next / 65536) % 32768; + 59c2: 02179513 slli a0,a5,0x21 + next = next * 1103515245 + 12345; + 59c6: e29c sd a5,0(a3) +} + 59c8: 9145 srli a0,a0,0x31 + 59ca: 8082 ret + +00000000000059cc : +void srand(unsigned int seed) { next = seed; } + 59cc: 1502 slli a0,a0,0x20 + 59ce: 9101 srli a0,a0,0x20 + 59d0: 00003797 auipc a5,0x3 + 59d4: 20a7b823 sd a0,528(a5) # 8be0 + 59d8: 8082 ret + +00000000000059da : + +/* Stub */ +int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } + 59da: c901 beqz a0,59ea + 59dc: 00054783 lbu a5,0(a0) + 59e0: 4501 li a0,0 + 59e2: c789 beqz a5,59ec + 59e4: 00b03533 snez a0,a1 + 59e8: 8082 ret + 59ea: 4501 li a0,0 + 59ec: 8082 ret + +00000000000059ee : +int mbtowc(wchar_t *pwc, const char *s, size_t n) +{ + 59ee: 87aa mv a5,a0 + if (!s) + 59f0: cd81 beqz a1,5a08 + return 0; + if (n == 0) + return -1; + 59f2: 557d li a0,-1 + if (n == 0) + 59f4: ca19 beqz a2,5a0a + if (pwc) + 59f6: c781 beqz a5,59fe + *pwc = (wchar_t)*s; + 59f8: 0005c703 lbu a4,0(a1) + 59fc: c398 sw a4,0(a5) + return (*s != 0); + 59fe: 0005c503 lbu a0,0(a1) + 5a02: 00a03533 snez a0,a0 + 5a06: 8082 ret + return 0; + 5a08: 4501 li a0,0 +} + 5a0a: 8082 ret + +0000000000005a0c : +int wctomb(char *s, wchar_t wchar) +{ + if (!s) + 5a0c: c509 beqz a0,5a16 + return 0; + *s = (char)wchar; + 5a0e: 00b50023 sb a1,0(a0) + return 1; + 5a12: 4505 li a0,1 + 5a14: 8082 ret + return 0; + 5a16: 4501 li a0,0 +} + 5a18: 8082 ret + +0000000000005a1a : +size_t mbstowcs(wchar_t *dest, const char *src, size_t n) +{ + size_t i = 0; + while (src[i] && i < n) + 5a1a: 0005c703 lbu a4,0(a1) + 5a1e: cb0d beqz a4,5a50 + 5a20: ca15 beqz a2,5a54 + 5a22: 86aa mv a3,a0 + size_t i = 0; + 5a24: 4781 li a5,0 + 5a26: a019 j 5a2c + while (src[i] && i < n) + 5a28: 02f60263 beq a2,a5,5a4c + { + dest[i] = (wchar_t)src[i]; + i++; + 5a2c: 0785 addi a5,a5,1 + dest[i] = (wchar_t)src[i]; + 5a2e: c298 sw a4,0(a3) + while (src[i] && i < n) + 5a30: 00f58733 add a4,a1,a5 + 5a34: 00074703 lbu a4,0(a4) + 5a38: 0691 addi a3,a3,4 + 5a3a: f77d bnez a4,5a28 + } + if (i < n) + 5a3c: 00c7f763 bgeu a5,a2,5a4a + dest[i] = 0; + 5a40: 00279713 slli a4,a5,0x2 + 5a44: 953a add a0,a0,a4 + 5a46: 00052023 sw zero,0(a0) + size_t i = 0; + 5a4a: 863e mv a2,a5 + 5a4c: 8532 mv a0,a2 + 5a4e: 8082 ret + 5a50: 4781 li a5,0 + 5a52: b7ed j 5a3c + 5a54: 4501 li a0,0 + return i; +} + 5a56: 8082 ret + +0000000000005a58 : +size_t wcstombs(char *dest, const wchar_t *src, size_t n) +{ + size_t i = 0; + while (src[i] && i < n) + 5a58: 4198 lw a4,0(a1) + 5a5a: c71d beqz a4,5a88 + 5a5c: ca05 beqz a2,5a8c + 5a5e: 0591 addi a1,a1,4 + size_t i = 0; + 5a60: 4781 li a5,0 + 5a62: a019 j 5a68 + while (src[i] && i < n) + 5a64: 02f60063 beq a2,a5,5a84 + { + dest[i] = (char)src[i]; + 5a68: 00f506b3 add a3,a0,a5 + 5a6c: 00e68023 sb a4,0(a3) + while (src[i] && i < n) + 5a70: 4198 lw a4,0(a1) + i++; + 5a72: 0785 addi a5,a5,1 + while (src[i] && i < n) + 5a74: 0591 addi a1,a1,4 + 5a76: f77d bnez a4,5a64 + } + if (i < n) + 5a78: 00c7f563 bgeu a5,a2,5a82 + dest[i] = 0; + 5a7c: 953e add a0,a0,a5 + 5a7e: 00050023 sb zero,0(a0) + size_t i = 0; + 5a82: 863e mv a2,a5 + 5a84: 8532 mv a0,a2 + 5a86: 8082 ret + 5a88: 4781 li a5,0 + 5a8a: b7fd j 5a78 + 5a8c: 4501 li a0,0 + return i; + 5a8e: 8082 ret + +0000000000005a90 : + +void *memset(void *dst, int c, size_t n) +{ + char *cdst = (char *)dst; + for (size_t i = 0; i < n; i++) + cdst[i] = (char)c; + 5a90: 0ff5f593 zext.b a1,a1 + 5a94: 87aa mv a5,a0 + 5a96: 00a60733 add a4,a2,a0 + for (size_t i = 0; i < n; i++) + 5a9a: c611 beqz a2,5aa6 + cdst[i] = (char)c; + 5a9c: 00b78023 sb a1,0(a5) + for (size_t i = 0; i < n; i++) + 5aa0: 0785 addi a5,a5,1 + 5aa2: fee79de3 bne a5,a4,5a9c + return dst; +} + 5aa6: 8082 ret + +0000000000005aa8 : + +void *memmove(void *vdst, const void *vsrc, size_t n) +{ + char *dst = (char *)vdst; + const char *src = (const char *)vsrc; + if (dst == src) + 5aa8: 02b50d63 beq a0,a1,5ae2 + return vdst; + + if (src > dst) + 5aac: 00b57e63 bgeu a0,a1,5ac8 + { + while (n--) + 5ab0: ca0d beqz a2,5ae2 + 5ab2: 962a add a2,a2,a0 + char *dst = (char *)vdst; + 5ab4: 87aa mv a5,a0 + *dst++ = *src++; + 5ab6: 0005c703 lbu a4,0(a1) + 5aba: 0785 addi a5,a5,1 + 5abc: 0585 addi a1,a1,1 + 5abe: fee78fa3 sb a4,-1(a5) + while (n--) + 5ac2: fec79ae3 bne a5,a2,5ab6 + 5ac6: 8082 ret + } + else + { + dst += n; + 5ac8: 00c50733 add a4,a0,a2 + src += n; + 5acc: 00c587b3 add a5,a1,a2 + while (n-- > 0) + 5ad0: ca09 beqz a2,5ae2 + *--dst = *--src; + 5ad2: fff7c683 lbu a3,-1(a5) + 5ad6: 17fd addi a5,a5,-1 + 5ad8: 177d addi a4,a4,-1 + 5ada: 00d70023 sb a3,0(a4) + while (n-- > 0) + 5ade: fef59ae3 bne a1,a5,5ad2 + } + return vdst; +} + 5ae2: 8082 ret + +0000000000005ae4 : + +void *memcpy(void *vdst, const void *vsrc, size_t n) +{ + return memmove(vdst, vsrc, n); + 5ae4: b7d1 j 5aa8 + +0000000000005ae6 : + +int memcmp(const void *s1, const void *s2, size_t n) +{ + const unsigned char *p1 = (const unsigned char *)s1; + const unsigned char *p2 = (const unsigned char *)s2; + while (n--) + 5ae6: c205 beqz a2,5b06 + 5ae8: 962a add a2,a2,a0 + 5aea: a019 j 5af0 + 5aec: 00c50d63 beq a0,a2,5b06 + { + if (*p1 != *p2) + 5af0: 00054783 lbu a5,0(a0) + 5af4: 0005c703 lbu a4,0(a1) + return *p1 - *p2; + p1++; + 5af8: 0505 addi a0,a0,1 + p2++; + 5afa: 0585 addi a1,a1,1 + if (*p1 != *p2) + 5afc: fee788e3 beq a5,a4,5aec + return *p1 - *p2; + 5b00: 40e7853b subw a0,a5,a4 + 5b04: 8082 ret + } + return 0; + 5b06: 4501 li a0,0 +} + 5b08: 8082 ret + +0000000000005b0a : + +void *memchr(const void *s, int c, size_t n) +{ + const unsigned char *p = (const unsigned char *)s; + while (n--) + 5b0a: ce09 beqz a2,5b24 + { + if (*p == (unsigned char)c) + 5b0c: 0ff5f593 zext.b a1,a1 + 5b10: 962a add a2,a2,a0 + 5b12: a021 j 5b1a + return (void *)p; + p++; + 5b14: 0505 addi a0,a0,1 + while (n--) + 5b16: 00a60763 beq a2,a0,5b24 + if (*p == (unsigned char)c) + 5b1a: 00054783 lbu a5,0(a0) + 5b1e: feb79be3 bne a5,a1,5b14 + } + return NULL; +} + 5b22: 8082 ret + return NULL; + 5b24: 4501 li a0,0 +} + 5b26: 8082 ret + +0000000000005b28 : +/* String Manipulation Functions */ + +size_t strlen(const char *s) +{ + const char *p = s; + while (*p) + 5b28: 00054783 lbu a5,0(a0) + 5b2c: cb89 beqz a5,5b3e + const char *p = s; + 5b2e: 87aa mv a5,a0 + while (*p) + 5b30: 0017c703 lbu a4,1(a5) + p++; + 5b34: 0785 addi a5,a5,1 + while (*p) + 5b36: ff6d bnez a4,5b30 + return (size_t)(p - s); + 5b38: 40a78533 sub a0,a5,a0 + 5b3c: 8082 ret + while (*p) + 5b3e: 4501 li a0,0 +} + 5b40: 8082 ret + +0000000000005b42 : + +char *strcpy(char *dst, const char *src) +{ + char *os = dst; + while ((*dst++ = *src++) != 0) + 5b42: 87aa mv a5,a0 + 5b44: 0005c703 lbu a4,0(a1) + 5b48: 0785 addi a5,a5,1 + 5b4a: 0585 addi a1,a1,1 + 5b4c: fee78fa3 sb a4,-1(a5) + 5b50: fb75 bnez a4,5b44 + ; + return os; +} + 5b52: 8082 ret + +0000000000005b54 : +char *strncpy(char *dst, const char *src, size_t n) +{ + char *os = dst; + size_t i; + + for (i = 0; i < n && src[i] != '\0'; i++) + 5b54: 4781 li a5,0 + 5b56: e619 bnez a2,5b64 + 5b58: 8082 ret + dst[i] = src[i]; + 5b5a: 00e68023 sb a4,0(a3) + for (i = 0; i < n && src[i] != '\0'; i++) + 5b5e: 0785 addi a5,a5,1 + 5b60: 02f60263 beq a2,a5,5b84 + 5b64: 00f58733 add a4,a1,a5 + 5b68: 00074703 lbu a4,0(a4) + dst[i] = src[i]; + 5b6c: 00f506b3 add a3,a0,a5 + for (i = 0; i < n && src[i] != '\0'; i++) + 5b70: f76d bnez a4,5b5a + + for (; i < n; i++) + 5b72: 00c7f963 bgeu a5,a2,5b84 + 5b76: 87b6 mv a5,a3 + 5b78: 962a add a2,a2,a0 + dst[i] = '\0'; + 5b7a: 00078023 sb zero,0(a5) + for (; i < n; i++) + 5b7e: 0785 addi a5,a5,1 + 5b80: fec79de3 bne a5,a2,5b7a + + return os; +} + 5b84: 8082 ret + +0000000000005b86 : + +char *strcat(char *dst, const char *src) +{ + char *os = dst; + while (*dst) + 5b86: 00054783 lbu a5,0(a0) + 5b8a: cf91 beqz a5,5ba6 + 5b8c: 87aa mv a5,a0 + 5b8e: 0017c703 lbu a4,1(a5) + dst++; + 5b92: 0785 addi a5,a5,1 + while (*dst) + 5b94: ff6d bnez a4,5b8e + while ((*dst++ = *src++) != 0) + 5b96: 0005c703 lbu a4,0(a1) + 5b9a: 0785 addi a5,a5,1 + 5b9c: 0585 addi a1,a1,1 + 5b9e: fee78fa3 sb a4,-1(a5) + 5ba2: fb75 bnez a4,5b96 + ; + return os; +} + 5ba4: 8082 ret + while ((*dst++ = *src++) != 0) + 5ba6: 0005c703 lbu a4,0(a1) + while (*dst) + 5baa: 87aa mv a5,a0 + while ((*dst++ = *src++) != 0) + 5bac: 0785 addi a5,a5,1 + 5bae: fee78fa3 sb a4,-1(a5) + 5bb2: 0585 addi a1,a1,1 + 5bb4: f36d bnez a4,5b96 + 5bb6: 8082 ret + +0000000000005bb8 : + while (*p) + 5bb8: 00054783 lbu a5,0(a0) + const char *p = s; + 5bbc: 872a mv a4,a0 + while (*p) + 5bbe: c789 beqz a5,5bc8 + 5bc0: 00174783 lbu a5,1(a4) + p++; + 5bc4: 0705 addi a4,a4,1 + while (*p) + 5bc6: ffed bnez a5,5bc0 + size_t dest_len = strlen(dst); + size_t i; + + dst += dest_len; + + for (i = 0; i < n && src[i] != '\0'; i++) + 5bc8: 86ba mv a3,a4 + 5bca: 4781 li a5,0 + 5bcc: 88ba mv a7,a4 + 5bce: ea01 bnez a2,5bde + 5bd0: a839 j 5bee + dst[i] = src[i]; + 5bd2: 01068023 sb a6,0(a3) + for (i = 0; i < n && src[i] != '\0'; i++) + 5bd6: 00188693 addi a3,a7,1 + 5bda: 00f60d63 beq a2,a5,5bf4 + 5bde: 00f58833 add a6,a1,a5 + 5be2: 00084803 lbu a6,0(a6) + 5be6: 0785 addi a5,a5,1 + dst[i] = src[i]; + 5be8: 88b6 mv a7,a3 + for (i = 0; i < n && src[i] != '\0'; i++) + 5bea: fe0814e3 bnez a6,5bd2 + + dst[i] = '\0'; + 5bee: 00088023 sb zero,0(a7) + + return os; +} + 5bf2: 8082 ret + dst[i] = '\0'; + 5bf4: 00c708b3 add a7,a4,a2 + 5bf8: 00088023 sb zero,0(a7) +} + 5bfc: 8082 ret + +0000000000005bfe : + +int strcmp(const char *p, const char *q) +{ + while (*p && *p == *q) + 5bfe: 00054783 lbu a5,0(a0) + 5c02: e791 bnez a5,5c0e + 5c04: a02d j 5c2e + 5c06: 00054783 lbu a5,0(a0) + 5c0a: cf89 beqz a5,5c24 + 5c0c: 85b6 mv a1,a3 + 5c0e: 0005c703 lbu a4,0(a1) + { + p++; + 5c12: 0505 addi a0,a0,1 + q++; + 5c14: 00158693 addi a3,a1,1 + while (*p && *p == *q) + 5c18: fef707e3 beq a4,a5,5c06 + } + return (int)((unsigned char)*p - (unsigned char)*q); + 5c1c: 0007851b sext.w a0,a5 +} + 5c20: 9d19 subw a0,a0,a4 + 5c22: 8082 ret + return (int)((unsigned char)*p - (unsigned char)*q); + 5c24: 0015c703 lbu a4,1(a1) + 5c28: 4501 li a0,0 +} + 5c2a: 9d19 subw a0,a0,a4 + 5c2c: 8082 ret + return (int)((unsigned char)*p - (unsigned char)*q); + 5c2e: 0005c703 lbu a4,0(a1) + 5c32: 4501 li a0,0 + 5c34: b7f5 j 5c20 + +0000000000005c36 : + +int strncmp(const char *s1, const char *s2, size_t n) +{ + if (n == 0) + 5c36: ca0d beqz a2,5c68 + return 0; + + while (n-- > 0 && *s1 && *s1 == *s2) + 5c38: 00054783 lbu a5,0(a0) + 5c3c: 167d addi a2,a2,-1 + 5c3e: 00c506b3 add a3,a0,a2 + 5c42: eb89 bnez a5,5c54 + 5c44: a80d j 5c76 + { + if (n == 0 || *s1 == '\0') + 5c46: 00d50d63 beq a0,a3,5c60 + while (n-- > 0 && *s1 && *s1 == *s2) + 5c4a: 00154783 lbu a5,1(a0) + break; + s1++; + 5c4e: 0505 addi a0,a0,1 + while (n-- > 0 && *s1 && *s1 == *s2) + 5c50: cf91 beqz a5,5c6c + 5c52: 85b2 mv a1,a2 + 5c54: 0005c703 lbu a4,0(a1) + s2++; + 5c58: 00158613 addi a2,a1,1 + while (n-- > 0 && *s1 && *s1 == *s2) + 5c5c: fef705e3 beq a4,a5,5c46 + } + return (int)((unsigned char)*s1 - (unsigned char)*s2); + 5c60: 0007851b sext.w a0,a5 + 5c64: 9d19 subw a0,a0,a4 + 5c66: 8082 ret + return 0; + 5c68: 4501 li a0,0 +} + 5c6a: 8082 ret + return (int)((unsigned char)*s1 - (unsigned char)*s2); + 5c6c: 0015c703 lbu a4,1(a1) + 5c70: 4501 li a0,0 + 5c72: 9d19 subw a0,a0,a4 + 5c74: 8082 ret + 5c76: 0005c703 lbu a4,0(a1) + 5c7a: 4501 li a0,0 + 5c7c: b7e5 j 5c64 + +0000000000005c7e : + +char *strchr(const char *s, int c) +{ + while (*s != (char)c) + 5c7e: 0ff5f593 zext.b a1,a1 + 5c82: a019 j 5c88 + { + if (!*s++) + 5c84: 0505 addi a0,a0,1 + 5c86: c791 beqz a5,5c92 + while (*s != (char)c) + 5c88: 00054783 lbu a5,0(a0) + 5c8c: feb79ce3 bne a5,a1,5c84 + 5c90: 8082 ret + return NULL; + 5c92: 4501 li a0,0 + } + return (char *)s; +} + 5c94: 8082 ret + +0000000000005c96 : + +char *strrchr(const char *s, int c) +{ + 5c96: 87aa mv a5,a0 + const char *last = NULL; + do + { + if (*s == (char)c) + 5c98: 0ff5f593 zext.b a1,a1 + const char *last = NULL; + 5c9c: 4501 li a0,0 + if (*s == (char)c) + 5c9e: 0007c703 lbu a4,0(a5) + 5ca2: 00e59363 bne a1,a4,5ca8 + last = s; + 5ca6: 853e mv a0,a5 + } while (*s++); + 5ca8: 0785 addi a5,a5,1 + 5caa: fb75 bnez a4,5c9e + + return (char *)last; +} + 5cac: 8082 ret + +0000000000005cae : + while (*p) + 5cae: 0005c883 lbu a7,0(a1) + 5cb2: 04088a63 beqz a7,5d06 + const char *p = s; + 5cb6: 87ae mv a5,a1 + while (*p) + 5cb8: 0017c703 lbu a4,1(a5) + p++; + 5cbc: 0785 addi a5,a5,1 + while (*p) + 5cbe: ff6d bnez a4,5cb8 + return (size_t)(p - s); + 5cc0: 40b78833 sub a6,a5,a1 + + +char *strstr(const char *haystack, const char *needle) +{ + size_t n_len = strlen(needle); + if (n_len == 0) + 5cc4: 04b78163 beq a5,a1,5d06 + return (char *)haystack; + + for (; *haystack; haystack++) + 5cc8: 00054783 lbu a5,0(a0) + 5ccc: cf85 beqz a5,5d04 + 5cce: 187d addi a6,a6,-1 + 5cd0: 982a add a6,a6,a0 + { + if (*haystack != *needle) + 5cd2: 02f89463 bne a7,a5,5cfa + while (n-- > 0 && *s1 && *s1 == *s2) + 5cd6: 00054703 lbu a4,0(a0) + 5cda: 8646 mv a2,a7 + 5cdc: 86ae mv a3,a1 + 5cde: 87aa mv a5,a0 + 5ce0: eb11 bnez a4,5cf4 + 5ce2: a821 j 5cfa + if (n == 0 || *s1 == '\0') + 5ce4: 03078163 beq a5,a6,5d06 + while (n-- > 0 && *s1 && *s1 == *s2) + 5ce8: 0017c703 lbu a4,1(a5) + return (int)((unsigned char)*s1 - (unsigned char)*s2); + 5cec: 0006c603 lbu a2,0(a3) + s1++; + 5cf0: 0785 addi a5,a5,1 + while (n-- > 0 && *s1 && *s1 == *s2) + 5cf2: cb19 beqz a4,5d08 + s2++; + 5cf4: 0685 addi a3,a3,1 + while (n-- > 0 && *s1 && *s1 == *s2) + 5cf6: fee607e3 beq a2,a4,5ce4 + for (; *haystack; haystack++) + 5cfa: 00154783 lbu a5,1(a0) + 5cfe: 0805 addi a6,a6,1 + 5d00: 0505 addi a0,a0,1 + 5d02: fbe1 bnez a5,5cd2 + continue; + + if (strncmp(haystack, needle, n_len) == 0) + return (char *)haystack; + } + return NULL; + 5d04: 4501 li a0,0 +} + 5d06: 8082 ret + if (strncmp(haystack, needle, n_len) == 0) + 5d08: de7d beqz a2,5d06 + for (; *haystack; haystack++) + 5d0a: 00154783 lbu a5,1(a0) + 5d0e: 0805 addi a6,a6,1 + 5d10: 0505 addi a0,a0,1 + 5d12: f3e1 bnez a5,5cd2 + 5d14: bfc5 j 5d04 + +0000000000005d16 : + +char *strdup(const char *s) +{ + 5d16: 1101 addi sp,sp,-32 + 5d18: e426 sd s1,8(sp) + 5d1a: ec06 sd ra,24(sp) + 5d1c: e822 sd s0,16(sp) + while (*p) + 5d1e: 00054783 lbu a5,0(a0) +{ + 5d22: 84aa mv s1,a0 + while (*p) + 5d24: cb8d beqz a5,5d56 + const char *p = s; + 5d26: 862a mv a2,a0 + while (*p) + 5d28: 00164783 lbu a5,1(a2) + p++; + 5d2c: 0605 addi a2,a2,1 + while (*p) + 5d2e: ffed bnez a5,5d28 + return (size_t)(p - s); + 5d30: 8e05 sub a2,a2,s1 + size_t len = strlen(s) + 1; + 5d32: 00160413 addi s0,a2,1 + char *new_str = (char *)malloc(len); + 5d36: 8522 mv a0,s0 + 5d38: f66ff0ef jal 549e + if (new_str == NULL) + 5d3c: c901 beqz a0,5d4c + return memmove(vdst, vsrc, n); + 5d3e: 8622 mv a2,s0 + return NULL; + + return (char *)memcpy(new_str, s, len); +} + 5d40: 6442 ld s0,16(sp) + 5d42: 60e2 ld ra,24(sp) + return memmove(vdst, vsrc, n); + 5d44: 85a6 mv a1,s1 +} + 5d46: 64a2 ld s1,8(sp) + 5d48: 6105 addi sp,sp,32 + return memmove(vdst, vsrc, n); + 5d4a: bbb9 j 5aa8 +} + 5d4c: 60e2 ld ra,24(sp) + 5d4e: 6442 ld s0,16(sp) + 5d50: 64a2 ld s1,8(sp) + 5d52: 6105 addi sp,sp,32 + 5d54: 8082 ret + while (*p) + 5d56: 4405 li s0,1 + 5d58: bff9 j 5d36 + +0000000000005d5a : + 5d5a: 0005c783 lbu a5,0(a1) + +size_t strlcpy(char *dst, const char *src, size_t size) +{ + 5d5e: 1101 addi sp,sp,-32 + 5d60: ec06 sd ra,24(sp) + 5d62: e822 sd s0,16(sp) + 5d64: 86b2 mv a3,a2 + while (*p) + 5d66: cf8d beqz a5,5da0 + const char *p = s; + 5d68: 87ae mv a5,a1 + while (*p) + 5d6a: 0017c703 lbu a4,1(a5) + p++; + 5d6e: 0785 addi a5,a5,1 + while (*p) + 5d70: ff6d bnez a4,5d6a + return (size_t)(p - s); + 5d72: 40b78433 sub s0,a5,a1 + size_t src_len = strlen(src); + + if (size > 0) + 5d76: c285 beqz a3,5d96 + 5d78: e426 sd s1,8(sp) + { + size_t copy_len = (src_len >= size) ? size - 1 : src_len; + 5d7a: fff68613 addi a2,a3,-1 + memcpy(dst, src, copy_len); + dst[copy_len] = '\0'; + 5d7e: 00c504b3 add s1,a0,a2 + size_t copy_len = (src_len >= size) ? size - 1 : src_len; + 5d82: 00d47563 bgeu s0,a3,5d8c + dst[copy_len] = '\0'; + 5d86: 008504b3 add s1,a0,s0 + size_t copy_len = (src_len >= size) ? size - 1 : src_len; + 5d8a: 8622 mv a2,s0 + return memmove(vdst, vsrc, n); + 5d8c: d1dff0ef jal 5aa8 + dst[copy_len] = '\0'; + 5d90: 00048023 sb zero,0(s1) + } + + return src_len; + 5d94: 64a2 ld s1,8(sp) +} + 5d96: 60e2 ld ra,24(sp) + 5d98: 8522 mv a0,s0 + 5d9a: 6442 ld s0,16(sp) + 5d9c: 6105 addi sp,sp,32 + 5d9e: 8082 ret + if (size > 0) + 5da0: e219 bnez a2,5da6 + return (size_t)(p - s); + 5da2: 4401 li s0,0 + 5da4: bfcd j 5d96 + 5da6: e426 sd s1,8(sp) + 5da8: 4401 li s0,0 + if (size > 0) + 5daa: 84aa mv s1,a0 + size_t copy_len = (src_len >= size) ? size - 1 : src_len; + 5dac: 4601 li a2,0 + 5dae: bff9 j 5d8c + +0000000000005db0 : + while (*p) + 5db0: 0005c783 lbu a5,0(a1) + +size_t strlcat(char *dst, const char *src, size_t size) +{ + 5db4: 7179 addi sp,sp,-48 + 5db6: e84a sd s2,16(sp) + 5db8: f406 sd ra,40(sp) + 5dba: f022 sd s0,32(sp) + 5dbc: ec26 sd s1,24(sp) + 5dbe: 892a mv s2,a0 + while (*p) + 5dc0: c7b5 beqz a5,5e2c + const char *p = s; + 5dc2: 87ae mv a5,a1 + while (*p) + 5dc4: 0017c703 lbu a4,1(a5) + p++; + 5dc8: 0785 addi a5,a5,1 + while (*p) + 5dca: ff6d bnez a4,5dc4 + return (size_t)(p - s); + 5dcc: 40b784b3 sub s1,a5,a1 + size_t dst_len = 0; + 5dd0: 4401 li s0,0 + size_t src_len = strlen(src); + + while (dst_len < size && dst[dst_len] != '\0') + 5dd2: e609 bnez a2,5ddc + 5dd4: a0a1 j 5e1c + dst_len++; + 5dd6: 0405 addi s0,s0,1 + while (dst_len < size && dst[dst_len] != '\0') + 5dd8: 04860263 beq a2,s0,5e1c + 5ddc: 00890533 add a0,s2,s0 + 5de0: 00054783 lbu a5,0(a0) + 5de4: fbed bnez a5,5dd6 + + if (dst_len == size) + 5de6: 02860b63 beq a2,s0,5e1c + 5dea: e44e sd s3,8(sp) + return size + src_len; + + size_t space_left = size - dst_len; + 5dec: 408607b3 sub a5,a2,s0 + size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; + 5df0: 89a6 mv s3,s1 + 5df2: 02f4f263 bgeu s1,a5,5e16 + + memcpy(dst + dst_len, src, copy_len); + dst[dst_len + copy_len] = '\0'; + 5df6: 994e add s2,s2,s3 + 5df8: 9922 add s2,s2,s0 + return memmove(vdst, vsrc, n); + 5dfa: 864e mv a2,s3 + 5dfc: cadff0ef jal 5aa8 + dst[dst_len + copy_len] = '\0'; + 5e00: 00090023 sb zero,0(s2) + + return dst_len + src_len; + 5e04: 00940533 add a0,s0,s1 +} + 5e08: 70a2 ld ra,40(sp) + 5e0a: 7402 ld s0,32(sp) + return dst_len + src_len; + 5e0c: 69a2 ld s3,8(sp) +} + 5e0e: 64e2 ld s1,24(sp) + 5e10: 6942 ld s2,16(sp) + 5e12: 6145 addi sp,sp,48 + 5e14: 8082 ret + size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; + 5e16: fff78993 addi s3,a5,-1 + 5e1a: bff1 j 5df6 +} + 5e1c: 70a2 ld ra,40(sp) + 5e1e: 7402 ld s0,32(sp) + 5e20: 6942 ld s2,16(sp) + return size + src_len; + 5e22: 00960533 add a0,a2,s1 +} + 5e26: 64e2 ld s1,24(sp) + 5e28: 6145 addi sp,sp,48 + 5e2a: 8082 ret + while (*p) + 5e2c: 4481 li s1,0 + 5e2e: b74d j 5dd0 + +0000000000005e30 : +size_t strspn(const char *s, const char *accept) +{ + const char *p = s; + const char *a; + + while (*p) + 5e30: 00054683 lbu a3,0(a0) + 5e34: c695 beqz a3,5e60 + { + for (a = accept; *a; a++) + 5e36: 0005c803 lbu a6,0(a1) + 5e3a: 862a mv a2,a0 + 5e3c: 00080f63 beqz a6,5e5a + 5e40: 87ae mv a5,a1 + 5e42: 8742 mv a4,a6 + 5e44: a021 j 5e4c + 5e46: 0007c703 lbu a4,0(a5) + 5e4a: cb01 beqz a4,5e5a + 5e4c: 0785 addi a5,a5,1 + { + if (*p == *a) + 5e4e: fee69ce3 bne a3,a4,5e46 + while (*p) + 5e52: 00164683 lbu a3,1(a2) + break; + } + if (*a == '\0') + return (size_t)(p - s); + p++; + 5e56: 0605 addi a2,a2,1 + while (*p) + 5e58: f6e5 bnez a3,5e40 + } + return (size_t)(p - s); + 5e5a: 40a60533 sub a0,a2,a0 + 5e5e: 8082 ret + while (*p) + 5e60: 4501 li a0,0 +} + 5e62: 8082 ret + +0000000000005e64 : +size_t strcspn(const char *s, const char *reject) +{ + const char *p = s; + const char *r; + + while (*p) + 5e64: 00054683 lbu a3,0(a0) + 5e68: ce85 beqz a3,5ea0 + { + for (r = reject; *r; r++) + 5e6a: 0005c803 lbu a6,0(a1) + const char *p = s; + 5e6e: 862a mv a2,a0 + for (r = reject; *r; r++) + 5e70: 02080363 beqz a6,5e96 + 5e74: 87ae mv a5,a1 + 5e76: 8742 mv a4,a6 + 5e78: a021 j 5e80 + 5e7a: 0007c703 lbu a4,0(a5) + 5e7e: c719 beqz a4,5e8c + 5e80: 0785 addi a5,a5,1 + { + if (*p == *r) + 5e82: fed71ce3 bne a4,a3,5e7a + return (size_t)(p - s); + } + p++; + } + return (size_t)(p - s); + 5e86: 40a60533 sub a0,a2,a0 + 5e8a: 8082 ret + while (*p) + 5e8c: 00164683 lbu a3,1(a2) + p++; + 5e90: 0605 addi a2,a2,1 + while (*p) + 5e92: f2ed bnez a3,5e74 + 5e94: bfcd j 5e86 + 5e96: 00164683 lbu a3,1(a2) + p++; + 5e9a: 0605 addi a2,a2,1 + while (*p) + 5e9c: feed bnez a3,5e96 + 5e9e: b7e5 j 5e86 + 5ea0: 4501 li a0,0 +} + 5ea2: 8082 ret + +0000000000005ea4 : + +char *strpbrk(const char *s, const char *accept) +{ + const char *a; + while (*s) + 5ea4: 00054683 lbu a3,0(a0) + 5ea8: c295 beqz a3,5ecc + { + for (a = accept; *a; a++) + 5eaa: 0005c603 lbu a2,0(a1) + 5eae: c20d beqz a2,5ed0 + 5eb0: 87ae mv a5,a1 + 5eb2: 8732 mv a4,a2 + 5eb4: a021 j 5ebc + 5eb6: 0007c703 lbu a4,0(a5) + 5eba: c709 beqz a4,5ec4 + 5ebc: 0785 addi a5,a5,1 + { + if (*s == *a) + 5ebe: fed71ce3 bne a4,a3,5eb6 + return (char *)s; + } + s++; + } + return NULL; +} + 5ec2: 8082 ret + while (*s) + 5ec4: 00154683 lbu a3,1(a0) + s++; + 5ec8: 0505 addi a0,a0,1 + while (*s) + 5eca: f2fd bnez a3,5eb0 + return NULL; + 5ecc: 4501 li a0,0 +} + 5ece: 8082 ret + while (*s) + 5ed0: 00154683 lbu a3,1(a0) + s++; + 5ed4: 0505 addi a0,a0,1 + while (*s) + 5ed6: feed bnez a3,5ed0 + 5ed8: bfd5 j 5ecc + +0000000000005eda : +char *strtok(char *str, const char *delim) +{ + static char *olds; + char *token; + + if (str == NULL) + 5eda: 00003897 auipc a7,0x3 + 5ede: ece88893 addi a7,a7,-306 # 8da8 + 5ee2: cd25 beqz a0,5f5a + while (*p) + 5ee4: 00054683 lbu a3,0(a0) + 5ee8: c295 beqz a3,5f0c + for (a = accept; *a; a++) + 5eea: 0005c803 lbu a6,0(a1) + 5eee: 02080463 beqz a6,5f16 + 5ef2: 87ae mv a5,a1 + 5ef4: 8742 mv a4,a6 + 5ef6: a021 j 5efe + 5ef8: 0007c703 lbu a4,0(a5) + 5efc: cf09 beqz a4,5f16 + 5efe: 0785 addi a5,a5,1 + if (*p == *a) + 5f00: fee69ce3 bne a3,a4,5ef8 + while (*p) + 5f04: 00154683 lbu a3,1(a0) + p++; + 5f08: 0505 addi a0,a0,1 + while (*p) + 5f0a: f6e5 bnez a3,5ef2 + 5f0c: 87aa mv a5,a0 + str = olds; + + str += strspn(str, delim); + if (*str == '\0') + { + olds = str; + 5f0e: 00f8b023 sd a5,0(a7) + return NULL; + 5f12: 4501 li a0,0 + *str = '\0'; + olds = str + 1; + } + + return token; +} + 5f14: 8082 ret + if (*str == '\0') + 5f16: 00054603 lbu a2,0(a0) + 5f1a: da6d beqz a2,5f0c + 5f1c: 86aa mv a3,a0 + for (a = accept; *a; a++) + 5f1e: 04080163 beqz a6,5f60 + 5f22: 8742 mv a4,a6 + 5f24: 87ae mv a5,a1 + 5f26: a021 j 5f2e + 5f28: 0007c703 lbu a4,0(a5) + 5f2c: cb19 beqz a4,5f42 + 5f2e: 0785 addi a5,a5,1 + if (*s == *a) + 5f30: fee61ce3 bne a2,a4,5f28 + olds = str + 1; + 5f34: 00168793 addi a5,a3,1 + *str = '\0'; + 5f38: 00068023 sb zero,0(a3) + olds = str; + 5f3c: 00f8b023 sd a5,0(a7) +} + 5f40: 8082 ret + while (*s) + 5f42: 0016c603 lbu a2,1(a3) + s++; + 5f46: 0685 addi a3,a3,1 + while (*s) + 5f48: fe69 bnez a2,5f22 + 5f4a: 87aa mv a5,a0 + while (*s != (char)c) + 5f4c: 0017c703 lbu a4,1(a5) + if (!*s++) + 5f50: 0785 addi a5,a5,1 + while (*s != (char)c) + 5f52: ff6d bnez a4,5f4c + olds = str; + 5f54: 00f8b023 sd a5,0(a7) +} + 5f58: 8082 ret + str = olds; + 5f5a: 0008b503 ld a0,0(a7) + 5f5e: b759 j 5ee4 + while (*s) + 5f60: 0016c603 lbu a2,1(a3) + s++; + 5f64: 0685 addi a3,a3,1 + while (*s) + 5f66: fe6d bnez a2,5f60 + 5f68: b7cd j 5f4a + +0000000000005f6a : + +char *strerror(int errnum) +{ + 5f6a: 87aa mv a5,a0 + + switch (errnum) + 5f6c: cd09 beqz a0,5f86 + 5f6e: 4731 li a4,12 + 5f70: 00000517 auipc a0,0x0 + 5f74: 22850513 addi a0,a0,552 # 6198 <_GLOBAL__sub_I__ZSt3cin+0x1f0> + 5f78: 00e78b63 beq a5,a4,5f8e + return "Success"; + // case EINVAL: return "Invalid argument"; + case ENOMEM: return "Out of memory"; + + default: + return "Unknown error"; + 5f7c: 00000517 auipc a0,0x0 + 5f80: 22c50513 addi a0,a0,556 # 61a8 <_GLOBAL__sub_I__ZSt3cin+0x200> + 5f84: 8082 ret + return "Success"; + 5f86: 00000517 auipc a0,0x0 + 5f8a: 20a50513 addi a0,a0,522 # 6190 <_GLOBAL__sub_I__ZSt3cin+0x1e8> + } + 5f8e: 8082 ret + +0000000000005f90 <_Znwm>: +#include "ulib/stdlib.h" + +void *operator new(unsigned long n) +{ + return malloc(n); + 5f90: d0eff06f j 549e + +0000000000005f94 <_Znam>: +} + +void *operator new[](unsigned long n) + 5f94: d0aff06f j 549e + +0000000000005f98 <_ZdlPv>: + return malloc(n); +} + +void operator delete(void *p) +{ + free(p); + 5f98: c90ff06f j 5428 + +0000000000005f9c <_ZdaPv>: +} + +void operator delete[](void *p) + 5f9c: c8cff06f j 5428 + +0000000000005fa0 <_ZdlPvm>: + free(p); +} + +void operator delete(void *p, unsigned long) +{ + free(p); + 5fa0: c88ff06f j 5428 + +0000000000005fa4 <_ZdaPvm>: +} + +void operator delete[](void *p, unsigned long) + 5fa4: c84ff06f j 5428 + +0000000000005fa8 <_GLOBAL__sub_I__ZSt3cin>: +#include "ulib/iostream" + +namespace std +{ + istream cin(stdin); + 5fa8: 00003797 auipc a5,0x3 + 5fac: c507b783 ld a5,-944(a5) # 8bf8 <_GLOBAL_OFFSET_TABLE_+0x10> + 5fb0: 6390 ld a2,0(a5) + ostream cout(stdout); + 5fb2: 00003797 auipc a5,0x3 + 5fb6: c3e7b783 ld a5,-962(a5) # 8bf0 <_GLOBAL_OFFSET_TABLE_+0x8> + 5fba: 6394 ld a3,0(a5) + ostream cerr(stderr); + 5fbc: 00003797 auipc a5,0x3 + 5fc0: c447b783 ld a5,-956(a5) # 8c00 <_GLOBAL_OFFSET_TABLE_+0x18> + 5fc4: 6398 ld a4,0(a5) + + class istream{ + private: + FILE* _stream; + public: + istream(FILE *f) : _stream(f) {} + 5fc6: 00003797 auipc a5,0x3 + 5fca: dea78793 addi a5,a5,-534 # 8db0 <_ZSt3cin> + 5fce: e390 sd a2,0(a5) + ostream(FILE* f) : _stream(f) {} + 5fd0: e794 sd a3,8(a5) + 5fd2: eb98 sd a4,16(a5) +} // namespace std + 5fd4: 8082 ret diff --git a/build/user/sh.o b/build/user/sh.o new file mode 100644 index 0000000..9b63896 Binary files /dev/null and b/build/user/sh.o differ diff --git a/build/user/usys.o b/build/user/usys.o index 537c6db..73af575 100644 Binary files a/build/user/usys.o and b/build/user/usys.o differ diff --git a/docs/debug/debug_slab.md b/docs/debug/debug_slab.md new file mode 100644 index 0000000..b64dca8 --- /dev/null +++ b/docs/debug/debug_slab.md @@ -0,0 +1,94 @@ +# Debug + +发现user_init加载之后无法正常跳转到shell + +检查fork + +添加调试信息 +```cxx +printf("fork start\n"); +int pid = fork(); +printf("fork suceess, pid=%i\n", pid); +``` +正常打印,fork()没有问题 + +尝试在 'exec(sh_path, argv);' 前后添加调试信息 + +该代码之前有输出,之后无输出 + +尝试解决exec.cc的问题 + +在exec()函数开头处添加调试信息 + +```CXX + Drivers::uart_puts("Enter Exec\n"); + // Get Inode + Inode *raw_ip = VFS::namei(path); + if (!raw_ip) + return -1; + InodeGuard iguard(raw_ip); +``` + +没有输出 + +怀疑是系统注册的问题,但不可能,因为在实现shell之前的简易测试程序证明系统调用没有问题 + +尝试 GDB 调试 + +![alt text](debug_slab_1.png) + +发现卡在 sret 返回的部分,跳转的地址没有问题,但是卡死,说明CPU没有跑飞,可能遇到了死循环 + +检查sys_exec() + +通过在每行代码前后添加打印调试信息,发现问题出在这行代码: +```cxx + kargv.args[i] = (char *)Slab::kmalloc(KernelArgv::MAX_ARG_LEN); +``` +这行代码之后的打印信息没有输出,说明这里一直在执行! + +检查Slab + +像之前一样通过在每行代码前后添加打印调试信息,发现问题出在这里: +```cxx +for (uint i = 0; i < c->obj_count_per_slab - 1; i++) + { + // The content of the i-th object is i+1 + uint16 *ptr = (uint16 *)(base + i * c->obj_size); + *ptr = i + 1; + } +``` +这段代码之前的信息可以输出,之后的不能输出,说明这里出问题了 + +在循环内部打印信息,发现调试信息刷屏 + +证明了在GDB里面看到的消息,并不是CPU跑到了某些神秘地址,而是一直卡在这个死循环! + +这里出现了死循环,说明这里循环终止条件出了问题,根本原因需要排查 + +可能是错误的计算,导致这里成了ull的最大值,即使在 3 GHz CPU 上跑空循环,跑满 unsigned long long 最大值次数也需要 近千年。 + +怀疑之前这个值是0 + +添加代码: +```cxx + if (c->obj_count_per_slab == 0) + Drivers::uart_puts("it is 0"); +``` +证明猜测正确 + +这里检查发现这个值确实是0,但它为什么能是0呢? + +可能是初始化的问题???? + +检查系统初始化main.cc + +发现Slab确实没有初始化,导致c->obj_count_per_slab这个值一直是0! + +初始化! + +正常加载shell + +说明 ELF 加载,只读 FAT32 文件系统 正常实现 + +该bug解决 \ No newline at end of file diff --git a/docs/debug/debug_slab_1.png b/docs/debug/debug_slab_1.png new file mode 100644 index 0000000..5cb9e66 Binary files /dev/null and b/docs/debug/debug_slab_1.png differ diff --git a/fs.img b/fs.img index 1709788..5053f9d 100644 Binary files a/fs.img and b/fs.img differ diff --git a/include/fs/file.h b/include/fs/file.h index fc0c5d9..2f23176 100644 --- a/include/fs/file.h +++ b/include/fs/file.h @@ -32,4 +32,5 @@ namespace FileTable int stat(struct file *f, uint64 addr); int read(struct file *f, uint64 addr, int n); int write(struct file *f, uint64 addr, int n); + int lseek(struct file *f, int offset, int whence); } // namespace FileTable diff --git a/include/fs/fs.h b/include/fs/fs.h index 6e4ec4b..f40bc0c 100644 --- a/include/fs/fs.h +++ b/include/fs/fs.h @@ -83,6 +83,7 @@ namespace VFS void ilock(Inode *ip); // unlock void iunlock(Inode *ip); + void iunlockput(Inode *ip); // Mount the root filesystem void mount_root(Inode *root); // Get system root node diff --git a/include/kernel/mm.h b/include/kernel/mm.h index 1850574..3b59edb 100644 --- a/include/kernel/mm.h +++ b/include/kernel/mm.h @@ -22,4 +22,6 @@ namespace VM int handle_cow_fault(uint64 *pagetable, uint64 va); int mappages(uint64 *pagetable, uint64 va, uint64 size, uint64 pa, int perm); + + uint64 walkaddr(uint64 *pagetable, uint64 va); } \ No newline at end of file diff --git a/include/kernel/syscall.h b/include/kernel/syscall.h index 1fcd1ff..c0c9082 100644 --- a/include/kernel/syscall.h +++ b/include/kernel/syscall.h @@ -23,6 +23,7 @@ #define SYS_mkdir 21 #define SYS_close 22 #define SYS_disk_test 23 +#define SYS_lseek 24 #ifndef __ASSEMBLER__ void syscall(); diff --git a/include/ulib/assert.h b/include/ulib/assert.h new file mode 100644 index 0000000..a083aff --- /dev/null +++ b/include/ulib/assert.h @@ -0,0 +1,20 @@ +#ifndef _ASSERT_H +#define _ASSERT_H + +#ifdef NDEBUG +#define assert(ignore) ((void)0) +#else +#ifdef __cplusplus +extern "C" +{ +#endif + void __assert_fail(const char *expr, const char *file, int line, const char *func); +#ifdef __cplusplus +} +#endif + +#define assert(expr) \ + ((expr) ? (void)0 : __assert_fail(#expr, __FILE__, __LINE__, __func__)) +#endif + +#endif \ No newline at end of file diff --git a/include/ulib/cstdlib b/include/ulib/cstdlib new file mode 100644 index 0000000..69b9bb6 --- /dev/null +++ b/include/ulib/cstdlib @@ -0,0 +1,52 @@ +#ifndef _CPP_CSTDLIB +#define _CPP_CSTDLIB + +#include "stdlib.h" + +namespace std +{ + using :: malloc; + using :: free; + using :: calloc; + using :: realloc; + + using :: exit; + using :: abort; + using :: atexit; + using :: getenv; + using :: system; + + using :: atoi; + using :: atol; + using :: atoll; + using :: atof; + + using :: strtol; + using :: strtoul; + using :: strtoll; + using :: strtoull; + + using :: strtod; + using :: strtof; + + using :: bsearch; + using :: qsort; + + using :: abs; + using :: labs; + using :: llabs; + using :: div; + using :: ldiv; + using :: lldiv; + + using :: rand; + using :: srand; + + using :: mblen; + using :: mbtowc; + using :: wctomb; + using :: mbstowcs; + using :: wcstombs; +} + +#endif \ No newline at end of file diff --git a/include/ulib/cstring b/include/ulib/cstring new file mode 100644 index 0000000..bb8ab44 --- /dev/null +++ b/include/ulib/cstring @@ -0,0 +1,32 @@ +#ifndef _CPP_CSTRING +#define _CPP_CSTRING + +#include "string.h" + +namespace std +{ + using::memchr; + using::memcmp; + using::memcpy; + using::memmove; + using::memset; + using::strcat; + using::strchr; + using::strcmp; + using::strcpy; + using::strcspn; + using::strdup; + using::strerror; + using::strlcat; + using::strlcpy; + using::strlen; + using::strncat; + using::strncmp; + using::strpbrk; + using::strrchr; + using::strspn; + using::strstr; + using::strtok; +} // namespace std + +#endif \ No newline at end of file diff --git a/include/ulib/ctypes.h b/include/ulib/ctypes.h new file mode 100644 index 0000000..3e0bc22 --- /dev/null +++ b/include/ulib/ctypes.h @@ -0,0 +1,26 @@ +#ifndef _CTYPE_H +#define _CTYPE_H + +#ifdef __cplusplus +extern "C" +{ +#endif + + static inline int isdigit(int c) { return c >= '0' && c <= '9'; } + static inline int islower(int c) { return c >= 'a' && c <= 'z'; } + static inline int isupper(int c) { return c >= 'A' && c <= 'Z'; } + static inline int isalpha(int c) { return islower(c) || isupper(c); } + static inline int isalnum(int c) { return isalpha(c) || isdigit(c); } + static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } + static inline int isprint(int c) { return c >= 32 && c <= 126; } + static inline int iscntrl(int c) { return c < 32 || c == 127; } + static inline int isxdigit(int c) { return isdigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); } + + static inline int tolower(int c) { return isupper(c) ? c + 32 : c; } + static inline int toupper(int c) { return islower(c) ? c - 32 : c; } + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/include/ulib/cxx.cc b/include/ulib/cxx.cc new file mode 100644 index 0000000..d24de1e --- /dev/null +++ b/include/ulib/cxx.cc @@ -0,0 +1,32 @@ +#include "ulib/stdlib.h" + + +void *operator new(unsigned long n) +{ + return malloc(n); +} + +void *operator new[](unsigned long n) +{ + return malloc(n); +} + +void operator delete(void *p) +{ + free(p); +} + +void operator delete[](void *p) +{ + free(p); +} + +void operator delete(void *p, unsigned long) +{ + free(p); +} + +void operator delete[](void *p, unsigned long) +{ + free(p); +} \ No newline at end of file diff --git a/include/ulib/errno.h b/include/ulib/errno.h new file mode 100644 index 0000000..03ff8fd --- /dev/null +++ b/include/ulib/errno.h @@ -0,0 +1,31 @@ +#ifndef _ERRNO_H +#define _ERRNO_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +extern int errno; + +// Linux/ASM-Generic +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Argument list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/include/ulib/iostream b/include/ulib/iostream new file mode 100644 index 0000000..83ed74c --- /dev/null +++ b/include/ulib/iostream @@ -0,0 +1,110 @@ +#ifndef _IOSTREAM +#define _IOSTREAM + +#include "stdio.h" + +namespace std +{ + class ostream + { + private: + FILE* _stream; + public: + ostream(FILE* f) : _stream(f) {} + + ostream& operator<<(const char* str) + { + fprintf(_stream, "%s", str); + return *this; + } + + ostream& operator<<(int n) + { + fprintf(_stream, "%d", n); + return *this; + } + + ostream &operator<<(long n) + { + fprintf(_stream, "%ld", n); + return *this; + } + + ostream &operator<<(long long n) + { + fprintf(_stream, "%lld", n); + return *this; + } + + ostream &operator<<(double f) + { + fprintf(_stream, "%f", f); + return *this; + } + + ostream &operator<<(char c) + { + fputc(c, _stream); + return *this; + } + + ostream &operator<<(void *p) + { + fprintf(_stream, "%p", p); + return *this; + } + + ostream &operator<<(ostream &(*func)(ostream &)) + { + return func(*this); + } + + ostream &flush() + { + fflush(_stream); + return *this; + } + }; + + class istream{ + private: + FILE* _stream; + public: + istream(FILE *f) : _stream(f) {} + + istream& operator>>(int n) + { + fscanf(_stream, "%d", n); + return *this; + } + + istream &operator>>(double &f) + { + fscanf(_stream, "%lf", &f); + return *this; + } + + istream &operator>>(char *str) + { + fscanf(_stream, "%s", str); + return *this; + } + + istream &operator>>(char &c) + { + char tmp[2]; + fscanf(_stream, " %c", tmp); + c = tmp[0]; + return *this; + } + }; + + inline ostream &endl(ostream &os) + { + os << '\n'; + os.flush(); + return os; + } +} + +#endif \ No newline at end of file diff --git a/include/ulib/limits.h b/include/ulib/limits.h new file mode 100644 index 0000000..030ffbb --- /dev/null +++ b/include/ulib/limits.h @@ -0,0 +1,22 @@ +#pragma once + +#define CHAR_BIT 8 +#define SCHAR_MIN (-128) +#define SCHAR_MAX 127 +#define UCHAR_MAX 255 + +#define SHRT_MIN (-32768) +#define SHRT_MAX 32767 +#define USHRT_MAX 65535 + +#define INT_MIN (-2147483648) +#define INT_MAX 2147483647 +#define UINT_MAX 4294967295U + +#define LONG_MAX 9223372036854775807L +#define LONG_MIN (-LONG_MAX - 1L) +#define ULONG_MAX 18446744073709551615UL + +#define LLONG_MAX 9223372036854775807LL +#define LLONG_MIN (-LLONG_MAX - 1LL) +#define ULLONG_MAX 18446744073709551615ULL \ No newline at end of file diff --git a/include/ulib/stb_sprintf.h b/include/ulib/stb_sprintf.h new file mode 100644 index 0000000..00dc123 --- /dev/null +++ b/include/ulib/stb_sprintf.h @@ -0,0 +1,1916 @@ +// stb_sprintf - v1.10 - public domain snprintf() implementation +// originally by Jeff Roberts / RAD Game Tools, 2015/10/20 +// http://github.com/nothings/stb +// +// allowed types: sc uidBboXx p AaGgEef n +// lengths : hh h ll j z t I64 I32 I +// +// Contributors: +// Fabian "ryg" Giesen (reformatting) +// github:aganm (attribute format) +// +// Contributors (bugfixes): +// github:d26435 +// github:trex78 +// github:account-login +// Jari Komppa (SI suffixes) +// Rohit Nirmal +// Marcin Wojdyr +// Leonard Ritter +// Stefano Zanotti +// Adam Allison +// Arvid Gerstmann +// Markus Kolb +// +// LICENSE: +// +// See end of file for license information. + +#ifndef STB_SPRINTF_H_INCLUDE +#define STB_SPRINTF_H_INCLUDE + +/* +Single file sprintf replacement. + +Originally written by Jeff Roberts at RAD Game Tools - 2015/10/20. +Hereby placed in public domain. + +This is a full sprintf replacement that supports everything that +the C runtime sprintfs support, including float/double, 64-bit integers, +hex floats, field parameters (%*.*d stuff), length reads backs, etc. + +Why would you need this if sprintf already exists? Well, first off, +it's *much* faster (see below). It's also much smaller than the CRT +versions code-space-wise. We've also added some simple improvements +that are super handy (commas in thousands, callbacks at buffer full, +for example). Finally, the format strings for MSVC and GCC differ +for 64-bit integers (among other small things), so this lets you use +the same format strings in cross platform code. + +It uses the standard single file trick of being both the header file +and the source itself. If you just include it normally, you just get +the header file function definitions. To get the code, you include +it from a C or C++ file and define STB_SPRINTF_IMPLEMENTATION first. + +It only uses va_args macros from the C runtime to do it's work. It +does cast doubles to S64s and shifts and divides U64s, which does +drag in CRT code on most platforms. + +It compiles to roughly 8K with float support, and 4K without. +As a comparison, when using MSVC static libs, calling sprintf drags +in 16K. + +API: +==== +int stbsp_sprintf( char * buf, char const * fmt, ... ) +int stbsp_snprintf( char * buf, int count, char const * fmt, ... ) + Convert an arg list into a buffer. stbsp_snprintf always returns + a zero-terminated string (unlike regular snprintf). + +int stbsp_vsprintf( char * buf, char const * fmt, va_list va ) +int stbsp_vsnprintf( char * buf, int count, char const * fmt, va_list va ) + Convert a va_list arg list into a buffer. stbsp_vsnprintf always returns + a zero-terminated string (unlike regular snprintf). + +int stbsp_vsprintfcb( STBSP_SPRINTFCB * callback, void * user, char * buf, char const * fmt, va_list va ) + typedef char * STBSP_SPRINTFCB( char const * buf, void * user, int len ); + Convert into a buffer, calling back every STB_SPRINTF_MIN chars. + Your callback can then copy the chars out, print them or whatever. + This function is actually the workhorse for everything else. + The buffer you pass in must hold at least STB_SPRINTF_MIN characters. + // you return the next buffer to use or 0 to stop converting + +void stbsp_set_separators( char comma, char period ) + Set the comma and period characters to use. + +FLOATS/DOUBLES: +=============== +This code uses a internal float->ascii conversion method that uses +doubles with error correction (double-doubles, for ~105 bits of +precision). This conversion is round-trip perfect - that is, an atof +of the values output here will give you the bit-exact double back. + +One difference is that our insignificant digits will be different than +with MSVC or GCC (but they don't match each other either). We also +don't attempt to find the minimum length matching float (pre-MSVC15 +doesn't either). + +If you don't need float or doubles at all, define STB_SPRINTF_NOFLOAT +and you'll save 4K of code space. + +64-BIT INTS: +============ +This library also supports 64-bit integers and you can use MSVC style or +GCC style indicators (%I64d or %lld). It supports the C99 specifiers +for size_t and ptr_diff_t (%jd %zd) as well. + +EXTRAS: +======= +Like some GCCs, for integers and floats, you can use a ' (single quote) +specifier and commas will be inserted on the thousands: "%'d" on 12345 +would print 12,345. + +For integers and floats, you can use a "$" specifier and the number +will be converted to float and then divided to get kilo, mega, giga or +tera and then printed, so "%$d" 1000 is "1.0 k", "%$.2d" 2536000 is +"2.53 M", etc. For byte values, use two $:s, like "%$$d" to turn +2536000 to "2.42 Mi". If you prefer JEDEC suffixes to SI ones, use three +$:s: "%$$$d" -> "2.42 M". To remove the space between the number and the +suffix, add "_" specifier: "%_$d" -> "2.53M". + +In addition to octal and hexadecimal conversions, you can print +integers in binary: "%b" for 256 would print 100. + +PERFORMANCE vs MSVC 2008 32-/64-bit (GCC is even slower than MSVC): +=================================================================== +"%d" across all 32-bit ints (4.8x/4.0x faster than 32-/64-bit MSVC) +"%24d" across all 32-bit ints (4.5x/4.2x faster) +"%x" across all 32-bit ints (4.5x/3.8x faster) +"%08x" across all 32-bit ints (4.3x/3.8x faster) +"%f" across e-10 to e+10 floats (7.3x/6.0x faster) +"%e" across e-10 to e+10 floats (8.1x/6.0x faster) +"%g" across e-10 to e+10 floats (10.0x/7.1x faster) +"%f" for values near e-300 (7.9x/6.5x faster) +"%f" for values near e+300 (10.0x/9.1x faster) +"%e" for values near e-300 (10.1x/7.0x faster) +"%e" for values near e+300 (9.2x/6.0x faster) +"%.320f" for values near e-300 (12.6x/11.2x faster) +"%a" for random values (8.6x/4.3x faster) +"%I64d" for 64-bits with 32-bit values (4.8x/3.4x faster) +"%I64d" for 64-bits > 32-bit values (4.9x/5.5x faster) +"%s%s%s" for 64 char strings (7.1x/7.3x faster) +"...512 char string..." ( 35.0x/32.5x faster!) +*/ + +#if defined(__clang__) + #if defined(__has_feature) && defined(__has_attribute) + #if __has_feature(address_sanitizer) + #if __has_attribute(__no_sanitize__) + #define STBSP__ASAN __attribute__((__no_sanitize__("address"))) + #elif __has_attribute(__no_sanitize_address__) + #define STBSP__ASAN __attribute__((__no_sanitize_address__)) + #elif __has_attribute(__no_address_safety_analysis__) + #define STBSP__ASAN __attribute__((__no_address_safety_analysis__)) + #endif + #endif + #endif +#elif defined(__GNUC__) && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) + #if defined(__SANITIZE_ADDRESS__) && __SANITIZE_ADDRESS__ + #define STBSP__ASAN __attribute__((__no_sanitize_address__)) + #endif +#endif + +#ifndef STBSP__ASAN +#define STBSP__ASAN +#endif + +#ifdef STB_SPRINTF_STATIC +#define STBSP__PUBLICDEC static +#define STBSP__PUBLICDEF static STBSP__ASAN +#else +#ifdef __cplusplus +#define STBSP__PUBLICDEC extern "C" +#define STBSP__PUBLICDEF extern "C" STBSP__ASAN +#else +#define STBSP__PUBLICDEC extern +#define STBSP__PUBLICDEF STBSP__ASAN +#endif +#endif + +#if defined(__has_attribute) + #if __has_attribute(format) + #define STBSP__ATTRIBUTE_FORMAT(fmt,va) __attribute__((format(printf,fmt,va))) + #endif +#endif + +#ifndef STBSP__ATTRIBUTE_FORMAT +#define STBSP__ATTRIBUTE_FORMAT(fmt,va) +#endif + +#ifdef _MSC_VER +#define STBSP__NOTUSED(v) (void)(v) +#else +#define STBSP__NOTUSED(v) (void)sizeof(v) +#endif + +#include // for va_arg(), va_list() +#include // size_t, ptrdiff_t + +#ifndef stbsp__uintptr +#if defined(__riscv) && (__riscv_xlen == 64) +#define stbsp__uintptr unsigned long long +#elif defined(__ppc64__) || defined(__powerpc64__) || defined(__aarch64__) || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__s390x__) +#define stbsp__uintptr unsigned long long +#else +#define stbsp__uintptr unsigned int +#endif +#endif + +#ifndef STB_SPRINTF_MIN +#define STB_SPRINTF_MIN 512 // how many characters per callback +#endif +typedef char *STBSP_SPRINTFCB(const char *buf, void *user, int len); + +#ifndef STB_SPRINTF_DECORATE +#define STB_SPRINTF_DECORATE(name) stbsp_##name // define this before including if you want to change the names +#endif + +STBSP__PUBLICDEC int STB_SPRINTF_DECORATE(vsprintf)(char *buf, char const *fmt, va_list va); +STBSP__PUBLICDEC int STB_SPRINTF_DECORATE(vsnprintf)(char *buf, int count, char const *fmt, va_list va); +STBSP__PUBLICDEC int STB_SPRINTF_DECORATE(sprintf)(char *buf, char const *fmt, ...) STBSP__ATTRIBUTE_FORMAT(2,3); +STBSP__PUBLICDEC int STB_SPRINTF_DECORATE(snprintf)(char *buf, int count, char const *fmt, ...) STBSP__ATTRIBUTE_FORMAT(3,4); + +STBSP__PUBLICDEC int STB_SPRINTF_DECORATE(vsprintfcb)(STBSP_SPRINTFCB *callback, void *user, char *buf, char const *fmt, va_list va); +STBSP__PUBLICDEC void STB_SPRINTF_DECORATE(set_separators)(char comma, char period); + +#endif // STB_SPRINTF_H_INCLUDE + +#ifdef STB_SPRINTF_IMPLEMENTATION + +#define stbsp__uint32 unsigned int +#define stbsp__int32 signed int + +#ifdef _MSC_VER +#define stbsp__uint64 unsigned __int64 +#define stbsp__int64 signed __int64 +#else +#define stbsp__uint64 unsigned long long +#define stbsp__int64 signed long long +#endif +#define stbsp__uint16 unsigned short + +#ifndef stbsp__uintptr +#if defined(__ppc64__) || defined(__powerpc64__) || defined(__aarch64__) || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__s390x__) +#define stbsp__uintptr stbsp__uint64 +#else +#define stbsp__uintptr stbsp__uint32 +#endif +#endif + +#ifndef STB_SPRINTF_MSVC_MODE // used for MSVC2013 and earlier (MSVC2015 matches GCC) +#if defined(_MSC_VER) && (_MSC_VER < 1900) +#define STB_SPRINTF_MSVC_MODE +#endif +#endif + +#ifdef STB_SPRINTF_NOUNALIGNED // define this before inclusion to force stbsp_sprintf to always use aligned accesses +#define STBSP__UNALIGNED(code) +#else +#define STBSP__UNALIGNED(code) code +#endif + +#ifndef STB_SPRINTF_NOFLOAT +// internal float utility functions +static stbsp__int32 stbsp__real_to_str(char const **start, stbsp__uint32 *len, char *out, stbsp__int32 *decimal_pos, double value, stbsp__uint32 frac_digits); +static stbsp__int32 stbsp__real_to_parts(stbsp__int64 *bits, stbsp__int32 *expo, double value); +#define STBSP__SPECIAL 0x7000 +#endif + +static char stbsp__period = '.'; +static char stbsp__comma = ','; +static struct +{ + short temp; // force next field to be 2-byte aligned + char pair[201]; +} stbsp__digitpair = +{ + 0, + "00010203040506070809101112131415161718192021222324" + "25262728293031323334353637383940414243444546474849" + "50515253545556575859606162636465666768697071727374" + "75767778798081828384858687888990919293949596979899" +}; + +STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod) +{ + stbsp__period = pperiod; + stbsp__comma = pcomma; +} + +#define STBSP__LEFTJUST 1 +#define STBSP__LEADINGPLUS 2 +#define STBSP__LEADINGSPACE 4 +#define STBSP__LEADING_0X 8 +#define STBSP__LEADINGZERO 16 +#define STBSP__INTMAX 32 +#define STBSP__TRIPLET_COMMA 64 +#define STBSP__NEGATIVE 128 +#define STBSP__METRIC_SUFFIX 256 +#define STBSP__HALFWIDTH 512 +#define STBSP__METRIC_NOSPACE 1024 +#define STBSP__METRIC_1024 2048 +#define STBSP__METRIC_JEDEC 4096 + +static void stbsp__lead_sign(stbsp__uint32 fl, char *sign) +{ + sign[0] = 0; + if (fl & STBSP__NEGATIVE) { + sign[0] = 1; + sign[1] = '-'; + } else if (fl & STBSP__LEADINGSPACE) { + sign[0] = 1; + sign[1] = ' '; + } else if (fl & STBSP__LEADINGPLUS) { + sign[0] = 1; + sign[1] = '+'; + } +} + +static STBSP__ASAN stbsp__uint32 stbsp__strlen_limited(char const *s, stbsp__uint32 limit) +{ + char const * sn = s; + + // get up to 4-byte alignment + for (;;) { + if (((stbsp__uintptr)sn & 3) == 0) + break; + + if (!limit || *sn == 0) + return (stbsp__uint32)(sn - s); + + ++sn; + --limit; + } + + // scan over 4 bytes at a time to find terminating 0 + // this will intentionally scan up to 3 bytes past the end of buffers, + // but becase it works 4B aligned, it will never cross page boundaries + // (hence the STBSP__ASAN markup; the over-read here is intentional + // and harmless) + while (limit >= 4) { + stbsp__uint32 v = *(stbsp__uint32 *)sn; + // bit hack to find if there's a 0 byte in there + if ((v - 0x01010101) & (~v) & 0x80808080UL) + break; + + sn += 4; + limit -= 4; + } + + // handle the last few characters to find actual size + while (limit && *sn) { + ++sn; + --limit; + } + + return (stbsp__uint32)(sn - s); +} + +STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(vsprintfcb)(STBSP_SPRINTFCB *callback, void *user, char *buf, char const *fmt, va_list va) +{ + static char hex[] = "0123456789abcdefxp"; + static char hexu[] = "0123456789ABCDEFXP"; + char *bf; + char const *f; + int tlen = 0; + + bf = buf; + f = fmt; + for (;;) { + stbsp__int32 fw, pr, tz; + stbsp__uint32 fl; + + // macros for the callback buffer stuff + #define stbsp__chk_cb_bufL(bytes) \ + { \ + int len = (int)(bf - buf); \ + if ((len + (bytes)) >= STB_SPRINTF_MIN) { \ + tlen += len; \ + if (0 == (bf = buf = callback(buf, user, len))) \ + goto done; \ + } \ + } + #define stbsp__chk_cb_buf(bytes) \ + { \ + if (callback) { \ + stbsp__chk_cb_bufL(bytes); \ + } \ + } + #define stbsp__flush_cb() \ + { \ + stbsp__chk_cb_bufL(STB_SPRINTF_MIN - 1); \ + } // flush if there is even one byte in the buffer + #define stbsp__cb_buf_clamp(cl, v) \ + cl = v; \ + if (callback) { \ + int lg = STB_SPRINTF_MIN - (int)(bf - buf); \ + if (cl > lg) \ + cl = lg; \ + } + + // fast copy everything up to the next % (or end of string) + for (;;) { + while (((stbsp__uintptr)f) & 3) { + schk1: + if (f[0] == '%') + goto scandd; + schk2: + if (f[0] == 0) + goto endfmt; + stbsp__chk_cb_buf(1); + *bf++ = f[0]; + ++f; + } + for (;;) { + // Check if the next 4 bytes contain %(0x25) or end of string. + // Using the 'hasless' trick: + // https://graphics.stanford.edu/~seander/bithacks.html#HasLessInWord + stbsp__uint32 v, c; + v = *(stbsp__uint32 *)f; + c = (~v) & 0x80808080; + if (((v ^ 0x25252525) - 0x01010101) & c) + goto schk1; + if ((v - 0x01010101) & c) + goto schk2; + if (callback) + if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) + goto schk1; + #ifdef STB_SPRINTF_NOUNALIGNED + if(((stbsp__uintptr)bf) & 3) { + bf[0] = f[0]; + bf[1] = f[1]; + bf[2] = f[2]; + bf[3] = f[3]; + } else + #endif + { + *(stbsp__uint32 *)bf = v; + } + bf += 4; + f += 4; + } + } + scandd: + + ++f; + + // ok, we have a percent, read the modifiers first + fw = 0; + pr = -1; + fl = 0; + tz = 0; + + // flags + for (;;) { + switch (f[0]) { + // if we have left justify + case '-': + fl |= STBSP__LEFTJUST; + ++f; + continue; + // if we have leading plus + case '+': + fl |= STBSP__LEADINGPLUS; + ++f; + continue; + // if we have leading space + case ' ': + fl |= STBSP__LEADINGSPACE; + ++f; + continue; + // if we have leading 0x + case '#': + fl |= STBSP__LEADING_0X; + ++f; + continue; + // if we have thousand commas + case '\'': + fl |= STBSP__TRIPLET_COMMA; + ++f; + continue; + // if we have kilo marker (none->kilo->kibi->jedec) + case '$': + if (fl & STBSP__METRIC_SUFFIX) { + if (fl & STBSP__METRIC_1024) { + fl |= STBSP__METRIC_JEDEC; + } else { + fl |= STBSP__METRIC_1024; + } + } else { + fl |= STBSP__METRIC_SUFFIX; + } + ++f; + continue; + // if we don't want space between metric suffix and number + case '_': + fl |= STBSP__METRIC_NOSPACE; + ++f; + continue; + // if we have leading zero + case '0': + fl |= STBSP__LEADINGZERO; + ++f; + goto flags_done; + default: goto flags_done; + } + } + flags_done: + + // get the field width + if (f[0] == '*') { + fw = va_arg(va, stbsp__uint32); + ++f; + } else { + while ((f[0] >= '0') && (f[0] <= '9')) { + fw = fw * 10 + f[0] - '0'; + f++; + } + } + // get the precision + if (f[0] == '.') { + ++f; + if (f[0] == '*') { + pr = va_arg(va, stbsp__uint32); + ++f; + } else { + pr = 0; + while ((f[0] >= '0') && (f[0] <= '9')) { + pr = pr * 10 + f[0] - '0'; + f++; + } + } + } + + // handle integer size overrides + switch (f[0]) { + // are we halfwidth? + case 'h': + fl |= STBSP__HALFWIDTH; + ++f; + if (f[0] == 'h') + ++f; // QUARTERWIDTH + break; + // are we 64-bit (unix style) + case 'l': + fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); + ++f; + if (f[0] == 'l') { + fl |= STBSP__INTMAX; + ++f; + } + break; + // are we 64-bit on intmax? (c99) + case 'j': + fl |= (sizeof(size_t) == 8) ? STBSP__INTMAX : 0; + ++f; + break; + // are we 64-bit on size_t or ptrdiff_t? (c99) + case 'z': + fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; + ++f; + break; + case 't': + fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; + ++f; + break; + // are we 64-bit (msft style) + case 'I': + if ((f[1] == '6') && (f[2] == '4')) { + fl |= STBSP__INTMAX; + f += 3; + } else if ((f[1] == '3') && (f[2] == '2')) { + f += 3; + } else { + fl |= ((sizeof(void *) == 8) ? STBSP__INTMAX : 0); + ++f; + } + break; + default: break; + } + + // handle each replacement + switch (f[0]) { + #define STBSP__NUMSZ 512 // big enough for e308 (with commas) or e-307 + char num[STBSP__NUMSZ]; + char lead[8]; + char tail[8]; + char *s; + char const *h; + stbsp__uint32 l, n, cs; + stbsp__uint64 n64; +#ifndef STB_SPRINTF_NOFLOAT + double fv; +#endif + stbsp__int32 dp; + char const *sn; + + case 's': + // get the string + s = va_arg(va, char *); + if (s == 0) + s = (char *)"null"; + // get the length, limited to desired precision + // always limit to ~0u chars since our counts are 32b + l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); + lead[0] = 0; + tail[0] = 0; + pr = 0; + dp = 0; + cs = 0; + // copy the string in + goto scopy; + + case 'c': // char + // get the character + s = num + STBSP__NUMSZ - 1; + *s = (char)va_arg(va, int); + l = 1; + lead[0] = 0; + tail[0] = 0; + pr = 0; + dp = 0; + cs = 0; + goto scopy; + + case 'n': // weird write-bytes specifier + { + int *d = va_arg(va, int *); + *d = tlen + (int)(bf - buf); + } break; + +#ifdef STB_SPRINTF_NOFLOAT + case 'A': // float + case 'a': // hex float + case 'G': // float + case 'g': // float + case 'E': // float + case 'e': // float + case 'f': // float + va_arg(va, double); // eat it + s = (char *)"No float"; + l = 8; + lead[0] = 0; + tail[0] = 0; + pr = 0; + cs = 0; + STBSP__NOTUSED(dp); + goto scopy; +#else + case 'A': // hex float + case 'a': // hex float + h = (f[0] == 'A') ? hexu : hex; + fv = va_arg(va, double); + if (pr == -1) + pr = 6; // default is 6 + // read the double into a string + if (stbsp__real_to_parts((stbsp__int64 *)&n64, &dp, fv)) + fl |= STBSP__NEGATIVE; + + s = num + 64; + + stbsp__lead_sign(fl, lead); + + if (dp == -1023) + dp = (n64) ? -1022 : 0; + else + n64 |= (((stbsp__uint64)1) << 52); + n64 <<= (64 - 56); + if (pr < 15) + n64 += ((((stbsp__uint64)8) << 56) >> (pr * 4)); +// add leading chars + +#ifdef STB_SPRINTF_MSVC_MODE + *s++ = '0'; + *s++ = 'x'; +#else + lead[1 + lead[0]] = '0'; + lead[2 + lead[0]] = 'x'; + lead[0] += 2; +#endif + *s++ = h[(n64 >> 60) & 15]; + n64 <<= 4; + if (pr) + *s++ = stbsp__period; + sn = s; + + // print the bits + n = pr; + if (n > 13) + n = 13; + if (pr > (stbsp__int32)n) + tz = pr - n; + pr = 0; + while (n--) { + *s++ = h[(n64 >> 60) & 15]; + n64 <<= 4; + } + + // print the expo + tail[1] = h[17]; + if (dp < 0) { + tail[2] = '-'; + dp = -dp; + } else + tail[2] = '+'; + n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); + tail[0] = (char)n; + for (;;) { + tail[n] = '0' + dp % 10; + if (n <= 3) + break; + --n; + dp /= 10; + } + + dp = (int)(s - sn); + l = (int)(s - (num + 64)); + s = num + 64; + cs = 1 + (3 << 24); + goto scopy; + + case 'G': // float + case 'g': // float + h = (f[0] == 'G') ? hexu : hex; + fv = va_arg(va, double); + if (pr == -1) + pr = 6; + else if (pr == 0) + pr = 1; // default is 6 + // read the double into a string + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) + fl |= STBSP__NEGATIVE; + + // clamp the precision and delete extra zeros after clamp + n = pr; + if (l > (stbsp__uint32)pr) + l = pr; + while ((l > 1) && (pr) && (sn[l - 1] == '0')) { + --pr; + --l; + } + + // should we use %e + if ((dp <= -4) || (dp > (stbsp__int32)n)) { + if (pr > (stbsp__int32)l) + pr = l - 1; + else if (pr) + --pr; // when using %e, there is one digit before the decimal + goto doexpfromg; + } + // this is the insane action to get the pr to match %g semantics for %f + if (dp > 0) { + pr = (dp < (stbsp__int32)l) ? l - dp : 0; + } else { + pr = -dp + ((pr > (stbsp__int32)l) ? (stbsp__int32) l : pr); + } + goto dofloatfromg; + + case 'E': // float + case 'e': // float + h = (f[0] == 'E') ? hexu : hex; + fv = va_arg(va, double); + if (pr == -1) + pr = 6; // default is 6 + // read the double into a string + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) + fl |= STBSP__NEGATIVE; + doexpfromg: + tail[0] = 0; + stbsp__lead_sign(fl, lead); + if (dp == STBSP__SPECIAL) { + s = (char *)sn; + cs = 0; + pr = 0; + goto scopy; + } + s = num + 64; + // handle leading chars + *s++ = sn[0]; + + if (pr) + *s++ = stbsp__period; + + // handle after decimal + if ((l - 1) > (stbsp__uint32)pr) + l = pr + 1; + for (n = 1; n < l; n++) + *s++ = sn[n]; + // trailing zeros + tz = pr - (l - 1); + pr = 0; + // dump expo + tail[1] = h[0xe]; + dp -= 1; + if (dp < 0) { + tail[2] = '-'; + dp = -dp; + } else + tail[2] = '+'; +#ifdef STB_SPRINTF_MSVC_MODE + n = 5; +#else + n = (dp >= 100) ? 5 : 4; +#endif + tail[0] = (char)n; + for (;;) { + tail[n] = '0' + dp % 10; + if (n <= 3) + break; + --n; + dp /= 10; + } + cs = 1 + (3 << 24); // how many tens + goto flt_lead; + + case 'f': // float + fv = va_arg(va, double); + doafloat: + // do kilos + if (fl & STBSP__METRIC_SUFFIX) { + double divisor; + divisor = 1000.0f; + if (fl & STBSP__METRIC_1024) + divisor = 1024.0; + while (fl < 0x4000000) { + if ((fv < divisor) && (fv > -divisor)) + break; + fv /= divisor; + fl += 0x1000000; + } + } + if (pr == -1) + pr = 6; // default is 6 + // read the double into a string + if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) + fl |= STBSP__NEGATIVE; + dofloatfromg: + tail[0] = 0; + stbsp__lead_sign(fl, lead); + if (dp == STBSP__SPECIAL) { + s = (char *)sn; + cs = 0; + pr = 0; + goto scopy; + } + s = num + 64; + + // handle the three decimal varieties + if (dp <= 0) { + stbsp__int32 i; + // handle 0.000*000xxxx + *s++ = '0'; + if (pr) + *s++ = stbsp__period; + n = -dp; + if ((stbsp__int32)n > pr) + n = pr; + i = n; + while (i) { + if ((((stbsp__uintptr)s) & 3) == 0) + break; + *s++ = '0'; + --i; + } + while (i >= 4) { + *(stbsp__uint32 *)s = 0x30303030; + s += 4; + i -= 4; + } + while (i) { + *s++ = '0'; + --i; + } + if ((stbsp__int32)(l + n) > pr) + l = pr - n; + i = l; + while (i) { + *s++ = *sn++; + --i; + } + tz = pr - (n + l); + cs = 1 + (3 << 24); // how many tens did we write (for commas below) + } else { + cs = (fl & STBSP__TRIPLET_COMMA) ? ((600 - (stbsp__uint32)dp) % 3) : 0; + if ((stbsp__uint32)dp >= l) { + // handle xxxx000*000.0 + n = 0; + for (;;) { + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + cs = 0; + *s++ = stbsp__comma; + } else { + *s++ = sn[n]; + ++n; + if (n >= l) + break; + } + } + if (n < (stbsp__uint32)dp) { + n = dp - n; + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + while (n) { + if ((((stbsp__uintptr)s) & 3) == 0) + break; + *s++ = '0'; + --n; + } + while (n >= 4) { + *(stbsp__uint32 *)s = 0x30303030; + s += 4; + n -= 4; + } + } + while (n) { + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + cs = 0; + *s++ = stbsp__comma; + } else { + *s++ = '0'; + --n; + } + } + } + cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens + if (pr) { + *s++ = stbsp__period; + tz = pr; + } + } else { + // handle xxxxx.xxxx000*000 + n = 0; + for (;;) { + if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { + cs = 0; + *s++ = stbsp__comma; + } else { + *s++ = sn[n]; + ++n; + if (n >= (stbsp__uint32)dp) + break; + } + } + cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens + if (pr) + *s++ = stbsp__period; + if ((l - dp) > (stbsp__uint32)pr) + l = pr + dp; + while (n < l) { + *s++ = sn[n]; + ++n; + } + tz = pr - (l - dp); + } + } + pr = 0; + + // handle k,m,g,t + if (fl & STBSP__METRIC_SUFFIX) { + char idx; + idx = 1; + if (fl & STBSP__METRIC_NOSPACE) + idx = 0; + tail[0] = idx; + tail[1] = ' '; + { + if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. + if (fl & STBSP__METRIC_1024) + tail[idx + 1] = "_KMGT"[fl >> 24]; + else + tail[idx + 1] = "_kMGT"[fl >> 24]; + idx++; + // If printing kibits and not in jedec, add the 'i'. + if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { + tail[idx + 1] = 'i'; + idx++; + } + tail[0] = idx; + } + } + }; + + flt_lead: + // get the length that we copied + l = (stbsp__uint32)(s - (num + 64)); + s = num + 64; + goto scopy; +#endif + + case 'B': // upper binary + case 'b': // lower binary + h = (f[0] == 'B') ? hexu : hex; + lead[0] = 0; + if (fl & STBSP__LEADING_0X) { + lead[0] = 2; + lead[1] = '0'; + lead[2] = h[0xb]; + } + l = (8 << 4) | (1 << 8); + goto radixnum; + + case 'o': // octal + h = hexu; + lead[0] = 0; + if (fl & STBSP__LEADING_0X) { + lead[0] = 1; + lead[1] = '0'; + } + l = (3 << 4) | (3 << 8); + goto radixnum; + + case 'p': // pointer + fl |= (sizeof(void *) == 8) ? STBSP__INTMAX : 0; + pr = sizeof(void *) * 2; + fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros + // fall through - to X + + case 'X': // upper hex + case 'x': // lower hex + h = (f[0] == 'X') ? hexu : hex; + l = (4 << 4) | (4 << 8); + lead[0] = 0; + if (fl & STBSP__LEADING_0X) { + lead[0] = 2; + lead[1] = '0'; + lead[2] = h[16]; + } + radixnum: + // get the number + if (fl & STBSP__INTMAX) + n64 = va_arg(va, stbsp__uint64); + else + n64 = va_arg(va, stbsp__uint32); + + s = num + STBSP__NUMSZ; + dp = 0; + // clear tail, and clear leading if value is zero + tail[0] = 0; + if (n64 == 0) { + lead[0] = 0; + if (pr == 0) { + l = 0; + cs = 0; + goto scopy; + } + } + // convert to string + for (;;) { + *--s = h[n64 & ((1 << (l >> 8)) - 1)]; + n64 >>= (l >> 8); + if (!((n64) || ((stbsp__int32)((num + STBSP__NUMSZ) - s) < pr))) + break; + if (fl & STBSP__TRIPLET_COMMA) { + ++l; + if ((l & 15) == ((l >> 4) & 15)) { + l &= ~15; + *--s = stbsp__comma; + } + } + }; + // get the tens and the comma pos + cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); + // get the length that we copied + l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); + // copy it + goto scopy; + + case 'u': // unsigned + case 'i': + case 'd': // integer + // get the integer and abs it + if (fl & STBSP__INTMAX) { + stbsp__int64 i64 = va_arg(va, stbsp__int64); + n64 = (stbsp__uint64)i64; + if ((f[0] != 'u') && (i64 < 0)) { + n64 = (stbsp__uint64)-i64; + fl |= STBSP__NEGATIVE; + } + } else { + stbsp__int32 i = va_arg(va, stbsp__int32); + n64 = (stbsp__uint32)i; + if ((f[0] != 'u') && (i < 0)) { + n64 = (stbsp__uint32)-i; + fl |= STBSP__NEGATIVE; + } + } + +#ifndef STB_SPRINTF_NOFLOAT + if (fl & STBSP__METRIC_SUFFIX) { + if (n64 < 1024) + pr = 0; + else if (pr == -1) + pr = 1; + fv = (double)(stbsp__int64)n64; + goto doafloat; + } +#endif + + // convert to string + s = num + STBSP__NUMSZ; + l = 0; + + for (;;) { + // do in 32-bit chunks (avoid lots of 64-bit divides even with constant denominators) + char *o = s - 8; + if (n64 >= 100000000) { + n = (stbsp__uint32)(n64 % 100000000); + n64 /= 100000000; + } else { + n = (stbsp__uint32)n64; + n64 = 0; + } + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + do { + s -= 2; + *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; + n /= 100; + } while (n); + } + while (n) { + if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { + l = 0; + *--s = stbsp__comma; + --o; + } else { + *--s = (char)(n % 10) + '0'; + n /= 10; + } + } + if (n64 == 0) { + if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) + ++s; + break; + } + while (s != o) + if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { + l = 0; + *--s = stbsp__comma; + --o; + } else { + *--s = '0'; + } + } + + tail[0] = 0; + stbsp__lead_sign(fl, lead); + + // get the length that we copied + l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); + if (l == 0) { + *--s = '0'; + l = 1; + } + cs = l + (3 << 24); + if (pr < 0) + pr = 0; + + scopy: + // get fw=leading/trailing space, pr=leading zeros + if (pr < (stbsp__int32)l) + pr = l; + n = pr + lead[0] + tail[0] + tz; + if (fw < (stbsp__int32)n) + fw = n; + fw -= n; + pr -= l; + + // handle right justify and leading zeros + if ((fl & STBSP__LEFTJUST) == 0) { + if (fl & STBSP__LEADINGZERO) // if leading zeros, everything is in pr + { + pr = (fw > pr) ? fw : pr; + fw = 0; + } else { + fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas + } + } + + // copy the spaces and/or zeros + if (fw + pr) { + stbsp__int32 i; + stbsp__uint32 c; + + // copy leading spaces (or when doing %8.4d stuff) + if ((fl & STBSP__LEFTJUST) == 0) + while (fw > 0) { + stbsp__cb_buf_clamp(i, fw); + fw -= i; + while (i) { + if ((((stbsp__uintptr)bf) & 3) == 0) + break; + *bf++ = ' '; + --i; + } + while (i >= 4) { + *(stbsp__uint32 *)bf = 0x20202020; + bf += 4; + i -= 4; + } + while (i) { + *bf++ = ' '; + --i; + } + stbsp__chk_cb_buf(1); + } + + // copy leader + sn = lead + 1; + while (lead[0]) { + stbsp__cb_buf_clamp(i, lead[0]); + lead[0] -= (char)i; + while (i) { + *bf++ = *sn++; + --i; + } + stbsp__chk_cb_buf(1); + } + + // copy leading zeros + c = cs >> 24; + cs &= 0xffffff; + cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; + while (pr > 0) { + stbsp__cb_buf_clamp(i, pr); + pr -= i; + if ((fl & STBSP__TRIPLET_COMMA) == 0) { + while (i) { + if ((((stbsp__uintptr)bf) & 3) == 0) + break; + *bf++ = '0'; + --i; + } + while (i >= 4) { + *(stbsp__uint32 *)bf = 0x30303030; + bf += 4; + i -= 4; + } + } + while (i) { + if ((fl & STBSP__TRIPLET_COMMA) && (cs++ == c)) { + cs = 0; + *bf++ = stbsp__comma; + } else + *bf++ = '0'; + --i; + } + stbsp__chk_cb_buf(1); + } + } + + // copy leader if there is still one + sn = lead + 1; + while (lead[0]) { + stbsp__int32 i; + stbsp__cb_buf_clamp(i, lead[0]); + lead[0] -= (char)i; + while (i) { + *bf++ = *sn++; + --i; + } + stbsp__chk_cb_buf(1); + } + + // copy the string + n = l; + while (n) { + stbsp__int32 i; + stbsp__cb_buf_clamp(i, n); + n -= i; + STBSP__UNALIGNED(while (i >= 4) { + *(stbsp__uint32 volatile *)bf = *(stbsp__uint32 volatile *)s; + bf += 4; + s += 4; + i -= 4; + }) + while (i) { + *bf++ = *s++; + --i; + } + stbsp__chk_cb_buf(1); + } + + // copy trailing zeros + while (tz) { + stbsp__int32 i; + stbsp__cb_buf_clamp(i, tz); + tz -= i; + while (i) { + if ((((stbsp__uintptr)bf) & 3) == 0) + break; + *bf++ = '0'; + --i; + } + while (i >= 4) { + *(stbsp__uint32 *)bf = 0x30303030; + bf += 4; + i -= 4; + } + while (i) { + *bf++ = '0'; + --i; + } + stbsp__chk_cb_buf(1); + } + + // copy tail if there is one + sn = tail + 1; + while (tail[0]) { + stbsp__int32 i; + stbsp__cb_buf_clamp(i, tail[0]); + tail[0] -= (char)i; + while (i) { + *bf++ = *sn++; + --i; + } + stbsp__chk_cb_buf(1); + } + + // handle the left justify + if (fl & STBSP__LEFTJUST) + if (fw > 0) { + while (fw) { + stbsp__int32 i; + stbsp__cb_buf_clamp(i, fw); + fw -= i; + while (i) { + if ((((stbsp__uintptr)bf) & 3) == 0) + break; + *bf++ = ' '; + --i; + } + while (i >= 4) { + *(stbsp__uint32 *)bf = 0x20202020; + bf += 4; + i -= 4; + } + while (i--) + *bf++ = ' '; + stbsp__chk_cb_buf(1); + } + } + break; + + default: // unknown, just copy code + s = num + STBSP__NUMSZ - 1; + *s = f[0]; + l = 1; + fw = fl = 0; + lead[0] = 0; + tail[0] = 0; + pr = 0; + dp = 0; + cs = 0; + goto scopy; + } + ++f; + } +endfmt: + + if (!callback) + *bf = 0; + else + stbsp__flush_cb(); + +done: + return tlen + (int)(bf - buf); +} + +// cleanup +#undef STBSP__LEFTJUST +#undef STBSP__LEADINGPLUS +#undef STBSP__LEADINGSPACE +#undef STBSP__LEADING_0X +#undef STBSP__LEADINGZERO +#undef STBSP__INTMAX +#undef STBSP__TRIPLET_COMMA +#undef STBSP__NEGATIVE +#undef STBSP__METRIC_SUFFIX +#undef STBSP__NUMSZ +#undef stbsp__chk_cb_bufL +#undef stbsp__chk_cb_buf +#undef stbsp__flush_cb +#undef stbsp__cb_buf_clamp + +// ============================================================================ +// wrapper functions + +STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(sprintf)(char *buf, char const *fmt, ...) +{ + int result; + va_list va; + va_start(va, fmt); + result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); + va_end(va); + return result; +} + +typedef struct stbsp__context { + char *buf; + int count; + int length; + char tmp[STB_SPRINTF_MIN]; +} stbsp__context; + +static char *stbsp__clamp_callback(const char *buf, void *user, int len) +{ + stbsp__context *c = (stbsp__context *)user; + c->length += len; + + if (len > c->count) + len = c->count; + + if (len) { + if (buf != c->buf) { + const char *s, *se; + char *d; + d = c->buf; + s = buf; + se = buf + len; + do { + *d++ = *s++; + } while (s < se); + } + c->buf += len; + c->count -= len; + } + + if (c->count <= 0) + return c->tmp; + return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can +} + +static char * stbsp__count_clamp_callback( const char * buf, void * user, int len ) +{ + stbsp__context * c = (stbsp__context*)user; + (void) sizeof(buf); + + c->length += len; + return c->tmp; // go direct into buffer if you can +} + +STBSP__PUBLICDEF int STB_SPRINTF_DECORATE( vsnprintf )( char * buf, int count, char const * fmt, va_list va ) +{ + stbsp__context c; + + if ( (count == 0) && !buf ) + { + c.length = 0; + + STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); + } + else + { + int l; + + c.buf = buf; + c.count = count; + c.length = 0; + + STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__clamp_callback, &c, stbsp__clamp_callback(0,&c,0), fmt, va ); + + // zero-terminate + l = (int)( c.buf - buf ); + if ( l >= count ) // should never be greater, only equal (or less) than count + l = count - 1; + buf[l] = 0; + } + + return c.length; +} + +STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(snprintf)(char *buf, int count, char const *fmt, ...) +{ + int result; + va_list va; + va_start(va, fmt); + + result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); + va_end(va); + + return result; +} + +STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(vsprintf)(char *buf, char const *fmt, va_list va) +{ + return STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); +} + +// ======================================================================= +// low level float utility functions + +#ifndef STB_SPRINTF_NOFLOAT + +// copies d to bits w/ strict aliasing (this compiles to nothing on /Ox) +#define STBSP__COPYFP(dest, src) \ + { \ + int cn; \ + for (cn = 0; cn < 8; cn++) \ + ((char *)&dest)[cn] = ((char *)&src)[cn]; \ + } + +// get float info +static stbsp__int32 stbsp__real_to_parts(stbsp__int64 *bits, stbsp__int32 *expo, double value) +{ + double d; + stbsp__int64 b = 0; + + // load value and round at the frac_digits + d = value; + + STBSP__COPYFP(b, d); + + *bits = b & ((((stbsp__uint64)1) << 52) - 1); + *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); + + return (stbsp__int32)((stbsp__uint64) b >> 63); +} + +static double const stbsp__bot[23] = { + 1e+000, 1e+001, 1e+002, 1e+003, 1e+004, 1e+005, 1e+006, 1e+007, 1e+008, 1e+009, 1e+010, 1e+011, + 1e+012, 1e+013, 1e+014, 1e+015, 1e+016, 1e+017, 1e+018, 1e+019, 1e+020, 1e+021, 1e+022 +}; +static double const stbsp__negbot[22] = { + 1e-001, 1e-002, 1e-003, 1e-004, 1e-005, 1e-006, 1e-007, 1e-008, 1e-009, 1e-010, 1e-011, + 1e-012, 1e-013, 1e-014, 1e-015, 1e-016, 1e-017, 1e-018, 1e-019, 1e-020, 1e-021, 1e-022 +}; +static double const stbsp__negboterr[22] = { + -5.551115123125783e-018, -2.0816681711721684e-019, -2.0816681711721686e-020, -4.7921736023859299e-021, -8.1803053914031305e-022, 4.5251888174113741e-023, + 4.5251888174113739e-024, -2.0922560830128471e-025, -6.2281591457779853e-026, -3.6432197315497743e-027, 6.0503030718060191e-028, 2.0113352370744385e-029, + -3.0373745563400371e-030, 1.1806906454401013e-032, -7.7705399876661076e-032, 2.0902213275965398e-033, -7.1542424054621921e-034, -7.1542424054621926e-035, + 2.4754073164739869e-036, 5.4846728545790429e-037, 9.2462547772103625e-038, -4.8596774326570872e-039 +}; +static double const stbsp__top[13] = { + 1e+023, 1e+046, 1e+069, 1e+092, 1e+115, 1e+138, 1e+161, 1e+184, 1e+207, 1e+230, 1e+253, 1e+276, 1e+299 +}; +static double const stbsp__negtop[13] = { + 1e-023, 1e-046, 1e-069, 1e-092, 1e-115, 1e-138, 1e-161, 1e-184, 1e-207, 1e-230, 1e-253, 1e-276, 1e-299 +}; +static double const stbsp__toperr[13] = { + 8388608, + 6.8601809640529717e+028, + -7.253143638152921e+052, + -4.3377296974619174e+075, + -1.5559416129466825e+098, + -3.2841562489204913e+121, + -3.7745893248228135e+144, + -1.7356668416969134e+167, + -3.8893577551088374e+190, + -9.9566444326005119e+213, + 6.3641293062232429e+236, + -5.2069140800249813e+259, + -5.2504760255204387e+282 +}; +static double const stbsp__negtoperr[13] = { + 3.9565301985100693e-040, -2.299904345391321e-063, 3.6506201437945798e-086, 1.1875228833981544e-109, + -5.0644902316928607e-132, -6.7156837247865426e-155, -2.812077463003139e-178, -5.7778912386589953e-201, + 7.4997100559334532e-224, -4.6439668915134491e-247, -6.3691100762962136e-270, -9.436808465446358e-293, + 8.0970921678014997e-317 +}; + +#if defined(_MSC_VER) && (_MSC_VER <= 1200) +static stbsp__uint64 const stbsp__powten[20] = { + 1, + 10, + 100, + 1000, + 10000, + 100000, + 1000000, + 10000000, + 100000000, + 1000000000, + 10000000000, + 100000000000, + 1000000000000, + 10000000000000, + 100000000000000, + 1000000000000000, + 10000000000000000, + 100000000000000000, + 1000000000000000000, + 10000000000000000000U +}; +#define stbsp__tento19th ((stbsp__uint64)1000000000000000000) +#else +static stbsp__uint64 const stbsp__powten[20] = { + 1, + 10, + 100, + 1000, + 10000, + 100000, + 1000000, + 10000000, + 100000000, + 1000000000, + 10000000000ULL, + 100000000000ULL, + 1000000000000ULL, + 10000000000000ULL, + 100000000000000ULL, + 1000000000000000ULL, + 10000000000000000ULL, + 100000000000000000ULL, + 1000000000000000000ULL, + 10000000000000000000ULL +}; +#define stbsp__tento19th (1000000000000000000ULL) +#endif + +#define stbsp__ddmulthi(oh, ol, xh, yh) \ + { \ + double ahi = 0, alo, bhi = 0, blo; \ + stbsp__int64 bt; \ + oh = xh * yh; \ + STBSP__COPYFP(bt, xh); \ + bt &= ((~(stbsp__uint64)0) << 27); \ + STBSP__COPYFP(ahi, bt); \ + alo = xh - ahi; \ + STBSP__COPYFP(bt, yh); \ + bt &= ((~(stbsp__uint64)0) << 27); \ + STBSP__COPYFP(bhi, bt); \ + blo = yh - bhi; \ + ol = ((ahi * bhi - oh) + ahi * blo + alo * bhi) + alo * blo; \ + } + +#define stbsp__ddtoS64(ob, xh, xl) \ + { \ + double ahi = 0, alo, vh, t; \ + ob = (stbsp__int64)xh; \ + vh = (double)ob; \ + ahi = (xh - vh); \ + t = (ahi - xh); \ + alo = (xh - (ahi - t)) - (vh + t); \ + ob += (stbsp__int64)(ahi + alo + xl); \ + } + +#define stbsp__ddrenorm(oh, ol) \ + { \ + double s; \ + s = oh + ol; \ + ol = ol - (s - oh); \ + oh = s; \ + } + +#define stbsp__ddmultlo(oh, ol, xh, xl, yh, yl) ol = ol + (xh * yl + xl * yh); + +#define stbsp__ddmultlos(oh, ol, xh, yl) ol = ol + (xh * yl); + +static void stbsp__raise_to_power10(double *ohi, double *olo, double d, stbsp__int32 power) // power can be -323 to +350 +{ + double ph, pl; + if ((power >= 0) && (power <= 22)) { + stbsp__ddmulthi(ph, pl, d, stbsp__bot[power]); + } else { + stbsp__int32 e, et, eb; + double p2h, p2l; + + e = power; + if (power < 0) + e = -e; + et = (e * 0x2c9) >> 14; /* %23 */ + if (et > 13) + et = 13; + eb = e - (et * 23); + + ph = d; + pl = 0.0; + if (power < 0) { + if (eb) { + --eb; + stbsp__ddmulthi(ph, pl, d, stbsp__negbot[eb]); + stbsp__ddmultlos(ph, pl, d, stbsp__negboterr[eb]); + } + if (et) { + stbsp__ddrenorm(ph, pl); + --et; + stbsp__ddmulthi(p2h, p2l, ph, stbsp__negtop[et]); + stbsp__ddmultlo(p2h, p2l, ph, pl, stbsp__negtop[et], stbsp__negtoperr[et]); + ph = p2h; + pl = p2l; + } + } else { + if (eb) { + e = eb; + if (eb > 22) + eb = 22; + e -= eb; + stbsp__ddmulthi(ph, pl, d, stbsp__bot[eb]); + if (e) { + stbsp__ddrenorm(ph, pl); + stbsp__ddmulthi(p2h, p2l, ph, stbsp__bot[e]); + stbsp__ddmultlos(p2h, p2l, stbsp__bot[e], pl); + ph = p2h; + pl = p2l; + } + } + if (et) { + stbsp__ddrenorm(ph, pl); + --et; + stbsp__ddmulthi(p2h, p2l, ph, stbsp__top[et]); + stbsp__ddmultlo(p2h, p2l, ph, pl, stbsp__top[et], stbsp__toperr[et]); + ph = p2h; + pl = p2l; + } + } + } + stbsp__ddrenorm(ph, pl); + *ohi = ph; + *olo = pl; +} + +// given a float value, returns the significant bits in bits, and the position of the +// decimal point in decimal_pos. +/-INF and NAN are specified by special values +// returned in the decimal_pos parameter. +// frac_digits is absolute normally, but if you want from first significant digits (got %g and %e), or in 0x80000000 +static stbsp__int32 stbsp__real_to_str(char const **start, stbsp__uint32 *len, char *out, stbsp__int32 *decimal_pos, double value, stbsp__uint32 frac_digits) +{ + double d; + stbsp__int64 bits = 0; + stbsp__int32 expo, e, ng, tens; + + d = value; + STBSP__COPYFP(bits, d); + expo = (stbsp__int32)((bits >> 52) & 2047); + ng = (stbsp__int32)((stbsp__uint64) bits >> 63); + if (ng) + d = -d; + + if (expo == 2047) // is nan or inf? + { + *start = (bits & ((((stbsp__uint64)1) << 52) - 1)) ? "NaN" : "Inf"; + *decimal_pos = STBSP__SPECIAL; + *len = 3; + return ng; + } + + if (expo == 0) // is zero or denormal + { + if (((stbsp__uint64) bits << 1) == 0) // do zero + { + *decimal_pos = 1; + *start = out; + out[0] = '0'; + *len = 1; + return ng; + } + // find the right expo for denormals + { + stbsp__int64 v = ((stbsp__uint64)1) << 51; + while ((bits & v) == 0) { + --expo; + v >>= 1; + } + } + } + + // find the decimal exponent as well as the decimal bits of the value + { + double ph, pl; + + // log10 estimate - very specifically tweaked to hit or undershoot by no more than 1 of log10 of all expos 1..2046 + tens = expo - 1023; + tens = (tens < 0) ? ((tens * 617) / 2048) : (((tens * 1233) / 4096) + 1); + + // move the significant bits into position and stick them into an int + stbsp__raise_to_power10(&ph, &pl, d, 18 - tens); + + // get full as much precision from double-double as possible + stbsp__ddtoS64(bits, ph, pl); + + // check if we undershot + if (((stbsp__uint64)bits) >= stbsp__tento19th) + ++tens; + } + + // now do the rounding in integer land + frac_digits = (frac_digits & 0x80000000) ? ((frac_digits & 0x7ffffff) + 1) : (tens + frac_digits); + if ((frac_digits < 24)) { + stbsp__uint32 dg = 1; + if ((stbsp__uint64)bits >= stbsp__powten[9]) + dg = 10; + while ((stbsp__uint64)bits >= stbsp__powten[dg]) { + ++dg; + if (dg == 20) + goto noround; + } + if (frac_digits < dg) { + stbsp__uint64 r; + // add 0.5 at the right position and round + e = dg - frac_digits; + if ((stbsp__uint32)e >= 24) + goto noround; + r = stbsp__powten[e]; + bits = bits + (r / 2); + if ((stbsp__uint64)bits >= stbsp__powten[dg]) + ++tens; + bits /= r; + } + noround:; + } + + // kill long trailing runs of zeros + if (bits) { + stbsp__uint32 n; + for (;;) { + if (bits <= 0xffffffff) + break; + if (bits % 1000) + goto donez; + bits /= 1000; + } + n = (stbsp__uint32)bits; + while ((n % 1000) == 0) + n /= 1000; + bits = n; + donez:; + } + + // convert to string + out += 64; + e = 0; + for (;;) { + stbsp__uint32 n; + char *o = out - 8; + // do the conversion in chunks of U32s (avoid most 64-bit divides, worth it, constant denomiators be damned) + if (bits >= 100000000) { + n = (stbsp__uint32)(bits % 100000000); + bits /= 100000000; + } else { + n = (stbsp__uint32)bits; + bits = 0; + } + while (n) { + out -= 2; + *(stbsp__uint16 *)out = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; + n /= 100; + e += 2; + } + if (bits == 0) { + if ((e) && (out[0] == '0')) { + ++out; + --e; + } + break; + } + while (out != o) { + *--out = '0'; + ++e; + } + } + + *decimal_pos = tens; + *start = out; + *len = e; + return ng; +} + +#undef stbsp__ddmulthi +#undef stbsp__ddrenorm +#undef stbsp__ddmultlo +#undef stbsp__ddmultlos +#undef STBSP__SPECIAL +#undef STBSP__COPYFP + +#endif // STB_SPRINTF_NOFLOAT + +// clean up +#undef stbsp__uint16 +#undef stbsp__uint32 +#undef stbsp__int32 +#undef stbsp__uint64 +#undef stbsp__int64 +#undef STBSP__UNALIGNED + +#endif // STB_SPRINTF_IMPLEMENTATION + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ diff --git a/include/ulib/stdio.h b/include/ulib/stdio.h new file mode 100644 index 0000000..2e19b87 --- /dev/null +++ b/include/ulib/stdio.h @@ -0,0 +1,97 @@ +/* Standard I/O Library for Lume OS */ + +#ifndef _STDIO_H +#define _STDIO_H + +#include +#include "ulib/types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*Type Definition (Adjusted According to Architecture)*/ +#ifndef NULL +#define NULL ((void *)0) +#endif + +/*Macro definition*/ +#define EOF (-1) + +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +#define BUFSIZ 1024 + + +/* FILE structure */ +typedef struct +{ + int fd; + int flags; + int error; + int eof; + + char buffer[BUFSIZ]; + + int buf_write_pos; + + int buf_read_pos; + int buf_read_cnt; + + int buf_mode; +} FILE; + +/* standard stream object */ +extern FILE *stdin; +extern FILE *stdout; +extern FILE *stderr; + +/* Function Declaration */ + +/* File Operations */ +FILE *fopen(const char *filename, const char *mode); +int fclose(FILE *stream); +int fflush(FILE *stream); // Not implement + +/* Formatted input and output */ +int printf(const char *format, ...); +int scanf(const char *format, ...); +int sprintf(char *str, const char *format, ...); +int snprintf(char *str, uint64 size, const char *format, ...); +int vsnprintf(char *str, uint64 size, const char *format, va_list ap); +int sscanf(const char *str, const char *format, ...); + +int fprintf(FILE *stream, const char *format, ...); +int fscanf(FILE *stream, const char *format, ...); + +/* Character/String Read and Write */ +int fputc(int c, FILE *stream); +int fputs(const char *s, FILE *stream); +int fgetc(FILE *stream); +char *fgets(char *str, int n, FILE *stream); +int ungetc(int c, FILE *stream); + +/* Common Macros/Wrapper Functions */ +#define getchar() fgetc(stdin) +#define putchar(c) fputc((c), stdout) + +/* Binary read and write */ +uint64 fread(void *ptr, uint64 size, uint64 nmemb, FILE *stream); +uint64 fwrite(const void *ptr, uint64 size, uint64 nmemb, FILE *stream); + +/* File location */ +int fseek(FILE *stream, long offset, int whence); +long ftell(FILE *stream); +void rewind(FILE *stream); + +/* Status Inquiry */ +int feof(FILE *stream); +int ferror(FILE *stream); +void clearerr(FILE *stream); + +#ifdef __cplusplus +} +#endif +#endif /* _STDIO_H */ \ No newline at end of file diff --git a/include/ulib/stdlib.h b/include/ulib/stdlib.h new file mode 100644 index 0000000..7dc325e --- /dev/null +++ b/include/ulib/stdlib.h @@ -0,0 +1,95 @@ +#ifndef _STDLIB_H +#define _STDLIB_H + +#include "ulib/types.h" +#include "ulib/limits.h" +#include "ulib/errno.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifndef NULL +#define NULL ((void *)0) +#endif + +#define ERANGE 34 /* Math result not representable */ +#define ENOMEM 12 /* Out of memory */ + +#define EXIT_SUCCESS 0 +#define EXIT_FAILURE 1 +#define RAND_MAX 32767 +#define MB_CUR_MAX 1 + +typedef struct +{ + int quot; + int rem; +} div_t; +typedef struct +{ + long quot; + long rem; +} ldiv_t; +typedef struct +{ + long long quot; + long long rem; +} lldiv_t; + +typedef int (*__compar_fn_t)(const void *, const void *); + +/* Memory Management */ +void *malloc(size_t size); +void free(void *ptr); +void *calloc(size_t nmemb, size_t size); +void *realloc(void *ptr, size_t size); + +/* Process Control */ +int exit(int status); +void abort(void); +int atexit(void (*function)(void)); +char *getenv(const char *name); +int system(const char *command); + +/* String Conversion */ +int atoi(const char *nptr); +long atol(const char *nptr); +long long atoll(const char *nptr); +double atof(const char *nptr); + +long strtol(const char *nptr, char **endptr, int base); +unsigned long strtoul(const char *nptr, char **endptr, int base); +long long strtoll(const char *nptr, char **endptr, int base); +unsigned long long strtoull(const char *nptr, char **endptr, int base); + +double strtod(const char *nptr, char **endptr); +float strtof(const char *nptr, char **endptr); + +/* Search & Sort*/ +void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); +void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); + +/* Math & Mics */ +int abs(int j); +long labs(long j); +long long llabs(long long j); +div_t div(int numer, int denom); +ldiv_t ldiv(long numer, long denom); +lldiv_t lldiv(long long numer, long long denom); + +int rand(void); +void srand(unsigned int seed); + +int mblen(const char *s, size_t n); +int mbtowc(wchar_t *pwc, const char *s, size_t n); +int wctomb(char *s, wchar_t wchar); +size_t mbstowcs(wchar_t *dest, const char *src, size_t n); +size_t wcstombs(char *dest, const wchar_t *src, size_t n); + +#ifdef __cplusplus +} +#endif + +#endif /* _STDLIB_H */ \ No newline at end of file diff --git a/include/ulib/string.h b/include/ulib/string.h new file mode 100644 index 0000000..6e87157 --- /dev/null +++ b/include/ulib/string.h @@ -0,0 +1,70 @@ +#ifndef _STRING_H +#define _STRING_H + +#include "ulib/types.h" +#include "ulib/errno.h" + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned long long size_t; +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + + /* Memory Manipulation*/ + void *memcpy(void *dest, const void *src, size_t n); + + void *memmove(void *dest, const void *src, size_t n); + + void *memset(void *dest, int c, size_t n); + + int memcmp(const void *s1, const void *s2, size_t n); + + void *memchr(const void *s, int c, size_t n); + + /* String Manipulation */ + + size_t strlen(const char *s); + + char *strcpy(char *dest, const char *src); + + char *strncpy(char *dest, const char *src, size_t n); + + char *strcat(char *dest, const char *src); + + char *strncat(char *dest, const char *src, size_t n); + + int strcmp(const char *s1, const char *s2); + + int strncmp(const char *s1, const char *s2, size_t n); + + char *strchr(const char *s, int c); + + char *strrchr(const char *s, int c); + + char *strstr(const char *haystack, const char *needle); + + char *strdup(const char *s); + + size_t strlcpy(char *dest, const char *src, size_t size); + + size_t strlcat(char *dest, const char *src, size_t size); + + size_t strspn(const char *s, const char *accept); + + size_t strcspn(const char *s, const char *reject); + + char *strpbrk(const char *s, const char *accept); + + char *strtok(char *str, const char *delim); + + char *strerror(int errnum); + +#ifdef __cplusplus +} +#endif + +#endif /* _STRING_H */ \ No newline at end of file diff --git a/include/ulib/types.h b/include/ulib/types.h new file mode 100644 index 0000000..2f15bf1 --- /dev/null +++ b/include/ulib/types.h @@ -0,0 +1,21 @@ +#ifndef _ULIB_TYPES_H +#define _ULIB_TYPES_H + +#include "common/types.h" + +#ifndef _ULIB_ALIASES +#define _ULIB_ALIASES +typedef unsigned int uint; +typedef unsigned short ushort; +typedef unsigned char uchar; +#endif + +#ifndef NULL +#define NULL ((void *)0) +#endif + +#ifndef __cplusplus +typedef int wchar_t; +#endif + +#endif \ No newline at end of file diff --git a/src/drivers/uart.cc b/src/drivers/uart.cc index 9475d49..4064b16 100644 --- a/src/drivers/uart.cc +++ b/src/drivers/uart.cc @@ -183,7 +183,7 @@ namespace Drivers } // Echo back to user - uart_putc(c); + // uart_putc(c); if (VM::copyout(p->pagetable, target + target_idx, &c, 1) < 0) { diff --git a/src/fs/file.cc b/src/fs/file.cc index 48af49e..99bb65d 100644 --- a/src/fs/file.cc +++ b/src/fs/file.cc @@ -5,6 +5,9 @@ #include "kernel/proc.h" #define NFILE 100 +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 namespace FileTable { @@ -137,4 +140,41 @@ namespace FileTable } return -1; } + + int lseek(struct file *f, int offset, int whence) + { + if (f->type != FD_INODE) + return -1; + + VFS::ilock(f->ip); + + int new_off = f->off; + int size = f->ip->size; + + switch (whence) + { + case SEEK_SET: + new_off = offset; + break; + case SEEK_CUR: + new_off += offset; + break; + case SEEK_END: + new_off = size + offset; + break; + default: + VFS::iunlock(f->ip); + return -1; + } + + if (new_off < 0) + { + VFS::iunlock(f->ip); + return -1; + } + + f->off = new_off; + VFS::iunlock(f->ip); + return new_off; + } } // namespace FileTable diff --git a/src/fs/fs.cc b/src/fs/fs.cc index b2b91c2..c5a34ee 100644 --- a/src/fs/fs.cc +++ b/src/fs/fs.cc @@ -111,8 +111,10 @@ namespace VFS ip->lock.release(); } - static void iunlockput(Inode *ip) + void iunlockput(Inode *ip) { + if (!ip) + return; iunlock(ip); iput(ip); } diff --git a/src/kernel/main.cc b/src/kernel/main.cc index 9654c18..9a24028 100644 --- a/src/kernel/main.cc +++ b/src/kernel/main.cc @@ -5,6 +5,7 @@ #include "drivers/virtio.h" #include "kernel/pmm.h" #include "kernel/mm.h" +#include "kernel/slab.h" #include "kernel/proc.h" #include "kernel/trap.h" #include "kernel/timer.h" @@ -34,6 +35,7 @@ extern "C" void kernel_main(uint64 hartid, uint64 dtb) PMM::init(); // Physical Memory Management VM::kvminit(); // Kernel Pagetable VM::kvminithart(); // Enable MMU + Slab::init(); Trap::init(); // Trap Management Trap::inithart(); PLIC::init(); diff --git a/src/kernel/mm/pmm.cc b/src/kernel/mm/pmm.cc index 3474a49..e871d8a 100644 --- a/src/kernel/mm/pmm.cc +++ b/src/kernel/mm/pmm.cc @@ -75,7 +75,7 @@ namespace PMM uint64 kern_end_pa = PGROUNDUP((uint64)kernel_end); total_pages = (PHYSTOP - KERNBASE) / PGSIZE; - Drivers::uart_puts("PMM: Total RAM size: 128MB\n"); + Drivers::uart_puts(ANSI_GREEN "[PMM] Total RAM size: 128MB\n" ANSI_RESET); // Place the mem_map array // mem_map is located immediately after kernel_end mem_map = (struct Page*)kern_end_pa; @@ -83,17 +83,17 @@ namespace PMM uint64 mem_map_size = total_pages * sizeof(struct Page); uint64 free_mem_start = PGROUNDUP(kern_end_pa + mem_map_size); - Drivers::uart_puts("PMM: MemMap placed at: "); + Drivers::uart_puts(ANSI_GREEN "[PMM] MemMap placed at: " ); Drivers::print_hex((uint64)mem_map); - Drivers::uart_putc('\n'); + Drivers::uart_puts("\n" ANSI_RESET); - Drivers::uart_puts("PMM: Free memory starts at: "); + Drivers::uart_puts(ANSI_GREEN "[PMM] Free memory starts at: "); Drivers::print_hex(free_mem_start); - Drivers::uart_puts("\n"); + Drivers::uart_puts("\n" ANSI_RESET); if (free_mem_start >= PHYSTOP) { - Drivers::uart_puts("PMM: Error - Kernel too large, no memory left!\n"); + Drivers::uart_puts(ANSI_RED "[PMM] Error - Kernel too large, no memory left!\n" ANSI_RESET); while (1) ; } diff --git a/src/kernel/mm/vm.cc b/src/kernel/mm/vm.cc index 29e9eb7..41d1aa1 100644 --- a/src/kernel/mm/vm.cc +++ b/src/kernel/mm/vm.cc @@ -261,6 +261,8 @@ namespace VM return 0; } + int handle_cow_fault(uint64 *pagetable, uint64 va); + int copyout(uint64 *pagetable, uint64 dstva, char *src, uint64 len) { uint64 n, va0, pa0; @@ -273,6 +275,17 @@ namespace VM if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) return -1; + // Note: Maybe a bug + if (*pte & PTE_COW) + { + if (handle_cow_fault(pagetable, va0) < 0) + return -1; + // Re-walk because handle_cow_fault replaced the page mapping + pte = walk(pagetable, va0, 0); + if (pte == nullptr || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) + return -1; + } + pa0 = PTE2PA(*pte); n = PGSIZE - (dstva - va0); if (n > len) @@ -419,4 +432,20 @@ namespace VM sfence_vma(); Drivers::uart_puts("[Boot] MMU ENABLED! Using virtual addresses.\n"); } + + uint64 walkaddr(uint64 *pagetable, uint64 va) + { + uint64 *pte; + uint64 pa; + + if (va >= MAXVA) + return 0; + + pte = walk(pagetable, va, 0); + if (pte == 0 || (*pte & PTE_V) == 0 || (*pte & PTE_U) == 0) + return 0; + + pa = PTE2PA(*pte); + return pa; + } } \ No newline at end of file diff --git a/src/kernel/proc/exec.cc b/src/kernel/proc/exec.cc new file mode 100644 index 0000000..d0e75ef --- /dev/null +++ b/src/kernel/proc/exec.cc @@ -0,0 +1,210 @@ +#include "common/types.h" +#include "kernel/riscv.h" +#include "kernel/proc.h" +#include "kernel/mm.h" +#include "kernel/elf.h" +#include "fs/fs.h" +#include "lib/string.h" +#include "drivers/uart.h" +#include "kernel/trap.h" +#include "drivers/uart.h" + +extern char trampoline[]; + +// RAII: Page Table Resource Management +class VmGuard +{ +public: + uint64 *pagetable = nullptr; + uint64 sz = 0; + + VmGuard() : pagetable(VM::uvmcreate()) {} + + ~VmGuard() + { + if (pagetable) + { + VM::uvmfree(pagetable, sz); + } + } + + // Copying is prohibited + VmGuard(const VmGuard &) = delete; + VmGuard &operator=(const VmGuard &) = delete; + + // Submit resources: Ownership transfer, destructor no longer releases + uint64 *commit() + { + uint64 *pt = pagetable; + pagetable = nullptr; + return pt; + } +}; + +// RAII: Inode Lock Management +class InodeGuard +{ +public: + Inode *ip; + InodeGuard(Inode *i) : ip(i) + { + if (ip) + VFS::ilock(ip); + } + ~InodeGuard() + { + if (ip) + { + VFS::iunlockput(ip); // Automatically unlock and release references + } + } + // Copying is prohibited + InodeGuard(const InodeGuard &) = delete; + InodeGuard &operator=(const InodeGuard &) = delete; +}; + +// laod segment +static int loadseg(uint64 *pagetable, uint64 va, Inode *ip, uint64 offset, uint64 sz) +{ + for (uint64 i = 0; i < sz; i += PGSIZE) + { + uint64 pa = VM::walkaddr(pagetable, va + i); + if (pa == 0) + return -1; + + uint64 n = PGSIZE - (va + i) % PGSIZE; + if (i + n > sz) + n = sz - i; + + // Read physical address (isUser=0) + if (ip->read((char *)(pa + (va + i) % PGSIZE), offset + i, n, 0) != (int)n) + return -1; + } + return 0; +} + +namespace Exec +{ + int exec(char *path, char **argv) + { + // Get Inode + Inode *raw_ip = VFS::namei(path); + if (!raw_ip) + return -1; + InodeGuard iguard(raw_ip); + + // Get ELF head + struct elfhdr elf; + if (raw_ip->read((char *)&elf, 0, sizeof(elf), 0) != sizeof(elf)) + return -1; + if (elf.magic != ELF_MAGIC) + return -1; + // Create new pagetable + VmGuard vm_guard; + if (!vm_guard.pagetable) + return -1; + // Load Program Segment + struct proghdr ph; + for (int i = 0; i < elf.phnum; i++) + { + uint64 off = elf.phoff + i * sizeof(ph); + if (raw_ip->read((char *)&ph, off, sizeof(ph), 0) != sizeof(ph)) + return -1; + + if (ph.type != ELF_PROG_LOAD) + continue; + if (ph.memsz < ph.filesz) + return -1; + if (ph.vaddr + ph.memsz < ph.vaddr) + return -1; + + uint64 sz1 = VM::uvmalloc(vm_guard.pagetable, vm_guard.sz, ph.vaddr + ph.memsz, PTE_W | PTE_X | PTE_R | PTE_U); + if (sz1 == 0) + return -1; + vm_guard.sz = sz1; + + if (loadseg(vm_guard.pagetable, ph.vaddr, raw_ip, ph.off, ph.filesz) < 0) + return -1; + } + + // Prepare user stack + uint64 sz = PGROUNDUP(vm_guard.sz); + uint64 sz1 = VM::uvmalloc(vm_guard.pagetable, sz, sz + 2 * PGSIZE, PTE_W | PTE_R | PTE_U); + if (sz1 == 0) + return -1; + vm_guard.sz = sz1; + + VM::uvmunmap(vm_guard.pagetable, sz1 - 2 * PGSIZE, 1, 0); // protected pagetable + + uint64 sp = sz1; + uint64 stackbase = sp - PGSIZE; + uint64 ustack[32]; + uint64 argc = 0; + + // Push parameter string + for (; argv[argc]; argc++) + { + if (argc >= 31) + return -1; + sp -= strlen(argv[argc]) + 1; + sp -= sp % 16; + if (sp < stackbase) + return -1; + + if (VM::copyout(vm_guard.pagetable, sp, argv[argc], strlen(argv[argc]) + 1) < 0) + return -1; + ustack[argc] = sp; + } + ustack[argc] = 0; + + // Push into parameter array + sp -= (argc + 1) * sizeof(uint64); + sp -= sp % 16; + if (sp < stackbase) + return -1; + if (VM::copyout(vm_guard.pagetable, sp, (char *)ustack, (argc + 1) * sizeof(uint64)) < 0) + return -1; + + // Commit Changes + struct Proc *p = myproc(); + if (VM::mappages(vm_guard.pagetable, TRAPFRAME, PGSIZE, (uint64)p->tf, PTE_R | PTE_W) < 0) + return -1; + + uint64 oldsz = p->sz; + uint64 *oldpagetable = p->pagetable; + + // setup Trapframe + p->tf->a0 = argc; + p->tf->a1 = sp; + p->tf->sp = sp; + p->tf->epc = elf.entry; + + // update process name + char *s = path, *last = path; + while (*s) + { + if (*s == '/') + last = s + 1; + s++; + } + // memmove(p->name, last, sizeof(p->name)); + size_t len = 0; + while (last[len] && len < sizeof(p->name) - 1) + { + p->name[len] = last[len]; + len++; + } + p->name[len] = '\0'; + + // change pagetable + p->pagetable = vm_guard.commit(); + p->sz = vm_guard.sz; + + // release old pagetable + VM::uvmfree(oldpagetable, oldsz); + + asm volatile("fence.i"); + + return 0; // iguard unlocks and releases IP upon destruction + } +} \ No newline at end of file diff --git a/src/kernel/syscall.cc b/src/kernel/syscall.cc index afa20a1..6af7730 100644 --- a/src/kernel/syscall.cc +++ b/src/kernel/syscall.cc @@ -8,10 +8,16 @@ #include "kernel/timer.h" #include "kernel/mm.h" #include "kernel/trap.h" +#include "kernel/slab.h" #include "fs/fat32.h" #include "fs/file.h" +#include "lib/string.h" extern "C++" int fork(); +namespace Exec +{ + int exec(char *path, char **argv); +} namespace ProcManager { @@ -54,6 +60,34 @@ static int argstr(int n, char *buf, int max) return VM::copyinstr(myproc()->pagetable, buf, addr, max); } +struct KernelArgv +{ + static const int MAX_ARGS = 32; + static const int MAX_ARG_LEN = 128; + + char *args[MAX_ARGS]; + + KernelArgv() + { + memset(args, 0, sizeof(args)); + } + + ~KernelArgv() + { + for (int i = 0; i < MAX_ARGS; i++) + { + if (args[i]) + { + Slab::kfree(args[i]); + args[i] = nullptr; + } + } + } + + KernelArgv(const KernelArgv &) = delete; + KernelArgv &operator=(const KernelArgv &) = delete; +}; + static int fdalloc(struct file *f) { struct Proc *p = myproc(); @@ -125,6 +159,53 @@ static uint64 sys_close() return 0; } +static uint64 sys_exec() +{ + char path[128]; + uint64 uargv_ptr; + + if (argstr(0, path, sizeof(path)) < 0) + { + return -1; + } + + if (argint(1, (int *)&uargv_ptr) < 0) + { + return -1; + } + + KernelArgv kargv; + + for (int i = 0; i < KernelArgv::MAX_ARGS; ++i) + { + uint64 uarg_str_ptr; + + if (VM::copyin(myproc()->pagetable, (char *)&uarg_str_ptr, uargv_ptr + i * sizeof(uint64), sizeof(uint64)) < 0) + { + return -1; + } + + if (uarg_str_ptr == 0) + { + kargv.args[i] = nullptr; + break; + } + + kargv.args[i] = (char *)Slab::kmalloc(KernelArgv::MAX_ARG_LEN); + if (kargv.args[i] == nullptr) + { + return -1; + } + + if (VM::copyinstr(myproc()->pagetable, kargv.args[i], uarg_str_ptr, KernelArgv::MAX_ARG_LEN) < 0) + { + return -1; + } + } + + return Exec::exec(path, kargv.args); +} + static uint64 sys_exit() { int n; @@ -255,6 +336,19 @@ static uint64 sys_disk_test() return 0; } +static uint64 sys_lseek() +{ + int fd, offset, whence; + if (argint(0, &fd) < 0 || argint(1, &offset) < 0 || argint(2, &whence) < 0) + return -1; + + struct Proc *p = myproc(); + if (fd < 0 || fd >= NOFILE || p->ofile[fd] == 0) + return -1; + + return FileTable::lseek(p->ofile[fd], offset, whence); +} + void syscall() { Proc *p = myproc(); @@ -286,6 +380,13 @@ void syscall() case SYS_fork: ret = sys_fork(); break; + case SYS_exec: + ret = sys_exec(); + if (ret != static_cast(-1)) + { + return; + } + break; case SYS_exit: ret = sys_exit(); break; @@ -301,6 +402,20 @@ void syscall() case SYS_disk_test: ret = sys_disk_test(); break; + case SYS_lseek: + ret = sys_lseek(); + break; + case SYS_pipe: + case SYS_dup: + case SYS_chdir: + case SYS_fstat: + case SYS_mkdir: + case SYS_mknod: + case SYS_unlink: + case SYS_link: + Drivers::uart_puts("Unimplemented syscall\n"); + ret = static_cast(-1); + break; default: Drivers::uart_puts("Unknown Syscall ID: "); Drivers::print_hex(num); diff --git a/src/kernel/trap/handler.cc b/src/kernel/trap/handler.cc index c1626cc..3e73213 100644 --- a/src/kernel/trap/handler.cc +++ b/src/kernel/trap/handler.cc @@ -157,6 +157,12 @@ extern "C" void usertrap() } else if (scause == 15) // Store Page Fault { + uint64 pte = VM::walkaddr(p->pagetable, stval); + + // Drivers::uart_puts("[Debug] Faulting PTE:"); + // Drivers::print_hex(pte); + // Drivers::uart_puts("\n"); + if (VM::handle_cow_fault(p->pagetable, PGROUNDDOWN(stval)) != 0) { Drivers::uart_puts("usertrap: cow failed at "); diff --git a/src/ulib/assert.c b/src/ulib/assert.c new file mode 100644 index 0000000..ca2da84 --- /dev/null +++ b/src/ulib/assert.c @@ -0,0 +1,8 @@ +#include "stdio.h" +#include "stdlib.h" + +void __assert_fail(const char *expr, const char *file, int line, const char *func) +{ + fprintf(stderr, "Assertion failed: %s (%s: %s: %d)\n", expr, file, func, line); + abort(); +} \ No newline at end of file diff --git a/src/ulib/cxx.cc b/src/ulib/cxx.cc new file mode 100644 index 0000000..6c892ab --- /dev/null +++ b/src/ulib/cxx.cc @@ -0,0 +1,31 @@ +#include "ulib/stdlib.h" + +void *operator new(unsigned long n) +{ + return malloc(n); +} + +void *operator new[](unsigned long n) +{ + return malloc(n); +} + +void operator delete(void *p) +{ + free(p); +} + +void operator delete[](void *p) +{ + free(p); +} + +void operator delete(void *p, unsigned long) +{ + free(p); +} + +void operator delete[](void *p, unsigned long) +{ + free(p); +} \ No newline at end of file diff --git a/src/ulib/iostream.cpp b/src/ulib/iostream.cpp new file mode 100644 index 0000000..d5394f9 --- /dev/null +++ b/src/ulib/iostream.cpp @@ -0,0 +1,8 @@ +#include "ulib/iostream" + +namespace std +{ + istream cin(stdin); + ostream cout(stdout); + ostream cerr(stderr); +} // namespace std diff --git a/src/ulib/stdio.c b/src/ulib/stdio.c new file mode 100644 index 0000000..f8e7a9a --- /dev/null +++ b/src/ulib/stdio.c @@ -0,0 +1,1052 @@ +#include "ulib/stdio.h" +#include "ulib/string.h" +#include "ulib/stdlib.h" + +/* Include STB Sprintf Implementation */ +#define STB_SPRINTF_IMPLEMENTATION +#include "ulib/stb_sprintf.h" + +const int STDIN_FD = 0; +const int STDOUT_FD = 1; +const int STDERR_FD = 2; + + + +extern int open(const char *path, int flags); +extern int close(int fd); +extern int read(int fd, void *buf, uint64 count); +extern int write(int fd, const void *buf, uint64 count); +extern int lseek(int fd, int offset, int whence); + +static int isspace(int c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; +} + +/* Core Formatting Implementation */ + +static int _ul_to_str_invert(char *buf, uint64 val, int base, int uppercase) +{ + int i = 0; + const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; + if (val == 0) + { + buf[i++] = '0'; + return i; + } + while (val != 0) + { + buf[i++] = digits[val % base]; + val /= base; + } + return i; +} + +typedef struct +{ + char *buf; + uint64 limit; + uint64 written; + FILE *stream; +} _OutContext; + +static void _out_char(_OutContext *ctx, char c) +{ + if (ctx->stream) + { + fputc(c, ctx->stream); + ctx->written++; + } + else + { + if (ctx->limit > 0 && ctx->written < ctx->limit - 1) + { + ctx->buf[ctx->written] = c; + } + ctx->written++; + } +} + +static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) +{ + const char *p = format; + char num_buf[32]; + + while (*p) + { + if (*p != '%') + { + _out_char(ctx, *p++); + continue; + } + p++; + + int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0; + while (1) + { + if (*p == '-') + flag_left = 1; + else if (*p == '0') + flag_zero = 1; + else if (*p == '+') + flag_plus = 1; + else if (*p == ' ') + flag_space = 1; + else if (*p == '#') + flag_hash = 1; + else + break; + p++; + } + + int width = 0; + if (*p == '*') + { + width = va_arg(ap, int); + if (width < 0) + { + flag_left = 1; + width = -width; + } + p++; + } + else + { + while (*p >= '0' && *p <= '9') + { + width = width * 10 + (*p - '0'); + p++; + } + } + + int precision = -1; + if (*p == '.') + { + p++; + if (*p == '*') + { + precision = va_arg(ap, int); + p++; + } + else + { + precision = 0; + while (*p >= '0' && *p <= '9') + { + precision = precision * 10 + (*p - '0'); + p++; + } + } + } + + int len_mod = 0; + if (*p == 'l') + { + len_mod = 1; + p++; + if (*p == 'l') + { + len_mod = 2; + p++; + } + } + else if (*p == 'z') + { + len_mod = 2; + p++; + } + + char spec = *p++; + if (!spec) + break; + + if (spec == 'd' || spec == 'i' || spec == 'u' || spec == 'x' || spec == 'X' || spec == 'p') + { + uint64 val; + int is_signed = (spec == 'd' || spec == 'i'); + int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; + + if (spec == 'p') + val = (uint64)va_arg(ap, void *); + else if (len_mod == 2) + val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); + else if (len_mod == 1) + val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); + else + val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); + + char sign_char = 0; + if (is_signed) + { + int64 sval = (int64)val; + if (sval < 0) + { + sign_char = '-'; + val = (uint64)(-sval); + } + else if (flag_plus) + sign_char = '+'; + else if (flag_space) + sign_char = ' '; + } + + int digit_len = _ul_to_str_invert(num_buf, val, base, (spec == 'X')); + if (precision >= 0) + flag_zero = 0; + int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; + if (precision == 0 && val == 0) + digit_len = 0; + + int prefix_len = sign_char ? 1 : 0; + char *prefix_str = NULL; + if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) + { + prefix_str = (spec == 'X') ? "0X" : "0x"; + prefix_len += 2; + } + + int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; + + if (!flag_left && !flag_zero) + for (int i = 0; i < padding; i++) + _out_char(ctx, ' '); + if (sign_char) + _out_char(ctx, sign_char); + if (prefix_str) + { + _out_char(ctx, prefix_str[0]); + _out_char(ctx, prefix_str[1]); + } + int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0); + for (int i = 0; i < total_zeros; i++) + _out_char(ctx, '0'); + for (int i = digit_len - 1; i >= 0; i--) + _out_char(ctx, num_buf[i]); + if (flag_left) + for (int i = 0; i < padding; i++) + _out_char(ctx, ' '); + } + else if (spec == 'f' || spec == 'F' || spec == 'e' || spec == 'E' || spec == 'g' || spec == 'G') + { + char fmt_tmp[32]; + int f_idx = 0; + fmt_tmp[f_idx++] = '%'; + if (flag_left) + fmt_tmp[f_idx++] = '-'; + if (flag_zero) + fmt_tmp[f_idx++] = '0'; + if (flag_plus) + fmt_tmp[f_idx++] = '+'; + if (flag_space) + fmt_tmp[f_idx++] = ' '; + if (flag_hash) + fmt_tmp[f_idx++] = '#'; + if (width > 0) + f_idx += sprintf(&fmt_tmp[f_idx], "%d", width); + if (precision >= 0) + f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision); + fmt_tmp[f_idx++] = spec; + fmt_tmp[f_idx] = '\0'; + double f_val = va_arg(ap, double); + char f_buf[128]; + stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); + for (int i = 0; f_buf[i] != '\0'; i++) + _out_char(ctx, f_buf[i]); + } + else if (spec == 's') + { + const char *s = va_arg(ap, char *); + if (!s) + s = "(null)"; + int len = 0; + const char *tmp = s; + while (*tmp && (precision < 0 || len < precision)) + { + tmp++; + len++; + } + int padding = (width > len) ? width - len : 0; + if (!flag_left) + for (int i = 0; i < padding; i++) + _out_char(ctx, ' '); + for (int i = 0; i < len; i++) + _out_char(ctx, s[i]); + if (flag_left) + for (int i = 0; i < padding; i++) + _out_char(ctx, ' '); + } + else if (spec == 'c') + { + char c = (char)va_arg(ap, int); + int padding = (width > 1) ? width - 1 : 0; + if (!flag_left) + for (int i = 0; i < padding; i++) + _out_char(ctx, ' '); + _out_char(ctx, c); + if (flag_left) + for (int i = 0; i < padding; i++) + _out_char(ctx, ' '); + } + else + { + _out_char(ctx, '%'); + if (spec != '%') + _out_char(ctx, spec); + } + } + return (int)ctx->written; +} + +int vsnprintf(char *str, uint64 size, const char *format, va_list ap) +{ + _OutContext ctx; + ctx.buf = str; + ctx.limit = size; + ctx.written = 0; + ctx.stream = NULL; + _vprintf_core(&ctx, format, ap); + if (size > 0) + { + if (ctx.written < size) + str[ctx.written] = '\0'; + else + str[size - 1] = '\0'; + } + return (int)ctx.written; +} +int snprintf(char *str, uint64 size, const char *format, ...) +{ + va_list ap; + va_start(ap, format); + int ret = vsnprintf(str, size, format, ap); + va_end(ap); + return ret; +} +int sprintf(char *str, const char *format, ...) +{ + va_list ap; + va_start(ap, format); + int ret = vsnprintf(str, (uint64)-1, format, ap); + va_end(ap); + return ret; +} +int printf(const char *format, ...) +{ + va_list ap; + va_start(ap, format); + _OutContext ctx; + ctx.buf = NULL; + ctx.limit = 0; + ctx.written = 0; + ctx.stream = stdout; + _vprintf_core(&ctx, format, ap); + va_end(ap); + return (int)ctx.written; +} + +/* Core Function Implementation */ + +typedef struct +{ + const char *buf; + int fd; + uint64 pos; + int ungotten; +} _InContext; + +static int _in_char(_InContext *ctx) +{ + if (ctx->ungotten >= 0) + { + int c = ctx->ungotten; + ctx->ungotten = -1; + return c; + } + if (ctx->fd == -1) + { + if (ctx->buf[ctx->pos] == '\0') + return -1; + return (unsigned char)ctx->buf[ctx->pos++]; + } + char c; + if (read(ctx->fd, &c, 1) == 1) + return (unsigned char)c; + return -1; +} + +static void _unget_char(_InContext *ctx, int c) +{ + if (c != -1) + ctx->ungotten = c; +} +static void _skip_space(_InContext *ctx) +{ + int c; + while ((c = _in_char(ctx)) != -1) + { + if (!isspace(c)) + { + _unget_char(ctx, c); + break; + } + } +} + +static double _simple_strtod(const char *str, char **endptr) +{ + double val = 0.0; + int sign = 1; + if (*str == '-') + { + sign = -1; + str++; + } + else if (*str == '+') + str++; + while (*str >= '0' && *str <= '9') + { + val = val * 10.0 + (*str - '0'); + str++; + } + if (*str == '.') + { + str++; + double div = 10.0; + while (*str >= '0' && *str <= '9') + { + val += (*str - '0') / div; + div *= 10.0; + str++; + } + } + if (*str == 'e' || *str == 'E') + { + str++; + int esign = 1; + if (*str == '-') + { + esign = -1; + str++; + } + else if (*str == '+') + str++; + int eval = 0; + while (*str >= '0' && *str <= '9') + { + eval = eval * 10 + (*str - '0'); + str++; + } + double p = 1.0; + while (eval--) + p *= 10.0; + if (esign == 1) + val *= p; + else + val /= p; + } + if (endptr) + *endptr = (char *)str; + return sign * val; +} + +static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) +{ + int assigned = 0; + const char *p = format; + while (*p) + { + if (isspace(*p)) + { + _skip_space(ctx); + while (isspace(*p)) + p++; + continue; + } + if (*p != '%') + { + _skip_space(ctx); + int c = _in_char(ctx); + if (c != *p) + { + _unget_char(ctx, c); + return assigned; + } + p++; + continue; + } + p++; + int suppress = 0; + if (*p == '*') + { + suppress = 1; + p++; + } + int width = -1; + while (*p >= '0' && *p <= '9') + { + if (width == -1) + width = 0; + width = width * 10 + (*p - '0'); + p++; + } + int len_mod = 0; + if (*p == 'l') + { + len_mod = 1; + p++; + if (*p == 'l') + { + len_mod = 2; + p++; + } + } + else if (*p == 'h') + { + p++; + if (*p == 'h') + p++; + } + char spec = *p++; + if (!spec) + break; + + if (spec == 'd' || spec == 'i' || spec == 'u' || spec == 'x') + { + _skip_space(ctx); + char num_buf[64]; + int i = 0, c = _in_char(ctx); + if (c == '-' || c == '+') + { + num_buf[i++] = (char)c; + c = _in_char(ctx); + } + int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); + while (c != -1 && i < 63) + { + int digit = (c >= '0' && c <= '9'); + int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); + int x = (c == 'x' || c == 'X'); + if (base == 0 && i == 1 && num_buf[0] == '0' && x) + base = 16; + if (width > 0 && i >= width) + break; + if (digit || hex || x) + { + num_buf[i++] = (char)c; + c = _in_char(ctx); + } + else + break; + } + num_buf[i] = '\0'; + _unget_char(ctx, c); + if (i == 0) + return assigned; + if (!suppress) + { + int64 val = strtoll(num_buf, NULL, base); + if (len_mod == 2) + *va_arg(ap, int64 *) = val; + else if (len_mod == 1) + *va_arg(ap, long *) = (long)val; + else + *va_arg(ap, int *) = (int)val; + assigned++; + } + } + else if (spec == 'f' || spec == 'F' || spec == 'e' || spec == 'E' || spec == 'g' || spec == 'G') + { + _skip_space(ctx); + char num_buf[64]; + int i = 0, c = _in_char(ctx); + if (c == '-' || c == '+') + { + num_buf[i++] = (char)c; + c = _in_char(ctx); + } + while (c != -1 && i < 63) + { + if ((c >= '0' && c <= '9') || c == '.' || c == 'e' || c == 'E' || c == '+' || c == '-') + { + num_buf[i++] = (char)c; + c = _in_char(ctx); + } + else + break; + } + num_buf[i] = '\0'; + _unget_char(ctx, c); + if (i == 0) + return assigned; + if (!suppress) + { + double val = _simple_strtod(num_buf, NULL); + if (len_mod == 1) + *va_arg(ap, double *) = val; + else + *va_arg(ap, float *) = (float)val; + assigned++; + } + } + else if (spec == 's') + { + _skip_space(ctx); + char *buf = suppress ? NULL : va_arg(ap, char *); + int i = 0, c = _in_char(ctx); + while (c != -1 && !isspace(c)) + { + if (width > 0 && i >= width) + break; + if (!suppress) + buf[i] = (char)c; + i++; + c = _in_char(ctx); + } + if (!suppress) + buf[i] = '\0'; + _unget_char(ctx, c); + if (i > 0 && !suppress) + assigned++; + } + else if (spec == 'c') + { + int count = (width > 0) ? width : 1; + char *buf = suppress ? NULL : va_arg(ap, char *); + for (int i = 0; i < count; i++) + { + int c = _in_char(ctx); + if (c == -1) + return assigned; + if (!suppress) + buf[i] = (char)c; + } + if (!suppress) + assigned++; + } + } + return assigned; +} + +int sscanf(const char *str, const char *format, ...) +{ + va_list ap; + va_start(ap, format); + _InContext ctx; + ctx.buf = str; + ctx.fd = -1; + ctx.pos = 0; + ctx.ungotten = -1; + int ret = _vscanf_core(&ctx, format, ap); + va_end(ap); + return ret; +} +int scanf(const char *format, ...) +{ + va_list ap; + va_start(ap, format); + _InContext ctx; + ctx.buf = NULL; + ctx.fd = STDIN_FD; + ctx.pos = 0; + ctx.ungotten = -1; + int ret = _vscanf_core(&ctx, format, ap); + va_end(ap); + return ret; +} + +/* FILE Stream Implementation */ + +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_RDWR 02 +#define O_CREAT 0100 +#define O_TRUNC 01000 +#define O_APPEND 02000 + + +static FILE _stdin = {.fd = 0, .buf_mode = 1}; +static FILE _stdout = {.fd = 1, .buf_mode = 1}; +static FILE _stderr = {.fd = 2, .buf_mode = 2}; + +FILE *stdin = &_stdin; +FILE *stdout = &_stdout; +FILE *stderr = &_stderr; + +FILE *fopen(const char *filename, const char *mode) +{ + int flags = 0; + if (strcmp(mode, "r") == 0) + flags = O_RDONLY; + else if (strcmp(mode, "w") == 0) + flags = O_WRONLY | O_CREAT | O_TRUNC; + else if (strcmp(mode, "a") == 0) + flags = O_WRONLY | O_CREAT | O_APPEND; + else if (strcmp(mode, "r+") == 0) + flags = O_RDWR; + else + return NULL; + + int64 fd = open(filename, flags); + if (fd < 0) + return NULL; + + FILE *f = (FILE *)malloc(sizeof(FILE)); + if (!f) + { + close(fd); + return NULL; + } + + memset(f, 0, sizeof(FILE)); + f->fd = (int)fd; + f->flags = flags; + + if (fd == 1) + f->buf_mode = 1; + else if (fd == 2) + f->buf_mode = 2; + else + f->buf_mode = 0; + return f; +} + +int fclose(FILE *stream) +{ + if (!stream) + return -1; + fflush(stream); + if (stream != stdin && stream != stdout && stream != stderr) + { + close(stream->fd); + free(stream); + } + return 0; +} + +int fflush(FILE *stream) +{ + if (!stream) + return EOF; + + if (stream->buf_write_pos > 0) + { + int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); + if (ret < stream->buf_write_pos) + { + stream->error = 1; + stream->buf_write_pos = 0; + return EOF; + } + stream->buf_write_pos = 0; + } + return 0; +} + +int fprintf(FILE *stream, const char *format, ...) +{ + if (!stream) + return -1; + va_list ap; + va_start(ap, format); + _OutContext ctx; + ctx.buf = NULL; + ctx.limit = 0; + ctx.written = 0; + ctx.stream = stream; + _vprintf_core(&ctx, format, ap); + va_end(ap); + return (int)ctx.written; +} + +int fscanf(FILE *stream, const char *format, ...) +{ + if (!stream) + return -1; + va_list ap; + va_start(ap, format); + _InContext ctx; + ctx.buf = NULL; + ctx.fd = stream->fd; + ctx.pos = 0; + ctx.ungotten = -1; + int ret = _vscanf_core(&ctx, format, ap); + va_end(ap); + return ret; +} + +int fputc(int c, FILE *stream) +{ + if (!stream) + return EOF; + if (stream->buf_mode == 2) + { + char ch = (char)c; + if (write(stream->fd, &ch, 1) != 1) + { + stream->error = 1; + return EOF; + } + return c; + } + + stream->buffer[stream->buf_write_pos++] = (char)c; + + if (stream->buf_write_pos >= BUFSIZ) + { + fflush(stream); + } + else if (stream->buf_mode == 1 && c == '\n') + { + fflush(stream); + } + + return c; +} + +int fputs(const char *s, FILE *stream) +{ + if (!stream) + return -1; + while (*s) + { + if (fputc(*s++, stream) == EOF) + return EOF; + } + return 0; +} + +int fgetc(FILE *stream) +{ + if (!stream) + return EOF; + + if (stream->buf_write_pos > 0) + { + fflush(stream); + } + + if (stream->buf_read_pos < stream->buf_read_cnt) + { + return (unsigned char)stream->buffer[stream->buf_read_pos++]; + } + + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + if (ret <= 0) + { + if (ret == 0) + stream->eof = 1; + else + stream->error = 1; + return EOF; + } + + stream->buf_read_cnt = (int)ret; + stream->buf_read_pos = 0; + return (unsigned char)stream->buffer[stream->buf_read_pos++]; +} + +char *fgets(char *str, int n, FILE *stream) +{ + if (!stream || n <= 0) + return NULL; + int i = 0, c; + while (i < n - 1) + { + c = fgetc(stream); + if (c == -1) + { + if (i == 0) + return NULL; + break; + } + str[i++] = (char)c; + if (c == '\n') + break; + } + str[i] = '\0'; + return str; +} + +uint64 fread(void *ptr, uint64 size, uint64 nmemb, FILE *stream) +{ + if (!stream || size == 0 || nmemb == 0) + return 0; + + uint64 total_bytes = size * nmemb; + uint64 bytes_read = 0; + char *dst = (char *)ptr; + + if (stream->buf_write_pos > 0) + fflush(stream); + + while (bytes_read < total_bytes) + { + if (stream->buf_read_pos < stream->buf_read_cnt) + { + uint64 available = stream->buf_read_cnt - stream->buf_read_pos; + uint64 remaining = total_bytes - bytes_read; + uint64 to_copy = (available < remaining) ? available : remaining; + + memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); + + stream->buf_read_pos += to_copy; + bytes_read += to_copy; + } + else + { + uint64 remaining = total_bytes - bytes_read; + + if (remaining >= BUFSIZ) + { + int64 ret = read(stream->fd, dst + bytes_read, remaining); + if (ret <= 0) + { + if (ret == 0) + stream->eof = 1; + else + stream->error = 1; + return bytes_read / size; + } + bytes_read += ret; + } + else + { + stream->buf_read_pos = 0; + stream->buf_read_cnt = 0; + int64 ret = read(stream->fd, stream->buffer, BUFSIZ); + + if (ret <= 0) + { + if (ret == 0) + stream->eof = 1; + else + stream->error = 1; + return bytes_read / size; + } + stream->buf_read_cnt = (int)ret; + } + } + } + return bytes_read / size; +} + +uint64 fwrite(const void *ptr, uint64 size, uint64 nmemb, FILE *stream) +{ + if (!stream || !ptr || size == 0 || nmemb == 0) + return 0; + uint64 total_bytes = size * nmemb; + const char *src = (const char *)ptr; + uint64 bytes_written = 0; + + if (stream->buf_mode == 2) + { + while (bytes_written < total_bytes) + { + int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written); + if (ret <= 0) + { + stream->error = 1; + break; + } + bytes_written += ret; + } + return bytes_written / size; + } + + while (bytes_written < total_bytes) + { + uint64 space_left = BUFSIZ - stream->buf_write_pos; + uint64 remaining = total_bytes - bytes_written; + + if (remaining <= space_left) + { + memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); + stream->buf_write_pos += remaining; + bytes_written += remaining; + if (stream->buf_write_pos == BUFSIZ) + fflush(stream); + } + else + { + memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); + stream->buf_write_pos += space_left; + bytes_written += space_left; + fflush(stream); + } + } + + return bytes_written / size; +} + +int fseek(FILE *stream, long offset, int whence) +{ + if (!stream) + return -1; + + if (stream->buf_write_pos > 0) + { + fflush(stream); + } + stream->buf_read_pos = 0; + stream->buf_read_cnt = 0; + stream->eof = 0; + + if (lseek(stream->fd, offset, whence) < 0) + { + stream->error = 1; + return -1; + } + return 0; +} +long ftell(FILE *stream) +{ + if (!stream) + return -1L; + int64 ret = lseek(stream->fd, 0, SEEK_CUR); + if (ret < 0) + { + stream->error = 1; + return -1L; + } + return (long)ret; +} +void rewind(FILE *stream) +{ + if (stream) + { + fseek(stream, 0, SEEK_SET); + stream->error = 0; + } +} + +int feof(FILE *stream) +{ + return (stream) ? stream->eof : 1; +} +int ferror(FILE *stream) +{ + return (stream) ? stream->error : 1; +} +void clearerr(FILE *stream) +{ + if (stream) + { + stream->error = 0; + stream->eof = 0; + } +} + +int ungetc(int c, FILE *stream) +{ + if (!stream || c == EOF) + return EOF; + + if (stream->buf_read_pos > 0) + { + stream->buf_read_pos--; + stream->buffer[stream->buf_read_pos] = (char)c; + stream->eof = 0; + return c; + } + return EOF; +} \ No newline at end of file diff --git a/src/ulib/stdlib.c b/src/ulib/stdlib.c new file mode 100644 index 0000000..30aa3a9 --- /dev/null +++ b/src/ulib/stdlib.c @@ -0,0 +1,540 @@ +#include "ulib/stdlib.h" +#include "ulib/string.h" +#include "ulib/ctypes.h" + +extern int sys_exit(int status); +extern void *sbrk(long increment); + +#undef errno +int errno = 0; + +#define ATEXIT_MAX 32 +static void (*__atexit_funcs[ATEXIT_MAX])(void); +static int __atexit_func_count = 0; + +int atexit(void (*function)(void)) +{ + if (__atexit_func_count >= ATEXIT_MAX) + return -1; + __atexit_funcs[__atexit_func_count++] = function; + return 0; +} + +int exit(int status) +{ + while (__atexit_func_count > 0) + { + (__atexit_funcs[--__atexit_func_count])(); + } + sys_exit(status); + + while (1) + ; + return 0; +} + +void abort(void) +{ + exit(127); +} + +char *getenv(const char *name) +{ + /* None */ + return NULL; +} + +int system(const char *command) +{ + /* None */ + return -1; +} + +/* Memory Management */ +#define ALIGNMENT 16 +#define ALIGN(size) (((size) + (ALIGNMENT - 1)) & ~(ALIGNMENT - 1)) + +typedef struct header +{ + size_t size; + struct header *next; +} header_t; + +static header_t base; +static header_t *freep = NULL; + + +#define LOCK() +#define UNLOCK() + +void free(void *ptr) +{ + header_t *bp, *p; + + if (!ptr) + return; + + + bp = (header_t *)ptr - 1; + + LOCK(); + + + for (p = freep; !(bp > p && bp < p->next); p = p->next) + { + if (p >= p->next && (bp > p || bp < p->next)) + break; + } + + if ((char *)bp + bp->size == (char *)p->next) + { + bp->size += p->next->size; + bp->next = p->next->next; + } + else + { + bp->next = p->next; + } + + if ((char *)p + p->size == (char *)bp) + { + p->size += bp->size; + p->next = bp->next; + } + else + { + p->next = bp; + } + + freep = p; + UNLOCK(); +} + +static header_t *morecore(size_t nu) +{ + char *cp; + header_t *up; + + if (nu < 4096) + nu = 4096; + + nu = ALIGN(nu); + + cp = (char *)sbrk(nu); + if (cp == (void *)-1) + return NULL; + + up = (header_t *)cp; + up->size = nu; + + free((void *)(up + 1)); + return freep; +} + +void *malloc(size_t size) +{ + header_t *p, *prevp; + size_t nunits = 0; + + if (size == 0) + return NULL; + + size = ALIGN(size + sizeof(header_t)); + + nunits = (nunits * sizeof(header_t) + ALIGNMENT - 1) / ALIGNMENT * ALIGNMENT / sizeof(header_t); + + LOCK(); + + if ((prevp = freep) == NULL) + { + base.next = freep = prevp = &base; + base.size = 0; + } + + for (p = prevp->next;; prevp = p, p = p->next) + { + if (p->size >= size) + { + if (p->size == size) + { + prevp->next = p->next; + } + else + { + p->size -= (nunits * sizeof(header_t)); + p = (header_t *)((char *)p + p->size); + p->size = (nunits * sizeof(header_t)); + } + freep = prevp; + UNLOCK(); + return (void *)(p + 1); + } + + if (p == freep) + { + if ((p = morecore(nunits * sizeof(header_t))) == NULL) + { + UNLOCK(); + errno = ENOMEM; + return NULL; + } + } + } +} + +void *calloc(size_t nmemb, size_t size) +{ + size_t total; + if (__builtin_mul_overflow(nmemb, size, &total)) + { + errno = ENOMEM; + return NULL; + } + void *p = malloc(total); + if (p) + memset(p, 0, total); + return p; +} + +void *realloc(void *ptr, size_t size) +{ + if (!ptr) + return malloc(size); + if (size == 0) + { + free(ptr); + return NULL; + } + + header_t *bp = (header_t *)ptr - 1; + size_t new_size = ALIGN(size + sizeof(header_t)); + + if (bp->size >= new_size) + return ptr; + + void *new_ptr = malloc(size); + if (!new_ptr) + return NULL; + + memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); + free(ptr); + return new_ptr; +} + +/* String Conversion*/ + +unsigned long long strtoull(const char *nptr, char **endptr, int base) +{ + const char *s = nptr; + unsigned long long acc; + unsigned long long cutoff; + int c; + int neg = 0, any, cutlim; + + if (base < 0 || base == 1 || base > 36) + { + if (endptr) + *endptr = (char *)nptr; + errno = 0; /* EINVAL */ + return 0; + } + + do + { + c = *s++; + } while (isspace(c)); + + if (c == '-') + { + neg = 1; + c = *s++; + } + else if (c == '+') + { + c = *s++; + } + + if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) + { + c = s[1]; + s += 2; + base = 16; + } + if (base == 0) + base = (c == '0' ? 8 : 10); + + cutoff = ULLONG_MAX / (unsigned long long)base; + cutlim = ULLONG_MAX % (unsigned long long)base; + + for (acc = 0, any = 0;; c = *s++) + { + if (isdigit(c)) + c -= '0'; + else if (isalpha(c)) + c -= isupper(c) ? 'A' - 10 : 'a' - 10; + else + break; + + if (c >= base) + break; + + if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + any = -1; + else + { + any = 1; + acc *= base; + acc += c; + } + } + + if (any < 0) + { + acc = ULLONG_MAX; + errno = ERANGE; + } + else if (neg) + acc = -acc; + + if (endptr != 0) + *endptr = (char *)(any ? s - 1 : nptr); + + return acc; +} + +long long strtoll(const char *nptr, char **endptr, int base) +{ + const char *s = nptr; + unsigned long long acc; + int c, neg = 0; + + do + { + c = *s++; + } while (isspace(c)); + if (c == '-') + neg = 1; + + acc = strtoull(nptr, endptr, base); + + if (errno == ERANGE && acc == ULLONG_MAX) + return neg ? LLONG_MIN : LLONG_MAX; + + if (!neg && acc > (unsigned long long)LLONG_MAX) + { + errno = ERANGE; + return LLONG_MAX; + } + if (neg && acc > (unsigned long long)LLONG_MAX + 1) + { + errno = ERANGE; + return LLONG_MIN; + } + + return neg ? -(long long)acc : (long long)acc; +} + +unsigned long strtoul(const char *nptr, char **endptr, int base) +{ + unsigned long long ret = strtoull(nptr, endptr, base); + if (ret > ULONG_MAX) + { + errno = ERANGE; + return ULONG_MAX; + } + return (unsigned long)ret; +} + +long strtol(const char *nptr, char **endptr, int base) +{ + long long ret = strtoll(nptr, endptr, base); + if (ret > LONG_MAX) + { + errno = ERANGE; + return LONG_MAX; + } + if (ret < LONG_MIN) + { + errno = ERANGE; + return LONG_MIN; + } + return (long)ret; +} + +int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } +long atol(const char *nptr) { return strtol(nptr, NULL, 10); } +long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } + +double strtod(const char *nptr, char **endptr) +{ + double val = 0.0; + int sign = 1; + const char *s = nptr; + + while (isspace(*s)) + s++; + if (*s == '-') + { + sign = -1; + s++; + } + else if (*s == '+') + s++; + + while (isdigit(*s)) + { + val = val * 10.0 + (*s - '0'); + s++; + } + if (*s == '.') + { + double factor = 1.0; + s++; + while (isdigit(*s)) + { + factor *= 0.1; + val += (*s - '0') * factor; + s++; + } + } + + if (endptr) + *endptr = (char *)s; + return val * sign; +} + +double atof(const char *nptr) { return strtod(nptr, NULL); } +float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } + +/* Sort & Search */ + +static void swap_bytes(char *a, char *b, size_t size) +{ + char temp; + while (size--) + { + temp = *a; + *a++ = *b; + *b++ = temp; + } +} + +void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) +{ + if (nmemb < 2 || size == 0) + return; + + char *base_ptr = (char *)base; + char *pivot = base_ptr + (nmemb - 1) * size; + char *i = base_ptr; + char *j = base_ptr; + + /* Partition */ + for (; j < pivot; j += size) + { + if (compar(j, pivot) < 0) + { + if (i != j) + swap_bytes(i, j, size); + i += size; + } + } + swap_bytes(i, pivot, size); + + /* Recurse */ + size_t left_count = (i - base_ptr) / size; + qsort(base, left_count, size, compar); + qsort(i + size, nmemb - left_count - 1, size, compar); +} + +void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) +{ + size_t l = 0, u = nmemb; + while (l < u) + { + size_t idx = (l + u) / 2; + const void *p = (void *)((const char *)base + (idx * size)); + int cmp = compar(key, p); + if (cmp < 0) + u = idx; + else if (cmp > 0) + l = idx + 1; + else + return (void *)p; + } + return NULL; +} + +/* Math & Mics */ + +int abs(int j) { return (j < 0) ? -j : j; } +long labs(long j) { return (j < 0) ? -j : j; } +long long llabs(long long j) { return (j < 0) ? -j : j; } + +div_t div(int numer, int denom) +{ + div_t res = {numer / denom, numer % denom}; + return res; +} +ldiv_t ldiv(long numer, long denom) +{ + ldiv_t res = {numer / denom, numer % denom}; + return res; +} +lldiv_t lldiv(long long numer, long long denom) +{ + lldiv_t res = {numer / denom, numer % denom}; + return res; +} + +static unsigned long next = 1; +int rand(void) +{ + next = next * 1103515245 + 12345; + return (unsigned int)(next / 65536) % 32768; +} +void srand(unsigned int seed) { next = seed; } + +/* Stub */ +int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } +int mbtowc(wchar_t *pwc, const char *s, size_t n) +{ + if (!s) + return 0; + if (n == 0) + return -1; + if (pwc) + *pwc = (wchar_t)*s; + return (*s != 0); +} +int wctomb(char *s, wchar_t wchar) +{ + if (!s) + return 0; + *s = (char)wchar; + return 1; +} +size_t mbstowcs(wchar_t *dest, const char *src, size_t n) +{ + size_t i = 0; + while (src[i] && i < n) + { + dest[i] = (wchar_t)src[i]; + i++; + } + if (i < n) + dest[i] = 0; + return i; +} +size_t wcstombs(char *dest, const wchar_t *src, size_t n) +{ + size_t i = 0; + while (src[i] && i < n) + { + dest[i] = (char)src[i]; + i++; + } + if (i < n) + dest[i] = 0; + return i; +} \ No newline at end of file diff --git a/src/ulib/string.c b/src/ulib/string.c new file mode 100644 index 0000000..5fc1cbd --- /dev/null +++ b/src/ulib/string.c @@ -0,0 +1,331 @@ +#include "ulib/string.h" +#include "ulib/stdlib.h" + + +/* Memory Manipulation Functions */ + +void *memset(void *dst, int c, size_t n) +{ + char *cdst = (char *)dst; + for (size_t i = 0; i < n; i++) + cdst[i] = (char)c; + return dst; +} + +void *memmove(void *vdst, const void *vsrc, size_t n) +{ + char *dst = (char *)vdst; + const char *src = (const char *)vsrc; + if (dst == src) + return vdst; + + if (src > dst) + { + while (n--) + *dst++ = *src++; + } + else + { + dst += n; + src += n; + while (n-- > 0) + *--dst = *--src; + } + return vdst; +} + +void *memcpy(void *vdst, const void *vsrc, size_t n) +{ + return memmove(vdst, vsrc, n); +} + +int memcmp(const void *s1, const void *s2, size_t n) +{ + const unsigned char *p1 = (const unsigned char *)s1; + const unsigned char *p2 = (const unsigned char *)s2; + while (n--) + { + if (*p1 != *p2) + return *p1 - *p2; + p1++; + p2++; + } + return 0; +} + +void *memchr(const void *s, int c, size_t n) +{ + const unsigned char *p = (const unsigned char *)s; + while (n--) + { + if (*p == (unsigned char)c) + return (void *)p; + p++; + } + return NULL; +} + +/* String Manipulation Functions */ + +size_t strlen(const char *s) +{ + const char *p = s; + while (*p) + p++; + return (size_t)(p - s); +} + +char *strcpy(char *dst, const char *src) +{ + char *os = dst; + while ((*dst++ = *src++) != 0) + ; + return os; +} + +char *strncpy(char *dst, const char *src, size_t n) +{ + char *os = dst; + size_t i; + + for (i = 0; i < n && src[i] != '\0'; i++) + dst[i] = src[i]; + + for (; i < n; i++) + dst[i] = '\0'; + + return os; +} + +char *strcat(char *dst, const char *src) +{ + char *os = dst; + while (*dst) + dst++; + while ((*dst++ = *src++) != 0) + ; + return os; +} + +char *strncat(char *dst, const char *src, size_t n) +{ + char *os = dst; + size_t dest_len = strlen(dst); + size_t i; + + dst += dest_len; + + for (i = 0; i < n && src[i] != '\0'; i++) + dst[i] = src[i]; + + dst[i] = '\0'; + + return os; +} + +int strcmp(const char *p, const char *q) +{ + while (*p && *p == *q) + { + p++; + q++; + } + return (int)((unsigned char)*p - (unsigned char)*q); +} + +int strncmp(const char *s1, const char *s2, size_t n) +{ + if (n == 0) + return 0; + + while (n-- > 0 && *s1 && *s1 == *s2) + { + if (n == 0 || *s1 == '\0') + break; + s1++; + s2++; + } + return (int)((unsigned char)*s1 - (unsigned char)*s2); +} + +char *strchr(const char *s, int c) +{ + while (*s != (char)c) + { + if (!*s++) + return NULL; + } + return (char *)s; +} + +char *strrchr(const char *s, int c) +{ + const char *last = NULL; + do + { + if (*s == (char)c) + last = s; + } while (*s++); + + return (char *)last; +} + + +char *strstr(const char *haystack, const char *needle) +{ + size_t n_len = strlen(needle); + if (n_len == 0) + return (char *)haystack; + + for (; *haystack; haystack++) + { + if (*haystack != *needle) + continue; + + if (strncmp(haystack, needle, n_len) == 0) + return (char *)haystack; + } + return NULL; +} + +char *strdup(const char *s) +{ + size_t len = strlen(s) + 1; + char *new_str = (char *)malloc(len); + if (new_str == NULL) + return NULL; + + return (char *)memcpy(new_str, s, len); +} + +size_t strlcpy(char *dst, const char *src, size_t size) +{ + size_t src_len = strlen(src); + + if (size > 0) + { + size_t copy_len = (src_len >= size) ? size - 1 : src_len; + memcpy(dst, src, copy_len); + dst[copy_len] = '\0'; + } + + return src_len; +} + +size_t strlcat(char *dst, const char *src, size_t size) +{ + size_t dst_len = 0; + size_t src_len = strlen(src); + + while (dst_len < size && dst[dst_len] != '\0') + dst_len++; + + if (dst_len == size) + return size + src_len; + + size_t space_left = size - dst_len; + size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; + + memcpy(dst + dst_len, src, copy_len); + dst[dst_len + copy_len] = '\0'; + + return dst_len + src_len; +} + + +size_t strspn(const char *s, const char *accept) +{ + const char *p = s; + const char *a; + + while (*p) + { + for (a = accept; *a; a++) + { + if (*p == *a) + break; + } + if (*a == '\0') + return (size_t)(p - s); + p++; + } + return (size_t)(p - s); +} + +size_t strcspn(const char *s, const char *reject) +{ + const char *p = s; + const char *r; + + while (*p) + { + for (r = reject; *r; r++) + { + if (*p == *r) + return (size_t)(p - s); + } + p++; + } + return (size_t)(p - s); +} + +char *strpbrk(const char *s, const char *accept) +{ + const char *a; + while (*s) + { + for (a = accept; *a; a++) + { + if (*s == *a) + return (char *)s; + } + s++; + } + return NULL; +} + +char *strtok(char *str, const char *delim) +{ + static char *olds; + char *token; + + if (str == NULL) + str = olds; + + str += strspn(str, delim); + if (*str == '\0') + { + olds = str; + return NULL; + } + + token = str; + str = strpbrk(token, delim); + + if (str == NULL) + { + olds = strchr(token, '\0'); + } + else + { + *str = '\0'; + olds = str + 1; + } + + return token; +} + +char *strerror(int errnum) +{ + + switch (errnum) + { + case 0: + return "Success"; + // case EINVAL: return "Invalid argument"; + case ENOMEM: return "Out of memory"; + + default: + return "Unknown error"; + } +} \ No newline at end of file diff --git a/src/user/init.cc b/src/user/init.cc index 27c1e2f..827a21e 100644 --- a/src/user/init.cc +++ b/src/user/init.cc @@ -1,221 +1,58 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "ulib/string.h" #include "user/user.h" -#include "common/fcntl.h" -int strlen(const char *s) -{ - int n = 0; - while (s[n]) - n++; - return n; -} - -void print(const char *s) -{ - write(1, s, strlen(s)); -} - -void print_int(int n) -{ - char buf[16]; - int i = 0; - int neg = 0; - if (n == 0) - { - write(1, "0", 1); - return; - } - if (n < 0) - { - neg = 1; - n = -n; - } - while (n > 0) - { - buf[i++] = (n % 10) + '0'; - n /= 10; - } - if (neg) - buf[i++] = '-'; - while (i > 0) - write(1, &buf[--i], 1); -} - -void print_hex(uint64 n) -{ - char buf[16]; - char digits[] = "0123456789ABCDEF"; - write(1, "0x", 2); - if (n == 0) - { - write(1, "0", 1); - return; - } - int i = 0; - while (n > 0) - { - buf[i++] = digits[n % 16]; - n /= 16; - } - while (i > 0) - write(1, &buf[--i], 1); -} - -void test_syscalls() +int main() { - print("\n=== [Test] Starting System Call Check ===\n"); - - print("[1/4] Checking getpid()... "); - int my_pid = getpid(); - if (my_pid > 0) - { - print("PASS (PID="); - print_int(my_pid); - print(")\n"); - } - else - { - print("FAIL (Invalid PID)\n"); - } - - print("[2/4] Checking sbrk() heap allocation... "); - char *p = sbrk(4096); - if (p == (char *)-1) - { - print("FAIL (sbrk returned error)\n"); - } - else - { - p[0] = 'A'; - p[4095] = 'Z'; - if (p[0] == 'A' && p[4095] == 'Z') - { - print("PASS (Allocated at "); - print_hex((uint64)p); - print(")\n"); - } - else - { - print("FAIL (Memory read/write check failed)\n"); - } - } + char *argv[] = {(char *)"sh", 0}; - print("[3/4] Checking fork() and wait()...\n"); - int pid = fork(); + printf("[Init] Starting Lume OS Shell...\n"); - if (pid < 0) - { - print(" FAIL: fork error\n"); - } - else if (pid == 0) + while (1) { - int child_pid = getpid(); - if (child_pid == my_pid) + // printf("fork start\n"); + int pid = fork(); + // printf("fork suceess, pid=%i\n", pid); + + if (pid < 0) { - print(" FAIL: Child has same PID as parent\n"); + printf("[Init] fork failed!\n"); exit(1); } - print(" [Child] I am alive. PID="); - print_int(child_pid); - print("\n"); - print(" [Child] Exiting now.\n"); - exit(0); - } - else - { - print(" [Parent] Forked child PID="); - print_int(pid); - print("\n"); - print(" [Parent] Waiting for child...\n"); - int waited_pid = wait(0); - - if (waited_pid == pid) + if (pid == 0) { - print(" [Parent] Wait returned correct PID.\n"); - print("PASS (Fork/Wait cycle)\n"); - } - else - { - print("FAIL (Wait returned "); - print_int(waited_pid); - print(")\n"); - } - } - - print("[4/4] Checking write()... PASS (Self-evident)\n"); - - print("=== [Test] All Tests Finished ===\n"); -} - - -int main() -{ - print("\n[Lume Shell] Init process started.\n"); - print("[Test] Opening test.txt...\n"); - int fd = open("test.txt", O_RDONLY); - if (fd < 0) - { - print("[Test] Open failed (Is test.txt in fs.img?)\n"); - } - else - { - print("[Test] Open success! fd="); - print_int(fd); - print("\n"); + + char sh_path[] = "/sh"; + exec(sh_path, argv); - char buf[64]; - int n = read(fd, buf, 63); - if (n > 0) - { - buf[n] = 0; - print("[Test] Read content:\n---\n"); - print(buf); - print("\n---\n"); + printf("[Init] exec sh failed\n"); + return 0; + exit(1); } else { - print("[Test] Read returned "); - print_int(n); - print("\n"); - } - close(fd); - print("[Test] File closed.\n"); - } - - - - print("Commands:\n"); - print(" s: Run System Call Tests (fork, wait, mm)\n"); - print(" t: Run Disk Driver Test (VirtIO)\n"); - - while (1) - { - char buf[16]; - write(1, "$ ", 2); - - int n = read(0, buf, sizeof(buf)); - if (n <= 0) - continue; - - if (buf[0] == 's') - { - test_syscalls(); - } - else if (buf[0] == 't') - { - if (fork() == 0) + // break; + int status; + int wpid; + while (1) { - disk_test(); - exit(0); + wpid = wait((uint64)&status); + + if (wpid == pid) + { + printf("Shell Exit"); + break; + } + if (wpid < 0) + { + printf("[Init] wait error or no child\n"); + + break; + } } - wait(0); - } - else if (buf[0] != '\n') - { - print("Unknown command.\n"); } } - - exit(0); return 0; } \ No newline at end of file diff --git a/src/user/sh.cc b/src/user/sh.cc new file mode 100644 index 0000000..287d2be --- /dev/null +++ b/src/user/sh.cc @@ -0,0 +1,409 @@ +#include "ulib/stdio.h" +#include "ulib/stdlib.h" +#include "ulib/string.h" +#include "user/user.h" +#include "common/fcntl.h" + +constexpr int MAX_ARGS = 10; +const char *WHITESPACE = " \t\r\n\v"; +const char *SYMBOLS = "<|>&;()"; + +void panic(const char *s) +{ + printf("shell panic: %s\n", s); + exit(1); +} + +int fork_or_panic() +{ + int pid = fork(); + if (pid == -1) + panic("fork"); + return pid; +} + +struct Command +{ + virtual ~Command() = default; + + virtual void run() = 0; +}; + +struct ExecCommand : public Command +{ + char *argv[MAX_ARGS]; + + ExecCommand() + { + memset(argv, 0, sizeof(argv)); + } + + void run() override + { + if (argv[0] == nullptr) + exit(1); + + exec(argv[0], argv); + + printf("exec %s failed\n", argv[0]); + exit(1); + } +}; + +struct RedirCommand : public Command +{ + Command *sub_cmd; + char *file; + char *efile; // file name end pointer (used by parser) + int mode; + int fd; + + RedirCommand(Command *c, char *f, char *ef, int m, int fd_in) + : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} + + ~RedirCommand() { delete sub_cmd; } + + void run() override + { + close(fd); + if (open(file, mode) < 0) + { + printf("open %s failed\n", file); + exit(1); + } + sub_cmd->run(); + } +}; + +struct PipeCommand : public Command +{ + Command *left; + Command *right; + + PipeCommand(Command *l, Command *r) : left(l), right(r) {} + ~PipeCommand() + { + delete left; + delete right; + } + + void run() override + { + int p[2]; + if (pipe(p) < 0) + panic("pipe"); + + if (fork_or_panic() == 0) + { + // Left child: write to pipe + close(1); // close stdout + dup(p[1]); // dup write-end to stdout + close(p[0]); + close(p[1]); + left->run(); + } + + if (fork_or_panic() == 0) + { + // Right child: read from pipe + close(0); // close stdin + dup(p[0]); // dup read-end to stdin + close(p[0]); + close(p[1]); + right->run(); + } + + close(p[0]); + close(p[1]); + wait(0); + wait(0); + exit(0); + } +}; + +struct ListCommand : public Command +{ + Command *left; + Command *right; + + ListCommand(Command *l, Command *r) : left(l), right(r) {} + ~ListCommand() + { + delete left; + delete right; + } + + void run() override + { + if (fork_or_panic() == 0) + { + left->run(); + } + wait(0); + right->run(); + } +}; + +struct BackCommand : public Command +{ + Command *sub_cmd; + + BackCommand(Command *c) : sub_cmd(c) {} + ~BackCommand() { delete sub_cmd; } + + void run() override + { + if (fork_or_panic() == 0) + { + sub_cmd->run(); + } + // Parent doesn't wait + exit(0); + } +}; + +class Parser +{ +public: + static Command *parse(char *s) + { + char *es = s + strlen(s); + Command *cmd = parse_line(&s, es); + peek(&s, es, ""); + if (s != es) + { + printf("leftovers: %s\n", s); + // panic("syntax"); // strict syntax check + } + terminate_strings(cmd); + return cmd; + } + +private: + // Helper: NUL-terminate strings found during parsing + static void terminate_strings(Command *cmd) + { + if (!cmd) + return; + } + + static char get_token(char **ps, char *es, char **q, char **eq) + { + char *s; + int ret; + + s = *ps; + while (s < es && strchr(WHITESPACE, *s)) + s++; + if (q) + *q = s; + ret = *s; + switch (*s) + { + case 0: + break; + case '|': + case '(': + case ')': + case ';': + case '&': + case '<': + s++; + break; + case '>': + s++; + if (*s == '>') + { + ret = '+'; + s++; + } + break; + default: + ret = 'a'; + while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) + s++; + break; + } + if (eq) + *eq = s; + + while (s < es && strchr(WHITESPACE, *s)) + s++; + *ps = s; + return ret; + } + + static int peek(char **ps, char *es, const char *toks) + { + char *s = *ps; + while (s < es && strchr(WHITESPACE, *s)) + s++; + *ps = s; + return *s && strchr(toks, *s); + } + + // Recursive Descent Parsers + + static Command *parse_line(char **ps, char *es) + { + Command *cmd = parse_pipe(ps, es); + while (peek(ps, es, "&")) + { + get_token(ps, es, 0, 0); + cmd = new BackCommand(cmd); + } + if (peek(ps, es, ";")) + { + get_token(ps, es, 0, 0); + cmd = new ListCommand(cmd, parse_line(ps, es)); + } + return cmd; + } + + static Command *parse_pipe(char **ps, char *es) + { + Command *cmd = parse_exec(ps, es); + if (peek(ps, es, "|")) + { + get_token(ps, es, 0, 0); + cmd = new PipeCommand(cmd, parse_pipe(ps, es)); + } + return cmd; + } + + static Command *parse_exec(char **ps, char *es) + { + char *q, *eq; + int tok, argc; + ExecCommand *cmd = new ExecCommand(); + Command *ret = cmd; + + argc = 0; + ret = parse_redirs(ret, ps, es); + while (!peek(ps, es, "|)&;")) + { + if ((tok = get_token(ps, es, &q, &eq)) == 0) + break; + if (tok != 'a') + panic("syntax"); + + cmd->argv[argc] = q; + *eq = 0; // Temp + + argc++; + if (argc >= MAX_ARGS) + panic("too many args"); + ret = parse_redirs(ret, ps, es); + } + cmd->argv[argc] = 0; + return ret; + } + + static Command *parse_redirs(Command *cmd, char **ps, char *es) + { + int tok; + char *q, *eq; + + while (peek(ps, es, "<>")) + { + tok = get_token(ps, es, 0, 0); + if (get_token(ps, es, &q, &eq) != 'a') + panic("missing file for redirection"); + + *eq = 0; // Null terminate filename immediately + + switch (tok) + { + case '<': + cmd = new RedirCommand(cmd, q, eq, O_RDONLY, 0); + break; + case '>': + cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE | O_TRUNC, 1); + break; + case '+': // >> + cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE, 1); // Append not fully supported in simple OS yet? + break; + } + } + return cmd; + } +}; + +int getcmd(char *buf, int nbuf) +{ + write(1, "$ ", 2); + memset(buf, 0, nbuf); + + int i = 0; + while (i < nbuf - 1) + { + char c; + int n = read(0, &c, 1); + if (n <= 0) + return -1; + + if (c == '\b' || c == 127) + { + if (i > 0) + { + write(1, "\b \b", 3); + i--; + } + } + else if (c == '\n' || c == '\r') + { + write(1, "\n", 1); + buf[i] = 0; + return 0; + } + else + { + write(1, &c, 1); + buf[i++] = c; + } + } + return -1; +} + +int main() +{ + static char buf[100]; + + // int fd; + // while ((fd = open("console", O_RDWR)) >= 0) + // { + // if (fd >= 3) + // { + // close(fd); + // break; + // } + // } + + printf("\n[Lume Shell] Initialized! \n"); + + while (getcmd(buf, sizeof(buf)) >= 0) + { + if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' ') + { + buf[strlen(buf) - 1] = 0; // chop \n + if (chdir(buf + 3) < 0) + { + printf("cannot cd %s\n", buf + 3); + } + continue; + } + + if (fork_or_panic() == 0) + { + Command *cmd = Parser::parse(buf); + if (cmd) + { + cmd->run(); + delete cmd; + } + exit(0); + } + wait(0); + } + return 0; +} \ No newline at end of file diff --git a/src/user/usys.S b/src/user/usys.S index 65937cc..f85917e 100644 --- a/src/user/usys.S +++ b/src/user/usys.S @@ -7,8 +7,16 @@ ecall; \ ret +#define SYSCALL_NAME(name, sysname) \ + .global name; \ + name: \ + li a7, SYS_ ## sysname; \ + ecall; \ + ret + +SYSCALL_NAME(sys_exit, exit) + SYSCALL(fork) -SYSCALL(exit) SYSCALL(wait) SYSCALL(pipe) SYSCALL(read) @@ -29,4 +37,5 @@ SYSCALL(sbrk) SYSCALL(sleep) SYSCALL(uptime) SYSCALL(putc) -SYSCALL(disk_test) \ No newline at end of file +SYSCALL(disk_test) +SYSCALL(lseek) \ No newline at end of file -- cgit v1.2.3 From 10614e04929a6d109a5e90524e446b637aaf0c13 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Sat, 3 Jan 2026 02:13:08 +0800 Subject: Fix: critical malloc size calculation bug Summary: - Fixed an integer arithmetic error in malloc() where 'nunits' was initialized to 0, causing incorrect heap sizing. - This bug caused malloc to return pointers pointing to unmapped memory pages, leading to Store Page Fault (scause 15) at process boundaries. - Switched memory allocator logic to use byte-based size calculation instead of K&R style units to prevent off-by-one errors. Improvements: - Shell now starts successfully without segfaults. --- build/kernel.elf | Bin 296040 -> 296848 bytes build/src/kernel/initcode.o | Bin 31496 -> 31528 bytes build/src/kernel/mm/vm.o | Bin 234008 -> 234008 bytes build/src/kernel/proc/exec.o | Bin 62896 -> 64304 bytes build/src/kernel/proc/proc.o | Bin 221432 -> 225240 bytes build/src/kernel/trap/handler.o | Bin 71232 -> 72624 bytes build/ulib/stdlib.o | Bin 170728 -> 170968 bytes build/user/initcode | Bin 30472 -> 30504 bytes build/user/initcode.asm | 2532 +++---- build/user/initcode.out | Bin 168736 -> 168776 bytes build/user/sh | Bin 204136 -> 204528 bytes build/user/sh.asm | 14618 +++++++++++++++++++------------------- build/user/sh.o | Bin 285040 -> 287784 bytes fs.img | Bin 33554432 -> 33554432 bytes include/kernel/proc_def.h | 4 + include/kernel/riscv.h | 3 +- src/kernel/mm/vm.cc | 3 - src/kernel/proc/exec.cc | 10 +- src/kernel/proc/proc.cc | 83 +- src/kernel/trap/handler.cc | 18 +- src/ulib/stdlib.c | 11 +- src/user/sh.cc | 17 +- 22 files changed, 8703 insertions(+), 8596 deletions(-) (limited to 'build/src/kernel/mm') diff --git a/build/kernel.elf b/build/kernel.elf index 57d8b38..abf89e2 100755 Binary files a/build/kernel.elf and b/build/kernel.elf differ diff --git a/build/src/kernel/initcode.o b/build/src/kernel/initcode.o index c575853..cb2dd53 100644 Binary files a/build/src/kernel/initcode.o and b/build/src/kernel/initcode.o differ diff --git a/build/src/kernel/mm/vm.o b/build/src/kernel/mm/vm.o index d73e9a6..96840aa 100644 Binary files a/build/src/kernel/mm/vm.o and b/build/src/kernel/mm/vm.o differ diff --git a/build/src/kernel/proc/exec.o b/build/src/kernel/proc/exec.o index 5b735ed..26a77b6 100644 Binary files a/build/src/kernel/proc/exec.o and b/build/src/kernel/proc/exec.o differ diff --git a/build/src/kernel/proc/proc.o b/build/src/kernel/proc/proc.o index 7ae741b..940c575 100644 Binary files a/build/src/kernel/proc/proc.o and b/build/src/kernel/proc/proc.o differ diff --git a/build/src/kernel/trap/handler.o b/build/src/kernel/trap/handler.o index 44a2baa..bd42409 100644 Binary files a/build/src/kernel/trap/handler.o and b/build/src/kernel/trap/handler.o differ diff --git a/build/ulib/stdlib.o b/build/ulib/stdlib.o index 1b599da..604c71d 100644 Binary files a/build/ulib/stdlib.o and b/build/ulib/stdlib.o differ diff --git a/build/user/initcode b/build/user/initcode index 62c8987..48fcfff 100755 Binary files a/build/user/initcode and b/build/user/initcode differ diff --git a/build/user/initcode.asm b/build/user/initcode.asm index d2a48a1..711a142 100644 --- a/build/user/initcode.asm +++ b/build/user/initcode.asm @@ -14,11 +14,11 @@ int main() 0: 715d addi sp,sp,-80 char *argv[] = {(char *)"sh", 0}; 2: 00005797 auipc a5,0x5 - 6: ffe78793 addi a5,a5,-2 # 5000 <_GLOBAL__sub_I__ZSt3cin+0x38> + 6: 00e78793 addi a5,a5,14 # 5010 <_GLOBAL__sub_I__ZSt3cin+0x30> printf("[Init] Starting Lume OS Shell...\n"); a: 00005517 auipc a0,0x5 - e: ffe50513 addi a0,a0,-2 # 5008 <_GLOBAL__sub_I__ZSt3cin+0x40> + e: 00e50513 addi a0,a0,14 # 5018 <_GLOBAL__sub_I__ZSt3cin+0x38> { 12: fc26 sd s1,56(sp) 14: f84a sd s2,48(sp) @@ -39,7 +39,7 @@ int main() { printf("[Init] fork failed!\n"); 28: 00005a17 auipc s4,0x5 - 2c: 008a0a13 addi s4,s4,8 # 5030 <_GLOBAL__sub_I__ZSt3cin+0x68> + 2c: 018a0a13 addi s4,s4,24 # 5040 <_GLOBAL__sub_I__ZSt3cin+0x60> printf("Shell Exit"); break; } @@ -47,10 +47,10 @@ int main() { printf("[Init] wait error or no child\n"); 30: 00005997 auipc s3,0x5 - 34: 04098993 addi s3,s3,64 # 5070 <_GLOBAL__sub_I__ZSt3cin+0xa8> + 34: 05098993 addi s3,s3,80 # 5080 <_GLOBAL__sub_I__ZSt3cin+0xa0> printf("Shell Exit"); 38: 00005917 auipc s2,0x5 - 3c: 02890913 addi s2,s2,40 # 5060 <_GLOBAL__sub_I__ZSt3cin+0x98> + 3c: 03890913 addi s2,s2,56 # 5070 <_GLOBAL__sub_I__ZSt3cin+0x90> int pid = fork(); 40: 088000ef jal c8 44: 842a mv s0,a0 @@ -94,7 +94,7 @@ int main() 80: b7c1 j 40 char sh_path[] = "/sh"; 82: 006877b7 lui a5,0x687 - 86: 32f78793 addi a5,a5,815 # 68732f <_ZSt4cerr+0x67fae7> + 86: 32f78793 addi a5,a5,815 # 68732f <_ZSt4cerr+0x67fac7> exec(sh_path, argv); 8a: 080c addi a1,sp,16 8c: 8526 mv a0,s1 @@ -104,7 +104,7 @@ int main() 90: 070000ef jal 100 printf("[Init] exec sh failed\n"); 94: 00005517 auipc a0,0x5 - 98: fb450513 addi a0,a0,-76 # 5048 <_GLOBAL__sub_I__ZSt3cin+0x80> + 98: fc450513 addi a0,a0,-60 # 5058 <_GLOBAL__sub_I__ZSt3cin+0x78> 9c: 04f030ef jal 38ea return 0; a0: 60a6 ld ra,72(sp) @@ -349,7 +349,7 @@ SYSCALL(disk_test) 22e: 4359 li t1,22 230: 17036163 bltu t1,a6,392 234: 00005317 auipc t1,0x5 - 238: 19430313 addi t1,t1,404 # 53c8 + 238: 1a430313 addi t1,t1,420 # 53d8 23c: 080e slli a6,a6,0x3 23e: 981a add a6,a6,t1 240: 00083e03 ld t3,0(a6) @@ -373,7 +373,7 @@ SYSCALL(disk_test) 288: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 28c: 02d777d3 fadd.d fa5,fa4,fa3 290: 3782e837 lui a6,0x3782e - 294: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37826287> + 294: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37826267> 298: 0832 slli a6,a6,0xc 29a: 9d980813 addi a6,a6,-1575 29e: 084a slli a6,a6,0x12 @@ -417,7 +417,7 @@ SYSCALL(disk_test) 31c: 400e0163 beqz t3,71e 320: 8fbe mv t6,a5 322: 05f5e7b7 lui a5,0x5f5e - 326: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f568b7> + 326: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56897> 32a: 04060413 addi s0,a2,64 32e: 03860613 addi a2,a2,56 332: 15f7c863 blt a5,t6,482 @@ -426,7 +426,7 @@ SYSCALL(disk_test) 33e: 4f01 li t5,0 340: 4f81 li t6,0 342: 00006e97 auipc t4,0x6 - 346: 60ee8e93 addi t4,t4,1550 # 6950 + 346: 62ee8e93 addi t4,t4,1582 # 6970 34a: aaa9 j 4a4 34c: 0306 slli t1,t1,0x1 34e: 3e030e63 beqz t1,74a @@ -465,7 +465,7 @@ SYSCALL(disk_test) 3be: 22084f63 bltz a6,5fc 3c2: f2000753 fmv.d.x fa4,zero 3c6: 00005e17 auipc t3,0x5 - 3ca: 002e0e13 addi t3,t3,2 # 53c8 + 3ca: 012e0e13 addi t3,t3,18 # 53d8 3ce: 380e9e63 bnez t4,76a 3d2: f20887d3 fmv.d.x fa5,a7 3d6: fff30f1b addiw t5,t1,-1 @@ -510,15 +510,15 @@ SYSCALL(disk_test) 466: 10677663 bgeu a4,t1,572 46a: e80f93e3 bnez t6,2f0 46e: 05f5e7b7 lui a5,0x5f5e - 472: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f568b7> + 472: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56897> 476: 04060413 addi s0,a2,64 47a: 03860613 addi a2,a2,56 47e: ebf7dce3 bge a5,t6,336 482: 4f01 li t5,0 484: 00006e97 auipc t4,0x6 - 488: 4cce8e93 addi t4,t4,1228 # 6950 + 488: 4ece8e93 addi t4,t4,1260 # 6970 48c: 05f5e7b7 lui a5,0x5f5e - 490: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f568b8> + 490: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f56898> 494: 02ffe833 rem a6,t6,a5 498: 02ffcfb3 div t6,t6,a5 49c: 0008071b sext.w a4,a6 @@ -526,7 +526,7 @@ SYSCALL(disk_test) 4a4: 8822 mv a6,s0 4a6: 06400893 li a7,100 4aa: 06300e13 li t3,99 - 4ae: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff87b6> + 4ae: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff8796> 4b0: 0007031b sext.w t1,a4 4b4: 031777bb remuw a5,a4,a7 4b8: 2785 addiw a5,a5,1 @@ -552,7 +552,7 @@ SYSCALL(disk_test) 4fc: 1461 addi s0,s0,-8 4fe: 00878f1b addiw t5,a5,8 502: 05f5e7b7 lui a5,0x5f5e - 506: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f568b7> + 506: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56897> 50a: ff840613 addi a2,s0,-8 50e: f7f7cfe3 blt a5,t6,48c 512: 000f871b sext.w a4,t6 @@ -578,10 +578,10 @@ SYSCALL(disk_test) 54a: bf59 j 4e0 54c: 0eb2 slli t4,t4,0xc 54e: 00005797 auipc a5,0x5 - 552: b4a78793 addi a5,a5,-1206 # 5098 <_GLOBAL__sub_I__ZSt3cin+0xd0> + 552: b5a78793 addi a5,a5,-1190 # 50a8 <_GLOBAL__sub_I__ZSt3cin+0xc8> 556: 000e8663 beqz t4,562 55a: 00005797 auipc a5,0x5 - 55e: b3678793 addi a5,a5,-1226 # 5090 <_GLOBAL__sub_I__ZSt3cin+0xc8> + 55e: b4678793 addi a5,a5,-1210 # 50a0 <_GLOBAL__sub_I__ZSt3cin+0xc0> 562: 00f2b023 sd a5,0(t0) 566: 679d lui a5,0x7 568: c29c sw a5,0(a3) @@ -589,13 +589,13 @@ SYSCALL(disk_test) 56c: 01e5a023 sw t5,0(a1) 570: 8082 ret 572: 3b9ad737 lui a4,0x3b9ad - 576: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a51b7> + 576: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a5197> 57a: 07f76f63 bltu a4,t6,5f8 57e: 4805 li a6,1 580: 02081713 slli a4,a6,0x20 584: 01d75893 srli a7,a4,0x1d 588: 00005717 auipc a4,0x5 - 58c: 1f870713 addi a4,a4,504 # 5780 + 58c: 20870713 addi a4,a4,520 # 5790 590: 9746 add a4,a4,a7 592: 4e51 li t3,20 594: a021 j 59c @@ -610,7 +610,7 @@ SYSCALL(disk_test) 5b0: eb076de3 bltu a4,a6,46a 5b4: 080e slli a6,a6,0x3 5b6: 00005717 auipc a4,0x5 - 5ba: e1270713 addi a4,a4,-494 # 53c8 + 5ba: e2270713 addi a4,a4,-478 # 53d8 5be: 9742 add a4,a4,a6 5c0: 3b873803 ld a6,952(a4) 5c4: 00185713 srli a4,a6,0x1 @@ -640,7 +640,7 @@ SYSCALL(disk_test) 60c: fffe881b addiw a6,t4,-1 610: 9e7a add t3,t3,t5 612: 00005e97 auipc t4,0x5 - 616: db6e8e93 addi t4,t4,-586 # 53c8 + 616: dc6e8e93 addi t4,t4,-570 # 53d8 61a: 0e0e slli t3,t3,0x3 61c: 080e slli a6,a6,0x3 61e: 9876 add a6,a6,t4 @@ -672,7 +672,7 @@ SYSCALL(disk_test) 682: 02d777d3 fadd.d fa5,fa4,fa3 686: fff3089b addiw a7,t1,-1 68a: 00005817 auipc a6,0x5 - 68e: d3e80813 addi a6,a6,-706 # 53c8 + 68e: d4e80813 addi a6,a6,-690 # 53d8 692: 030e slli t1,t1,0x3 694: 088e slli a7,a7,0x3 696: 98c2 add a7,a7,a6 @@ -736,7 +736,7 @@ SYSCALL(disk_test) 75c: 01e5a023 sw t5,0(a1) 760: 6105 addi sp,sp,32 762: 8082 ret - 764: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff87b9> + 764: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff8799> 766: 3f7d addiw t5,t5,-1 768: b3d1 j 52c 76a: e826 sd s1,16(sp) @@ -746,7 +746,7 @@ SYSCALL(disk_test) 772: 11d84363 blt a6,t4,878 776: 0009049b sext.w s1,s2 77a: 00005e17 auipc t3,0x5 - 77e: c4ee0e13 addi t3,t3,-946 # 53c8 + 77e: c5ee0e13 addi t3,t3,-930 # 53d8 782: 00349813 slli a6,s1,0x3 786: 9872 add a6,a6,t3 788: 00083687 fld fa3,0(a6) @@ -911,7 +911,7 @@ static int _in_char(_InContext *ctx) 924: 00170693 addi a3,a4,1 if (ctx->buf[ctx->pos] == '\0') 928: 97ba add a5,a5,a4 - 92a: 0007c703 lbu a4,0(a5) # 7000 <_stdout+0x190> + 92a: 0007c703 lbu a4,0(a5) # 7000 <_stdout+0x170> 92e: cb19 beqz a4,944 <_skip_space+0x50> return (unsigned char)ctx->buf[ctx->pos++]; 930: e814 sd a3,16(s0) @@ -1095,7 +1095,7 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) aa4: 00120637 lui a2,0x120 aa8: 4585 li a1,1 aaa: 00d595b3 sll a1,a1,a3 - aae: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x1187d9> + aae: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x1187b9> ab2: 8e6d and a2,a2,a1 ab4: ee69 bnez a2,b8e <_vscanf_core.constprop.0+0x226> ab6: 89b9 andi a1,a1,14 @@ -1334,7 +1334,7 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) int i = 0, c = _in_char(ctx); cca: 4d01 li s10,0 ccc: 80000937 lui s2,0x80000 - cd0: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff87b7> + cd0: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff8797> cd2: 0932 slli s2,s2,0xc cd4: 80194913 xori s2,s2,-2047 cd8: 093e slli s2,s2,0xf @@ -1624,7 +1624,7 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) f1e: 02b00793 li a5,43 f22: 20f60a63 beq a2,a5,1136 <_vscanf_core.constprop.0+0x7ce> f26: 00005797 auipc a5,0x5 - f2a: 9127b587 fld fa1,-1774(a5) # 5838 + f2a: 9227b587 fld fa1,-1758(a5) # 5848 f2e: 101c addi a5,sp,32 while (*str >= '0' && *str <= '9') f30: fd06069b addiw a3,a2,-48 @@ -1633,7 +1633,7 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) f3a: f20007d3 fmv.d.x fa5,zero f3e: 02a5e463 bltu a1,a0,f66 <_vscanf_core.constprop.0+0x5fe> f42: 00005717 auipc a4,0x5 - f46: 8fe73707 fld fa4,-1794(a4) # 5840 + f46: 90e73707 fld fa4,-1778(a4) # 5850 f4a: 4525 li a0,9 f4c: 0017c603 lbu a2,1(a5) val = val * 10.0 + (*str - '0'); @@ -1689,7 +1689,7 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) int64 val = strtoll(num_buf, NULL, base); fb4: 4581 li a1,0 fb6: 1008 addi a0,sp,32 - fb8: 67e030ef jal 4636 + fb8: 696030ef jal 464e *va_arg(ap, int64 *) = val; fbc: 67a2 ld a5,8(sp) if (len_mod == 2) @@ -1802,9 +1802,9 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) 1092: 12098463 beqz s3,11ba <_vscanf_core.constprop.0+0x852> double p = 1.0; 1096: 00004717 auipc a4,0x4 - 109a: 7a273687 fld fa3,1954(a4) # 5838 + 109a: 7b273687 fld fa3,1970(a4) # 5848 109e: 00004717 auipc a4,0x4 - 10a2: 7a273707 fld fa4,1954(a4) # 5840 + 10a2: 7b273707 fld fa4,1970(a4) # 5850 while (eval--) 10a6: 56fd li a3,-1 10a8: 37fd addiw a5,a5,-1 @@ -1820,13 +1820,13 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) 10bc: b5c9 j f7e <_vscanf_core.constprop.0+0x616> double p = 1.0; 10be: 00004797 auipc a5,0x4 - 10c2: 77a7b687 fld fa3,1914(a5) # 5838 + 10c2: 78a7b687 fld fa3,1930(a5) # 5848 val *= p; 10c6: 12d7f7d3 fmul.d fa5,fa5,fa3 10ca: bd55 j f7e <_vscanf_core.constprop.0+0x616> while (*str >= '0' && *str <= '9') 10cc: 00004797 auipc a5,0x4 - 10d0: 7647b587 fld fa1,1892(a5) # 5830 + 10d0: 7747b587 fld fa1,1908(a5) # 5840 10d4: 02114603 lbu a2,33(sp) str++; 10d8: 02110793 addi a5,sp,33 @@ -1842,7 +1842,7 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) 10ee: e8a5e2e3 bltu a1,a0,f72 <_vscanf_core.constprop.0+0x60a> double div = 10.0; 10f2: 00004717 auipc a4,0x4 - 10f6: 74e73707 fld fa4,1870(a4) # 5840 + 10f6: 75e73707 fld fa4,1886(a4) # 5850 10fa: 22e70653 fmv.d fa2,fa4 while (*str >= '0' && *str <= '9') 10fe: 4525 li a0,9 @@ -1879,7 +1879,7 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) 1134: b54d j fd6 <_vscanf_core.constprop.0+0x66e> while (*str >= '0' && *str <= '9') 1136: 00004797 auipc a5,0x4 - 113a: 7027b587 fld fa1,1794(a5) # 5838 + 113a: 7127b587 fld fa1,1810(a5) # 5848 113e: 02114603 lbu a2,33(sp) str++; 1142: 02110793 addi a5,sp,33 @@ -1898,7 +1898,7 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) 115c: f0f577e3 bgeu a0,a5,106a <_vscanf_core.constprop.0+0x702> double p = 1.0; 1160: 00004797 auipc a5,0x4 - 1164: 6d87b687 fld fa3,1752(a5) # 5838 + 1164: 6e87b687 fld fa3,1768(a5) # 5848 val /= p; 1168: 1ad7f7d3 fdiv.d fa5,fa5,fa3 116c: bd09 j f7e <_vscanf_core.constprop.0+0x616> @@ -1941,7 +1941,7 @@ static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) 11b8: bb99 j f0e <_vscanf_core.constprop.0+0x5a6> double p = 1.0; 11ba: 00004797 auipc a5,0x4 - 11be: 67e7b687 fld fa3,1662(a5) # 5838 + 11be: 68e7b687 fld fa3,1678(a5) # 5848 11c2: bdc5 j 10b2 <_vscanf_core.constprop.0+0x74a> buf[i] = '\0'; 11c4: 67e2 ld a5,24(sp) @@ -2078,7 +2078,7 @@ STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char ppe { stbsp__period = pperiod; 12ac: 00005797 auipc a5,0x5 - 12b0: 6a478793 addi a5,a5,1700 # 6950 + 12b0: 6c478793 addi a5,a5,1732 # 6970 12b4: 0cb78623 sb a1,204(a5) stbsp__comma = pcomma; 12b8: 0ca786a3 sb a0,205(a5) @@ -2102,7 +2102,7 @@ STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(vsprintfcb)(STBSP_SPRINTFCB *callback, 12c2: 808087b7 lui a5,0x80808 if (((v ^ 0x25252525) - 0x01010101) & c) 12c6: 252523b7 lui t2,0x25252 - 12ca: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x2524acdd> + 12ca: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x2524acbd> { 12ce: 29913c23 sd s9,664(sp) 12d2: 29b13423 sd s11,648(sp) @@ -2111,7 +2111,7 @@ STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(vsprintfcb)(STBSP_SPRINTFCB *callback, if (((v ^ 0x25252525) - 0x01010101) & c) 12d8: feff0db7 lui s11,0xfeff0 c = (~v) & 0x80808080; - 12dc: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff80800838> + 12dc: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff80800818> { 12e0: 2e813023 sd s0,736(sp) 12e4: 2c913c23 sd s1,728(sp) @@ -2132,7 +2132,7 @@ STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(vsprintfcb)(STBSP_SPRINTFCB *callback, for (;;) { 1310: 8932 mv s2,a2 if (((v ^ 0x25252525) - 0x01010101) & c) - 1312: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe86b7> + 1312: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8697> goto schk1; if ((v - 0x01010101) & c) goto schk2; @@ -2276,7 +2276,7 @@ done: switch (f[0]) { 1420: 03f00593 li a1,63 1424: 00004617 auipc a2,0x4 - 1428: d3460613 addi a2,a2,-716 # 5158 <_GLOBAL__sub_I__ZSt3cin+0x190> + 1428: d4460613 addi a2,a2,-700 # 5168 <_GLOBAL__sub_I__ZSt3cin+0x188> 142c: fff6c783 lbu a5,-1(a3) 1430: fff68493 addi s1,a3,-1 1434: fe07871b addiw a4,a5,-32 @@ -2318,7 +2318,7 @@ done: 1482: 46c9 li a3,18 1484: 02e6e063 bltu a3,a4,14a4 1488: 00004697 auipc a3,0x4 - 148c: dd068693 addi a3,a3,-560 # 5258 <_GLOBAL__sub_I__ZSt3cin+0x290> + 148c: de068693 addi a3,a3,-544 # 5268 <_GLOBAL__sub_I__ZSt3cin+0x288> 1490: 070a slli a4,a4,0x2 1492: 9736 add a4,a4,a3 1494: 4318 lw a4,0(a4) @@ -2336,7 +2336,7 @@ done: 14ac: 03700693 li a3,55 14b0: 0ee6ea63 bltu a3,a4,15a4 14b4: 00004697 auipc a3,0x4 - 14b8: df068693 addi a3,a3,-528 # 52a4 <_GLOBAL__sub_I__ZSt3cin+0x2dc> + 14b8: e0068693 addi a3,a3,-512 # 52b4 <_GLOBAL__sub_I__ZSt3cin+0x2d4> 14bc: 070a slli a4,a4,0x2 14be: 9736 add a4,a4,a3 14c0: 4318 lw a4,0(a4) @@ -2591,7 +2591,7 @@ done: 16c6: 0ce05763 blez a4,1794 *(stbsp__uint32 *)bf = 0x30303030; 16ca: 30303837 lui a6,0x30303 - 16ce: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fb7e8> + 16ce: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fb7c8> 16d2: f026 sd s1,32(sp) 16d4: 854a mv a0,s2 16d6: 84da mv s1,s6 @@ -2604,7 +2604,7 @@ done: 16e4: 8d6e mv s10,s11 *bf++ = stbsp__comma; 16e6: 00005f17 auipc t5,0x5 - 16ea: 26af0f13 addi t5,t5,618 # 6950 + 16ea: 28af0f13 addi t5,t5,650 # 6970 16ee: 8de6 mv s11,s9 *bf++ = '0'; 16f0: 03000e93 li t4,48 @@ -2657,7 +2657,7 @@ done: 1762: 842a mv s0,a0 1764: 1fe00293 li t0,510 1768: 00005f17 auipc t5,0x5 - 176c: 1e8f0f13 addi t5,t5,488 # 6950 + 176c: 208f0f13 addi t5,t5,520 # 6970 1770: 03000e93 li t4,48 while (pr > 0) { 1774: f93049e3 bgtz s3,1706 @@ -2859,7 +2859,7 @@ done: stbsp__chk_cb_buf(1); 191a: 1fe00693 li a3,510 *(stbsp__uint32 *)bf = 0x30303030; - 191e: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fb7e8> + 191e: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fb7c8> stbsp__cb_buf_clamp(i, tz); 1922: 20000b93 li s7,512 1926: 040989e3 beqz s3,2178 @@ -3124,7 +3124,7 @@ done: 1b60: 2300106f j 2d90 divisor = 1024.0; 1b64: 00004797 auipc a5,0x4 - 1b68: ce47b787 fld fa5,-796(a5) # 5848 + 1b68: cf47b787 fld fa5,-780(a5) # 5858 if ((fv < divisor) && (fv > -divisor)) 1b6c: 22f79753 fneg.d fa4,fa5 fl += 0x1000000; @@ -3149,10 +3149,10 @@ done: 1b98: 020e7713 andi a4,t3,32 h = (f[0] == 'X') ? hexu : hex; 1b9c: 00005817 auipc a6,0x5 - 1ba0: e9c80813 addi a6,a6,-356 # 6a38 + 1ba0: ebc80813 addi a6,a6,-324 # 6a58 1ba4: 00d79663 bne a5,a3,1bb0 1ba8: 00005817 auipc a6,0x5 - 1bac: e7880813 addi a6,a6,-392 # 6a20 + 1bac: e9880813 addi a6,a6,-360 # 6a40 l = (4 << 4) | (4 << 8); 1bb0: 44000793 li a5,1088 1bb4: d0be sw a5,96(sp) @@ -3205,7 +3205,7 @@ done: h = (f[0] == 'E') ? hexu : hex; 1c12: 04500713 li a4,69 1c16: 00005317 auipc t1,0x5 - 1c1a: e2230313 addi t1,t1,-478 # 6a38 + 1c1a: e4230313 addi t1,t1,-446 # 6a58 1c1e: 1ce78ae3 beq a5,a4,25f2 fv = va_arg(va, double); 1c22: 008b8713 addi a4,s7,8 @@ -3291,7 +3291,7 @@ done: h = (f[0] == 'G') ? hexu : hex; 1cba: 04700713 li a4,71 1cbe: 00005317 auipc t1,0x5 - 1cc2: d7a30313 addi t1,t1,-646 # 6a38 + 1cc2: d9a30313 addi t1,t1,-614 # 6a58 1cc6: 14e783e3 beq a5,a4,260c fv = va_arg(va, double); 1cca: 008b8713 addi a4,s7,8 @@ -3361,14 +3361,14 @@ done: 1d50: 38fd addiw a7,a7,-1 while ((l > 1) && (pr) && (sn[l - 1] == '0')) { 1d52: 211e80e3 beq t4,a7,2752 - 1d56: 177d addi a4,a4,-1 # 6fff <_stdout+0x18f> + 1d56: 177d addi a4,a4,-1 # 6fff <_stdout+0x16f> 1d58: 4f05 li t5,1 1d5a: 1e088ce3 beqz a7,2752 --l; 1d5e: 85b6 mv a1,a3 while ((l > 1) && (pr) && (sn[l - 1] == '0')) { 1d60: 00074803 lbu a6,0(a4) - 1d64: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff87b7> + 1d64: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff8797> 1d68: 0006851b sext.w a0,a3 1d6c: 2581 sext.w a1,a1 1d6e: 0006069b sext.w a3,a2 @@ -3407,7 +3407,7 @@ done: h = (f[0] == 'A') ? hexu : hex; 1dbe: 04100713 li a4,65 1dc2: 00005597 auipc a1,0x5 - 1dc6: c7658593 addi a1,a1,-906 # 6a38 + 1dc6: c9658593 addi a1,a1,-874 # 6a58 1dca: 00e783e3 beq a5,a4,25d0 fv = va_arg(va, double); 1dce: 008b8693 addi a3,s7,8 @@ -3554,7 +3554,7 @@ done: fw -= n; 1ef2: 40f3033b subw t1,t1,a5 cs = 1 + (3 << 24); - 1ef6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff87b9> + 1ef6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8799> s = num + 64; 1ef8: 0c010a93 addi s5,sp,192 goto scopy; @@ -3562,7 +3562,7 @@ done: h = (f[0] == 'B') ? hexu : hex; 1efe: 04200713 li a4,66 1f02: 00005817 auipc a6,0x5 - 1f06: b3680813 addi a6,a6,-1226 # 6a38 + 1f06: b5680813 addi a6,a6,-1194 # 6a58 1f0a: 6ce78963 beq a5,a4,25dc if (fl & STBSP__LEADING_0X) { 1f0e: 008e7793 andi a5,t3,8 @@ -3674,7 +3674,7 @@ done: 1fd8: 02e5f5bb remuw a1,a1,a4 *s++ = stbsp__comma; 1fdc: 00005a17 auipc s4,0x5 - 1fe0: 974a0a13 addi s4,s4,-1676 # 6950 + 1fe0: 994a0a13 addi s4,s4,-1644 # 6970 s = (char *)sn; 1fe4: 7f66 ld t5,120(sp) *s++ = stbsp__comma; @@ -3702,7 +3702,7 @@ done: 200c: 0015061b addiw a2,a0,1 2010: 0006051b sext.w a0,a2 *s++ = sn[n]; - 2014: fff70fa3 sb t6,-1(a4) # 6fff <_stdout+0x18f> + 2014: fff70fa3 sb t6,-1(a4) # 6fff <_stdout+0x16f> if (n >= (stbsp__uint32)dp) 2018: 7bd57563 bgeu a0,t4,27c2 *s++ = stbsp__comma; @@ -3740,7 +3740,7 @@ done: 205c: 020e7713 andi a4,t3,32 h = hexu; 2060: 00005817 auipc a6,0x5 - 2064: 9c080813 addi a6,a6,-1600 # 6a20 + 2064: 9e080813 addi a6,a6,-1568 # 6a40 goto radixnum; 2068: bea9 j 1bc2 fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros @@ -3751,7 +3751,7 @@ done: 2076: 48c1 li a7,16 h = (f[0] == 'X') ? hexu : hex; 2078: 00005817 auipc a6,0x5 - 207c: 9c080813 addi a6,a6,-1600 # 6a38 + 207c: 9e080813 addi a6,a6,-1568 # 6a58 2080: be05 j 1bb0 s = va_arg(va, char *); 2082: 000bba83 ld s5,0(s7) @@ -3944,7 +3944,7 @@ done: 2204: 894e mv s2,s3 2206: 69a2 ld s3,8(sp) *(stbsp__uint32 *)bf = 0x20202020; - 2208: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201fa7d8> + 2208: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201fa7b8> stbsp__cb_buf_clamp(i, fw); 220c: ec52 sd s4,24(sp) 220e: f426 sd s1,40(sp) @@ -4006,7 +4006,7 @@ done: while (i >= 4) { 227a: 40d5863b subw a2,a1,a3 227e: fecbcbe3 blt s7,a2,2274 - 2282: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff87b4> + 2282: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff8794> 2286: 0026561b srliw a2,a2,0x2 228a: 0016069b addiw a3,a2,1 228e: 3771 addiw a4,a4,-4 @@ -4108,7 +4108,7 @@ done: 237a: 5586 lw a1,96(sp) *--s = stbsp__comma; 237c: 00004f17 auipc t5,0x4 - 2380: 6a1f4f03 lbu t5,1697(t5) # 6a1d + 2380: 6c1f4f03 lbu t5,1729(t5) # 6a3d 2384: 0510 addi a2,sp,640 2386: 0085d71b srliw a4,a1,0x8 *--s = h[n64 & ((1 << (l >> 8)) - 1)]; @@ -4268,7 +4268,7 @@ done: 24d6: 06055ee3 bgez a0,2d52 tail[idx + 1] = "_KMGT"[fl >> 24]; 24da: 00003517 auipc a0,0x3 - 24de: bce50513 addi a0,a0,-1074 # 50a8 <_GLOBAL__sub_I__ZSt3cin+0xe0> + 24de: bde50513 addi a0,a0,-1058 # 50b8 <_GLOBAL__sub_I__ZSt3cin+0xd8> 24e2: 972a add a4,a4,a0 24e4: 00074503 lbu a0,0(a4) if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { @@ -4279,7 +4279,7 @@ done: 24f0: 06010813 addi a6,sp,96 24f4: 22060693 addi a3,a2,544 24f8: 96c2 add a3,a3,a6 - 24fa: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff85a8> + 24fa: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff8588> if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { 24fe: 8007071b addiw a4,a4,-2048 2502: 060715e3 bnez a4,2d6c @@ -4387,30 +4387,30 @@ done: 25ce: b801 j 1dde h = (f[0] == 'A') ? hexu : hex; 25d0: 00004597 auipc a1,0x4 - 25d4: 45058593 addi a1,a1,1104 # 6a20 + 25d4: 47058593 addi a1,a1,1136 # 6a40 25d8: ff6ff06f j 1dce h = (f[0] == 'B') ? hexu : hex; 25dc: 00004817 auipc a6,0x4 - 25e0: 44480813 addi a6,a6,1092 # 6a20 + 25e0: 46480813 addi a6,a6,1124 # 6a40 25e4: b22d j 1f0e 25e6: 80000737 lui a4,0x80000 - 25ea: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff87be> + 25ea: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff879e> pr = 6; // default is 6 25ec: 4899 li a7,6 25ee: e4eff06f j 1c3c h = (f[0] == 'E') ? hexu : hex; 25f2: 00004317 auipc t1,0x4 - 25f6: 42e30313 addi t1,t1,1070 # 6a20 + 25f6: 44e30313 addi t1,t1,1102 # 6a40 25fa: e28ff06f j 1c22 25fe: 80000737 lui a4,0x80000 2602: 4a99 li s5,6 - 2604: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff87bd> + 2604: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff879d> pr = 6; 2606: 4a19 li s4,6 2608: ee8ff06f j 1cf0 h = (f[0] == 'G') ? hexu : hex; 260c: 00004317 auipc t1,0x4 - 2610: 41430313 addi t1,t1,1044 # 6a20 + 2610: 43430313 addi t1,t1,1076 # 6a40 2614: eb6ff06f j 1cca 2618: 7be6 ld s7,120(sp) if ((dp <= -4) || (dp > (stbsp__int32)n)) { @@ -4461,7 +4461,7 @@ done: 266c: 54088563 beqz a7,2bb6 *s++ = stbsp__period; 2670: 00004617 auipc a2,0x4 - 2674: 3ac64603 lbu a2,940(a2) # 6a1c + 2674: 3cc64603 lbu a2,972(a2) # 6a3c if ((l - 1) > (stbsp__uint32)pr) 2678: fff6871b addiw a4,a3,-1 *s++ = stbsp__period; @@ -4522,7 +4522,7 @@ done: 26f0: 06010893 addi a7,sp,96 26f4: 0202d293 srli t0,t0,0x20 26f8: 01180eb3 add t4,a6,a7 - 26fc: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff89d8> + 26fc: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff89b8> 2700: 011802b3 add t0,a6,a7 tail[0] = (char)n; 2704: 07f10823 sb t6,112(sp) @@ -4558,7 +4558,7 @@ done: l = (stbsp__uint32)(s - (num + 64)); 274a: 415607b3 sub a5,a2,s5 cs = 1 + (3 << 24); // how many tens - 274e: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff87b9> + 274e: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8799> 2750: bbc9 j 2522 2752: fc2e sd a1,56(sp) 2754: d0b2 sw a2,96(sp) @@ -4716,7 +4716,7 @@ done: 2888: 96be add a3,a3,a5 *s++ = stbsp__period; 288a: 00004517 auipc a0,0x4 - 288e: 19254503 lbu a0,402(a0) # 6a1c + 288e: 1b254503 lbu a0,434(a0) # 6a3c lead[2 + lead[0]] = 'x'; 2892: 07800813 li a6,120 sn = s; @@ -4775,10 +4775,10 @@ done: 2900: d76ff06f j 1e76 *--s = stbsp__comma; 2904: 00004a17 auipc s4,0x4 - 2908: 04ca0a13 addi s4,s4,76 # 6950 + 2908: 06ca0a13 addi s4,s4,108 # 6970 if (n64 >= 100000000) { 290c: 05f5e7b7 lui a5,0x5f5e - 2910: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f568b7> + 2910: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f56897> n = (stbsp__uint32)(n64 % 100000000); 2914: 05f5e637 lui a2,0x5f5e *--s = stbsp__comma; @@ -4786,7 +4786,7 @@ done: if (n64 >= 100000000) { 291c: e83e sd a5,16(sp) n = (stbsp__uint32)(n64 % 100000000); - 291e: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f568b8> + 291e: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f56898> l = 0; 2922: d082 sw zero,96(sp) if ((fl & STBSP__TRIPLET_COMMA) == 0) { @@ -4967,7 +4967,7 @@ done: *bf++ = ' '; 2a72: 02000a93 li s5,32 *(stbsp__uint32 *)bf = 0x20202020; - 2a76: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201fa7d8> + 2a76: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201fa7b8> stbsp__chk_cb_buf(1); 2a7a: 1fe00a13 li s4,510 stbsp__cb_buf_clamp(i, fw); @@ -5065,8 +5065,8 @@ done: if ((v - 0x01010101) & (~v) & 0x80808080UL) 2b48: feff05b7 lui a1,0xfeff0 2b4c: 80808637 lui a2,0x80808 - 2b50: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe86b7> - 2b54: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff80800838> + 2b50: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe8697> + 2b54: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff80800818> while (limit >= 4) { 2b58: 480d li a6,3 2b5a: a029 j 2b64 @@ -5162,7 +5162,7 @@ done: 2c06: b6d5 j 27ea s = (char *)"null"; 2c08: 00002a97 auipc s5,0x2 - 2c0c: 498a8a93 addi s5,s5,1176 # 50a0 <_GLOBAL__sub_I__ZSt3cin+0xd8> + 2c0c: 4a8a8a93 addi s5,s5,1192 # 50b0 <_GLOBAL__sub_I__ZSt3cin+0xd0> 2c10: c80ff06f j 2090 } else if (fl & STBSP__LEADINGPLUS) { 2c14: 002e7793 andi a5,t3,2 @@ -5187,7 +5187,7 @@ done: 2c42: 1a088c63 beqz a7,2dfa *s++ = stbsp__period; 2c46: 00004717 auipc a4,0x4 - 2c4a: dd674703 lbu a4,-554(a4) # 6a1c + 2c4a: df674703 lbu a4,-522(a4) # 6a3c n = -dp; 2c4e: 40f007bb negw a5,a5 *s++ = stbsp__period; @@ -5255,7 +5255,7 @@ done: l = (stbsp__uint32)(s - (num + 64)); 2cd2: 415787b3 sub a5,a5,s5 cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 2cd6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff87b9> + 2cd6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8799> 2cd8: fbcff06f j 2494 *--s = '0'; 2cdc: 03000793 li a5,48 @@ -5268,7 +5268,7 @@ done: 2cec: 1afd addi s5,s5,-1 l = 1; 2cee: 4605 li a2,1 - 2cf0: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff87b9> + 2cf0: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff8799> 2cf2: 4685 li a3,1 2cf4: b9dd j 29ea } else if (fl & STBSP__LEADINGSPACE) { @@ -5320,7 +5320,7 @@ done: 2d4e: f1dfe06f j 1c6a tail[idx + 1] = "_kMGT"[fl >> 24]; 2d52: 00002697 auipc a3,0x2 - 2d56: 35e68693 addi a3,a3,862 # 50b0 <_GLOBAL__sub_I__ZSt3cin+0xe8> + 2d56: 36e68693 addi a3,a3,878 # 50c0 <_GLOBAL__sub_I__ZSt3cin+0xe0> 2d5a: 9736 add a4,a4,a3 2d5c: 00074683 lbu a3,0(a4) 2d60: 1088 addi a0,sp,96 @@ -5345,7 +5345,7 @@ done: 2d8c: 814ff06f j 1da0 divisor = 1000.0f; 2d90: 00003797 auipc a5,0x3 - 2d94: ac07b787 fld fa5,-1344(a5) # 5850 + 2d94: ad07b787 fld fa5,-1328(a5) # 5860 2d98: dd5fe06f j 1b6c 2d9c: 678d lui a5,0x3 2d9e: b017879b addiw a5,a5,-1279 # 2b01 @@ -5355,7 +5355,7 @@ done: 2da8: b125 j 29d0 *s++ = stbsp__period; 2daa: 00004517 auipc a0,0x4 - 2dae: c7254503 lbu a0,-910(a0) # 6a1c + 2dae: c9254503 lbu a0,-878(a0) # 6a3c sn = s; 2db2: 0c210793 addi a5,sp,194 n = pr; @@ -5411,7 +5411,7 @@ done: *(stbsp__uint32 *)s = 0x30303030; 2e18: 30303537 lui a0,0x30303 2e1c: 963e add a2,a2,a5 - 2e1e: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fb7e8> + 2e1e: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fb7c8> 2e22: c388 sw a0,0(a5) s += 4; 2e24: 0791 addi a5,a5,4 @@ -5465,7 +5465,7 @@ done: *(stbsp__uint32 *)s = 0x30303030; 2e84: 30303637 lui a2,0x30303 2e88: 96ba add a3,a3,a4 - 2e8a: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fb7e8> + 2e8a: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fb7c8> 2e8e: c310 sw a2,0(a4) s += 4; 2e90: 0711 addi a4,a4,4 @@ -5752,7 +5752,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3074: 02500a93 li s5,37 3078: 49c1 li s3,16 307a: 00002917 auipc s2,0x2 - 307e: 30a90913 addi s2,s2,778 # 5384 <_GLOBAL__sub_I__ZSt3cin+0x3bc> + 307e: 31a90913 addi s2,s2,794 # 5394 <_GLOBAL__sub_I__ZSt3cin+0x3b4> 3082: a039 j 3090 <_vprintf_core.constprop.0.isra.0+0x44> _out_char(ctx, spec); 3084: 8526 mv a0,s1 @@ -6030,7 +6030,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 32be: 4e05 li t3,1 32c0: 00091637 lui a2,0x91 32c4: 00de1333 sll t1,t3,a3 - 32c8: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x88fc8> + 32c8: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x88fa8> 32cc: 00c37633 and a2,t1,a2 32d0: 1a061463 bnez a2,3478 <_vprintf_core.constprop.0.isra.0+0x42c> 32d4: 00737313 andi t1,t1,7 @@ -6145,7 +6145,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 33c6: 00091337 lui t1,0x91 33ca: 4685 li a3,1 33cc: 00c696b3 sll a3,a3,a2 - 33d0: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x88fc8> + 33d0: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x88fa8> 33d4: 0066f333 and t1,a3,t1 33d8: 34031c63 bnez t1,3730 <_vprintf_core.constprop.0.isra.0+0x6e4> 33dc: 8a9d andi a3,a3,7 @@ -6199,7 +6199,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3444: 01aa0533 add a0,s4,s10 3448: 865e mv a2,s7 344a: 00002597 auipc a1,0x2 - 344e: cbe58593 addi a1,a1,-834 # 5108 <_GLOBAL__sub_I__ZSt3cin+0x140> + 344e: cce58593 addi a1,a1,-818 # 5118 <_GLOBAL__sub_I__ZSt3cin+0x138> 3452: ba5ff0ef jal 2ff6 3456: 00ad0d3b addw s10,s10,a0 345a: b341 j 31da <_vprintf_core.constprop.0.isra.0+0x18e> @@ -6207,7 +6207,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 345c: 01aa0533 add a0,s4,s10 3460: 8622 mv a2,s0 3462: 00002597 auipc a1,0x2 - 3466: c9e58593 addi a1,a1,-866 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x138> + 3466: cae58593 addi a1,a1,-850 # 5110 <_GLOBAL__sub_I__ZSt3cin+0x130> 346a: b8dff0ef jal 2ff6 346e: 00ad0d3b addw s10,s10,a0 if (precision >= 0) @@ -6234,7 +6234,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 349a: 4341 li t1,16 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; 349c: 00002f97 auipc t6,0x2 - 34a0: c34f8f93 addi t6,t6,-972 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 34a0: c44f8f93 addi t6,t6,-956 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0x100> if (val == 0) 34a4: 120e0363 beqz t3,35ca <_vprintf_core.constprop.0.isra.0+0x57e> 34a8: 01010293 addi t0,sp,16 @@ -6382,7 +6382,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; 35bc: 4329 li t1,10 35be: 00002f97 auipc t6,0x2 - 35c2: b12f8f93 addi t6,t6,-1262 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 35c2: b22f8f93 addi t6,t6,-1246 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0x100> if (val == 0) 35c6: ee0e11e3 bnez t3,34a8 <_vprintf_core.constprop.0.isra.0+0x45c> buf[i++] = '0'; @@ -6406,7 +6406,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 35e8: 0d1c9f63 bne s9,a7,36c6 <_vprintf_core.constprop.0.isra.0+0x67a> prefix_str = (spec == 'X') ? "0X" : "0x"; 35ec: 00002c97 auipc s9,0x2 - 35f0: afcc8c93 addi s9,s9,-1284 # 50e8 <_GLOBAL__sub_I__ZSt3cin+0x120> + 35f0: b0cc8c93 addi s9,s9,-1268 # 50f8 <_GLOBAL__sub_I__ZSt3cin+0x118> prefix_len += 2; 35f4: 2589 addiw a1,a1,2 int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; @@ -6479,7 +6479,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3672: 4341 li t1,16 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; 3674: 00002f97 auipc t6,0x2 - 3678: a44f8f93 addi t6,t6,-1468 # 50b8 <_GLOBAL__sub_I__ZSt3cin+0xf0> + 3678: a54f8f93 addi t6,t6,-1452 # 50c8 <_GLOBAL__sub_I__ZSt3cin+0xe8> 367c: b525 j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> int padding = (width > len) ? width - len : 0; 367e: ca8058e3 blez s0,332e <_vprintf_core.constprop.0.isra.0+0x2e2> @@ -6554,13 +6554,13 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3708: 4329 li t1,10 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; 370a: 00002f97 auipc t6,0x2 - 370e: 9c6f8f93 addi t6,t6,-1594 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 370e: 9d6f8f93 addi t6,t6,-1578 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0x100> sign_char = '-'; 3712: e03e sd a5,0(sp) 3714: bb51 j 34a8 <_vprintf_core.constprop.0.isra.0+0x45c> s = "(null)"; 3716: 00002c97 auipc s9,0x2 - 371a: 9e2c8c93 addi s9,s9,-1566 # 50f8 <_GLOBAL__sub_I__ZSt3cin+0x130> + 371a: 9f2c8c93 addi s9,s9,-1550 # 5108 <_GLOBAL__sub_I__ZSt3cin+0x128> 371e: bed1 j 32f2 <_vprintf_core.constprop.0.isra.0+0x2a6> val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); 3720: 000c3683 ld a3,0(s8) @@ -6590,7 +6590,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3750: 4341 li t1,16 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; 3752: 00002f97 auipc t6,0x2 - 3756: 97ef8f93 addi t6,t6,-1666 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 3756: 98ef8f93 addi t6,t6,-1650 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0x100> 375a: b3a9 j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> for (int i = 0; i < padding; i++) 375c: c809 beqz s0,376e <_vprintf_core.constprop.0.isra.0+0x722> @@ -6627,7 +6627,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3790: 5c7d li s8,-1 prefix_str = (spec == 'X') ? "0X" : "0x"; 3792: 00002c97 auipc s9,0x2 - 3796: 956c8c93 addi s9,s9,-1706 # 50e8 <_GLOBAL__sub_I__ZSt3cin+0x120> + 3796: 966c8c93 addi s9,s9,-1690 # 50f8 <_GLOBAL__sub_I__ZSt3cin+0x118> 379a: bda9 j 35f4 <_vprintf_core.constprop.0.isra.0+0x5a8> if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) 379c: 8d52 mv s10,s4 @@ -6645,7 +6645,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 37b4: 4329 li t1,10 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; 37b6: 00002f97 auipc t6,0x2 - 37ba: 91af8f93 addi t6,t6,-1766 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 37ba: 92af8f93 addi t6,t6,-1750 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0x100> 37be: b1dd j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); 37c0: 000c3e03 ld t3,0(s8) @@ -6655,7 +6655,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 37c8: 4341 li t1,16 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; 37ca: 00002f97 auipc t6,0x2 - 37ce: 906f8f93 addi t6,t6,-1786 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 37ce: 916f8f93 addi t6,t6,-1770 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0x100> 37d2: b9c9 j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> char spec = *p++; 37d4: 8dbe mv s11,a5 @@ -6681,11 +6681,11 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 37f8: 4341 li t1,16 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; 37fa: 00002f97 auipc t6,0x2 - 37fe: 8d6f8f93 addi t6,t6,-1834 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 37fe: 8e6f8f93 addi t6,t6,-1818 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0x100> 3802: b14d j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> prefix_str = (spec == 'X') ? "0X" : "0x"; 3804: 00002c97 auipc s9,0x2 - 3808: 8ecc8c93 addi s9,s9,-1812 # 50f0 <_GLOBAL__sub_I__ZSt3cin+0x128> + 3808: 8fcc8c93 addi s9,s9,-1796 # 5100 <_GLOBAL__sub_I__ZSt3cin+0x120> 380c: b3e5 j 35f4 <_vprintf_core.constprop.0.isra.0+0x5a8> val = (uint64)va_arg(ap, void *); 380e: 008c0713 addi a4,s8,8 @@ -6712,7 +6712,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3836: e002 sd zero,0(sp) 3838: 4329 li t1,10 383a: 00002f97 auipc t6,0x2 - 383e: 896f8f93 addi t6,t6,-1898 # 50d0 <_GLOBAL__sub_I__ZSt3cin+0x108> + 383e: 8a6f8f93 addi t6,t6,-1882 # 50e0 <_GLOBAL__sub_I__ZSt3cin+0x100> 3842: b18d j 34a4 <_vprintf_core.constprop.0.isra.0+0x458> val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); 3844: 000c3e03 ld t3,0(s8) @@ -6840,7 +6840,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 38f6: 85aa mv a1,a0 ctx.stream = stdout; 38f8: 00004797 auipc a5,0x4 - 38fc: db87b783 ld a5,-584(a5) # 76b0 + 38fc: dd87b783 ld a5,-552(a5) # 76d0 _vprintf_core(&ctx, format, ap); 3900: 0808 addi a0,sp,16 3902: 861a mv a2,t1 @@ -6953,7 +6953,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 398c: e04a sd s2,0(sp) if (strcmp(mode, "r") == 0) 398e: 00001597 auipc a1,0x1 - 3992: 78258593 addi a1,a1,1922 # 5110 <_GLOBAL__sub_I__ZSt3cin+0x148> + 3992: 79258593 addi a1,a1,1938 # 5120 <_GLOBAL__sub_I__ZSt3cin+0x140> { 3996: 892a mv s2,a0 if (strcmp(mode, "r") == 0) @@ -6962,14 +6962,14 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 399a: e822 sd s0,16(sp) 399c: ec06 sd ra,24(sp) if (strcmp(mode, "r") == 0) - 399e: 280010ef jal 4c1e + 399e: 298010ef jal 4c36 39a2: 842a mv s0,a0 39a4: c919 beqz a0,39ba else if (strcmp(mode, "w") == 0) 39a6: 00001597 auipc a1,0x1 - 39aa: 77258593 addi a1,a1,1906 # 5118 <_GLOBAL__sub_I__ZSt3cin+0x150> + 39aa: 78258593 addi a1,a1,1922 # 5128 <_GLOBAL__sub_I__ZSt3cin+0x148> 39ae: 8526 mv a0,s1 - 39b0: 26e010ef jal 4c1e + 39b0: 286010ef jal 4c36 flags = O_WRONLY | O_CREAT | O_TRUNC; 39b4: 24100413 li s0,577 else if (strcmp(mode, "w") == 0) @@ -6990,7 +6990,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) memset(f, 0, sizeof(FILE)); 39d4: 42000613 li a2,1056 39d8: 4581 li a1,0 - 39da: 0d6010ef jal 4ab0 + 39da: 0ee010ef jal 4ac8 if (fd == 1) 39de: 4785 li a5,1 f->fd = (int)fd; @@ -7024,18 +7024,18 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3a14: 8082 ret else if (strcmp(mode, "a") == 0) 3a16: 00001597 auipc a1,0x1 - 3a1a: 70a58593 addi a1,a1,1802 # 5120 <_GLOBAL__sub_I__ZSt3cin+0x158> + 3a1a: 71a58593 addi a1,a1,1818 # 5130 <_GLOBAL__sub_I__ZSt3cin+0x150> 3a1e: 8526 mv a0,s1 - 3a20: 1fe010ef jal 4c1e + 3a20: 216010ef jal 4c36 flags = O_WRONLY | O_CREAT | O_APPEND; 3a24: 44100413 li s0,1089 else if (strcmp(mode, "a") == 0) 3a28: d949 beqz a0,39ba else if (strcmp(mode, "r+") == 0) 3a2a: 00001597 auipc a1,0x1 - 3a2e: 6fe58593 addi a1,a1,1790 # 5128 <_GLOBAL__sub_I__ZSt3cin+0x160> + 3a2e: 70e58593 addi a1,a1,1806 # 5138 <_GLOBAL__sub_I__ZSt3cin+0x158> 3a32: 8526 mv a0,s1 - 3a34: 1ea010ef jal 4c1e + 3a34: 202010ef jal 4c36 flags = O_RDWR; 3a38: 4409 li s0,2 else if (strcmp(mode, "r+") == 0) @@ -7064,7 +7064,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3a58: 02c04a63 bgtz a2,3a8c if (stream != stdin && stream != stdout && stream != stderr) 3a5c: 00004797 auipc a5,0x4 - 3a60: c5478793 addi a5,a5,-940 # 76b0 + 3a60: c7478793 addi a5,a5,-908 # 76d0 3a64: 6798 ld a4,8(a5) 3a66: 00870e63 beq a4,s0,3a82 3a6a: 6398 ld a4,0(a5) @@ -7780,7 +7780,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3f38: 8932 mv s2,a2 memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); 3f3a: 864a mv a2,s2 - 3f3c: 3c9000ef jal 4b04 + 3f3c: 3e1000ef jal 4b1c stream->buf_read_pos += to_copy; 3f40: 41442783 lw a5,1044(s0) bytes_read += to_copy; @@ -7884,7 +7884,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 3fee: 059a6763 bltu s4,s9,403c memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); 3ff2: 8666 mv a2,s9 - 3ff4: 311000ef jal 4b04 + 3ff4: 329000ef jal 4b1c stream->buf_write_pos += remaining; 3ff8: 41042783 lw a5,1040(s0) if (stream->buf_write_pos == BUFSIZ) @@ -7920,7 +7920,7 @@ static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) 4038: 6125 addi sp,sp,96 403a: 8082 ret memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 403c: 2c9000ef jal 4b04 + 403c: 2e1000ef jal 4b1c stream->buf_write_pos += space_left; 4040: 41042783 lw a5,1040(s0) int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); @@ -8301,7 +8301,7 @@ unsigned long long strtoull(const char *nptr, char **endptr, int base) 4298: 03000793 li a5,48 429c: 0ef70463 beq a4,a5,4384 42a0: 00ccd8b7 lui a7,0xccd - 42a4: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc5485> + 42a4: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc5465> 42a8: 08b2 slli a7,a7,0xc 42aa: ccd88893 addi a7,a7,-819 42ae: 08b2 slli a7,a7,0xc @@ -8422,7 +8422,7 @@ unsigned long long strtoull(const char *nptr, char **endptr, int base) errno = ERANGE; 435c: 02200793 li a5,34 4360: 00003717 auipc a4,0x3 - 4364: 3af72823 sw a5,944(a4) # 7710 + 4364: 3cf72823 sw a5,976(a4) # 7730 acc = ULLONG_MAX; 4368: 557d li a0,-1 if (endptr != 0) @@ -8480,7 +8480,7 @@ unsigned long long strtoull(const char *nptr, char **endptr, int base) 00000000000043da : if (__atexit_func_count >= ATEXIT_MAX) 43da: 00003717 auipc a4,0x3 - 43de: 33670713 addi a4,a4,822 # 7710 + 43de: 35670713 addi a4,a4,854 # 7730 43e2: 435c lw a5,4(a4) 43e4: 46fd li a3,31 43e6: 00f6ca63 blt a3,a5,43fa @@ -8504,7 +8504,7 @@ unsigned long long strtoull(const char *nptr, char **endptr, int base) 4400: e822 sd s0,16(sp) while (__atexit_func_count > 0) 4402: 00003417 auipc s0,0x3 - 4406: 30e40413 addi s0,s0,782 # 7710 + 4406: 32e40413 addi s0,s0,814 # 7730 440a: 405c lw a5,4(s0) { 440c: e426 sd s1,8(sp) @@ -8554,7 +8554,7 @@ unsigned long long strtoull(const char *nptr, char **endptr, int base) 4448: c121 beqz a0,4488 for (p = freep; !(bp > p && bp < p->next); p = p->next) 444a: 00003617 auipc a2,0x3 - 444e: 2c660613 addi a2,a2,710 # 7710 + 444e: 2e660613 addi a2,a2,742 # 7730 4452: 10863783 ld a5,264(a2) bp = (header_t *)ptr - 1; 4456: ff050693 addi a3,a0,-16 @@ -8609,2057 +8609,2071 @@ unsigned long long strtoull(const char *nptr, char **endptr, int base) 00000000000044be : if (size == 0) - 44be: c54d beqz a0,4568 + 44be: c169 beqz a0,4580 { - 44c0: 1101 addi sp,sp,-32 - 44c2: e426 sd s1,8(sp) + 44c0: 7179 addi sp,sp,-48 + 44c2: ec26 sd s1,24(sp) if ((prevp = freep) == NULL) 44c4: 00003497 auipc s1,0x3 - 44c8: 24c48493 addi s1,s1,588 # 7710 + 44c8: 26c48493 addi s1,s1,620 # 7730 44cc: 1084b783 ld a5,264(s1) { - 44d0: e822 sd s0,16(sp) + 44d0: f022 sd s0,32(sp) size = ALIGN(size + sizeof(header_t)); 44d2: 057d addi a0,a0,31 { - 44d4: ec06 sd ra,24(sp) + 44d4: f406 sd ra,40(sp) size = ALIGN(size + sizeof(header_t)); 44d6: ff057413 andi s0,a0,-16 if ((prevp = freep) == NULL) - 44da: c7b5 beqz a5,4546 + 44da: c3d1 beqz a5,455e for (p = prevp->next;; prevp = p, p = p->next) 44dc: 6788 ld a0,8(a5) if (p->size >= size) 44de: 6118 ld a4,0(a0) - 44e0: 04877663 bgeu a4,s0,452c - 44e4: e04a sd s2,0(sp) + 44e0: 06877163 bgeu a4,s0,4542 + 44e4: e44e sd s3,8(sp) + 44e6: e052 sd s4,0(sp) + 44e8: e84a sd s2,16(sp) + if (nu < 4096) + 44ea: 6a05 lui s4,0x1 if (cp == (void *)-1) - 44e6: 597d li s2,-1 - 44e8: a029 j 44f2 + 44ec: 59fd li s3,-1 + 44ee: a029 j 44f8 for (p = prevp->next;; prevp = p, p = p->next) - 44ea: 6788 ld a0,8(a5) + 44f0: 6788 ld a0,8(a5) if (p->size >= size) - 44ec: 6118 ld a4,0(a0) - 44ee: 02877e63 bgeu a4,s0,452a + 44f2: 6118 ld a4,0(a0) + 44f4: 04877463 bgeu a4,s0,453c if (p == freep) - 44f2: 1084b703 ld a4,264(s1) - 44f6: 87aa mv a5,a0 - 44f8: fea719e3 bne a4,a0,44ea + 44f8: 1084b703 ld a4,264(s1) + 44fc: 87aa mv a5,a0 + 44fe: fee519e3 bne a0,a4,44f0 + if (nu < 4096) + 4502: 8922 mv s2,s0 + 4504: 01447363 bgeu s0,s4,450a + 4508: 6905 lui s2,0x1 cp = (char *)sbrk(nu); - 44fc: 6505 lui a0,0x1 - 44fe: c53fb0ef jal 150 - 4502: 87aa mv a5,a0 + 450a: 854a mv a0,s2 + 450c: c45fb0ef jal 150 + 4510: 87aa mv a5,a0 free((void *)(up + 1)); - 4504: 0541 addi a0,a0,16 # 1010 <_vscanf_core.constprop.0+0x6a8> + 4512: 0541 addi a0,a0,16 if (cp == (void *)-1) - 4506: 01278963 beq a5,s2,4518 + 4514: 01378963 beq a5,s3,4526 up->size = nu; - 450a: 6705 lui a4,0x1 - 450c: e398 sd a4,0(a5) + 4518: 0127b023 sd s2,0(a5) free((void *)(up + 1)); - 450e: f3bff0ef jal 4448 + 451c: f2dff0ef jal 4448 return freep; - 4512: 1084b783 ld a5,264(s1) - if ((p = morecore(nunits * sizeof(header_t))) == NULL) - 4516: fbf1 bnez a5,44ea + 4520: 1084b783 ld a5,264(s1) + if ((p = morecore(size)) == NULL) + 4524: f7f1 bnez a5,44f0 } - 4518: 60e2 ld ra,24(sp) - 451a: 6442 ld s0,16(sp) + 4526: 70a2 ld ra,40(sp) + 4528: 7402 ld s0,32(sp) errno = ENOMEM; - 451c: 47b1 li a5,12 - 451e: c09c sw a5,0(s1) + 452a: 47b1 li a5,12 + 452c: c09c sw a5,0(s1) return NULL; - 4520: 6902 ld s2,0(sp) + 452e: 6942 ld s2,16(sp) + 4530: 69a2 ld s3,8(sp) + 4532: 6a02 ld s4,0(sp) } - 4522: 64a2 ld s1,8(sp) + 4534: 64e2 ld s1,24(sp) return NULL; - 4524: 4501 li a0,0 + 4536: 4501 li a0,0 } - 4526: 6105 addi sp,sp,32 - 4528: 8082 ret - 452a: 6902 ld s2,0(sp) + 4538: 6145 addi sp,sp,48 + 453a: 8082 ret + 453c: 6942 ld s2,16(sp) + 453e: 69a2 ld s3,8(sp) + 4540: 6a02 ld s4,0(sp) if (p->size == size) - 452c: 02e40b63 beq s0,a4,4562 + 4542: 02e40c63 beq s0,a4,457a + p->size -= size; + 4546: 8f01 sub a4,a4,s0 + 4548: e118 sd a4,0(a0) p = (header_t *)((char *)p + p->size); - 4530: 953a add a0,a0,a4 - p->size = (nunits * sizeof(header_t)); - 4532: 00053023 sd zero,0(a0) + 454a: 953a add a0,a0,a4 + p->size = size; + 454c: e100 sd s0,0(a0) } - 4536: 60e2 ld ra,24(sp) - 4538: 6442 ld s0,16(sp) + 454e: 70a2 ld ra,40(sp) + 4550: 7402 ld s0,32(sp) freep = prevp; - 453a: 10f4b423 sd a5,264(s1) + 4552: 10f4b423 sd a5,264(s1) return (void *)(p + 1); - 453e: 0541 addi a0,a0,16 + 4556: 0541 addi a0,a0,16 } - 4540: 64a2 ld s1,8(sp) - 4542: 6105 addi sp,sp,32 - 4544: 8082 ret + 4558: 64e2 ld s1,24(sp) + 455a: 6145 addi sp,sp,48 + 455c: 8082 ret base.next = freep = prevp = &base; - 4546: 00003517 auipc a0,0x3 - 454a: 2da50513 addi a0,a0,730 # 7820 - 454e: 10a4b423 sd a0,264(s1) - 4552: 10a4bc23 sd a0,280(s1) + 455e: 00003517 auipc a0,0x3 + 4562: 2e250513 addi a0,a0,738 # 7840 + 4566: 10a4b423 sd a0,264(s1) + 456a: 10a4bc23 sd a0,280(s1) base.size = 0; - 4556: 00003797 auipc a5,0x3 - 455a: 2c07b523 sd zero,714(a5) # 7820 + 456e: 00003797 auipc a5,0x3 + 4572: 2c07b923 sd zero,722(a5) # 7840 if (p->size >= size) - 455e: f059 bnez s0,44e4 + 4576: f43d bnez s0,44e4 base.next = freep = prevp = &base; - 4560: 87aa mv a5,a0 + 4578: 87aa mv a5,a0 prevp->next = p->next; - 4562: 6518 ld a4,8(a0) - 4564: e798 sd a4,8(a5) - 4566: bfc1 j 4536 + 457a: 6518 ld a4,8(a0) + 457c: e798 sd a4,8(a5) + 457e: bfc1 j 454e return NULL; - 4568: 4501 li a0,0 + 4580: 4501 li a0,0 } - 456a: 8082 ret + 4582: 8082 ret -000000000000456c : +0000000000004584 : if (__builtin_mul_overflow(nmemb, size, &total)) - 456c: 02b537b3 mulhu a5,a0,a1 + 4584: 02b537b3 mulhu a5,a0,a1 { - 4570: 1101 addi sp,sp,-32 - 4572: e822 sd s0,16(sp) - 4574: ec06 sd ra,24(sp) - 4576: e426 sd s1,8(sp) + 4588: 1101 addi sp,sp,-32 + 458a: e822 sd s0,16(sp) + 458c: ec06 sd ra,24(sp) + 458e: e426 sd s1,8(sp) if (__builtin_mul_overflow(nmemb, size, &total)) - 4578: 02b50433 mul s0,a0,a1 - 457c: e385 bnez a5,459c + 4590: 02b50433 mul s0,a0,a1 + 4594: e385 bnez a5,45b4 void *p = malloc(total); - 457e: 8522 mv a0,s0 - 4580: f3fff0ef jal 44be - 4584: 84aa mv s1,a0 + 4596: 8522 mv a0,s0 + 4598: f27ff0ef jal 44be + 459c: 84aa mv s1,a0 if (p) - 4586: c509 beqz a0,4590 + 459e: c509 beqz a0,45a8 memset(p, 0, total); - 4588: 8622 mv a2,s0 - 458a: 4581 li a1,0 - 458c: 524000ef jal 4ab0 -} - 4590: 60e2 ld ra,24(sp) - 4592: 6442 ld s0,16(sp) - 4594: 8526 mv a0,s1 - 4596: 64a2 ld s1,8(sp) - 4598: 6105 addi sp,sp,32 - 459a: 8082 ret - 459c: 60e2 ld ra,24(sp) - 459e: 6442 ld s0,16(sp) - errno = ENOMEM; - 45a0: 47b1 li a5,12 - return NULL; - 45a2: 4481 li s1,0 - errno = ENOMEM; - 45a4: 00003717 auipc a4,0x3 - 45a8: 16f72623 sw a5,364(a4) # 7710 + 45a0: 8622 mv a2,s0 + 45a2: 4581 li a1,0 + 45a4: 524000ef jal 4ac8 } + 45a8: 60e2 ld ra,24(sp) + 45aa: 6442 ld s0,16(sp) 45ac: 8526 mv a0,s1 45ae: 64a2 ld s1,8(sp) 45b0: 6105 addi sp,sp,32 45b2: 8082 ret + 45b4: 60e2 ld ra,24(sp) + 45b6: 6442 ld s0,16(sp) + errno = ENOMEM; + 45b8: 47b1 li a5,12 + return NULL; + 45ba: 4481 li s1,0 + errno = ENOMEM; + 45bc: 00003717 auipc a4,0x3 + 45c0: 16f72a23 sw a5,372(a4) # 7730 +} + 45c4: 8526 mv a0,s1 + 45c6: 64a2 ld s1,8(sp) + 45c8: 6105 addi sp,sp,32 + 45ca: 8082 ret -00000000000045b4 : +00000000000045cc : if (!ptr) - 45b4: c929 beqz a0,4606 + 45cc: c929 beqz a0,461e { - 45b6: 1101 addi sp,sp,-32 - 45b8: ec06 sd ra,24(sp) - 45ba: e426 sd s1,8(sp) + 45ce: 1101 addi sp,sp,-32 + 45d0: ec06 sd ra,24(sp) + 45d2: e426 sd s1,8(sp) if (size == 0) - 45bc: c5b9 beqz a1,460a + 45d4: c5b9 beqz a1,4622 if (bp->size >= new_size) - 45be: ff053703 ld a4,-16(a0) + 45d6: ff053703 ld a4,-16(a0) size_t new_size = ALIGN(size + sizeof(header_t)); - 45c2: 01f58793 addi a5,a1,31 - 45c6: e822 sd s0,16(sp) - 45c8: 9bc1 andi a5,a5,-16 - 45ca: 842a mv s0,a0 + 45da: 01f58793 addi a5,a1,31 + 45de: e822 sd s0,16(sp) + 45e0: 9bc1 andi a5,a5,-16 + 45e2: 842a mv s0,a0 return ptr; - 45cc: 84aa mv s1,a0 + 45e4: 84aa mv s1,a0 if (bp->size >= new_size) - 45ce: 00f76863 bltu a4,a5,45de - 45d2: 6442 ld s0,16(sp) -} - 45d4: 60e2 ld ra,24(sp) - 45d6: 8526 mv a0,s1 - 45d8: 64a2 ld s1,8(sp) - 45da: 6105 addi sp,sp,32 - 45dc: 8082 ret + 45e6: 00f76863 bltu a4,a5,45f6 + 45ea: 6442 ld s0,16(sp) +} + 45ec: 60e2 ld ra,24(sp) + 45ee: 8526 mv a0,s1 + 45f0: 64a2 ld s1,8(sp) + 45f2: 6105 addi sp,sp,32 + 45f4: 8082 ret void *new_ptr = malloc(size); - 45de: 852e mv a0,a1 - 45e0: edfff0ef jal 44be - 45e4: 84aa mv s1,a0 + 45f6: 852e mv a0,a1 + 45f8: ec7ff0ef jal 44be + 45fc: 84aa mv s1,a0 if (!new_ptr) - 45e6: d575 beqz a0,45d2 + 45fe: d575 beqz a0,45ea memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); - 45e8: ff043603 ld a2,-16(s0) - 45ec: 85a2 mv a1,s0 - 45ee: 1641 addi a2,a2,-16 - 45f0: 514000ef jal 4b04 + 4600: ff043603 ld a2,-16(s0) + 4604: 85a2 mv a1,s0 + 4606: 1641 addi a2,a2,-16 + 4608: 514000ef jal 4b1c free(ptr); - 45f4: 8522 mv a0,s0 - 45f6: e53ff0ef jal 4448 + 460c: 8522 mv a0,s0 + 460e: e3bff0ef jal 4448 } - 45fa: 60e2 ld ra,24(sp) + 4612: 60e2 ld ra,24(sp) free(ptr); - 45fc: 6442 ld s0,16(sp) + 4614: 6442 ld s0,16(sp) } - 45fe: 8526 mv a0,s1 - 4600: 64a2 ld s1,8(sp) - 4602: 6105 addi sp,sp,32 - 4604: 8082 ret + 4616: 8526 mv a0,s1 + 4618: 64a2 ld s1,8(sp) + 461a: 6105 addi sp,sp,32 + 461c: 8082 ret return malloc(size); - 4606: 852e mv a0,a1 - 4608: bd5d j 44be + 461e: 852e mv a0,a1 + 4620: bd79 j 44be free(ptr); - 460a: e3fff0ef jal 4448 + 4622: e27ff0ef jal 4448 return NULL; - 460e: 4481 li s1,0 - 4610: b7d1 j 45d4 + 4626: 4481 li s1,0 + 4628: b7d1 j 45ec -0000000000004612 : +000000000000462a : if (base < 0 || base == 1 || base > 36) - 4612: 02400813 li a6,36 + 462a: 02400813 li a6,36 { - 4616: 86aa mv a3,a0 - 4618: 872e mv a4,a1 + 462e: 86aa mv a3,a0 + 4630: 872e mv a4,a1 if (base < 0 || base == 1 || base > 36) - 461a: 00c86663 bltu a6,a2,4626 - 461e: 4805 li a6,1 - 4620: 01060363 beq a2,a6,4626 - 4624: b91d j 425a + 4632: 00c86663 bltu a6,a2,463e + 4636: 4805 li a6,1 + 4638: 01060363 beq a2,a6,463e + 463c: b939 j 425a if (endptr) - 4626: c311 beqz a4,462a + 463e: c311 beqz a4,4642 *endptr = (char *)nptr; - 4628: e314 sd a3,0(a4) + 4640: e314 sd a3,0(a4) errno = 0; /* EINVAL */ - 462a: 00003797 auipc a5,0x3 - 462e: 0e07a323 sw zero,230(a5) # 7710 + 4642: 00003797 auipc a5,0x3 + 4646: 0e07a723 sw zero,238(a5) # 7730 } - 4632: 4501 li a0,0 - 4634: 8082 ret + 464a: 4501 li a0,0 + 464c: 8082 ret -0000000000004636 : +000000000000464e : long long strtoll(const char *nptr, char **endptr, int base) { - 4636: 1141 addi sp,sp,-16 - 4638: e406 sd ra,8(sp) - 463a: e022 sd s0,0(sp) + 464e: 1141 addi sp,sp,-16 + 4650: e406 sd ra,8(sp) + 4652: e022 sd s0,0(sp) const char *s = nptr; - 463c: 86aa mv a3,a0 + 4654: 86aa mv a3,a0 static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } - 463e: 02000813 li a6,32 - 4642: 4891 li a7,4 + 4656: 02000813 li a6,32 + 465a: 4891 li a7,4 unsigned long long acc; int c, neg = 0; do { c = *s++; - 4644: 0006c783 lbu a5,0(a3) - 4648: 0685 addi a3,a3,1 - 464a: ff77871b addiw a4,a5,-9 - 464e: 0ff77713 zext.b a4,a4 - 4652: 0007841b sext.w s0,a5 - 4656: ff0787e3 beq a5,a6,4644 - 465a: fee8f5e3 bgeu a7,a4,4644 + 465c: 0006c783 lbu a5,0(a3) + 4660: 0685 addi a3,a3,1 + 4662: ff77871b addiw a4,a5,-9 + 4666: 0ff77713 zext.b a4,a4 + 466a: 0007841b sext.w s0,a5 + 466e: ff0787e3 beq a5,a6,465c + 4672: fee8f5e3 bgeu a7,a4,465c if (base < 0 || base == 1 || base > 36) - 465e: 02400793 li a5,36 - 4662: 02c7ec63 bltu a5,a2,469a - 4666: 4785 li a5,1 - 4668: 02f60963 beq a2,a5,469a - 466c: befff0ef jal 425a + 4676: 02400793 li a5,36 + 467a: 02c7ec63 bltu a5,a2,46b2 + 467e: 4785 li a5,1 + 4680: 02f60963 beq a2,a5,46b2 + 4684: bd7ff0ef jal 425a if (c == '-') neg = 1; acc = strtoull(nptr, endptr, base); if (errno == ERANGE && acc == ULLONG_MAX) - 4670: 00003797 auipc a5,0x3 - 4674: 0a078793 addi a5,a5,160 # 7710 - 4678: 4394 lw a3,0(a5) - 467a: 02200713 li a4,34 - 467e: 04e68363 beq a3,a4,46c4 + 4688: 00003797 auipc a5,0x3 + 468c: 0a878793 addi a5,a5,168 # 7730 + 4690: 4394 lw a3,0(a5) + 4692: 02200713 li a4,34 + 4696: 04e68363 beq a3,a4,46dc return neg ? LLONG_MIN : LLONG_MAX; if (!neg && acc > (unsigned long long)LLONG_MAX) - 4682: 02d00713 li a4,45 - 4686: 02e40563 beq s0,a4,46b0 - 468a: 00055f63 bgez a0,46a8 + 469a: 02d00713 li a4,45 + 469e: 02e40563 beq s0,a4,46c8 + 46a2: 00055f63 bgez a0,46c0 { errno = ERANGE; - 468e: 02200713 li a4,34 - 4692: c398 sw a4,0(a5) + 46a6: 02200713 li a4,34 + 46aa: c398 sw a4,0(a5) return neg ? LLONG_MIN : LLONG_MAX; - 4694: 557d li a0,-1 - 4696: 8105 srli a0,a0,0x1 - 4698: a801 j 46a8 + 46ac: 557d li a0,-1 + 46ae: 8105 srli a0,a0,0x1 + 46b0: a801 j 46c0 if (endptr) - 469a: c191 beqz a1,469e + 46b2: c191 beqz a1,46b6 *endptr = (char *)nptr; - 469c: e188 sd a0,0(a1) + 46b4: e188 sd a0,0(a1) errno = 0; /* EINVAL */ - 469e: 00003797 auipc a5,0x3 - 46a2: 0607a923 sw zero,114(a5) # 7710 + 46b6: 00003797 auipc a5,0x3 + 46ba: 0607ad23 sw zero,122(a5) # 7730 { errno = ERANGE; return LLONG_MIN; } return neg ? -(long long)acc : (long long)acc; - 46a6: 4501 li a0,0 + 46be: 4501 li a0,0 } - 46a8: 60a2 ld ra,8(sp) - 46aa: 6402 ld s0,0(sp) - 46ac: 0141 addi sp,sp,16 - 46ae: 8082 ret + 46c0: 60a2 ld ra,8(sp) + 46c2: 6402 ld s0,0(sp) + 46c4: 0141 addi sp,sp,16 + 46c6: 8082 ret if (neg && acc > (unsigned long long)LLONG_MAX + 1) - 46b0: 577d li a4,-1 - 46b2: 177e slli a4,a4,0x3f - 46b4: 02a76263 bltu a4,a0,46d8 + 46c8: 577d li a4,-1 + 46ca: 177e slli a4,a4,0x3f + 46cc: 02a76263 bltu a4,a0,46f0 } - 46b8: 60a2 ld ra,8(sp) - 46ba: 6402 ld s0,0(sp) + 46d0: 60a2 ld ra,8(sp) + 46d2: 6402 ld s0,0(sp) return neg ? -(long long)acc : (long long)acc; - 46bc: 40a00533 neg a0,a0 + 46d4: 40a00533 neg a0,a0 } - 46c0: 0141 addi sp,sp,16 - 46c2: 8082 ret + 46d8: 0141 addi sp,sp,16 + 46da: 8082 ret if (errno == ERANGE && acc == ULLONG_MAX) - 46c4: 577d li a4,-1 - 46c6: fae51ee3 bne a0,a4,4682 + 46dc: 577d li a4,-1 + 46de: fae51ee3 bne a0,a4,469a return neg ? LLONG_MIN : LLONG_MAX; - 46ca: 02d00793 li a5,45 - 46ce: fcf413e3 bne s0,a5,4694 + 46e2: 02d00793 li a5,45 + 46e6: fcf413e3 bne s0,a5,46ac return LLONG_MIN; - 46d2: 557d li a0,-1 - 46d4: 157e slli a0,a0,0x3f - 46d6: bfc9 j 46a8 + 46ea: 557d li a0,-1 + 46ec: 157e slli a0,a0,0x3f + 46ee: bfc9 j 46c0 errno = ERANGE; - 46d8: 02200713 li a4,34 - 46dc: c398 sw a4,0(a5) + 46f0: 02200713 li a4,34 + 46f4: c398 sw a4,0(a5) return LLONG_MIN; - 46de: bfd5 j 46d2 + 46f6: bfd5 j 46ea -00000000000046e0 : +00000000000046f8 : if (base < 0 || base == 1 || base > 36) - 46e0: 02400813 li a6,36 + 46f8: 02400813 li a6,36 unsigned long strtoul(const char *nptr, char **endptr, int base) { - 46e4: 86aa mv a3,a0 - 46e6: 872e mv a4,a1 + 46fc: 86aa mv a3,a0 + 46fe: 872e mv a4,a1 if (base < 0 || base == 1 || base > 36) - 46e8: 00c86663 bltu a6,a2,46f4 - 46ec: 4805 li a6,1 - 46ee: 01060363 beq a2,a6,46f4 - 46f2: b6a5 j 425a + 4700: 00c86663 bltu a6,a2,470c + 4704: 4805 li a6,1 + 4706: 01060363 beq a2,a6,470c + 470a: be81 j 425a if (endptr) - 46f4: c311 beqz a4,46f8 + 470c: c311 beqz a4,4710 *endptr = (char *)nptr; - 46f6: e314 sd a3,0(a4) + 470e: e314 sd a3,0(a4) errno = 0; /* EINVAL */ - 46f8: 00003797 auipc a5,0x3 - 46fc: 0007ac23 sw zero,24(a5) # 7710 + 4710: 00003797 auipc a5,0x3 + 4714: 0207a023 sw zero,32(a5) # 7730 { errno = ERANGE; return ULONG_MAX; } return (unsigned long)ret; } - 4700: 4501 li a0,0 - 4702: 8082 ret + 4718: 4501 li a0,0 + 471a: 8082 ret -0000000000004704 : +000000000000471c : long strtol(const char *nptr, char **endptr, int base) { long long ret = strtoll(nptr, endptr, base); - 4704: bf0d j 4636 + 471c: bf0d j 464e -0000000000004706 : +000000000000471e : return LONG_MIN; } return (long)ret; } int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 4706: 1141 addi sp,sp,-16 + 471e: 1141 addi sp,sp,-16 long long ret = strtoll(nptr, endptr, base); - 4708: 4629 li a2,10 - 470a: 4581 li a1,0 + 4720: 4629 li a2,10 + 4722: 4581 li a1,0 int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 470c: e406 sd ra,8(sp) + 4724: e406 sd ra,8(sp) long long ret = strtoll(nptr, endptr, base); - 470e: f29ff0ef jal 4636 + 4726: f29ff0ef jal 464e int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 4712: 60a2 ld ra,8(sp) - 4714: 2501 sext.w a0,a0 - 4716: 0141 addi sp,sp,16 - 4718: 8082 ret + 472a: 60a2 ld ra,8(sp) + 472c: 2501 sext.w a0,a0 + 472e: 0141 addi sp,sp,16 + 4730: 8082 ret -000000000000471a : +0000000000004732 : long long ret = strtoll(nptr, endptr, base); - 471a: 4629 li a2,10 - 471c: 4581 li a1,0 - 471e: bf21 j 4636 + 4732: 4629 li a2,10 + 4734: 4581 li a1,0 + 4736: bf21 j 464e -0000000000004720 : +0000000000004738 : long atol(const char *nptr) { return strtol(nptr, NULL, 10); } long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } - 4720: 4629 li a2,10 - 4722: 4581 li a1,0 - 4724: bf09 j 4636 + 4738: 4629 li a2,10 + 473a: 4581 li a1,0 + 473c: bf09 j 464e -0000000000004726 : - 4726: 02000693 li a3,32 - 472a: 4611 li a2,4 +000000000000473e : + 473e: 02000693 li a3,32 + 4742: 4611 li a2,4 { double val = 0.0; int sign = 1; const char *s = nptr; while (isspace(*s)) - 472c: 00054783 lbu a5,0(a0) - 4730: ff77871b addiw a4,a5,-9 - 4734: 0ff77713 zext.b a4,a4 - 4738: 06d78263 beq a5,a3,479c - 473c: 06e67063 bgeu a2,a4,479c + 4744: 00054783 lbu a5,0(a0) + 4748: ff77871b addiw a4,a5,-9 + 474c: 0ff77713 zext.b a4,a4 + 4750: 06d78263 beq a5,a3,47b4 + 4754: 06e67063 bgeu a2,a4,47b4 s++; if (*s == '-') - 4740: 02d00713 li a4,45 - 4744: 08e78e63 beq a5,a4,47e0 + 4758: 02d00713 li a4,45 + 475c: 08e78e63 beq a5,a4,47f8 { sign = -1; s++; } else if (*s == '+') - 4748: 02b00713 li a4,43 - 474c: 0ae78263 beq a5,a4,47f0 - 4750: 00001717 auipc a4,0x1 - 4754: 0e873507 fld fa0,232(a4) # 5838 + 4760: 02b00713 li a4,43 + 4764: 0ae78263 beq a5,a4,4808 + 4768: 00001717 auipc a4,0x1 + 476c: 0e073507 fld fa0,224(a4) # 5848 static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 4758: fd07861b addiw a2,a5,-48 + 4770: fd07861b addiw a2,a5,-48 s++; while (isdigit(*s)) - 475c: 46a5 li a3,9 - 475e: f20007d3 fmv.d.x fa5,zero - 4762: 8732 mv a4,a2 - 4764: 02c6e363 bltu a3,a2,478a - 4768: 00001797 auipc a5,0x1 - 476c: 0d87b687 fld fa3,216(a5) # 5840 - 4770: 4625 li a2,9 - 4772: 00154783 lbu a5,1(a0) + 4774: 46a5 li a3,9 + 4776: f20007d3 fmv.d.x fa5,zero + 477a: 8732 mv a4,a2 + 477c: 02c6e363 bltu a3,a2,47a2 + 4780: 00001797 auipc a5,0x1 + 4784: 0d07b687 fld fa3,208(a5) # 5850 + 4788: 4625 li a2,9 + 478a: 00154783 lbu a5,1(a0) { val = val * 10.0 + (*s - '0'); - 4776: d2070753 fcvt.d.w fa4,a4 + 478e: d2070753 fcvt.d.w fa4,a4 s++; - 477a: 0505 addi a0,a0,1 - 477c: fd07869b addiw a3,a5,-48 + 4792: 0505 addi a0,a0,1 + 4794: fd07869b addiw a3,a5,-48 val = val * 10.0 + (*s - '0'); - 4780: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 - 4784: 8736 mv a4,a3 + 4798: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 + 479c: 8736 mv a4,a3 while (isdigit(*s)) - 4786: fed676e3 bgeu a2,a3,4772 + 479e: fed676e3 bgeu a2,a3,478a } if (*s == '.') - 478a: 02e00713 li a4,46 - 478e: 00e78963 beq a5,a4,47a0 + 47a2: 02e00713 li a4,46 + 47a6: 00e78963 beq a5,a4,47b8 val += (*s - '0') * factor; s++; } } if (endptr) - 4792: c191 beqz a1,4796 + 47aa: c191 beqz a1,47ae *endptr = (char *)s; - 4794: e188 sd a0,0(a1) + 47ac: e188 sd a0,0(a1) return val * sign; } - 4796: 12a7f553 fmul.d fa0,fa5,fa0 - 479a: 8082 ret + 47ae: 12a7f553 fmul.d fa0,fa5,fa0 + 47b2: 8082 ret s++; - 479c: 0505 addi a0,a0,1 - 479e: b779 j 472c + 47b4: 0505 addi a0,a0,1 + 47b6: b779 j 4744 while (isdigit(*s)) - 47a0: 00154703 lbu a4,1(a0) - 47a4: 46a5 li a3,9 + 47b8: 00154703 lbu a4,1(a0) + 47bc: 46a5 li a3,9 s++; - 47a6: 0505 addi a0,a0,1 - 47a8: fd07071b addiw a4,a4,-48 - 47ac: 87ba mv a5,a4 + 47be: 0505 addi a0,a0,1 + 47c0: fd07071b addiw a4,a4,-48 + 47c4: 87ba mv a5,a4 while (isdigit(*s)) - 47ae: fee6e2e3 bltu a3,a4,4792 + 47c6: fee6e2e3 bltu a3,a4,47aa double factor = 1.0; - 47b2: 00001717 auipc a4,0x1 - 47b6: 08673707 fld fa4,134(a4) # 5838 - 47ba: 00001717 auipc a4,0x1 - 47be: 09e73607 fld fa2,158(a4) # 5858 + 47ca: 00001717 auipc a4,0x1 + 47ce: 07e73707 fld fa4,126(a4) # 5848 + 47d2: 00001717 auipc a4,0x1 + 47d6: 09673607 fld fa2,150(a4) # 5868 factor *= 0.1; - 47c2: 12c77753 fmul.d fa4,fa4,fa2 + 47da: 12c77753 fmul.d fa4,fa4,fa2 while (isdigit(*s)) - 47c6: 00154703 lbu a4,1(a0) + 47de: 00154703 lbu a4,1(a0) val += (*s - '0') * factor; - 47ca: d20786d3 fcvt.d.w fa3,a5 + 47e2: d20786d3 fcvt.d.w fa3,a5 s++; - 47ce: 0505 addi a0,a0,1 - 47d0: fd07071b addiw a4,a4,-48 - 47d4: 87ba mv a5,a4 + 47e6: 0505 addi a0,a0,1 + 47e8: fd07071b addiw a4,a4,-48 + 47ec: 87ba mv a5,a4 val += (*s - '0') * factor; - 47d6: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 + 47ee: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 while (isdigit(*s)) - 47da: fee6f4e3 bgeu a3,a4,47c2 - 47de: bf55 j 4792 + 47f2: fee6f4e3 bgeu a3,a4,47da + 47f6: bf55 j 47aa while (isdigit(*s)) - 47e0: 00154783 lbu a5,1(a0) - 47e4: 00001717 auipc a4,0x1 - 47e8: 04c73507 fld fa0,76(a4) # 5830 + 47f8: 00154783 lbu a5,1(a0) + 47fc: 00001717 auipc a4,0x1 + 4800: 04473507 fld fa0,68(a4) # 5840 s++; - 47ec: 0505 addi a0,a0,1 - 47ee: b7ad j 4758 + 4804: 0505 addi a0,a0,1 + 4806: b7ad j 4770 while (isdigit(*s)) - 47f0: 00154783 lbu a5,1(a0) - 47f4: 00001717 auipc a4,0x1 - 47f8: 04473507 fld fa0,68(a4) # 5838 + 4808: 00154783 lbu a5,1(a0) + 480c: 00001717 auipc a4,0x1 + 4810: 03c73507 fld fa0,60(a4) # 5848 s++; - 47fc: 0505 addi a0,a0,1 - 47fe: bfa9 j 4758 + 4814: 0505 addi a0,a0,1 + 4816: bfa9 j 4770 -0000000000004800 : +0000000000004818 : double atof(const char *nptr) { return strtod(nptr, NULL); } - 4800: 4581 li a1,0 - 4802: b715 j 4726 + 4818: 4581 li a1,0 + 481a: b715 j 473e -0000000000004804 : +000000000000481c : float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } - 4804: 1141 addi sp,sp,-16 - 4806: e406 sd ra,8(sp) - 4808: f1fff0ef jal 4726 - 480c: 60a2 ld ra,8(sp) - 480e: 40157553 fcvt.s.d fa0,fa0 - 4812: 0141 addi sp,sp,16 - 4814: 8082 ret - -0000000000004816 : + 481c: 1141 addi sp,sp,-16 + 481e: e406 sd ra,8(sp) + 4820: f1fff0ef jal 473e + 4824: 60a2 ld ra,8(sp) + 4826: 40157553 fcvt.s.d fa0,fa0 + 482a: 0141 addi sp,sp,16 + 482c: 8082 ret + +000000000000482e : } } void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { if (nmemb < 2 || size == 0) - 4816: 4785 li a5,1 - 4818: 0cb7fd63 bgeu a5,a1,48f2 + 482e: 4785 li a5,1 + 4830: 0cb7fd63 bgeu a5,a1,490a { - 481c: 715d addi sp,sp,-80 - 481e: f44e sd s3,40(sp) - 4820: e486 sd ra,72(sp) - 4822: 89b2 mv s3,a2 + 4834: 715d addi sp,sp,-80 + 4836: f44e sd s3,40(sp) + 4838: e486 sd ra,72(sp) + 483a: 89b2 mv s3,a2 if (nmemb < 2 || size == 0) - 4824: c279 beqz a2,48ea - 4826: e85a sd s6,16(sp) - 4828: 8b2e mv s6,a1 + 483c: c279 beqz a2,4902 + 483e: e85a sd s6,16(sp) + 4840: 8b2e mv s6,a1 return; char *base_ptr = (char *)base; char *pivot = base_ptr + (nmemb - 1) * size; - 482a: 1b7d addi s6,s6,-1 - 482c: fc26 sd s1,56(sp) - 482e: 033b04b3 mul s1,s6,s3 - 4832: ec56 sd s5,24(sp) - 4834: 8aaa mv s5,a0 - 4836: f052 sd s4,32(sp) - 4838: e45e sd s7,8(sp) - 483a: e0a2 sd s0,64(sp) - 483c: f84a sd s2,48(sp) - 483e: 8a36 mv s4,a3 + 4842: 1b7d addi s6,s6,-1 + 4844: fc26 sd s1,56(sp) + 4846: 033b04b3 mul s1,s6,s3 + 484a: ec56 sd s5,24(sp) + 484c: 8aaa mv s5,a0 + 484e: f052 sd s4,32(sp) + 4850: e45e sd s7,8(sp) + 4852: e0a2 sd s0,64(sp) + 4854: f84a sd s2,48(sp) + 4856: 8a36 mv s4,a3 if (nmemb < 2 || size == 0) - 4840: 4b85 li s7,1 + 4858: 4b85 li s7,1 char *pivot = base_ptr + (nmemb - 1) * size; - 4842: 94d6 add s1,s1,s5 + 485a: 94d6 add s1,s1,s5 char *i = base_ptr; char *j = base_ptr; /* Partition */ for (; j < pivot; j += size) - 4844: 069af763 bgeu s5,s1,48b2 + 485c: 069af763 bgeu s5,s1,48ca char *j = base_ptr; - 4848: 8956 mv s2,s5 + 4860: 8956 mv s2,s5 char *i = base_ptr; - 484a: 8456 mv s0,s5 - 484c: a021 j 4854 + 4862: 8456 mv s0,s5 + 4864: a021 j 486c for (; j < pivot; j += size) - 484e: 994e add s2,s2,s3 - 4850: 00997f63 bgeu s2,s1,486e + 4866: 994e add s2,s2,s3 + 4868: 00997f63 bgeu s2,s1,4886 { if (compar(j, pivot) < 0) - 4854: 85a6 mv a1,s1 - 4856: 854a mv a0,s2 - 4858: 9a02 jalr s4 - 485a: fe055ae3 bgez a0,484e + 486c: 85a6 mv a1,s1 + 486e: 854a mv a0,s2 + 4870: 9a02 jalr s4 + 4872: fe055ae3 bgez a0,4866 { if (i != j) - 485e: 05241d63 bne s0,s2,48b8 - 4862: 01390633 add a2,s2,s3 + 4876: 05241d63 bne s0,s2,48d0 + 487a: 01390633 add a2,s2,s3 swap_bytes(i, j, size); i += size; - 4866: 8432 mv s0,a2 + 487e: 8432 mv s0,a2 for (; j < pivot; j += size) - 4868: 994e add s2,s2,s3 - 486a: fe9965e3 bltu s2,s1,4854 + 4880: 994e add s2,s2,s3 + 4882: fe9965e3 bltu s2,s1,486c } } swap_bytes(i, pivot, size); /* Recurse */ size_t left_count = (i - base_ptr) / size; - 486e: 415405b3 sub a1,s0,s5 - 4872: 0335d5b3 divu a1,a1,s3 + 4886: 415405b3 sub a1,s0,s5 + 488a: 0335d5b3 divu a1,a1,s3 qsort(base, left_count, size, compar); qsort(i + size, nmemb - left_count - 1, size, compar); - 4876: 40bb0b33 sub s6,s6,a1 + 488e: 40bb0b33 sub s6,s6,a1 while (size--) - 487a: 013406b3 add a3,s0,s3 + 4892: 013406b3 add a3,s0,s3 *a++ = *b; - 487e: 0004c703 lbu a4,0(s1) + 4896: 0004c703 lbu a4,0(s1) temp = *a; - 4882: 00044783 lbu a5,0(s0) + 489a: 00044783 lbu a5,0(s0) *b++ = temp; - 4886: 0485 addi s1,s1,1 + 489e: 0485 addi s1,s1,1 *a++ = *b; - 4888: 0405 addi s0,s0,1 - 488a: fee40fa3 sb a4,-1(s0) + 48a0: 0405 addi s0,s0,1 + 48a2: fee40fa3 sb a4,-1(s0) *b++ = temp; - 488e: fef48fa3 sb a5,-1(s1) + 48a6: fef48fa3 sb a5,-1(s1) while (size--) - 4892: fed416e3 bne s0,a3,487e + 48aa: fed416e3 bne s0,a3,4896 qsort(base, left_count, size, compar); - 4896: 86d2 mv a3,s4 - 4898: 864e mv a2,s3 - 489a: 8556 mv a0,s5 - 489c: f7bff0ef jal 4816 + 48ae: 86d2 mv a3,s4 + 48b0: 864e mv a2,s3 + 48b2: 8556 mv a0,s5 + 48b4: f7bff0ef jal 482e if (nmemb < 2 || size == 0) - 48a0: 036bfe63 bgeu s7,s6,48dc + 48b8: 036bfe63 bgeu s7,s6,48f4 char *pivot = base_ptr + (nmemb - 1) * size; - 48a4: 1b7d addi s6,s6,-1 - 48a6: 033b04b3 mul s1,s6,s3 - 48aa: 8aa2 mv s5,s0 - 48ac: 94d6 add s1,s1,s5 + 48bc: 1b7d addi s6,s6,-1 + 48be: 033b04b3 mul s1,s6,s3 + 48c2: 8aa2 mv s5,s0 + 48c4: 94d6 add s1,s1,s5 for (; j < pivot; j += size) - 48ae: f89aede3 bltu s5,s1,4848 + 48c6: f89aede3 bltu s5,s1,4860 char *i = base_ptr; - 48b2: 8456 mv s0,s5 + 48ca: 8456 mv s0,s5 for (; j < pivot; j += size) - 48b4: 4581 li a1,0 - 48b6: b7d1 j 487a - 48b8: 01340633 add a2,s0,s3 + 48cc: 4581 li a1,0 + 48ce: b7d1 j 4892 + 48d0: 01340633 add a2,s0,s3 if (i != j) - 48bc: 874a mv a4,s2 - 48be: 87a2 mv a5,s0 + 48d4: 874a mv a4,s2 + 48d6: 87a2 mv a5,s0 *a++ = *b; - 48c0: 00074683 lbu a3,0(a4) + 48d8: 00074683 lbu a3,0(a4) temp = *a; - 48c4: 0007c803 lbu a6,0(a5) + 48dc: 0007c803 lbu a6,0(a5) *b++ = temp; - 48c8: 0705 addi a4,a4,1 + 48e0: 0705 addi a4,a4,1 *a++ = *b; - 48ca: 0785 addi a5,a5,1 - 48cc: fed78fa3 sb a3,-1(a5) + 48e2: 0785 addi a5,a5,1 + 48e4: fed78fa3 sb a3,-1(a5) *b++ = temp; - 48d0: ff070fa3 sb a6,-1(a4) + 48e8: ff070fa3 sb a6,-1(a4) while (size--) - 48d4: fec796e3 bne a5,a2,48c0 + 48ec: fec796e3 bne a5,a2,48d8 i += size; - 48d8: 8432 mv s0,a2 - 48da: b779 j 4868 - 48dc: 6406 ld s0,64(sp) - 48de: 74e2 ld s1,56(sp) - 48e0: 7942 ld s2,48(sp) - 48e2: 7a02 ld s4,32(sp) - 48e4: 6ae2 ld s5,24(sp) - 48e6: 6b42 ld s6,16(sp) - 48e8: 6ba2 ld s7,8(sp) -} - 48ea: 60a6 ld ra,72(sp) - 48ec: 79a2 ld s3,40(sp) - 48ee: 6161 addi sp,sp,80 - 48f0: 8082 ret - 48f2: 8082 ret - -00000000000048f4 : + 48f0: 8432 mv s0,a2 + 48f2: b779 j 4880 + 48f4: 6406 ld s0,64(sp) + 48f6: 74e2 ld s1,56(sp) + 48f8: 7942 ld s2,48(sp) + 48fa: 7a02 ld s4,32(sp) + 48fc: 6ae2 ld s5,24(sp) + 48fe: 6b42 ld s6,16(sp) + 4900: 6ba2 ld s7,8(sp) +} + 4902: 60a6 ld ra,72(sp) + 4904: 79a2 ld s3,40(sp) + 4906: 6161 addi sp,sp,80 + 4908: 8082 ret + 490a: 8082 ret + +000000000000490c : void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { - 48f4: 715d addi sp,sp,-80 - 48f6: e486 sd ra,72(sp) - 48f8: fc26 sd s1,56(sp) + 490c: 715d addi sp,sp,-80 + 490e: e486 sd ra,72(sp) + 4910: fc26 sd s1,56(sp) size_t l = 0, u = nmemb; while (l < u) - 48fa: c629 beqz a2,4944 - 48fc: f84a sd s2,48(sp) - 48fe: f44e sd s3,40(sp) - 4900: f052 sd s4,32(sp) - 4902: ec56 sd s5,24(sp) - 4904: e85a sd s6,16(sp) - 4906: e45e sd s7,8(sp) - 4908: e0a2 sd s0,64(sp) - 490a: 8932 mv s2,a2 - 490c: 8a2a mv s4,a0 - 490e: 8aae mv s5,a1 - 4910: 8b36 mv s6,a3 - 4912: 8bba mv s7,a4 + 4912: c629 beqz a2,495c + 4914: f84a sd s2,48(sp) + 4916: f44e sd s3,40(sp) + 4918: f052 sd s4,32(sp) + 491a: ec56 sd s5,24(sp) + 491c: e85a sd s6,16(sp) + 491e: e45e sd s7,8(sp) + 4920: e0a2 sd s0,64(sp) + 4922: 8932 mv s2,a2 + 4924: 8a2a mv s4,a0 + 4926: 8aae mv s5,a1 + 4928: 8b36 mv s6,a3 + 492a: 8bba mv s7,a4 size_t l = 0, u = nmemb; - 4914: 4981 li s3,0 + 492c: 4981 li s3,0 { size_t idx = (l + u) / 2; - 4916: 01298433 add s0,s3,s2 - 491a: 8005 srli s0,s0,0x1 + 492e: 01298433 add s0,s3,s2 + 4932: 8005 srli s0,s0,0x1 const void *p = (void *)((const char *)base + (idx * size)); - 491c: 036404b3 mul s1,s0,s6 + 4934: 036404b3 mul s1,s0,s6 int cmp = compar(key, p); - 4920: 8552 mv a0,s4 + 4938: 8552 mv a0,s4 const void *p = (void *)((const char *)base + (idx * size)); - 4922: 94d6 add s1,s1,s5 + 493a: 94d6 add s1,s1,s5 int cmp = compar(key, p); - 4924: 85a6 mv a1,s1 - 4926: 9b82 jalr s7 + 493c: 85a6 mv a1,s1 + 493e: 9b82 jalr s7 if (cmp < 0) - 4928: 02054463 bltz a0,4950 + 4940: 02054463 bltz a0,4968 u = idx; else if (cmp > 0) - 492c: c515 beqz a0,4958 + 4944: c515 beqz a0,4970 l = idx + 1; - 492e: 00140993 addi s3,s0,1 + 4946: 00140993 addi s3,s0,1 while (l < u) - 4932: ff29e2e3 bltu s3,s2,4916 - 4936: 6406 ld s0,64(sp) - 4938: 7942 ld s2,48(sp) - 493a: 79a2 ld s3,40(sp) - 493c: 7a02 ld s4,32(sp) - 493e: 6ae2 ld s5,24(sp) - 4940: 6b42 ld s6,16(sp) - 4942: 6ba2 ld s7,8(sp) + 494a: ff29e2e3 bltu s3,s2,492e + 494e: 6406 ld s0,64(sp) + 4950: 7942 ld s2,48(sp) + 4952: 79a2 ld s3,40(sp) + 4954: 7a02 ld s4,32(sp) + 4956: 6ae2 ld s5,24(sp) + 4958: 6b42 ld s6,16(sp) + 495a: 6ba2 ld s7,8(sp) else return (void *)p; } return NULL; } - 4944: 60a6 ld ra,72(sp) + 495c: 60a6 ld ra,72(sp) return NULL; - 4946: 4481 li s1,0 + 495e: 4481 li s1,0 } - 4948: 8526 mv a0,s1 - 494a: 74e2 ld s1,56(sp) - 494c: 6161 addi sp,sp,80 - 494e: 8082 ret + 4960: 8526 mv a0,s1 + 4962: 74e2 ld s1,56(sp) + 4964: 6161 addi sp,sp,80 + 4966: 8082 ret u = idx; - 4950: 8922 mv s2,s0 + 4968: 8922 mv s2,s0 while (l < u) - 4952: fd29e2e3 bltu s3,s2,4916 - 4956: b7c5 j 4936 - 4958: 6406 ld s0,64(sp) -} - 495a: 60a6 ld ra,72(sp) - 495c: 7942 ld s2,48(sp) - 495e: 79a2 ld s3,40(sp) - 4960: 7a02 ld s4,32(sp) - 4962: 6ae2 ld s5,24(sp) - 4964: 6b42 ld s6,16(sp) - 4966: 6ba2 ld s7,8(sp) - 4968: 8526 mv a0,s1 - 496a: 74e2 ld s1,56(sp) - 496c: 6161 addi sp,sp,80 - 496e: 8082 ret - -0000000000004970 : + 496a: fd29e2e3 bltu s3,s2,492e + 496e: b7c5 j 494e + 4970: 6406 ld s0,64(sp) +} + 4972: 60a6 ld ra,72(sp) + 4974: 7942 ld s2,48(sp) + 4976: 79a2 ld s3,40(sp) + 4978: 7a02 ld s4,32(sp) + 497a: 6ae2 ld s5,24(sp) + 497c: 6b42 ld s6,16(sp) + 497e: 6ba2 ld s7,8(sp) + 4980: 8526 mv a0,s1 + 4982: 74e2 ld s1,56(sp) + 4984: 6161 addi sp,sp,80 + 4986: 8082 ret + +0000000000004988 : /* Math & Mics */ int abs(int j) { return (j < 0) ? -j : j; } - 4970: 41f5579b sraiw a5,a0,0x1f - 4974: 8d3d xor a0,a0,a5 - 4976: 9d1d subw a0,a0,a5 - 4978: 8082 ret + 4988: 41f5579b sraiw a5,a0,0x1f + 498c: 8d3d xor a0,a0,a5 + 498e: 9d1d subw a0,a0,a5 + 4990: 8082 ret -000000000000497a : +0000000000004992 : long labs(long j) { return (j < 0) ? -j : j; } - 497a: 43f55793 srai a5,a0,0x3f - 497e: 8d3d xor a0,a0,a5 - 4980: 8d1d sub a0,a0,a5 - 4982: 8082 ret + 4992: 43f55793 srai a5,a0,0x3f + 4996: 8d3d xor a0,a0,a5 + 4998: 8d1d sub a0,a0,a5 + 499a: 8082 ret -0000000000004984 : +000000000000499c : long long llabs(long long j) { return (j < 0) ? -j : j; } - 4984: 43f55793 srai a5,a0,0x3f - 4988: 8d3d xor a0,a0,a5 - 498a: 8d1d sub a0,a0,a5 - 498c: 8082 ret + 499c: 43f55793 srai a5,a0,0x3f + 49a0: 8d3d xor a0,a0,a5 + 49a2: 8d1d sub a0,a0,a5 + 49a4: 8082 ret -000000000000498e
: +00000000000049a6
: div_t div(int numer, int denom) { div_t res = {numer / denom, numer % denom}; - 498e: 02b547bb divw a5,a0,a1 + 49a6: 02b547bb divw a5,a0,a1 { - 4992: 1141 addi sp,sp,-16 + 49aa: 1141 addi sp,sp,-16 return res; } - 4994: 0141 addi sp,sp,16 + 49ac: 0141 addi sp,sp,16 div_t res = {numer / denom, numer % denom}; - 4996: 02b5653b remw a0,a0,a1 + 49ae: 02b5653b remw a0,a0,a1 return res; - 499a: 1782 slli a5,a5,0x20 - 499c: 9381 srli a5,a5,0x20 - 499e: 1502 slli a0,a0,0x20 + 49b2: 1782 slli a5,a5,0x20 + 49b4: 9381 srli a5,a5,0x20 + 49b6: 1502 slli a0,a0,0x20 } - 49a0: 8d5d or a0,a0,a5 - 49a2: 8082 ret + 49b8: 8d5d or a0,a0,a5 + 49ba: 8082 ret -00000000000049a4 : +00000000000049bc : ldiv_t ldiv(long numer, long denom) { - 49a4: 1141 addi sp,sp,-16 - 49a6: 87aa mv a5,a0 + 49bc: 1141 addi sp,sp,-16 + 49be: 87aa mv a5,a0 ldiv_t res = {numer / denom, numer % denom}; return res; } - 49a8: 02b54533 div a0,a0,a1 - 49ac: 0141 addi sp,sp,16 - 49ae: 02b7e5b3 rem a1,a5,a1 - 49b2: 8082 ret + 49c0: 02b54533 div a0,a0,a1 + 49c4: 0141 addi sp,sp,16 + 49c6: 02b7e5b3 rem a1,a5,a1 + 49ca: 8082 ret -00000000000049b4 : +00000000000049cc : lldiv_t lldiv(long long numer, long long denom) { - 49b4: 1141 addi sp,sp,-16 - 49b6: 87aa mv a5,a0 + 49cc: 1141 addi sp,sp,-16 + 49ce: 87aa mv a5,a0 lldiv_t res = {numer / denom, numer % denom}; return res; } - 49b8: 02b54533 div a0,a0,a1 - 49bc: 0141 addi sp,sp,16 - 49be: 02b7e5b3 rem a1,a5,a1 - 49c2: 8082 ret + 49d0: 02b54533 div a0,a0,a1 + 49d4: 0141 addi sp,sp,16 + 49d6: 02b7e5b3 rem a1,a5,a1 + 49da: 8082 ret -00000000000049c4 : +00000000000049dc : static unsigned long next = 1; int rand(void) { next = next * 1103515245 + 12345; - 49c4: 00003697 auipc a3,0x3 - 49c8: d0468693 addi a3,a3,-764 # 76c8 - 49cc: 629c ld a5,0(a3) - 49ce: 41c65737 lui a4,0x41c65 - 49d2: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5d625> - 49d6: 02e787b3 mul a5,a5,a4 - 49da: 670d lui a4,0x3 - 49dc: 03970713 addi a4,a4,57 # 3039 - 49e0: 97ba add a5,a5,a4 + 49dc: 00003697 auipc a3,0x3 + 49e0: d0c68693 addi a3,a3,-756 # 76e8 + 49e4: 629c ld a5,0(a3) + 49e6: 41c65737 lui a4,0x41c65 + 49ea: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5d605> + 49ee: 02e787b3 mul a5,a5,a4 + 49f2: 670d lui a4,0x3 + 49f4: 03970713 addi a4,a4,57 # 3039 + 49f8: 97ba add a5,a5,a4 return (unsigned int)(next / 65536) % 32768; - 49e2: 02179513 slli a0,a5,0x21 + 49fa: 02179513 slli a0,a5,0x21 next = next * 1103515245 + 12345; - 49e6: e29c sd a5,0(a3) + 49fe: e29c sd a5,0(a3) } - 49e8: 9145 srli a0,a0,0x31 - 49ea: 8082 ret + 4a00: 9145 srli a0,a0,0x31 + 4a02: 8082 ret -00000000000049ec : +0000000000004a04 : void srand(unsigned int seed) { next = seed; } - 49ec: 1502 slli a0,a0,0x20 - 49ee: 9101 srli a0,a0,0x20 - 49f0: 00003797 auipc a5,0x3 - 49f4: cca7bc23 sd a0,-808(a5) # 76c8 - 49f8: 8082 ret + 4a04: 1502 slli a0,a0,0x20 + 4a06: 9101 srli a0,a0,0x20 + 4a08: 00003797 auipc a5,0x3 + 4a0c: cea7b023 sd a0,-800(a5) # 76e8 + 4a10: 8082 ret -00000000000049fa : +0000000000004a12 : /* Stub */ int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } - 49fa: c901 beqz a0,4a0a - 49fc: 00054783 lbu a5,0(a0) - 4a00: 4501 li a0,0 - 4a02: c789 beqz a5,4a0c - 4a04: 00b03533 snez a0,a1 - 4a08: 8082 ret - 4a0a: 4501 li a0,0 - 4a0c: 8082 ret - -0000000000004a0e : + 4a12: c901 beqz a0,4a22 + 4a14: 00054783 lbu a5,0(a0) + 4a18: 4501 li a0,0 + 4a1a: c789 beqz a5,4a24 + 4a1c: 00b03533 snez a0,a1 + 4a20: 8082 ret + 4a22: 4501 li a0,0 + 4a24: 8082 ret + +0000000000004a26 : int mbtowc(wchar_t *pwc, const char *s, size_t n) { - 4a0e: 87aa mv a5,a0 + 4a26: 87aa mv a5,a0 if (!s) - 4a10: cd81 beqz a1,4a28 + 4a28: cd81 beqz a1,4a40 return 0; if (n == 0) return -1; - 4a12: 557d li a0,-1 + 4a2a: 557d li a0,-1 if (n == 0) - 4a14: ca19 beqz a2,4a2a + 4a2c: ca19 beqz a2,4a42 if (pwc) - 4a16: c781 beqz a5,4a1e + 4a2e: c781 beqz a5,4a36 *pwc = (wchar_t)*s; - 4a18: 0005c703 lbu a4,0(a1) - 4a1c: c398 sw a4,0(a5) + 4a30: 0005c703 lbu a4,0(a1) + 4a34: c398 sw a4,0(a5) return (*s != 0); - 4a1e: 0005c503 lbu a0,0(a1) - 4a22: 00a03533 snez a0,a0 - 4a26: 8082 ret + 4a36: 0005c503 lbu a0,0(a1) + 4a3a: 00a03533 snez a0,a0 + 4a3e: 8082 ret return 0; - 4a28: 4501 li a0,0 + 4a40: 4501 li a0,0 } - 4a2a: 8082 ret + 4a42: 8082 ret -0000000000004a2c : +0000000000004a44 : int wctomb(char *s, wchar_t wchar) { if (!s) - 4a2c: c509 beqz a0,4a36 + 4a44: c509 beqz a0,4a4e return 0; *s = (char)wchar; - 4a2e: 00b50023 sb a1,0(a0) + 4a46: 00b50023 sb a1,0(a0) return 1; - 4a32: 4505 li a0,1 - 4a34: 8082 ret + 4a4a: 4505 li a0,1 + 4a4c: 8082 ret return 0; - 4a36: 4501 li a0,0 + 4a4e: 4501 li a0,0 } - 4a38: 8082 ret + 4a50: 8082 ret -0000000000004a3a : +0000000000004a52 : size_t mbstowcs(wchar_t *dest, const char *src, size_t n) { size_t i = 0; while (src[i] && i < n) - 4a3a: 0005c703 lbu a4,0(a1) - 4a3e: cb0d beqz a4,4a70 - 4a40: ca15 beqz a2,4a74 - 4a42: 86aa mv a3,a0 + 4a52: 0005c703 lbu a4,0(a1) + 4a56: cb0d beqz a4,4a88 + 4a58: ca15 beqz a2,4a8c + 4a5a: 86aa mv a3,a0 size_t i = 0; - 4a44: 4781 li a5,0 - 4a46: a019 j 4a4c + 4a5c: 4781 li a5,0 + 4a5e: a019 j 4a64 while (src[i] && i < n) - 4a48: 02f60263 beq a2,a5,4a6c + 4a60: 02f60263 beq a2,a5,4a84 { dest[i] = (wchar_t)src[i]; i++; - 4a4c: 0785 addi a5,a5,1 + 4a64: 0785 addi a5,a5,1 dest[i] = (wchar_t)src[i]; - 4a4e: c298 sw a4,0(a3) + 4a66: c298 sw a4,0(a3) while (src[i] && i < n) - 4a50: 00f58733 add a4,a1,a5 - 4a54: 00074703 lbu a4,0(a4) - 4a58: 0691 addi a3,a3,4 - 4a5a: f77d bnez a4,4a48 + 4a68: 00f58733 add a4,a1,a5 + 4a6c: 00074703 lbu a4,0(a4) + 4a70: 0691 addi a3,a3,4 + 4a72: f77d bnez a4,4a60 } if (i < n) - 4a5c: 00c7f763 bgeu a5,a2,4a6a + 4a74: 00c7f763 bgeu a5,a2,4a82 dest[i] = 0; - 4a60: 00279713 slli a4,a5,0x2 - 4a64: 953a add a0,a0,a4 - 4a66: 00052023 sw zero,0(a0) + 4a78: 00279713 slli a4,a5,0x2 + 4a7c: 953a add a0,a0,a4 + 4a7e: 00052023 sw zero,0(a0) size_t i = 0; - 4a6a: 863e mv a2,a5 - 4a6c: 8532 mv a0,a2 - 4a6e: 8082 ret - 4a70: 4781 li a5,0 - 4a72: b7ed j 4a5c - 4a74: 4501 li a0,0 + 4a82: 863e mv a2,a5 + 4a84: 8532 mv a0,a2 + 4a86: 8082 ret + 4a88: 4781 li a5,0 + 4a8a: b7ed j 4a74 + 4a8c: 4501 li a0,0 return i; } - 4a76: 8082 ret + 4a8e: 8082 ret -0000000000004a78 : +0000000000004a90 : size_t wcstombs(char *dest, const wchar_t *src, size_t n) { size_t i = 0; while (src[i] && i < n) - 4a78: 4198 lw a4,0(a1) - 4a7a: c71d beqz a4,4aa8 - 4a7c: ca05 beqz a2,4aac - 4a7e: 0591 addi a1,a1,4 + 4a90: 4198 lw a4,0(a1) + 4a92: c71d beqz a4,4ac0 + 4a94: ca05 beqz a2,4ac4 + 4a96: 0591 addi a1,a1,4 size_t i = 0; - 4a80: 4781 li a5,0 - 4a82: a019 j 4a88 + 4a98: 4781 li a5,0 + 4a9a: a019 j 4aa0 while (src[i] && i < n) - 4a84: 02f60063 beq a2,a5,4aa4 + 4a9c: 02f60063 beq a2,a5,4abc { dest[i] = (char)src[i]; - 4a88: 00f506b3 add a3,a0,a5 - 4a8c: 00e68023 sb a4,0(a3) + 4aa0: 00f506b3 add a3,a0,a5 + 4aa4: 00e68023 sb a4,0(a3) while (src[i] && i < n) - 4a90: 4198 lw a4,0(a1) + 4aa8: 4198 lw a4,0(a1) i++; - 4a92: 0785 addi a5,a5,1 + 4aaa: 0785 addi a5,a5,1 while (src[i] && i < n) - 4a94: 0591 addi a1,a1,4 - 4a96: f77d bnez a4,4a84 + 4aac: 0591 addi a1,a1,4 + 4aae: f77d bnez a4,4a9c } if (i < n) - 4a98: 00c7f563 bgeu a5,a2,4aa2 + 4ab0: 00c7f563 bgeu a5,a2,4aba dest[i] = 0; - 4a9c: 953e add a0,a0,a5 - 4a9e: 00050023 sb zero,0(a0) + 4ab4: 953e add a0,a0,a5 + 4ab6: 00050023 sb zero,0(a0) size_t i = 0; - 4aa2: 863e mv a2,a5 - 4aa4: 8532 mv a0,a2 - 4aa6: 8082 ret - 4aa8: 4781 li a5,0 - 4aaa: b7fd j 4a98 - 4aac: 4501 li a0,0 + 4aba: 863e mv a2,a5 + 4abc: 8532 mv a0,a2 + 4abe: 8082 ret + 4ac0: 4781 li a5,0 + 4ac2: b7fd j 4ab0 + 4ac4: 4501 li a0,0 return i; - 4aae: 8082 ret + 4ac6: 8082 ret -0000000000004ab0 : +0000000000004ac8 : void *memset(void *dst, int c, size_t n) { char *cdst = (char *)dst; for (size_t i = 0; i < n; i++) cdst[i] = (char)c; - 4ab0: 0ff5f593 zext.b a1,a1 - 4ab4: 87aa mv a5,a0 - 4ab6: 00a60733 add a4,a2,a0 + 4ac8: 0ff5f593 zext.b a1,a1 + 4acc: 87aa mv a5,a0 + 4ace: 00a60733 add a4,a2,a0 for (size_t i = 0; i < n; i++) - 4aba: c611 beqz a2,4ac6 + 4ad2: c611 beqz a2,4ade cdst[i] = (char)c; - 4abc: 00b78023 sb a1,0(a5) + 4ad4: 00b78023 sb a1,0(a5) for (size_t i = 0; i < n; i++) - 4ac0: 0785 addi a5,a5,1 - 4ac2: fee79de3 bne a5,a4,4abc + 4ad8: 0785 addi a5,a5,1 + 4ada: fee79de3 bne a5,a4,4ad4 return dst; } - 4ac6: 8082 ret + 4ade: 8082 ret -0000000000004ac8 : +0000000000004ae0 : void *memmove(void *vdst, const void *vsrc, size_t n) { char *dst = (char *)vdst; const char *src = (const char *)vsrc; if (dst == src) - 4ac8: 02b50d63 beq a0,a1,4b02 + 4ae0: 02b50d63 beq a0,a1,4b1a return vdst; if (src > dst) - 4acc: 00b57e63 bgeu a0,a1,4ae8 + 4ae4: 00b57e63 bgeu a0,a1,4b00 { while (n--) - 4ad0: ca0d beqz a2,4b02 - 4ad2: 962a add a2,a2,a0 + 4ae8: ca0d beqz a2,4b1a + 4aea: 962a add a2,a2,a0 char *dst = (char *)vdst; - 4ad4: 87aa mv a5,a0 + 4aec: 87aa mv a5,a0 *dst++ = *src++; - 4ad6: 0005c703 lbu a4,0(a1) - 4ada: 0785 addi a5,a5,1 - 4adc: 0585 addi a1,a1,1 - 4ade: fee78fa3 sb a4,-1(a5) + 4aee: 0005c703 lbu a4,0(a1) + 4af2: 0785 addi a5,a5,1 + 4af4: 0585 addi a1,a1,1 + 4af6: fee78fa3 sb a4,-1(a5) while (n--) - 4ae2: fec79ae3 bne a5,a2,4ad6 - 4ae6: 8082 ret + 4afa: fec79ae3 bne a5,a2,4aee + 4afe: 8082 ret } else { dst += n; - 4ae8: 00c50733 add a4,a0,a2 + 4b00: 00c50733 add a4,a0,a2 src += n; - 4aec: 00c587b3 add a5,a1,a2 + 4b04: 00c587b3 add a5,a1,a2 while (n-- > 0) - 4af0: ca09 beqz a2,4b02 + 4b08: ca09 beqz a2,4b1a *--dst = *--src; - 4af2: fff7c683 lbu a3,-1(a5) - 4af6: 17fd addi a5,a5,-1 - 4af8: 177d addi a4,a4,-1 - 4afa: 00d70023 sb a3,0(a4) + 4b0a: fff7c683 lbu a3,-1(a5) + 4b0e: 17fd addi a5,a5,-1 + 4b10: 177d addi a4,a4,-1 + 4b12: 00d70023 sb a3,0(a4) while (n-- > 0) - 4afe: fef59ae3 bne a1,a5,4af2 + 4b16: fef59ae3 bne a1,a5,4b0a } return vdst; } - 4b02: 8082 ret + 4b1a: 8082 ret -0000000000004b04 : +0000000000004b1c : void *memcpy(void *vdst, const void *vsrc, size_t n) { return memmove(vdst, vsrc, n); - 4b04: b7d1 j 4ac8 + 4b1c: b7d1 j 4ae0 -0000000000004b06 : +0000000000004b1e : int memcmp(const void *s1, const void *s2, size_t n) { const unsigned char *p1 = (const unsigned char *)s1; const unsigned char *p2 = (const unsigned char *)s2; while (n--) - 4b06: c205 beqz a2,4b26 - 4b08: 962a add a2,a2,a0 - 4b0a: a019 j 4b10 - 4b0c: 00c50d63 beq a0,a2,4b26 + 4b1e: c205 beqz a2,4b3e + 4b20: 962a add a2,a2,a0 + 4b22: a019 j 4b28 + 4b24: 00c50d63 beq a0,a2,4b3e { if (*p1 != *p2) - 4b10: 00054783 lbu a5,0(a0) - 4b14: 0005c703 lbu a4,0(a1) + 4b28: 00054783 lbu a5,0(a0) + 4b2c: 0005c703 lbu a4,0(a1) return *p1 - *p2; p1++; - 4b18: 0505 addi a0,a0,1 + 4b30: 0505 addi a0,a0,1 p2++; - 4b1a: 0585 addi a1,a1,1 + 4b32: 0585 addi a1,a1,1 if (*p1 != *p2) - 4b1c: fee788e3 beq a5,a4,4b0c + 4b34: fee788e3 beq a5,a4,4b24 return *p1 - *p2; - 4b20: 40e7853b subw a0,a5,a4 - 4b24: 8082 ret + 4b38: 40e7853b subw a0,a5,a4 + 4b3c: 8082 ret } return 0; - 4b26: 4501 li a0,0 + 4b3e: 4501 li a0,0 } - 4b28: 8082 ret + 4b40: 8082 ret -0000000000004b2a : +0000000000004b42 : void *memchr(const void *s, int c, size_t n) { const unsigned char *p = (const unsigned char *)s; while (n--) - 4b2a: ce09 beqz a2,4b44 + 4b42: ce09 beqz a2,4b5c { if (*p == (unsigned char)c) - 4b2c: 0ff5f593 zext.b a1,a1 - 4b30: 962a add a2,a2,a0 - 4b32: a021 j 4b3a + 4b44: 0ff5f593 zext.b a1,a1 + 4b48: 962a add a2,a2,a0 + 4b4a: a021 j 4b52 return (void *)p; p++; - 4b34: 0505 addi a0,a0,1 + 4b4c: 0505 addi a0,a0,1 while (n--) - 4b36: 00a60763 beq a2,a0,4b44 + 4b4e: 00a60763 beq a2,a0,4b5c if (*p == (unsigned char)c) - 4b3a: 00054783 lbu a5,0(a0) - 4b3e: feb79be3 bne a5,a1,4b34 + 4b52: 00054783 lbu a5,0(a0) + 4b56: feb79be3 bne a5,a1,4b4c } return NULL; } - 4b42: 8082 ret + 4b5a: 8082 ret return NULL; - 4b44: 4501 li a0,0 + 4b5c: 4501 li a0,0 } - 4b46: 8082 ret + 4b5e: 8082 ret -0000000000004b48 : +0000000000004b60 : /* String Manipulation Functions */ size_t strlen(const char *s) { const char *p = s; while (*p) - 4b48: 00054783 lbu a5,0(a0) - 4b4c: cb89 beqz a5,4b5e + 4b60: 00054783 lbu a5,0(a0) + 4b64: cb89 beqz a5,4b76 const char *p = s; - 4b4e: 87aa mv a5,a0 + 4b66: 87aa mv a5,a0 while (*p) - 4b50: 0017c703 lbu a4,1(a5) + 4b68: 0017c703 lbu a4,1(a5) p++; - 4b54: 0785 addi a5,a5,1 + 4b6c: 0785 addi a5,a5,1 while (*p) - 4b56: ff6d bnez a4,4b50 + 4b6e: ff6d bnez a4,4b68 return (size_t)(p - s); - 4b58: 40a78533 sub a0,a5,a0 - 4b5c: 8082 ret + 4b70: 40a78533 sub a0,a5,a0 + 4b74: 8082 ret while (*p) - 4b5e: 4501 li a0,0 + 4b76: 4501 li a0,0 } - 4b60: 8082 ret + 4b78: 8082 ret -0000000000004b62 : +0000000000004b7a : char *strcpy(char *dst, const char *src) { char *os = dst; while ((*dst++ = *src++) != 0) - 4b62: 87aa mv a5,a0 - 4b64: 0005c703 lbu a4,0(a1) - 4b68: 0785 addi a5,a5,1 - 4b6a: 0585 addi a1,a1,1 - 4b6c: fee78fa3 sb a4,-1(a5) - 4b70: fb75 bnez a4,4b64 + 4b7a: 87aa mv a5,a0 + 4b7c: 0005c703 lbu a4,0(a1) + 4b80: 0785 addi a5,a5,1 + 4b82: 0585 addi a1,a1,1 + 4b84: fee78fa3 sb a4,-1(a5) + 4b88: fb75 bnez a4,4b7c ; return os; } - 4b72: 8082 ret + 4b8a: 8082 ret -0000000000004b74 : +0000000000004b8c : char *strncpy(char *dst, const char *src, size_t n) { char *os = dst; size_t i; for (i = 0; i < n && src[i] != '\0'; i++) - 4b74: 4781 li a5,0 - 4b76: e619 bnez a2,4b84 - 4b78: 8082 ret + 4b8c: 4781 li a5,0 + 4b8e: e619 bnez a2,4b9c + 4b90: 8082 ret dst[i] = src[i]; - 4b7a: 00e68023 sb a4,0(a3) + 4b92: 00e68023 sb a4,0(a3) for (i = 0; i < n && src[i] != '\0'; i++) - 4b7e: 0785 addi a5,a5,1 - 4b80: 02f60263 beq a2,a5,4ba4 - 4b84: 00f58733 add a4,a1,a5 - 4b88: 00074703 lbu a4,0(a4) + 4b96: 0785 addi a5,a5,1 + 4b98: 02f60263 beq a2,a5,4bbc + 4b9c: 00f58733 add a4,a1,a5 + 4ba0: 00074703 lbu a4,0(a4) dst[i] = src[i]; - 4b8c: 00f506b3 add a3,a0,a5 + 4ba4: 00f506b3 add a3,a0,a5 for (i = 0; i < n && src[i] != '\0'; i++) - 4b90: f76d bnez a4,4b7a + 4ba8: f76d bnez a4,4b92 for (; i < n; i++) - 4b92: 00c7f963 bgeu a5,a2,4ba4 - 4b96: 87b6 mv a5,a3 - 4b98: 962a add a2,a2,a0 + 4baa: 00c7f963 bgeu a5,a2,4bbc + 4bae: 87b6 mv a5,a3 + 4bb0: 962a add a2,a2,a0 dst[i] = '\0'; - 4b9a: 00078023 sb zero,0(a5) + 4bb2: 00078023 sb zero,0(a5) for (; i < n; i++) - 4b9e: 0785 addi a5,a5,1 - 4ba0: fec79de3 bne a5,a2,4b9a + 4bb6: 0785 addi a5,a5,1 + 4bb8: fec79de3 bne a5,a2,4bb2 return os; } - 4ba4: 8082 ret + 4bbc: 8082 ret -0000000000004ba6 : +0000000000004bbe : char *strcat(char *dst, const char *src) { char *os = dst; while (*dst) - 4ba6: 00054783 lbu a5,0(a0) - 4baa: cf91 beqz a5,4bc6 - 4bac: 87aa mv a5,a0 - 4bae: 0017c703 lbu a4,1(a5) + 4bbe: 00054783 lbu a5,0(a0) + 4bc2: cf91 beqz a5,4bde + 4bc4: 87aa mv a5,a0 + 4bc6: 0017c703 lbu a4,1(a5) dst++; - 4bb2: 0785 addi a5,a5,1 + 4bca: 0785 addi a5,a5,1 while (*dst) - 4bb4: ff6d bnez a4,4bae + 4bcc: ff6d bnez a4,4bc6 while ((*dst++ = *src++) != 0) - 4bb6: 0005c703 lbu a4,0(a1) - 4bba: 0785 addi a5,a5,1 - 4bbc: 0585 addi a1,a1,1 - 4bbe: fee78fa3 sb a4,-1(a5) - 4bc2: fb75 bnez a4,4bb6 + 4bce: 0005c703 lbu a4,0(a1) + 4bd2: 0785 addi a5,a5,1 + 4bd4: 0585 addi a1,a1,1 + 4bd6: fee78fa3 sb a4,-1(a5) + 4bda: fb75 bnez a4,4bce ; return os; } - 4bc4: 8082 ret + 4bdc: 8082 ret while ((*dst++ = *src++) != 0) - 4bc6: 0005c703 lbu a4,0(a1) + 4bde: 0005c703 lbu a4,0(a1) while (*dst) - 4bca: 87aa mv a5,a0 + 4be2: 87aa mv a5,a0 while ((*dst++ = *src++) != 0) - 4bcc: 0785 addi a5,a5,1 - 4bce: fee78fa3 sb a4,-1(a5) - 4bd2: 0585 addi a1,a1,1 - 4bd4: f36d bnez a4,4bb6 - 4bd6: 8082 ret + 4be4: 0785 addi a5,a5,1 + 4be6: fee78fa3 sb a4,-1(a5) + 4bea: 0585 addi a1,a1,1 + 4bec: f36d bnez a4,4bce + 4bee: 8082 ret -0000000000004bd8 : +0000000000004bf0 : while (*p) - 4bd8: 00054783 lbu a5,0(a0) + 4bf0: 00054783 lbu a5,0(a0) const char *p = s; - 4bdc: 872a mv a4,a0 + 4bf4: 872a mv a4,a0 while (*p) - 4bde: c789 beqz a5,4be8 - 4be0: 00174783 lbu a5,1(a4) + 4bf6: c789 beqz a5,4c00 + 4bf8: 00174783 lbu a5,1(a4) p++; - 4be4: 0705 addi a4,a4,1 + 4bfc: 0705 addi a4,a4,1 while (*p) - 4be6: ffed bnez a5,4be0 + 4bfe: ffed bnez a5,4bf8 size_t dest_len = strlen(dst); size_t i; dst += dest_len; for (i = 0; i < n && src[i] != '\0'; i++) - 4be8: 86ba mv a3,a4 - 4bea: 4781 li a5,0 - 4bec: 88ba mv a7,a4 - 4bee: ea01 bnez a2,4bfe - 4bf0: a839 j 4c0e + 4c00: 86ba mv a3,a4 + 4c02: 4781 li a5,0 + 4c04: 88ba mv a7,a4 + 4c06: ea01 bnez a2,4c16 + 4c08: a839 j 4c26 dst[i] = src[i]; - 4bf2: 01068023 sb a6,0(a3) + 4c0a: 01068023 sb a6,0(a3) for (i = 0; i < n && src[i] != '\0'; i++) - 4bf6: 00188693 addi a3,a7,1 - 4bfa: 00f60d63 beq a2,a5,4c14 - 4bfe: 00f58833 add a6,a1,a5 - 4c02: 00084803 lbu a6,0(a6) - 4c06: 0785 addi a5,a5,1 + 4c0e: 00188693 addi a3,a7,1 + 4c12: 00f60d63 beq a2,a5,4c2c + 4c16: 00f58833 add a6,a1,a5 + 4c1a: 00084803 lbu a6,0(a6) + 4c1e: 0785 addi a5,a5,1 dst[i] = src[i]; - 4c08: 88b6 mv a7,a3 + 4c20: 88b6 mv a7,a3 for (i = 0; i < n && src[i] != '\0'; i++) - 4c0a: fe0814e3 bnez a6,4bf2 + 4c22: fe0814e3 bnez a6,4c0a dst[i] = '\0'; - 4c0e: 00088023 sb zero,0(a7) + 4c26: 00088023 sb zero,0(a7) return os; } - 4c12: 8082 ret + 4c2a: 8082 ret dst[i] = '\0'; - 4c14: 00c708b3 add a7,a4,a2 - 4c18: 00088023 sb zero,0(a7) + 4c2c: 00c708b3 add a7,a4,a2 + 4c30: 00088023 sb zero,0(a7) } - 4c1c: 8082 ret + 4c34: 8082 ret -0000000000004c1e : +0000000000004c36 : int strcmp(const char *p, const char *q) { while (*p && *p == *q) - 4c1e: 00054783 lbu a5,0(a0) - 4c22: e791 bnez a5,4c2e - 4c24: a02d j 4c4e - 4c26: 00054783 lbu a5,0(a0) - 4c2a: cf89 beqz a5,4c44 - 4c2c: 85b6 mv a1,a3 - 4c2e: 0005c703 lbu a4,0(a1) + 4c36: 00054783 lbu a5,0(a0) + 4c3a: e791 bnez a5,4c46 + 4c3c: a02d j 4c66 + 4c3e: 00054783 lbu a5,0(a0) + 4c42: cf89 beqz a5,4c5c + 4c44: 85b6 mv a1,a3 + 4c46: 0005c703 lbu a4,0(a1) { p++; - 4c32: 0505 addi a0,a0,1 + 4c4a: 0505 addi a0,a0,1 q++; - 4c34: 00158693 addi a3,a1,1 + 4c4c: 00158693 addi a3,a1,1 while (*p && *p == *q) - 4c38: fef707e3 beq a4,a5,4c26 + 4c50: fef707e3 beq a4,a5,4c3e } return (int)((unsigned char)*p - (unsigned char)*q); - 4c3c: 0007851b sext.w a0,a5 + 4c54: 0007851b sext.w a0,a5 } - 4c40: 9d19 subw a0,a0,a4 - 4c42: 8082 ret + 4c58: 9d19 subw a0,a0,a4 + 4c5a: 8082 ret return (int)((unsigned char)*p - (unsigned char)*q); - 4c44: 0015c703 lbu a4,1(a1) - 4c48: 4501 li a0,0 + 4c5c: 0015c703 lbu a4,1(a1) + 4c60: 4501 li a0,0 } - 4c4a: 9d19 subw a0,a0,a4 - 4c4c: 8082 ret + 4c62: 9d19 subw a0,a0,a4 + 4c64: 8082 ret return (int)((unsigned char)*p - (unsigned char)*q); - 4c4e: 0005c703 lbu a4,0(a1) - 4c52: 4501 li a0,0 - 4c54: b7f5 j 4c40 + 4c66: 0005c703 lbu a4,0(a1) + 4c6a: 4501 li a0,0 + 4c6c: b7f5 j 4c58 -0000000000004c56 : +0000000000004c6e : int strncmp(const char *s1, const char *s2, size_t n) { if (n == 0) - 4c56: ca0d beqz a2,4c88 + 4c6e: ca0d beqz a2,4ca0 return 0; while (n-- > 0 && *s1 && *s1 == *s2) - 4c58: 00054783 lbu a5,0(a0) - 4c5c: 167d addi a2,a2,-1 - 4c5e: 00c506b3 add a3,a0,a2 - 4c62: eb89 bnez a5,4c74 - 4c64: a80d j 4c96 + 4c70: 00054783 lbu a5,0(a0) + 4c74: 167d addi a2,a2,-1 + 4c76: 00c506b3 add a3,a0,a2 + 4c7a: eb89 bnez a5,4c8c + 4c7c: a80d j 4cae { if (n == 0 || *s1 == '\0') - 4c66: 00d50d63 beq a0,a3,4c80 + 4c7e: 00d50d63 beq a0,a3,4c98 while (n-- > 0 && *s1 && *s1 == *s2) - 4c6a: 00154783 lbu a5,1(a0) + 4c82: 00154783 lbu a5,1(a0) break; s1++; - 4c6e: 0505 addi a0,a0,1 + 4c86: 0505 addi a0,a0,1 while (n-- > 0 && *s1 && *s1 == *s2) - 4c70: cf91 beqz a5,4c8c - 4c72: 85b2 mv a1,a2 - 4c74: 0005c703 lbu a4,0(a1) + 4c88: cf91 beqz a5,4ca4 + 4c8a: 85b2 mv a1,a2 + 4c8c: 0005c703 lbu a4,0(a1) s2++; - 4c78: 00158613 addi a2,a1,1 + 4c90: 00158613 addi a2,a1,1 while (n-- > 0 && *s1 && *s1 == *s2) - 4c7c: fef705e3 beq a4,a5,4c66 + 4c94: fef705e3 beq a4,a5,4c7e } return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4c80: 0007851b sext.w a0,a5 - 4c84: 9d19 subw a0,a0,a4 - 4c86: 8082 ret + 4c98: 0007851b sext.w a0,a5 + 4c9c: 9d19 subw a0,a0,a4 + 4c9e: 8082 ret return 0; - 4c88: 4501 li a0,0 + 4ca0: 4501 li a0,0 } - 4c8a: 8082 ret + 4ca2: 8082 ret return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4c8c: 0015c703 lbu a4,1(a1) - 4c90: 4501 li a0,0 - 4c92: 9d19 subw a0,a0,a4 - 4c94: 8082 ret - 4c96: 0005c703 lbu a4,0(a1) - 4c9a: 4501 li a0,0 - 4c9c: b7e5 j 4c84 + 4ca4: 0015c703 lbu a4,1(a1) + 4ca8: 4501 li a0,0 + 4caa: 9d19 subw a0,a0,a4 + 4cac: 8082 ret + 4cae: 0005c703 lbu a4,0(a1) + 4cb2: 4501 li a0,0 + 4cb4: b7e5 j 4c9c -0000000000004c9e : +0000000000004cb6 : char *strchr(const char *s, int c) { while (*s != (char)c) - 4c9e: 0ff5f593 zext.b a1,a1 - 4ca2: a019 j 4ca8 + 4cb6: 0ff5f593 zext.b a1,a1 + 4cba: a019 j 4cc0 { if (!*s++) - 4ca4: 0505 addi a0,a0,1 - 4ca6: c791 beqz a5,4cb2 + 4cbc: 0505 addi a0,a0,1 + 4cbe: c791 beqz a5,4cca while (*s != (char)c) - 4ca8: 00054783 lbu a5,0(a0) - 4cac: feb79ce3 bne a5,a1,4ca4 - 4cb0: 8082 ret + 4cc0: 00054783 lbu a5,0(a0) + 4cc4: feb79ce3 bne a5,a1,4cbc + 4cc8: 8082 ret return NULL; - 4cb2: 4501 li a0,0 + 4cca: 4501 li a0,0 } return (char *)s; } - 4cb4: 8082 ret + 4ccc: 8082 ret -0000000000004cb6 : +0000000000004cce : char *strrchr(const char *s, int c) { - 4cb6: 87aa mv a5,a0 + 4cce: 87aa mv a5,a0 const char *last = NULL; do { if (*s == (char)c) - 4cb8: 0ff5f593 zext.b a1,a1 + 4cd0: 0ff5f593 zext.b a1,a1 const char *last = NULL; - 4cbc: 4501 li a0,0 + 4cd4: 4501 li a0,0 if (*s == (char)c) - 4cbe: 0007c703 lbu a4,0(a5) - 4cc2: 00e59363 bne a1,a4,4cc8 + 4cd6: 0007c703 lbu a4,0(a5) + 4cda: 00e59363 bne a1,a4,4ce0 last = s; - 4cc6: 853e mv a0,a5 + 4cde: 853e mv a0,a5 } while (*s++); - 4cc8: 0785 addi a5,a5,1 - 4cca: fb75 bnez a4,4cbe + 4ce0: 0785 addi a5,a5,1 + 4ce2: fb75 bnez a4,4cd6 return (char *)last; } - 4ccc: 8082 ret + 4ce4: 8082 ret -0000000000004cce : +0000000000004ce6 : while (*p) - 4cce: 0005c883 lbu a7,0(a1) - 4cd2: 04088a63 beqz a7,4d26 + 4ce6: 0005c883 lbu a7,0(a1) + 4cea: 04088a63 beqz a7,4d3e const char *p = s; - 4cd6: 87ae mv a5,a1 + 4cee: 87ae mv a5,a1 while (*p) - 4cd8: 0017c703 lbu a4,1(a5) + 4cf0: 0017c703 lbu a4,1(a5) p++; - 4cdc: 0785 addi a5,a5,1 + 4cf4: 0785 addi a5,a5,1 while (*p) - 4cde: ff6d bnez a4,4cd8 + 4cf6: ff6d bnez a4,4cf0 return (size_t)(p - s); - 4ce0: 40b78833 sub a6,a5,a1 + 4cf8: 40b78833 sub a6,a5,a1 char *strstr(const char *haystack, const char *needle) { size_t n_len = strlen(needle); if (n_len == 0) - 4ce4: 04b78163 beq a5,a1,4d26 + 4cfc: 04b78163 beq a5,a1,4d3e return (char *)haystack; for (; *haystack; haystack++) - 4ce8: 00054783 lbu a5,0(a0) - 4cec: cf85 beqz a5,4d24 - 4cee: 187d addi a6,a6,-1 - 4cf0: 982a add a6,a6,a0 + 4d00: 00054783 lbu a5,0(a0) + 4d04: cf85 beqz a5,4d3c + 4d06: 187d addi a6,a6,-1 + 4d08: 982a add a6,a6,a0 { if (*haystack != *needle) - 4cf2: 02f89463 bne a7,a5,4d1a + 4d0a: 02f89463 bne a7,a5,4d32 while (n-- > 0 && *s1 && *s1 == *s2) - 4cf6: 00054703 lbu a4,0(a0) - 4cfa: 8646 mv a2,a7 - 4cfc: 86ae mv a3,a1 - 4cfe: 87aa mv a5,a0 - 4d00: eb11 bnez a4,4d14 - 4d02: a821 j 4d1a + 4d0e: 00054703 lbu a4,0(a0) + 4d12: 8646 mv a2,a7 + 4d14: 86ae mv a3,a1 + 4d16: 87aa mv a5,a0 + 4d18: eb11 bnez a4,4d2c + 4d1a: a821 j 4d32 if (n == 0 || *s1 == '\0') - 4d04: 03078163 beq a5,a6,4d26 + 4d1c: 03078163 beq a5,a6,4d3e while (n-- > 0 && *s1 && *s1 == *s2) - 4d08: 0017c703 lbu a4,1(a5) + 4d20: 0017c703 lbu a4,1(a5) return (int)((unsigned char)*s1 - (unsigned char)*s2); - 4d0c: 0006c603 lbu a2,0(a3) + 4d24: 0006c603 lbu a2,0(a3) s1++; - 4d10: 0785 addi a5,a5,1 + 4d28: 0785 addi a5,a5,1 while (n-- > 0 && *s1 && *s1 == *s2) - 4d12: cb19 beqz a4,4d28 + 4d2a: cb19 beqz a4,4d40 s2++; - 4d14: 0685 addi a3,a3,1 + 4d2c: 0685 addi a3,a3,1 while (n-- > 0 && *s1 && *s1 == *s2) - 4d16: fee607e3 beq a2,a4,4d04 + 4d2e: fee607e3 beq a2,a4,4d1c for (; *haystack; haystack++) - 4d1a: 00154783 lbu a5,1(a0) - 4d1e: 0805 addi a6,a6,1 - 4d20: 0505 addi a0,a0,1 - 4d22: fbe1 bnez a5,4cf2 + 4d32: 00154783 lbu a5,1(a0) + 4d36: 0805 addi a6,a6,1 + 4d38: 0505 addi a0,a0,1 + 4d3a: fbe1 bnez a5,4d0a continue; if (strncmp(haystack, needle, n_len) == 0) return (char *)haystack; } return NULL; - 4d24: 4501 li a0,0 + 4d3c: 4501 li a0,0 } - 4d26: 8082 ret + 4d3e: 8082 ret if (strncmp(haystack, needle, n_len) == 0) - 4d28: de7d beqz a2,4d26 + 4d40: de7d beqz a2,4d3e for (; *haystack; haystack++) - 4d2a: 00154783 lbu a5,1(a0) - 4d2e: 0805 addi a6,a6,1 - 4d30: 0505 addi a0,a0,1 - 4d32: f3e1 bnez a5,4cf2 - 4d34: bfc5 j 4d24 + 4d42: 00154783 lbu a5,1(a0) + 4d46: 0805 addi a6,a6,1 + 4d48: 0505 addi a0,a0,1 + 4d4a: f3e1 bnez a5,4d0a + 4d4c: bfc5 j 4d3c -0000000000004d36 : +0000000000004d4e : char *strdup(const char *s) { - 4d36: 1101 addi sp,sp,-32 - 4d38: e426 sd s1,8(sp) - 4d3a: ec06 sd ra,24(sp) - 4d3c: e822 sd s0,16(sp) + 4d4e: 1101 addi sp,sp,-32 + 4d50: e426 sd s1,8(sp) + 4d52: ec06 sd ra,24(sp) + 4d54: e822 sd s0,16(sp) while (*p) - 4d3e: 00054783 lbu a5,0(a0) + 4d56: 00054783 lbu a5,0(a0) { - 4d42: 84aa mv s1,a0 + 4d5a: 84aa mv s1,a0 while (*p) - 4d44: cb8d beqz a5,4d76 + 4d5c: cb8d beqz a5,4d8e const char *p = s; - 4d46: 862a mv a2,a0 + 4d5e: 862a mv a2,a0 while (*p) - 4d48: 00164783 lbu a5,1(a2) + 4d60: 00164783 lbu a5,1(a2) p++; - 4d4c: 0605 addi a2,a2,1 + 4d64: 0605 addi a2,a2,1 while (*p) - 4d4e: ffed bnez a5,4d48 + 4d66: ffed bnez a5,4d60 return (size_t)(p - s); - 4d50: 8e05 sub a2,a2,s1 + 4d68: 8e05 sub a2,a2,s1 size_t len = strlen(s) + 1; - 4d52: 00160413 addi s0,a2,1 + 4d6a: 00160413 addi s0,a2,1 char *new_str = (char *)malloc(len); - 4d56: 8522 mv a0,s0 - 4d58: f66ff0ef jal 44be + 4d6e: 8522 mv a0,s0 + 4d70: f4eff0ef jal 44be if (new_str == NULL) - 4d5c: c901 beqz a0,4d6c + 4d74: c901 beqz a0,4d84 return memmove(vdst, vsrc, n); - 4d5e: 8622 mv a2,s0 + 4d76: 8622 mv a2,s0 return NULL; return (char *)memcpy(new_str, s, len); } - 4d60: 6442 ld s0,16(sp) - 4d62: 60e2 ld ra,24(sp) + 4d78: 6442 ld s0,16(sp) + 4d7a: 60e2 ld ra,24(sp) return memmove(vdst, vsrc, n); - 4d64: 85a6 mv a1,s1 + 4d7c: 85a6 mv a1,s1 } - 4d66: 64a2 ld s1,8(sp) - 4d68: 6105 addi sp,sp,32 + 4d7e: 64a2 ld s1,8(sp) + 4d80: 6105 addi sp,sp,32 return memmove(vdst, vsrc, n); - 4d6a: bbb9 j 4ac8 + 4d82: bbb9 j 4ae0 } - 4d6c: 60e2 ld ra,24(sp) - 4d6e: 6442 ld s0,16(sp) - 4d70: 64a2 ld s1,8(sp) - 4d72: 6105 addi sp,sp,32 - 4d74: 8082 ret + 4d84: 60e2 ld ra,24(sp) + 4d86: 6442 ld s0,16(sp) + 4d88: 64a2 ld s1,8(sp) + 4d8a: 6105 addi sp,sp,32 + 4d8c: 8082 ret while (*p) - 4d76: 4405 li s0,1 - 4d78: bff9 j 4d56 + 4d8e: 4405 li s0,1 + 4d90: bff9 j 4d6e -0000000000004d7a : - 4d7a: 0005c783 lbu a5,0(a1) +0000000000004d92 : + 4d92: 0005c783 lbu a5,0(a1) size_t strlcpy(char *dst, const char *src, size_t size) { - 4d7e: 1101 addi sp,sp,-32 - 4d80: ec06 sd ra,24(sp) - 4d82: e822 sd s0,16(sp) - 4d84: 86b2 mv a3,a2 + 4d96: 1101 addi sp,sp,-32 + 4d98: ec06 sd ra,24(sp) + 4d9a: e822 sd s0,16(sp) + 4d9c: 86b2 mv a3,a2 while (*p) - 4d86: cf8d beqz a5,4dc0 + 4d9e: cf8d beqz a5,4dd8 const char *p = s; - 4d88: 87ae mv a5,a1 + 4da0: 87ae mv a5,a1 while (*p) - 4d8a: 0017c703 lbu a4,1(a5) + 4da2: 0017c703 lbu a4,1(a5) p++; - 4d8e: 0785 addi a5,a5,1 + 4da6: 0785 addi a5,a5,1 while (*p) - 4d90: ff6d bnez a4,4d8a + 4da8: ff6d bnez a4,4da2 return (size_t)(p - s); - 4d92: 40b78433 sub s0,a5,a1 + 4daa: 40b78433 sub s0,a5,a1 size_t src_len = strlen(src); if (size > 0) - 4d96: c285 beqz a3,4db6 - 4d98: e426 sd s1,8(sp) + 4dae: c285 beqz a3,4dce + 4db0: e426 sd s1,8(sp) { size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4d9a: fff68613 addi a2,a3,-1 + 4db2: fff68613 addi a2,a3,-1 memcpy(dst, src, copy_len); dst[copy_len] = '\0'; - 4d9e: 00c504b3 add s1,a0,a2 + 4db6: 00c504b3 add s1,a0,a2 size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4da2: 00d47563 bgeu s0,a3,4dac + 4dba: 00d47563 bgeu s0,a3,4dc4 dst[copy_len] = '\0'; - 4da6: 008504b3 add s1,a0,s0 + 4dbe: 008504b3 add s1,a0,s0 size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4daa: 8622 mv a2,s0 + 4dc2: 8622 mv a2,s0 return memmove(vdst, vsrc, n); - 4dac: d1dff0ef jal 4ac8 + 4dc4: d1dff0ef jal 4ae0 dst[copy_len] = '\0'; - 4db0: 00048023 sb zero,0(s1) + 4dc8: 00048023 sb zero,0(s1) } return src_len; - 4db4: 64a2 ld s1,8(sp) + 4dcc: 64a2 ld s1,8(sp) } - 4db6: 60e2 ld ra,24(sp) - 4db8: 8522 mv a0,s0 - 4dba: 6442 ld s0,16(sp) - 4dbc: 6105 addi sp,sp,32 - 4dbe: 8082 ret + 4dce: 60e2 ld ra,24(sp) + 4dd0: 8522 mv a0,s0 + 4dd2: 6442 ld s0,16(sp) + 4dd4: 6105 addi sp,sp,32 + 4dd6: 8082 ret if (size > 0) - 4dc0: e219 bnez a2,4dc6 + 4dd8: e219 bnez a2,4dde return (size_t)(p - s); - 4dc2: 4401 li s0,0 - 4dc4: bfcd j 4db6 - 4dc6: e426 sd s1,8(sp) - 4dc8: 4401 li s0,0 + 4dda: 4401 li s0,0 + 4ddc: bfcd j 4dce + 4dde: e426 sd s1,8(sp) + 4de0: 4401 li s0,0 if (size > 0) - 4dca: 84aa mv s1,a0 + 4de2: 84aa mv s1,a0 size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 4dcc: 4601 li a2,0 - 4dce: bff9 j 4dac + 4de4: 4601 li a2,0 + 4de6: bff9 j 4dc4 -0000000000004dd0 : +0000000000004de8 : while (*p) - 4dd0: 0005c783 lbu a5,0(a1) + 4de8: 0005c783 lbu a5,0(a1) size_t strlcat(char *dst, const char *src, size_t size) { - 4dd4: 7179 addi sp,sp,-48 - 4dd6: e84a sd s2,16(sp) - 4dd8: f406 sd ra,40(sp) - 4dda: f022 sd s0,32(sp) - 4ddc: ec26 sd s1,24(sp) - 4dde: 892a mv s2,a0 + 4dec: 7179 addi sp,sp,-48 + 4dee: e84a sd s2,16(sp) + 4df0: f406 sd ra,40(sp) + 4df2: f022 sd s0,32(sp) + 4df4: ec26 sd s1,24(sp) + 4df6: 892a mv s2,a0 while (*p) - 4de0: c7b5 beqz a5,4e4c + 4df8: c7b5 beqz a5,4e64 const char *p = s; - 4de2: 87ae mv a5,a1 + 4dfa: 87ae mv a5,a1 while (*p) - 4de4: 0017c703 lbu a4,1(a5) + 4dfc: 0017c703 lbu a4,1(a5) p++; - 4de8: 0785 addi a5,a5,1 + 4e00: 0785 addi a5,a5,1 while (*p) - 4dea: ff6d bnez a4,4de4 + 4e02: ff6d bnez a4,4dfc return (size_t)(p - s); - 4dec: 40b784b3 sub s1,a5,a1 + 4e04: 40b784b3 sub s1,a5,a1 size_t dst_len = 0; - 4df0: 4401 li s0,0 + 4e08: 4401 li s0,0 size_t src_len = strlen(src); while (dst_len < size && dst[dst_len] != '\0') - 4df2: e609 bnez a2,4dfc - 4df4: a0a1 j 4e3c + 4e0a: e609 bnez a2,4e14 + 4e0c: a0a1 j 4e54 dst_len++; - 4df6: 0405 addi s0,s0,1 + 4e0e: 0405 addi s0,s0,1 while (dst_len < size && dst[dst_len] != '\0') - 4df8: 04860263 beq a2,s0,4e3c - 4dfc: 00890533 add a0,s2,s0 - 4e00: 00054783 lbu a5,0(a0) - 4e04: fbed bnez a5,4df6 + 4e10: 04860263 beq a2,s0,4e54 + 4e14: 00890533 add a0,s2,s0 + 4e18: 00054783 lbu a5,0(a0) + 4e1c: fbed bnez a5,4e0e if (dst_len == size) - 4e06: 02860b63 beq a2,s0,4e3c - 4e0a: e44e sd s3,8(sp) + 4e1e: 02860b63 beq a2,s0,4e54 + 4e22: e44e sd s3,8(sp) return size + src_len; size_t space_left = size - dst_len; - 4e0c: 408607b3 sub a5,a2,s0 + 4e24: 408607b3 sub a5,a2,s0 size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4e10: 89a6 mv s3,s1 - 4e12: 02f4f263 bgeu s1,a5,4e36 + 4e28: 89a6 mv s3,s1 + 4e2a: 02f4f263 bgeu s1,a5,4e4e memcpy(dst + dst_len, src, copy_len); dst[dst_len + copy_len] = '\0'; - 4e16: 994e add s2,s2,s3 - 4e18: 9922 add s2,s2,s0 + 4e2e: 994e add s2,s2,s3 + 4e30: 9922 add s2,s2,s0 return memmove(vdst, vsrc, n); - 4e1a: 864e mv a2,s3 - 4e1c: cadff0ef jal 4ac8 + 4e32: 864e mv a2,s3 + 4e34: cadff0ef jal 4ae0 dst[dst_len + copy_len] = '\0'; - 4e20: 00090023 sb zero,0(s2) + 4e38: 00090023 sb zero,0(s2) # 1000 <_vscanf_core.constprop.0+0x698> return dst_len + src_len; - 4e24: 00940533 add a0,s0,s1 + 4e3c: 00940533 add a0,s0,s1 } - 4e28: 70a2 ld ra,40(sp) - 4e2a: 7402 ld s0,32(sp) + 4e40: 70a2 ld ra,40(sp) + 4e42: 7402 ld s0,32(sp) return dst_len + src_len; - 4e2c: 69a2 ld s3,8(sp) + 4e44: 69a2 ld s3,8(sp) } - 4e2e: 64e2 ld s1,24(sp) - 4e30: 6942 ld s2,16(sp) - 4e32: 6145 addi sp,sp,48 - 4e34: 8082 ret + 4e46: 64e2 ld s1,24(sp) + 4e48: 6942 ld s2,16(sp) + 4e4a: 6145 addi sp,sp,48 + 4e4c: 8082 ret size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 4e36: fff78993 addi s3,a5,-1 - 4e3a: bff1 j 4e16 + 4e4e: fff78993 addi s3,a5,-1 + 4e52: bff1 j 4e2e } - 4e3c: 70a2 ld ra,40(sp) - 4e3e: 7402 ld s0,32(sp) - 4e40: 6942 ld s2,16(sp) + 4e54: 70a2 ld ra,40(sp) + 4e56: 7402 ld s0,32(sp) + 4e58: 6942 ld s2,16(sp) return size + src_len; - 4e42: 00960533 add a0,a2,s1 + 4e5a: 00960533 add a0,a2,s1 } - 4e46: 64e2 ld s1,24(sp) - 4e48: 6145 addi sp,sp,48 - 4e4a: 8082 ret + 4e5e: 64e2 ld s1,24(sp) + 4e60: 6145 addi sp,sp,48 + 4e62: 8082 ret while (*p) - 4e4c: 4481 li s1,0 - 4e4e: b74d j 4df0 + 4e64: 4481 li s1,0 + 4e66: b74d j 4e08 -0000000000004e50 : +0000000000004e68 : size_t strspn(const char *s, const char *accept) { const char *p = s; const char *a; while (*p) - 4e50: 00054683 lbu a3,0(a0) - 4e54: c695 beqz a3,4e80 + 4e68: 00054683 lbu a3,0(a0) + 4e6c: c695 beqz a3,4e98 { for (a = accept; *a; a++) - 4e56: 0005c803 lbu a6,0(a1) - 4e5a: 862a mv a2,a0 - 4e5c: 00080f63 beqz a6,4e7a - 4e60: 87ae mv a5,a1 - 4e62: 8742 mv a4,a6 - 4e64: a021 j 4e6c - 4e66: 0007c703 lbu a4,0(a5) - 4e6a: cb01 beqz a4,4e7a - 4e6c: 0785 addi a5,a5,1 + 4e6e: 0005c803 lbu a6,0(a1) + 4e72: 862a mv a2,a0 + 4e74: 00080f63 beqz a6,4e92 + 4e78: 87ae mv a5,a1 + 4e7a: 8742 mv a4,a6 + 4e7c: a021 j 4e84 + 4e7e: 0007c703 lbu a4,0(a5) + 4e82: cb01 beqz a4,4e92 + 4e84: 0785 addi a5,a5,1 { if (*p == *a) - 4e6e: fee69ce3 bne a3,a4,4e66 + 4e86: fee69ce3 bne a3,a4,4e7e while (*p) - 4e72: 00164683 lbu a3,1(a2) + 4e8a: 00164683 lbu a3,1(a2) break; } if (*a == '\0') return (size_t)(p - s); p++; - 4e76: 0605 addi a2,a2,1 + 4e8e: 0605 addi a2,a2,1 while (*p) - 4e78: f6e5 bnez a3,4e60 + 4e90: f6e5 bnez a3,4e78 } return (size_t)(p - s); - 4e7a: 40a60533 sub a0,a2,a0 - 4e7e: 8082 ret + 4e92: 40a60533 sub a0,a2,a0 + 4e96: 8082 ret while (*p) - 4e80: 4501 li a0,0 + 4e98: 4501 li a0,0 } - 4e82: 8082 ret + 4e9a: 8082 ret -0000000000004e84 : +0000000000004e9c : size_t strcspn(const char *s, const char *reject) { const char *p = s; const char *r; while (*p) - 4e84: 00054683 lbu a3,0(a0) - 4e88: ce85 beqz a3,4ec0 + 4e9c: 00054683 lbu a3,0(a0) + 4ea0: ce85 beqz a3,4ed8 { for (r = reject; *r; r++) - 4e8a: 0005c803 lbu a6,0(a1) + 4ea2: 0005c803 lbu a6,0(a1) const char *p = s; - 4e8e: 862a mv a2,a0 + 4ea6: 862a mv a2,a0 for (r = reject; *r; r++) - 4e90: 02080363 beqz a6,4eb6 - 4e94: 87ae mv a5,a1 - 4e96: 8742 mv a4,a6 - 4e98: a021 j 4ea0 - 4e9a: 0007c703 lbu a4,0(a5) - 4e9e: c719 beqz a4,4eac - 4ea0: 0785 addi a5,a5,1 + 4ea8: 02080363 beqz a6,4ece + 4eac: 87ae mv a5,a1 + 4eae: 8742 mv a4,a6 + 4eb0: a021 j 4eb8 + 4eb2: 0007c703 lbu a4,0(a5) + 4eb6: c719 beqz a4,4ec4 + 4eb8: 0785 addi a5,a5,1 { if (*p == *r) - 4ea2: fed71ce3 bne a4,a3,4e9a + 4eba: fed71ce3 bne a4,a3,4eb2 return (size_t)(p - s); } p++; } return (size_t)(p - s); - 4ea6: 40a60533 sub a0,a2,a0 - 4eaa: 8082 ret + 4ebe: 40a60533 sub a0,a2,a0 + 4ec2: 8082 ret while (*p) - 4eac: 00164683 lbu a3,1(a2) + 4ec4: 00164683 lbu a3,1(a2) p++; - 4eb0: 0605 addi a2,a2,1 + 4ec8: 0605 addi a2,a2,1 while (*p) - 4eb2: f2ed bnez a3,4e94 - 4eb4: bfcd j 4ea6 - 4eb6: 00164683 lbu a3,1(a2) + 4eca: f2ed bnez a3,4eac + 4ecc: bfcd j 4ebe + 4ece: 00164683 lbu a3,1(a2) p++; - 4eba: 0605 addi a2,a2,1 + 4ed2: 0605 addi a2,a2,1 while (*p) - 4ebc: feed bnez a3,4eb6 - 4ebe: b7e5 j 4ea6 - 4ec0: 4501 li a0,0 + 4ed4: feed bnez a3,4ece + 4ed6: b7e5 j 4ebe + 4ed8: 4501 li a0,0 } - 4ec2: 8082 ret + 4eda: 8082 ret -0000000000004ec4 : +0000000000004edc : char *strpbrk(const char *s, const char *accept) { const char *a; while (*s) - 4ec4: 00054683 lbu a3,0(a0) - 4ec8: c295 beqz a3,4eec + 4edc: 00054683 lbu a3,0(a0) + 4ee0: c295 beqz a3,4f04 { for (a = accept; *a; a++) - 4eca: 0005c603 lbu a2,0(a1) - 4ece: c20d beqz a2,4ef0 - 4ed0: 87ae mv a5,a1 - 4ed2: 8732 mv a4,a2 - 4ed4: a021 j 4edc - 4ed6: 0007c703 lbu a4,0(a5) - 4eda: c709 beqz a4,4ee4 - 4edc: 0785 addi a5,a5,1 + 4ee2: 0005c603 lbu a2,0(a1) + 4ee6: c20d beqz a2,4f08 + 4ee8: 87ae mv a5,a1 + 4eea: 8732 mv a4,a2 + 4eec: a021 j 4ef4 + 4eee: 0007c703 lbu a4,0(a5) + 4ef2: c709 beqz a4,4efc + 4ef4: 0785 addi a5,a5,1 { if (*s == *a) - 4ede: fed71ce3 bne a4,a3,4ed6 + 4ef6: fed71ce3 bne a4,a3,4eee return (char *)s; } s++; } return NULL; } - 4ee2: 8082 ret + 4efa: 8082 ret while (*s) - 4ee4: 00154683 lbu a3,1(a0) + 4efc: 00154683 lbu a3,1(a0) s++; - 4ee8: 0505 addi a0,a0,1 + 4f00: 0505 addi a0,a0,1 while (*s) - 4eea: f2fd bnez a3,4ed0 + 4f02: f2fd bnez a3,4ee8 return NULL; - 4eec: 4501 li a0,0 + 4f04: 4501 li a0,0 } - 4eee: 8082 ret + 4f06: 8082 ret while (*s) - 4ef0: 00154683 lbu a3,1(a0) + 4f08: 00154683 lbu a3,1(a0) s++; - 4ef4: 0505 addi a0,a0,1 + 4f0c: 0505 addi a0,a0,1 while (*s) - 4ef6: feed bnez a3,4ef0 - 4ef8: bfd5 j 4eec + 4f0e: feed bnez a3,4f08 + 4f10: bfd5 j 4f04 -0000000000004efa : +0000000000004f12 : char *strtok(char *str, const char *delim) { static char *olds; char *token; if (str == NULL) - 4efa: 00003897 auipc a7,0x3 - 4efe: 93688893 addi a7,a7,-1738 # 7830 - 4f02: cd25 beqz a0,4f7a + 4f12: 00003897 auipc a7,0x3 + 4f16: 93e88893 addi a7,a7,-1730 # 7850 + 4f1a: cd25 beqz a0,4f92 while (*p) - 4f04: 00054683 lbu a3,0(a0) - 4f08: c295 beqz a3,4f2c + 4f1c: 00054683 lbu a3,0(a0) + 4f20: c295 beqz a3,4f44 for (a = accept; *a; a++) - 4f0a: 0005c803 lbu a6,0(a1) - 4f0e: 02080463 beqz a6,4f36 - 4f12: 87ae mv a5,a1 - 4f14: 8742 mv a4,a6 - 4f16: a021 j 4f1e - 4f18: 0007c703 lbu a4,0(a5) - 4f1c: cf09 beqz a4,4f36 - 4f1e: 0785 addi a5,a5,1 + 4f22: 0005c803 lbu a6,0(a1) + 4f26: 02080463 beqz a6,4f4e + 4f2a: 87ae mv a5,a1 + 4f2c: 8742 mv a4,a6 + 4f2e: a021 j 4f36 + 4f30: 0007c703 lbu a4,0(a5) + 4f34: cf09 beqz a4,4f4e + 4f36: 0785 addi a5,a5,1 if (*p == *a) - 4f20: fee69ce3 bne a3,a4,4f18 + 4f38: fee69ce3 bne a3,a4,4f30 while (*p) - 4f24: 00154683 lbu a3,1(a0) + 4f3c: 00154683 lbu a3,1(a0) p++; - 4f28: 0505 addi a0,a0,1 + 4f40: 0505 addi a0,a0,1 while (*p) - 4f2a: f6e5 bnez a3,4f12 - 4f2c: 87aa mv a5,a0 + 4f42: f6e5 bnez a3,4f2a + 4f44: 87aa mv a5,a0 str = olds; str += strspn(str, delim); if (*str == '\0') { olds = str; - 4f2e: 00f8b023 sd a5,0(a7) + 4f46: 00f8b023 sd a5,0(a7) return NULL; - 4f32: 4501 li a0,0 + 4f4a: 4501 li a0,0 *str = '\0'; olds = str + 1; } return token; } - 4f34: 8082 ret + 4f4c: 8082 ret if (*str == '\0') - 4f36: 00054603 lbu a2,0(a0) - 4f3a: da6d beqz a2,4f2c - 4f3c: 86aa mv a3,a0 + 4f4e: 00054603 lbu a2,0(a0) + 4f52: da6d beqz a2,4f44 + 4f54: 86aa mv a3,a0 for (a = accept; *a; a++) - 4f3e: 04080163 beqz a6,4f80 - 4f42: 8742 mv a4,a6 - 4f44: 87ae mv a5,a1 - 4f46: a021 j 4f4e - 4f48: 0007c703 lbu a4,0(a5) - 4f4c: cb19 beqz a4,4f62 - 4f4e: 0785 addi a5,a5,1 + 4f56: 04080163 beqz a6,4f98 + 4f5a: 8742 mv a4,a6 + 4f5c: 87ae mv a5,a1 + 4f5e: a021 j 4f66 + 4f60: 0007c703 lbu a4,0(a5) + 4f64: cb19 beqz a4,4f7a + 4f66: 0785 addi a5,a5,1 if (*s == *a) - 4f50: fee61ce3 bne a2,a4,4f48 + 4f68: fee61ce3 bne a2,a4,4f60 olds = str + 1; - 4f54: 00168793 addi a5,a3,1 + 4f6c: 00168793 addi a5,a3,1 *str = '\0'; - 4f58: 00068023 sb zero,0(a3) + 4f70: 00068023 sb zero,0(a3) olds = str; - 4f5c: 00f8b023 sd a5,0(a7) + 4f74: 00f8b023 sd a5,0(a7) } - 4f60: 8082 ret + 4f78: 8082 ret while (*s) - 4f62: 0016c603 lbu a2,1(a3) + 4f7a: 0016c603 lbu a2,1(a3) s++; - 4f66: 0685 addi a3,a3,1 + 4f7e: 0685 addi a3,a3,1 while (*s) - 4f68: fe69 bnez a2,4f42 - 4f6a: 87aa mv a5,a0 + 4f80: fe69 bnez a2,4f5a + 4f82: 87aa mv a5,a0 while (*s != (char)c) - 4f6c: 0017c703 lbu a4,1(a5) + 4f84: 0017c703 lbu a4,1(a5) if (!*s++) - 4f70: 0785 addi a5,a5,1 + 4f88: 0785 addi a5,a5,1 while (*s != (char)c) - 4f72: ff6d bnez a4,4f6c + 4f8a: ff6d bnez a4,4f84 olds = str; - 4f74: 00f8b023 sd a5,0(a7) + 4f8c: 00f8b023 sd a5,0(a7) } - 4f78: 8082 ret + 4f90: 8082 ret str = olds; - 4f7a: 0008b503 ld a0,0(a7) - 4f7e: b759 j 4f04 + 4f92: 0008b503 ld a0,0(a7) + 4f96: b759 j 4f1c while (*s) - 4f80: 0016c603 lbu a2,1(a3) + 4f98: 0016c603 lbu a2,1(a3) s++; - 4f84: 0685 addi a3,a3,1 + 4f9c: 0685 addi a3,a3,1 while (*s) - 4f86: fe6d bnez a2,4f80 - 4f88: b7cd j 4f6a + 4f9e: fe6d bnez a2,4f98 + 4fa0: b7cd j 4f82 -0000000000004f8a : +0000000000004fa2 : char *strerror(int errnum) { - 4f8a: 87aa mv a5,a0 + 4fa2: 87aa mv a5,a0 switch (errnum) - 4f8c: cd09 beqz a0,4fa6 - 4f8e: 4731 li a4,12 - 4f90: 00000517 auipc a0,0x0 - 4f94: 1a850513 addi a0,a0,424 # 5138 <_GLOBAL__sub_I__ZSt3cin+0x170> - 4f98: 00e78b63 beq a5,a4,4fae + 4fa4: cd09 beqz a0,4fbe + 4fa6: 4731 li a4,12 + 4fa8: 00000517 auipc a0,0x0 + 4fac: 1a050513 addi a0,a0,416 # 5148 <_GLOBAL__sub_I__ZSt3cin+0x168> + 4fb0: 00e78b63 beq a5,a4,4fc6 return "Success"; // case EINVAL: return "Invalid argument"; case ENOMEM: return "Out of memory"; default: return "Unknown error"; - 4f9c: 00000517 auipc a0,0x0 - 4fa0: 1ac50513 addi a0,a0,428 # 5148 <_GLOBAL__sub_I__ZSt3cin+0x180> - 4fa4: 8082 ret + 4fb4: 00000517 auipc a0,0x0 + 4fb8: 1a450513 addi a0,a0,420 # 5158 <_GLOBAL__sub_I__ZSt3cin+0x178> + 4fbc: 8082 ret return "Success"; - 4fa6: 00000517 auipc a0,0x0 - 4faa: 18a50513 addi a0,a0,394 # 5130 <_GLOBAL__sub_I__ZSt3cin+0x168> + 4fbe: 00000517 auipc a0,0x0 + 4fc2: 18250513 addi a0,a0,386 # 5140 <_GLOBAL__sub_I__ZSt3cin+0x160> } - 4fae: 8082 ret + 4fc6: 8082 ret -0000000000004fb0 <_Znwm>: +0000000000004fc8 <_Znwm>: #include "ulib/stdlib.h" void *operator new(unsigned long n) { return malloc(n); - 4fb0: d0eff06f j 44be + 4fc8: cf6ff06f j 44be -0000000000004fb4 <_Znam>: +0000000000004fcc <_Znam>: } void *operator new[](unsigned long n) - 4fb4: d0aff06f j 44be + 4fcc: cf2ff06f j 44be -0000000000004fb8 <_ZdlPv>: +0000000000004fd0 <_ZdlPv>: return malloc(n); } void operator delete(void *p) { free(p); - 4fb8: c90ff06f j 4448 + 4fd0: c78ff06f j 4448 -0000000000004fbc <_ZdaPv>: +0000000000004fd4 <_ZdaPv>: } void operator delete[](void *p) - 4fbc: c8cff06f j 4448 + 4fd4: c74ff06f j 4448 -0000000000004fc0 <_ZdlPvm>: +0000000000004fd8 <_ZdlPvm>: free(p); } void operator delete(void *p, unsigned long) { free(p); - 4fc0: c88ff06f j 4448 + 4fd8: c70ff06f j 4448 -0000000000004fc4 <_ZdaPvm>: +0000000000004fdc <_ZdaPvm>: } void operator delete[](void *p, unsigned long) - 4fc4: c84ff06f j 4448 + 4fdc: c6cff06f j 4448 -0000000000004fc8 <_GLOBAL__sub_I__ZSt3cin>: +0000000000004fe0 <_GLOBAL__sub_I__ZSt3cin>: #include "ulib/iostream" namespace std { istream cin(stdin); - 4fc8: 00002797 auipc a5,0x2 - 4fcc: 7187b783 ld a5,1816(a5) # 76e0 <_GLOBAL_OFFSET_TABLE_+0x10> - 4fd0: 6390 ld a2,0(a5) + 4fe0: 00002797 auipc a5,0x2 + 4fe4: 7207b783 ld a5,1824(a5) # 7700 <_GLOBAL_OFFSET_TABLE_+0x10> + 4fe8: 6390 ld a2,0(a5) ostream cout(stdout); - 4fd2: 00002797 auipc a5,0x2 - 4fd6: 7067b783 ld a5,1798(a5) # 76d8 <_GLOBAL_OFFSET_TABLE_+0x8> - 4fda: 6394 ld a3,0(a5) + 4fea: 00002797 auipc a5,0x2 + 4fee: 70e7b783 ld a5,1806(a5) # 76f8 <_GLOBAL_OFFSET_TABLE_+0x8> + 4ff2: 6394 ld a3,0(a5) ostream cerr(stderr); - 4fdc: 00002797 auipc a5,0x2 - 4fe0: 70c7b783 ld a5,1804(a5) # 76e8 <_GLOBAL_OFFSET_TABLE_+0x18> - 4fe4: 6398 ld a4,0(a5) + 4ff4: 00002797 auipc a5,0x2 + 4ff8: 7147b783 ld a5,1812(a5) # 7708 <_GLOBAL_OFFSET_TABLE_+0x18> + 4ffc: 6398 ld a4,0(a5) class istream{ private: FILE* _stream; public: istream(FILE *f) : _stream(f) {} - 4fe6: 00003797 auipc a5,0x3 - 4fea: 85278793 addi a5,a5,-1966 # 7838 <_ZSt3cin> - 4fee: e390 sd a2,0(a5) + 4ffe: 00003797 auipc a5,0x3 + 5002: 85a78793 addi a5,a5,-1958 # 7858 <_ZSt3cin> + 5006: e390 sd a2,0(a5) ostream(FILE* f) : _stream(f) {} - 4ff0: e794 sd a3,8(a5) - 4ff2: eb98 sd a4,16(a5) + 5008: e794 sd a3,8(a5) + 500a: eb98 sd a4,16(a5) } // namespace std - 4ff4: 8082 ret + 500c: 8082 ret diff --git a/build/user/initcode.out b/build/user/initcode.out index dd7157c..6ffe98b 100755 Binary files a/build/user/initcode.out and b/build/user/initcode.out differ diff --git a/build/user/sh b/build/user/sh index 0637773..4b9c8c4 100755 Binary files a/build/user/sh and b/build/user/sh differ diff --git a/build/user/sh.asm b/build/user/sh.asm index dc5f44d..f7f11c7 100644 --- a/build/user/sh.asm +++ b/build/user/sh.asm @@ -15,11 +15,11 @@ void panic(const char *s) 2: 85aa mv a1,a0 printf("shell panic: %s\n", s); 4: 00006517 auipc a0,0x6 - 8: 00450513 addi a0,a0,4 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + 8: 06450513 addi a0,a0,100 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> { c: e406 sd ra,8(sp) printf("shell panic: %s\n", s); - e: 0bd040ef jal 48ca + e: 101040ef jal 490e exit(1); } 12: 60a2 ld ra,8(sp) @@ -28,7 +28,7 @@ void panic(const char *s) } 16: 0141 addi sp,sp,16 exit(1); - 18: 3c60506f j 53de + 18: 40a0506f j 5422 000000000000001c <_Z13fork_or_panicv>: @@ -38,7 +38,7 @@ int fork_or_panic() 1e: e022 sd s0,0(sp) 20: e406 sd ra,8(sp) int pid = fork(); - 22: 086010ef jal 10a8 + 22: 0ca010ef jal 10ec if (pid == -1) 26: 57fd li a5,-1 int pid = fork(); @@ -55,13 +55,13 @@ int fork_or_panic() 36: 8082 ret printf("shell panic: %s\n", s); 38: 00006597 auipc a1,0x6 - 3c: fc858593 addi a1,a1,-56 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + 3c: 02858593 addi a1,a1,40 # 6060 <_GLOBAL__sub_I__ZSt3cin+0x5c> 40: 00006517 auipc a0,0x6 - 44: fc850513 addi a0,a0,-56 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> - 48: 083040ef jal 48ca + 44: 02850513 addi a0,a0,40 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> + 48: 0c7040ef jal 490e exit(1); 4c: 4505 li a0,1 - 4e: 390050ef jal 53de + 4e: 3d4050ef jal 5422 } 52: 60a2 ld ra,8(sp) 54: 8522 mv a0,s0 @@ -84,17 +84,17 @@ int getcmd(char *buf, int nbuf) write(1, "$ ", 2); 66: 4609 li a2,2 68: 00006597 auipc a1,0x6 - 6c: 02058593 addi a1,a1,32 # 6088 <_GLOBAL__sub_I__ZSt3cin+0xe0> + 6c: 08058593 addi a1,a1,128 # 60e8 <_GLOBAL__sub_I__ZSt3cin+0xe4> 70: 4505 li a0,1 { 72: f486 sd ra,104(sp) write(1, "$ ", 2); - 74: 054010ef jal 10c8 + 74: 098010ef jal 110c memset(buf, 0, nbuf); 78: 864a mv a2,s2 7a: 4581 li a1,0 7c: 854e mv a0,s3 - 7e: 213050ef jal 5a90 + 7e: 26f050ef jal 5aec int i = 0; while (i < nbuf - 1) @@ -123,7 +123,7 @@ int getcmd(char *buf, int nbuf) { write(1, "\b \b", 3); a4: 00006b97 auipc s7,0x6 - a8: fecb8b93 addi s7,s7,-20 # 6090 <_GLOBAL__sub_I__ZSt3cin+0xe8> + a8: 04cb8b93 addi s7,s7,76 # 60f0 <_GLOBAL__sub_I__ZSt3cin+0xec> if (c == '\b' || c == 127) ac: 07f00a93 li s5,127 i--; @@ -136,7 +136,7 @@ int getcmd(char *buf, int nbuf) b4: 4605 li a2,1 b6: 85a6 mv a1,s1 b8: 4501 li a0,0 - ba: 006010ef jal 10c0 + ba: 04a010ef jal 1104 be: 87aa mv a5,a0 buf[i] = 0; return 0; @@ -160,7 +160,7 @@ int getcmd(char *buf, int nbuf) da: 07878463 beq a5,s8,142 <_Z6getcmdPci+0xe6> de: 07978263 beq a5,s9,142 <_Z6getcmdPci+0xe6> write(1, &c, 1); - e2: 7e7000ef jal 10c8 + e2: 02a010ef jal 110c buf[i++] = c; e6: 00f14783 lbu a5,15(sp) ea: 2405 addiw s0,s0,1 @@ -196,7 +196,7 @@ int getcmd(char *buf, int nbuf) i--; 11a: 347d addiw s0,s0,-1 write(1, "\b \b", 3); - 11c: 7ad000ef jal 10c8 + 11c: 7f1000ef jal 110c while (i < nbuf - 1) 120: f9644ae3 blt s0,s6,b4 <_Z6getcmdPci+0x58> 124: bfc1 j f4 <_Z6getcmdPci+0x98> @@ -221,9 +221,9 @@ int getcmd(char *buf, int nbuf) write(1, "\n", 1); 142: 4605 li a2,1 144: 00006597 auipc a1,0x6 - 148: f5458593 addi a1,a1,-172 # 6098 <_GLOBAL__sub_I__ZSt3cin+0xf0> + 148: fb458593 addi a1,a1,-76 # 60f8 <_GLOBAL__sub_I__ZSt3cin+0xf4> 14c: 4505 li a0,1 - 14e: 77b000ef jal 10c8 + 14e: 7bf000ef jal 110c return 0; 152: 4501 li a0,0 buf[i] = 0; @@ -236,7 +236,7 @@ int getcmd(char *buf, int nbuf) 15a: 87aa mv a5,a0 15c: 6508 ld a0,8(a0) 15e: 00008717 auipc a4,0x8 - 162: c6a70713 addi a4,a4,-918 # 7dc8 <_ZTV12RedirCommand+0x10> + 162: cea70713 addi a4,a4,-790 # 7e48 <_ZTV12RedirCommand+0x10> 166: e398 sd a4,0(a5) 168: c501 beqz a0,170 <_ZN12RedirCommandD1Ev+0x16> 16a: 611c ld a5,0(a0) @@ -255,7 +255,7 @@ int getcmd(char *buf, int nbuf) 17a: e406 sd ra,8(sp) { 17c: 00008797 auipc a5,0x8 - 180: c7478793 addi a5,a5,-908 # 7df0 <_ZTV11PipeCommand+0x10> + 180: cf478793 addi a5,a5,-780 # 7e70 <_ZTV11PipeCommand+0x10> 184: e01c sd a5,0(s0) delete left; 186: c501 beqz a0,18e <_ZN11PipeCommandD1Ev+0x1c> @@ -292,7 +292,7 @@ int getcmd(char *buf, int nbuf) 1ae: e406 sd ra,8(sp) { 1b0: 00008797 auipc a5,0x8 - 1b4: c6878793 addi a5,a5,-920 # 7e18 <_ZTV11ListCommand+0x10> + 1b4: ce878793 addi a5,a5,-792 # 7e98 <_ZTV11ListCommand+0x10> 1b8: e01c sd a5,0(s0) delete left; 1ba: c501 beqz a0,1c2 <_ZN11ListCommandD1Ev+0x1c> @@ -323,7 +323,7 @@ int getcmd(char *buf, int nbuf) 1da: 87aa mv a5,a0 1dc: 6508 ld a0,8(a0) 1de: 00008717 auipc a4,0x8 - 1e2: c6270713 addi a4,a4,-926 # 7e40 <_ZTV11BackCommand+0x10> + 1e2: ce270713 addi a4,a4,-798 # 7ec0 <_ZTV11BackCommand+0x10> 1e6: e398 sd a4,0(a5) 1e8: c501 beqz a0,1f0 <_ZN11BackCommandD1Ev+0x16> 1ea: 611c ld a5,0(a0) @@ -345,11 +345,11 @@ struct ExecCommand : public Command void run() override 1fc: e406 sd ra,8(sp) close(fd); - 1fe: 6d3000ef jal 10d0 + 1fe: 717000ef jal 1114 if (open(file, mode) < 0) 202: 500c lw a1,32(s0) 204: 6808 ld a0,16(s0) - 206: 6e3000ef jal 10e8 + 206: 727000ef jal 112c 20a: 00054963 bltz a0,21c <_ZN12RedirCommand3runEv+0x28> sub_cmd->run(); 20e: 6408 ld a0,8(s0) @@ -366,11 +366,11 @@ struct ExecCommand : public Command printf("open %s failed\n", file); 21c: 680c ld a1,16(s0) 21e: 00006517 auipc a0,0x6 - 222: dc250513 addi a0,a0,-574 # 5fe0 <_GLOBAL__sub_I__ZSt3cin+0x38> - 226: 6a4040ef jal 48ca + 222: e2250513 addi a0,a0,-478 # 6040 <_GLOBAL__sub_I__ZSt3cin+0x3c> + 226: 6e8040ef jal 490e exit(1); 22a: 4505 li a0,1 - 22c: 1b2050ef jal 53de + 22c: 1f6050ef jal 5422 sub_cmd->run(); 230: 6408 ld a0,8(s0) } @@ -397,12 +397,12 @@ struct ExecCommand : public Command 248: c115 beqz a0,26c <_ZN11ExecCommand3runEv+0x2e> exec(argv[0], argv); 24a: 00840593 addi a1,s0,8 - 24e: 693000ef jal 10e0 + 24e: 6d7000ef jal 1124 printf("exec %s failed\n", argv[0]); 252: 640c ld a1,8(s0) 254: 00006517 auipc a0,0x6 - 258: d9c50513 addi a0,a0,-612 # 5ff0 <_GLOBAL__sub_I__ZSt3cin+0x48> - 25c: 66e040ef jal 48ca + 258: dfc50513 addi a0,a0,-516 # 6050 <_GLOBAL__sub_I__ZSt3cin+0x4c> + 25c: 6b2040ef jal 490e } 260: 6402 ld s0,0(sp) 262: 60a2 ld ra,8(sp) @@ -411,10 +411,10 @@ struct ExecCommand : public Command } 266: 0141 addi sp,sp,16 exit(1); - 268: 1760506f j 53de + 268: 1ba0506f j 5422 exit(1); 26c: 4505 li a0,1 - 26e: 170050ef jal 53de + 26e: 1b4050ef jal 5422 exec(argv[0], argv); 272: 6408 ld a0,8(s0) 274: bfd9 j 24a <_ZN11ExecCommand3runEv+0xc> @@ -422,7 +422,7 @@ struct ExecCommand : public Command 0000000000000276 <_ZN11ExecCommandD0Ev>: struct ExecCommand : public Command 276: 05800593 li a1,88 - 27a: 5270506f j 5fa0 <_ZdlPvm> + 27a: 5830506f j 5ffc <_ZdlPvm> 000000000000027e <_ZN12RedirCommandD0Ev>: ~RedirCommand() { delete sub_cmd; } @@ -432,7 +432,7 @@ struct ExecCommand : public Command 284: 6508 ld a0,8(a0) 286: e406 sd ra,8(sp) 288: 00008797 auipc a5,0x8 - 28c: b4078793 addi a5,a5,-1216 # 7dc8 <_ZTV12RedirCommand+0x10> + 28c: bc078793 addi a5,a5,-1088 # 7e48 <_ZTV12RedirCommand+0x10> 290: e01c sd a5,0(s0) 292: c501 beqz a0,29a <_ZN12RedirCommandD0Ev+0x1c> 294: 611c ld a5,0(a0) @@ -443,7 +443,7 @@ struct ExecCommand : public Command 29e: 60a2 ld ra,8(sp) 2a0: 02800593 li a1,40 2a4: 0141 addi sp,sp,16 - 2a6: 4fb0506f j 5fa0 <_ZdlPvm> + 2a6: 5570506f j 5ffc <_ZdlPvm> 00000000000002aa <_ZN11BackCommandD0Ev>: ~BackCommand() { delete sub_cmd; } @@ -453,7 +453,7 @@ struct ExecCommand : public Command 2b0: 6508 ld a0,8(a0) 2b2: e406 sd ra,8(sp) 2b4: 00008797 auipc a5,0x8 - 2b8: b8c78793 addi a5,a5,-1140 # 7e40 <_ZTV11BackCommand+0x10> + 2b8: c0c78793 addi a5,a5,-1012 # 7ec0 <_ZTV11BackCommand+0x10> 2bc: e01c sd a5,0(s0) 2be: c501 beqz a0,2c6 <_ZN11BackCommandD0Ev+0x1c> 2c0: 611c ld a5,0(a0) @@ -464,7 +464,7 @@ struct ExecCommand : public Command 2ca: 60a2 ld ra,8(sp) 2cc: 45c1 li a1,16 2ce: 0141 addi sp,sp,16 - 2d0: 4d10506f j 5fa0 <_ZdlPvm> + 2d0: 52d0506f j 5ffc <_ZdlPvm> 00000000000002d4 <_ZN11PipeCommandD0Ev>: ~PipeCommand() @@ -477,7 +477,7 @@ struct ExecCommand : public Command 2dc: e406 sd ra,8(sp) { 2de: 00008797 auipc a5,0x8 - 2e2: b1278793 addi a5,a5,-1262 # 7df0 <_ZTV11PipeCommand+0x10> + 2e2: b9278793 addi a5,a5,-1134 # 7e70 <_ZTV11PipeCommand+0x10> 2e6: e01c sd a5,0(s0) delete left; 2e8: c501 beqz a0,2f0 <_ZN11PipeCommandD0Ev+0x1c> @@ -496,7 +496,7 @@ struct ExecCommand : public Command 2fe: 60a2 ld ra,8(sp) 300: 45e1 li a1,24 302: 0141 addi sp,sp,16 - 304: 49d0506f j 5fa0 <_ZdlPvm> + 304: 4f90506f j 5ffc <_ZdlPvm> 0000000000000308 <_ZN11ListCommandD0Ev>: ~ListCommand() @@ -509,7 +509,7 @@ struct ExecCommand : public Command 310: e406 sd ra,8(sp) { 312: 00008797 auipc a5,0x8 - 316: b0678793 addi a5,a5,-1274 # 7e18 <_ZTV11ListCommand+0x10> + 316: b8678793 addi a5,a5,-1146 # 7e98 <_ZTV11ListCommand+0x10> 31a: e01c sd a5,0(s0) delete left; 31c: c501 beqz a0,324 <_ZN11ListCommandD0Ev+0x1c> @@ -528,7 +528,7 @@ struct ExecCommand : public Command 332: 60a2 ld ra,8(sp) 334: 45e1 li a1,24 336: 0141 addi sp,sp,16 - 338: 4690506f j 5fa0 <_ZdlPvm> + 338: 4c50506f j 5ffc <_ZdlPvm> 000000000000033c <_ZN11BackCommand3runEv>: void run() override @@ -537,7 +537,7 @@ struct ExecCommand : public Command 340: e406 sd ra,8(sp) 342: 842a mv s0,a0 int pid = fork(); - 344: 565000ef jal 10a8 + 344: 5a9000ef jal 10ec if (pid == -1) 348: 57fd li a5,-1 34a: 00f50d63 beq a0,a5,364 <_ZN11BackCommand3runEv+0x28> @@ -556,16 +556,16 @@ struct ExecCommand : public Command } 35e: 0141 addi sp,sp,16 exit(0); - 360: 07e0506f j 53de + 360: 0c20506f j 5422 printf("shell panic: %s\n", s); 364: 00006597 auipc a1,0x6 - 368: c9c58593 addi a1,a1,-868 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + 368: cfc58593 addi a1,a1,-772 # 6060 <_GLOBAL__sub_I__ZSt3cin+0x5c> 36c: 00006517 auipc a0,0x6 - 370: c9c50513 addi a0,a0,-868 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> - 374: 556040ef jal 48ca + 370: cfc50513 addi a0,a0,-772 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> + 374: 59a040ef jal 490e exit(1); 378: 4505 li a0,1 - 37a: 064050ef jal 53de + 37a: 0a8050ef jal 5422 } 37e: 6402 ld s0,0(sp) 380: 60a2 ld ra,8(sp) @@ -574,7 +574,7 @@ struct ExecCommand : public Command } 384: 0141 addi sp,sp,16 exit(0); - 386: 0580506f j 53de + 386: 09c0506f j 5422 000000000000038a <_ZN11ListCommand3runEv>: void run() override @@ -583,7 +583,7 @@ struct ExecCommand : public Command 38e: e406 sd ra,8(sp) 390: 842a mv s0,a0 int pid = fork(); - 392: 517000ef jal 10a8 + 392: 55b000ef jal 10ec if (pid == -1) 396: 57fd li a5,-1 398: 02f50163 beq a0,a5,3ba <_ZN11ListCommand3runEv+0x30> @@ -596,7 +596,7 @@ struct ExecCommand : public Command 3a4: 9782 jalr a5 wait(0); 3a6: 4501 li a0,0 - 3a8: 509000ef jal 10b0 + 3a8: 54d000ef jal 10f4 right->run(); 3ac: 6808 ld a0,16(s0) } @@ -611,13 +611,13 @@ struct ExecCommand : public Command 3b8: 8782 jr a5 printf("shell panic: %s\n", s); 3ba: 00006597 auipc a1,0x6 - 3be: c4658593 addi a1,a1,-954 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + 3be: ca658593 addi a1,a1,-858 # 6060 <_GLOBAL__sub_I__ZSt3cin+0x5c> 3c2: 00006517 auipc a0,0x6 - 3c6: c4650513 addi a0,a0,-954 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> - 3ca: 500040ef jal 48ca + 3c6: ca650513 addi a0,a0,-858 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> + 3ca: 544040ef jal 490e exit(1); 3ce: 4505 li a0,1 - 3d0: 00e050ef jal 53de + 3d0: 052050ef jal 5422 return pid; 3d4: bfc9 j 3a6 <_ZN11ListCommand3runEv+0x1c> @@ -631,17 +631,17 @@ struct ExecCommand : public Command void run() override 3de: ec06 sd ra,24(sp) if (pipe(p) < 0) - 3e0: 4d9000ef jal 10b8 + 3e0: 51d000ef jal 10fc 3e4: 0a054463 bltz a0,48c <_ZN11PipeCommand3runEv+0xb6> int pid = fork(); - 3e8: 4c1000ef jal 10a8 + 3e8: 505000ef jal 10ec if (pid == -1) 3ec: 57fd li a5,-1 3ee: 0cf50163 beq a0,a5,4b0 <_ZN11PipeCommand3runEv+0xda> if (fork_or_panic() == 0) 3f2: c931 beqz a0,446 <_ZN11PipeCommand3runEv+0x70> int pid = fork(); - 3f4: 4b5000ef jal 10a8 + 3f4: 4f9000ef jal 10ec if (pid == -1) 3f8: 577d li a4,-1 3fa: 06e50b63 beq a0,a4,470 <_ZN11PipeCommand3runEv+0x9a> @@ -649,35 +649,35 @@ struct ExecCommand : public Command 3fe: c505 beqz a0,426 <_ZN11PipeCommand3runEv+0x50> close(p[0]); 400: 4522 lw a0,8(sp) - 402: 4cf000ef jal 10d0 + 402: 513000ef jal 1114 close(p[1]); 406: 4532 lw a0,12(sp) - 408: 4c9000ef jal 10d0 + 408: 50d000ef jal 1114 wait(0); 40c: 4501 li a0,0 - 40e: 4a3000ef jal 10b0 + 40e: 4e7000ef jal 10f4 wait(0); 412: 4501 li a0,0 - 414: 49d000ef jal 10b0 + 414: 4e1000ef jal 10f4 exit(0); 418: 4501 li a0,0 - 41a: 7c5040ef jal 53de + 41a: 008050ef jal 5422 } 41e: 60e2 ld ra,24(sp) 420: 6442 ld s0,16(sp) 422: 6105 addi sp,sp,32 424: 8082 ret close(0); // close stdin - 426: 4ab000ef jal 10d0 + 426: 4ef000ef jal 1114 dup(p[0]); // dup read-end to stdin 42a: 4522 lw a0,8(sp) - 42c: 4f5000ef jal 1120 + 42c: 539000ef jal 1164 close(p[0]); 430: 4522 lw a0,8(sp) - 432: 49f000ef jal 10d0 + 432: 4e3000ef jal 1114 close(p[1]); 436: 4532 lw a0,12(sp) - 438: 499000ef jal 10d0 + 438: 4dd000ef jal 1114 right->run(); 43c: 6808 ld a0,16(s0) 43e: 611c ld a5,0(a0) @@ -686,60 +686,60 @@ struct ExecCommand : public Command 444: bf75 j 400 <_ZN11PipeCommand3runEv+0x2a> close(1); // close stdout 446: 4505 li a0,1 - 448: 489000ef jal 10d0 + 448: 4cd000ef jal 1114 dup(p[1]); // dup write-end to stdout 44c: 4532 lw a0,12(sp) - 44e: 4d3000ef jal 1120 + 44e: 517000ef jal 1164 close(p[0]); 452: 4522 lw a0,8(sp) - 454: 47d000ef jal 10d0 + 454: 4c1000ef jal 1114 close(p[1]); 458: 4532 lw a0,12(sp) - 45a: 477000ef jal 10d0 + 45a: 4bb000ef jal 1114 left->run(); 45e: 6408 ld a0,8(s0) 460: 611c ld a5,0(a0) 462: 6b9c ld a5,16(a5) 464: 9782 jalr a5 int pid = fork(); - 466: 443000ef jal 10a8 + 466: 487000ef jal 10ec if (pid == -1) 46a: 577d li a4,-1 46c: f8e519e3 bne a0,a4,3fe <_ZN11PipeCommand3runEv+0x28> printf("shell panic: %s\n", s); 470: 00006597 auipc a1,0x6 - 474: b9058593 addi a1,a1,-1136 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + 474: bf058593 addi a1,a1,-1040 # 6060 <_GLOBAL__sub_I__ZSt3cin+0x5c> 478: 00006517 auipc a0,0x6 - 47c: b9050513 addi a0,a0,-1136 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> - 480: 44a040ef jal 48ca + 47c: bf050513 addi a0,a0,-1040 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> + 480: 48e040ef jal 490e exit(1); 484: 4505 li a0,1 - 486: 759040ef jal 53de + 486: 79d040ef jal 5422 return pid; 48a: bf9d j 400 <_ZN11PipeCommand3runEv+0x2a> printf("shell panic: %s\n", s); 48c: 00006597 auipc a1,0x6 - 490: b9458593 addi a1,a1,-1132 # 6020 <_GLOBAL__sub_I__ZSt3cin+0x78> + 490: bf458593 addi a1,a1,-1036 # 6080 <_GLOBAL__sub_I__ZSt3cin+0x7c> 494: 00006517 auipc a0,0x6 - 498: b7450513 addi a0,a0,-1164 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> - 49c: 42e040ef jal 48ca + 498: bd450513 addi a0,a0,-1068 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> + 49c: 472040ef jal 490e exit(1); 4a0: 4505 li a0,1 - 4a2: 73d040ef jal 53de + 4a2: 781040ef jal 5422 int pid = fork(); - 4a6: 403000ef jal 10a8 + 4a6: 447000ef jal 10ec if (pid == -1) 4aa: 57fd li a5,-1 4ac: f4f513e3 bne a0,a5,3f2 <_ZN11PipeCommand3runEv+0x1c> printf("shell panic: %s\n", s); 4b0: 00006597 auipc a1,0x6 - 4b4: b5058593 addi a1,a1,-1200 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + 4b4: bb058593 addi a1,a1,-1104 # 6060 <_GLOBAL__sub_I__ZSt3cin+0x5c> 4b8: 00006517 auipc a0,0x6 - 4bc: b5050513 addi a0,a0,-1200 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> - 4c0: 40a040ef jal 48ca + 4bc: bb050513 addi a0,a0,-1104 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> + 4c0: 44e040ef jal 490e exit(1); 4c4: 4505 li a0,1 - 4c6: 719040ef jal 53de + 4c6: 75d040ef jal 5422 return pid; 4ca: b72d j 3f4 <_ZN11PipeCommand3runEv+0x1e> @@ -770,7 +770,7 @@ struct ExecCommand : public Command while (peek(ps, es, "<>")) 4f4: 8c2a mv s8,a0 4f6: 00008497 auipc s1,0x8 - 4fa: 96248493 addi s1,s1,-1694 # 7e58 + 4fa: 9e248493 addi s1,s1,-1566 # 7ed8 switch (*s) 4fe: 03c00b13 li s6,60 if (get_token(ps, es, &q, &eq) != 'a') @@ -788,7 +788,7 @@ struct ExecCommand : public Command 514: 01240863 beq s0,s2,524 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x58> 518: 00094583 lbu a1,0(s2) 51c: 6088 ld a0,0(s1) - 51e: 760050ef jal 5c7e + 51e: 7bc050ef jal 5cda 522: f965 bnez a0,512 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x46> *ps = s; 524: 012ab023 sd s2,0(s5) @@ -814,8 +814,8 @@ struct ExecCommand : public Command 54c: 8082 ret return *s && strchr(toks, *s); 54e: 00006517 auipc a0,0x6 - 552: afa50513 addi a0,a0,-1286 # 6048 <_GLOBAL__sub_I__ZSt3cin+0xa0> - 556: 728050ef jal 5c7e + 552: b5a50513 addi a0,a0,-1190 # 60a8 <_GLOBAL__sub_I__ZSt3cin+0xa4> + 556: 784050ef jal 5cda 55a: d971 beqz a0,52e <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x62> s = *ps; 55c: 000abd83 ld s11,0(s5) @@ -828,7 +828,7 @@ struct ExecCommand : public Command 568: 01b40863 beq s0,s11,578 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xac> 56c: 000dc583 lbu a1,0(s11) 570: 6088 ld a0,0(s1) - 572: 70c050ef jal 5c7e + 572: 768050ef jal 5cda 576: f965 bnez a0,566 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x9a> ret = *s; 578: 000dc983 lbu s3,0(s11) @@ -855,7 +855,7 @@ struct ExecCommand : public Command 5ae: 25b40963 beq s0,s11,800 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x334> 5b2: 000dc583 lbu a1,0(s11) 5b6: 6088 ld a0,0(s1) - 5b8: 6c6050ef jal 5c7e + 5b8: 722050ef jal 5cda 5bc: f965 bnez a0,5ac <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xe0> *ps = s; 5be: 01bab023 sd s11,0(s5) @@ -868,7 +868,7 @@ struct ExecCommand : public Command 5ca: 01b40863 beq s0,s11,5da <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x10e> 5ce: 000dc583 lbu a1,0(s11) 5d2: 6088 ld a0,0(s1) - 5d4: 6aa050ef jal 5c7e + 5d4: 706050ef jal 5cda 5d8: f965 bnez a0,5c8 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xfc> ret = *s; 5da: 000dca03 lbu s4,0(s11) @@ -901,7 +901,7 @@ struct ExecCommand : public Command 616: 008d7963 bgeu s10,s0,628 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x15c> 61a: 000d4583 lbu a1,0(s10) 61e: 00093503 ld a0,0(s2) - 622: 65c050ef jal 5c7e + 622: 6b8050ef jal 5cda 626: f57d bnez a0,614 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x148> *ps = s; 628: 01aab023 sd s10,0(s5) @@ -917,13 +917,13 @@ struct ExecCommand : public Command 644: ece992e3 bne s3,a4,508 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x3c> cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE, 1); // Append not fully supported in simple OS yet? 648: 02800513 li a0,40 - 64c: 145050ef jal 5f90 <_Znwm> + 64c: 1a1050ef jal 5fec <_Znwm> : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} 650: 4705 li a4,1 652: 1702 slli a4,a4,0x20 654: 20170713 addi a4,a4,513 658: 00007797 auipc a5,0x7 - 65c: 77078793 addi a5,a5,1904 # 7dc8 <_ZTV12RedirCommand+0x10> + 65c: 7f078793 addi a5,a5,2032 # 7e48 <_ZTV12RedirCommand+0x10> 660: 01853423 sd s8,8(a0) 664: e11c sd a5,0(a0) 666: 01753823 sd s7,16(a0) @@ -941,7 +941,7 @@ struct ExecCommand : public Command 680: a01d j 6a6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1da> 682: 000dc583 lbu a1,0(s11) 686: 6488 ld a0,8(s1) - 688: 5f6050ef jal 5c7e + 688: 652050ef jal 5cda 68c: e911 bnez a0,6a0 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1d4> s++; 68e: 0d85 addi s11,s11,1 @@ -949,7 +949,7 @@ struct ExecCommand : public Command 690: 01b40b63 beq s0,s11,6a6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1da> 694: 000dc583 lbu a1,0(s11) 698: 6088 ld a0,0(s1) - 69a: 5e4050ef jal 5c7e + 69a: 640050ef jal 5cda 69e: d175 beqz a0,682 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x1b6> 6a0: 06100993 li s3,97 6a4: b701 j 5a4 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0xd8> @@ -974,23 +974,23 @@ struct ExecCommand : public Command 6cc: 01bab023 sd s11,0(s5) printf("shell panic: %s\n", s); 6d0: 00006597 auipc a1,0x6 - 6d4: 95858593 addi a1,a1,-1704 # 6028 <_GLOBAL__sub_I__ZSt3cin+0x80> + 6d4: 9b858593 addi a1,a1,-1608 # 6088 <_GLOBAL__sub_I__ZSt3cin+0x84> 6d8: 00006517 auipc a0,0x6 - 6dc: 93050513 addi a0,a0,-1744 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> - 6e0: 1ea040ef jal 48ca + 6dc: 99050513 addi a0,a0,-1648 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> + 6e0: 22e040ef jal 490e exit(1); 6e4: 4505 li a0,1 - 6e6: 4f9040ef jal 53de + 6e6: 53d040ef jal 5422 *eq = 0; // Null terminate filename immediately 6ea: 000d8023 sb zero,0(s11) switch (tok) 6ee: f56995e3 bne s3,s6,638 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x16c> cmd = new RedirCommand(cmd, q, eq, O_RDONLY, 0); 6f2: 02800513 li a0,40 - 6f6: 09b050ef jal 5f90 <_Znwm> + 6f6: 0f7050ef jal 5fec <_Znwm> : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} 6fa: 00007797 auipc a5,0x7 - 6fe: 6ce78793 addi a5,a5,1742 # 7dc8 <_ZTV12RedirCommand+0x10> + 6fe: 74e78793 addi a5,a5,1870 # 7e48 <_ZTV12RedirCommand+0x10> 702: 01853423 sd s8,8(a0) 706: e11c sd a5,0(a0) 708: 01753823 sd s7,16(a0) @@ -1028,10 +1028,10 @@ struct ExecCommand : public Command 752: bfad j 6cc <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x200> cmd = new RedirCommand(cmd, q, eq, O_WRONLY | O_CREATE | O_TRUNC, 1); 754: 02800513 li a0,40 - 758: 039050ef jal 5f90 <_Znwm> + 758: 095050ef jal 5fec <_Znwm> : sub_cmd(c), file(f), efile(ef), mode(m), fd(fd_in) {} 75c: 00007797 auipc a5,0x7 - 760: 66c78793 addi a5,a5,1644 # 7dc8 <_ZTV12RedirCommand+0x10> + 760: 6ec78793 addi a5,a5,1772 # 7e48 <_ZTV12RedirCommand+0x10> 764: e11c sd a5,0(a0) 766: 67a2 ld a5,8(sp) 768: 01853423 sd s8,8(a0) @@ -1051,7 +1051,7 @@ struct ExecCommand : public Command 788: a811 j 79c <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2d0> 78a: 000d4583 lbu a1,0(s10) 78e: 6488 ld a0,8(s1) - 790: 4ee050ef jal 5c7e + 790: 54a050ef jal 5cda 794: e911 bnez a0,7a8 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2dc> s++; 796: 0d05 addi s10,s10,1 @@ -1059,7 +1059,7 @@ struct ExecCommand : public Command 798: 05a40f63 beq s0,s10,7f6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x32a> 79c: 000d4583 lbu a1,0(s10) 7a0: 6088 ld a0,0(s1) - 7a2: 4dc050ef jal 5c7e + 7a2: 538050ef jal 5cda 7a6: d175 beqz a0,78a <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x2be> while (s < es && strchr(WHITESPACE, *s)) 7a8: 048d7763 bgeu s10,s0,7f6 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x32a> @@ -1124,11 +1124,11 @@ struct ExecCommand : public Command 826: f862 sd s8,48(sp) 828: ec6e sd s11,24(sp) ExecCommand *cmd = new ExecCommand(); - 82a: 766050ef jal 5f90 <_Znwm> + 82a: 7c2050ef jal 5fec <_Znwm> 82e: 84aa mv s1,a0 { 830: 00007797 auipc a5,0x7 - 834: 57078793 addi a5,a5,1392 # 7da0 <_ZTV11ExecCommand+0x10> + 834: 5f078793 addi a5,a5,1520 # 7e20 <_ZTV11ExecCommand+0x10> memset(argv, 0, sizeof(argv)); 838: 00850b93 addi s7,a0,8 { @@ -1139,7 +1139,7 @@ struct ExecCommand : public Command 840: 05000613 li a2,80 844: 4581 li a1,0 846: 855e mv a0,s7 - 848: 248050ef jal 5a90 + 848: 2a4050ef jal 5aec ret = parse_redirs(ret, ps, es); 84c: 8526 mv a0,s1 84e: 8622 mv a2,s0 @@ -1153,7 +1153,7 @@ struct ExecCommand : public Command 85c: 4b01 li s6,0 while (s < es && strchr(WHITESPACE, *s)) 85e: 00007497 auipc s1,0x7 - 862: 5fa48493 addi s1,s1,1530 # 7e58 + 862: 67a48493 addi s1,s1,1658 # 7ed8 if (*s == '>') 866: 03e00c93 li s9,62 while (s < es && strchr(WHITESPACE, *s)) @@ -1166,7 +1166,7 @@ struct ExecCommand : public Command 874: 01a40863 beq s0,s10,884 <_ZN6Parser10parse_pipeEPPcS0_+0x7e> 878: 000d4583 lbu a1,0(s10) 87c: 6088 ld a0,0(s1) - 87e: 400050ef jal 5c7e + 87e: 45c050ef jal 5cda 882: f965 bnez a0,872 <_ZN6Parser10parse_pipeEPPcS0_+0x6c> *ps = s; 884: 01aa3023 sd s10,0(s4) @@ -1184,7 +1184,7 @@ struct ExecCommand : public Command 89c: 0ba40f63 beq s0,s10,95a <_ZN6Parser10parse_pipeEPPcS0_+0x154> 8a0: 000d4583 lbu a1,0(s10) 8a4: 6088 ld a0,0(s1) - 8a6: 3d8050ef jal 5c7e + 8a6: 434050ef jal 5cda 8aa: f575 bnez a0,896 <_ZN6Parser10parse_pipeEPPcS0_+0x90> ret = *s; 8ac: 000d4903 lbu s2,0(s10) @@ -1216,7 +1216,7 @@ struct ExecCommand : public Command 8e6: 008df963 bgeu s11,s0,8f8 <_ZN6Parser10parse_pipeEPPcS0_+0xf2> 8ea: 000dc583 lbu a1,0(s11) 8ee: 0009b503 ld a0,0(s3) - 8f2: 38c050ef jal 5c7e + 8f2: 3e8050ef jal 5cda 8f6: f57d bnez a0,8e4 <_ZN6Parser10parse_pipeEPPcS0_+0xde> *ps = s; 8f8: 01ba3023 sd s11,0(s4) @@ -1227,13 +1227,13 @@ struct ExecCommand : public Command 904: 00f90f63 beq s2,a5,922 <_ZN6Parser10parse_pipeEPPcS0_+0x11c> printf("shell panic: %s\n", s); 908: 00005597 auipc a1,0x5 - 90c: 74858593 addi a1,a1,1864 # 6050 <_GLOBAL__sub_I__ZSt3cin+0xa8> + 90c: 7a858593 addi a1,a1,1960 # 60b0 <_GLOBAL__sub_I__ZSt3cin+0xac> 910: 00005517 auipc a0,0x5 - 914: 6f850513 addi a0,a0,1784 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> - 918: 7b3030ef jal 48ca + 914: 75850513 addi a0,a0,1880 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> + 918: 7f7030ef jal 490e exit(1); 91c: 4505 li a0,1 - 91e: 2c1040ef jal 53de + 91e: 305040ef jal 5422 cmd->argv[argc] = q; 922: 018bb023 sd s8,0(s7) *eq = 0; // Temp @@ -1287,8 +1287,8 @@ struct ExecCommand : public Command 98a: a8c1 j a5a <_ZN6Parser10parse_pipeEPPcS0_+0x254> return *s && strchr(toks, *s); 98c: 00005517 auipc a0,0x5 - 990: 6dc50513 addi a0,a0,1756 # 6068 <_GLOBAL__sub_I__ZSt3cin+0xc0> - 994: 2ea050ef jal 5c7e + 990: 73c50513 addi a0,a0,1852 # 60c8 <_GLOBAL__sub_I__ZSt3cin+0xc4> + 994: 346050ef jal 5cda 998: cd2d beqz a0,a12 <_ZN6Parser10parse_pipeEPPcS0_+0x20c> char *s = *ps; 99a: 000a3d83 ld s11,0(s4) @@ -1300,7 +1300,7 @@ struct ExecCommand : public Command while (s < es && strchr(WHITESPACE, *s)) 9a8: 028df163 bgeu s11,s0,9ca <_ZN6Parser10parse_pipeEPPcS0_+0x1c4> 9ac: 00007997 auipc s3,0x7 - 9b0: 4ac98993 addi s3,s3,1196 # 7e58 + 9b0: 52c98993 addi s3,s3,1324 # 7ed8 9b4: a021 j 9bc <_ZN6Parser10parse_pipeEPPcS0_+0x1b6> s++; 9b6: 0d85 addi s11,s11,1 @@ -1308,7 +1308,7 @@ struct ExecCommand : public Command 9b8: 01b40963 beq s0,s11,9ca <_ZN6Parser10parse_pipeEPPcS0_+0x1c4> 9bc: 000dc583 lbu a1,0(s11) 9c0: 0009b503 ld a0,0(s3) - 9c4: 2ba050ef jal 5c7e + 9c4: 316050ef jal 5cda 9c8: f57d bnez a0,9b6 <_ZN6Parser10parse_pipeEPPcS0_+0x1b0> *ps = s; 9ca: 01ba3023 sd s11,0(s4) @@ -1336,13 +1336,13 @@ struct ExecCommand : public Command 9f4: 8082 ret printf("shell panic: %s\n", s); 9f6: 00005597 auipc a1,0x5 - 9fa: 66258593 addi a1,a1,1634 # 6058 <_GLOBAL__sub_I__ZSt3cin+0xb0> + 9fa: 6c258593 addi a1,a1,1730 # 60b8 <_GLOBAL__sub_I__ZSt3cin+0xb4> 9fe: 00005517 auipc a0,0x5 - a02: 60a50513 addi a0,a0,1546 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> - a06: 6c5030ef jal 48ca + a02: 66a50513 addi a0,a0,1642 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> + a06: 709030ef jal 490e exit(1); a0a: 4505 li a0,1 - a0c: 1d3040ef jal 53de + a0c: 217040ef jal 5422 } a10: b70d j 932 <_ZN6Parser10parse_pipeEPPcS0_+0x12c> char *s = *ps; @@ -1390,7 +1390,7 @@ struct ExecCommand : public Command ret = '+'; a6e: 02b00913 li s2,43 a72: 00007997 auipc s3,0x7 - a76: 3e698993 addi s3,s3,998 # 7e58 + a76: 46698993 addi s3,s3,1126 # 7ed8 while (s < es && strchr(WHITESPACE, *s)) a7a: e68d63e3 bltu s10,s0,8e0 <_ZN6Parser10parse_pipeEPPcS0_+0xda> *ps = s; @@ -1414,15 +1414,15 @@ struct ExecCommand : public Command a9e: bf75 j a5a <_ZN6Parser10parse_pipeEPPcS0_+0x254> return *s && strchr(toks, *s); aa0: 00005517 auipc a0,0x5 - aa4: 5d050513 addi a0,a0,1488 # 6070 <_GLOBAL__sub_I__ZSt3cin+0xc8> - aa8: 1d6050ef jal 5c7e + aa4: 63050513 addi a0,a0,1584 # 60d0 <_GLOBAL__sub_I__ZSt3cin+0xcc> + aa8: 232050ef jal 5cda aac: d505 beqz a0,9d4 <_ZN6Parser10parse_pipeEPPcS0_+0x1ce> s = *ps; aae: 000a3483 ld s1,0(s4) while (s < es && strchr(WHITESPACE, *s)) ab2: 0284f163 bgeu s1,s0,ad4 <_ZN6Parser10parse_pipeEPPcS0_+0x2ce> ab6: 00007997 auipc s3,0x7 - aba: 3a298993 addi s3,s3,930 # 7e58 + aba: 42298993 addi s3,s3,1058 # 7ed8 abe: a021 j ac6 <_ZN6Parser10parse_pipeEPPcS0_+0x2c0> s++; ac0: 0485 addi s1,s1,1 @@ -1430,7 +1430,7 @@ struct ExecCommand : public Command ac2: 00940963 beq s0,s1,ad4 <_ZN6Parser10parse_pipeEPPcS0_+0x2ce> ac6: 0004c583 lbu a1,0(s1) aca: 0009b503 ld a0,0(s3) - ace: 1b0050ef jal 5c7e + ace: 20c050ef jal 5cda ad2: f57d bnez a0,ac0 <_ZN6Parser10parse_pipeEPPcS0_+0x2ba> ret = *s; ad4: 0004c783 lbu a5,0(s1) @@ -1450,7 +1450,7 @@ struct ExecCommand : public Command b00: 0485 addi s1,s1,1 while (s < es && strchr(WHITESPACE, *s)) b02: 00007997 auipc s3,0x7 - b06: 35698993 addi s3,s3,854 # 7e58 + b06: 3d698993 addi s3,s3,982 # 7ed8 b0a: 0084e663 bltu s1,s0,b16 <_ZN6Parser10parse_pipeEPPcS0_+0x310> b0e: a819 j b24 <_ZN6Parser10parse_pipeEPPcS0_+0x31e> s++; @@ -1459,13 +1459,13 @@ struct ExecCommand : public Command b12: 0e940463 beq s0,s1,bfa <_ZN6Parser10parse_pipeEPPcS0_+0x3f4> b16: 0004c583 lbu a1,0(s1) b1a: 0009b503 ld a0,0(s3) - b1e: 160050ef jal 5c7e + b1e: 1bc050ef jal 5cda b22: f57d bnez a0,b10 <_ZN6Parser10parse_pipeEPPcS0_+0x30a> *ps = s; b24: 009a3023 sd s1,0(s4) cmd = new PipeCommand(cmd, parse_pipe(ps, es)); b28: 4561 li a0,24 - b2a: 466050ef jal 5f90 <_Znwm> + b2a: 4c2050ef jal 5fec <_Znwm> b2e: 87aa mv a5,a0 b30: 85a2 mv a1,s0 b32: 8552 mv a0,s4 @@ -1473,7 +1473,7 @@ struct ExecCommand : public Command b36: cd1ff0ef jal 806 <_ZN6Parser10parse_pipeEPPcS0_> PipeCommand(Command *l, Command *r) : left(l), right(r) {} b3a: 00007797 auipc a5,0x7 - b3e: 2b678793 addi a5,a5,694 # 7df0 <_ZTV11PipeCommand+0x10> + b3e: 33678793 addi a5,a5,822 # 7e70 <_ZTV11PipeCommand+0x10> b42: e01c sd a5,0(s0) b44: 01543423 sd s5,8(s0) b48: e808 sd a0,16(s0) @@ -1489,7 +1489,7 @@ struct ExecCommand : public Command b60: a811 j b74 <_ZN6Parser10parse_pipeEPPcS0_+0x36e> b62: 000dc583 lbu a1,0(s11) b66: 6488 ld a0,8(s1) - b68: 116050ef jal 5c7e + b68: 172050ef jal 5cda b6c: e911 bnez a0,b80 <_ZN6Parser10parse_pipeEPPcS0_+0x37a> s++; b6e: 0d85 addi s11,s11,1 @@ -1497,7 +1497,7 @@ struct ExecCommand : public Command b70: 03b40a63 beq s0,s11,ba4 <_ZN6Parser10parse_pipeEPPcS0_+0x39e> b74: 000dc583 lbu a1,0(s11) b78: 6088 ld a0,0(s1) - b7a: 104050ef jal 5c7e + b7a: 160050ef jal 5cda b7e: d175 beqz a0,b62 <_ZN6Parser10parse_pipeEPPcS0_+0x35c> while (s < es && strchr(WHITESPACE, *s)) b80: 8c6a mv s8,s10 @@ -1538,14 +1538,14 @@ struct ExecCommand : public Command while (s < es && !strchr(WHITESPACE, *s) && !strchr(SYMBOLS, *s)) bca: f484fde3 bgeu s1,s0,b24 <_ZN6Parser10parse_pipeEPPcS0_+0x31e> bce: 00007997 auipc s3,0x7 - bd2: 28a98993 addi s3,s3,650 # 7e58 + bd2: 30a98993 addi s3,s3,778 # 7ed8 bd6: 0004c583 lbu a1,0(s1) bda: 0009b503 ld a0,0(s3) - bde: 0a0050ef jal 5c7e + bde: 0fc050ef jal 5cda be2: f105 bnez a0,b02 <_ZN6Parser10parse_pipeEPPcS0_+0x2fc> be4: 0004c583 lbu a1,0(s1) be8: 0089b503 ld a0,8(s3) - bec: 092050ef jal 5c7e + bec: 0ee050ef jal 5cda bf0: f00519e3 bnez a0,b02 <_ZN6Parser10parse_pipeEPPcS0_+0x2fc> s++; bf4: 0485 addi s1,s1,1 @@ -1597,10 +1597,10 @@ struct ExecCommand : public Command c5a: 8a2a mv s4,a0 while (peek(ps, es, "&")) c5c: 00007917 auipc s2,0x7 - c60: 1fc90913 addi s2,s2,508 # 7e58 + c60: 27c90913 addi s2,s2,636 # 7ed8 return *s && strchr(toks, *s); c64: 00005c97 auipc s9,0x5 - c68: 414c8c93 addi s9,s9,1044 # 6078 <_GLOBAL__sub_I__ZSt3cin+0xd0> + c68: 474c8c93 addi s9,s9,1140 # 60d8 <_GLOBAL__sub_I__ZSt3cin+0xd4> switch (*s) c6c: 03c00b13 li s6,60 c70: 03e00b93 li s7,62 @@ -1609,7 +1609,7 @@ struct ExecCommand : public Command c7c: 02600d13 li s10,38 BackCommand(Command *c) : sub_cmd(c) {} c80: 00007a97 auipc s5,0x7 - c84: 1c0a8a93 addi s5,s5,448 # 7e40 <_ZTV11BackCommand+0x10> + c84: 240a8a93 addi s5,s5,576 # 7ec0 <_ZTV11BackCommand+0x10> char *s = *ps; c88: 0009b403 ld s0,0(s3) while (s < es && strchr(WHITESPACE, *s)) @@ -1621,7 +1621,7 @@ struct ExecCommand : public Command c94: 00848963 beq s1,s0,ca6 <_ZN6Parser10parse_lineEPPcS0_+0x70> c98: 00044583 lbu a1,0(s0) c9c: 00093503 ld a0,0(s2) - ca0: 7df040ef jal 5c7e + ca0: 03a050ef jal 5cda ca4: f57d bnez a0,c92 <_ZN6Parser10parse_lineEPPcS0_+0x5c> *ps = s; ca6: 0089b023 sd s0,0(s3) @@ -1631,7 +1631,7 @@ struct ExecCommand : public Command while (s < es && strchr(WHITESPACE, *s)) cb0: 02947163 bgeu s0,s1,cd2 <_ZN6Parser10parse_lineEPPcS0_+0x9c> cb4: 00007917 auipc s2,0x7 - cb8: 1a490913 addi s2,s2,420 # 7e58 + cb8: 22490913 addi s2,s2,548 # 7ed8 cbc: a021 j cc4 <_ZN6Parser10parse_lineEPPcS0_+0x8e> s++; cbe: 0405 addi s0,s0,1 @@ -1639,7 +1639,7 @@ struct ExecCommand : public Command cc0: 00848963 beq s1,s0,cd2 <_ZN6Parser10parse_lineEPPcS0_+0x9c> cc4: 00044583 lbu a1,0(s0) cc8: 00093503 ld a0,0(s2) - ccc: 7b3040ef jal 5c7e + ccc: 00e050ef jal 5cda cd0: f57d bnez a0,cbe <_ZN6Parser10parse_lineEPPcS0_+0x88> *ps = s; cd2: 0089b023 sd s0,0(s3) @@ -1666,7 +1666,7 @@ struct ExecCommand : public Command cfe: 8082 ret return *s && strchr(toks, *s); d00: 8566 mv a0,s9 - d02: 77d040ef jal 5c7e + d02: 7d9040ef jal 5cda s = *ps; d06: 0009b403 ld s0,0(s3) return *s && strchr(toks, *s); @@ -1680,7 +1680,7 @@ struct ExecCommand : public Command d14: 00848963 beq s1,s0,d26 <_ZN6Parser10parse_lineEPPcS0_+0xf0> d18: 00044583 lbu a1,0(s0) d1c: 00093503 ld a0,0(s2) - d20: 75f040ef jal 5c7e + d20: 7bb040ef jal 5cda d24: f57d bnez a0,d12 <_ZN6Parser10parse_lineEPPcS0_+0xdc> ret = *s; d26: 00044783 lbu a5,0(s0) @@ -1704,13 +1704,13 @@ struct ExecCommand : public Command d50: 04848b63 beq s1,s0,da6 <_ZN6Parser10parse_lineEPPcS0_+0x170> d54: 00044583 lbu a1,0(s0) d58: 00093503 ld a0,0(s2) - d5c: 723040ef jal 5c7e + d5c: 77f040ef jal 5cda d60: f57d bnez a0,d4e <_ZN6Parser10parse_lineEPPcS0_+0x118> *ps = s; d62: 0089b023 sd s0,0(s3) cmd = new BackCommand(cmd); d66: 4541 li a0,16 - d68: 228050ef jal 5f90 <_Znwm> + d68: 284050ef jal 5fec <_Znwm> BackCommand(Command *c) : sub_cmd(c) {} d6c: 01453423 sd s4,8(a0) d70: 01553023 sd s5,0(a0) @@ -1724,7 +1724,7 @@ struct ExecCommand : public Command d80: b7cd j d62 <_ZN6Parser10parse_lineEPPcS0_+0x12c> d82: 00044583 lbu a1,0(s0) d86: 00893503 ld a0,8(s2) - d8a: 6f5040ef jal 5c7e + d8a: 751040ef jal 5cda d8e: fd4d bnez a0,d48 <_ZN6Parser10parse_lineEPPcS0_+0x112> s++; d90: 0405 addi s0,s0,1 @@ -1732,7 +1732,7 @@ struct ExecCommand : public Command d92: 00848a63 beq s1,s0,da6 <_ZN6Parser10parse_lineEPPcS0_+0x170> d96: 00044583 lbu a1,0(s0) d9a: 00093503 ld a0,0(s2) - d9e: 6e1040ef jal 5c7e + d9e: 73d040ef jal 5cda da2: d165 beqz a0,d82 <_ZN6Parser10parse_lineEPPcS0_+0x14c> da4: b755 j d48 <_ZN6Parser10parse_lineEPPcS0_+0x112> da6: 8426 mv s0,s1 @@ -1740,7 +1740,7 @@ struct ExecCommand : public Command da8: 0089b023 sd s0,0(s3) cmd = new BackCommand(cmd); dac: 4541 li a0,16 - dae: 1e2050ef jal 5f90 <_Znwm> + dae: 23e050ef jal 5fec <_Znwm> BackCommand(Command *c) : sub_cmd(c) {} db2: 01453423 sd s4,8(a0) db6: 01553023 sd s5,0(a0) @@ -1757,8 +1757,8 @@ struct ExecCommand : public Command dcc: bfb5 j d48 <_ZN6Parser10parse_lineEPPcS0_+0x112> return *s && strchr(toks, *s); dce: 00005517 auipc a0,0x5 - dd2: 2b250513 addi a0,a0,690 # 6080 <_GLOBAL__sub_I__ZSt3cin+0xd8> - dd6: 6a9040ef jal 5c7e + dd2: 31250513 addi a0,a0,786 # 60e0 <_GLOBAL__sub_I__ZSt3cin+0xdc> + dd6: 705040ef jal 5cda dda: f00502e3 beqz a0,cde <_ZN6Parser10parse_lineEPPcS0_+0xa8> s = *ps; dde: 0009b403 ld s0,0(s3) @@ -1767,7 +1767,7 @@ struct ExecCommand : public Command while (s < es && strchr(WHITESPACE, *s)) de6: 0e947863 bgeu s0,s1,ed6 <_ZN6Parser10parse_lineEPPcS0_+0x2a0> dea: 00007917 auipc s2,0x7 - dee: 06e90913 addi s2,s2,110 # 7e58 + dee: 0ee90913 addi s2,s2,238 # 7ed8 df2: a021 j dfa <_ZN6Parser10parse_lineEPPcS0_+0x1c4> s++; df4: 0405 addi s0,s0,1 @@ -1775,7 +1775,7 @@ struct ExecCommand : public Command df6: 00848963 beq s1,s0,e08 <_ZN6Parser10parse_lineEPPcS0_+0x1d2> dfa: 00044583 lbu a1,0(s0) dfe: 00093503 ld a0,0(s2) - e02: 67d040ef jal 5c7e + e02: 6d9040ef jal 5cda e06: f57d bnez a0,df4 <_ZN6Parser10parse_lineEPPcS0_+0x1be> ret = *s; e08: 00044783 lbu a5,0(s0) @@ -1787,7 +1787,7 @@ struct ExecCommand : public Command e1c: efd9 bnez a5,eba <_ZN6Parser10parse_lineEPPcS0_+0x284> while (s < es && strchr(WHITESPACE, *s)) e1e: 00007917 auipc s2,0x7 - e22: 03a90913 addi s2,s2,58 # 7e58 + e22: 0ba90913 addi s2,s2,186 # 7ed8 e26: 00946663 bltu s0,s1,e32 <_ZN6Parser10parse_lineEPPcS0_+0x1fc> e2a: a819 j e40 <_ZN6Parser10parse_lineEPPcS0_+0x20a> s++; @@ -1796,20 +1796,20 @@ struct ExecCommand : public Command e2e: 06848c63 beq s1,s0,ea6 <_ZN6Parser10parse_lineEPPcS0_+0x270> e32: 00044583 lbu a1,0(s0) e36: 00093503 ld a0,0(s2) - e3a: 645040ef jal 5c7e + e3a: 6a1040ef jal 5cda e3e: f57d bnez a0,e2c <_ZN6Parser10parse_lineEPPcS0_+0x1f6> *ps = s; e40: 0089b023 sd s0,0(s3) cmd = new ListCommand(cmd, parse_line(ps, es)); e44: 4561 li a0,24 - e46: 14a050ef jal 5f90 <_Znwm> + e46: 1a6050ef jal 5fec <_Znwm> e4a: 842a mv s0,a0 e4c: 85a6 mv a1,s1 e4e: 854e mv a0,s3 e50: de7ff0ef jal c36 <_ZN6Parser10parse_lineEPPcS0_> ListCommand(Command *l, Command *r) : left(l), right(r) {} e54: 00007797 auipc a5,0x7 - e58: fc478793 addi a5,a5,-60 # 7e18 <_ZTV11ListCommand+0x10> + e58: 04478793 addi a5,a5,68 # 7e98 <_ZTV11ListCommand+0x10> e5c: e01c sd a5,0(s0) e5e: 01443423 sd s4,8(s0) e62: e808 sd a0,16(s0) @@ -1826,11 +1826,11 @@ struct ExecCommand : public Command e80: fc9470e3 bgeu s0,s1,e40 <_ZN6Parser10parse_lineEPPcS0_+0x20a> e84: 00044583 lbu a1,0(s0) e88: 00093503 ld a0,0(s2) - e8c: 5f3040ef jal 5c7e + e8c: 64f040ef jal 5cda e90: f559 bnez a0,e1e <_ZN6Parser10parse_lineEPPcS0_+0x1e8> e92: 00044583 lbu a1,0(s0) e96: 00893503 ld a0,8(s2) - e9a: 5e5040ef jal 5c7e + e9a: 641040ef jal 5cda e9e: f141 bnez a0,e1e <_ZN6Parser10parse_lineEPPcS0_+0x1e8> s++; ea0: 0405 addi s0,s0,1 @@ -1894,7 +1894,7 @@ int main() printf("\n[Lume Shell] Initialized! \n"); f16: 00005517 auipc a0,0x5 - f1a: 18a50513 addi a0,a0,394 # 60a0 <_GLOBAL__sub_I__ZSt3cin+0xf8> + f1a: 1ea50513 addi a0,a0,490 # 6100 <_GLOBAL__sub_I__ZSt3cin+0xfc> { f1e: e8ca sd s2,80(sp) f20: e4ce sd s3,72(sp) @@ -1909,13 +1909,13 @@ int main() f32: eca6 sd s1,88(sp) f34: e86a sd s10,16(sp) f36: 00008917 auipc s2,0x8 - f3a: cea90913 addi s2,s2,-790 # 8c20 <_ZZ4mainE3buf> + f3a: d6a90913 addi s2,s2,-662 # 8ca0 <_ZZ4mainE3buf> printf("\n[Lume Shell] Initialized! \n"); - f3e: 18d030ef jal 48ca + f3e: 1d1030ef jal 490e while (getcmd(buf, sizeof(buf)) >= 0) { - if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' ') + if (buf[0] == 'c' && buf[1] == 'd' && (buf[2] == ' ' || buf[2] == '\n' || buf[2] == 0)) f42: 06300a13 li s4,99 if (pid == -1) f46: 5afd li s5,-1 @@ -1923,14 +1923,14 @@ int main() f48: 00810b13 addi s6,sp,8 printf("leftovers: %s\n", s); f4c: 00005c97 auipc s9,0x5 - f50: 184c8c93 addi s9,s9,388 # 60d0 <_GLOBAL__sub_I__ZSt3cin+0x128> + f50: 1fcc8c93 addi s9,s9,508 # 6148 <_GLOBAL__sub_I__ZSt3cin+0x144> f54: 00007997 auipc s3,0x7 - f58: f0498993 addi s3,s3,-252 # 7e58 + f58: f8498993 addi s3,s3,-124 # 7ed8 printf("shell panic: %s\n", s); f5c: 00005c17 auipc s8,0x5 - f60: 0a4c0c13 addi s8,s8,164 # 6000 <_GLOBAL__sub_I__ZSt3cin+0x58> + f60: 104c0c13 addi s8,s8,260 # 6060 <_GLOBAL__sub_I__ZSt3cin+0x5c> f64: 00005b97 auipc s7,0x5 - f68: 0a4b8b93 addi s7,s7,164 # 6008 <_GLOBAL__sub_I__ZSt3cin+0x60> + f68: 104b8b93 addi s7,s7,260 # 6068 <_GLOBAL__sub_I__ZSt3cin+0x64> while (getcmd(buf, sizeof(buf)) >= 0) f6c: a021 j f74 cmd->run(); @@ -1940,20 +1940,20 @@ int main() } wait(0); f6e: 4501 li a0,0 - f70: 140000ef jal 10b0 + f70: 184000ef jal 10f4 while (getcmd(buf, sizeof(buf)) >= 0) f74: 06400593 li a1,100 f78: 854a mv a0,s2 f7a: 8e2ff0ef jal 5c <_Z6getcmdPci> - f7e: 0e054b63 bltz a0,1074 - if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' ') + f7e: 0e054f63 bltz a0,107c + if (buf[0] == 'c' && buf[1] == 'd' && (buf[2] == ' ' || buf[2] == '\n' || buf[2] == 0)) f82: 00094783 lbu a5,0(s2) f86: 01479863 bne a5,s4,f96 f8a: 00194703 lbu a4,1(s2) f8e: 06400793 li a5,100 f92: 08f70e63 beq a4,a5,102e int pid = fork(); - f96: 112000ef jal 10a8 + f96: 156000ef jal 10ec if (pid == -1) f9a: 09550263 beq a0,s5,101e if (fork_or_panic() == 0) @@ -1961,7 +1961,7 @@ int main() char *es = s + strlen(s); fa0: 854a mv a0,s2 fa2: e44a sd s2,8(sp) - fa4: 385040ef jal 5b28 + fa4: 3e1040ef jal 5b84 fa8: 00a904b3 add s1,s2,a0 Command *cmd = parse_line(&s, es); fac: 85a6 mv a1,s1 @@ -1980,7 +1980,7 @@ int main() fc0: 04848363 beq s1,s0,1006 fc4: 00044583 lbu a1,0(s0) fc8: 0009b503 ld a0,0(s3) - fcc: 4b3040ef jal 5c7e + fcc: 50f040ef jal 5cda fd0: f57d bnez a0,fbe *ps = s; fd2: e422 sd s0,8(sp) @@ -1992,7 +1992,7 @@ int main() printf("leftovers: %s\n", s); fde: 85a2 mv a1,s0 fe0: 8566 mv a0,s9 - fe2: 0e9030ef jal 48ca + fe2: 12d030ef jal 490e if (cmd) fe6: 000d0c63 beqz s10,ffe cmd->run(); @@ -2007,7 +2007,7 @@ int main() ffc: 9782 jalr a5 exit(0); ffe: 4501 li a0,0 - 1000: 3de040ef jal 53de + 1000: 422040ef jal 5422 1004: b7ad j f6e return *s && strchr(toks, *s); 1006: 0004c583 lbu a1,0(s1) @@ -2016,10605 +2016,10643 @@ int main() return *s && strchr(toks, *s); 100c: dde9 beqz a1,fe6 100e: 00005517 auipc a0,0x5 - 1012: 00a50513 addi a0,a0,10 # 6018 <_GLOBAL__sub_I__ZSt3cin+0x70> - 1016: 469040ef jal 5c7e + 1012: 06a50513 addi a0,a0,106 # 6078 <_GLOBAL__sub_I__ZSt3cin+0x74> + 1016: 4c5040ef jal 5cda if (s != es) 101a: 6422 ld s0,8(sp) 101c: bf7d j fda printf("shell panic: %s\n", s); 101e: 85e2 mv a1,s8 1020: 855e mv a0,s7 - 1022: 0a9030ef jal 48ca + 1022: 0ed030ef jal 490e exit(1); 1026: 4505 li a0,1 - 1028: 3b6040ef jal 53de + 1028: 3fa040ef jal 5422 return pid; 102c: b789 j f6e - if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' ') + if (buf[0] == 'c' && buf[1] == 'd' && (buf[2] == ' ' || buf[2] == '\n' || buf[2] == 0)) 102e: 00294703 lbu a4,2(s2) 1032: 02000793 li a5,32 - 1036: f6f710e3 bne a4,a5,f96 - buf[strlen(buf) - 1] = 0; // chop \n - 103a: 00008517 auipc a0,0x8 - 103e: be650513 addi a0,a0,-1050 # 8c20 <_ZZ4mainE3buf> - 1042: 2e7040ef jal 5b28 - 1046: 00a907b3 add a5,s2,a0 - if (chdir(buf + 3) < 0) + 1036: f6e7e0e3 bltu a5,a4,f96 + 103a: 4785 li a5,1 + 103c: 1782 slli a5,a5,0x20 + 103e: 40178793 addi a5,a5,1025 + 1042: 00e7d7b3 srl a5,a5,a4 + 1046: 8b85 andi a5,a5,1 + 1048: d7b9 beqz a5,f96 + if (buf[strlen(buf) - 1] == '\n') 104a: 00008517 auipc a0,0x8 - 104e: bd950513 addi a0,a0,-1063 # 8c23 <_ZZ4mainE3buf+0x3> - buf[strlen(buf) - 1] = 0; // chop \n - 1052: fe078fa3 sb zero,-1(a5) - if (chdir(buf + 3) < 0) - 1056: 0c2000ef jal 1118 - 105a: f0055de3 bgez a0,f74 - printf("cannot cd %s\n", buf + 3); - 105e: 00008597 auipc a1,0x8 - 1062: bc558593 addi a1,a1,-1083 # 8c23 <_ZZ4mainE3buf+0x3> - 1066: 00005517 auipc a0,0x5 - 106a: 05a50513 addi a0,a0,90 # 60c0 <_GLOBAL__sub_I__ZSt3cin+0x118> - 106e: 05d030ef jal 48ca - 1072: b709 j f74 + 104e: c5650513 addi a0,a0,-938 # 8ca0 <_ZZ4mainE3buf> + 1052: 333040ef jal 5b84 + 1056: 954a add a0,a0,s2 + 1058: fff54703 lbu a4,-1(a0) + 105c: 47a9 li a5,10 + 105e: 06f70163 beq a4,a5,10c0 + if (buf[2] == '\n' || buf[2] == 0) + 1062: 00294783 lbu a5,2(s2) + 1066: 4729 li a4,10 + 1068: 00e78363 beq a5,a4,106e + 106c: e79d bnez a5,109a + printf("cd: argument missing\n"); + 106e: 00005517 auipc a0,0x5 + 1072: 0b250513 addi a0,a0,178 # 6120 <_GLOBAL__sub_I__ZSt3cin+0x11c> + 1076: 099030ef jal 490e + continue; + 107a: bded j f74 } return 0; - 1074: 70a6 ld ra,104(sp) - 1076: 7406 ld s0,96(sp) - 1078: 64e6 ld s1,88(sp) - 107a: 6946 ld s2,80(sp) - 107c: 69a6 ld s3,72(sp) - 107e: 6a06 ld s4,64(sp) - 1080: 7ae2 ld s5,56(sp) - 1082: 7b42 ld s6,48(sp) - 1084: 7ba2 ld s7,40(sp) - 1086: 7c02 ld s8,32(sp) - 1088: 6ce2 ld s9,24(sp) - 108a: 6d42 ld s10,16(sp) - 108c: 4501 li a0,0 - 108e: 6165 addi sp,sp,112 - 1090: 8082 ret - -0000000000001092 <_start>: + 107c: 70a6 ld ra,104(sp) + 107e: 7406 ld s0,96(sp) + 1080: 64e6 ld s1,88(sp) + 1082: 6946 ld s2,80(sp) + 1084: 69a6 ld s3,72(sp) + 1086: 6a06 ld s4,64(sp) + 1088: 7ae2 ld s5,56(sp) + 108a: 7b42 ld s6,48(sp) + 108c: 7ba2 ld s7,40(sp) + 108e: 7c02 ld s8,32(sp) + 1090: 6ce2 ld s9,24(sp) + 1092: 6d42 ld s10,16(sp) + 1094: 4501 li a0,0 + 1096: 6165 addi sp,sp,112 + 1098: 8082 ret + if (chdir(path) < 0) + 109a: 00008517 auipc a0,0x8 + 109e: c0950513 addi a0,a0,-1015 # 8ca3 <_ZZ4mainE3buf+0x3> + 10a2: 0ba000ef jal 115c + 10a6: ec0557e3 bgez a0,f74 + printf("cannot cd %s\n", path); + 10aa: 00008597 auipc a1,0x8 + 10ae: bf958593 addi a1,a1,-1031 # 8ca3 <_ZZ4mainE3buf+0x3> + 10b2: 00005517 auipc a0,0x5 + 10b6: 08650513 addi a0,a0,134 # 6138 <_GLOBAL__sub_I__ZSt3cin+0x134> + 10ba: 055030ef jal 490e + 10be: bd5d j f74 + buf[strlen(buf) - 1] = 0; + 10c0: 00008517 auipc a0,0x8 + 10c4: be050513 addi a0,a0,-1056 # 8ca0 <_ZZ4mainE3buf> + 10c8: 2bd040ef jal 5b84 + 10cc: 00a907b3 add a5,s2,a0 + 10d0: fe078fa3 sb zero,-1(a5) + 10d4: b779 j 1062 + +00000000000010d6 <_start>: .section .text .global _start _start: li a0, 0 - 1092: 4501 li a0,0 + 10d6: 4501 li a0,0 li a1, 0 - 1094: 4581 li a1,0 + 10d8: 4581 li a1,0 call main - 1096: e7fff0ef jal f14
+ 10da: e3bff0ef jal f14
call exit - 109a: 344040ef jal 53de + 10de: 344040ef jal 5422 - 109e: a001 j 109e <_start+0xc> + 10e2: a001 j 10e2 <_start+0xc> -00000000000010a0 : +00000000000010e4 : name: \ li a7, SYS_ ## sysname; \ ecall; \ ret SYSCALL_NAME(sys_exit, exit) - 10a0: 488d li a7,3 - 10a2: 00000073 ecall - 10a6: 8082 ret + 10e4: 488d li a7,3 + 10e6: 00000073 ecall + 10ea: 8082 ret -00000000000010a8 : +00000000000010ec : SYSCALL(fork) - 10a8: 4889 li a7,2 - 10aa: 00000073 ecall - 10ae: 8082 ret + 10ec: 4889 li a7,2 + 10ee: 00000073 ecall + 10f2: 8082 ret -00000000000010b0 : +00000000000010f4 : SYSCALL(wait) - 10b0: 4891 li a7,4 - 10b2: 00000073 ecall - 10b6: 8082 ret + 10f4: 4891 li a7,4 + 10f6: 00000073 ecall + 10fa: 8082 ret -00000000000010b8 : +00000000000010fc : SYSCALL(pipe) - 10b8: 4895 li a7,5 - 10ba: 00000073 ecall - 10be: 8082 ret + 10fc: 4895 li a7,5 + 10fe: 00000073 ecall + 1102: 8082 ret -00000000000010c0 : +0000000000001104 : SYSCALL(read) - 10c0: 4899 li a7,6 - 10c2: 00000073 ecall - 10c6: 8082 ret + 1104: 4899 li a7,6 + 1106: 00000073 ecall + 110a: 8082 ret -00000000000010c8 : +000000000000110c : SYSCALL(write) - 10c8: 48c5 li a7,17 - 10ca: 00000073 ecall - 10ce: 8082 ret + 110c: 48c5 li a7,17 + 110e: 00000073 ecall + 1112: 8082 ret -00000000000010d0 : +0000000000001114 : SYSCALL(close) - 10d0: 48d9 li a7,22 - 10d2: 00000073 ecall - 10d6: 8082 ret + 1114: 48d9 li a7,22 + 1116: 00000073 ecall + 111a: 8082 ret -00000000000010d8 : +000000000000111c : SYSCALL(kill) - 10d8: 489d li a7,7 - 10da: 00000073 ecall - 10de: 8082 ret + 111c: 489d li a7,7 + 111e: 00000073 ecall + 1122: 8082 ret -00000000000010e0 : +0000000000001124 : SYSCALL(exec) - 10e0: 48a1 li a7,8 - 10e2: 00000073 ecall - 10e6: 8082 ret + 1124: 48a1 li a7,8 + 1126: 00000073 ecall + 112a: 8082 ret -00000000000010e8 : +000000000000112c : SYSCALL(open) - 10e8: 48c1 li a7,16 - 10ea: 00000073 ecall - 10ee: 8082 ret + 112c: 48c1 li a7,16 + 112e: 00000073 ecall + 1132: 8082 ret -00000000000010f0 : +0000000000001134 : SYSCALL(mknod) - 10f0: 48c9 li a7,18 - 10f2: 00000073 ecall - 10f6: 8082 ret + 1134: 48c9 li a7,18 + 1136: 00000073 ecall + 113a: 8082 ret -00000000000010f8 : +000000000000113c : SYSCALL(unlink) - 10f8: 48cd li a7,19 - 10fa: 00000073 ecall - 10fe: 8082 ret + 113c: 48cd li a7,19 + 113e: 00000073 ecall + 1142: 8082 ret -0000000000001100 : +0000000000001144 : SYSCALL(fstat) - 1100: 48a5 li a7,9 - 1102: 00000073 ecall - 1106: 8082 ret + 1144: 48a5 li a7,9 + 1146: 00000073 ecall + 114a: 8082 ret -0000000000001108 : +000000000000114c : SYSCALL(link) - 1108: 48d1 li a7,20 - 110a: 00000073 ecall - 110e: 8082 ret + 114c: 48d1 li a7,20 + 114e: 00000073 ecall + 1152: 8082 ret -0000000000001110 : +0000000000001154 : SYSCALL(mkdir) - 1110: 48d5 li a7,21 - 1112: 00000073 ecall - 1116: 8082 ret + 1154: 48d5 li a7,21 + 1156: 00000073 ecall + 115a: 8082 ret -0000000000001118 : +000000000000115c : SYSCALL(chdir) - 1118: 48a9 li a7,10 - 111a: 00000073 ecall - 111e: 8082 ret + 115c: 48a9 li a7,10 + 115e: 00000073 ecall + 1162: 8082 ret -0000000000001120 : +0000000000001164 : SYSCALL(dup) - 1120: 48ad li a7,11 - 1122: 00000073 ecall - 1126: 8082 ret + 1164: 48ad li a7,11 + 1166: 00000073 ecall + 116a: 8082 ret -0000000000001128 : +000000000000116c : SYSCALL(getpid) - 1128: 48b1 li a7,12 - 112a: 00000073 ecall - 112e: 8082 ret + 116c: 48b1 li a7,12 + 116e: 00000073 ecall + 1172: 8082 ret -0000000000001130 : +0000000000001174 : SYSCALL(sbrk) - 1130: 48b5 li a7,13 - 1132: 00000073 ecall - 1136: 8082 ret + 1174: 48b5 li a7,13 + 1176: 00000073 ecall + 117a: 8082 ret -0000000000001138 : +000000000000117c : SYSCALL(sleep) - 1138: 48b9 li a7,14 - 113a: 00000073 ecall - 113e: 8082 ret + 117c: 48b9 li a7,14 + 117e: 00000073 ecall + 1182: 8082 ret -0000000000001140 : +0000000000001184 : SYSCALL(uptime) - 1140: 48bd li a7,15 - 1142: 00000073 ecall - 1146: 8082 ret + 1184: 48bd li a7,15 + 1186: 00000073 ecall + 118a: 8082 ret -0000000000001148 : +000000000000118c : SYSCALL(putc) - 1148: 4885 li a7,1 - 114a: 00000073 ecall - 114e: 8082 ret + 118c: 4885 li a7,1 + 118e: 00000073 ecall + 1192: 8082 ret -0000000000001150 : +0000000000001194 : SYSCALL(disk_test) - 1150: 48dd li a7,23 - 1152: 00000073 ecall - 1156: 8082 ret - -0000000000001158 : - 1158: 48e1 li a7,24 - 115a: 00000073 ecall - 115e: 8082 ret - -0000000000001160 : - 1160: 45dc lw a5,12(a1) - 1162: 4598 lw a4,8(a1) - 1164: 9fb1 addw a5,a5,a2 - 1166: c5dc sw a5,12(a1) - 1168: 0007069b sext.w a3,a4 - 116c: 00e65463 bge a2,a4,1174 - 1170: 0006069b sext.w a3,a2 - 1174: c685 beqz a3,119c - 1176: 619c ld a5,0(a1) - 1178: 00a78e63 beq a5,a0,1194 - 117c: 00d50633 add a2,a0,a3 - 1180: 00054703 lbu a4,0(a0) - 1184: 0505 addi a0,a0,1 - 1186: 0785 addi a5,a5,1 - 1188: fee78fa3 sb a4,-1(a5) - 118c: fec56ae3 bltu a0,a2,1180 - 1190: 6188 ld a0,0(a1) - 1192: 4598 lw a4,8(a1) - 1194: 9f15 subw a4,a4,a3 - 1196: 9536 add a0,a0,a3 - 1198: e188 sd a0,0(a1) - 119a: c598 sw a4,8(a1) - 119c: 1ff00793 li a5,511 - 11a0: 00e7d463 bge a5,a4,11a8 - 11a4: 6188 ld a0,0(a1) - 11a6: 8082 ret - 11a8: 01058513 addi a0,a1,16 - 11ac: 8082 ret - -00000000000011ae : - 11ae: 45dc lw a5,12(a1) - 11b0: 01058513 addi a0,a1,16 - 11b4: 9fb1 addw a5,a5,a2 - 11b6: c5dc sw a5,12(a1) - 11b8: 8082 ret - -00000000000011ba : - 11ba: e20508d3 fmv.x.d a7,fa0 - 11be: 82aa mv t0,a0 - 11c0: 4348d813 srai a6,a7,0x34 - 11c4: 8ec6 mv t4,a7 - 11c6: 7ff87813 andi a6,a6,2047 - 11ca: 8346 mv t1,a7 - 11cc: 03f8d513 srli a0,a7,0x3f - 11d0: 0008d663 bgez a7,11dc - 11d4: 22a517d3 fneg.d fa5,fa0 - 11d8: e20788d3 fmv.x.d a7,fa5 - 11dc: 7ff00e13 li t3,2047 - 11e0: 35c80663 beq a6,t3,152c - 11e4: 1101 addi sp,sp,-32 - 11e6: 14080363 beqz a6,132c - 11ea: c018081b addiw a6,a6,-1023 - 11ee: ec22 sd s0,24(sp) - 11f0: 02081313 slli t1,a6,0x20 - 11f4: 66034d63 bltz t1,186e - 11f8: 4d100313 li t1,1233 - 11fc: 0303033b mulw t1,t1,a6 - 1200: 4849 li a6,18 - 1202: 40c3531b sraiw t1,t1,0xc - 1206: 0013039b addiw t2,t1,1 - 120a: 4078083b subw a6,a6,t2 - 120e: 4359 li t1,22 - 1210: 17036163 bltu t1,a6,1372 - 1214: 00005317 auipc t1,0x5 - 1218: 21430313 addi t1,t1,532 # 6428 - 121c: 080e slli a6,a6,0x3 - 121e: 981a add a6,a6,t1 - 1220: 00083e03 ld t3,0(a6) - 1224: 00083607 fld fa2,0(a6) - 1228: f20887d3 fmv.d.x fa5,a7 - 122c: f8000837 lui a6,0xf8000 - 1230: 01187333 and t1,a6,a7 - 1234: 01c87833 and a6,a6,t3 - 1238: 12f676d3 fmul.d fa3,fa2,fa5 - 123c: f20807d3 fmv.d.x fa5,a6 - 1240: f2030753 fmv.d.x fa4,t1 - 1244: f20305d3 fmv.d.x fa1,t1 - 1248: 0af67653 fsub.d fa2,fa2,fa5 - 124c: f20887d3 fmv.d.x fa5,a7 - 1250: 0ae7f753 fsub.d fa4,fa5,fa4 - 1254: f20807d3 fmv.d.x fa5,a6 - 1258: 6ab7f7c7 fmsub.d fa5,fa5,fa1,fa3 - 125c: 7ab677c3 fmadd.d fa5,fa2,fa1,fa5 - 1260: f20805d3 fmv.d.x fa1,a6 - 1264: 7ab777c3 fmadd.d fa5,fa4,fa1,fa5 - 1268: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 - 126c: 02d777d3 fadd.d fa5,fa4,fa3 - 1270: 3782e837 lui a6,0x3782e - 1274: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37824d0f> - 1278: 0832 slli a6,a6,0xc - 127a: 9d980813 addi a6,a6,-1575 - 127e: 084a slli a6,a6,0x12 - 1280: 187d addi a6,a6,-1 - 1282: c22798d3 fcvt.l.d a7,fa5,rtz - 1286: 0ad7f6d3 fsub.d fa3,fa5,fa3 - 128a: 00070e1b sext.w t3,a4 - 128e: d228f653 fcvt.d.l fa2,a7 - 1292: 0ac7f5d3 fsub.d fa1,fa5,fa2 - 1296: 0ad77753 fsub.d fa4,fa4,fa3 - 129a: 0af5f6d3 fsub.d fa3,fa1,fa5 - 129e: 0ad5f553 fsub.d fa0,fa1,fa3 - 12a2: 02d67653 fadd.d fa2,fa2,fa3 - 12a6: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 12aa: 0ac7f7d3 fsub.d fa5,fa5,fa2 - 12ae: 02b7f7d3 fadd.d fa5,fa5,fa1 - 12b2: 02e7f7d3 fadd.d fa5,fa5,fa4 - 12b6: c2279fd3 fcvt.l.d t6,fa5,rtz - 12ba: 9fc6 add t6,t6,a7 - 12bc: 19f87063 bgeu a6,t6,143c - 12c0: 2385 addiw t2,t2,1 - 12c2: 300e4363 bltz t3,15c8 - 12c6: 00e3833b addw t1,t2,a4 - 12ca: 475d li a4,23 - 12cc: 30677663 bgeu a4,t1,15d8 - 12d0: 577d li a4,-1 - 12d2: 9301 srli a4,a4,0x20 - 12d4: 43f75863 bge a4,t6,1704 - 12d8: 07d00313 li t1,125 - 12dc: 877e mv a4,t6 - 12de: 4e01 li t3,0 - 12e0: 3e800813 li a6,1000 - 12e4: 130e slli t1,t1,0x23 - 12e6: a039 j 12f4 - 12e8: 030747b3 div a5,a4,a6 - 12ec: 4e05 li t3,1 - 12ee: 40674c63 blt a4,t1,1706 - 12f2: 873e mv a4,a5 - 12f4: 030768b3 rem a7,a4,a6 - 12f8: fe0888e3 beqz a7,12e8 - 12fc: 400e0163 beqz t3,16fe - 1300: 8fbe mv t6,a5 - 1302: 05f5e7b7 lui a5,0x5f5e - 1306: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5533f> - 130a: 04060413 addi s0,a2,64 - 130e: 03860613 addi a2,a2,56 - 1312: 15f7c863 blt a5,t6,1462 - 1316: 000f871b sext.w a4,t6 - 131a: 20070463 beqz a4,1522 - 131e: 4f01 li t5,0 - 1320: 4f81 li t6,0 - 1322: 00007e97 auipc t4,0x7 - 1326: b46e8e93 addi t4,t4,-1210 # 7e68 - 132a: aaa9 j 1484 - 132c: 0306 slli t1,t1,0x1 - 132e: 3e030e63 beqz t1,172a - 1332: 4305 li t1,1 - 1334: ec22 sd s0,24(sp) - 1336: 00ce9e13 slli t3,t4,0xc - 133a: 134e slli t1,t1,0x33 - 133c: 520e4063 bltz t3,185c - 1340: 40135313 srai t1,t1,0x1 - 1344: 01d37e33 and t3,t1,t4 - 1348: 8f42 mv t5,a6 - 134a: 387d addiw a6,a6,-1 - 134c: fe0e0ae3 beqz t3,1340 - 1350: 26900313 li t1,617 - 1354: c00f081b addiw a6,t5,-1024 - 1358: 0268083b mulw a6,a6,t1 - 135c: 41f8531b sraiw t1,a6,0x1f - 1360: 0153531b srliw t1,t1,0x15 - 1364: 0103033b addw t1,t1,a6 - 1368: 40b3539b sraiw t2,t1,0xb - 136c: 4849 li a6,18 - 136e: 4078083b subw a6,a6,t2 - 1372: 41f8531b sraiw t1,a6,0x1f - 1376: 00684eb3 xor t4,a6,t1 - 137a: 406e8f3b subw t5,t4,t1 - 137e: 2c900313 li t1,713 - 1382: 03e3033b mulw t1,t1,t5 - 1386: 4e35 li t3,13 - 1388: 8efa mv t4,t5 - 138a: 40e35f9b sraiw t6,t1,0xe - 138e: 837e mv t1,t6 - 1390: 23fe4363 blt t3,t6,15b6 - 1394: 5e25 li t3,-23 - 1396: 026e0e3b mulw t3,t3,t1 - 139a: 01de0ebb addw t4,t3,t4 - 139e: 22084f63 bltz a6,15dc - 13a2: f2000753 fmv.d.x fa4,zero - 13a6: 00005e17 auipc t3,0x5 - 13aa: 082e0e13 addi t3,t3,130 # 6428 - 13ae: 380e9e63 bnez t4,174a - 13b2: f20887d3 fmv.d.x fa5,a7 - 13b6: fff30f1b addiw t5,t1,-1 - 13ba: 0f0e slli t5,t5,0x3 - 13bc: 02f777d3 fadd.d fa5,fa4,fa5 - 13c0: 030e slli t1,t1,0x3 - 13c2: 9f72 add t5,t5,t3 - 13c4: 9e1a add t3,t3,t1 - 13c6: 2e0e3e03 ld t3,736(t3) - 13ca: 2e8f3587 fld fa1,744(t5) - 13ce: f8000837 lui a6,0xf8000 - 13d2: e2078ed3 fmv.x.d t4,fa5 - 13d6: 12b7f6d3 fmul.d fa3,fa5,fa1 - 13da: f2088653 fmv.d.x fa2,a7 - 13de: 01d87333 and t1,a6,t4 - 13e2: 01c87833 and a6,a6,t3 - 13e6: f20807d3 fmv.d.x fa5,a6 - 13ea: f2030053 fmv.d.x ft0,t1 - 13ee: 0af5f553 fsub.d fa0,fa1,fa5 - 13f2: f20e87d3 fmv.d.x fa5,t4 - 13f6: 0ac7f0d3 fsub.d ft1,fa5,fa2 - 13fa: f20807d3 fmv.d.x fa5,a6 - 13fe: f2030653 fmv.d.x fa2,t1 - 1402: 6ac7f647 fmsub.d fa2,fa5,fa2,fa3 - 1406: f20e87d3 fmv.d.x fa5,t4 - 140a: 0a177753 fsub.d fa4,fa4,ft1 - 140e: f20300d3 fmv.d.x ft1,t1 - 1412: 0a07f7d3 fsub.d fa5,fa5,ft0 - 1416: 350f3007 fld ft0,848(t5) - 141a: 62157643 fmadd.d fa2,fa0,ft1,fa2 - 141e: 12b77753 fmul.d fa4,fa4,fa1 - 1422: f20805d3 fmv.d.x fa1,a6 - 1426: 62b7f643 fmadd.d fa2,fa5,fa1,fa2 - 142a: f20e85d3 fmv.d.x fa1,t4 - 142e: 7205f743 fmadd.d fa4,fa1,ft0,fa4 - 1432: 62a7f7c3 fmadd.d fa5,fa5,fa0,fa2 - 1436: 02e7f753 fadd.d fa4,fa5,fa4 - 143a: bd0d j 126c - 143c: 00e3833b addw t1,t2,a4 - 1440: 2a0e4663 bltz t3,16ec - 1444: 475d li a4,23 - 1446: 10677663 bgeu a4,t1,1552 - 144a: e80f93e3 bnez t6,12d0 - 144e: 05f5e7b7 lui a5,0x5f5e - 1452: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5533f> - 1456: 04060413 addi s0,a2,64 - 145a: 03860613 addi a2,a2,56 - 145e: ebf7dce3 bge a5,t6,1316 - 1462: 4f01 li t5,0 - 1464: 00007e97 auipc t4,0x7 - 1468: a04e8e93 addi t4,t4,-1532 # 7e68 - 146c: 05f5e7b7 lui a5,0x5f5e - 1470: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f55340> - 1474: 02ffe833 rem a6,t6,a5 - 1478: 02ffcfb3 div t6,t6,a5 - 147c: 0008071b sext.w a4,a6 - 1480: 0a080463 beqz a6,1528 - 1484: 8822 mv a6,s0 - 1486: 06400893 li a7,100 - 148a: 06300e13 li t3,99 - 148e: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff723e> - 1490: 0007031b sext.w t1,a4 - 1494: 031777bb remuw a5,a4,a7 - 1498: 2785 addiw a5,a5,1 - 149a: 0017979b slliw a5,a5,0x1 - 149e: 1782 slli a5,a5,0x20 - 14a0: 9381 srli a5,a5,0x20 - 14a2: 97f6 add a5,a5,t4 - 14a4: 0007d783 lhu a5,0(a5) - 14a8: 0317573b divuw a4,a4,a7 - 14ac: 00f81023 sh a5,0(a6) - 14b0: fc6e6fe3 bltu t3,t1,148e - 14b4: 008f0f3b addw t5,t5,s0 - 14b8: 410f0f3b subw t5,t5,a6 - 14bc: 020f8f63 beqz t6,14fa - 14c0: 87c2 mv a5,a6 - 14c2: 03000713 li a4,48 - 14c6: 04c80c63 beq a6,a2,151e - 14ca: 17fd addi a5,a5,-1 - 14cc: 00e78023 sb a4,0(a5) - 14d0: fec79de3 bne a5,a2,14ca - 14d4: 408807b3 sub a5,a6,s0 - 14d8: 00ff07bb addw a5,t5,a5 - 14dc: 1461 addi s0,s0,-8 - 14de: 00878f1b addiw t5,a5,8 - 14e2: 05f5e7b7 lui a5,0x5f5e - 14e6: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5533f> - 14ea: ff840613 addi a2,s0,-8 - 14ee: f7f7cfe3 blt a5,t6,146c - 14f2: 000f871b sext.w a4,t6 - 14f6: 4f81 li t6,0 - 14f8: b771 j 1484 - 14fa: 020f0563 beqz t5,1524 - 14fe: 00084703 lbu a4,0(a6) - 1502: 03000793 li a5,48 - 1506: 22f70f63 beq a4,a5,1744 - 150a: 2f01 sext.w t5,t5 - 150c: 0076a023 sw t2,0(a3) - 1510: 6462 ld s0,24(sp) - 1512: 0102b023 sd a6,0(t0) - 1516: 01e5a023 sw t5,0(a1) - 151a: 6105 addi sp,sp,32 - 151c: 8082 ret - 151e: 8442 mv s0,a6 - 1520: b7c9 j 14e2 - 1522: 8822 mv a6,s0 - 1524: 4f01 li t5,0 - 1526: b7dd j 150c - 1528: 8822 mv a6,s0 - 152a: bf59 j 14c0 - 152c: 0eb2 slli t4,t4,0xc - 152e: 00005797 auipc a5,0x5 - 1532: bca78793 addi a5,a5,-1078 # 60f8 <_GLOBAL__sub_I__ZSt3cin+0x150> - 1536: 000e8663 beqz t4,1542 - 153a: 00005797 auipc a5,0x5 - 153e: bb678793 addi a5,a5,-1098 # 60f0 <_GLOBAL__sub_I__ZSt3cin+0x148> - 1542: 00f2b023 sd a5,0(t0) - 1546: 679d lui a5,0x7 - 1548: c29c sw a5,0(a3) - 154a: 4f0d li t5,3 - 154c: 01e5a023 sw t5,0(a1) - 1550: 8082 ret - 1552: 3b9ad737 lui a4,0x3b9ad - 1556: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a3c3f> - 155a: 07f76f63 bltu a4,t6,15d8 - 155e: 4805 li a6,1 - 1560: 02081713 slli a4,a6,0x20 - 1564: 01d75893 srli a7,a4,0x1d - 1568: 00005717 auipc a4,0x5 - 156c: 27870713 addi a4,a4,632 # 67e0 - 1570: 9746 add a4,a4,a7 - 1572: 4e51 li t3,20 - 1574: a021 j 157c - 1576: 2805 addiw a6,a6,1 - 1578: edc809e3 beq a6,t3,144a - 157c: 00073883 ld a7,0(a4) - 1580: 0721 addi a4,a4,8 - 1582: ff1ffae3 bgeu t6,a7,1576 - 1586: ed0372e3 bgeu t1,a6,144a - 158a: 4068083b subw a6,a6,t1 - 158e: 475d li a4,23 - 1590: eb076de3 bltu a4,a6,144a - 1594: 080e slli a6,a6,0x3 - 1596: 00005717 auipc a4,0x5 - 159a: e9270713 addi a4,a4,-366 # 6428 - 159e: 9742 add a4,a4,a6 - 15a0: 3b873803 ld a6,952(a4) - 15a4: 00185713 srli a4,a6,0x1 - 15a8: 977e add a4,a4,t6 - 15aa: 01176363 bltu a4,a7,15b0 - 15ae: 2385 addiw t2,t2,1 - 15b0: 03075fb3 divu t6,a4,a6 - 15b4: bd59 j 144a - 15b6: 4335 li t1,13 - 15b8: 5e25 li t3,-23 - 15ba: 026e0e3b mulw t3,t3,t1 - 15be: 01de0ebb addw t4,t3,t4 - 15c2: de0850e3 bgez a6,13a2 - 15c6: a819 j 15dc - 15c8: 02571313 slli t1,a4,0x25 - 15cc: 02535313 srli t1,t1,0x25 - 15d0: 0305 addi t1,t1,1 + 1194: 48dd li a7,23 + 1196: 00000073 ecall + 119a: 8082 ret + +000000000000119c : + 119c: 48e1 li a7,24 + 119e: 00000073 ecall + 11a2: 8082 ret + +00000000000011a4 : + 11a4: 45dc lw a5,12(a1) + 11a6: 4598 lw a4,8(a1) + 11a8: 9fb1 addw a5,a5,a2 + 11aa: c5dc sw a5,12(a1) + 11ac: 0007069b sext.w a3,a4 + 11b0: 00e65463 bge a2,a4,11b8 + 11b4: 0006069b sext.w a3,a2 + 11b8: c685 beqz a3,11e0 + 11ba: 619c ld a5,0(a1) + 11bc: 00a78e63 beq a5,a0,11d8 + 11c0: 00d50633 add a2,a0,a3 + 11c4: 00054703 lbu a4,0(a0) + 11c8: 0505 addi a0,a0,1 + 11ca: 0785 addi a5,a5,1 + 11cc: fee78fa3 sb a4,-1(a5) + 11d0: fec56ae3 bltu a0,a2,11c4 + 11d4: 6188 ld a0,0(a1) + 11d6: 4598 lw a4,8(a1) + 11d8: 9f15 subw a4,a4,a3 + 11da: 9536 add a0,a0,a3 + 11dc: e188 sd a0,0(a1) + 11de: c598 sw a4,8(a1) + 11e0: 1ff00793 li a5,511 + 11e4: 00e7d463 bge a5,a4,11ec + 11e8: 6188 ld a0,0(a1) + 11ea: 8082 ret + 11ec: 01058513 addi a0,a1,16 + 11f0: 8082 ret + +00000000000011f2 : + 11f2: 45dc lw a5,12(a1) + 11f4: 01058513 addi a0,a1,16 + 11f8: 9fb1 addw a5,a5,a2 + 11fa: c5dc sw a5,12(a1) + 11fc: 8082 ret + +00000000000011fe : + 11fe: e20508d3 fmv.x.d a7,fa0 + 1202: 82aa mv t0,a0 + 1204: 4348d813 srai a6,a7,0x34 + 1208: 8ec6 mv t4,a7 + 120a: 7ff87813 andi a6,a6,2047 + 120e: 8346 mv t1,a7 + 1210: 03f8d513 srli a0,a7,0x3f + 1214: 0008d663 bgez a7,1220 + 1218: 22a517d3 fneg.d fa5,fa0 + 121c: e20788d3 fmv.x.d a7,fa5 + 1220: 7ff00e13 li t3,2047 + 1224: 35c80663 beq a6,t3,1570 + 1228: 1101 addi sp,sp,-32 + 122a: 14080363 beqz a6,1370 + 122e: c018081b addiw a6,a6,-1023 + 1232: ec22 sd s0,24(sp) + 1234: 02081313 slli t1,a6,0x20 + 1238: 66034d63 bltz t1,18b2 + 123c: 4d100313 li t1,1233 + 1240: 0303033b mulw t1,t1,a6 + 1244: 4849 li a6,18 + 1246: 40c3531b sraiw t1,t1,0xc + 124a: 0013039b addiw t2,t1,1 + 124e: 4078083b subw a6,a6,t2 + 1252: 4359 li t1,22 + 1254: 17036163 bltu t1,a6,13b6 + 1258: 00005317 auipc t1,0x5 + 125c: 24830313 addi t1,t1,584 # 64a0 + 1260: 080e slli a6,a6,0x3 + 1262: 981a add a6,a6,t1 + 1264: 00083e03 ld t3,0(a6) + 1268: 00083607 fld fa2,0(a6) + 126c: f20887d3 fmv.d.x fa5,a7 + 1270: f8000837 lui a6,0xf8000 + 1274: 01187333 and t1,a6,a7 + 1278: 01c87833 and a6,a6,t3 + 127c: 12f676d3 fmul.d fa3,fa2,fa5 + 1280: f20807d3 fmv.d.x fa5,a6 + 1284: f2030753 fmv.d.x fa4,t1 + 1288: f20305d3 fmv.d.x fa1,t1 + 128c: 0af67653 fsub.d fa2,fa2,fa5 + 1290: f20887d3 fmv.d.x fa5,a7 + 1294: 0ae7f753 fsub.d fa4,fa5,fa4 + 1298: f20807d3 fmv.d.x fa5,a6 + 129c: 6ab7f7c7 fmsub.d fa5,fa5,fa1,fa3 + 12a0: 7ab677c3 fmadd.d fa5,fa2,fa1,fa5 + 12a4: f20805d3 fmv.d.x fa1,a6 + 12a8: 7ab777c3 fmadd.d fa5,fa4,fa1,fa5 + 12ac: 7ac77743 fmadd.d fa4,fa4,fa2,fa5 + 12b0: 02d777d3 fadd.d fa5,fa4,fa3 + 12b4: 3782e837 lui a6,0x3782e + 12b8: acf80813 addi a6,a6,-1329 # 3782dacf <_ZSt4cerr+0x37824c8f> + 12bc: 0832 slli a6,a6,0xc + 12be: 9d980813 addi a6,a6,-1575 + 12c2: 084a slli a6,a6,0x12 + 12c4: 187d addi a6,a6,-1 + 12c6: c22798d3 fcvt.l.d a7,fa5,rtz + 12ca: 0ad7f6d3 fsub.d fa3,fa5,fa3 + 12ce: 00070e1b sext.w t3,a4 + 12d2: d228f653 fcvt.d.l fa2,a7 + 12d6: 0ac7f5d3 fsub.d fa1,fa5,fa2 + 12da: 0ad77753 fsub.d fa4,fa4,fa3 + 12de: 0af5f6d3 fsub.d fa3,fa1,fa5 + 12e2: 0ad5f553 fsub.d fa0,fa1,fa3 + 12e6: 02d67653 fadd.d fa2,fa2,fa3 + 12ea: 0aa7f7d3 fsub.d fa5,fa5,fa0 + 12ee: 0ac7f7d3 fsub.d fa5,fa5,fa2 + 12f2: 02b7f7d3 fadd.d fa5,fa5,fa1 + 12f6: 02e7f7d3 fadd.d fa5,fa5,fa4 + 12fa: c2279fd3 fcvt.l.d t6,fa5,rtz + 12fe: 9fc6 add t6,t6,a7 + 1300: 19f87063 bgeu a6,t6,1480 + 1304: 2385 addiw t2,t2,1 + 1306: 300e4363 bltz t3,160c + 130a: 00e3833b addw t1,t2,a4 + 130e: 475d li a4,23 + 1310: 30677663 bgeu a4,t1,161c + 1314: 577d li a4,-1 + 1316: 9301 srli a4,a4,0x20 + 1318: 43f75863 bge a4,t6,1748 + 131c: 07d00313 li t1,125 + 1320: 877e mv a4,t6 + 1322: 4e01 li t3,0 + 1324: 3e800813 li a6,1000 + 1328: 130e slli t1,t1,0x23 + 132a: a039 j 1338 + 132c: 030747b3 div a5,a4,a6 + 1330: 4e05 li t3,1 + 1332: 40674c63 blt a4,t1,174a + 1336: 873e mv a4,a5 + 1338: 030768b3 rem a7,a4,a6 + 133c: fe0888e3 beqz a7,132c + 1340: 400e0163 beqz t3,1742 + 1344: 8fbe mv t6,a5 + 1346: 05f5e7b7 lui a5,0x5f5e + 134a: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f552bf> + 134e: 04060413 addi s0,a2,64 + 1352: 03860613 addi a2,a2,56 + 1356: 15f7c863 blt a5,t6,14a6 + 135a: 000f871b sext.w a4,t6 + 135e: 20070463 beqz a4,1566 + 1362: 4f01 li t5,0 + 1364: 4f81 li t6,0 + 1366: 00007e97 auipc t4,0x7 + 136a: b82e8e93 addi t4,t4,-1150 # 7ee8 + 136e: aaa9 j 14c8 + 1370: 0306 slli t1,t1,0x1 + 1372: 3e030e63 beqz t1,176e + 1376: 4305 li t1,1 + 1378: ec22 sd s0,24(sp) + 137a: 00ce9e13 slli t3,t4,0xc + 137e: 134e slli t1,t1,0x33 + 1380: 520e4063 bltz t3,18a0 + 1384: 40135313 srai t1,t1,0x1 + 1388: 01d37e33 and t3,t1,t4 + 138c: 8f42 mv t5,a6 + 138e: 387d addiw a6,a6,-1 + 1390: fe0e0ae3 beqz t3,1384 + 1394: 26900313 li t1,617 + 1398: c00f081b addiw a6,t5,-1024 + 139c: 0268083b mulw a6,a6,t1 + 13a0: 41f8531b sraiw t1,a6,0x1f + 13a4: 0153531b srliw t1,t1,0x15 + 13a8: 0103033b addw t1,t1,a6 + 13ac: 40b3539b sraiw t2,t1,0xb + 13b0: 4849 li a6,18 + 13b2: 4078083b subw a6,a6,t2 + 13b6: 41f8531b sraiw t1,a6,0x1f + 13ba: 00684eb3 xor t4,a6,t1 + 13be: 406e8f3b subw t5,t4,t1 + 13c2: 2c900313 li t1,713 + 13c6: 03e3033b mulw t1,t1,t5 + 13ca: 4e35 li t3,13 + 13cc: 8efa mv t4,t5 + 13ce: 40e35f9b sraiw t6,t1,0xe + 13d2: 837e mv t1,t6 + 13d4: 23fe4363 blt t3,t6,15fa + 13d8: 5e25 li t3,-23 + 13da: 026e0e3b mulw t3,t3,t1 + 13de: 01de0ebb addw t4,t3,t4 + 13e2: 22084f63 bltz a6,1620 + 13e6: f2000753 fmv.d.x fa4,zero + 13ea: 00005e17 auipc t3,0x5 + 13ee: 0b6e0e13 addi t3,t3,182 # 64a0 + 13f2: 380e9e63 bnez t4,178e + 13f6: f20887d3 fmv.d.x fa5,a7 + 13fa: fff30f1b addiw t5,t1,-1 + 13fe: 0f0e slli t5,t5,0x3 + 1400: 02f777d3 fadd.d fa5,fa4,fa5 + 1404: 030e slli t1,t1,0x3 + 1406: 9f72 add t5,t5,t3 + 1408: 9e1a add t3,t3,t1 + 140a: 2e0e3e03 ld t3,736(t3) + 140e: 2e8f3587 fld fa1,744(t5) + 1412: f8000837 lui a6,0xf8000 + 1416: e2078ed3 fmv.x.d t4,fa5 + 141a: 12b7f6d3 fmul.d fa3,fa5,fa1 + 141e: f2088653 fmv.d.x fa2,a7 + 1422: 01d87333 and t1,a6,t4 + 1426: 01c87833 and a6,a6,t3 + 142a: f20807d3 fmv.d.x fa5,a6 + 142e: f2030053 fmv.d.x ft0,t1 + 1432: 0af5f553 fsub.d fa0,fa1,fa5 + 1436: f20e87d3 fmv.d.x fa5,t4 + 143a: 0ac7f0d3 fsub.d ft1,fa5,fa2 + 143e: f20807d3 fmv.d.x fa5,a6 + 1442: f2030653 fmv.d.x fa2,t1 + 1446: 6ac7f647 fmsub.d fa2,fa5,fa2,fa3 + 144a: f20e87d3 fmv.d.x fa5,t4 + 144e: 0a177753 fsub.d fa4,fa4,ft1 + 1452: f20300d3 fmv.d.x ft1,t1 + 1456: 0a07f7d3 fsub.d fa5,fa5,ft0 + 145a: 350f3007 fld ft0,848(t5) + 145e: 62157643 fmadd.d fa2,fa0,ft1,fa2 + 1462: 12b77753 fmul.d fa4,fa4,fa1 + 1466: f20805d3 fmv.d.x fa1,a6 + 146a: 62b7f643 fmadd.d fa2,fa5,fa1,fa2 + 146e: f20e85d3 fmv.d.x fa1,t4 + 1472: 7205f743 fmadd.d fa4,fa1,ft0,fa4 + 1476: 62a7f7c3 fmadd.d fa5,fa5,fa0,fa2 + 147a: 02e7f753 fadd.d fa4,fa5,fa4 + 147e: bd0d j 12b0 + 1480: 00e3833b addw t1,t2,a4 + 1484: 2a0e4663 bltz t3,1730 + 1488: 475d li a4,23 + 148a: 10677663 bgeu a4,t1,1596 + 148e: e80f93e3 bnez t6,1314 + 1492: 05f5e7b7 lui a5,0x5f5e + 1496: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f552bf> + 149a: 04060413 addi s0,a2,64 + 149e: 03860613 addi a2,a2,56 + 14a2: ebf7dce3 bge a5,t6,135a + 14a6: 4f01 li t5,0 + 14a8: 00007e97 auipc t4,0x7 + 14ac: a40e8e93 addi t4,t4,-1472 # 7ee8 + 14b0: 05f5e7b7 lui a5,0x5f5e + 14b4: 10078793 addi a5,a5,256 # 5f5e100 <_ZSt4cerr+0x5f552c0> + 14b8: 02ffe833 rem a6,t6,a5 + 14bc: 02ffcfb3 div t6,t6,a5 + 14c0: 0008071b sext.w a4,a6 + 14c4: 0a080463 beqz a6,156c + 14c8: 8822 mv a6,s0 + 14ca: 06400893 li a7,100 + 14ce: 06300e13 li t3,99 + 14d2: 1879 addi a6,a6,-2 # fffffffff7fffffe <_ZSt4cerr+0xfffffffff7ff71be> + 14d4: 0007031b sext.w t1,a4 + 14d8: 031777bb remuw a5,a4,a7 + 14dc: 2785 addiw a5,a5,1 + 14de: 0017979b slliw a5,a5,0x1 + 14e2: 1782 slli a5,a5,0x20 + 14e4: 9381 srli a5,a5,0x20 + 14e6: 97f6 add a5,a5,t4 + 14e8: 0007d783 lhu a5,0(a5) + 14ec: 0317573b divuw a4,a4,a7 + 14f0: 00f81023 sh a5,0(a6) + 14f4: fc6e6fe3 bltu t3,t1,14d2 + 14f8: 008f0f3b addw t5,t5,s0 + 14fc: 410f0f3b subw t5,t5,a6 + 1500: 020f8f63 beqz t6,153e + 1504: 87c2 mv a5,a6 + 1506: 03000713 li a4,48 + 150a: 04c80c63 beq a6,a2,1562 + 150e: 17fd addi a5,a5,-1 + 1510: 00e78023 sb a4,0(a5) + 1514: fec79de3 bne a5,a2,150e + 1518: 408807b3 sub a5,a6,s0 + 151c: 00ff07bb addw a5,t5,a5 + 1520: 1461 addi s0,s0,-8 + 1522: 00878f1b addiw t5,a5,8 + 1526: 05f5e7b7 lui a5,0x5f5e + 152a: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f552bf> + 152e: ff840613 addi a2,s0,-8 + 1532: f7f7cfe3 blt a5,t6,14b0 + 1536: 000f871b sext.w a4,t6 + 153a: 4f81 li t6,0 + 153c: b771 j 14c8 + 153e: 020f0563 beqz t5,1568 + 1542: 00084703 lbu a4,0(a6) + 1546: 03000793 li a5,48 + 154a: 22f70f63 beq a4,a5,1788 + 154e: 2f01 sext.w t5,t5 + 1550: 0076a023 sw t2,0(a3) + 1554: 6462 ld s0,24(sp) + 1556: 0102b023 sd a6,0(t0) + 155a: 01e5a023 sw t5,0(a1) + 155e: 6105 addi sp,sp,32 + 1560: 8082 ret + 1562: 8442 mv s0,a6 + 1564: b7c9 j 1526 + 1566: 8822 mv a6,s0 + 1568: 4f01 li t5,0 + 156a: b7dd j 1550 + 156c: 8822 mv a6,s0 + 156e: bf59 j 1504 + 1570: 0eb2 slli t4,t4,0xc + 1572: 00005797 auipc a5,0x5 + 1576: bfe78793 addi a5,a5,-1026 # 6170 <_GLOBAL__sub_I__ZSt3cin+0x16c> + 157a: 000e8663 beqz t4,1586 + 157e: 00005797 auipc a5,0x5 + 1582: bea78793 addi a5,a5,-1046 # 6168 <_GLOBAL__sub_I__ZSt3cin+0x164> + 1586: 00f2b023 sd a5,0(t0) + 158a: 679d lui a5,0x7 + 158c: c29c sw a5,0(a3) + 158e: 4f0d li t5,3 + 1590: 01e5a023 sw t5,0(a1) + 1594: 8082 ret + 1596: 3b9ad737 lui a4,0x3b9ad + 159a: 9ff70713 addi a4,a4,-1537 # 3b9ac9ff <_ZSt4cerr+0x3b9a3bbf> + 159e: 07f76f63 bltu a4,t6,161c + 15a2: 4805 li a6,1 + 15a4: 02081713 slli a4,a6,0x20 + 15a8: 01d75893 srli a7,a4,0x1d + 15ac: 00005717 auipc a4,0x5 + 15b0: 2ac70713 addi a4,a4,684 # 6858 + 15b4: 9746 add a4,a4,a7 + 15b6: 4e51 li t3,20 + 15b8: a021 j 15c0 + 15ba: 2805 addiw a6,a6,1 + 15bc: edc809e3 beq a6,t3,148e + 15c0: 00073883 ld a7,0(a4) + 15c4: 0721 addi a4,a4,8 + 15c6: ff1ffae3 bgeu t6,a7,15ba + 15ca: ed0372e3 bgeu t1,a6,148e + 15ce: 4068083b subw a6,a6,t1 15d2: 475d li a4,23 - 15d4: ce676ee3 bltu a4,t1,12d0 - 15d8: 4829 li a6,10 - 15da: b759 j 1560 - 15dc: 260e8663 beqz t4,1848 - 15e0: 00231e13 slli t3,t1,0x2 - 15e4: 41c30e33 sub t3,t1,t3 - 15e8: 0e0e slli t3,t3,0x3 - 15ea: 9e1a add t3,t3,t1 - 15ec: fffe881b addiw a6,t4,-1 - 15f0: 9e7a add t3,t3,t5 - 15f2: 00005e97 auipc t4,0x5 - 15f6: e36e8e93 addi t4,t4,-458 # 6428 - 15fa: 0e0e slli t3,t3,0x3 - 15fc: 080e slli a6,a6,0x3 - 15fe: 9876 add a6,a6,t4 - 1600: 9ef2 add t4,t4,t3 - 1602: 0b883607 fld fa2,184(a6) - 1606: f20887d3 fmv.d.x fa5,a7 - 160a: 0b0ebf03 ld t5,176(t4) - 160e: f8000e37 lui t3,0xf8000 - 1612: 011e7eb3 and t4,t3,a7 - 1616: 12f676d3 fmul.d fa3,fa2,fa5 - 161a: 01ee7e33 and t3,t3,t5 - 161e: f20e07d3 fmv.d.x fa5,t3 - 1622: f20e0753 fmv.d.x fa4,t3 - 1626: f20e8553 fmv.d.x fa0,t4 - 162a: 0af67653 fsub.d fa2,fa2,fa5 - 162e: f20e87d3 fmv.d.x fa5,t4 - 1632: f20e85d3 fmv.d.x fa1,t4 - 1636: 6ae7f7c7 fmsub.d fa5,fa5,fa4,fa3 - 163a: f2088753 fmv.d.x fa4,a7 - 163e: 0ab775d3 fsub.d fa1,fa4,fa1 - 1642: 16883707 fld fa4,360(a6) - 1646: 7aa677c3 fmadd.d fa5,fa2,fa0,fa5 - 164a: f20e0553 fmv.d.x fa0,t3 - 164e: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 1652: 7ac5f5c3 fmadd.d fa1,fa1,fa2,fa5 - 1656: f20887d3 fmv.d.x fa5,a7 - 165a: 5af77743 fmadd.d fa4,fa4,fa5,fa1 - 165e: c00f87e3 beqz t6,126c - 1662: 02d777d3 fadd.d fa5,fa4,fa3 - 1666: fff3089b addiw a7,t1,-1 - 166a: 00005817 auipc a6,0x5 - 166e: dbe80813 addi a6,a6,-578 # 6428 - 1672: 030e slli t1,t1,0x3 - 1674: 088e slli a7,a7,0x3 - 1676: 98c2 add a7,a7,a6 - 1678: 981a add a6,a6,t1 - 167a: e2078e53 fmv.x.d t3,fa5 - 167e: 21083e83 ld t4,528(a6) - 1682: f8000837 lui a6,0xf8000 - 1686: 2188b507 fld fa0,536(a7) - 168a: 01c87333 and t1,a6,t3 - 168e: 01d87833 and a6,a6,t4 - 1692: f2080653 fmv.d.x fa2,a6 - 1696: 12f577d3 fmul.d fa5,fa0,fa5 - 169a: 2808b587 fld fa1,640(a7) - 169e: 0ac57053 fsub.d ft0,fa0,fa2 - 16a2: f20e0653 fmv.d.x fa2,t3 - 16a6: 0ad67153 fsub.d ft2,fa2,fa3 - 16aa: f20806d3 fmv.d.x fa3,a6 - 16ae: f2030653 fmv.d.x fa2,t1 - 16b2: 7ac6f0c7 fmsub.d ft1,fa3,fa2,fa5 - 16b6: f20e06d3 fmv.d.x fa3,t3 - 16ba: 0ac6f653 fsub.d fa2,fa3,fa2 - 16be: 22f786d3 fmv.d fa3,fa5 - 16c2: 0a2777d3 fsub.d fa5,fa4,ft2 - 16c6: f2030753 fmv.d.x fa4,t1 - 16ca: 0ae07743 fmadd.d fa4,ft0,fa4,ft1 - 16ce: 12a7f7d3 fmul.d fa5,fa5,fa0 - 16d2: f2080553 fmv.d.x fa0,a6 - 16d6: 72a67743 fmadd.d fa4,fa2,fa0,fa4 - 16da: f20e0553 fmv.d.x fa0,t3 - 16de: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 - 16e2: 72067643 fmadd.d fa2,fa2,ft0,fa4 - 16e6: 02f67753 fadd.d fa4,fa2,fa5 - 16ea: b649 j 126c - 16ec: 02571313 slli t1,a4,0x25 - 16f0: 02535313 srli t1,t1,0x25 - 16f4: 0305 addi t1,t1,1 - 16f6: 475d li a4,23 - 16f8: d46769e3 bltu a4,t1,144a - 16fc: bd99 j 1552 - 16fe: 87fe mv a5,t6 - 1700: 8fbe mv t6,a5 - 1702: b101 j 1302 - 1704: 87fe mv a5,t6 - 1706: 3e800713 li a4,1000 - 170a: 02e7f73b remuw a4,a5,a4 - 170e: 2781 sext.w a5,a5 - 1710: eb01 bnez a4,1720 - 1712: 3e800813 li a6,1000 - 1716: 0307d7bb divuw a5,a5,a6 - 171a: 0307f73b remuw a4,a5,a6 - 171e: df65 beqz a4,1716 - 1720: 02079f93 slli t6,a5,0x20 - 1724: 020fdf93 srli t6,t6,0x20 - 1728: b31d j 144e - 172a: 4785 li a5,1 - 172c: c29c sw a5,0(a3) - 172e: 00c2b023 sd a2,0(t0) - 1732: 03000793 li a5,48 - 1736: 00f60023 sb a5,0(a2) - 173a: 4f05 li t5,1 - 173c: 01e5a023 sw t5,0(a1) - 1740: 6105 addi sp,sp,32 - 1742: 8082 ret - 1744: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff7241> - 1746: 3f7d addiw t5,t5,-1 - 1748: b3d1 j 150c - 174a: e826 sd s1,16(sp) - 174c: e44a sd s2,8(sp) - 174e: 4859 li a6,22 - 1750: 8976 mv s2,t4 - 1752: 11d84363 blt a6,t4,1858 - 1756: 0009049b sext.w s1,s2 - 175a: 00005e17 auipc t3,0x5 - 175e: ccee0e13 addi t3,t3,-818 # 6428 - 1762: 00349813 slli a6,s1,0x3 - 1766: 9872 add a6,a6,t3 - 1768: 00083687 fld fa3,0(a6) - 176c: 00083803 ld a6,0(a6) - 1770: f20887d3 fmv.d.x fa5,a7 - 1774: f8000fb7 lui t6,0xf8000 - 1778: 010ff833 and a6,t6,a6 - 177c: 12f6f553 fmul.d fa0,fa3,fa5 - 1780: f20807d3 fmv.d.x fa5,a6 - 1784: 011ff433 and s0,t6,a7 - 1788: f2040753 fmv.d.x fa4,s0 - 178c: 0af6f6d3 fsub.d fa3,fa3,fa5 - 1790: f20887d3 fmv.d.x fa5,a7 - 1794: f2080653 fmv.d.x fa2,a6 - 1798: 412e8ebb subw t4,t4,s2 - 179c: 0ae7f753 fsub.d fa4,fa5,fa4 - 17a0: f20407d3 fmv.d.x fa5,s0 - 17a4: e20508d3 fmv.x.d a7,fa0 - 17a8: 52c7f7c7 fmsub.d fa5,fa5,fa2,fa0 - 17ac: f2040653 fmv.d.x fa2,s0 - 17b0: 7ac6f7c3 fmadd.d fa5,fa3,fa2,fa5 - 17b4: f2080653 fmv.d.x fa2,a6 - 17b8: 7ac777c3 fmadd.d fa5,fa4,fa2,fa5 - 17bc: 7ad77743 fmadd.d fa4,fa4,fa3,fa5 - 17c0: 080e8963 beqz t4,1852 - 17c4: 02e577d3 fadd.d fa5,fa0,fa4 - 17c8: 0e8e slli t4,t4,0x3 - 17ca: 01de0833 add a6,t3,t4 - 17ce: 00083587 fld fa1,0(a6) - 17d2: 00231893 slli a7,t1,0x2 - 17d6: 411308b3 sub a7,t1,a7 - 17da: 00389813 slli a6,a7,0x3 - 17de: e2078453 fmv.x.d s0,fa5 - 17e2: 12f5f7d3 fmul.d fa5,fa1,fa5 - 17e6: 981a add a6,a6,t1 - 17e8: 987a add a6,a6,t5 - 17ea: 40980833 sub a6,a6,s1 - 17ee: 080e slli a6,a6,0x3 - 17f0: 9872 add a6,a6,t3 - 17f2: 00083e83 ld t4,0(a6) - 17f6: 008ff833 and a6,t6,s0 - 17fa: e20788d3 fmv.x.d a7,fa5 - 17fe: f20806d3 fmv.d.x fa3,a6 - 1802: f20407d3 fmv.d.x fa5,s0 - 1806: 01dfffb3 and t6,t6,t4 - 180a: f20880d3 fmv.d.x ft1,a7 - 180e: 0ad7f653 fsub.d fa2,fa5,fa3 - 1812: f20f87d3 fmv.d.x fa5,t6 - 1816: 64c2 ld s1,16(sp) - 1818: 6922 ld s2,8(sp) - 181a: 0af5f053 fsub.d ft0,fa1,fa5 - 181e: 0ad7f6c7 fmsub.d fa3,fa5,fa3,ft1 - 1822: f20407d3 fmv.d.x fa5,s0 - 1826: 0aa7f7d3 fsub.d fa5,fa5,fa0 - 182a: f2080553 fmv.d.x fa0,a6 - 182e: 6aa076c3 fmadd.d fa3,ft0,fa0,fa3 - 1832: 0af77753 fsub.d fa4,fa4,fa5 - 1836: f20f87d3 fmv.d.x fa5,t6 - 183a: 6af677c3 fmadd.d fa5,fa2,fa5,fa3 - 183e: 7a067643 fmadd.d fa2,fa2,ft0,fa5 - 1842: 62e5f743 fmadd.d fa4,fa1,fa4,fa2 - 1846: b6b5 j 13b2 - 1848: f20886d3 fmv.d.x fa3,a7 - 184c: f2000753 fmv.d.x fa4,zero - 1850: b539 j 165e - 1852: 64c2 ld s1,16(sp) - 1854: 6922 ld s2,8(sp) - 1856: beb1 j 13b2 - 1858: 4959 li s2,22 - 185a: bdf5 j 1756 - 185c: e826 sd s1,16(sp) - 185e: e44a sd s2,8(sp) - 1860: ecc00393 li t2,-308 - 1864: 4eed li t4,27 - 1866: 4335 li t1,13 - 1868: 14600f13 li t5,326 - 186c: b5cd j 174e - 186e: 26900313 li t1,617 - 1872: 0303083b mulw a6,t1,a6 - 1876: 41f8531b sraiw t1,a6,0x1f - 187a: 0153531b srliw t1,t1,0x15 - 187e: 0103033b addw t1,t1,a6 - 1882: 40b3539b sraiw t2,t1,0xb - 1886: 4849 li a6,18 - 1888: 4078083b subw a6,a6,t2 - 188c: b249 j 120e - -000000000000188e <_in_char.part.0>: + 15d4: eb076de3 bltu a4,a6,148e + 15d8: 080e slli a6,a6,0x3 + 15da: 00005717 auipc a4,0x5 + 15de: ec670713 addi a4,a4,-314 # 64a0 + 15e2: 9742 add a4,a4,a6 + 15e4: 3b873803 ld a6,952(a4) + 15e8: 00185713 srli a4,a6,0x1 + 15ec: 977e add a4,a4,t6 + 15ee: 01176363 bltu a4,a7,15f4 + 15f2: 2385 addiw t2,t2,1 + 15f4: 03075fb3 divu t6,a4,a6 + 15f8: bd59 j 148e + 15fa: 4335 li t1,13 + 15fc: 5e25 li t3,-23 + 15fe: 026e0e3b mulw t3,t3,t1 + 1602: 01de0ebb addw t4,t3,t4 + 1606: de0850e3 bgez a6,13e6 + 160a: a819 j 1620 + 160c: 02571313 slli t1,a4,0x25 + 1610: 02535313 srli t1,t1,0x25 + 1614: 0305 addi t1,t1,1 + 1616: 475d li a4,23 + 1618: ce676ee3 bltu a4,t1,1314 + 161c: 4829 li a6,10 + 161e: b759 j 15a4 + 1620: 260e8663 beqz t4,188c + 1624: 00231e13 slli t3,t1,0x2 + 1628: 41c30e33 sub t3,t1,t3 + 162c: 0e0e slli t3,t3,0x3 + 162e: 9e1a add t3,t3,t1 + 1630: fffe881b addiw a6,t4,-1 + 1634: 9e7a add t3,t3,t5 + 1636: 00005e97 auipc t4,0x5 + 163a: e6ae8e93 addi t4,t4,-406 # 64a0 + 163e: 0e0e slli t3,t3,0x3 + 1640: 080e slli a6,a6,0x3 + 1642: 9876 add a6,a6,t4 + 1644: 9ef2 add t4,t4,t3 + 1646: 0b883607 fld fa2,184(a6) + 164a: f20887d3 fmv.d.x fa5,a7 + 164e: 0b0ebf03 ld t5,176(t4) + 1652: f8000e37 lui t3,0xf8000 + 1656: 011e7eb3 and t4,t3,a7 + 165a: 12f676d3 fmul.d fa3,fa2,fa5 + 165e: 01ee7e33 and t3,t3,t5 + 1662: f20e07d3 fmv.d.x fa5,t3 + 1666: f20e0753 fmv.d.x fa4,t3 + 166a: f20e8553 fmv.d.x fa0,t4 + 166e: 0af67653 fsub.d fa2,fa2,fa5 + 1672: f20e87d3 fmv.d.x fa5,t4 + 1676: f20e85d3 fmv.d.x fa1,t4 + 167a: 6ae7f7c7 fmsub.d fa5,fa5,fa4,fa3 + 167e: f2088753 fmv.d.x fa4,a7 + 1682: 0ab775d3 fsub.d fa1,fa4,fa1 + 1686: 16883707 fld fa4,360(a6) + 168a: 7aa677c3 fmadd.d fa5,fa2,fa0,fa5 + 168e: f20e0553 fmv.d.x fa0,t3 + 1692: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 + 1696: 7ac5f5c3 fmadd.d fa1,fa1,fa2,fa5 + 169a: f20887d3 fmv.d.x fa5,a7 + 169e: 5af77743 fmadd.d fa4,fa4,fa5,fa1 + 16a2: c00f87e3 beqz t6,12b0 + 16a6: 02d777d3 fadd.d fa5,fa4,fa3 + 16aa: fff3089b addiw a7,t1,-1 + 16ae: 00005817 auipc a6,0x5 + 16b2: df280813 addi a6,a6,-526 # 64a0 + 16b6: 030e slli t1,t1,0x3 + 16b8: 088e slli a7,a7,0x3 + 16ba: 98c2 add a7,a7,a6 + 16bc: 981a add a6,a6,t1 + 16be: e2078e53 fmv.x.d t3,fa5 + 16c2: 21083e83 ld t4,528(a6) + 16c6: f8000837 lui a6,0xf8000 + 16ca: 2188b507 fld fa0,536(a7) + 16ce: 01c87333 and t1,a6,t3 + 16d2: 01d87833 and a6,a6,t4 + 16d6: f2080653 fmv.d.x fa2,a6 + 16da: 12f577d3 fmul.d fa5,fa0,fa5 + 16de: 2808b587 fld fa1,640(a7) + 16e2: 0ac57053 fsub.d ft0,fa0,fa2 + 16e6: f20e0653 fmv.d.x fa2,t3 + 16ea: 0ad67153 fsub.d ft2,fa2,fa3 + 16ee: f20806d3 fmv.d.x fa3,a6 + 16f2: f2030653 fmv.d.x fa2,t1 + 16f6: 7ac6f0c7 fmsub.d ft1,fa3,fa2,fa5 + 16fa: f20e06d3 fmv.d.x fa3,t3 + 16fe: 0ac6f653 fsub.d fa2,fa3,fa2 + 1702: 22f786d3 fmv.d fa3,fa5 + 1706: 0a2777d3 fsub.d fa5,fa4,ft2 + 170a: f2030753 fmv.d.x fa4,t1 + 170e: 0ae07743 fmadd.d fa4,ft0,fa4,ft1 + 1712: 12a7f7d3 fmul.d fa5,fa5,fa0 + 1716: f2080553 fmv.d.x fa0,a6 + 171a: 72a67743 fmadd.d fa4,fa2,fa0,fa4 + 171e: f20e0553 fmv.d.x fa0,t3 + 1722: 7aa5f7c3 fmadd.d fa5,fa1,fa0,fa5 + 1726: 72067643 fmadd.d fa2,fa2,ft0,fa4 + 172a: 02f67753 fadd.d fa4,fa2,fa5 + 172e: b649 j 12b0 + 1730: 02571313 slli t1,a4,0x25 + 1734: 02535313 srli t1,t1,0x25 + 1738: 0305 addi t1,t1,1 + 173a: 475d li a4,23 + 173c: d46769e3 bltu a4,t1,148e + 1740: bd99 j 1596 + 1742: 87fe mv a5,t6 + 1744: 8fbe mv t6,a5 + 1746: b101 j 1346 + 1748: 87fe mv a5,t6 + 174a: 3e800713 li a4,1000 + 174e: 02e7f73b remuw a4,a5,a4 + 1752: 2781 sext.w a5,a5 + 1754: eb01 bnez a4,1764 + 1756: 3e800813 li a6,1000 + 175a: 0307d7bb divuw a5,a5,a6 + 175e: 0307f73b remuw a4,a5,a6 + 1762: df65 beqz a4,175a + 1764: 02079f93 slli t6,a5,0x20 + 1768: 020fdf93 srli t6,t6,0x20 + 176c: b31d j 1492 + 176e: 4785 li a5,1 + 1770: c29c sw a5,0(a3) + 1772: 00c2b023 sd a2,0(t0) + 1776: 03000793 li a5,48 + 177a: 00f60023 sb a5,0(a2) + 177e: 4f05 li t5,1 + 1780: 01e5a023 sw t5,0(a1) + 1784: 6105 addi sp,sp,32 + 1786: 8082 ret + 1788: 0805 addi a6,a6,1 # fffffffff8000001 <_ZSt4cerr+0xfffffffff7ff71c1> + 178a: 3f7d addiw t5,t5,-1 + 178c: b3d1 j 1550 + 178e: e826 sd s1,16(sp) + 1790: e44a sd s2,8(sp) + 1792: 4859 li a6,22 + 1794: 8976 mv s2,t4 + 1796: 11d84363 blt a6,t4,189c + 179a: 0009049b sext.w s1,s2 + 179e: 00005e17 auipc t3,0x5 + 17a2: d02e0e13 addi t3,t3,-766 # 64a0 + 17a6: 00349813 slli a6,s1,0x3 + 17aa: 9872 add a6,a6,t3 + 17ac: 00083687 fld fa3,0(a6) + 17b0: 00083803 ld a6,0(a6) + 17b4: f20887d3 fmv.d.x fa5,a7 + 17b8: f8000fb7 lui t6,0xf8000 + 17bc: 010ff833 and a6,t6,a6 + 17c0: 12f6f553 fmul.d fa0,fa3,fa5 + 17c4: f20807d3 fmv.d.x fa5,a6 + 17c8: 011ff433 and s0,t6,a7 + 17cc: f2040753 fmv.d.x fa4,s0 + 17d0: 0af6f6d3 fsub.d fa3,fa3,fa5 + 17d4: f20887d3 fmv.d.x fa5,a7 + 17d8: f2080653 fmv.d.x fa2,a6 + 17dc: 412e8ebb subw t4,t4,s2 + 17e0: 0ae7f753 fsub.d fa4,fa5,fa4 + 17e4: f20407d3 fmv.d.x fa5,s0 + 17e8: e20508d3 fmv.x.d a7,fa0 + 17ec: 52c7f7c7 fmsub.d fa5,fa5,fa2,fa0 + 17f0: f2040653 fmv.d.x fa2,s0 + 17f4: 7ac6f7c3 fmadd.d fa5,fa3,fa2,fa5 + 17f8: f2080653 fmv.d.x fa2,a6 + 17fc: 7ac777c3 fmadd.d fa5,fa4,fa2,fa5 + 1800: 7ad77743 fmadd.d fa4,fa4,fa3,fa5 + 1804: 080e8963 beqz t4,1896 + 1808: 02e577d3 fadd.d fa5,fa0,fa4 + 180c: 0e8e slli t4,t4,0x3 + 180e: 01de0833 add a6,t3,t4 + 1812: 00083587 fld fa1,0(a6) + 1816: 00231893 slli a7,t1,0x2 + 181a: 411308b3 sub a7,t1,a7 + 181e: 00389813 slli a6,a7,0x3 + 1822: e2078453 fmv.x.d s0,fa5 + 1826: 12f5f7d3 fmul.d fa5,fa1,fa5 + 182a: 981a add a6,a6,t1 + 182c: 987a add a6,a6,t5 + 182e: 40980833 sub a6,a6,s1 + 1832: 080e slli a6,a6,0x3 + 1834: 9872 add a6,a6,t3 + 1836: 00083e83 ld t4,0(a6) + 183a: 008ff833 and a6,t6,s0 + 183e: e20788d3 fmv.x.d a7,fa5 + 1842: f20806d3 fmv.d.x fa3,a6 + 1846: f20407d3 fmv.d.x fa5,s0 + 184a: 01dfffb3 and t6,t6,t4 + 184e: f20880d3 fmv.d.x ft1,a7 + 1852: 0ad7f653 fsub.d fa2,fa5,fa3 + 1856: f20f87d3 fmv.d.x fa5,t6 + 185a: 64c2 ld s1,16(sp) + 185c: 6922 ld s2,8(sp) + 185e: 0af5f053 fsub.d ft0,fa1,fa5 + 1862: 0ad7f6c7 fmsub.d fa3,fa5,fa3,ft1 + 1866: f20407d3 fmv.d.x fa5,s0 + 186a: 0aa7f7d3 fsub.d fa5,fa5,fa0 + 186e: f2080553 fmv.d.x fa0,a6 + 1872: 6aa076c3 fmadd.d fa3,ft0,fa0,fa3 + 1876: 0af77753 fsub.d fa4,fa4,fa5 + 187a: f20f87d3 fmv.d.x fa5,t6 + 187e: 6af677c3 fmadd.d fa5,fa2,fa5,fa3 + 1882: 7a067643 fmadd.d fa2,fa2,ft0,fa5 + 1886: 62e5f743 fmadd.d fa4,fa1,fa4,fa2 + 188a: b6b5 j 13f6 + 188c: f20886d3 fmv.d.x fa3,a7 + 1890: f2000753 fmv.d.x fa4,zero + 1894: b539 j 16a2 + 1896: 64c2 ld s1,16(sp) + 1898: 6922 ld s2,8(sp) + 189a: beb1 j 13f6 + 189c: 4959 li s2,22 + 189e: bdf5 j 179a + 18a0: e826 sd s1,16(sp) + 18a2: e44a sd s2,8(sp) + 18a4: ecc00393 li t2,-308 + 18a8: 4eed li t4,27 + 18aa: 4335 li t1,13 + 18ac: 14600f13 li t5,326 + 18b0: b5cd j 1792 + 18b2: 26900313 li t1,617 + 18b6: 0303083b mulw a6,t1,a6 + 18ba: 41f8531b sraiw t1,a6,0x1f + 18be: 0153531b srliw t1,t1,0x15 + 18c2: 0103033b addw t1,t1,a6 + 18c6: 40b3539b sraiw t2,t1,0xb + 18ca: 4849 li a6,18 + 18cc: 4078083b subw a6,a6,t2 + 18d0: b249 j 1252 + +00000000000018d2 <_in_char.part.0>: static int _in_char(_InContext *ctx) - 188e: 87aa mv a5,a0 + 18d2: 87aa mv a5,a0 if (ctx->fd == -1) - 1890: 4508 lw a0,8(a0) - 1892: 577d li a4,-1 - 1894: 00e51d63 bne a0,a4,18ae <_in_char.part.0+0x20> + 18d4: 4508 lw a0,8(a0) + 18d6: 577d li a4,-1 + 18d8: 00e51d63 bne a0,a4,18f2 <_in_char.part.0+0x20> if (ctx->buf[ctx->pos] == '\0') - 1898: 6b94 ld a3,16(a5) - 189a: 6398 ld a4,0(a5) - 189c: 9736 add a4,a4,a3 - 189e: 00074603 lbu a2,0(a4) - 18a2: c60d beqz a2,18cc <_in_char.part.0+0x3e> + 18dc: 6b94 ld a3,16(a5) + 18de: 6398 ld a4,0(a5) + 18e0: 9736 add a4,a4,a3 + 18e2: 00074603 lbu a2,0(a4) + 18e6: c60d beqz a2,1910 <_in_char.part.0+0x3e> return (unsigned char)ctx->buf[ctx->pos++]; - 18a4: 0685 addi a3,a3,1 - 18a6: eb94 sd a3,16(a5) - 18a8: 00074503 lbu a0,0(a4) - 18ac: 8082 ret + 18e8: 0685 addi a3,a3,1 + 18ea: eb94 sd a3,16(a5) + 18ec: 00074503 lbu a0,0(a4) + 18f0: 8082 ret static int _in_char(_InContext *ctx) - 18ae: 1101 addi sp,sp,-32 + 18f2: 1101 addi sp,sp,-32 if (read(ctx->fd, &c, 1) == 1) - 18b0: 4605 li a2,1 - 18b2: 00f10593 addi a1,sp,15 + 18f4: 4605 li a2,1 + 18f6: 00f10593 addi a1,sp,15 static int _in_char(_InContext *ctx) - 18b6: ec06 sd ra,24(sp) + 18fa: ec06 sd ra,24(sp) if (read(ctx->fd, &c, 1) == 1) - 18b8: 809ff0ef jal 10c0 - 18bc: 4785 li a5,1 - 18be: 00f51963 bne a0,a5,18d0 <_in_char.part.0+0x42> + 18fc: 809ff0ef jal 1104 + 1900: 4785 li a5,1 + 1902: 00f51963 bne a0,a5,1914 <_in_char.part.0+0x42> return (unsigned char)c; - 18c2: 00f14503 lbu a0,15(sp) + 1906: 00f14503 lbu a0,15(sp) } - 18c6: 60e2 ld ra,24(sp) - 18c8: 6105 addi sp,sp,32 - 18ca: 8082 ret + 190a: 60e2 ld ra,24(sp) + 190c: 6105 addi sp,sp,32 + 190e: 8082 ret return -1; - 18cc: 557d li a0,-1 + 1910: 557d li a0,-1 } - 18ce: 8082 ret + 1912: 8082 ret return -1; - 18d0: 557d li a0,-1 - 18d2: bfd5 j 18c6 <_in_char.part.0+0x38> + 1914: 557d li a0,-1 + 1916: bfd5 j 190a <_in_char.part.0+0x38> -00000000000018d4 <_skip_space>: +0000000000001918 <_skip_space>: { - 18d4: 7139 addi sp,sp,-64 - 18d6: f822 sd s0,48(sp) - 18d8: f426 sd s1,40(sp) - 18da: f04a sd s2,32(sp) - 18dc: ec4e sd s3,24(sp) - 18de: e852 sd s4,16(sp) - 18e0: fc06 sd ra,56(sp) - 18e2: 842a mv s0,a0 + 1918: 7139 addi sp,sp,-64 + 191a: f822 sd s0,48(sp) + 191c: f426 sd s1,40(sp) + 191e: f04a sd s2,32(sp) + 1920: ec4e sd s3,24(sp) + 1922: e852 sd s4,16(sp) + 1924: fc06 sd ra,56(sp) + 1926: 842a mv s0,a0 ctx->ungotten = -1; - 18e4: 54fd li s1,-1 + 1928: 54fd li s1,-1 if (read(ctx->fd, &c, 1) == 1) - 18e6: 00f10a13 addi s4,sp,15 + 192a: 00f10a13 addi s4,sp,15 return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 18ea: 02000913 li s2,32 - 18ee: 4991 li s3,4 + 192e: 02000913 li s2,32 + 1932: 4991 li s3,4 if (ctx->ungotten >= 0) - 18f0: 4c1c lw a5,24(s0) - 18f2: 0407d163 bgez a5,1934 <_skip_space+0x60> + 1934: 4c1c lw a5,24(s0) + 1936: 0407d163 bgez a5,1978 <_skip_space+0x60> if (ctx->fd == -1) - 18f6: 4408 lw a0,8(s0) + 193a: 4408 lw a0,8(s0) if (read(ctx->fd, &c, 1) == 1) - 18f8: 4605 li a2,1 - 18fa: 85d2 mv a1,s4 + 193c: 4605 li a2,1 + 193e: 85d2 mv a1,s4 if (ctx->fd == -1) - 18fc: 02951e63 bne a0,s1,1938 <_skip_space+0x64> + 1940: 02951e63 bne a0,s1,197c <_skip_space+0x64> if (ctx->buf[ctx->pos] == '\0') - 1900: 6818 ld a4,16(s0) - 1902: 601c ld a5,0(s0) + 1944: 6818 ld a4,16(s0) + 1946: 601c ld a5,0(s0) return (unsigned char)ctx->buf[ctx->pos++]; - 1904: 00170693 addi a3,a4,1 + 1948: 00170693 addi a3,a4,1 if (ctx->buf[ctx->pos] == '\0') - 1908: 97ba add a5,a5,a4 - 190a: 0007c703 lbu a4,0(a5) # 7000 - 190e: cb19 beqz a4,1924 <_skip_space+0x50> + 194c: 97ba add a5,a5,a4 + 194e: 0007c703 lbu a4,0(a5) # 7000 + 1952: cb19 beqz a4,1968 <_skip_space+0x50> return (unsigned char)ctx->buf[ctx->pos++]; - 1910: e814 sd a3,16(s0) - 1912: 0007c783 lbu a5,0(a5) + 1954: e814 sd a3,16(s0) + 1956: 0007c783 lbu a5,0(a5) return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1916: ff77871b addiw a4,a5,-9 - 191a: fd278be3 beq a5,s2,18f0 <_skip_space+0x1c> - 191e: fce9f9e3 bgeu s3,a4,18f0 <_skip_space+0x1c> + 195a: ff77871b addiw a4,a5,-9 + 195e: fd278be3 beq a5,s2,1934 <_skip_space+0x1c> + 1962: fce9f9e3 bgeu s3,a4,1934 <_skip_space+0x1c> ctx->ungotten = c; - 1922: cc1c sw a5,24(s0) -} - 1924: 70e2 ld ra,56(sp) - 1926: 7442 ld s0,48(sp) - 1928: 74a2 ld s1,40(sp) - 192a: 7902 ld s2,32(sp) - 192c: 69e2 ld s3,24(sp) - 192e: 6a42 ld s4,16(sp) - 1930: 6121 addi sp,sp,64 - 1932: 8082 ret + 1966: cc1c sw a5,24(s0) +} + 1968: 70e2 ld ra,56(sp) + 196a: 7442 ld s0,48(sp) + 196c: 74a2 ld s1,40(sp) + 196e: 7902 ld s2,32(sp) + 1970: 69e2 ld s3,24(sp) + 1972: 6a42 ld s4,16(sp) + 1974: 6121 addi sp,sp,64 + 1976: 8082 ret ctx->ungotten = -1; - 1934: cc04 sw s1,24(s0) + 1978: cc04 sw s1,24(s0) return c; - 1936: b7c5 j 1916 <_skip_space+0x42> + 197a: b7c5 j 195a <_skip_space+0x42> if (read(ctx->fd, &c, 1) == 1) - 1938: f88ff0ef jal 10c0 - 193c: 4785 li a5,1 - 193e: fef513e3 bne a0,a5,1924 <_skip_space+0x50> + 197c: f88ff0ef jal 1104 + 1980: 4785 li a5,1 + 1982: fef513e3 bne a0,a5,1968 <_skip_space+0x50> return (unsigned char)c; - 1942: 00f14783 lbu a5,15(sp) - 1946: bfc1 j 1916 <_skip_space+0x42> + 1986: 00f14783 lbu a5,15(sp) + 198a: bfc1 j 195a <_skip_space+0x42> -0000000000001948 <_vscanf_core.constprop.0>: +000000000000198c <_vscanf_core.constprop.0>: static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 1948: 7155 addi sp,sp,-208 - 194a: e586 sd ra,200(sp) - 194c: e95a sd s6,144(sp) + 198c: 7155 addi sp,sp,-208 + 198e: e586 sd ra,200(sp) + 1990: e95a sd s6,144(sp) while (*p) - 194e: 0005c783 lbu a5,0(a1) + 1992: 0005c783 lbu a5,0(a1) static int _vscanf_core(_InContext *ctx, const char *format, va_list ap) - 1952: e432 sd a2,8(sp) + 1996: e432 sd a2,8(sp) while (*p) - 1954: 68078b63 beqz a5,1fea <_vscanf_core.constprop.0+0x6a2> - 1958: e1a2 sd s0,192(sp) - 195a: fd26 sd s1,184(sp) - 195c: f152 sd s4,160(sp) - 195e: ed56 sd s5,152(sp) - 1960: f4ee sd s11,104(sp) - 1962: 842e mv s0,a1 - 1964: 8daa mv s11,a0 + 1998: 68078b63 beqz a5,202e <_vscanf_core.constprop.0+0x6a2> + 199c: e1a2 sd s0,192(sp) + 199e: fd26 sd s1,184(sp) + 19a0: f152 sd s4,160(sp) + 19a2: ed56 sd s5,152(sp) + 19a4: f4ee sd s11,104(sp) + 19a6: 842e mv s0,a1 + 19a8: 8daa mv s11,a0 int assigned = 0; - 1966: 4b01 li s6,0 + 19aa: 4b01 li s6,0 return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1968: 02000493 li s1,32 - 196c: 4a91 li s5,4 + 19ac: 02000493 li s1,32 + 19b0: 4a91 li s5,4 if (*p != '%') - 196e: 02500a13 li s4,37 + 19b2: 02500a13 li s4,37 return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1972: 04978763 beq a5,s1,19c0 <_vscanf_core.constprop.0+0x78> - 1976: ff77869b addiw a3,a5,-9 - 197a: 0ff6f693 zext.b a3,a3 - 197e: 04daf163 bgeu s5,a3,19c0 <_vscanf_core.constprop.0+0x78> + 19b6: 04978763 beq a5,s1,1a04 <_vscanf_core.constprop.0+0x78> + 19ba: ff77869b addiw a3,a5,-9 + 19be: 0ff6f693 zext.b a3,a3 + 19c2: 04daf163 bgeu s5,a3,1a04 <_vscanf_core.constprop.0+0x78> if (*p != '%') - 1982: 07478d63 beq a5,s4,19fc <_vscanf_core.constprop.0+0xb4> + 19c6: 07478d63 beq a5,s4,1a40 <_vscanf_core.constprop.0+0xb4> _skip_space(ctx); - 1986: 856e mv a0,s11 - 1988: f4dff0ef jal 18d4 <_skip_space> + 19ca: 856e mv a0,s11 + 19cc: f4dff0ef jal 1918 <_skip_space> if (ctx->ungotten >= 0) - 198c: 018da503 lw a0,24(s11) - 1990: 04055a63 bgez a0,19e4 <_vscanf_core.constprop.0+0x9c> - 1994: 856e mv a0,s11 - 1996: ef9ff0ef jal 188e <_in_char.part.0> + 19d0: 018da503 lw a0,24(s11) + 19d4: 04055a63 bgez a0,1a28 <_vscanf_core.constprop.0+0x9c> + 19d8: 856e mv a0,s11 + 19da: ef9ff0ef jal 18d2 <_in_char.part.0> if (c != *p) - 199a: 00044783 lbu a5,0(s0) - 199e: 04a78a63 beq a5,a0,19f2 <_vscanf_core.constprop.0+0xaa> + 19de: 00044783 lbu a5,0(s0) + 19e2: 04a78a63 beq a5,a0,1a36 <_vscanf_core.constprop.0+0xaa> if (c != -1) - 19a2: 57fd li a5,-1 - 19a4: 00f50463 beq a0,a5,19ac <_vscanf_core.constprop.0+0x64> + 19e6: 57fd li a5,-1 + 19e8: 00f50463 beq a0,a5,19f0 <_vscanf_core.constprop.0+0x64> ctx->ungotten = c; - 19a8: 00adac23 sw a0,24(s11) - 19ac: 640e ld s0,192(sp) - 19ae: 74ea ld s1,184(sp) - 19b0: 7a0a ld s4,160(sp) - 19b2: 6aea ld s5,152(sp) - 19b4: 7da6 ld s11,104(sp) -} - 19b6: 60ae ld ra,200(sp) - 19b8: 855a mv a0,s6 - 19ba: 6b4a ld s6,144(sp) - 19bc: 6169 addi sp,sp,208 - 19be: 8082 ret + 19ec: 00adac23 sw a0,24(s11) + 19f0: 640e ld s0,192(sp) + 19f2: 74ea ld s1,184(sp) + 19f4: 7a0a ld s4,160(sp) + 19f6: 6aea ld s5,152(sp) + 19f8: 7da6 ld s11,104(sp) +} + 19fa: 60ae ld ra,200(sp) + 19fc: 855a mv a0,s6 + 19fe: 6b4a ld s6,144(sp) + 1a00: 6169 addi sp,sp,208 + 1a02: 8082 ret _skip_space(ctx); - 19c0: 856e mv a0,s11 - 19c2: f13ff0ef jal 18d4 <_skip_space> + 1a04: 856e mv a0,s11 + 1a06: f13ff0ef jal 1918 <_skip_space> while (isspace(*p)) - 19c6: 00044783 lbu a5,0(s0) + 1a0a: 00044783 lbu a5,0(s0) return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 19ca: 4611 li a2,4 - 19cc: ff77869b addiw a3,a5,-9 - 19d0: 0ff6f693 zext.b a3,a3 - 19d4: 00978663 beq a5,s1,19e0 <_vscanf_core.constprop.0+0x98> - 19d8: 00d67463 bgeu a2,a3,19e0 <_vscanf_core.constprop.0+0x98> + 1a0e: 4611 li a2,4 + 1a10: ff77869b addiw a3,a5,-9 + 1a14: 0ff6f693 zext.b a3,a3 + 1a18: 00978663 beq a5,s1,1a24 <_vscanf_core.constprop.0+0x98> + 1a1c: 00d67463 bgeu a2,a3,1a24 <_vscanf_core.constprop.0+0x98> while (*p) - 19dc: fbd9 bnez a5,1972 <_vscanf_core.constprop.0+0x2a> - 19de: b7f9 j 19ac <_vscanf_core.constprop.0+0x64> + 1a20: fbd9 bnez a5,19b6 <_vscanf_core.constprop.0+0x2a> + 1a22: b7f9 j 19f0 <_vscanf_core.constprop.0+0x64> p++; - 19e0: 0405 addi s0,s0,1 - 19e2: b7d5 j 19c6 <_vscanf_core.constprop.0+0x7e> + 1a24: 0405 addi s0,s0,1 + 1a26: b7d5 j 1a0a <_vscanf_core.constprop.0+0x7e> ctx->ungotten = -1; - 19e4: 57fd li a5,-1 - 19e6: 00fdac23 sw a5,24(s11) + 1a28: 57fd li a5,-1 + 1a2a: 00fdac23 sw a5,24(s11) if (c != *p) - 19ea: 00044783 lbu a5,0(s0) - 19ee: faa79ae3 bne a5,a0,19a2 <_vscanf_core.constprop.0+0x5a> + 1a2e: 00044783 lbu a5,0(s0) + 1a32: faa79ae3 bne a5,a0,19e6 <_vscanf_core.constprop.0+0x5a> while (*p) - 19f2: 00144783 lbu a5,1(s0) + 1a36: 00144783 lbu a5,1(s0) p++; - 19f6: 0405 addi s0,s0,1 + 1a3a: 0405 addi s0,s0,1 while (*p) - 19f8: ffad bnez a5,1972 <_vscanf_core.constprop.0+0x2a> - 19fa: bf4d j 19ac <_vscanf_core.constprop.0+0x64> - 19fc: f94a sd s2,176(sp) - 19fe: f54e sd s3,168(sp) - 1a00: e55e sd s7,136(sp) - 1a02: e162 sd s8,128(sp) + 1a3c: ffad bnez a5,19b6 <_vscanf_core.constprop.0+0x2a> + 1a3e: bf4d j 19f0 <_vscanf_core.constprop.0+0x64> + 1a40: f94a sd s2,176(sp) + 1a42: f54e sd s3,168(sp) + 1a44: e55e sd s7,136(sp) + 1a46: e162 sd s8,128(sp) if (*p == '*') - 1a04: 00144583 lbu a1,1(s0) - 1a08: 02a00793 li a5,42 - 1a0c: 22f58d63 beq a1,a5,1c46 <_vscanf_core.constprop.0+0x2fe> + 1a48: 00144583 lbu a1,1(s0) + 1a4c: 02a00793 li a5,42 + 1a50: 22f58d63 beq a1,a5,1c8a <_vscanf_core.constprop.0+0x2fe> p++; - 1a10: 0405 addi s0,s0,1 + 1a54: 0405 addi s0,s0,1 int suppress = 0; - 1a12: 4981 li s3,0 + 1a56: 4981 li s3,0 while (*p >= '0' && *p <= '9') - 1a14: fd05861b addiw a2,a1,-48 - 1a18: 0ff67693 zext.b a3,a2 - 1a1c: 47a5 li a5,9 - 1a1e: 36d7e763 bltu a5,a3,1d8c <_vscanf_core.constprop.0+0x444> - 1a22: 4781 li a5,0 - 1a24: 4825 li a6,9 - 1a26: a019 j 1a2c <_vscanf_core.constprop.0+0xe4> + 1a58: fd05861b addiw a2,a1,-48 + 1a5c: 0ff67693 zext.b a3,a2 + 1a60: 47a5 li a5,9 + 1a62: 36d7e763 bltu a5,a3,1dd0 <_vscanf_core.constprop.0+0x444> + 1a66: 4781 li a5,0 + 1a68: 4825 li a6,9 + 1a6a: a019 j 1a70 <_vscanf_core.constprop.0+0xe4> width = width * 10 + (*p - '0'); - 1a28: 0016979b slliw a5,a3,0x1 + 1a6c: 0016979b slliw a5,a3,0x1 while (*p >= '0' && *p <= '9') - 1a2c: 00144583 lbu a1,1(s0) + 1a70: 00144583 lbu a1,1(s0) width = width * 10 + (*p - '0'); - 1a30: 00f6093b addw s2,a2,a5 - 1a34: 0029169b slliw a3,s2,0x2 + 1a74: 00f6093b addw s2,a2,a5 + 1a78: 0029169b slliw a3,s2,0x2 while (*p >= '0' && *p <= '9') - 1a38: fd05861b addiw a2,a1,-48 - 1a3c: 0ff67513 zext.b a0,a2 + 1a7c: fd05861b addiw a2,a1,-48 + 1a80: 0ff67513 zext.b a0,a2 width = width * 10 + (*p - '0'); - 1a40: 012686bb addw a3,a3,s2 + 1a84: 012686bb addw a3,a3,s2 p++; - 1a44: 0405 addi s0,s0,1 + 1a88: 0405 addi s0,s0,1 while (*p >= '0' && *p <= '9') - 1a46: fea871e3 bgeu a6,a0,1a28 <_vscanf_core.constprop.0+0xe0> + 1a8a: fea871e3 bgeu a6,a0,1a6c <_vscanf_core.constprop.0+0xe0> if (*p == 'l') - 1a4a: 06c00693 li a3,108 + 1a8e: 06c00693 li a3,108 p++; - 1a4e: 00140b93 addi s7,s0,1 + 1a92: 00140b93 addi s7,s0,1 if (*p == 'l') - 1a52: 1ed58f63 beq a1,a3,1c50 <_vscanf_core.constprop.0+0x308> + 1a96: 1ed58f63 beq a1,a3,1c94 <_vscanf_core.constprop.0+0x308> else if (*p == 'h') - 1a56: 06800693 li a3,104 - 1a5a: 2ad58863 beq a1,a3,1d0a <_vscanf_core.constprop.0+0x3c2> + 1a9a: 06800693 li a3,104 + 1a9e: 2ad58863 beq a1,a3,1d4e <_vscanf_core.constprop.0+0x3c2> char spec = *p++; - 1a5e: 00044c03 lbu s8,0(s0) - 1a62: 8ba2 mv s7,s0 + 1aa2: 00044c03 lbu s8,0(s0) + 1aa6: 8ba2 mv s7,s0 int len_mod = 0; - 1a64: ec02 sd zero,24(sp) + 1aa8: ec02 sd zero,24(sp) char spec = *p++; - 1a66: 06300693 li a3,99 - 1a6a: 001b8413 addi s0,s7,1 + 1aaa: 06300693 li a3,99 + 1aae: 001b8413 addi s0,s7,1 if (!spec) - 1a6e: 2adc0863 beq s8,a3,1d1e <_vscanf_core.constprop.0+0x3d6> - 1a72: 1f86fc63 bgeu a3,s8,1c6a <_vscanf_core.constprop.0+0x322> - 1a76: f9cc069b addiw a3,s8,-100 - 1a7a: 0ff6f693 zext.b a3,a3 - 1a7e: 4651 li a2,20 - 1a80: 0cd66e63 bltu a2,a3,1b5c <_vscanf_core.constprop.0+0x214> - 1a84: 00120637 lui a2,0x120 - 1a88: 4585 li a1,1 - 1a8a: 00d595b3 sll a1,a1,a3 - 1a8e: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x117261> - 1a92: 8e6d and a2,a2,a1 - 1a94: ee69 bnez a2,1b6e <_vscanf_core.constprop.0+0x226> - 1a96: 89b9 andi a1,a1,14 - 1a98: 1e059263 bnez a1,1c7c <_vscanf_core.constprop.0+0x334> - 1a9c: 463d li a2,15 - 1a9e: 0ac69f63 bne a3,a2,1b5c <_vscanf_core.constprop.0+0x214> + 1ab2: 2adc0863 beq s8,a3,1d62 <_vscanf_core.constprop.0+0x3d6> + 1ab6: 1f86fc63 bgeu a3,s8,1cae <_vscanf_core.constprop.0+0x322> + 1aba: f9cc069b addiw a3,s8,-100 + 1abe: 0ff6f693 zext.b a3,a3 + 1ac2: 4651 li a2,20 + 1ac4: 0cd66e63 bltu a2,a3,1ba0 <_vscanf_core.constprop.0+0x214> + 1ac8: 00120637 lui a2,0x120 + 1acc: 4585 li a1,1 + 1ace: 00d595b3 sll a1,a1,a3 + 1ad2: 02160613 addi a2,a2,33 # 120021 <_ZSt4cerr+0x1171e1> + 1ad6: 8e6d and a2,a2,a1 + 1ad8: ee69 bnez a2,1bb2 <_vscanf_core.constprop.0+0x226> + 1ada: 89b9 andi a1,a1,14 + 1adc: 1e059263 bnez a1,1cc0 <_vscanf_core.constprop.0+0x334> + 1ae0: 463d li a2,15 + 1ae2: 0ac69f63 bne a3,a2,1ba0 <_vscanf_core.constprop.0+0x214> _skip_space(ctx); - 1aa2: 856e mv a0,s11 - 1aa4: e31ff0ef jal 18d4 <_skip_space> + 1ae6: 856e mv a0,s11 + 1ae8: e31ff0ef jal 1918 <_skip_space> char *buf = suppress ? NULL : va_arg(ap, char *); - 1aa8: ec02 sd zero,24(sp) - 1aaa: 00099763 bnez s3,1ab8 <_vscanf_core.constprop.0+0x170> - 1aae: 67a2 ld a5,8(sp) - 1ab0: 6398 ld a4,0(a5) - 1ab2: 07a1 addi a5,a5,8 - 1ab4: e43e sd a5,8(sp) - 1ab6: ec3a sd a4,24(sp) + 1aec: ec02 sd zero,24(sp) + 1aee: 00099763 bnez s3,1afc <_vscanf_core.constprop.0+0x170> + 1af2: 67a2 ld a5,8(sp) + 1af4: 6398 ld a4,0(a5) + 1af6: 07a1 addi a5,a5,8 + 1af8: e43e sd a5,8(sp) + 1afa: ec3a sd a4,24(sp) if (ctx->ungotten >= 0) - 1ab8: 018da503 lw a0,24(s11) - 1abc: 2e055b63 bgez a0,1db2 <_vscanf_core.constprop.0+0x46a> - 1ac0: 856e mv a0,s11 - 1ac2: dcdff0ef jal 188e <_in_char.part.0> + 1afc: 018da503 lw a0,24(s11) + 1b00: 2e055b63 bgez a0,1df6 <_vscanf_core.constprop.0+0x46a> + 1b04: 856e mv a0,s11 + 1b06: dcdff0ef jal 18d2 <_in_char.part.0> while (c != -1 && !isspace(c)) - 1ac6: 56fd li a3,-1 - 1ac8: 6ad50363 beq a0,a3,216e <_vscanf_core.constprop.0+0x826> + 1b0a: 56fd li a3,-1 + 1b0c: 6ad50363 beq a0,a3,21b2 <_vscanf_core.constprop.0+0x826> return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1acc: 02000693 li a3,32 - 1ad0: 3ed50963 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> - 1ad4: 46a5 li a3,9 - 1ad6: 3ed50663 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> - 1ada: 46a9 li a3,10 - 1adc: 3ed50363 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> - 1ae0: 46ad li a3,11 - 1ae2: 3ed50063 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> - 1ae6: 46b1 li a3,12 - 1ae8: 3cd50d63 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> - 1aec: 46b5 li a3,13 - 1aee: 3cd50a63 beq a0,a3,1ec2 <_vscanf_core.constprop.0+0x57a> - 1af2: 67e2 ld a5,24(sp) - 1af4: fce6 sd s9,120(sp) - 1af6: f8ea sd s10,112(sp) - 1af8: e83e sd a5,16(sp) - 1afa: 4d01 li s10,0 + 1b10: 02000693 li a3,32 + 1b14: 3ed50963 beq a0,a3,1f06 <_vscanf_core.constprop.0+0x57a> + 1b18: 46a5 li a3,9 + 1b1a: 3ed50663 beq a0,a3,1f06 <_vscanf_core.constprop.0+0x57a> + 1b1e: 46a9 li a3,10 + 1b20: 3ed50363 beq a0,a3,1f06 <_vscanf_core.constprop.0+0x57a> + 1b24: 46ad li a3,11 + 1b26: 3ed50063 beq a0,a3,1f06 <_vscanf_core.constprop.0+0x57a> + 1b2a: 46b1 li a3,12 + 1b2c: 3cd50d63 beq a0,a3,1f06 <_vscanf_core.constprop.0+0x57a> + 1b30: 46b5 li a3,13 + 1b32: 3cd50a63 beq a0,a3,1f06 <_vscanf_core.constprop.0+0x57a> + 1b36: 67e2 ld a5,24(sp) + 1b38: fce6 sd s9,120(sp) + 1b3a: f8ea sd s10,112(sp) + 1b3c: e83e sd a5,16(sp) + 1b3e: 4d01 li s10,0 while (c != -1 && !isspace(c)) - 1afc: 5c7d li s8,-1 + 1b40: 5c7d li s8,-1 return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1afe: 02000c93 li s9,32 + 1b42: 02000c93 li s9,32 if (width > 0 && i >= width) - 1b02: 01205463 blez s2,1b0a <_vscanf_core.constprop.0+0x1c2> - 1b06: 052d5563 bge s10,s2,1b50 <_vscanf_core.constprop.0+0x208> + 1b46: 01205463 blez s2,1b4e <_vscanf_core.constprop.0+0x1c2> + 1b4a: 052d5563 bge s10,s2,1b94 <_vscanf_core.constprop.0+0x208> if (!suppress) - 1b0a: 00099563 bnez s3,1b14 <_vscanf_core.constprop.0+0x1cc> + 1b4e: 00099563 bnez s3,1b58 <_vscanf_core.constprop.0+0x1cc> buf[i] = (char)c; - 1b0e: 67c2 ld a5,16(sp) - 1b10: 00a78023 sb a0,0(a5) + 1b52: 67c2 ld a5,16(sp) + 1b54: 00a78023 sb a0,0(a5) if (ctx->ungotten >= 0) - 1b14: 018da503 lw a0,24(s11) + 1b58: 018da503 lw a0,24(s11) i++; - 1b18: 2d05 addiw s10,s10,1 + 1b5c: 2d05 addiw s10,s10,1 if (ctx->ungotten >= 0) - 1b1a: 30055963 bgez a0,1e2c <_vscanf_core.constprop.0+0x4e4> - 1b1e: 856e mv a0,s11 - 1b20: d6fff0ef jal 188e <_in_char.part.0> + 1b5e: 30055963 bgez a0,1e70 <_vscanf_core.constprop.0+0x4e4> + 1b62: 856e mv a0,s11 + 1b64: d6fff0ef jal 18d2 <_in_char.part.0> while (c != -1 && !isspace(c)) - 1b24: 27850663 beq a0,s8,1d90 <_vscanf_core.constprop.0+0x448> + 1b68: 27850663 beq a0,s8,1dd4 <_vscanf_core.constprop.0+0x448> return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; - 1b28: 03950463 beq a0,s9,1b50 <_vscanf_core.constprop.0+0x208> - 1b2c: 47a5 li a5,9 - 1b2e: 02f50163 beq a0,a5,1b50 <_vscanf_core.constprop.0+0x208> - 1b32: 47a9 li a5,10 - 1b34: 00f50e63 beq a0,a5,1b50 <_vscanf_core.constprop.0+0x208> - 1b38: 47ad li a5,11 - 1b3a: 00f50b63 beq a0,a5,1b50 <_vscanf_core.constprop.0+0x208> - 1b3e: 47b1 li a5,12 - 1b40: 00f50863 beq a0,a5,1b50 <_vscanf_core.constprop.0+0x208> - 1b44: 67c2 ld a5,16(sp) - 1b46: 0785 addi a5,a5,1 - 1b48: e83e sd a5,16(sp) - 1b4a: 47b5 li a5,13 - 1b4c: faf51be3 bne a0,a5,1b02 <_vscanf_core.constprop.0+0x1ba> + 1b6c: 03950463 beq a0,s9,1b94 <_vscanf_core.constprop.0+0x208> + 1b70: 47a5 li a5,9 + 1b72: 02f50163 beq a0,a5,1b94 <_vscanf_core.constprop.0+0x208> + 1b76: 47a9 li a5,10 + 1b78: 00f50e63 beq a0,a5,1b94 <_vscanf_core.constprop.0+0x208> + 1b7c: 47ad li a5,11 + 1b7e: 00f50b63 beq a0,a5,1b94 <_vscanf_core.constprop.0+0x208> + 1b82: 47b1 li a5,12 + 1b84: 00f50863 beq a0,a5,1b94 <_vscanf_core.constprop.0+0x208> + 1b88: 67c2 ld a5,16(sp) + 1b8a: 0785 addi a5,a5,1 + 1b8c: e83e sd a5,16(sp) + 1b8e: 47b5 li a5,13 + 1b90: faf51be3 bne a0,a5,1b46 <_vscanf_core.constprop.0+0x1ba> if (!suppress) - 1b50: 64098a63 beqz s3,21a4 <_vscanf_core.constprop.0+0x85c> - 1b54: 7ce6 ld s9,120(sp) - 1b56: 7d46 ld s10,112(sp) + 1b94: 64098a63 beqz s3,21e8 <_vscanf_core.constprop.0+0x85c> + 1b98: 7ce6 ld s9,120(sp) + 1b9a: 7d46 ld s10,112(sp) ctx->ungotten = c; - 1b58: 00adac23 sw a0,24(s11) + 1b9c: 00adac23 sw a0,24(s11) while (*p) - 1b5c: 001bc783 lbu a5,1(s7) - 1b60: 794a ld s2,176(sp) - 1b62: 79aa ld s3,168(sp) - 1b64: 6baa ld s7,136(sp) - 1b66: 6c0a ld s8,128(sp) - 1b68: e00795e3 bnez a5,1972 <_vscanf_core.constprop.0+0x2a> - 1b6c: b581 j 19ac <_vscanf_core.constprop.0+0x64> + 1ba0: 001bc783 lbu a5,1(s7) + 1ba4: 794a ld s2,176(sp) + 1ba6: 79aa ld s3,168(sp) + 1ba8: 6baa ld s7,136(sp) + 1baa: 6c0a ld s8,128(sp) + 1bac: e00795e3 bnez a5,19b6 <_vscanf_core.constprop.0+0x2a> + 1bb0: b581 j 19f0 <_vscanf_core.constprop.0+0x64> _skip_space(ctx); - 1b6e: 856e mv a0,s11 - 1b70: f8ea sd s10,112(sp) - 1b72: d63ff0ef jal 18d4 <_skip_space> + 1bb2: 856e mv a0,s11 + 1bb4: f8ea sd s10,112(sp) + 1bb6: d63ff0ef jal 1918 <_skip_space> if (ctx->ungotten >= 0) - 1b76: 018da503 lw a0,24(s11) - 1b7a: 24055063 bgez a0,1dba <_vscanf_core.constprop.0+0x472> - 1b7e: 856e mv a0,s11 - 1b80: d0fff0ef jal 188e <_in_char.part.0> + 1bba: 018da503 lw a0,24(s11) + 1bbe: 24055063 bgez a0,1dfe <_vscanf_core.constprop.0+0x472> + 1bc2: 856e mv a0,s11 + 1bc4: d0fff0ef jal 18d2 <_in_char.part.0> if (c == '-' || c == '+') - 1b84: fd55069b addiw a3,a0,-43 - 1b88: 9af5 andi a3,a3,-3 - 1b8a: 2681 sext.w a3,a3 + 1bc8: fd55069b addiw a3,a0,-43 + 1bcc: 9af5 andi a3,a3,-3 + 1bce: 2681 sext.w a3,a3 int i = 0, c = _in_char(ctx); - 1b8c: 4d01 li s10,0 + 1bd0: 4d01 li s10,0 if (c == '-' || c == '+') - 1b8e: 3e068863 beqz a3,1f7e <_vscanf_core.constprop.0+0x636> + 1bd2: 3e068863 beqz a3,1fc2 <_vscanf_core.constprop.0+0x636> int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 1b92: 07800693 li a3,120 - 1b96: 4641 li a2,16 - 1b98: 00dc0863 beq s8,a3,1ba8 <_vscanf_core.constprop.0+0x260> - 1b9c: 06900693 li a3,105 - 1ba0: 4629 li a2,10 - 1ba2: 00dc1363 bne s8,a3,1ba8 <_vscanf_core.constprop.0+0x260> - 1ba6: 4601 li a2,0 + 1bd6: 07800693 li a3,120 + 1bda: 4641 li a2,16 + 1bdc: 00dc0863 beq s8,a3,1bec <_vscanf_core.constprop.0+0x260> + 1be0: 06900693 li a3,105 + 1be4: 4629 li a2,10 + 1be6: 00dc1363 bne s8,a3,1bec <_vscanf_core.constprop.0+0x260> + 1bea: 4601 li a2,0 while (c != -1 && i < 63) - 1ba8: 56fd li a3,-1 - 1baa: 5cd50863 beq a0,a3,217a <_vscanf_core.constprop.0+0x832> - 1bae: fce6 sd s9,120(sp) - 1bb0: 02010893 addi a7,sp,32 - 1bb4: 01a88c33 add s8,a7,s10 + 1bec: 56fd li a3,-1 + 1bee: 5cd50863 beq a0,a3,21be <_vscanf_core.constprop.0+0x832> + 1bf2: fce6 sd s9,120(sp) + 1bf4: 02010893 addi a7,sp,32 + 1bf8: 01a88c33 add s8,a7,s10 int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1bb8: 4cc1 li s9,16 + 1bfc: 4cc1 li s9,16 int digit = (c >= '0' && c <= '9'); - 1bba: fd05069b addiw a3,a0,-48 - 1bbe: 0005031b sext.w t1,a0 - 1bc2: 00a6b593 sltiu a1,a3,10 + 1bfe: fd05069b addiw a3,a0,-48 + 1c02: 0005031b sext.w t1,a0 + 1c06: 00a6b593 sltiu a1,a3,10 int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1bc6: 27960a63 beq a2,s9,1e3a <_vscanf_core.constprop.0+0x4f2> - 1bca: 2a060d63 beqz a2,1e84 <_vscanf_core.constprop.0+0x53c> + 1c0a: 27960a63 beq a2,s9,1e7e <_vscanf_core.constprop.0+0x4f2> + 1c0e: 2a060d63 beqz a2,1ec8 <_vscanf_core.constprop.0+0x53c> int x = (c == 'x' || c == 'X'); - 1bce: 07800793 li a5,120 - 1bd2: 2ef50363 beq a0,a5,1eb8 <_vscanf_core.constprop.0+0x570> - 1bd6: fa850693 addi a3,a0,-88 - 1bda: 0016b693 seqz a3,a3 - 1bde: 4301 li t1,0 + 1c12: 07800793 li a5,120 + 1c16: 2ef50363 beq a0,a5,1efc <_vscanf_core.constprop.0+0x570> + 1c1a: fa850693 addi a3,a0,-88 + 1c1e: 0016b693 seqz a3,a3 + 1c22: 4301 li t1,0 if (width > 0 && i >= width) - 1be0: 01205463 blez s2,1be8 <_vscanf_core.constprop.0+0x2a0> - 1be4: 032d5a63 bge s10,s2,1c18 <_vscanf_core.constprop.0+0x2d0> + 1c24: 01205463 blez s2,1c2c <_vscanf_core.constprop.0+0x2a0> + 1c28: 032d5a63 bge s10,s2,1c5c <_vscanf_core.constprop.0+0x2d0> if (digit || hex || x) - 1be8: 0066e6b3 or a3,a3,t1 - 1bec: 8ecd or a3,a3,a1 - 1bee: c68d beqz a3,1c18 <_vscanf_core.constprop.0+0x2d0> + 1c2c: 0066e6b3 or a3,a3,t1 + 1c30: 8ecd or a3,a3,a1 + 1c32: c68d beqz a3,1c5c <_vscanf_core.constprop.0+0x2d0> num_buf[i++] = (char)c; - 1bf0: 00ac0023 sb a0,0(s8) + 1c34: 00ac0023 sb a0,0(s8) if (ctx->ungotten >= 0) - 1bf4: 018da503 lw a0,24(s11) + 1c38: 018da503 lw a0,24(s11) num_buf[i++] = (char)c; - 1bf8: 2d05 addiw s10,s10,1 + 1c3c: 2d05 addiw s10,s10,1 if (ctx->ungotten >= 0) - 1bfa: 22055c63 bgez a0,1e32 <_vscanf_core.constprop.0+0x4ea> - 1bfe: 856e mv a0,s11 - 1c00: e832 sd a2,16(sp) - 1c02: c8dff0ef jal 188e <_in_char.part.0> + 1c3e: 22055c63 bgez a0,1e76 <_vscanf_core.constprop.0+0x4ea> + 1c42: 856e mv a0,s11 + 1c44: e832 sd a2,16(sp) + 1c46: c8dff0ef jal 18d2 <_in_char.part.0> while (c != -1 && i < 63) - 1c06: 57fd li a5,-1 - 1c08: 6642 ld a2,16(sp) - 1c0a: 3cf50263 beq a0,a5,1fce <_vscanf_core.constprop.0+0x686> - 1c0e: 03f00693 li a3,63 - 1c12: 0c05 addi s8,s8,1 - 1c14: fadd13e3 bne s10,a3,1bba <_vscanf_core.constprop.0+0x272> + 1c4a: 57fd li a5,-1 + 1c4c: 6642 ld a2,16(sp) + 1c4e: 3cf50263 beq a0,a5,2012 <_vscanf_core.constprop.0+0x686> + 1c52: 03f00693 li a3,63 + 1c56: 0c05 addi s8,s8,1 + 1c58: fadd13e3 bne s10,a3,1bfe <_vscanf_core.constprop.0+0x272> num_buf[i] = '\0'; - 1c18: 040d0793 addi a5,s10,64 - 1c1c: 1018 addi a4,sp,32 - 1c1e: 97ba add a5,a5,a4 - 1c20: fc078023 sb zero,-64(a5) + 1c5c: 040d0793 addi a5,s10,64 + 1c60: 1018 addi a4,sp,32 + 1c62: 97ba add a5,a5,a4 + 1c64: fc078023 sb zero,-64(a5) ctx->ungotten = c; - 1c24: 00adac23 sw a0,24(s11) - 1c28: 7ce6 ld s9,120(sp) + 1c68: 00adac23 sw a0,24(s11) + 1c6c: 7ce6 ld s9,120(sp) if (i == 0) - 1c2a: 1e0d0663 beqz s10,1e16 <_vscanf_core.constprop.0+0x4ce> + 1c6e: 1e0d0663 beqz s10,1e5a <_vscanf_core.constprop.0+0x4ce> if (!suppress) - 1c2e: 36098363 beqz s3,1f94 <_vscanf_core.constprop.0+0x64c> + 1c72: 36098363 beqz s3,1fd8 <_vscanf_core.constprop.0+0x64c> while (*p) - 1c32: 001bc783 lbu a5,1(s7) + 1c76: 001bc783 lbu a5,1(s7) { - 1c36: 794a ld s2,176(sp) - 1c38: 79aa ld s3,168(sp) - 1c3a: 6baa ld s7,136(sp) - 1c3c: 6c0a ld s8,128(sp) - 1c3e: 7d46 ld s10,112(sp) + 1c7a: 794a ld s2,176(sp) + 1c7c: 79aa ld s3,168(sp) + 1c7e: 6baa ld s7,136(sp) + 1c80: 6c0a ld s8,128(sp) + 1c82: 7d46 ld s10,112(sp) while (*p) - 1c40: d20799e3 bnez a5,1972 <_vscanf_core.constprop.0+0x2a> - 1c44: b3a5 j 19ac <_vscanf_core.constprop.0+0x64> + 1c84: d20799e3 bnez a5,19b6 <_vscanf_core.constprop.0+0x2a> + 1c88: b3a5 j 19f0 <_vscanf_core.constprop.0+0x64> while (*p >= '0' && *p <= '9') - 1c46: 00244583 lbu a1,2(s0) + 1c8a: 00244583 lbu a1,2(s0) suppress = 1; - 1c4a: 4985 li s3,1 + 1c8e: 4985 li s3,1 p++; - 1c4c: 0409 addi s0,s0,2 - 1c4e: b3d9 j 1a14 <_vscanf_core.constprop.0+0xcc> + 1c90: 0409 addi s0,s0,2 + 1c92: b3d9 j 1a58 <_vscanf_core.constprop.0+0xcc> if (*p == 'l') - 1c50: 00144c03 lbu s8,1(s0) + 1c94: 00144c03 lbu s8,1(s0) len_mod = 1; - 1c54: 4785 li a5,1 - 1c56: ec3e sd a5,24(sp) + 1c98: 4785 li a5,1 + 1c9a: ec3e sd a5,24(sp) if (*p == 'l') - 1c58: e0bc17e3 bne s8,a1,1a66 <_vscanf_core.constprop.0+0x11e> + 1c9c: e0bc17e3 bne s8,a1,1aaa <_vscanf_core.constprop.0+0x11e> len_mod = 2; - 1c5c: 4789 li a5,2 + 1ca0: 4789 li a5,2 char spec = *p++; - 1c5e: 00244c03 lbu s8,2(s0) + 1ca2: 00244c03 lbu s8,2(s0) p++; - 1c62: 00240b93 addi s7,s0,2 + 1ca6: 00240b93 addi s7,s0,2 len_mod = 2; - 1c66: ec3e sd a5,24(sp) - 1c68: bbfd j 1a66 <_vscanf_core.constprop.0+0x11e> - 1c6a: 100c0763 beqz s8,1d78 <_vscanf_core.constprop.0+0x430> - 1c6e: fbbc079b addiw a5,s8,-69 - 1c72: 0ff7f793 zext.b a5,a5 - 1c76: 4689 li a3,2 - 1c78: eef6e2e3 bltu a3,a5,1b5c <_vscanf_core.constprop.0+0x214> + 1caa: ec3e sd a5,24(sp) + 1cac: bbfd j 1aaa <_vscanf_core.constprop.0+0x11e> + 1cae: 100c0763 beqz s8,1dbc <_vscanf_core.constprop.0+0x430> + 1cb2: fbbc079b addiw a5,s8,-69 + 1cb6: 0ff7f793 zext.b a5,a5 + 1cba: 4689 li a3,2 + 1cbc: eef6e2e3 bltu a3,a5,1ba0 <_vscanf_core.constprop.0+0x214> _skip_space(ctx); - 1c7c: 856e mv a0,s11 - 1c7e: f8ea sd s10,112(sp) - 1c80: c55ff0ef jal 18d4 <_skip_space> + 1cc0: 856e mv a0,s11 + 1cc2: f8ea sd s10,112(sp) + 1cc4: c55ff0ef jal 1918 <_skip_space> if (ctx->ungotten >= 0) - 1c84: 018da783 lw a5,24(s11) - 1c88: 1207dd63 bgez a5,1dc2 <_vscanf_core.constprop.0+0x47a> - 1c8c: 856e mv a0,s11 - 1c8e: c01ff0ef jal 188e <_in_char.part.0> + 1cc8: 018da783 lw a5,24(s11) + 1ccc: 1207dd63 bgez a5,1e06 <_vscanf_core.constprop.0+0x47a> + 1cd0: 856e mv a0,s11 + 1cd2: c01ff0ef jal 18d2 <_in_char.part.0> if (c == '-' || c == '+') - 1c92: fd55069b addiw a3,a0,-43 - 1c96: ffd6f613 andi a2,a3,-3 - 1c9a: 2601 sext.w a2,a2 - 1c9c: 87aa mv a5,a0 - 1c9e: 12060c63 beqz a2,1dd6 <_vscanf_core.constprop.0+0x48e> + 1cd6: fd55069b addiw a3,a0,-43 + 1cda: ffd6f613 andi a2,a3,-3 + 1cde: 2601 sext.w a2,a2 + 1ce0: 87aa mv a5,a0 + 1ce2: 12060c63 beqz a2,1e1a <_vscanf_core.constprop.0+0x48e> while (c != -1 && i < 63) - 1ca2: 567d li a2,-1 - 1ca4: 16c50963 beq a0,a2,1e16 <_vscanf_core.constprop.0+0x4ce> - 1ca8: fce6 sd s9,120(sp) + 1ce6: 567d li a2,-1 + 1ce8: 16c50963 beq a0,a2,1e5a <_vscanf_core.constprop.0+0x4ce> + 1cec: fce6 sd s9,120(sp) int i = 0, c = _in_char(ctx); - 1caa: 4d01 li s10,0 - 1cac: 80000937 lui s2,0x80000 - 1cb0: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff723f> - 1cb2: 0932 slli s2,s2,0xc - 1cb4: 80194913 xori s2,s2,-2047 - 1cb8: 093e slli s2,s2,0xf - 1cba: 02010813 addi a6,sp,32 - 1cbe: 01a80cb3 add s9,a6,s10 - 1cc2: 03a00c13 li s8,58 - 1cc6: 1935 addi s2,s2,-19 - 1cc8: a831 j 1ce4 <_vscanf_core.constprop.0+0x39c> - 1cca: bc5ff0ef jal 188e <_in_char.part.0> + 1cee: 4d01 li s10,0 + 1cf0: 80000937 lui s2,0x80000 + 1cf4: 197d addi s2,s2,-1 # ffffffff7fffffff <_ZSt4cerr+0xffffffff7fff71bf> + 1cf6: 0932 slli s2,s2,0xc + 1cf8: 80194913 xori s2,s2,-2047 + 1cfc: 093e slli s2,s2,0xf + 1cfe: 02010813 addi a6,sp,32 + 1d02: 01a80cb3 add s9,a6,s10 + 1d06: 03a00c13 li s8,58 + 1d0a: 1935 addi s2,s2,-19 + 1d0c: a831 j 1d28 <_vscanf_core.constprop.0+0x39c> + 1d0e: bc5ff0ef jal 18d2 <_in_char.part.0> while (c != -1 && i < 63) - 1cce: 577d li a4,-1 - 1cd0: 87aa mv a5,a0 - 1cd2: 2ee50563 beq a0,a4,1fbc <_vscanf_core.constprop.0+0x674> - 1cd6: 03f00713 li a4,63 - 1cda: 0c85 addi s9,s9,1 - 1cdc: 1eed0e63 beq s10,a4,1ed8 <_vscanf_core.constprop.0+0x590> - 1ce0: fd57869b addiw a3,a5,-43 + 1d12: 577d li a4,-1 + 1d14: 87aa mv a5,a0 + 1d16: 2ee50563 beq a0,a4,2000 <_vscanf_core.constprop.0+0x674> + 1d1a: 03f00713 li a4,63 + 1d1e: 0c85 addi s9,s9,1 + 1d20: 1eed0e63 beq s10,a4,1f1c <_vscanf_core.constprop.0+0x590> + 1d24: fd57869b addiw a3,a5,-43 int c = ctx->ungotten; - 1ce4: 00d95633 srl a2,s2,a3 - 1ce8: 856e mv a0,s11 - 1cea: 8a05 andi a2,a2,1 - 1cec: 1edc6663 bltu s8,a3,1ed8 <_vscanf_core.constprop.0+0x590> - 1cf0: 1e060463 beqz a2,1ed8 <_vscanf_core.constprop.0+0x590> + 1d28: 00d95633 srl a2,s2,a3 + 1d2c: 856e mv a0,s11 + 1d2e: 8a05 andi a2,a2,1 + 1d30: 1edc6663 bltu s8,a3,1f1c <_vscanf_core.constprop.0+0x590> + 1d34: 1e060463 beqz a2,1f1c <_vscanf_core.constprop.0+0x590> num_buf[i++] = (char)c; - 1cf4: 00fc8023 sb a5,0(s9) + 1d38: 00fc8023 sb a5,0(s9) if (ctx->ungotten >= 0) - 1cf8: 018da783 lw a5,24(s11) + 1d3c: 018da783 lw a5,24(s11) num_buf[i++] = (char)c; - 1cfc: 2d05 addiw s10,s10,1 + 1d40: 2d05 addiw s10,s10,1 if (ctx->ungotten >= 0) - 1cfe: fc07c6e3 bltz a5,1cca <_vscanf_core.constprop.0+0x382> + 1d42: fc07c6e3 bltz a5,1d0e <_vscanf_core.constprop.0+0x382> ctx->ungotten = -1; - 1d02: 577d li a4,-1 - 1d04: 00edac23 sw a4,24(s11) + 1d46: 577d li a4,-1 + 1d48: 00edac23 sw a4,24(s11) while (c != -1 && i < 63) - 1d08: b7f9 j 1cd6 <_vscanf_core.constprop.0+0x38e> + 1d4c: b7f9 j 1d1a <_vscanf_core.constprop.0+0x38e> if (*p == 'h') - 1d0a: 00144c03 lbu s8,1(s0) + 1d4e: 00144c03 lbu s8,1(s0) int len_mod = 0; - 1d0e: ec02 sd zero,24(sp) + 1d52: ec02 sd zero,24(sp) if (*p == 'h') - 1d10: d4bc1be3 bne s8,a1,1a66 <_vscanf_core.constprop.0+0x11e> + 1d54: d4bc1be3 bne s8,a1,1aaa <_vscanf_core.constprop.0+0x11e> char spec = *p++; - 1d14: 00244c03 lbu s8,2(s0) + 1d58: 00244c03 lbu s8,2(s0) p++; - 1d18: 00240b93 addi s7,s0,2 - 1d1c: b3a9 j 1a66 <_vscanf_core.constprop.0+0x11e> - 1d1e: fce6 sd s9,120(sp) - 1d20: f8ea sd s10,112(sp) + 1d5c: 00240b93 addi s7,s0,2 + 1d60: b3a9 j 1aaa <_vscanf_core.constprop.0+0x11e> + 1d62: fce6 sd s9,120(sp) + 1d64: f8ea sd s10,112(sp) int count = (width > 0) ? width : 1; - 1d22: 00090c1b sext.w s8,s2 - 1d26: 0d205a63 blez s2,1dfa <_vscanf_core.constprop.0+0x4b2> + 1d66: 00090c1b sext.w s8,s2 + 1d6a: 0d205a63 blez s2,1e3e <_vscanf_core.constprop.0+0x4b2> char *buf = suppress ? NULL : va_arg(ap, char *); - 1d2a: 4d01 li s10,0 - 1d2c: 06098d63 beqz s3,1da6 <_vscanf_core.constprop.0+0x45e> + 1d6e: 4d01 li s10,0 + 1d70: 06098d63 beqz s3,1dea <_vscanf_core.constprop.0+0x45e> for (int i = 0; i < count; i++) - 1d30: 9c6a add s8,s8,s10 + 1d74: 9c6a add s8,s8,s10 if (c == -1) - 1d32: 5cfd li s9,-1 + 1d76: 5cfd li s9,-1 if (ctx->ungotten >= 0) - 1d34: 018da783 lw a5,24(s11) + 1d78: 018da783 lw a5,24(s11) ctx->ungotten = -1; - 1d38: 856e mv a0,s11 + 1d7c: 856e mv a0,s11 if (ctx->ungotten >= 0) - 1d3a: 0207dc63 bgez a5,1d72 <_vscanf_core.constprop.0+0x42a> - 1d3e: b51ff0ef jal 188e <_in_char.part.0> - 1d42: 87aa mv a5,a0 + 1d7e: 0207dc63 bgez a5,1db6 <_vscanf_core.constprop.0+0x42a> + 1d82: b51ff0ef jal 18d2 <_in_char.part.0> + 1d86: 87aa mv a5,a0 if (c == -1) - 1d44: 0b950d63 beq a0,s9,1dfe <_vscanf_core.constprop.0+0x4b6> + 1d88: 0b950d63 beq a0,s9,1e42 <_vscanf_core.constprop.0+0x4b6> if (!suppress) - 1d48: 00099463 bnez s3,1d50 <_vscanf_core.constprop.0+0x408> + 1d8c: 00099463 bnez s3,1d94 <_vscanf_core.constprop.0+0x408> buf[i] = (char)c; - 1d4c: 00fd0023 sb a5,0(s10) + 1d90: 00fd0023 sb a5,0(s10) for (int i = 0; i < count; i++) - 1d50: 0d05 addi s10,s10,1 - 1d52: ffac11e3 bne s8,s10,1d34 <_vscanf_core.constprop.0+0x3ec> + 1d94: 0d05 addi s10,s10,1 + 1d96: ffac11e3 bne s8,s10,1d78 <_vscanf_core.constprop.0+0x3ec> while (*p) - 1d56: 001bc783 lbu a5,1(s7) + 1d9a: 001bc783 lbu a5,1(s7) if (!suppress) - 1d5a: 00099363 bnez s3,1d60 <_vscanf_core.constprop.0+0x418> + 1d9e: 00099363 bnez s3,1da4 <_vscanf_core.constprop.0+0x418> assigned++; - 1d5e: 2b05 addiw s6,s6,1 - 1d60: 794a ld s2,176(sp) - 1d62: 79aa ld s3,168(sp) - 1d64: 6baa ld s7,136(sp) - 1d66: 6c0a ld s8,128(sp) - 1d68: 7ce6 ld s9,120(sp) - 1d6a: 7d46 ld s10,112(sp) + 1da2: 2b05 addiw s6,s6,1 + 1da4: 794a ld s2,176(sp) + 1da6: 79aa ld s3,168(sp) + 1da8: 6baa ld s7,136(sp) + 1daa: 6c0a ld s8,128(sp) + 1dac: 7ce6 ld s9,120(sp) + 1dae: 7d46 ld s10,112(sp) while (*p) - 1d6c: c00793e3 bnez a5,1972 <_vscanf_core.constprop.0+0x2a> - 1d70: b935 j 19ac <_vscanf_core.constprop.0+0x64> + 1db0: c00793e3 bnez a5,19b6 <_vscanf_core.constprop.0+0x2a> + 1db4: b935 j 19f0 <_vscanf_core.constprop.0+0x64> ctx->ungotten = -1; - 1d72: 019dac23 sw s9,24(s11) + 1db6: 019dac23 sw s9,24(s11) if (c == -1) - 1d76: bfc9 j 1d48 <_vscanf_core.constprop.0+0x400> - 1d78: 640e ld s0,192(sp) - 1d7a: 74ea ld s1,184(sp) - 1d7c: 794a ld s2,176(sp) - 1d7e: 79aa ld s3,168(sp) - 1d80: 7a0a ld s4,160(sp) - 1d82: 6aea ld s5,152(sp) - 1d84: 6baa ld s7,136(sp) - 1d86: 6c0a ld s8,128(sp) - 1d88: 7da6 ld s11,104(sp) - 1d8a: b135 j 19b6 <_vscanf_core.constprop.0+0x6e> + 1dba: bfc9 j 1d8c <_vscanf_core.constprop.0+0x400> + 1dbc: 640e ld s0,192(sp) + 1dbe: 74ea ld s1,184(sp) + 1dc0: 794a ld s2,176(sp) + 1dc2: 79aa ld s3,168(sp) + 1dc4: 7a0a ld s4,160(sp) + 1dc6: 6aea ld s5,152(sp) + 1dc8: 6baa ld s7,136(sp) + 1dca: 6c0a ld s8,128(sp) + 1dcc: 7da6 ld s11,104(sp) + 1dce: b135 j 19fa <_vscanf_core.constprop.0+0x6e> int width = -1; - 1d8c: 597d li s2,-1 - 1d8e: b975 j 1a4a <_vscanf_core.constprop.0+0x102> + 1dd0: 597d li s2,-1 + 1dd2: b975 j 1a8e <_vscanf_core.constprop.0+0x102> if (!suppress) - 1d90: 3c099c63 bnez s3,2168 <_vscanf_core.constprop.0+0x820> + 1dd4: 3c099c63 bnez s3,21ac <_vscanf_core.constprop.0+0x820> buf[i] = '\0'; - 1d94: 67e2 ld a5,24(sp) - 1d96: 01a786b3 add a3,a5,s10 - 1d9a: 00068023 sb zero,0(a3) + 1dd8: 67e2 ld a5,24(sp) + 1dda: 01a786b3 add a3,a5,s10 + 1dde: 00068023 sb zero,0(a3) while (*p) - 1d9e: 001bc783 lbu a5,1(s7) + 1de2: 001bc783 lbu a5,1(s7) assigned++; - 1da2: 2b05 addiw s6,s6,1 - 1da4: bf75 j 1d60 <_vscanf_core.constprop.0+0x418> + 1de6: 2b05 addiw s6,s6,1 + 1de8: bf75 j 1da4 <_vscanf_core.constprop.0+0x418> char *buf = suppress ? NULL : va_arg(ap, char *); - 1da6: 67a2 ld a5,8(sp) - 1da8: 0007bd03 ld s10,0(a5) - 1dac: 07a1 addi a5,a5,8 - 1dae: e43e sd a5,8(sp) - 1db0: b741 j 1d30 <_vscanf_core.constprop.0+0x3e8> + 1dea: 67a2 ld a5,8(sp) + 1dec: 0007bd03 ld s10,0(a5) + 1df0: 07a1 addi a5,a5,8 + 1df2: e43e sd a5,8(sp) + 1df4: b741 j 1d74 <_vscanf_core.constprop.0+0x3e8> ctx->ungotten = -1; - 1db2: 56fd li a3,-1 - 1db4: 00ddac23 sw a3,24(s11) + 1df6: 56fd li a3,-1 + 1df8: 00ddac23 sw a3,24(s11) while (c != -1 && !isspace(c)) - 1db8: bb11 j 1acc <_vscanf_core.constprop.0+0x184> + 1dfc: bb11 j 1b10 <_vscanf_core.constprop.0+0x184> ctx->ungotten = -1; - 1dba: 56fd li a3,-1 - 1dbc: 00ddac23 sw a3,24(s11) + 1dfe: 56fd li a3,-1 + 1e00: 00ddac23 sw a3,24(s11) return c; - 1dc0: b3d1 j 1b84 <_vscanf_core.constprop.0+0x23c> + 1e04: b3d1 j 1bc8 <_vscanf_core.constprop.0+0x23c> if (c == '-' || c == '+') - 1dc2: fd57869b addiw a3,a5,-43 - 1dc6: ffd6f613 andi a2,a3,-3 + 1e06: fd57869b addiw a3,a5,-43 + 1e0a: ffd6f613 andi a2,a3,-3 ctx->ungotten = -1; - 1dca: 55fd li a1,-1 - 1dcc: 00bdac23 sw a1,24(s11) + 1e0e: 55fd li a1,-1 + 1e10: 00bdac23 sw a1,24(s11) if (c == '-' || c == '+') - 1dd0: 2601 sext.w a2,a2 - 1dd2: ec061be3 bnez a2,1ca8 <_vscanf_core.constprop.0+0x360> + 1e14: 2601 sext.w a2,a2 + 1e16: ec061be3 bnez a2,1cec <_vscanf_core.constprop.0+0x360> num_buf[i++] = (char)c; - 1dd6: 02f10023 sb a5,32(sp) + 1e1a: 02f10023 sb a5,32(sp) if (ctx->ungotten >= 0) - 1dda: 018da783 lw a5,24(s11) - 1dde: 2207da63 bgez a5,2012 <_vscanf_core.constprop.0+0x6ca> - 1de2: 856e mv a0,s11 - 1de4: aabff0ef jal 188e <_in_char.part.0> + 1e1e: 018da783 lw a5,24(s11) + 1e22: 2207da63 bgez a5,2056 <_vscanf_core.constprop.0+0x6ca> + 1e26: 856e mv a0,s11 + 1e28: aabff0ef jal 18d2 <_in_char.part.0> while (c != -1 && i < 63) - 1de8: 567d li a2,-1 - 1dea: 87aa mv a5,a0 + 1e2c: 567d li a2,-1 + 1e2e: 87aa mv a5,a0 num_buf[i++] = (char)c; - 1dec: 4d05 li s10,1 - 1dee: fd55069b addiw a3,a0,-43 + 1e30: 4d05 li s10,1 + 1e32: fd55069b addiw a3,a0,-43 while (c != -1 && i < 63) - 1df2: 3ac50163 beq a0,a2,2194 <_vscanf_core.constprop.0+0x84c> - 1df6: fce6 sd s9,120(sp) - 1df8: bd55 j 1cac <_vscanf_core.constprop.0+0x364> + 1e36: 3ac50163 beq a0,a2,21d8 <_vscanf_core.constprop.0+0x84c> + 1e3a: fce6 sd s9,120(sp) + 1e3c: bd55 j 1cf0 <_vscanf_core.constprop.0+0x364> int count = (width > 0) ? width : 1; - 1dfa: 4c05 li s8,1 - 1dfc: b73d j 1d2a <_vscanf_core.constprop.0+0x3e2> - 1dfe: 640e ld s0,192(sp) - 1e00: 74ea ld s1,184(sp) - 1e02: 794a ld s2,176(sp) - 1e04: 79aa ld s3,168(sp) - 1e06: 7a0a ld s4,160(sp) - 1e08: 6aea ld s5,152(sp) - 1e0a: 6baa ld s7,136(sp) - 1e0c: 6c0a ld s8,128(sp) - 1e0e: 7ce6 ld s9,120(sp) - 1e10: 7d46 ld s10,112(sp) - 1e12: 7da6 ld s11,104(sp) - 1e14: b64d j 19b6 <_vscanf_core.constprop.0+0x6e> - 1e16: 640e ld s0,192(sp) - 1e18: 74ea ld s1,184(sp) - 1e1a: 794a ld s2,176(sp) - 1e1c: 79aa ld s3,168(sp) - 1e1e: 7a0a ld s4,160(sp) - 1e20: 6aea ld s5,152(sp) - 1e22: 6baa ld s7,136(sp) - 1e24: 6c0a ld s8,128(sp) - 1e26: 7d46 ld s10,112(sp) - 1e28: 7da6 ld s11,104(sp) - 1e2a: b671 j 19b6 <_vscanf_core.constprop.0+0x6e> + 1e3e: 4c05 li s8,1 + 1e40: b73d j 1d6e <_vscanf_core.constprop.0+0x3e2> + 1e42: 640e ld s0,192(sp) + 1e44: 74ea ld s1,184(sp) + 1e46: 794a ld s2,176(sp) + 1e48: 79aa ld s3,168(sp) + 1e4a: 7a0a ld s4,160(sp) + 1e4c: 6aea ld s5,152(sp) + 1e4e: 6baa ld s7,136(sp) + 1e50: 6c0a ld s8,128(sp) + 1e52: 7ce6 ld s9,120(sp) + 1e54: 7d46 ld s10,112(sp) + 1e56: 7da6 ld s11,104(sp) + 1e58: b64d j 19fa <_vscanf_core.constprop.0+0x6e> + 1e5a: 640e ld s0,192(sp) + 1e5c: 74ea ld s1,184(sp) + 1e5e: 794a ld s2,176(sp) + 1e60: 79aa ld s3,168(sp) + 1e62: 7a0a ld s4,160(sp) + 1e64: 6aea ld s5,152(sp) + 1e66: 6baa ld s7,136(sp) + 1e68: 6c0a ld s8,128(sp) + 1e6a: 7d46 ld s10,112(sp) + 1e6c: 7da6 ld s11,104(sp) + 1e6e: b671 j 19fa <_vscanf_core.constprop.0+0x6e> ctx->ungotten = -1; - 1e2c: 018dac23 sw s8,24(s11) + 1e70: 018dac23 sw s8,24(s11) while (c != -1 && !isspace(c)) - 1e30: b9e5 j 1b28 <_vscanf_core.constprop.0+0x1e0> + 1e74: b9e5 j 1b6c <_vscanf_core.constprop.0+0x1e0> ctx->ungotten = -1; - 1e32: 57fd li a5,-1 - 1e34: 00fdac23 sw a5,24(s11) + 1e76: 57fd li a5,-1 + 1e78: 00fdac23 sw a5,24(s11) while (c != -1 && i < 63) - 1e38: bbd9 j 1c0e <_vscanf_core.constprop.0+0x2c6> + 1e7c: bbd9 j 1c52 <_vscanf_core.constprop.0+0x2c6> int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1e3a: f9f3069b addiw a3,t1,-97 - 1e3e: 4795 li a5,5 - 1e40: 06d7f263 bgeu a5,a3,1ea4 <_vscanf_core.constprop.0+0x55c> - 1e44: fbf3031b addiw t1,t1,-65 - 1e48: 4795 li a5,5 - 1e4a: 0467fd63 bgeu a5,t1,1ea4 <_vscanf_core.constprop.0+0x55c> + 1e7e: f9f3069b addiw a3,t1,-97 + 1e82: 4795 li a5,5 + 1e84: 06d7f263 bgeu a5,a3,1ee8 <_vscanf_core.constprop.0+0x55c> + 1e88: fbf3031b addiw t1,t1,-65 + 1e8c: 4795 li a5,5 + 1e8e: 0467fd63 bgeu a5,t1,1ee8 <_vscanf_core.constprop.0+0x55c> int x = (c == 'x' || c == 'X'); - 1e4e: 07800693 li a3,120 - 1e52: 18d50763 beq a0,a3,1fe0 <_vscanf_core.constprop.0+0x698> - 1e56: fa850693 addi a3,a0,-88 - 1e5a: 0016b693 seqz a3,a3 + 1e92: 07800693 li a3,120 + 1e96: 18d50763 beq a0,a3,2024 <_vscanf_core.constprop.0+0x698> + 1e9a: fa850693 addi a3,a0,-88 + 1e9e: 0016b693 seqz a3,a3 if (base == 0 && i == 1 && num_buf[0] == '0' && x) - 1e5e: 4301 li t1,0 - 1e60: 32061663 bnez a2,218c <_vscanf_core.constprop.0+0x844> - 1e64: 4785 li a5,1 - 1e66: 4601 li a2,0 - 1e68: d6fd1ce3 bne s10,a5,1be0 <_vscanf_core.constprop.0+0x298> - 1e6c: 02014e03 lbu t3,32(sp) - 1e70: 03000793 li a5,48 - 1e74: d6fe16e3 bne t3,a5,1be0 <_vscanf_core.constprop.0+0x298> - 1e78: d60684e3 beqz a3,1be0 <_vscanf_core.constprop.0+0x298> + 1ea2: 4301 li t1,0 + 1ea4: 32061663 bnez a2,21d0 <_vscanf_core.constprop.0+0x844> + 1ea8: 4785 li a5,1 + 1eaa: 4601 li a2,0 + 1eac: d6fd1ce3 bne s10,a5,1c24 <_vscanf_core.constprop.0+0x298> + 1eb0: 02014e03 lbu t3,32(sp) + 1eb4: 03000793 li a5,48 + 1eb8: d6fe16e3 bne t3,a5,1c24 <_vscanf_core.constprop.0+0x298> + 1ebc: d60684e3 beqz a3,1c24 <_vscanf_core.constprop.0+0x298> base = 16; - 1e7c: 4641 li a2,16 + 1ec0: 4641 li a2,16 if (width > 0 && i >= width) - 1e7e: d7a919e3 bne s2,s10,1bf0 <_vscanf_core.constprop.0+0x2a8> - 1e82: bb59 j 1c18 <_vscanf_core.constprop.0+0x2d0> + 1ec2: d7a919e3 bne s2,s10,1c34 <_vscanf_core.constprop.0+0x2a8> + 1ec6: bb59 j 1c5c <_vscanf_core.constprop.0+0x2d0> int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1e84: f9f3069b addiw a3,t1,-97 - 1e88: 4795 li a5,5 - 1e8a: 02d7f263 bgeu a5,a3,1eae <_vscanf_core.constprop.0+0x566> - 1e8e: fbf3031b addiw t1,t1,-65 - 1e92: 0467f063 bgeu a5,t1,1ed2 <_vscanf_core.constprop.0+0x58a> + 1ec8: f9f3069b addiw a3,t1,-97 + 1ecc: 4795 li a5,5 + 1ece: 02d7f263 bgeu a5,a3,1ef2 <_vscanf_core.constprop.0+0x566> + 1ed2: fbf3031b addiw t1,t1,-65 + 1ed6: 0467f063 bgeu a5,t1,1f16 <_vscanf_core.constprop.0+0x58a> int x = (c == 'x' || c == 'X'); - 1e96: 07800693 li a3,120 - 1e9a: fad51ee3 bne a0,a3,1e56 <_vscanf_core.constprop.0+0x50e> - 1e9e: 4301 li t1,0 - 1ea0: 4685 li a3,1 - 1ea2: b7c9 j 1e64 <_vscanf_core.constprop.0+0x51c> + 1eda: 07800693 li a3,120 + 1ede: fad51ee3 bne a0,a3,1e9a <_vscanf_core.constprop.0+0x50e> + 1ee2: 4301 li t1,0 + 1ee4: 4685 li a3,1 + 1ee6: b7c9 j 1ea8 <_vscanf_core.constprop.0+0x51c> int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1ea4: 4305 li t1,1 + 1ee8: 4305 li t1,1 int x = (c == 'x' || c == 'X'); - 1ea6: 4681 li a3,0 + 1eea: 4681 li a3,0 if (width > 0 && i >= width) - 1ea8: d3204ee3 bgtz s2,1be4 <_vscanf_core.constprop.0+0x29c> - 1eac: bb35 j 1be8 <_vscanf_core.constprop.0+0x2a0> + 1eec: d3204ee3 bgtz s2,1c28 <_vscanf_core.constprop.0+0x29c> + 1ef0: bb35 j 1c2c <_vscanf_core.constprop.0+0x2a0> int x = (c == 'x' || c == 'X'); - 1eae: 4681 li a3,0 + 1ef2: 4681 li a3,0 int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1eb0: 4305 li t1,1 + 1ef4: 4305 li t1,1 if (width > 0 && i >= width) - 1eb2: d32049e3 bgtz s2,1be4 <_vscanf_core.constprop.0+0x29c> - 1eb6: bb0d j 1be8 <_vscanf_core.constprop.0+0x2a0> - 1eb8: 4301 li t1,0 + 1ef6: d32049e3 bgtz s2,1c28 <_vscanf_core.constprop.0+0x29c> + 1efa: bb0d j 1c2c <_vscanf_core.constprop.0+0x2a0> + 1efc: 4301 li t1,0 int x = (c == 'x' || c == 'X'); - 1eba: 4685 li a3,1 + 1efe: 4685 li a3,1 if (width > 0 && i >= width) - 1ebc: d32044e3 bgtz s2,1be4 <_vscanf_core.constprop.0+0x29c> - 1ec0: bb05 j 1bf0 <_vscanf_core.constprop.0+0x2a8> + 1f00: d32044e3 bgtz s2,1c28 <_vscanf_core.constprop.0+0x29c> + 1f04: bb05 j 1c34 <_vscanf_core.constprop.0+0x2a8> if (!suppress) - 1ec2: c8099be3 bnez s3,1b58 <_vscanf_core.constprop.0+0x210> + 1f06: c8099be3 bnez s3,1b9c <_vscanf_core.constprop.0+0x210> buf[i] = '\0'; - 1ec6: 67e2 ld a5,24(sp) - 1ec8: 00078023 sb zero,0(a5) + 1f0a: 67e2 ld a5,24(sp) + 1f0c: 00078023 sb zero,0(a5) ctx->ungotten = c; - 1ecc: 00adac23 sw a0,24(s11) + 1f10: 00adac23 sw a0,24(s11) if (i > 0 && !suppress) - 1ed0: b171 j 1b5c <_vscanf_core.constprop.0+0x214> + 1f14: b171 j 1ba0 <_vscanf_core.constprop.0+0x214> int x = (c == 'x' || c == 'X'); - 1ed2: 4681 li a3,0 + 1f16: 4681 li a3,0 int hex = (base == 16 || base == 0) && ((c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); - 1ed4: 4305 li t1,1 - 1ed6: b779 j 1e64 <_vscanf_core.constprop.0+0x51c> + 1f18: 4305 li t1,1 + 1f1a: b779 j 1ea8 <_vscanf_core.constprop.0+0x51c> num_buf[i] = '\0'; - 1ed8: 040d0713 addi a4,s10,64 - 1edc: 1014 addi a3,sp,32 - 1ede: 96ba add a3,a3,a4 - 1ee0: fc068023 sb zero,-64(a3) + 1f1c: 040d0713 addi a4,s10,64 + 1f20: 1014 addi a3,sp,32 + 1f22: 96ba add a3,a3,a4 + 1f24: fc068023 sb zero,-64(a3) ctx->ungotten = c; - 1ee4: 00fdac23 sw a5,24(s11) + 1f28: 00fdac23 sw a5,24(s11) if (i == 0) - 1ee8: f00d0be3 beqz s10,1dfe <_vscanf_core.constprop.0+0x4b6> - 1eec: 7ce6 ld s9,120(sp) + 1f2c: f00d0be3 beqz s10,1e42 <_vscanf_core.constprop.0+0x4b6> + 1f30: 7ce6 ld s9,120(sp) if (!suppress) - 1eee: d40992e3 bnez s3,1c32 <_vscanf_core.constprop.0+0x2ea> + 1f32: d40992e3 bnez s3,1c76 <_vscanf_core.constprop.0+0x2ea> if (*str == '-') - 1ef2: 02014603 lbu a2,32(sp) - 1ef6: 02d00793 li a5,45 - 1efa: 1af60963 beq a2,a5,20ac <_vscanf_core.constprop.0+0x764> + 1f36: 02014603 lbu a2,32(sp) + 1f3a: 02d00793 li a5,45 + 1f3e: 1af60963 beq a2,a5,20f0 <_vscanf_core.constprop.0+0x764> else if (*str == '+') - 1efe: 02b00793 li a5,43 - 1f02: 20f60a63 beq a2,a5,2116 <_vscanf_core.constprop.0+0x7ce> - 1f06: 00005797 auipc a5,0x5 - 1f0a: 9927b587 fld fa1,-1646(a5) # 6898 - 1f0e: 101c addi a5,sp,32 + 1f42: 02b00793 li a5,43 + 1f46: 20f60a63 beq a2,a5,215a <_vscanf_core.constprop.0+0x7ce> + 1f4a: 00005797 auipc a5,0x5 + 1f4e: 9c67b587 fld fa1,-1594(a5) # 6910 + 1f52: 101c addi a5,sp,32 while (*str >= '0' && *str <= '9') - 1f10: fd06069b addiw a3,a2,-48 - 1f14: 0ff6f513 zext.b a0,a3 - 1f18: 45a5 li a1,9 - 1f1a: f20007d3 fmv.d.x fa5,zero - 1f1e: 02a5e463 bltu a1,a0,1f46 <_vscanf_core.constprop.0+0x5fe> - 1f22: 00005717 auipc a4,0x5 - 1f26: 97e73707 fld fa4,-1666(a4) # 68a0 - 1f2a: 4525 li a0,9 - 1f2c: 0017c603 lbu a2,1(a5) + 1f54: fd06069b addiw a3,a2,-48 + 1f58: 0ff6f513 zext.b a0,a3 + 1f5c: 45a5 li a1,9 + 1f5e: f20007d3 fmv.d.x fa5,zero + 1f62: 02a5e463 bltu a1,a0,1f8a <_vscanf_core.constprop.0+0x5fe> + 1f66: 00005717 auipc a4,0x5 + 1f6a: 9b273707 fld fa4,-1614(a4) # 6918 + 1f6e: 4525 li a0,9 + 1f70: 0017c603 lbu a2,1(a5) val = val * 10.0 + (*str - '0'); - 1f30: d20686d3 fcvt.d.w fa3,a3 + 1f74: d20686d3 fcvt.d.w fa3,a3 str++; - 1f34: 0785 addi a5,a5,1 + 1f78: 0785 addi a5,a5,1 while (*str >= '0' && *str <= '9') - 1f36: fd06069b addiw a3,a2,-48 - 1f3a: 0ff6f593 zext.b a1,a3 + 1f7a: fd06069b addiw a3,a2,-48 + 1f7e: 0ff6f593 zext.b a1,a3 val = val * 10.0 + (*str - '0'); - 1f3e: 6ae7f7c3 fmadd.d fa5,fa5,fa4,fa3 + 1f82: 6ae7f7c3 fmadd.d fa5,fa5,fa4,fa3 while (*str >= '0' && *str <= '9') - 1f42: feb575e3 bgeu a0,a1,1f2c <_vscanf_core.constprop.0+0x5e4> + 1f86: feb575e3 bgeu a0,a1,1f70 <_vscanf_core.constprop.0+0x5e4> if (*str == '.') - 1f46: 02e00693 li a3,46 - 1f4a: 16d60a63 beq a2,a3,20be <_vscanf_core.constprop.0+0x776> + 1f8a: 02e00693 li a3,46 + 1f8e: 16d60a63 beq a2,a3,2102 <_vscanf_core.constprop.0+0x776> if (*str == 'e' || *str == 'E') - 1f4e: 0007c683 lbu a3,0(a5) - 1f52: 0df6f693 andi a3,a3,223 - 1f56: 04500613 li a2,69 - 1f5a: 0cc68463 beq a3,a2,2022 <_vscanf_core.constprop.0+0x6da> + 1f92: 0007c683 lbu a3,0(a5) + 1f96: 0df6f693 andi a3,a3,223 + 1f9a: 04500613 li a2,69 + 1f9e: 0cc68463 beq a3,a2,2066 <_vscanf_core.constprop.0+0x6da> *va_arg(ap, double *) = val; - 1f5e: 6722 ld a4,8(sp) + 1fa2: 6722 ld a4,8(sp) if (len_mod == 1) - 1f60: 4685 li a3,1 + 1fa4: 4685 li a3,1 return sign * val; - 1f62: 12b7f7d3 fmul.d fa5,fa5,fa1 + 1fa6: 12b7f7d3 fmul.d fa5,fa5,fa1 *va_arg(ap, double *) = val; - 1f66: 631c ld a5,0(a4) + 1faa: 631c ld a5,0(a4) *va_arg(ap, int64 *) = val; - 1f68: 0721 addi a4,a4,8 - 1f6a: e43a sd a4,8(sp) + 1fac: 0721 addi a4,a4,8 + 1fae: e43a sd a4,8(sp) if (len_mod == 1) - 1f6c: 6762 ld a4,24(sp) - 1f6e: 18d70b63 beq a4,a3,2104 <_vscanf_core.constprop.0+0x7bc> + 1fb0: 6762 ld a4,24(sp) + 1fb2: 18d70b63 beq a4,a3,2148 <_vscanf_core.constprop.0+0x7bc> *va_arg(ap, float *) = (float)val; - 1f72: 4017f7d3 fcvt.s.d fa5,fa5 + 1fb6: 4017f7d3 fcvt.s.d fa5,fa5 assigned++; - 1f76: 2b05 addiw s6,s6,1 + 1fba: 2b05 addiw s6,s6,1 *va_arg(ap, float *) = (float)val; - 1f78: 00f7a027 fsw fa5,0(a5) - 1f7c: b95d j 1c32 <_vscanf_core.constprop.0+0x2ea> + 1fbc: 00f7a027 fsw fa5,0(a5) + 1fc0: b95d j 1c76 <_vscanf_core.constprop.0+0x2ea> num_buf[i++] = (char)c; - 1f7e: 02a10023 sb a0,32(sp) + 1fc2: 02a10023 sb a0,32(sp) if (ctx->ungotten >= 0) - 1f82: 018da503 lw a0,24(s11) - 1f86: 06055463 bgez a0,1fee <_vscanf_core.constprop.0+0x6a6> - 1f8a: 856e mv a0,s11 - 1f8c: 903ff0ef jal 188e <_in_char.part.0> + 1fc6: 018da503 lw a0,24(s11) + 1fca: 06055463 bgez a0,2032 <_vscanf_core.constprop.0+0x6a6> + 1fce: 856e mv a0,s11 + 1fd0: 903ff0ef jal 18d2 <_in_char.part.0> num_buf[i++] = (char)c; - 1f90: 4d05 li s10,1 - 1f92: b101 j 1b92 <_vscanf_core.constprop.0+0x24a> + 1fd4: 4d05 li s10,1 + 1fd6: b101 j 1bd6 <_vscanf_core.constprop.0+0x24a> int64 val = strtoll(num_buf, NULL, base); - 1f94: 4581 li a1,0 - 1f96: 1008 addi a0,sp,32 - 1f98: 67e030ef jal 5616 + 1fd8: 4581 li a1,0 + 1fda: 1008 addi a0,sp,32 + 1fdc: 696030ef jal 5672 *va_arg(ap, int64 *) = val; - 1f9c: 67a2 ld a5,8(sp) + 1fe0: 67a2 ld a5,8(sp) if (len_mod == 2) - 1f9e: 6762 ld a4,24(sp) - 1fa0: 4689 li a3,2 + 1fe2: 6762 ld a4,24(sp) + 1fe4: 4689 li a3,2 *va_arg(ap, int64 *) = val; - 1fa2: 07a1 addi a5,a5,8 + 1fe6: 07a1 addi a5,a5,8 if (len_mod == 2) - 1fa4: 16d70363 beq a4,a3,210a <_vscanf_core.constprop.0+0x7c2> + 1fe8: 16d70363 beq a4,a3,214e <_vscanf_core.constprop.0+0x7c2> *va_arg(ap, int64 *) = val; - 1fa8: 6722 ld a4,8(sp) + 1fec: 6722 ld a4,8(sp) else if (len_mod == 1) - 1faa: 4605 li a2,1 + 1fee: 4605 li a2,1 *va_arg(ap, int64 *) = val; - 1fac: 6314 ld a3,0(a4) + 1ff0: 6314 ld a3,0(a4) else if (len_mod == 1) - 1fae: 6762 ld a4,24(sp) - 1fb0: 16c70163 beq a4,a2,2112 <_vscanf_core.constprop.0+0x7ca> + 1ff2: 6762 ld a4,24(sp) + 1ff4: 16c70163 beq a4,a2,2156 <_vscanf_core.constprop.0+0x7ca> *va_arg(ap, int *) = (int)val; - 1fb4: c288 sw a0,0(a3) + 1ff8: c288 sw a0,0(a3) assigned++; - 1fb6: 2b05 addiw s6,s6,1 - 1fb8: e43e sd a5,8(sp) - 1fba: b9a5 j 1c32 <_vscanf_core.constprop.0+0x2ea> + 1ffa: 2b05 addiw s6,s6,1 + 1ffc: e43e sd a5,8(sp) + 1ffe: b9a5 j 1c76 <_vscanf_core.constprop.0+0x2ea> num_buf[i] = '\0'; - 1fbc: 040d0793 addi a5,s10,64 - 1fc0: 1018 addi a4,sp,32 - 1fc2: 00e785b3 add a1,a5,a4 - 1fc6: fc058023 sb zero,-64(a1) + 2000: 040d0793 addi a5,s10,64 + 2004: 1018 addi a4,sp,32 + 2006: 00e785b3 add a1,a5,a4 + 200a: fc058023 sb zero,-64(a1) if (i == 0) - 1fca: 7ce6 ld s9,120(sp) - 1fcc: b70d j 1eee <_vscanf_core.constprop.0+0x5a6> + 200e: 7ce6 ld s9,120(sp) + 2010: b70d j 1f32 <_vscanf_core.constprop.0+0x5a6> num_buf[i] = '\0'; - 1fce: 040d0793 addi a5,s10,64 - 1fd2: 1018 addi a4,sp,32 - 1fd4: 00e78833 add a6,a5,a4 - 1fd8: fc080023 sb zero,-64(a6) + 2012: 040d0793 addi a5,s10,64 + 2016: 1018 addi a4,sp,32 + 2018: 00e78833 add a6,a5,a4 + 201c: fc080023 sb zero,-64(a6) if (i == 0) - 1fdc: 7ce6 ld s9,120(sp) - 1fde: b981 j 1c2e <_vscanf_core.constprop.0+0x2e6> + 2020: 7ce6 ld s9,120(sp) + 2022: b981 j 1c72 <_vscanf_core.constprop.0+0x2e6> int x = (c == 'x' || c == 'X'); - 1fe0: 4301 li t1,0 - 1fe2: 4685 li a3,1 + 2024: 4301 li t1,0 + 2026: 4685 li a3,1 if (width > 0 && i >= width) - 1fe4: c12040e3 bgtz s2,1be4 <_vscanf_core.constprop.0+0x29c> - 1fe8: b101 j 1be8 <_vscanf_core.constprop.0+0x2a0> + 2028: c12040e3 bgtz s2,1c28 <_vscanf_core.constprop.0+0x29c> + 202c: b101 j 1c2c <_vscanf_core.constprop.0+0x2a0> int assigned = 0; - 1fea: 4b01 li s6,0 - 1fec: b2e9 j 19b6 <_vscanf_core.constprop.0+0x6e> + 202e: 4b01 li s6,0 + 2030: b2e9 j 19fa <_vscanf_core.constprop.0+0x6e> ctx->ungotten = -1; - 1fee: 56fd li a3,-1 - 1ff0: fce6 sd s9,120(sp) - 1ff2: 00ddac23 sw a3,24(s11) + 2032: 56fd li a3,-1 + 2034: fce6 sd s9,120(sp) + 2036: 00ddac23 sw a3,24(s11) int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 1ff6: 07800693 li a3,120 - 1ffa: 4641 li a2,16 + 203a: 07800693 li a3,120 + 203e: 4641 li a2,16 num_buf[i++] = (char)c; - 1ffc: 4d05 li s10,1 + 2040: 4d05 li s10,1 int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 1ffe: badc09e3 beq s8,a3,1bb0 <_vscanf_core.constprop.0+0x268> - 2002: 06900693 li a3,105 - 2006: 4629 li a2,10 + 2042: badc09e3 beq s8,a3,1bf4 <_vscanf_core.constprop.0+0x268> + 2046: 06900693 li a3,105 + 204a: 4629 li a2,10 num_buf[i++] = (char)c; - 2008: 4d05 li s10,1 + 204c: 4d05 li s10,1 int base = (spec == 'x') ? 16 : (spec == 'i' ? 0 : 10); - 200a: badc13e3 bne s8,a3,1bb0 <_vscanf_core.constprop.0+0x268> - 200e: 4601 li a2,0 - 2010: b645 j 1bb0 <_vscanf_core.constprop.0+0x268> + 204e: badc13e3 bne s8,a3,1bf4 <_vscanf_core.constprop.0+0x268> + 2052: 4601 li a2,0 + 2054: b645 j 1bf4 <_vscanf_core.constprop.0+0x268> ctx->ungotten = -1; - 2012: 56fd li a3,-1 - 2014: fce6 sd s9,120(sp) - 2016: 00ddac23 sw a3,24(s11) + 2056: 56fd li a3,-1 + 2058: fce6 sd s9,120(sp) + 205a: 00ddac23 sw a3,24(s11) num_buf[i++] = (char)c; - 201a: 4d05 li s10,1 - 201c: fd57869b addiw a3,a5,-43 - 2020: b171 j 1cac <_vscanf_core.constprop.0+0x364> + 205e: 4d05 li s10,1 + 2060: fd57869b addiw a3,a5,-43 + 2064: b171 j 1cf0 <_vscanf_core.constprop.0+0x364> if (*str == '-') - 2022: 0017c583 lbu a1,1(a5) - 2026: 02d00693 li a3,45 - 202a: 0ed58f63 beq a1,a3,2128 <_vscanf_core.constprop.0+0x7e0> + 2066: 0017c583 lbu a1,1(a5) + 206a: 02d00693 li a3,45 + 206e: 0ed58f63 beq a1,a3,216c <_vscanf_core.constprop.0+0x7e0> else if (*str == '+') - 202e: 02b00693 li a3,43 - 2032: 10d58e63 beq a1,a3,214e <_vscanf_core.constprop.0+0x806> + 2072: 02b00693 li a3,43 + 2076: 10d58e63 beq a1,a3,2192 <_vscanf_core.constprop.0+0x806> while (*str >= '0' && *str <= '9') - 2036: fd05861b addiw a2,a1,-48 - 203a: 0ff67513 zext.b a0,a2 - 203e: 45a5 li a1,9 + 207a: fd05861b addiw a2,a1,-48 + 207e: 0ff67513 zext.b a0,a2 + 2082: 45a5 li a1,9 str++; - 2040: 00178693 addi a3,a5,1 + 2084: 00178693 addi a3,a5,1 int esign = 1; - 2044: 4805 li a6,1 + 2088: 4805 li a6,1 while (*str >= '0' && *str <= '9') - 2046: 04a5ec63 bltu a1,a0,209e <_vscanf_core.constprop.0+0x756> - 204a: 4525 li a0,9 - 204c: 0016c583 lbu a1,1(a3) + 208a: 04a5ec63 bltu a1,a0,20e2 <_vscanf_core.constprop.0+0x756> + 208e: 4525 li a0,9 + 2090: 0016c583 lbu a1,1(a3) eval = eval * 10 + (*str - '0'); - 2050: 0029979b slliw a5,s3,0x2 - 2054: 013787bb addw a5,a5,s3 - 2058: 0017979b slliw a5,a5,0x1 - 205c: 00f609bb addw s3,a2,a5 + 2094: 0029979b slliw a5,s3,0x2 + 2098: 013787bb addw a5,a5,s3 + 209c: 0017979b slliw a5,a5,0x1 + 20a0: 00f609bb addw s3,a2,a5 while (*str >= '0' && *str <= '9') - 2060: fd05861b addiw a2,a1,-48 - 2064: 0ff67593 zext.b a1,a2 + 20a4: fd05861b addiw a2,a1,-48 + 20a8: 0ff67593 zext.b a1,a2 str++; - 2068: 0685 addi a3,a3,1 + 20ac: 0685 addi a3,a3,1 while (*str >= '0' && *str <= '9') - 206a: feb571e3 bgeu a0,a1,204c <_vscanf_core.constprop.0+0x704> + 20ae: feb571e3 bgeu a0,a1,2090 <_vscanf_core.constprop.0+0x704> while (eval--) - 206e: fff9879b addiw a5,s3,-1 - 2072: 12098463 beqz s3,219a <_vscanf_core.constprop.0+0x852> + 20b2: fff9879b addiw a5,s3,-1 + 20b6: 12098463 beqz s3,21de <_vscanf_core.constprop.0+0x852> double p = 1.0; - 2076: 00005717 auipc a4,0x5 - 207a: 82273687 fld fa3,-2014(a4) # 6898 - 207e: 00005717 auipc a4,0x5 - 2082: 82273707 fld fa4,-2014(a4) # 68a0 + 20ba: 00005717 auipc a4,0x5 + 20be: 85673687 fld fa3,-1962(a4) # 6910 + 20c2: 00005717 auipc a4,0x5 + 20c6: 85673707 fld fa4,-1962(a4) # 6918 while (eval--) - 2086: 56fd li a3,-1 - 2088: 37fd addiw a5,a5,-1 + 20ca: 56fd li a3,-1 + 20cc: 37fd addiw a5,a5,-1 p *= 10.0; - 208a: 12e6f6d3 fmul.d fa3,fa3,fa4 + 20ce: 12e6f6d3 fmul.d fa3,fa3,fa4 while (eval--) - 208e: fed79de3 bne a5,a3,2088 <_vscanf_core.constprop.0+0x740> + 20d2: fed79de3 bne a5,a3,20cc <_vscanf_core.constprop.0+0x740> if (esign == 1) - 2092: 4785 li a5,1 - 2094: 00f80963 beq a6,a5,20a6 <_vscanf_core.constprop.0+0x75e> + 20d6: 4785 li a5,1 + 20d8: 00f80963 beq a6,a5,20ea <_vscanf_core.constprop.0+0x75e> val /= p; - 2098: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 209c: b5c9 j 1f5e <_vscanf_core.constprop.0+0x616> + 20dc: 1ad7f7d3 fdiv.d fa5,fa5,fa3 + 20e0: b5c9 j 1fa2 <_vscanf_core.constprop.0+0x616> double p = 1.0; - 209e: 00004797 auipc a5,0x4 - 20a2: 7fa7b687 fld fa3,2042(a5) # 6898 + 20e2: 00005797 auipc a5,0x5 + 20e6: 82e7b687 fld fa3,-2002(a5) # 6910 val *= p; - 20a6: 12d7f7d3 fmul.d fa5,fa5,fa3 - 20aa: bd55 j 1f5e <_vscanf_core.constprop.0+0x616> + 20ea: 12d7f7d3 fmul.d fa5,fa5,fa3 + 20ee: bd55 j 1fa2 <_vscanf_core.constprop.0+0x616> while (*str >= '0' && *str <= '9') - 20ac: 00004797 auipc a5,0x4 - 20b0: 7e47b587 fld fa1,2020(a5) # 6890 - 20b4: 02114603 lbu a2,33(sp) + 20f0: 00005797 auipc a5,0x5 + 20f4: 8187b587 fld fa1,-2024(a5) # 6908 + 20f8: 02114603 lbu a2,33(sp) str++; - 20b8: 02110793 addi a5,sp,33 - 20bc: bd91 j 1f10 <_vscanf_core.constprop.0+0x5c8> + 20fc: 02110793 addi a5,sp,33 + 2100: bd91 j 1f54 <_vscanf_core.constprop.0+0x5c8> while (*str >= '0' && *str <= '9') - 20be: 0017c683 lbu a3,1(a5) - 20c2: 45a5 li a1,9 + 2102: 0017c683 lbu a3,1(a5) + 2106: 45a5 li a1,9 str++; - 20c4: 0785 addi a5,a5,1 + 2108: 0785 addi a5,a5,1 while (*str >= '0' && *str <= '9') - 20c6: fd06861b addiw a2,a3,-48 - 20ca: 0ff67513 zext.b a0,a2 - 20ce: e8a5e2e3 bltu a1,a0,1f52 <_vscanf_core.constprop.0+0x60a> + 210a: fd06861b addiw a2,a3,-48 + 210e: 0ff67513 zext.b a0,a2 + 2112: e8a5e2e3 bltu a1,a0,1f96 <_vscanf_core.constprop.0+0x60a> double div = 10.0; - 20d2: 00004717 auipc a4,0x4 - 20d6: 7ce73707 fld fa4,1998(a4) # 68a0 - 20da: 22e70653 fmv.d fa2,fa4 + 2116: 00005717 auipc a4,0x5 + 211a: 80273707 fld fa4,-2046(a4) # 6918 + 211e: 22e70653 fmv.d fa2,fa4 while (*str >= '0' && *str <= '9') - 20de: 4525 li a0,9 + 2122: 4525 li a0,9 val += (*str - '0') / div; - 20e0: d20606d3 fcvt.d.w fa3,a2 + 2124: d20606d3 fcvt.d.w fa3,a2 while (*str >= '0' && *str <= '9') - 20e4: 0017c683 lbu a3,1(a5) + 2128: 0017c683 lbu a3,1(a5) str++; - 20e8: 0785 addi a5,a5,1 + 212c: 0785 addi a5,a5,1 val += (*str - '0') / div; - 20ea: 1ac6f6d3 fdiv.d fa3,fa3,fa2 + 212e: 1ac6f6d3 fdiv.d fa3,fa3,fa2 while (*str >= '0' && *str <= '9') - 20ee: fd06861b addiw a2,a3,-48 - 20f2: 0ff67593 zext.b a1,a2 + 2132: fd06861b addiw a2,a3,-48 + 2136: 0ff67593 zext.b a1,a2 div *= 10.0; - 20f6: 12e67653 fmul.d fa2,fa2,fa4 + 213a: 12e67653 fmul.d fa2,fa2,fa4 val += (*str - '0') / div; - 20fa: 02d7f7d3 fadd.d fa5,fa5,fa3 + 213e: 02d7f7d3 fadd.d fa5,fa5,fa3 while (*str >= '0' && *str <= '9') - 20fe: feb571e3 bgeu a0,a1,20e0 <_vscanf_core.constprop.0+0x798> - 2102: bd81 j 1f52 <_vscanf_core.constprop.0+0x60a> + 2142: feb571e3 bgeu a0,a1,2124 <_vscanf_core.constprop.0+0x798> + 2146: bd81 j 1f96 <_vscanf_core.constprop.0+0x60a> *va_arg(ap, double *) = val; - 2104: a39c fsd fa5,0(a5) + 2148: a39c fsd fa5,0(a5) assigned++; - 2106: 2b05 addiw s6,s6,1 - 2108: b62d j 1c32 <_vscanf_core.constprop.0+0x2ea> + 214a: 2b05 addiw s6,s6,1 + 214c: b62d j 1c76 <_vscanf_core.constprop.0+0x2ea> *va_arg(ap, int64 *) = val; - 210a: 6722 ld a4,8(sp) - 210c: 6314 ld a3,0(a4) - 210e: e288 sd a0,0(a3) - 2110: b55d j 1fb6 <_vscanf_core.constprop.0+0x66e> + 214e: 6722 ld a4,8(sp) + 2150: 6314 ld a3,0(a4) + 2152: e288 sd a0,0(a3) + 2154: b55d j 1ffa <_vscanf_core.constprop.0+0x66e> *va_arg(ap, long *) = (long)val; - 2112: e288 sd a0,0(a3) - 2114: b54d j 1fb6 <_vscanf_core.constprop.0+0x66e> + 2156: e288 sd a0,0(a3) + 2158: b54d j 1ffa <_vscanf_core.constprop.0+0x66e> while (*str >= '0' && *str <= '9') - 2116: 00004797 auipc a5,0x4 - 211a: 7827b587 fld fa1,1922(a5) # 6898 - 211e: 02114603 lbu a2,33(sp) + 215a: 00004797 auipc a5,0x4 + 215e: 7b67b587 fld fa1,1974(a5) # 6910 + 2162: 02114603 lbu a2,33(sp) str++; - 2122: 02110793 addi a5,sp,33 - 2126: b3ed j 1f10 <_vscanf_core.constprop.0+0x5c8> + 2166: 02110793 addi a5,sp,33 + 216a: b3ed j 1f54 <_vscanf_core.constprop.0+0x5c8> while (*str >= '0' && *str <= '9') - 2128: 0027c583 lbu a1,2(a5) + 216c: 0027c583 lbu a1,2(a5) str++; - 212c: 00278693 addi a3,a5,2 + 2170: 00278693 addi a3,a5,2 while (*str >= '0' && *str <= '9') - 2130: 4525 li a0,9 - 2132: fd05861b addiw a2,a1,-48 - 2136: 0ff67793 zext.b a5,a2 + 2174: 4525 li a0,9 + 2176: fd05861b addiw a2,a1,-48 + 217a: 0ff67793 zext.b a5,a2 esign = -1; - 213a: 587d li a6,-1 + 217e: 587d li a6,-1 while (*str >= '0' && *str <= '9') - 213c: f0f577e3 bgeu a0,a5,204a <_vscanf_core.constprop.0+0x702> + 2180: f0f577e3 bgeu a0,a5,208e <_vscanf_core.constprop.0+0x702> double p = 1.0; - 2140: 00004797 auipc a5,0x4 - 2144: 7587b687 fld fa3,1880(a5) # 6898 + 2184: 00004797 auipc a5,0x4 + 2188: 78c7b687 fld fa3,1932(a5) # 6910 val /= p; - 2148: 1ad7f7d3 fdiv.d fa5,fa5,fa3 - 214c: bd09 j 1f5e <_vscanf_core.constprop.0+0x616> + 218c: 1ad7f7d3 fdiv.d fa5,fa5,fa3 + 2190: bd09 j 1fa2 <_vscanf_core.constprop.0+0x616> while (*str >= '0' && *str <= '9') - 214e: 0027c583 lbu a1,2(a5) + 2192: 0027c583 lbu a1,2(a5) str++; - 2152: 00278693 addi a3,a5,2 + 2196: 00278693 addi a3,a5,2 while (*str >= '0' && *str <= '9') - 2156: 4525 li a0,9 - 2158: fd05861b addiw a2,a1,-48 - 215c: 0ff67793 zext.b a5,a2 - 2160: f2f56fe3 bltu a0,a5,209e <_vscanf_core.constprop.0+0x756> + 219a: 4525 li a0,9 + 219c: fd05861b addiw a2,a1,-48 + 21a0: 0ff67793 zext.b a5,a2 + 21a4: f2f56fe3 bltu a0,a5,20e2 <_vscanf_core.constprop.0+0x756> int esign = 1; - 2164: 4805 li a6,1 - 2166: b5d5 j 204a <_vscanf_core.constprop.0+0x702> + 21a8: 4805 li a6,1 + 21aa: b5d5 j 208e <_vscanf_core.constprop.0+0x702> while (*p) - 2168: 001bc783 lbu a5,1(s7) - 216c: bed5 j 1d60 <_vscanf_core.constprop.0+0x418> + 21ac: 001bc783 lbu a5,1(s7) + 21b0: bed5 j 1da4 <_vscanf_core.constprop.0+0x418> if (!suppress) - 216e: 9e0997e3 bnez s3,1b5c <_vscanf_core.constprop.0+0x214> + 21b2: 9e0997e3 bnez s3,1ba0 <_vscanf_core.constprop.0+0x214> buf[i] = '\0'; - 2172: 67e2 ld a5,24(sp) - 2174: 00078023 sb zero,0(a5) - 2178: b2d5 j 1b5c <_vscanf_core.constprop.0+0x214> + 21b6: 67e2 ld a5,24(sp) + 21b8: 00078023 sb zero,0(a5) + 21bc: b2d5 j 1ba0 <_vscanf_core.constprop.0+0x214> num_buf[i] = '\0'; - 217a: 040d0793 addi a5,s10,64 - 217e: 1018 addi a4,sp,32 - 2180: 97ba add a5,a5,a4 - 2182: fc078023 sb zero,-64(a5) + 21be: 040d0793 addi a5,s10,64 + 21c2: 1018 addi a4,sp,32 + 21c4: 97ba add a5,a5,a4 + 21c6: fc078023 sb zero,-64(a5) if (i == 0) - 2186: aa0d14e3 bnez s10,1c2e <_vscanf_core.constprop.0+0x2e6> - 218a: b171 j 1e16 <_vscanf_core.constprop.0+0x4ce> - 218c: 4641 li a2,16 + 21ca: aa0d14e3 bnez s10,1c72 <_vscanf_core.constprop.0+0x2e6> + 21ce: b171 j 1e5a <_vscanf_core.constprop.0+0x4ce> + 21d0: 4641 li a2,16 if (width > 0 && i >= width) - 218e: a5204be3 bgtz s2,1be4 <_vscanf_core.constprop.0+0x29c> - 2192: bc99 j 1be8 <_vscanf_core.constprop.0+0x2a0> + 21d2: a5204be3 bgtz s2,1c28 <_vscanf_core.constprop.0+0x29c> + 21d6: bc99 j 1c2c <_vscanf_core.constprop.0+0x2a0> num_buf[i] = '\0'; - 2194: 020100a3 sb zero,33(sp) + 21d8: 020100a3 sb zero,33(sp) if (i == 0) - 2198: bb99 j 1eee <_vscanf_core.constprop.0+0x5a6> + 21dc: bb99 j 1f32 <_vscanf_core.constprop.0+0x5a6> double p = 1.0; - 219a: 00004797 auipc a5,0x4 - 219e: 6fe7b687 fld fa3,1790(a5) # 6898 - 21a2: bdc5 j 2092 <_vscanf_core.constprop.0+0x74a> + 21de: 00004797 auipc a5,0x4 + 21e2: 7327b687 fld fa3,1842(a5) # 6910 + 21e6: bdc5 j 20d6 <_vscanf_core.constprop.0+0x74a> buf[i] = '\0'; - 21a4: 67e2 ld a5,24(sp) - 21a6: 01a786b3 add a3,a5,s10 - 21aa: 00068023 sb zero,0(a3) + 21e8: 67e2 ld a5,24(sp) + 21ea: 01a786b3 add a3,a5,s10 + 21ee: 00068023 sb zero,0(a3) ctx->ungotten = c; - 21ae: 00adac23 sw a0,24(s11) + 21f2: 00adac23 sw a0,24(s11) while (*p) - 21b2: 001bc783 lbu a5,1(s7) - 21b6: b6f5 j 1da2 <_vscanf_core.constprop.0+0x45a> + 21f6: 001bc783 lbu a5,1(s7) + 21fa: b6f5 j 1de6 <_vscanf_core.constprop.0+0x45a> -00000000000021b8 <_out_char>: +00000000000021fc <_out_char>: { - 21b8: 7179 addi sp,sp,-48 - 21ba: ec26 sd s1,24(sp) + 21fc: 7179 addi sp,sp,-48 + 21fe: ec26 sd s1,24(sp) if (ctx->stream) - 21bc: 6d04 ld s1,24(a0) + 2200: 6d04 ld s1,24(a0) { - 21be: f022 sd s0,32(sp) - 21c0: f406 sd ra,40(sp) - 21c2: 842a mv s0,a0 - 21c4: 872e mv a4,a1 + 2202: f022 sd s0,32(sp) + 2204: f406 sd ra,40(sp) + 2206: 842a mv s0,a0 + 2208: 872e mv a4,a1 if (ctx->stream) - 21c6: c0a1 beqz s1,2206 <_out_char+0x4e> - 21c8: e84a sd s2,16(sp) + 220a: c0a1 beqz s1,224a <_out_char+0x4e> + 220c: e84a sd s2,16(sp) if (stream->buf_mode == 2) - 21ca: 41c4a903 lw s2,1052(s1) - 21ce: 4789 li a5,2 - 21d0: 04f90d63 beq s2,a5,222a <_out_char+0x72> + 220e: 41c4a903 lw s2,1052(s1) + 2212: 4789 li a5,2 + 2214: 04f90d63 beq s2,a5,226e <_out_char+0x72> stream->buffer[stream->buf_write_pos++] = (char)c; - 21d4: 4104a783 lw a5,1040(s1) + 2218: 4104a783 lw a5,1040(s1) if (stream->buf_write_pos >= BUFSIZ) - 21d8: 3ff00693 li a3,1023 + 221c: 3ff00693 li a3,1023 stream->buffer[stream->buf_write_pos++] = (char)c; - 21dc: 0017861b addiw a2,a5,1 - 21e0: 40c4a823 sw a2,1040(s1) - 21e4: 97a6 add a5,a5,s1 - 21e6: 00b78823 sb a1,16(a5) + 2220: 0017861b addiw a2,a5,1 + 2224: 40c4a823 sw a2,1040(s1) + 2228: 97a6 add a5,a5,s1 + 222a: 00b78823 sb a1,16(a5) if (stream->buf_write_pos >= BUFSIZ) - 21ea: 08c6c063 blt a3,a2,226a <_out_char+0xb2> + 222e: 08c6c063 blt a3,a2,22ae <_out_char+0xb2> else if (stream->buf_mode == 1 && c == '\n') - 21ee: 4785 li a5,1 - 21f0: 04f90a63 beq s2,a5,2244 <_out_char+0x8c> + 2232: 4785 li a5,1 + 2234: 04f90a63 beq s2,a5,2288 <_out_char+0x8c> ctx->written++; - 21f4: 681c ld a5,16(s0) - 21f6: 6942 ld s2,16(sp) + 2238: 681c ld a5,16(s0) + 223a: 6942 ld s2,16(sp) } - 21f8: 70a2 ld ra,40(sp) + 223c: 70a2 ld ra,40(sp) ctx->written++; - 21fa: 0785 addi a5,a5,1 - 21fc: e81c sd a5,16(s0) + 223e: 0785 addi a5,a5,1 + 2240: e81c sd a5,16(s0) } - 21fe: 7402 ld s0,32(sp) - 2200: 64e2 ld s1,24(sp) - 2202: 6145 addi sp,sp,48 - 2204: 8082 ret + 2242: 7402 ld s0,32(sp) + 2244: 64e2 ld s1,24(sp) + 2246: 6145 addi sp,sp,48 + 2248: 8082 ret if (ctx->limit > 0 && ctx->written < ctx->limit - 1) - 2206: 6514 ld a3,8(a0) - 2208: 691c ld a5,16(a0) - 220a: ca89 beqz a3,221c <_out_char+0x64> - 220c: 16fd addi a3,a3,-1 - 220e: 00d7f763 bgeu a5,a3,221c <_out_char+0x64> + 224a: 6514 ld a3,8(a0) + 224c: 691c ld a5,16(a0) + 224e: ca89 beqz a3,2260 <_out_char+0x64> + 2250: 16fd addi a3,a3,-1 + 2252: 00d7f763 bgeu a5,a3,2260 <_out_char+0x64> ctx->buf[ctx->written] = c; - 2212: 6114 ld a3,0(a0) - 2214: 97b6 add a5,a5,a3 - 2216: 00b78023 sb a1,0(a5) + 2256: 6114 ld a3,0(a0) + 2258: 97b6 add a5,a5,a3 + 225a: 00b78023 sb a1,0(a5) ctx->written++; - 221a: 691c ld a5,16(a0) - 221c: 0785 addi a5,a5,1 + 225e: 691c ld a5,16(a0) + 2260: 0785 addi a5,a5,1 } - 221e: 70a2 ld ra,40(sp) + 2262: 70a2 ld ra,40(sp) ctx->written++; - 2220: e81c sd a5,16(s0) + 2264: e81c sd a5,16(s0) } - 2222: 7402 ld s0,32(sp) - 2224: 64e2 ld s1,24(sp) - 2226: 6145 addi sp,sp,48 - 2228: 8082 ret + 2266: 7402 ld s0,32(sp) + 2268: 64e2 ld s1,24(sp) + 226a: 6145 addi sp,sp,48 + 226c: 8082 ret if (write(stream->fd, &ch, 1) != 1) - 222a: 4088 lw a0,0(s1) - 222c: 4605 li a2,1 - 222e: 00f10593 addi a1,sp,15 + 226e: 4088 lw a0,0(s1) + 2270: 4605 li a2,1 + 2272: 00f10593 addi a1,sp,15 char ch = (char)c; - 2232: 00e107a3 sb a4,15(sp) + 2276: 00e107a3 sb a4,15(sp) if (write(stream->fd, &ch, 1) != 1) - 2236: e93fe0ef jal 10c8 - 223a: 4785 li a5,1 - 223c: faf50ce3 beq a0,a5,21f4 <_out_char+0x3c> + 227a: e93fe0ef jal 110c + 227e: 4785 li a5,1 + 2280: faf50ce3 beq a0,a5,2238 <_out_char+0x3c> stream->error = 1; - 2240: c49c sw a5,8(s1) + 2284: c49c sw a5,8(s1) return EOF; - 2242: bf4d j 21f4 <_out_char+0x3c> + 2286: bf4d j 2238 <_out_char+0x3c> else if (stream->buf_mode == 1 && c == '\n') - 2244: 47a9 li a5,10 - 2246: faf597e3 bne a1,a5,21f4 <_out_char+0x3c> + 2288: 47a9 li a5,10 + 228a: faf597e3 bne a1,a5,2238 <_out_char+0x3c> if (stream->buf_write_pos > 0) - 224a: fac055e3 blez a2,21f4 <_out_char+0x3c> + 228e: fac055e3 blez a2,2238 <_out_char+0x3c> int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 224e: 4088 lw a0,0(s1) - 2250: 01048593 addi a1,s1,16 - 2254: e75fe0ef jal 10c8 + 2292: 4088 lw a0,0(s1) + 2294: 01048593 addi a1,s1,16 + 2298: e75fe0ef jal 110c if (ret < stream->buf_write_pos) - 2258: 4104a783 lw a5,1040(s1) - 225c: 02f55063 bge a0,a5,227c <_out_char+0xc4> + 229c: 4104a783 lw a5,1040(s1) + 22a0: 02f55063 bge a0,a5,22c0 <_out_char+0xc4> stream->error = 1; - 2260: 0124a423 sw s2,8(s1) + 22a4: 0124a423 sw s2,8(s1) stream->buf_write_pos = 0; - 2264: 4004a823 sw zero,1040(s1) + 22a8: 4004a823 sw zero,1040(s1) return EOF; - 2268: b771 j 21f4 <_out_char+0x3c> + 22ac: b771 j 2238 <_out_char+0x3c> int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 226a: 4088 lw a0,0(s1) - 226c: 01048593 addi a1,s1,16 - 2270: e59fe0ef jal 10c8 + 22ae: 4088 lw a0,0(s1) + 22b0: 01048593 addi a1,s1,16 + 22b4: e59fe0ef jal 110c if (ret < stream->buf_write_pos) - 2274: 4104a783 lw a5,1040(s1) - 2278: 00f54563 blt a0,a5,2282 <_out_char+0xca> + 22b8: 4104a783 lw a5,1040(s1) + 22bc: 00f54563 blt a0,a5,22c6 <_out_char+0xca> stream->buf_write_pos = 0; - 227c: 4004a823 sw zero,1040(s1) - 2280: bf95 j 21f4 <_out_char+0x3c> + 22c0: 4004a823 sw zero,1040(s1) + 22c4: bf95 j 2238 <_out_char+0x3c> stream->error = 1; - 2282: 4785 li a5,1 - 2284: c49c sw a5,8(s1) + 22c6: 4785 li a5,1 + 22c8: c49c sw a5,8(s1) stream->buf_write_pos = 0; - 2286: 4004a823 sw zero,1040(s1) + 22ca: 4004a823 sw zero,1040(s1) return EOF; - 228a: b7ad j 21f4 <_out_char+0x3c> + 22ce: b7ad j 2238 <_out_char+0x3c> -000000000000228c : +00000000000022d0 : "75767778798081828384858687888990919293949596979899" }; STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod) { stbsp__period = pperiod; - 228c: 00006797 auipc a5,0x6 - 2290: bdc78793 addi a5,a5,-1060 # 7e68 - 2294: 0cb78623 sb a1,204(a5) + 22d0: 00006797 auipc a5,0x6 + 22d4: c1878793 addi a5,a5,-1000 # 7ee8 + 22d8: 0cb78623 sb a1,204(a5) stbsp__comma = pcomma; - 2298: 0ca786a3 sb a0,205(a5) + 22dc: 0ca786a3 sb a0,205(a5) } - 229c: 8082 ret + 22e0: 8082 ret -000000000000229e : +00000000000022e2 : return (stbsp__uint32)(sn - s); } STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(vsprintfcb)(STBSP_SPRINTFCB *callback, void *user, char *buf, char const *fmt, va_list va) { - 229e: d1010113 addi sp,sp,-752 + 22e2: d1010113 addi sp,sp,-752 // Check if the next 4 bytes contain %(0x25) or end of string. // Using the 'hasless' trick: // https://graphics.stanford.edu/~seander/bithacks.html#HasLessInWord stbsp__uint32 v, c; v = *(stbsp__uint32 *)f; c = (~v) & 0x80808080; - 22a2: 808087b7 lui a5,0x80808 + 22e6: 808087b7 lui a5,0x80808 if (((v ^ 0x25252525) - 0x01010101) & c) - 22a6: 252523b7 lui t2,0x25252 - 22aa: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x25249765> + 22ea: 252523b7 lui t2,0x25252 + 22ee: 52538393 addi t2,t2,1317 # 25252525 <_ZSt4cerr+0x252496e5> { - 22ae: 29913c23 sd s9,664(sp) - 22b2: 29b13423 sd s11,648(sp) + 22f2: 29913c23 sd s9,664(sp) + 22f6: 29b13423 sd s11,648(sp) int tlen = 0; - 22b6: 4c81 li s9,0 + 22fa: 4c81 li s9,0 if (((v ^ 0x25252525) - 0x01010101) & c) - 22b8: feff0db7 lui s11,0xfeff0 + 22fc: feff0db7 lui s11,0xfeff0 c = (~v) & 0x80808080; - 22bc: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff807ff2c0> + 2300: 08078793 addi a5,a5,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff807ff240> { - 22c0: 2e813023 sd s0,736(sp) - 22c4: 2c913c23 sd s1,728(sp) - 22c8: 2d213823 sd s2,720(sp) - 22cc: 2d313423 sd s3,712(sp) - 22d0: 2b713423 sd s7,680(sp) - 22d4: 2b813023 sd s8,672(sp) - 22d8: 29a13823 sd s10,656(sp) - 22dc: 2e113423 sd ra,744(sp) - 22e0: 8d66 mv s10,s9 - 22e2: 8432 mv s0,a2 - 22e4: 8c9e mv s9,t2 - 22e6: 89aa mv s3,a0 - 22e8: e42e sd a1,8(sp) - 22ea: 84b6 mv s1,a3 - 22ec: 8bba mv s7,a4 - 22ee: fc02 sd zero,56(sp) + 2304: 2e813023 sd s0,736(sp) + 2308: 2c913c23 sd s1,728(sp) + 230c: 2d213823 sd s2,720(sp) + 2310: 2d313423 sd s3,712(sp) + 2314: 2b713423 sd s7,680(sp) + 2318: 2b813023 sd s8,672(sp) + 231c: 29a13823 sd s10,656(sp) + 2320: 2e113423 sd ra,744(sp) + 2324: 8d66 mv s10,s9 + 2326: 8432 mv s0,a2 + 2328: 8c9e mv s9,t2 + 232a: 89aa mv s3,a0 + 232c: e42e sd a1,8(sp) + 232e: 84b6 mv s1,a3 + 2330: 8bba mv s7,a4 + 2332: fc02 sd zero,56(sp) for (;;) { - 22f0: 8932 mv s2,a2 + 2334: 8932 mv s2,a2 if (((v ^ 0x25252525) - 0x01010101) & c) - 22f2: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe713f> + 2336: effd8d9b addiw s11,s11,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe70bf> goto schk1; if ((v - 0x01010101) & c) goto schk2; if (callback) if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 22f6: 20000c13 li s8,512 - 22fa: 83be mv t2,a5 + 233a: 20000c13 li s8,512 + 233e: 83be mv t2,a5 while (((stbsp__uintptr)f) & 3) { - 22fc: 0034f793 andi a5,s1,3 - 2300: c7a9 beqz a5,234a + 2340: 0034f793 andi a5,s1,3 + 2344: c7a9 beqz a5,238e if (f[0] == '%') - 2302: 0004c783 lbu a5,0(s1) - 2306: 02500713 li a4,37 - 230a: 0ee78263 beq a5,a4,23ee + 2346: 0004c783 lbu a5,0(s1) + 234a: 02500713 li a4,37 + 234e: 0ee78263 beq a5,a4,2432 if (f[0] == 0) - 230e: cbd9 beqz a5,23a4 + 2352: cbd9 beqz a5,23e8 stbsp__chk_cb_buf(1); - 2310: 02098663 beqz s3,233c - 2314: 4124063b subw a2,s0,s2 - 2318: 1fe00713 li a4,510 - 231c: 02c75063 bge a4,a2,233c - 2320: 65a2 ld a1,8(sp) - 2322: 854a mv a0,s2 - 2324: e81e sd t2,16(sp) - 2326: 00cd0d3b addw s10,s10,a2 - 232a: 9982 jalr s3 - 232c: 892a mv s2,a0 - 232e: e119 bnez a0,2334 - 2330: 0200106f j 3350 + 2354: 02098663 beqz s3,2380 + 2358: 4124063b subw a2,s0,s2 + 235c: 1fe00713 li a4,510 + 2360: 02c75063 bge a4,a2,2380 + 2364: 65a2 ld a1,8(sp) + 2366: 854a mv a0,s2 + 2368: e81e sd t2,16(sp) + 236a: 00cd0d3b addw s10,s10,a2 + 236e: 9982 jalr s3 + 2370: 892a mv s2,a0 + 2372: e119 bnez a0,2378 + 2374: 0200106f j 3394 *bf++ = f[0]; - 2334: 0004c783 lbu a5,0(s1) + 2378: 0004c783 lbu a5,0(s1) stbsp__chk_cb_buf(1); - 2338: 63c2 ld t2,16(sp) - 233a: 842a mv s0,a0 + 237c: 63c2 ld t2,16(sp) + 237e: 842a mv s0,a0 ++f; - 233c: 0485 addi s1,s1,1 + 2380: 0485 addi s1,s1,1 *bf++ = f[0]; - 233e: 00f40023 sb a5,0(s0) + 2382: 00f40023 sb a5,0(s0) while (((stbsp__uintptr)f) & 3) { - 2342: 0034f793 andi a5,s1,3 + 2386: 0034f793 andi a5,s1,3 *bf++ = f[0]; - 2346: 0405 addi s0,s0,1 + 238a: 0405 addi s0,s0,1 while (((stbsp__uintptr)f) & 3) { - 2348: ffcd bnez a5,2302 + 238c: ffcd bnez a5,2346 v = *(stbsp__uint32 *)f; - 234a: 4094 lw a3,0(s1) + 238e: 4094 lw a3,0(s1) c = (~v) & 0x80808080; - 234c: fff6c793 not a5,a3 + 2390: fff6c793 not a5,a3 if (((v ^ 0x25252525) - 0x01010101) & c) - 2350: 0196c733 xor a4,a3,s9 + 2394: 0196c733 xor a4,a3,s9 c = (~v) & 0x80808080; - 2354: 0077f7b3 and a5,a5,t2 + 2398: 0077f7b3 and a5,a5,t2 if (((v ^ 0x25252525) - 0x01010101) & c) - 2358: 01b7073b addw a4,a4,s11 - 235c: 8f7d and a4,a4,a5 - 235e: 2701 sext.w a4,a4 - 2360: f34d bnez a4,2302 + 239c: 01b7073b addw a4,a4,s11 + 23a0: 8f7d and a4,a4,a5 + 23a2: 2701 sext.w a4,a4 + 23a4: f34d bnez a4,2346 if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 2362: 460d li a2,3 - 2364: a805 j 2394 + 23a6: 460d li a2,3 + 23a8: a805 j 23d8 if (callback) - 2366: 00098863 beqz s3,2376 + 23aa: 00098863 beqz s3,23ba if ((STB_SPRINTF_MIN - (int)(bf - buf)) < 4) - 236a: 412407b3 sub a5,s0,s2 - 236e: 40fc07bb subw a5,s8,a5 - 2372: f8f658e3 bge a2,a5,2302 + 23ae: 412407b3 sub a5,s0,s2 + 23b2: 40fc07bb subw a5,s8,a5 + 23b6: f8f658e3 bge a2,a5,2346 bf[2] = f[2]; bf[3] = f[3]; } else #endif { *(stbsp__uint32 *)bf = v; - 2376: c014 sw a3,0(s0) + 23ba: c014 sw a3,0(s0) v = *(stbsp__uint32 *)f; - 2378: 40d4 lw a3,4(s1) + 23bc: 40d4 lw a3,4(s1) } bf += 4; - 237a: 0411 addi s0,s0,4 + 23be: 0411 addi s0,s0,4 f += 4; - 237c: 0491 addi s1,s1,4 + 23c0: 0491 addi s1,s1,4 c = (~v) & 0x80808080; - 237e: fff6c793 not a5,a3 + 23c2: fff6c793 not a5,a3 if (((v ^ 0x25252525) - 0x01010101) & c) - 2382: 0196c733 xor a4,a3,s9 + 23c6: 0196c733 xor a4,a3,s9 c = (~v) & 0x80808080; - 2386: 0077f7b3 and a5,a5,t2 + 23ca: 0077f7b3 and a5,a5,t2 if (((v ^ 0x25252525) - 0x01010101) & c) - 238a: 01b7073b addw a4,a4,s11 - 238e: 8f7d and a4,a4,a5 - 2390: 2701 sext.w a4,a4 - 2392: fb25 bnez a4,2302 + 23ce: 01b7073b addw a4,a4,s11 + 23d2: 8f7d and a4,a4,a5 + 23d4: 2701 sext.w a4,a4 + 23d6: fb25 bnez a4,2346 if ((v - 0x01010101) & c) - 2394: 01b6873b addw a4,a3,s11 - 2398: 8ff9 and a5,a5,a4 - 239a: 2781 sext.w a5,a5 - 239c: d7e9 beqz a5,2366 + 23d8: 01b6873b addw a4,a3,s11 + 23dc: 8ff9 and a5,a5,a4 + 23de: 2781 sext.w a5,a5 + 23e0: d7e9 beqz a5,23aa if (f[0] == 0) - 239e: 0004c783 lbu a5,0(s1) - 23a2: f7bd bnez a5,2310 + 23e2: 0004c783 lbu a5,0(s1) + 23e6: f7bd bnez a5,2354 endfmt: if (!callback) *bf = 0; else stbsp__flush_cb(); - 23a4: 8cea mv s9,s10 - 23a6: 412404bb subw s1,s0,s2 + 23e8: 8cea mv s9,s10 + 23ea: 412404bb subw s1,s0,s2 if (!callback) - 23aa: 70098563 beqz s3,2ab4 + 23ee: 70098563 beqz s3,2af8 stbsp__flush_cb(); - 23ae: 00905663 blez s1,23ba - 23b2: 65a2 ld a1,8(sp) - 23b4: 8626 mv a2,s1 - 23b6: 854a mv a0,s2 - 23b8: 9982 jalr s3 - 23ba: 009c8cbb addw s9,s9,s1 + 23f2: 00905663 blez s1,23fe + 23f6: 65a2 ld a1,8(sp) + 23f8: 8626 mv a2,s1 + 23fa: 854a mv a0,s2 + 23fc: 9982 jalr s3 + 23fe: 009c8cbb addw s9,s9,s1 done: return tlen + (int)(bf - buf); } - 23be: 2e813083 ld ra,744(sp) - 23c2: 2e013403 ld s0,736(sp) - 23c6: 2d813483 ld s1,728(sp) - 23ca: 2d013903 ld s2,720(sp) - 23ce: 2c813983 ld s3,712(sp) - 23d2: 2a813b83 ld s7,680(sp) - 23d6: 2a013c03 ld s8,672(sp) - 23da: 29013d03 ld s10,656(sp) - 23de: 28813d83 ld s11,648(sp) - 23e2: 8566 mv a0,s9 - 23e4: 29813c83 ld s9,664(sp) - 23e8: 2f010113 addi sp,sp,752 - 23ec: 8082 ret - 23ee: 2d413023 sd s4,704(sp) - 23f2: 2b513c23 sd s5,696(sp) - 23f6: 2b613823 sd s6,688(sp) + 2402: 2e813083 ld ra,744(sp) + 2406: 2e013403 ld s0,736(sp) + 240a: 2d813483 ld s1,728(sp) + 240e: 2d013903 ld s2,720(sp) + 2412: 2c813983 ld s3,712(sp) + 2416: 2a813b83 ld s7,680(sp) + 241a: 2a013c03 ld s8,672(sp) + 241e: 29013d03 ld s10,656(sp) + 2422: 28813d83 ld s11,648(sp) + 2426: 8566 mv a0,s9 + 2428: 29813c83 ld s9,664(sp) + 242c: 2f010113 addi sp,sp,752 + 2430: 8082 ret + 2432: 2d413023 sd s4,704(sp) + 2436: 2b513c23 sd s5,696(sp) + 243a: 2b613823 sd s6,688(sp) tz = 0; - 23fa: 00248693 addi a3,s1,2 + 243e: 00248693 addi a3,s1,2 fl = 0; - 23fe: 4e01 li t3,0 + 2442: 4e01 li t3,0 switch (f[0]) { - 2400: 03f00593 li a1,63 - 2404: 00004617 auipc a2,0x4 - 2408: db460613 addi a2,a2,-588 # 61b8 <_GLOBAL__sub_I__ZSt3cin+0x210> - 240c: fff6c783 lbu a5,-1(a3) - 2410: fff68493 addi s1,a3,-1 - 2414: fe07871b addiw a4,a5,-32 - 2418: 0ff77713 zext.b a4,a4 - 241c: 00e5ec63 bltu a1,a4,2434 - 2420: 070a slli a4,a4,0x2 - 2422: 9732 add a4,a4,a2 - 2424: 4318 lw a4,0(a4) - 2426: 9732 add a4,a4,a2 - 2428: 8702 jr a4 + 2444: 03f00593 li a1,63 + 2448: 00004617 auipc a2,0x4 + 244c: de860613 addi a2,a2,-536 # 6230 <_GLOBAL__sub_I__ZSt3cin+0x22c> + 2450: fff6c783 lbu a5,-1(a3) + 2454: fff68493 addi s1,a3,-1 + 2458: fe07871b addiw a4,a5,-32 + 245c: 0ff77713 zext.b a4,a4 + 2460: 00e5ec63 bltu a1,a4,2478 + 2464: 070a slli a4,a4,0x2 + 2466: 9732 add a4,a4,a2 + 2468: 4318 lw a4,0(a4) + 246a: 9732 add a4,a4,a2 + 246c: 8702 jr a4 if (f[0] == '*') { - 242a: 0014c783 lbu a5,1(s1) + 246e: 0014c783 lbu a5,1(s1) fl |= STBSP__LEADINGZERO; - 242e: 010e6e13 ori t3,t3,16 + 2472: 010e6e13 ori t3,t3,16 ++f; - 2432: 0485 addi s1,s1,1 + 2476: 0485 addi s1,s1,1 if (f[0] == '*') { - 2434: 02a00713 li a4,42 - 2438: 0ce79163 bne a5,a4,24fa + 2478: 02a00713 li a4,42 + 247c: 0ce79163 bne a5,a4,253e fw = va_arg(va, stbsp__uint32); - 243c: 000bab03 lw s6,0(s7) + 2480: 000bab03 lw s6,0(s7) while ((f[0] >= '0') && (f[0] <= '9')) { - 2440: 0014c783 lbu a5,1(s1) + 2484: 0014c783 lbu a5,1(s1) fw = va_arg(va, stbsp__uint32); - 2444: 0ba1 addi s7,s7,8 + 2488: 0ba1 addi s7,s7,8 ++f; - 2446: 0485 addi s1,s1,1 + 248a: 0485 addi s1,s1,1 if (f[0] == '.') { - 2448: 02e00713 li a4,46 + 248c: 02e00713 li a4,46 pr = -1; - 244c: 58fd li a7,-1 + 2490: 58fd li a7,-1 if (f[0] == '.') { - 244e: 0ee78663 beq a5,a4,253a + 2492: 0ee78663 beq a5,a4,257e switch (f[0]) { - 2452: 04900713 li a4,73 - 2456: 10e78263 beq a5,a4,255a - 245a: f987871b addiw a4,a5,-104 - 245e: 0ff77713 zext.b a4,a4 - 2462: 46c9 li a3,18 - 2464: 02e6e063 bltu a3,a4,2484 - 2468: 00004697 auipc a3,0x4 - 246c: e5068693 addi a3,a3,-432 # 62b8 <_GLOBAL__sub_I__ZSt3cin+0x310> - 2470: 070a slli a4,a4,0x2 - 2472: 9736 add a4,a4,a3 - 2474: 4318 lw a4,0(a4) - 2476: 9736 add a4,a4,a3 - 2478: 8702 jr a4 + 2496: 04900713 li a4,73 + 249a: 10e78263 beq a5,a4,259e + 249e: f987871b addiw a4,a5,-104 + 24a2: 0ff77713 zext.b a4,a4 + 24a6: 46c9 li a3,18 + 24a8: 02e6e063 bltu a3,a4,24c8 + 24ac: 00004697 auipc a3,0x4 + 24b0: e8468693 addi a3,a3,-380 # 6330 <_GLOBAL__sub_I__ZSt3cin+0x32c> + 24b4: 070a slli a4,a4,0x2 + 24b6: 9736 add a4,a4,a3 + 24b8: 4318 lw a4,0(a4) + 24ba: 9736 add a4,a4,a3 + 24bc: 8702 jr a4 if (f[0] == 'h') - 247a: 0014c783 lbu a5,1(s1) + 24be: 0014c783 lbu a5,1(s1) fl |= (sizeof(ptrdiff_t) == 8) ? STBSP__INTMAX : 0; - 247e: 020e6e13 ori t3,t3,32 + 24c2: 020e6e13 ori t3,t3,32 ++f; - 2482: 0485 addi s1,s1,1 + 24c6: 0485 addi s1,s1,1 switch (f[0]) { - 2484: fbf7871b addiw a4,a5,-65 - 2488: 0ff77713 zext.b a4,a4 - 248c: 03700693 li a3,55 - 2490: 0ee6ea63 bltu a3,a4,2584 - 2494: 00004697 auipc a3,0x4 - 2498: e7068693 addi a3,a3,-400 # 6304 <_GLOBAL__sub_I__ZSt3cin+0x35c> - 249c: 070a slli a4,a4,0x2 - 249e: 9736 add a4,a4,a3 - 24a0: 4318 lw a4,0(a4) - 24a2: 9736 add a4,a4,a3 - 24a4: 8702 jr a4 + 24c8: fbf7871b addiw a4,a5,-65 + 24cc: 0ff77713 zext.b a4,a4 + 24d0: 03700693 li a3,55 + 24d4: 0ee6ea63 bltu a3,a4,25c8 + 24d8: 00004697 auipc a3,0x4 + 24dc: ea468693 addi a3,a3,-348 # 637c <_GLOBAL__sub_I__ZSt3cin+0x378> + 24e0: 070a slli a4,a4,0x2 + 24e2: 9736 add a4,a4,a3 + 24e4: 4318 lw a4,0(a4) + 24e6: 9736 add a4,a4,a3 + 24e8: 8702 jr a4 fl |= STBSP__METRIC_NOSPACE; - 24a6: 400e6e13 ori t3,t3,1024 + 24ea: 400e6e13 ori t3,t3,1024 continue; - 24aa: 0685 addi a3,a3,1 - 24ac: b785 j 240c + 24ee: 0685 addi a3,a3,1 + 24f0: b785 j 2450 fl |= STBSP__LEFTJUST; - 24ae: 001e6e13 ori t3,t3,1 + 24f2: 001e6e13 ori t3,t3,1 continue; - 24b2: 0685 addi a3,a3,1 - 24b4: bfa1 j 240c + 24f6: 0685 addi a3,a3,1 + 24f8: bfa1 j 2450 fl |= STBSP__LEADINGPLUS; - 24b6: 002e6e13 ori t3,t3,2 + 24fa: 002e6e13 ori t3,t3,2 continue; - 24ba: 0685 addi a3,a3,1 - 24bc: bf81 j 240c + 24fe: 0685 addi a3,a3,1 + 2500: bf81 j 2450 fl |= STBSP__TRIPLET_COMMA; - 24be: 040e6e13 ori t3,t3,64 + 2502: 040e6e13 ori t3,t3,64 continue; - 24c2: 0685 addi a3,a3,1 - 24c4: b7a1 j 240c + 2506: 0685 addi a3,a3,1 + 2508: b7a1 j 2450 if (fl & STBSP__METRIC_SUFFIX) { - 24c6: 100e7793 andi a5,t3,256 - 24ca: 8772 mv a4,t3 - 24cc: 56078363 beqz a5,2a32 + 250a: 100e7793 andi a5,t3,256 + 250e: 8772 mv a4,t3 + 2510: 56078363 beqz a5,2a76 if (fl & STBSP__METRIC_1024) { - 24d0: 6785 lui a5,0x1 - 24d2: 034e1513 slli a0,t3,0x34 - 24d6: 80078793 addi a5,a5,-2048 # 800 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x334> - 24da: 5c055863 bgez a0,2aaa + 2514: 6785 lui a5,0x1 + 2516: 034e1513 slli a0,t3,0x34 + 251a: 80078793 addi a5,a5,-2048 # 800 <_ZN6Parser12parse_redirsEP7CommandPPcS2_+0x334> + 251e: 5c055863 bgez a0,2aee fl |= STBSP__METRIC_JEDEC; - 24de: 6785 lui a5,0x1 - 24e0: 8f5d or a4,a4,a5 - 24e2: 00070e1b sext.w t3,a4 - 24e6: 0685 addi a3,a3,1 - 24e8: b715 j 240c + 2522: 6785 lui a5,0x1 + 2524: 8f5d or a4,a4,a5 + 2526: 00070e1b sext.w t3,a4 + 252a: 0685 addi a3,a3,1 + 252c: b715 j 2450 fl |= STBSP__LEADING_0X; - 24ea: 008e6e13 ori t3,t3,8 + 252e: 008e6e13 ori t3,t3,8 continue; - 24ee: 0685 addi a3,a3,1 - 24f0: bf31 j 240c + 2532: 0685 addi a3,a3,1 + 2534: bf31 j 2450 fl |= STBSP__LEADINGSPACE; - 24f2: 004e6e13 ori t3,t3,4 + 2536: 004e6e13 ori t3,t3,4 continue; - 24f6: 0685 addi a3,a3,1 - 24f8: bf11 j 240c + 253a: 0685 addi a3,a3,1 + 253c: bf11 j 2450 while ((f[0] >= '0') && (f[0] <= '9')) { - 24fa: fd07871b addiw a4,a5,-48 # fd0 - 24fe: 0ff77713 zext.b a4,a4 - 2502: 4625 li a2,9 + 253e: fd07871b addiw a4,a5,-48 # fd0 + 2542: 0ff77713 zext.b a4,a4 + 2546: 4625 li a2,9 fw = 0; - 2504: 4b01 li s6,0 + 2548: 4b01 li s6,0 while ((f[0] >= '0') && (f[0] <= '9')) { - 2506: 46a5 li a3,9 - 2508: f4e660e3 bltu a2,a4,2448 + 254a: 46a5 li a3,9 + 254c: f4e660e3 bltu a2,a4,248c fw = fw * 10 + f[0] - '0'; - 250c: 002b171b slliw a4,s6,0x2 - 2510: 0167073b addw a4,a4,s6 - 2514: 0017171b slliw a4,a4,0x1 + 2550: 002b171b slliw a4,s6,0x2 + 2554: 0167073b addw a4,a4,s6 + 2558: 0017171b slliw a4,a4,0x1 f++; - 2518: 0485 addi s1,s1,1 + 255c: 0485 addi s1,s1,1 fw = fw * 10 + f[0] - '0'; - 251a: 9f3d addw a4,a4,a5 + 255e: 9f3d addw a4,a4,a5 while ((f[0] >= '0') && (f[0] <= '9')) { - 251c: 0004c783 lbu a5,0(s1) + 2560: 0004c783 lbu a5,0(s1) fw = fw * 10 + f[0] - '0'; - 2520: fd070b1b addiw s6,a4,-48 + 2564: fd070b1b addiw s6,a4,-48 while ((f[0] >= '0') && (f[0] <= '9')) { - 2524: fd07871b addiw a4,a5,-48 - 2528: 0ff77713 zext.b a4,a4 - 252c: fee6f0e3 bgeu a3,a4,250c + 2568: fd07871b addiw a4,a5,-48 + 256c: 0ff77713 zext.b a4,a4 + 2570: fee6f0e3 bgeu a3,a4,2550 if (f[0] == '.') { - 2530: 02e00713 li a4,46 + 2574: 02e00713 li a4,46 pr = -1; - 2534: 58fd li a7,-1 + 2578: 58fd li a7,-1 if (f[0] == '.') { - 2536: f0e79ee3 bne a5,a4,2452 + 257a: f0e79ee3 bne a5,a4,2496 if (f[0] == '*') { - 253a: 0014c783 lbu a5,1(s1) - 253e: 02a00713 li a4,42 - 2542: 52e79763 bne a5,a4,2a70 + 257e: 0014c783 lbu a5,1(s1) + 2582: 02a00713 li a4,42 + 2586: 52e79763 bne a5,a4,2ab4 while ((f[0] >= '0') && (f[0] <= '9')) { - 2546: 0024c783 lbu a5,2(s1) + 258a: 0024c783 lbu a5,2(s1) switch (f[0]) { - 254a: 04900713 li a4,73 + 258e: 04900713 li a4,73 pr = va_arg(va, stbsp__uint32); - 254e: 000ba883 lw a7,0(s7) + 2592: 000ba883 lw a7,0(s7) ++f; - 2552: 0489 addi s1,s1,2 + 2596: 0489 addi s1,s1,2 pr = va_arg(va, stbsp__uint32); - 2554: 0ba1 addi s7,s7,8 + 2598: 0ba1 addi s7,s7,8 switch (f[0]) { - 2556: f0e792e3 bne a5,a4,245a + 259a: f0e792e3 bne a5,a4,249e if ((f[1] == '6') && (f[2] == '4')) { - 255a: 0014c783 lbu a5,1(s1) - 255e: 03600713 li a4,54 - 2562: 00e79463 bne a5,a4,256a - 2566: 1e60106f j 374c + 259e: 0014c783 lbu a5,1(s1) + 25a2: 03600713 li a4,54 + 25a6: 00e79463 bne a5,a4,25ae + 25aa: 1e60106f j 3790 } else if ((f[1] == '3') && (f[2] == '2')) { - 256a: 03300713 li a4,51 - 256e: 6ae796e3 bne a5,a4,341a - 2572: 0024c683 lbu a3,2(s1) - 2576: 03200713 li a4,50 - 257a: 00e69463 bne a3,a4,2582 - 257e: 0ae0106f j 362c + 25ae: 03300713 li a4,51 + 25b2: 6ae796e3 bne a5,a4,345e + 25b6: 0024c683 lbu a3,2(s1) + 25ba: 03200713 li a4,50 + 25be: 00e69463 bne a3,a4,25c6 + 25c2: 0ae0106f j 3670 ++f; - 2582: 0485 addi s1,s1,1 + 25c6: 0485 addi s1,s1,1 *s = f[0]; - 2584: 26f10fa3 sb a5,639(sp) + 25c8: 26f10fa3 sb a5,639(sp) l = 1; - 2588: 4785 li a5,1 - 258a: d0be sw a5,96(sp) + 25cc: 4785 li a5,1 + 25ce: d0be sw a5,96(sp) lead[0] = 0; - 258c: 06010423 sb zero,104(sp) + 25d0: 06010423 sb zero,104(sp) tail[0] = 0; - 2590: 06010823 sb zero,112(sp) + 25d4: 06010823 sb zero,112(sp) dp = 0; - 2594: d282 sw zero,100(sp) - 2596: e0de sd s7,64(sp) - 2598: 4701 li a4,0 - 259a: 4301 li t1,0 - 259c: 4f81 li t6,0 - 259e: 4685 li a3,1 - 25a0: 4a01 li s4,0 + 25d8: d282 sw zero,100(sp) + 25da: e0de sd s7,64(sp) + 25dc: 4701 li a4,0 + 25de: 4301 li t1,0 + 25e0: 4f81 li t6,0 + 25e2: 4685 li a3,1 + 25e4: 4a01 li s4,0 cs = 0; - 25a2: 4281 li t0,0 + 25e6: 4281 li t0,0 s = num + STBSP__NUMSZ - 1; - 25a4: 27f10a93 addi s5,sp,639 + 25e8: 27f10a93 addi s5,sp,639 fw = fl = 0; - 25a8: 4e01 li t3,0 + 25ec: 4e01 li t3,0 tz = 0; - 25aa: 4881 li a7,0 + 25ee: 4881 li a7,0 if (fl & STBSP__LEADINGZERO) // if leading zeros, everything is in pr - 25ac: 010e7793 andi a5,t3,16 - 25b0: 40078ee3 beqz a5,31cc + 25f0: 010e7793 andi a5,t3,16 + 25f4: 40078ee3 beqz a5,3210 pr = (fw > pr) ? fw : pr; - 25b4: 87ba mv a5,a4 - 25b6: 00675363 bge a4,t1,25bc - 25ba: 879a mv a5,t1 - 25bc: 0007871b sext.w a4,a5 + 25f8: 87ba mv a5,a4 + 25fa: 00675363 bge a4,t1,2600 + 25fe: 879a mv a5,t1 + 2600: 0007871b sext.w a4,a5 fw = 0; - 25c0: 4301 li t1,0 + 2604: 4301 li t1,0 if (fw + pr) { - 25c2: 62070563 beqz a4,2bec + 2606: 62070563 beqz a4,2c30 sn = lead + 1; - 25c6: 06910793 addi a5,sp,105 - 25ca: fcbe sd a5,120(sp) + 260a: 06910793 addi a5,sp,105 + 260e: fcbe sd a5,120(sp) while (lead[0]) { - 25cc: 0a0a0863 beqz s4,267c + 2610: 0a0a0863 beqz s4,26c0 stbsp__cb_buf_clamp(i, lead[0]); - 25d0: f026 sd s1,32(sp) - 25d2: f436 sd a3,40(sp) - 25d4: 854a mv a0,s2 - 25d6: 86d2 mv a3,s4 - 25d8: 84ce mv s1,s3 + 2614: f026 sd s1,32(sp) + 2616: f436 sd a3,40(sp) + 2618: 854a mv a0,s2 + 261a: 86d2 mv a3,s4 + 261c: 84ce mv s1,s3 stbsp__chk_cb_buf(1); - 25da: 1fe00b93 li s7,510 + 261e: 1fe00b93 li s7,510 stbsp__cb_buf_clamp(i, lead[0]); - 25de: 89be mv s3,a5 - 25e0: 20000b13 li s6,512 - 25e4: 87a2 mv a5,s0 - 25e6: e846 sd a7,16(sp) - 25e8: 846a mv s0,s10 - 25ea: ec7e sd t6,24(sp) - 25ec: 8d6e mv s10,s11 - 25ee: f872 sd t3,48(sp) - 25f0: 8de6 mv s11,s9 - 25f2: 8a3a mv s4,a4 - 25f4: e496 sd t0,72(sp) - 25f6: 891a mv s2,t1 - 25f8: 8c9e mv s9,t2 - 25fa: 0006871b sext.w a4,a3 - 25fe: 2e0482e3 beqz s1,30e2 - 2602: 40a7863b subw a2,a5,a0 - 2606: 40cb083b subw a6,s6,a2 - 260a: 85c2 mv a1,a6 - 260c: 01075363 bge a4,a6,2612 - 2610: 85ba mv a1,a4 + 2622: 89be mv s3,a5 + 2624: 20000b13 li s6,512 + 2628: 87a2 mv a5,s0 + 262a: e846 sd a7,16(sp) + 262c: 846a mv s0,s10 + 262e: ec7e sd t6,24(sp) + 2630: 8d6e mv s10,s11 + 2632: f872 sd t3,48(sp) + 2634: 8de6 mv s11,s9 + 2636: 8a3a mv s4,a4 + 2638: e496 sd t0,72(sp) + 263a: 891a mv s2,t1 + 263c: 8c9e mv s9,t2 + 263e: 0006871b sext.w a4,a3 + 2642: 2e0482e3 beqz s1,3126 + 2646: 40a7863b subw a2,a5,a0 + 264a: 40cb083b subw a6,s6,a2 + 264e: 85c2 mv a1,a6 + 2650: 01075363 bge a4,a6,2656 + 2654: 85ba mv a1,a4 lead[0] -= (char)i; - 2612: 9e8d subw a3,a3,a1 + 2656: 9e8d subw a3,a3,a1 stbsp__cb_buf_clamp(i, lead[0]); - 2614: 0005871b sext.w a4,a1 + 2658: 0005871b sext.w a4,a1 lead[0] -= (char)i; - 2618: 06d10423 sb a3,104(sp) + 265c: 06d10423 sb a3,104(sp) while (i) { - 261c: c70d beqz a4,2646 - 261e: 7866 ld a6,120(sp) - 2620: 02071593 slli a1,a4,0x20 - 2624: 9181 srli a1,a1,0x20 - 2626: 00b78633 add a2,a5,a1 - 262a: 8742 mv a4,a6 + 2660: c70d beqz a4,268a + 2662: 7866 ld a6,120(sp) + 2664: 02071593 slli a1,a4,0x20 + 2668: 9181 srli a1,a1,0x20 + 266a: 00b78633 add a2,a5,a1 + 266e: 8742 mv a4,a6 *bf++ = *sn++; - 262c: 00074683 lbu a3,0(a4) - 2630: 0785 addi a5,a5,1 + 2670: 00074683 lbu a3,0(a4) + 2674: 0785 addi a5,a5,1 while (i) { - 2632: 0705 addi a4,a4,1 + 2676: 0705 addi a4,a4,1 *bf++ = *sn++; - 2634: fed78fa3 sb a3,-1(a5) + 2678: fed78fa3 sb a3,-1(a5) while (i) { - 2638: fec79ae3 bne a5,a2,262c - 263c: 982e add a6,a6,a1 - 263e: fcc2 sd a6,120(sp) + 267c: fec79ae3 bne a5,a2,2670 + 2680: 982e add a6,a6,a1 + 2682: fcc2 sd a6,120(sp) stbsp__chk_cb_buf(1); - 2640: c899 beqz s1,2656 - 2642: 40a7863b subw a2,a5,a0 - 2646: 00cbd863 bge s7,a2,2656 - 264a: 65a2 ld a1,8(sp) - 264c: 9c31 addw s0,s0,a2 - 264e: 9482 jalr s1 - 2650: 34050ee3 beqz a0,31ac - 2654: 87aa mv a5,a0 + 2684: c899 beqz s1,269a + 2686: 40a7863b subw a2,a5,a0 + 268a: 00cbd863 bge s7,a2,269a + 268e: 65a2 ld a1,8(sp) + 2690: 9c31 addw s0,s0,a2 + 2692: 9482 jalr s1 + 2694: 34050ee3 beqz a0,31f0 + 2698: 87aa mv a5,a0 while (lead[0]) { - 2656: 06814683 lbu a3,104(sp) - 265a: f2c5 bnez a3,25fa - 265c: 83e6 mv t2,s9 - 265e: 68c2 ld a7,16(sp) - 2660: 8cee mv s9,s11 - 2662: 6fe2 ld t6,24(sp) - 2664: 8dea mv s11,s10 - 2666: 76a2 ld a3,40(sp) - 2668: 8d22 mv s10,s0 - 266a: 7e42 ld t3,48(sp) - 266c: 843e mv s0,a5 - 266e: 62a6 ld t0,72(sp) - 2670: 87ce mv a5,s3 - 2672: 89a6 mv s3,s1 - 2674: 7482 ld s1,32(sp) - 2676: 834a mv t1,s2 - 2678: 8752 mv a4,s4 - 267a: 892a mv s2,a0 + 269a: 06814683 lbu a3,104(sp) + 269e: f2c5 bnez a3,263e + 26a0: 83e6 mv t2,s9 + 26a2: 68c2 ld a7,16(sp) + 26a4: 8cee mv s9,s11 + 26a6: 6fe2 ld t6,24(sp) + 26a8: 8dea mv s11,s10 + 26aa: 76a2 ld a3,40(sp) + 26ac: 8d22 mv s10,s0 + 26ae: 7e42 ld t3,48(sp) + 26b0: 843e mv s0,a5 + 26b2: 62a6 ld t0,72(sp) + 26b4: 87ce mv a5,s3 + 26b6: 89a6 mv s3,s1 + 26b8: 7482 ld s1,32(sp) + 26ba: 834a mv t1,s2 + 26bc: 8752 mv a4,s4 + 26be: 892a mv s2,a0 cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 267c: 040e7b13 andi s6,t3,64 + 26c0: 040e7b13 andi s6,t3,64 c = cs >> 24; - 2680: 0182d61b srliw a2,t0,0x18 - 2684: 0182db9b srliw s7,t0,0x18 + 26c4: 0182d61b srliw a2,t0,0x18 + 26c8: 0182db9b srliw s7,t0,0x18 cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 2688: 4a01 li s4,0 - 268a: 000b0e63 beqz s6,26a6 + 26cc: 4a01 li s4,0 + 26ce: 000b0e63 beqz s6,26ea cs &= 0xffffff; - 268e: 02829a13 slli s4,t0,0x28 - 2692: 028a5a13 srli s4,s4,0x28 + 26d2: 02829a13 slli s4,t0,0x28 + 26d6: 028a5a13 srli s4,s4,0x28 cs = (fl & STBSP__TRIPLET_COMMA) ? ((stbsp__uint32)(c - ((pr + cs) % (c + 1)))) : 0; - 2696: 00ea0a3b addw s4,s4,a4 - 269a: 0016059b addiw a1,a2,1 - 269e: 02ba7a3b remuw s4,s4,a1 - 26a2: 41460a3b subw s4,a2,s4 + 26da: 00ea0a3b addw s4,s4,a4 + 26de: 0016059b addiw a1,a2,1 + 26e2: 02ba7a3b remuw s4,s4,a1 + 26e6: 41460a3b subw s4,a2,s4 while (pr > 0) { - 26a6: 0ce05763 blez a4,2774 + 26ea: 0ce05763 blez a4,27b8 *(stbsp__uint32 *)bf = 0x30303030; - 26aa: 30303837 lui a6,0x30303 - 26ae: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fa270> - 26b2: f026 sd s1,32(sp) - 26b4: 854a mv a0,s2 - 26b6: 84da mv s1,s6 - 26b8: 895e mv s2,s7 - 26ba: e4d6 sd s5,72(sp) - 26bc: 8b4e mv s6,s3 - 26be: 8aea mv s5,s10 + 26ee: 30303837 lui a6,0x30303 + 26f2: 03080813 addi a6,a6,48 # 30303030 <_ZSt4cerr+0x302fa1f0> + 26f6: f026 sd s1,32(sp) + 26f8: 854a mv a0,s2 + 26fa: 84da mv s1,s6 + 26fc: 895e mv s2,s7 + 26fe: e4d6 sd s5,72(sp) + 2700: 8b4e mv s6,s3 + 2702: 8aea mv s5,s10 stbsp__chk_cb_buf(1); - 26c0: 1fe00293 li t0,510 - 26c4: 8d6e mv s10,s11 + 2704: 1fe00293 li t0,510 + 2708: 8d6e mv s10,s11 *bf++ = stbsp__comma; - 26c6: 00005f17 auipc t5,0x5 - 26ca: 7a2f0f13 addi t5,t5,1954 # 7e68 - 26ce: 8de6 mv s11,s9 + 270a: 00005f17 auipc t5,0x5 + 270e: 7def0f13 addi t5,t5,2014 # 7ee8 + 2712: 8de6 mv s11,s9 *bf++ = '0'; - 26d0: 03000e93 li t4,48 - 26d4: e846 sd a7,16(sp) - 26d6: ec7e sd t6,24(sp) - 26d8: f436 sd a3,40(sp) - 26da: f872 sd t3,48(sp) - 26dc: e89a sd t1,80(sp) - 26de: 89ba mv s3,a4 - 26e0: ecbe sd a5,88(sp) - 26e2: 8bc2 mv s7,a6 - 26e4: 8c9e mv s9,t2 + 2714: 03000e93 li t4,48 + 2718: e846 sd a7,16(sp) + 271a: ec7e sd t6,24(sp) + 271c: f436 sd a3,40(sp) + 271e: f872 sd t3,48(sp) + 2720: e89a sd t1,80(sp) + 2722: 89ba mv s3,a4 + 2724: ecbe sd a5,88(sp) + 2726: 8bc2 mv s7,a6 + 2728: 8c9e mv s9,t2 stbsp__cb_buf_clamp(i, pr); - 26e6: 240b0ee3 beqz s6,3142 - 26ea: 40a407b3 sub a5,s0,a0 - 26ee: 40fc063b subw a2,s8,a5 - 26f2: 87b2 mv a5,a2 - 26f4: 00c9d363 bge s3,a2,26fa - 26f8: 87ce mv a5,s3 - 26fa: 0007859b sext.w a1,a5 + 272a: 240b0ee3 beqz s6,3186 + 272e: 40a407b3 sub a5,s0,a0 + 2732: 40fc063b subw a2,s8,a5 + 2736: 87b2 mv a5,a2 + 2738: 00c9d363 bge s3,a2,273e + 273c: 87ce mv a5,s3 + 273e: 0007859b sext.w a1,a5 pr -= i; - 26fe: 40f989bb subw s3,s3,a5 + 2742: 40f989bb subw s3,s3,a5 if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 2702: 32048c63 beqz s1,2a3a + 2746: 32048c63 beqz s1,2a7e while (i) { - 2706: 34058a63 beqz a1,2a5a - 270a: 1582 slli a1,a1,0x20 + 274a: 34058a63 beqz a1,2a9e + 274e: 1582 slli a1,a1,0x20 *bf++ = stbsp__comma; - 270c: 0cdf4603 lbu a2,205(t5) - 2710: 9181 srli a1,a1,0x20 - 2712: 95a2 add a1,a1,s0 - 2714: 0405 addi s0,s0,1 + 2750: 0cdf4603 lbu a2,205(t5) + 2754: 9181 srli a1,a1,0x20 + 2756: 95a2 add a1,a1,s0 + 2758: 0405 addi s0,s0,1 if ((fl & STBSP__TRIPLET_COMMA) && (cs++ == c)) { - 2716: c481 beqz s1,271e - 2718: 1d4901e3 beq s2,s4,30da - 271c: 2a05 addiw s4,s4,1 + 275a: c481 beqz s1,2762 + 275c: 1d4901e3 beq s2,s4,311e + 2760: 2a05 addiw s4,s4,1 *bf++ = '0'; - 271e: 03000793 li a5,48 - 2722: fef40fa3 sb a5,-1(s0) + 2762: 03000793 li a5,48 + 2766: fef40fa3 sb a5,-1(s0) while (i) { - 2726: fe8597e3 bne a1,s0,2714 + 276a: fe8597e3 bne a1,s0,2758 stbsp__chk_cb_buf(1); - 272a: 320b0b63 beqz s6,2a60 - 272e: 40a5863b subw a2,a1,a0 - 2732: 32c2d763 bge t0,a2,2a60 - 2736: 65a2 ld a1,8(sp) - 2738: 01560abb addw s5,a2,s5 - 273c: 9b02 jalr s6 - 273e: 3a050ce3 beqz a0,32f6 - 2742: 842a mv s0,a0 - 2744: 1fe00293 li t0,510 - 2748: 00005f17 auipc t5,0x5 - 274c: 720f0f13 addi t5,t5,1824 # 7e68 - 2750: 03000e93 li t4,48 + 276e: 320b0b63 beqz s6,2aa4 + 2772: 40a5863b subw a2,a1,a0 + 2776: 32c2d763 bge t0,a2,2aa4 + 277a: 65a2 ld a1,8(sp) + 277c: 01560abb addw s5,a2,s5 + 2780: 9b02 jalr s6 + 2782: 3a050ce3 beqz a0,333a + 2786: 842a mv s0,a0 + 2788: 1fe00293 li t0,510 + 278c: 00005f17 auipc t5,0x5 + 2790: 75cf0f13 addi t5,t5,1884 # 7ee8 + 2794: 03000e93 li t4,48 while (pr > 0) { - 2754: f93049e3 bgtz s3,26e6 + 2798: f93049e3 bgtz s3,272a while (lead[0]) { - 2758: 83e6 mv t2,s9 - 275a: 68c2 ld a7,16(sp) - 275c: 8cee mv s9,s11 - 275e: 6fe2 ld t6,24(sp) - 2760: 8dea mv s11,s10 - 2762: 7482 ld s1,32(sp) - 2764: 8d56 mv s10,s5 - 2766: 76a2 ld a3,40(sp) - 2768: 7e42 ld t3,48(sp) - 276a: 6346 ld t1,80(sp) - 276c: 67e6 ld a5,88(sp) - 276e: 6aa6 ld s5,72(sp) - 2770: 892a mv s2,a0 - 2772: 89da mv s3,s6 - 2774: 06814a03 lbu s4,104(sp) + 279c: 83e6 mv t2,s9 + 279e: 68c2 ld a7,16(sp) + 27a0: 8cee mv s9,s11 + 27a2: 6fe2 ld t6,24(sp) + 27a4: 8dea mv s11,s10 + 27a6: 7482 ld s1,32(sp) + 27a8: 8d56 mv s10,s5 + 27aa: 76a2 ld a3,40(sp) + 27ac: 7e42 ld t3,48(sp) + 27ae: 6346 ld t1,80(sp) + 27b0: 67e6 ld a5,88(sp) + 27b2: 6aa6 ld s5,72(sp) + 27b4: 892a mv s2,a0 + 27b6: 89da mv s3,s6 + 27b8: 06814a03 lbu s4,104(sp) sn = lead + 1; - 2778: fcbe sd a5,120(sp) + 27bc: fcbe sd a5,120(sp) while (lead[0]) { - 277a: 0a0a0263 beqz s4,281e + 27be: 0a0a0263 beqz s4,2862 stbsp__cb_buf_clamp(i, lead[0]); - 277e: ec26 sd s1,24(sp) - 2780: f036 sd a3,32(sp) - 2782: 854a mv a0,s2 - 2784: 86d2 mv a3,s4 - 2786: 84ce mv s1,s3 - 2788: 87a2 mv a5,s0 + 27c2: ec26 sd s1,24(sp) + 27c4: f036 sd a3,32(sp) + 27c6: 854a mv a0,s2 + 27c8: 86d2 mv a3,s4 + 27ca: 84ce mv s1,s3 + 27cc: 87a2 mv a5,s0 stbsp__chk_cb_buf(1); - 278a: 1fe00b93 li s7,510 + 27ce: 1fe00b93 li s7,510 stbsp__cb_buf_clamp(i, lead[0]); - 278e: 846a mv s0,s10 - 2790: 20000b13 li s6,512 - 2794: 8d6e mv s10,s11 - 2796: e846 sd a7,16(sp) - 2798: 8de6 mv s11,s9 - 279a: 8a7e mv s4,t6 - 279c: 8972 mv s2,t3 - 279e: 899a mv s3,t1 - 27a0: 8c9e mv s9,t2 - 27a2: 0006871b sext.w a4,a3 - 27a6: 140482e3 beqz s1,30ea - 27aa: 40a7863b subw a2,a5,a0 - 27ae: 40cb083b subw a6,s6,a2 - 27b2: 85c2 mv a1,a6 - 27b4: 01075363 bge a4,a6,27ba - 27b8: 85ba mv a1,a4 + 27d2: 846a mv s0,s10 + 27d4: 20000b13 li s6,512 + 27d8: 8d6e mv s10,s11 + 27da: e846 sd a7,16(sp) + 27dc: 8de6 mv s11,s9 + 27de: 8a7e mv s4,t6 + 27e0: 8972 mv s2,t3 + 27e2: 899a mv s3,t1 + 27e4: 8c9e mv s9,t2 + 27e6: 0006871b sext.w a4,a3 + 27ea: 140482e3 beqz s1,312e + 27ee: 40a7863b subw a2,a5,a0 + 27f2: 40cb083b subw a6,s6,a2 + 27f6: 85c2 mv a1,a6 + 27f8: 01075363 bge a4,a6,27fe + 27fc: 85ba mv a1,a4 lead[0] -= (char)i; - 27ba: 9e8d subw a3,a3,a1 + 27fe: 9e8d subw a3,a3,a1 stbsp__cb_buf_clamp(i, lead[0]); - 27bc: 0005871b sext.w a4,a1 + 2800: 0005871b sext.w a4,a1 lead[0] -= (char)i; - 27c0: 06d10423 sb a3,104(sp) + 2804: 06d10423 sb a3,104(sp) while (i) { - 27c4: c70d beqz a4,27ee - 27c6: 7866 ld a6,120(sp) - 27c8: 02071593 slli a1,a4,0x20 - 27cc: 9181 srli a1,a1,0x20 - 27ce: 00b78633 add a2,a5,a1 - 27d2: 8742 mv a4,a6 + 2808: c70d beqz a4,2832 + 280a: 7866 ld a6,120(sp) + 280c: 02071593 slli a1,a4,0x20 + 2810: 9181 srli a1,a1,0x20 + 2812: 00b78633 add a2,a5,a1 + 2816: 8742 mv a4,a6 *bf++ = *sn++; - 27d4: 00074683 lbu a3,0(a4) - 27d8: 0785 addi a5,a5,1 + 2818: 00074683 lbu a3,0(a4) + 281c: 0785 addi a5,a5,1 while (i) { - 27da: 0705 addi a4,a4,1 + 281e: 0705 addi a4,a4,1 *bf++ = *sn++; - 27dc: fed78fa3 sb a3,-1(a5) + 2820: fed78fa3 sb a3,-1(a5) while (i) { - 27e0: fec79ae3 bne a5,a2,27d4 - 27e4: 982e add a6,a6,a1 - 27e6: fcc2 sd a6,120(sp) + 2824: fec79ae3 bne a5,a2,2818 + 2828: 982e add a6,a6,a1 + 282a: fcc2 sd a6,120(sp) stbsp__chk_cb_buf(1); - 27e8: c899 beqz s1,27fe - 27ea: 40a7863b subw a2,a5,a0 - 27ee: 00cbd863 bge s7,a2,27fe - 27f2: 65a2 ld a1,8(sp) - 27f4: 9c31 addw s0,s0,a2 - 27f6: 9482 jalr s1 - 27f8: 1a050ae3 beqz a0,31ac - 27fc: 87aa mv a5,a0 + 282c: c899 beqz s1,2842 + 282e: 40a7863b subw a2,a5,a0 + 2832: 00cbd863 bge s7,a2,2842 + 2836: 65a2 ld a1,8(sp) + 2838: 9c31 addw s0,s0,a2 + 283a: 9482 jalr s1 + 283c: 1a050ae3 beqz a0,31f0 + 2840: 87aa mv a5,a0 while (lead[0]) { - 27fe: 06814683 lbu a3,104(sp) - 2802: f2c5 bnez a3,27a2 - 2804: 834e mv t1,s3 - 2806: 68c2 ld a7,16(sp) - 2808: 89a6 mv s3,s1 - 280a: 7682 ld a3,32(sp) - 280c: 64e2 ld s1,24(sp) - 280e: 8e4a mv t3,s2 - 2810: 83e6 mv t2,s9 - 2812: 8fd2 mv t6,s4 - 2814: 8cee mv s9,s11 - 2816: 892a mv s2,a0 - 2818: 8dea mv s11,s10 - 281a: 8d22 mv s10,s0 - 281c: 843e mv s0,a5 + 2842: 06814683 lbu a3,104(sp) + 2846: f2c5 bnez a3,27e6 + 2848: 834e mv t1,s3 + 284a: 68c2 ld a7,16(sp) + 284c: 89a6 mv s3,s1 + 284e: 7682 ld a3,32(sp) + 2850: 64e2 ld s1,24(sp) + 2852: 8e4a mv t3,s2 + 2854: 83e6 mv t2,s9 + 2856: 8fd2 mv t6,s4 + 2858: 8cee mv s9,s11 + 285a: 892a mv s2,a0 + 285c: 8dea mv s11,s10 + 285e: 8d22 mv s10,s0 + 2860: 843e mv s0,a5 while (n) { - 281e: c6f9 beqz a3,28ec + 2862: c6f9 beqz a3,2930 STBSP__UNALIGNED(while (i >= 4) { - 2820: ec26 sd s1,24(sp) - 2822: 854a mv a0,s2 - 2824: 84d6 mv s1,s5 - 2826: 896a mv s2,s10 - 2828: 87a2 mv a5,s0 - 282a: 8d6e mv s10,s11 + 2864: ec26 sd s1,24(sp) + 2866: 854a mv a0,s2 + 2868: 84d6 mv s1,s5 + 286a: 896a mv s2,s10 + 286c: 87a2 mv a5,s0 + 286e: 8d6e mv s10,s11 stbsp__chk_cb_buf(1); - 282c: 1fe00b93 li s7,510 + 2870: 1fe00b93 li s7,510 STBSP__UNALIGNED(while (i >= 4) { - 2830: 8de6 mv s11,s9 + 2874: 8de6 mv s11,s9 stbsp__cb_buf_clamp(i, n); - 2832: 20000b13 li s6,512 + 2876: 20000b13 li s6,512 STBSP__UNALIGNED(while (i >= 4) { - 2836: 4a0d li s4,3 - 2838: e87e sd t6,16(sp) - 283a: f072 sd t3,32(sp) - 283c: 8ac6 mv s5,a7 - 283e: f41a sd t1,40(sp) - 2840: 8436 mv s0,a3 - 2842: 8c9e mv s9,t2 + 287a: 4a0d li s4,3 + 287c: e87e sd t6,16(sp) + 287e: f072 sd t3,32(sp) + 2880: 8ac6 mv s5,a7 + 2882: f41a sd t1,40(sp) + 2884: 8436 mv s0,a3 + 2886: 8c9e mv s9,t2 stbsp__cb_buf_clamp(i, n); - 2844: 0004071b sext.w a4,s0 - 2848: 100982e3 beqz s3,314c - 284c: 40a78633 sub a2,a5,a0 - 2850: 40cb05bb subw a1,s6,a2 - 2854: 862e mv a2,a1 - 2856: 00b75363 bge a4,a1,285c - 285a: 863a mv a2,a4 - 285c: 0006071b sext.w a4,a2 + 2888: 0004071b sext.w a4,s0 + 288c: 100982e3 beqz s3,3190 + 2890: 40a78633 sub a2,a5,a0 + 2894: 40cb05bb subw a1,s6,a2 + 2898: 862e mv a2,a1 + 289a: 00b75363 bge a4,a1,28a0 + 289e: 863a mv a2,a4 + 28a0: 0006071b sext.w a4,a2 n -= i; - 2860: 9c11 subw s0,s0,a2 + 28a4: 9c11 subw s0,s0,a2 STBSP__UNALIGNED(while (i >= 4) { - 2862: 14ea50e3 bge s4,a4,31a2 - 2866: ffc70f1b addiw t5,a4,-4 - 286a: 002f5e9b srliw t4,t5,0x2 - 286e: 001e8e1b addiw t3,t4,1 - 2872: 0e0a slli t3,t3,0x2 - 2874: 01c785b3 add a1,a5,t3 - 2878: 8626 mv a2,s1 - 287a: 4218 lw a4,0(a2) - 287c: 0791 addi a5,a5,4 - 287e: 0611 addi a2,a2,4 - 2880: 2701 sext.w a4,a4 - 2882: fee7ae23 sw a4,-4(a5) - 2886: feb79ae3 bne a5,a1,287a - 288a: 002e9e9b slliw t4,t4,0x2 - 288e: 41df073b subw a4,t5,t4 + 28a6: 14ea50e3 bge s4,a4,31e6 + 28aa: ffc70f1b addiw t5,a4,-4 + 28ae: 002f5e9b srliw t4,t5,0x2 + 28b2: 001e8e1b addiw t3,t4,1 + 28b6: 0e0a slli t3,t3,0x2 + 28b8: 01c785b3 add a1,a5,t3 + 28bc: 8626 mv a2,s1 + 28be: 4218 lw a4,0(a2) + 28c0: 0791 addi a5,a5,4 + 28c2: 0611 addi a2,a2,4 + 28c4: 2701 sext.w a4,a4 + 28c6: fee7ae23 sw a4,-4(a5) + 28ca: feb79ae3 bne a5,a1,28be + 28ce: 002e9e9b slliw t4,t4,0x2 + 28d2: 41df073b subw a4,t5,t4 while (i) { - 2892: 94f2 add s1,s1,t3 - 2894: c31d beqz a4,28ba - 2896: 8626 mv a2,s1 - 2898: 87ae mv a5,a1 - 289a: 00e58f3b addw t5,a1,a4 + 28d6: 94f2 add s1,s1,t3 + 28d8: c31d beqz a4,28fe + 28da: 8626 mv a2,s1 + 28dc: 87ae mv a5,a1 + 28de: 00e58f3b addw t5,a1,a4 *bf++ = *s++; - 289e: 00064e83 lbu t4,0(a2) - 28a2: 0785 addi a5,a5,1 + 28e2: 00064e83 lbu t4,0(a2) + 28e6: 0785 addi a5,a5,1 while (i) { - 28a4: 00078e1b sext.w t3,a5 + 28e8: 00078e1b sext.w t3,a5 *bf++ = *s++; - 28a8: ffd78fa3 sb t4,-1(a5) - 28ac: 0605 addi a2,a2,1 + 28ec: ffd78fa3 sb t4,-1(a5) + 28f0: 0605 addi a2,a2,1 while (i) { - 28ae: ffcf18e3 bne t5,t3,289e - 28b2: 1702 slli a4,a4,0x20 - 28b4: 9301 srli a4,a4,0x20 - 28b6: 95ba add a1,a1,a4 - 28b8: 94ba add s1,s1,a4 + 28f2: ffcf18e3 bne t5,t3,28e2 + 28f6: 1702 slli a4,a4,0x20 + 28f8: 9301 srli a4,a4,0x20 + 28fa: 95ba add a1,a1,a4 + 28fc: 94ba add s1,s1,a4 stbsp__chk_cb_buf(1); - 28ba: 1a098763 beqz s3,2a68 - 28be: 40a5863b subw a2,a1,a0 - 28c2: 1acbd363 bge s7,a2,2a68 - 28c6: 65a2 ld a1,8(sp) - 28c8: 0126093b addw s2,a2,s2 - 28cc: 9982 jalr s3 - 28ce: 20050be3 beqz a0,32e4 - 28d2: 87aa mv a5,a0 + 28fe: 1a098763 beqz s3,2aac + 2902: 40a5863b subw a2,a1,a0 + 2906: 1acbd363 bge s7,a2,2aac + 290a: 65a2 ld a1,8(sp) + 290c: 0126093b addw s2,a2,s2 + 2910: 9982 jalr s3 + 2912: 20050be3 beqz a0,3328 + 2916: 87aa mv a5,a0 while (n) { - 28d4: f825 bnez s0,2844 - 28d6: 6fc2 ld t6,16(sp) - 28d8: 64e2 ld s1,24(sp) - 28da: 7e02 ld t3,32(sp) - 28dc: 7322 ld t1,40(sp) - 28de: 83e6 mv t2,s9 - 28e0: 88d6 mv a7,s5 - 28e2: 8cee mv s9,s11 - 28e4: 843e mv s0,a5 - 28e6: 8dea mv s11,s10 - 28e8: 8d4a mv s10,s2 - 28ea: 892a mv s2,a0 + 2918: f825 bnez s0,2888 + 291a: 6fc2 ld t6,16(sp) + 291c: 64e2 ld s1,24(sp) + 291e: 7e02 ld t3,32(sp) + 2920: 7322 ld t1,40(sp) + 2922: 83e6 mv t2,s9 + 2924: 88d6 mv a7,s5 + 2926: 8cee mv s9,s11 + 2928: 843e mv s0,a5 + 292a: 8dea mv s11,s10 + 292c: 8d4a mv s10,s2 + 292e: 892a mv s2,a0 while (tz) { - 28ec: 08088863 beqz a7,297c + 2930: 08088863 beqz a7,29c0 *(stbsp__uint32 *)bf = 0x30303030; - 28f0: 30303b37 lui s6,0x30303 + 2934: 30303b37 lui s6,0x30303 *bf++ = '0'; - 28f4: 03000a13 li s4,48 + 2938: 03000a13 li s4,48 while (i >= 4) { - 28f8: 4a8d li s5,3 + 293c: 4a8d li s5,3 stbsp__chk_cb_buf(1); - 28fa: 1fe00693 li a3,510 + 293e: 1fe00693 li a3,510 *(stbsp__uint32 *)bf = 0x30303030; - 28fe: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fa270> + 2942: 030b0b13 addi s6,s6,48 # 30303030 <_ZSt4cerr+0x302fa1f0> stbsp__cb_buf_clamp(i, tz); - 2902: 20000b93 li s7,512 - 2906: 040989e3 beqz s3,3158 - 290a: 41240633 sub a2,s0,s2 - 290e: 40cb87bb subw a5,s7,a2 - 2912: 873e mv a4,a5 - 2914: 00f8d363 bge a7,a5,291a - 2918: 8746 mv a4,a7 - 291a: 0007079b sext.w a5,a4 + 2946: 20000b93 li s7,512 + 294a: 040989e3 beqz s3,319c + 294e: 41240633 sub a2,s0,s2 + 2952: 40cb87bb subw a5,s7,a2 + 2956: 873e mv a4,a5 + 2958: 00f8d363 bge a7,a5,295e + 295c: 8746 mv a4,a7 + 295e: 0007079b sext.w a5,a4 tz -= i; - 291e: 40e888bb subw a7,a7,a4 + 2962: 40e888bb subw a7,a7,a4 while (i) { - 2922: 08078ee3 beqz a5,31be + 2966: 08078ee3 beqz a5,3202 if ((((stbsp__uintptr)bf) & 3) == 0) - 2926: 00347713 andi a4,s0,3 - 292a: e719 bnez a4,2938 - 292c: 0390006f j 3164 - 2930: 00347713 andi a4,s0,3 - 2934: 7a070f63 beqz a4,30f2 + 296a: 00347713 andi a4,s0,3 + 296e: e719 bnez a4,297c + 2970: 0390006f j 31a8 + 2974: 00347713 andi a4,s0,3 + 2978: 7a070f63 beqz a4,3136 *bf++ = '0'; - 2938: 01440023 sb s4,0(s0) + 297c: 01440023 sb s4,0(s0) --i; - 293c: 37fd addiw a5,a5,-1 + 2980: 37fd addiw a5,a5,-1 *bf++ = '0'; - 293e: 0405 addi s0,s0,1 + 2982: 0405 addi s0,s0,1 while (i) { - 2940: fbe5 bnez a5,2930 + 2984: fbe5 bnez a5,2974 stbsp__chk_cb_buf(1); - 2942: 02098b63 beqz s3,2978 - 2946: 4124063b subw a2,s0,s2 - 294a: 02c6d763 bge a3,a2,2978 - 294e: 65a2 ld a1,8(sp) - 2950: 854a mv a0,s2 - 2952: f81e sd t2,48(sp) - 2954: f41a sd t1,40(sp) - 2956: f072 sd t3,32(sp) - 2958: ec7e sd t6,24(sp) - 295a: e846 sd a7,16(sp) - 295c: 00cd0d3b addw s10,s10,a2 - 2960: 9982 jalr s3 - 2962: 892a mv s2,a0 - 2964: 1a0502e3 beqz a0,3308 - 2968: 73c2 ld t2,48(sp) - 296a: 7322 ld t1,40(sp) - 296c: 7e02 ld t3,32(sp) - 296e: 6fe2 ld t6,24(sp) - 2970: 68c2 ld a7,16(sp) - 2972: 842a mv s0,a0 - 2974: 1fe00693 li a3,510 + 2986: 02098b63 beqz s3,29bc + 298a: 4124063b subw a2,s0,s2 + 298e: 02c6d763 bge a3,a2,29bc + 2992: 65a2 ld a1,8(sp) + 2994: 854a mv a0,s2 + 2996: f81e sd t2,48(sp) + 2998: f41a sd t1,40(sp) + 299a: f072 sd t3,32(sp) + 299c: ec7e sd t6,24(sp) + 299e: e846 sd a7,16(sp) + 29a0: 00cd0d3b addw s10,s10,a2 + 29a4: 9982 jalr s3 + 29a6: 892a mv s2,a0 + 29a8: 1a0502e3 beqz a0,334c + 29ac: 73c2 ld t2,48(sp) + 29ae: 7322 ld t1,40(sp) + 29b0: 7e02 ld t3,32(sp) + 29b2: 6fe2 ld t6,24(sp) + 29b4: 68c2 ld a7,16(sp) + 29b6: 842a mv s0,a0 + 29b8: 1fe00693 li a3,510 while (tz) { - 2978: f80897e3 bnez a7,2906 + 29bc: f80897e3 bnez a7,294a sn = tail + 1; - 297c: 07110793 addi a5,sp,113 - 2980: fcbe sd a5,120(sp) + 29c0: 07110793 addi a5,sp,113 + 29c4: fcbe sd a5,120(sp) while (tail[0]) { - 2982: 080f8763 beqz t6,2a10 + 29c6: 080f8763 beqz t6,2a54 stbsp__cb_buf_clamp(i, tail[0]); - 2986: 854a mv a0,s2 - 2988: 8b6a mv s6,s10 + 29ca: 854a mv a0,s2 + 29cc: 8b6a mv s6,s10 stbsp__chk_cb_buf(1); - 298a: 1fe00a93 li s5,510 + 29ce: 1fe00a93 li s5,510 stbsp__cb_buf_clamp(i, tail[0]); - 298e: 8d4e mv s10,s3 - 2990: 20000a13 li s4,512 - 2994: 8bf2 mv s7,t3 - 2996: 891a mv s2,t1 - 2998: 899e mv s3,t2 - 299a: 000f879b sext.w a5,t6 - 299e: 7c0d0863 beqz s10,316e - 29a2: 40a4063b subw a2,s0,a0 - 29a6: 40ca06bb subw a3,s4,a2 - 29aa: 8736 mv a4,a3 - 29ac: 00d7d363 bge a5,a3,29b2 - 29b0: 873e mv a4,a5 + 29d2: 8d4e mv s10,s3 + 29d4: 20000a13 li s4,512 + 29d8: 8bf2 mv s7,t3 + 29da: 891a mv s2,t1 + 29dc: 899e mv s3,t2 + 29de: 000f879b sext.w a5,t6 + 29e2: 7c0d0863 beqz s10,31b2 + 29e6: 40a4063b subw a2,s0,a0 + 29ea: 40ca06bb subw a3,s4,a2 + 29ee: 8736 mv a4,a3 + 29f0: 00d7d363 bge a5,a3,29f6 + 29f4: 873e mv a4,a5 tail[0] -= (char)i; - 29b2: 40ef8fbb subw t6,t6,a4 + 29f6: 40ef8fbb subw t6,t6,a4 stbsp__cb_buf_clamp(i, tail[0]); - 29b6: 0007079b sext.w a5,a4 + 29fa: 0007079b sext.w a5,a4 tail[0] -= (char)i; - 29ba: 07f10823 sb t6,112(sp) + 29fe: 07f10823 sb t6,112(sp) while (i) { - 29be: c795 beqz a5,29ea - 29c0: 75e6 ld a1,120(sp) - 29c2: 02079613 slli a2,a5,0x20 - 29c6: 9201 srli a2,a2,0x20 - 29c8: 00c406b3 add a3,s0,a2 - 29cc: 87ae mv a5,a1 + 2a02: c795 beqz a5,2a2e + 2a04: 75e6 ld a1,120(sp) + 2a06: 02079613 slli a2,a5,0x20 + 2a0a: 9201 srli a2,a2,0x20 + 2a0c: 00c406b3 add a3,s0,a2 + 2a10: 87ae mv a5,a1 *bf++ = *sn++; - 29ce: 0007c703 lbu a4,0(a5) - 29d2: 0405 addi s0,s0,1 + 2a12: 0007c703 lbu a4,0(a5) + 2a16: 0405 addi s0,s0,1 while (i) { - 29d4: 0785 addi a5,a5,1 + 2a18: 0785 addi a5,a5,1 *bf++ = *sn++; - 29d6: fee40fa3 sb a4,-1(s0) + 2a1a: fee40fa3 sb a4,-1(s0) while (i) { - 29da: fed41ae3 bne s0,a3,29ce - 29de: 95b2 add a1,a1,a2 - 29e0: fcae sd a1,120(sp) + 2a1e: fed41ae3 bne s0,a3,2a12 + 2a22: 95b2 add a1,a1,a2 + 2a24: fcae sd a1,120(sp) stbsp__chk_cb_buf(1); - 29e2: 000d0d63 beqz s10,29fc - 29e6: 40a4063b subw a2,s0,a0 - 29ea: 00cad963 bge s5,a2,29fc - 29ee: 65a2 ld a1,8(sp) - 29f0: 00cb0b3b addw s6,s6,a2 - 29f4: 9d02 jalr s10 - 29f6: 200509e3 beqz a0,3408 - 29fa: 842a mv s0,a0 + 2a26: 000d0d63 beqz s10,2a40 + 2a2a: 40a4063b subw a2,s0,a0 + 2a2e: 00cad963 bge s5,a2,2a40 + 2a32: 65a2 ld a1,8(sp) + 2a34: 00cb0b3b addw s6,s6,a2 + 2a38: 9d02 jalr s10 + 2a3a: 200509e3 beqz a0,344c + 2a3e: 842a mv s0,a0 while (tail[0]) { - 29fc: 07014f83 lbu t6,112(sp) - 2a00: f80f9de3 bnez t6,299a - 2a04: 834a mv t1,s2 - 2a06: 83ce mv t2,s3 - 2a08: 8e5e mv t3,s7 - 2a0a: 89ea mv s3,s10 - 2a0c: 892a mv s2,a0 - 2a0e: 8d5a mv s10,s6 + 2a40: 07014f83 lbu t6,112(sp) + 2a44: f80f9de3 bnez t6,29de + 2a48: 834a mv t1,s2 + 2a4a: 83ce mv t2,s3 + 2a4c: 8e5e mv t3,s7 + 2a4e: 89ea mv s3,s10 + 2a50: 892a mv s2,a0 + 2a52: 8d5a mv s10,s6 if (fl & STBSP__LEFTJUST) - 2a10: 001e7e13 andi t3,t3,1 - 2a14: 000e0663 beqz t3,2a20 + 2a54: 001e7e13 andi t3,t3,1 + 2a58: 000e0663 beqz t3,2a64 if (fw > 0) { - 2a18: 00605463 blez t1,2a20 - 2a1c: 0300106f j 3a4c + 2a5c: 00605463 blez t1,2a64 + 2a60: 0300106f j 3a90 for (;;) { - 2a20: 6b86 ld s7,64(sp) - 2a22: 2c013a03 ld s4,704(sp) - 2a26: 2b813a83 ld s5,696(sp) - 2a2a: 2b013b03 ld s6,688(sp) + 2a64: 6b86 ld s7,64(sp) + 2a66: 2c013a03 ld s4,704(sp) + 2a6a: 2b813a83 ld s5,696(sp) + 2a6e: 2b013b03 ld s6,688(sp) ++f; - 2a2e: 0485 addi s1,s1,1 + 2a72: 0485 addi s1,s1,1 for (;;) { - 2a30: b0f1 j 22fc + 2a74: b0f1 j 2340 fl |= STBSP__METRIC_SUFFIX; - 2a32: 100e6e13 ori t3,t3,256 + 2a76: 100e6e13 ori t3,t3,256 continue; - 2a36: 0685 addi a3,a3,1 - 2a38: bad1 j 240c + 2a7a: 0685 addi a3,a3,1 + 2a7c: bad1 j 2450 while (i) { - 2a3a: 0e0580e3 beqz a1,331a + 2a7e: 0e0580e3 beqz a1,335e if ((((stbsp__uintptr)bf) & 3) == 0) - 2a3e: 00347793 andi a5,s0,3 - 2a42: e799 bnez a5,2a50 - 2a44: 0dd0006f j 3320 - 2a48: 00347793 andi a5,s0,3 - 2a4c: 72078463 beqz a5,3174 + 2a82: 00347793 andi a5,s0,3 + 2a86: e799 bnez a5,2a94 + 2a88: 0dd0006f j 3364 + 2a8c: 00347793 andi a5,s0,3 + 2a90: 72078463 beqz a5,31b8 *bf++ = '0'; - 2a50: 01d40023 sb t4,0(s0) + 2a94: 01d40023 sb t4,0(s0) --i; - 2a54: 35fd addiw a1,a1,-1 + 2a98: 35fd addiw a1,a1,-1 *bf++ = '0'; - 2a56: 0405 addi s0,s0,1 + 2a9a: 0405 addi s0,s0,1 while (i) { - 2a58: f9e5 bnez a1,2a48 + 2a9c: f9e5 bnez a1,2a8c while (i) { - 2a5a: 85a2 mv a1,s0 + 2a9e: 85a2 mv a1,s0 stbsp__chk_cb_buf(1); - 2a5c: cc0b19e3 bnez s6,272e - 2a60: 842e mv s0,a1 + 2aa0: cc0b19e3 bnez s6,2772 + 2aa4: 842e mv s0,a1 while (pr > 0) { - 2a62: c93042e3 bgtz s3,26e6 - 2a66: b9cd j 2758 + 2aa6: c93042e3 bgtz s3,272a + 2aaa: b9cd j 279c while (i) { - 2a68: 87ae mv a5,a1 + 2aac: 87ae mv a5,a1 while (n) { - 2a6a: dc041de3 bnez s0,2844 - 2a6e: b5a5 j 28d6 + 2aae: dc041de3 bnez s0,2888 + 2ab2: b5a5 j 291a while ((f[0] >= '0') && (f[0] <= '9')) { - 2a70: fd07871b addiw a4,a5,-48 - 2a74: 0ff77713 zext.b a4,a4 - 2a78: 4625 li a2,9 + 2ab4: fd07871b addiw a4,a5,-48 + 2ab8: 0ff77713 zext.b a4,a4 + 2abc: 4625 li a2,9 ++f; - 2a7a: 0485 addi s1,s1,1 + 2abe: 0485 addi s1,s1,1 pr = 0; - 2a7c: 4881 li a7,0 + 2ac0: 4881 li a7,0 while ((f[0] >= '0') && (f[0] <= '9')) { - 2a7e: 46a5 li a3,9 - 2a80: 9ce669e3 bltu a2,a4,2452 + 2ac2: 46a5 li a3,9 + 2ac4: 9ce669e3 bltu a2,a4,2496 pr = pr * 10 + f[0] - '0'; - 2a84: 0028971b slliw a4,a7,0x2 - 2a88: 0117073b addw a4,a4,a7 - 2a8c: 0017171b slliw a4,a4,0x1 + 2ac8: 0028971b slliw a4,a7,0x2 + 2acc: 0117073b addw a4,a4,a7 + 2ad0: 0017171b slliw a4,a4,0x1 f++; - 2a90: 0485 addi s1,s1,1 + 2ad4: 0485 addi s1,s1,1 pr = pr * 10 + f[0] - '0'; - 2a92: 9f3d addw a4,a4,a5 + 2ad6: 9f3d addw a4,a4,a5 while ((f[0] >= '0') && (f[0] <= '9')) { - 2a94: 0004c783 lbu a5,0(s1) + 2ad8: 0004c783 lbu a5,0(s1) pr = pr * 10 + f[0] - '0'; - 2a98: fd07089b addiw a7,a4,-48 + 2adc: fd07089b addiw a7,a4,-48 while ((f[0] >= '0') && (f[0] <= '9')) { - 2a9c: fd07871b addiw a4,a5,-48 - 2aa0: 0ff77713 zext.b a4,a4 - 2aa4: fee6f0e3 bgeu a3,a4,2a84 - 2aa8: b26d j 2452 + 2ae0: fd07871b addiw a4,a5,-48 + 2ae4: 0ff77713 zext.b a4,a4 + 2ae8: fee6f0e3 bgeu a3,a4,2ac8 + 2aec: b26d j 2496 fl |= STBSP__METRIC_1024; - 2aaa: 8f5d or a4,a4,a5 - 2aac: 00070e1b sext.w t3,a4 - 2ab0: 0685 addi a3,a3,1 - 2ab2: baa9 j 240c + 2aee: 8f5d or a4,a4,a5 + 2af0: 00070e1b sext.w t3,a4 + 2af4: 0685 addi a3,a3,1 + 2af6: baa9 j 2450 *bf = 0; - 2ab4: 00040023 sb zero,0(s0) - 2ab8: b209 j 23ba + 2af8: 00040023 sb zero,0(s0) + 2afc: b209 j 23fe if (f[0] == 'l') { - 2aba: 0014c783 lbu a5,1(s1) - 2abe: 06c00713 li a4,108 + 2afe: 0014c783 lbu a5,1(s1) + 2b02: 06c00713 li a4,108 fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 2ac2: 020e6e13 ori t3,t3,32 + 2b06: 020e6e13 ori t3,t3,32 if (f[0] == 'l') { - 2ac6: 00e78c63 beq a5,a4,2ade + 2b0a: 00e78c63 beq a5,a4,2b22 ++f; - 2aca: 0485 addi s1,s1,1 - 2acc: ba65 j 2484 + 2b0e: 0485 addi s1,s1,1 + 2b10: ba65 j 24c8 if (f[0] == 'h') - 2ace: 0014c783 lbu a5,1(s1) - 2ad2: 06800713 li a4,104 + 2b12: 0014c783 lbu a5,1(s1) + 2b16: 06800713 li a4,104 fl |= STBSP__HALFWIDTH; - 2ad6: 200e6e13 ori t3,t3,512 + 2b1a: 200e6e13 ori t3,t3,512 if (f[0] == 'h') - 2ada: fee798e3 bne a5,a4,2aca + 2b1e: fee798e3 bne a5,a4,2b0e if ((f[1] == '6') && (f[2] == '4')) { - 2ade: 0024c783 lbu a5,2(s1) + 2b22: 0024c783 lbu a5,2(s1) ++f; - 2ae2: 0489 addi s1,s1,2 - 2ae4: b245 j 2484 + 2b26: 0489 addi s1,s1,2 + 2b28: b245 j 24c8 s = va_arg(va, char *); - 2ae6: 008b8713 addi a4,s7,8 - 2aea: e0ba sd a4,64(sp) + 2b2a: 008b8713 addi a4,s7,8 + 2b2e: e0ba sd a4,64(sp) if (fl & STBSP__INTMAX) { - 2aec: 020e7693 andi a3,t3,32 - 2af0: 8772 mv a4,t3 - 2af2: 24069ee3 bnez a3,354e + 2b30: 020e7693 andi a3,t3,32 + 2b34: 8772 mv a4,t3 + 2b36: 24069ee3 bnez a3,3592 stbsp__int32 i = va_arg(va, stbsp__int32); - 2af6: 000ba683 lw a3,0(s7) + 2b3a: 000ba683 lw a3,0(s7) if ((f[0] != 'u') && (i < 0)) { - 2afa: 07500613 li a2,117 + 2b3e: 07500613 li a2,117 n64 = (stbsp__uint32)i; - 2afe: 02069f13 slli t5,a3,0x20 - 2b02: 020f5f13 srli t5,t5,0x20 + 2b42: 02069f13 slli t5,a3,0x20 + 2b46: 020f5f13 srli t5,t5,0x20 if ((f[0] != 'u') && (i < 0)) { - 2b06: 00c78a63 beq a5,a2,2b1a - 2b0a: 0006d863 bgez a3,2b1a + 2b4a: 00c78a63 beq a5,a2,2b5e + 2b4e: 0006d863 bgez a3,2b5e fl |= STBSP__NEGATIVE; - 2b0e: 08076713 ori a4,a4,128 + 2b52: 08076713 ori a4,a4,128 n64 = (stbsp__uint32)-i; - 2b12: 40d00f3b negw t5,a3 + 2b56: 40d00f3b negw t5,a3 fl |= STBSP__NEGATIVE; - 2b16: 00070e1b sext.w t3,a4 + 2b5a: 00070e1b sext.w t3,a4 if (fl & STBSP__METRIC_SUFFIX) { - 2b1a: 100e7693 andi a3,t3,256 - 2b1e: 5c0683e3 beqz a3,38e4 + 2b5e: 100e7693 andi a3,t3,256 + 2b62: 5c0683e3 beqz a3,3928 if (n64 < 1024) - 2b22: 3ff00793 li a5,1023 - 2b26: 01e7e463 bltu a5,t5,2b2e - 2b2a: 0ea0106f j 3c14 + 2b66: 3ff00793 li a5,1023 + 2b6a: 01e7e463 bltu a5,t5,2b72 + 2b6e: 0ea0106f j 3c58 else if (pr == -1) - 2b2e: 57fd li a5,-1 - 2b30: 30f887e3 beq a7,a5,363e + 2b72: 57fd li a5,-1 + 2b74: 30f887e3 beq a7,a5,3682 fv = (double)(stbsp__int64)n64; - 2b34: d22f7553 fcvt.d.l fa0,t5 + 2b78: d22f7553 fcvt.d.l fa0,t5 if (fl & STBSP__METRIC_1024) - 2b38: 034e1793 slli a5,t3,0x34 - 2b3c: 0007c463 bltz a5,2b44 - 2b40: 2300106f j 3d70 + 2b7c: 034e1793 slli a5,t3,0x34 + 2b80: 0007c463 bltz a5,2b88 + 2b84: 2300106f j 3db4 divisor = 1024.0; - 2b44: 00004797 auipc a5,0x4 - 2b48: d647b787 fld fa5,-668(a5) # 68a8 + 2b88: 00004797 auipc a5,0x4 + 2b8c: d987b787 fld fa5,-616(a5) # 6920 if ((fv < divisor) && (fv > -divisor)) - 2b4c: 22f79753 fneg.d fa4,fa5 + 2b90: 22f79753 fneg.d fa4,fa5 fl += 0x1000000; - 2b50: 010006b7 lui a3,0x1000 + 2b94: 010006b7 lui a3,0x1000 while (fl < 0x4000000) { - 2b54: 04000737 lui a4,0x4000 + 2b98: 04000737 lui a4,0x4000 if ((fv < divisor) && (fv > -divisor)) - 2b58: a2f517d3 flt.d a5,fa0,fa5 - 2b5c: c789 beqz a5,2b66 - 2b5e: a2a717d3 flt.d a5,fa4,fa0 - 2b62: 3e079863 bnez a5,2f52 + 2b9c: a2f517d3 flt.d a5,fa0,fa5 + 2ba0: c789 beqz a5,2baa + 2ba2: a2a717d3 flt.d a5,fa4,fa0 + 2ba6: 3e079863 bnez a5,2f96 fl += 0x1000000; - 2b66: 01c68e3b addw t3,a3,t3 + 2baa: 01c68e3b addw t3,a3,t3 fv /= divisor; - 2b6a: 1af57553 fdiv.d fa0,fa0,fa5 + 2bae: 1af57553 fdiv.d fa0,fa0,fa5 while (fl < 0x4000000) { - 2b6e: feee65e3 bltu t3,a4,2b58 - 2b72: a6c5 j 2f52 + 2bb2: feee65e3 bltu t3,a4,2b9c + 2bb6: a6c5 j 2f96 h = (f[0] == 'X') ? hexu : hex; - 2b74: 05800693 li a3,88 + 2bb8: 05800693 li a3,88 if (fl & STBSP__INTMAX) { - 2b78: 020e7713 andi a4,t3,32 + 2bbc: 020e7713 andi a4,t3,32 h = (f[0] == 'X') ? hexu : hex; - 2b7c: 00005817 auipc a6,0x5 - 2b80: 3d480813 addi a6,a6,980 # 7f50 - 2b84: 00d79663 bne a5,a3,2b90 - 2b88: 00005817 auipc a6,0x5 - 2b8c: 3b080813 addi a6,a6,944 # 7f38 + 2bc0: 00005817 auipc a6,0x5 + 2bc4: 41080813 addi a6,a6,1040 # 7fd0 + 2bc8: 00d79663 bne a5,a3,2bd4 + 2bcc: 00005817 auipc a6,0x5 + 2bd0: 3ec80813 addi a6,a6,1004 # 7fb8 l = (4 << 4) | (4 << 8); - 2b90: 44000793 li a5,1088 - 2b94: d0be sw a5,96(sp) + 2bd4: 44000793 li a5,1088 + 2bd8: d0be sw a5,96(sp) if (fl & STBSP__LEADING_0X) { - 2b96: 008e7793 andi a5,t3,8 - 2b9a: 7a079263 bnez a5,333e + 2bda: 008e7793 andi a5,t3,8 + 2bde: 7a079263 bnez a5,3382 lead[0] = 0; - 2b9e: 06010423 sb zero,104(sp) + 2be2: 06010423 sb zero,104(sp) s = va_arg(va, char *); - 2ba2: 008b8793 addi a5,s7,8 - 2ba6: e0be sd a5,64(sp) + 2be6: 008b8793 addi a5,s7,8 + 2bea: e0be sd a5,64(sp) if (fl & STBSP__INTMAX) - 2ba8: 72070b63 beqz a4,32de + 2bec: 72070b63 beqz a4,3322 n64 = va_arg(va, stbsp__uint64); - 2bac: 000bb683 ld a3,0(s7) + 2bf0: 000bb683 ld a3,0(s7) dp = 0; - 2bb0: d282 sw zero,100(sp) + 2bf4: d282 sw zero,100(sp) tail[0] = 0; - 2bb2: 06010823 sb zero,112(sp) + 2bf6: 06010823 sb zero,112(sp) if ((fl & STBSP__LEFTJUST) == 0) { - 2bb6: 001e7513 andi a0,t3,1 + 2bfa: 001e7513 andi a0,t3,1 if (n64 == 0) { - 2bba: 380694e3 bnez a3,3742 + 2bfe: 380694e3 bnez a3,3786 lead[0] = 0; - 2bbe: 06010423 sb zero,104(sp) + 2c02: 06010423 sb zero,104(sp) if (pr == 0) { - 2bc2: 78089a63 bnez a7,3356 + 2c06: 78089a63 bnez a7,339a if (fw < (stbsp__int32)n) - 2bc6: fffb4313 not t1,s6 - 2bca: 43f35313 srai t1,t1,0x3f + 2c0a: fffb4313 not t1,s6 + 2c0e: 43f35313 srai t1,t1,0x3f l = 0; - 2bce: d082 sw zero,96(sp) + 2c12: d082 sw zero,96(sp) if (fw < (stbsp__int32)n) - 2bd0: 01637333 and t1,t1,s6 + 2c14: 01637333 and t1,t1,s6 goto scopy; - 2bd4: 4701 li a4,0 - 2bd6: 4f81 li t6,0 - 2bd8: 4a01 li s4,0 + 2c18: 4701 li a4,0 + 2c1a: 4f81 li t6,0 + 2c1c: 4a01 li s4,0 cs = 0; - 2bda: 4281 li t0,0 + 2c1e: 4281 li t0,0 s = num + STBSP__NUMSZ; - 2bdc: 28010a93 addi s5,sp,640 + 2c20: 28010a93 addi s5,sp,640 if ((fl & STBSP__LEFTJUST) == 0) { - 2be0: 9c0506e3 beqz a0,25ac + 2c24: 9c0506e3 beqz a0,25f0 if (fw + pr) { - 2be4: 00e307bb addw a5,t1,a4 - 2be8: 9c079fe3 bnez a5,25c6 - 2bec: 06910793 addi a5,sp,105 - 2bf0: b661 j 2778 + 2c28: 00e307bb addw a5,t1,a4 + 2c2c: 9c079fe3 bnez a5,260a + 2c30: 06910793 addi a5,sp,105 + 2c34: b661 j 27bc h = (f[0] == 'E') ? hexu : hex; - 2bf2: 04500713 li a4,69 - 2bf6: 00005317 auipc t1,0x5 - 2bfa: 35a30313 addi t1,t1,858 # 7f50 - 2bfe: 1ce78ae3 beq a5,a4,35d2 + 2c36: 04500713 li a4,69 + 2c3a: 00005317 auipc t1,0x5 + 2c3e: 39630313 addi t1,t1,918 # 7fd0 + 2c42: 1ce78ae3 beq a5,a4,3616 fv = va_arg(va, double); - 2c02: 008b8713 addi a4,s7,8 + 2c46: 008b8713 addi a4,s7,8 if (pr == -1) - 2c06: 57fd li a5,-1 + 2c4a: 57fd li a5,-1 fv = va_arg(va, double); - 2c08: e0ba sd a4,64(sp) - 2c0a: 000bb507 fld fa0,0(s7) + 2c4c: e0ba sd a4,64(sp) + 2c4e: 000bb507 fld fa0,0(s7) if (pr == -1) - 2c0e: 1af88ce3 beq a7,a5,35c6 + 2c52: 1af88ce3 beq a7,a5,360a if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 2c12: 80000737 lui a4,0x80000 - 2c16: 00e8e733 or a4,a7,a4 - 2c1a: 2701 sext.w a4,a4 - 2c1c: 10d4 addi a3,sp,100 - 2c1e: 0110 addi a2,sp,128 - 2c20: 108c addi a1,sp,96 - 2c22: 18a8 addi a0,sp,120 - 2c24: f41e sd t2,40(sp) - 2c26: f01a sd t1,32(sp) - 2c28: ec72 sd t3,24(sp) - 2c2a: e846 sd a7,16(sp) - 2c2c: d8efe0ef jal 11ba - 2c30: 68c2 ld a7,16(sp) - 2c32: 6e62 ld t3,24(sp) - 2c34: 7302 ld t1,32(sp) - 2c36: 73a2 ld t2,40(sp) + 2c56: 80000737 lui a4,0x80000 + 2c5a: 00e8e733 or a4,a7,a4 + 2c5e: 2701 sext.w a4,a4 + 2c60: 10d4 addi a3,sp,100 + 2c62: 0110 addi a2,sp,128 + 2c64: 108c addi a1,sp,96 + 2c66: 18a8 addi a0,sp,120 + 2c68: f41e sd t2,40(sp) + 2c6a: f01a sd t1,32(sp) + 2c6c: ec72 sd t3,24(sp) + 2c6e: e846 sd a7,16(sp) + 2c70: d8efe0ef jal 11fe + 2c74: 68c2 ld a7,16(sp) + 2c76: 6e62 ld t3,24(sp) + 2c78: 7302 ld t1,32(sp) + 2c7a: 73a2 ld t2,40(sp) if (dp == STBSP__SPECIAL) { - 2c38: 5796 lw a5,100(sp) + 2c7c: 5796 lw a5,100(sp) s = (char *)sn; - 2c3a: 7ae6 ld s5,120(sp) + 2c7e: 7ae6 ld s5,120(sp) if ((l - 1) > (stbsp__uint32)pr) - 2c3c: 5686 lw a3,96(sp) + 2c80: 5686 lw a3,96(sp) if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr | 0x80000000)) - 2c3e: 3c0511e3 bnez a0,3800 + 2c82: 3c0511e3 bnez a0,3844 tail[0] = 0; - 2c42: 06010823 sb zero,112(sp) + 2c86: 06010823 sb zero,112(sp) sign[0] = 0; - 2c46: 06010423 sb zero,104(sp) + 2c8a: 06010423 sb zero,104(sp) } else if (fl & STBSP__LEADINGSPACE) { - 2c4a: 004e7713 andi a4,t3,4 - 2c4e: 6a070ee3 beqz a4,3b0a + 2c8e: 004e7713 andi a4,t3,4 + 2c92: 6a070ee3 beqz a4,3b4e sign[0] = 1; - 2c52: 6709 lui a4,0x2 - 2c54: 0705 addi a4,a4,1 # 2001 <_vscanf_core.constprop.0+0x6b9> - 2c56: 06e11423 sh a4,104(sp) + 2c96: 6709 lui a4,0x2 + 2c98: 0705 addi a4,a4,1 # 2001 <_vscanf_core.constprop.0+0x675> + 2c9a: 06e11423 sh a4,104(sp) if (dp == STBSP__SPECIAL) { - 2c5a: 671d lui a4,0x7 - 2c5c: 1ee794e3 bne a5,a4,3644 + 2c9e: 671d lui a4,0x7 + 2ca0: 1ee794e3 bne a5,a4,3688 if (pr < (stbsp__int32)l) - 2c60: 0006879b sext.w a5,a3 + 2ca4: 0006879b sext.w a5,a3 n = pr + lead[0] + tail[0] + tz; - 2c64: 06814a03 lbu s4,104(sp) + 2ca8: 06814a03 lbu s4,104(sp) if (pr < (stbsp__int32)l) - 2c68: fff7c793 not a5,a5 + 2cac: fff7c793 not a5,a5 n = pr + lead[0] + tail[0] + tz; - 2c6c: 07014f83 lbu t6,112(sp) + 2cb0: 07014f83 lbu t6,112(sp) if (pr < (stbsp__int32)l) - 2c70: 97fd srai a5,a5,0x3f - 2c72: 8ff5 and a5,a5,a3 + 2cb4: 97fd srai a5,a5,0x3f + 2cb6: 8ff5 and a5,a5,a3 n = pr + lead[0] + tail[0] + tz; - 2c74: 00fa073b addw a4,s4,a5 - 2c78: 01f7063b addw a2,a4,t6 - 2c7c: 8732 mv a4,a2 + 2cb8: 00fa073b addw a4,s4,a5 + 2cbc: 01f7063b addw a2,a4,t6 + 2cc0: 8732 mv a4,a2 if ((fl & STBSP__LEFTJUST) == 0) { - 2c7e: 001e7513 andi a0,t3,1 + 2cc2: 001e7513 andi a0,t3,1 if (pr < (stbsp__int32)l) - 2c82: 2781 sext.w a5,a5 + 2cc6: 2781 sext.w a5,a5 if (fw < (stbsp__int32)n) - 2c84: 835a mv t1,s6 - 2c86: 00cb5363 bge s6,a2,2c8c - 2c8a: 8332 mv t1,a2 + 2cc8: 835a mv t1,s6 + 2cca: 00cb5363 bge s6,a2,2cd0 + 2cce: 8332 mv t1,a2 fw -= n; - 2c8c: 40e3033b subw t1,t1,a4 + 2cd0: 40e3033b subw t1,t1,a4 cs = 0; - 2c90: 4281 li t0,0 + 2cd4: 4281 li t0,0 pr -= l; - 2c92: 40d7873b subw a4,a5,a3 + 2cd6: 40d7873b subw a4,a5,a3 tz = 0; - 2c96: 4881 li a7,0 + 2cda: 4881 li a7,0 goto scopy; - 2c98: b7a1 j 2be0 + 2cdc: b7a1 j 2c24 h = (f[0] == 'G') ? hexu : hex; - 2c9a: 04700713 li a4,71 - 2c9e: 00005317 auipc t1,0x5 - 2ca2: 2b230313 addi t1,t1,690 # 7f50 - 2ca6: 14e783e3 beq a5,a4,35ec + 2cde: 04700713 li a4,71 + 2ce2: 00005317 auipc t1,0x5 + 2ce6: 2ee30313 addi t1,t1,750 # 7fd0 + 2cea: 14e783e3 beq a5,a4,3630 fv = va_arg(va, double); - 2caa: 008b8713 addi a4,s7,8 + 2cee: 008b8713 addi a4,s7,8 if (pr == -1) - 2cae: 57fd li a5,-1 + 2cf2: 57fd li a5,-1 fv = va_arg(va, double); - 2cb0: e0ba sd a4,64(sp) - 2cb2: 000bb507 fld fa0,0(s7) + 2cf4: e0ba sd a4,64(sp) + 2cf6: 000bb507 fld fa0,0(s7) if (pr == -1) - 2cb6: 12f884e3 beq a7,a5,35de + 2cfa: 12f884e3 beq a7,a5,3622 else if (pr == 0) - 2cba: 6e0887e3 beqz a7,3ba8 + 2cfe: 6e0887e3 beqz a7,3bec if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 2cbe: fff8871b addiw a4,a7,-1 - 2cc2: 800007b7 lui a5,0x80000 - 2cc6: 8f5d or a4,a4,a5 - 2cc8: 2701 sext.w a4,a4 + 2d02: fff8871b addiw a4,a7,-1 + 2d06: 800007b7 lui a5,0x80000 + 2d0a: 8f5d or a4,a4,a5 + 2d0c: 2701 sext.w a4,a4 l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 2cca: 00088a9b sext.w s5,a7 - 2cce: 8a46 mv s4,a7 + 2d0e: 00088a9b sext.w s5,a7 + 2d12: 8a46 mv s4,a7 if (stbsp__real_to_str(&sn, &l, num, &dp, fv, (pr - 1) | 0x80000000)) - 2cd0: 10d4 addi a3,sp,100 - 2cd2: 0110 addi a2,sp,128 - 2cd4: 108c addi a1,sp,96 - 2cd6: 18a8 addi a0,sp,120 - 2cd8: f01e sd t2,32(sp) - 2cda: ec1a sd t1,24(sp) - 2cdc: e872 sd t3,16(sp) - 2cde: cdcfe0ef jal 11ba - 2ce2: 6e42 ld t3,16(sp) - 2ce4: 6362 ld t1,24(sp) - 2ce6: 7382 ld t2,32(sp) - 2ce8: 4281 li t0,0 - 2cea: c509 beqz a0,2cf4 + 2d14: 10d4 addi a3,sp,100 + 2d16: 0110 addi a2,sp,128 + 2d18: 108c addi a1,sp,96 + 2d1a: 18a8 addi a0,sp,120 + 2d1c: f01e sd t2,32(sp) + 2d1e: ec1a sd t1,24(sp) + 2d20: e872 sd t3,16(sp) + 2d22: cdcfe0ef jal 11fe + 2d26: 6e42 ld t3,16(sp) + 2d28: 6362 ld t1,24(sp) + 2d2a: 7382 ld t2,32(sp) + 2d2c: 4281 li t0,0 + 2d2e: c509 beqz a0,2d38 fl |= STBSP__NEGATIVE; - 2cec: 080e6e13 ori t3,t3,128 - 2cf0: 08000293 li t0,128 + 2d30: 080e6e13 ori t3,t3,128 + 2d34: 08000293 li t0,128 if (l > (stbsp__uint32)pr) - 2cf4: 5806 lw a6,96(sp) - 2cf6: 010af463 bgeu s5,a6,2cfe + 2d38: 5806 lw a6,96(sp) + 2d3a: 010af463 bgeu s5,a6,2d42 l = pr; - 2cfa: d0d6 sw s5,96(sp) - 2cfc: 8856 mv a6,s5 + 2d3e: d0d6 sw s5,96(sp) + 2d40: 8856 mv a6,s5 while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2cfe: 4705 li a4,1 + 2d42: 4705 li a4,1 if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2d00: 5796 lw a5,100(sp) + 2d44: 5796 lw a5,100(sp) while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2d02: 01076463 bltu a4,a6,2d0a - 2d06: 1800106f j 3e86 - 2d0a: 7be6 ld s7,120(sp) - 2d0c: fff8071b addiw a4,a6,-1 - 2d10: 1702 slli a4,a4,0x20 - 2d12: 9301 srli a4,a4,0x20 - 2d14: 001a0e9b addiw t4,s4,1 - 2d18: 75e2 ld a1,56(sp) - 2d1a: 8ade mv s5,s7 - 2d1c: 975e add a4,a4,s7 - 2d1e: 410e8ebb subw t4,t4,a6 - 2d22: 88d2 mv a7,s4 - 2d24: 86c2 mv a3,a6 - 2d26: 4f01 li t5,0 - 2d28: 03000f93 li t6,48 - 2d2c: e842 sd a6,16(sp) - 2d2e: a809 j 2d40 + 2d46: 01076463 bltu a4,a6,2d4e + 2d4a: 1800106f j 3eca + 2d4e: 7be6 ld s7,120(sp) + 2d50: fff8071b addiw a4,a6,-1 + 2d54: 1702 slli a4,a4,0x20 + 2d56: 9301 srli a4,a4,0x20 + 2d58: 001a0e9b addiw t4,s4,1 + 2d5c: 75e2 ld a1,56(sp) + 2d5e: 8ade mv s5,s7 + 2d60: 975e add a4,a4,s7 + 2d62: 410e8ebb subw t4,t4,a6 + 2d66: 88d2 mv a7,s4 + 2d68: 86c2 mv a3,a6 + 2d6a: 4f01 li t5,0 + 2d6c: 03000f93 li t6,48 + 2d70: e842 sd a6,16(sp) + 2d72: a809 j 2d84 --pr; - 2d30: 38fd addiw a7,a7,-1 + 2d74: 38fd addiw a7,a7,-1 while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2d32: 211e80e3 beq t4,a7,3732 - 2d36: 177d addi a4,a4,-1 # 6fff - 2d38: 4f05 li t5,1 - 2d3a: 1e088ce3 beqz a7,3732 + 2d76: 211e80e3 beq t4,a7,3776 + 2d7a: 177d addi a4,a4,-1 # 6fff + 2d7c: 4f05 li t5,1 + 2d7e: 1e088ce3 beqz a7,3776 --l; - 2d3e: 85b6 mv a1,a3 + 2d82: 85b6 mv a1,a3 while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 2d40: 00074803 lbu a6,0(a4) - 2d44: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff723f> - 2d48: 0006851b sext.w a0,a3 - 2d4c: 2581 sext.w a1,a1 - 2d4e: 0006069b sext.w a3,a2 - 2d52: fdf80fe3 beq a6,t6,2d30 - 2d56: 6842 ld a6,16(sp) - 2d58: fc2e sd a1,56(sp) - 2d5a: 86c2 mv a3,a6 - 2d5c: 000f0463 beqz t5,2d64 - 2d60: d0ae sw a1,96(sp) - 2d62: 86ae mv a3,a1 + 2d84: 00074803 lbu a6,0(a4) + 2d88: fff6861b addiw a2,a3,-1 # ffffff <_ZSt4cerr+0xff71bf> + 2d8c: 0006851b sext.w a0,a3 + 2d90: 2581 sext.w a1,a1 + 2d92: 0006069b sext.w a3,a2 + 2d96: fdf80fe3 beq a6,t6,2d74 + 2d9a: 6842 ld a6,16(sp) + 2d9c: fc2e sd a1,56(sp) + 2d9e: 86c2 mv a3,a6 + 2da0: 000f0463 beqz t5,2da8 + 2da4: d0ae sw a1,96(sp) + 2da6: 86ae mv a3,a1 if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 2d64: 5775 li a4,-3 - 2d66: 08e7cee3 blt a5,a4,3602 - 2d6a: 08fa4be3 blt s4,a5,3600 + 2da8: 5775 li a4,-3 + 2daa: 08e7cee3 blt a5,a4,3646 + 2dae: 08fa4be3 blt s4,a5,3644 pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2d6e: 0005071b sext.w a4,a0 + 2db2: 0005071b sext.w a4,a0 if (dp > 0) { - 2d72: 7ef057e3 blez a5,3d60 + 2db6: 7ef057e3 blez a5,3da4 pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 2d76: 4881 li a7,0 - 2d78: 00e7d463 bge a5,a4,2d80 - 2d7c: 40f508bb subw a7,a0,a5 + 2dba: 4881 li a7,0 + 2dbc: 00e7d463 bge a5,a4,2dc4 + 2dc0: 40f508bb subw a7,a0,a5 tail[0] = 0; - 2d80: 06010823 sb zero,112(sp) + 2dc4: 06010823 sb zero,112(sp) if (fl & STBSP__NEGATIVE) { - 2d84: 20029463 bnez t0,2f8c + 2dc8: 20029463 bnez t0,2fd0 } else if (fl & STBSP__LEADINGSPACE) { - 2d88: 004e7713 andi a4,t3,4 - 2d8c: 000715e3 bnez a4,3596 + 2dcc: 004e7713 andi a4,t3,4 + 2dd0: 000715e3 bnez a4,35da } else if (fl & STBSP__LEADINGPLUS) { - 2d90: 002e7713 andi a4,t3,2 - 2d94: 660719e3 bnez a4,3c06 + 2dd4: 002e7713 andi a4,t3,2 + 2dd8: 660719e3 bnez a4,3c4a sign[0] = 0; - 2d98: 06010423 sb zero,104(sp) - 2d9c: aaed j 2f96 + 2ddc: 06010423 sb zero,104(sp) + 2de0: aaed j 2fda h = (f[0] == 'A') ? hexu : hex; - 2d9e: 04100713 li a4,65 - 2da2: 00005597 auipc a1,0x5 - 2da6: 1ae58593 addi a1,a1,430 # 7f50 - 2daa: 00e783e3 beq a5,a4,35b0 + 2de2: 04100713 li a4,65 + 2de6: 00005597 auipc a1,0x5 + 2dea: 1ea58593 addi a1,a1,490 # 7fd0 + 2dee: 00e783e3 beq a5,a4,35f4 fv = va_arg(va, double); - 2dae: 008b8693 addi a3,s7,8 + 2df2: 008b8693 addi a3,s7,8 if (pr == -1) - 2db2: 577d li a4,-1 + 2df6: 577d li a4,-1 fv = va_arg(va, double); - 2db4: e0b6 sd a3,64(sp) - 2db6: 000bb783 ld a5,0(s7) + 2df8: e0b6 sd a3,64(sp) + 2dfa: 000bb783 ld a5,0(s7) if (pr == -1) - 2dba: 7ee88963 beq a7,a4,35ac + 2dfe: 7ee88963 beq a7,a4,35f0 d = value; STBSP__COPYFP(b, d); *bits = b & ((((stbsp__uint64)1) << 52) - 1); *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 2dbe: 4347d613 srai a2,a5,0x34 + 2e02: 4347d613 srai a2,a5,0x34 *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 2dc2: 00c79513 slli a0,a5,0xc + 2e06: 00c79513 slli a0,a5,0xc *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 2dc6: 7ff67613 andi a2,a2,2047 + 2e0a: 7ff67613 andi a2,a2,2047 *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 2dca: 8131 srli a0,a0,0xc + 2e0e: 8131 srli a0,a0,0xc *expo = (stbsp__int32)(((b >> 52) & 2047) - 1023); - 2dcc: c016061b addiw a2,a2,-1023 + 2e10: c016061b addiw a2,a2,-1023 if (stbsp__real_to_parts((stbsp__int64 *)&n64, &dp, fv)) - 2dd0: 7a07c863 bltz a5,3580 + 2e14: 7a07c863 bltz a5,35c4 } else if (fl & STBSP__LEADINGSPACE) { - 2dd4: 004e7793 andi a5,t3,4 - 2dd8: 60078ee3 beqz a5,3bf4 - 2ddc: 6789 lui a5,0x2 - 2dde: 2785 addiw a5,a5,1 # 2001 <_vscanf_core.constprop.0+0x6b9> + 2e18: 004e7793 andi a5,t3,4 + 2e1c: 60078ee3 beqz a5,3c38 + 2e20: 6789 lui a5,0x2 + 2e22: 2785 addiw a5,a5,1 # 2001 <_vscanf_core.constprop.0+0x675> sign[0] = 1; - 2de0: 06f11423 sh a5,104(sp) - 2de4: 468d li a3,3 - 2de6: 4a0d li s4,3 - 2de8: 4809 li a6,2 + 2e24: 06f11423 sh a5,104(sp) + 2e28: 468d li a3,3 + 2e2a: 4a0d li s4,3 + 2e2c: 4809 li a6,2 n64 |= (((stbsp__uint64)1) << 52); - 2dea: 4705 li a4,1 - 2dec: 1752 slli a4,a4,0x34 + 2e2e: 4705 li a4,1 + 2e30: 1752 slli a4,a4,0x34 if (dp == -1023) - 2dee: c0100793 li a5,-1023 + 2e32: c0100793 li a5,-1023 n64 |= (((stbsp__uint64)1) << 52); - 2df2: 8f49 or a4,a4,a0 + 2e36: 8f49 or a4,a4,a0 if (dp == -1023) - 2df4: 5cf600e3 beq a2,a5,3bb4 + 2e38: 5cf600e3 beq a2,a5,3bf8 if (pr < 15) - 2df8: 4539 li a0,14 + 2e3c: 4539 li a0,14 n64 <<= (64 - 56); - 2dfa: 00871793 slli a5,a4,0x8 + 2e3e: 00871793 slli a5,a4,0x8 if (pr < 15) - 2dfe: 251546e3 blt a0,a7,384a + 2e42: 251546e3 blt a0,a7,388e n64 += ((((stbsp__uint64)8) << 56) >> (pr * 4)); - 2e02: 4705 li a4,1 - 2e04: 0028951b slliw a0,a7,0x2 - 2e08: 176e slli a4,a4,0x3b - 2e0a: 00a75733 srl a4,a4,a0 - 2e0e: 973e add a4,a4,a5 + 2e46: 4705 li a4,1 + 2e48: 0028951b slliw a0,a7,0x2 + 2e4c: 176e slli a4,a4,0x3b + 2e4e: 00a75733 srl a4,a4,a0 + 2e52: 973e add a4,a4,a5 *s++ = h[(n64 >> 60) & 15]; - 2e10: 03c75793 srli a5,a4,0x3c - 2e14: 97ae add a5,a5,a1 - 2e16: 0007c503 lbu a0,0(a5) + 2e54: 03c75793 srli a5,a4,0x3c + 2e58: 97ae add a5,a5,a1 + 2e5a: 0007c503 lbu a0,0(a5) lead[1 + lead[0]] = '0'; - 2e1a: 22080793 addi a5,a6,544 - 2e1e: 06010813 addi a6,sp,96 - 2e22: 97c2 add a5,a5,a6 - 2e24: 03000813 li a6,48 - 2e28: df078423 sb a6,-536(a5) + 2e5e: 22080793 addi a5,a6,544 + 2e62: 06010813 addi a6,sp,96 + 2e66: 97c2 add a5,a5,a6 + 2e68: 03000813 li a6,48 + 2e6c: df078423 sb a6,-536(a5) lead[2 + lead[0]] = 'x'; - 2e2c: 22068793 addi a5,a3,544 - 2e30: 1094 addi a3,sp,96 - 2e32: 96be add a3,a3,a5 - 2e34: 07800793 li a5,120 - 2e38: def68423 sb a5,-536(a3) + 2e70: 22068793 addi a5,a3,544 + 2e74: 1094 addi a3,sp,96 + 2e76: 96be add a3,a3,a5 + 2e78: 07800793 li a5,120 + 2e7c: def68423 sb a5,-536(a3) lead[0] += 2; - 2e3c: 07410423 sb s4,104(sp) + 2e80: 07410423 sb s4,104(sp) *s++ = h[(n64 >> 60) & 15]; - 2e40: 0ca10023 sb a0,192(sp) + 2e84: 0ca10023 sb a0,192(sp) if (pr) - 2e44: 740893e3 bnez a7,3d8a + 2e88: 740893e3 bnez a7,3dce sn = s; - 2e48: 0c110793 addi a5,sp,193 - 2e4c: fcbe sd a5,120(sp) - 2e4e: 4701 li a4,0 - 2e50: 4501 li a0,0 - 2e52: 4305 li t1,1 - 2e54: 4685 li a3,1 + 2e8c: 0c110793 addi a5,sp,193 + 2e90: fcbe sd a5,120(sp) + 2e92: 4701 li a4,0 + 2e94: 4501 li a0,0 + 2e96: 4305 li t1,1 + 2e98: 4685 li a3,1 tail[1] = h[17]; - 2e56: 0115c583 lbu a1,17(a1) + 2e9a: 0115c583 lbu a1,17(a1) tail[2] = '+'; - 2e5a: 02b00793 li a5,43 + 2e9e: 02b00793 li a5,43 tail[1] = h[17]; - 2e5e: 06b108a3 sb a1,113(sp) + 2ea2: 06b108a3 sb a1,113(sp) if (dp < 0) { - 2e62: 00065663 bgez a2,2e6e + 2ea6: 00065663 bgez a2,2eb2 dp = -dp; - 2e66: 40c0063b negw a2,a2 + 2eaa: 40c0063b negw a2,a2 tail[2] = '-'; - 2e6a: 02d00793 li a5,45 + 2eae: 02d00793 li a5,45 tail[n] = '0' + dp % 10; - 2e6e: 4829 li a6,10 - 2e70: 030665bb remw a1,a2,a6 - 2e74: 06f10923 sb a5,114(sp) + 2eb2: 4829 li a6,10 + 2eb4: 030665bb remw a1,a2,a6 + 2eb8: 06f10923 sb a5,114(sp) n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2e78: 3e700e93 li t4,999 + 2ebc: 3e700e93 li t4,999 tail[n] = '0' + dp % 10; - 2e7c: 0305859b addiw a1,a1,48 - 2e80: 0ff5f593 zext.b a1,a1 + 2ec0: 0305859b addiw a1,a1,48 + 2ec4: 0ff5f593 zext.b a1,a1 n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 2e84: 18cec3e3 blt t4,a2,380a - 2e88: 06300e93 li t4,99 - 2e8c: 54cec1e3 blt t4,a2,3bce - 2e90: 4ea5 li t4,9 - 2e92: 72ced6e3 bge t4,a2,3dbe + 2ec8: 18cec3e3 blt t4,a2,384e + 2ecc: 06300e93 li t4,99 + 2ed0: 54cec1e3 blt t4,a2,3c12 + 2ed4: 4ea5 li t4,9 + 2ed6: 72ced6e3 bge t4,a2,3e02 dp /= 10; - 2e96: 030647bb divw a5,a2,a6 + 2eda: 030647bb divw a5,a2,a6 tail[0] = (char)n; - 2e9a: 4611 li a2,4 - 2e9c: 06c10823 sb a2,112(sp) + 2ede: 4611 li a2,4 + 2ee0: 06c10823 sb a2,112(sp) tail[n] = '0' + dp % 10; - 2ea0: 06b10a23 sb a1,116(sp) - 2ea4: 4811 li a6,4 - 2ea6: 4f91 li t6,4 - 2ea8: 0307879b addiw a5,a5,48 - 2eac: 06f109a3 sb a5,115(sp) + 2ee4: 06b10a23 sb a1,116(sp) + 2ee8: 4811 li a6,4 + 2eea: 4f91 li t6,4 + 2eec: 0307879b addiw a5,a5,48 + 2ef0: 06f109a3 sb a5,115(sp) n = pr + lead[0] + tail[0] + tz; - 2eb0: 006a07bb addw a5,s4,t1 - 2eb4: 010787bb addw a5,a5,a6 - 2eb8: 0117863b addw a2,a5,a7 + 2ef4: 006a07bb addw a5,s4,t1 + 2ef8: 010787bb addw a5,a5,a6 + 2efc: 0117863b addw a2,a5,a7 dp = (int)(s - sn); - 2ebc: d2aa sw a0,100(sp) + 2f00: d2aa sw a0,100(sp) l = (int)(s - (num + 64)); - 2ebe: d0b6 sw a3,96(sp) + 2f02: d0b6 sw a3,96(sp) n = pr + lead[0] + tail[0] + tz; - 2ec0: 87b2 mv a5,a2 + 2f04: 87b2 mv a5,a2 if ((fl & STBSP__LEFTJUST) == 0) { - 2ec2: 001e7513 andi a0,t3,1 + 2f06: 001e7513 andi a0,t3,1 if (fw < (stbsp__int32)n) - 2ec6: 835a mv t1,s6 - 2ec8: 00cb5363 bge s6,a2,2ece - 2ecc: 8332 mv t1,a2 + 2f0a: 835a mv t1,s6 + 2f0c: 00cb5363 bge s6,a2,2f12 + 2f10: 8332 mv t1,a2 cs = 1 + (3 << 24); - 2ece: 030002b7 lui t0,0x3000 + 2f12: 030002b7 lui t0,0x3000 fw -= n; - 2ed2: 40f3033b subw t1,t1,a5 + 2f16: 40f3033b subw t1,t1,a5 cs = 1 + (3 << 24); - 2ed6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7241> + 2f1a: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff71c1> s = num + 64; - 2ed8: 0c010a93 addi s5,sp,192 + 2f1c: 0c010a93 addi s5,sp,192 goto scopy; - 2edc: b311 j 2be0 + 2f20: b311 j 2c24 h = (f[0] == 'B') ? hexu : hex; - 2ede: 04200713 li a4,66 - 2ee2: 00005817 auipc a6,0x5 - 2ee6: 06e80813 addi a6,a6,110 # 7f50 - 2eea: 6ce78963 beq a5,a4,35bc + 2f22: 04200713 li a4,66 + 2f26: 00005817 auipc a6,0x5 + 2f2a: 0aa80813 addi a6,a6,170 # 7fd0 + 2f2e: 6ce78963 beq a5,a4,3600 if (fl & STBSP__LEADING_0X) { - 2eee: 008e7793 andi a5,t3,8 - 2ef2: 66079e63 bnez a5,356e + 2f32: 008e7793 andi a5,t3,8 + 2f36: 66079e63 bnez a5,35b2 lead[0] = 0; - 2ef6: 06010423 sb zero,104(sp) + 2f3a: 06010423 sb zero,104(sp) l = (8 << 4) | (1 << 8); - 2efa: 18000793 li a5,384 - 2efe: d0be sw a5,96(sp) + 2f3e: 18000793 li a5,384 + 2f42: d0be sw a5,96(sp) if (fl & STBSP__INTMAX) { - 2f00: 020e7713 andi a4,t3,32 + 2f44: 020e7713 andi a4,t3,32 goto radixnum; - 2f04: b979 j 2ba2 + 2f48: b979 j 2be6 *s = (char)va_arg(va, int); - 2f06: 000ba783 lw a5,0(s7) + 2f4a: 000ba783 lw a5,0(s7) l = 1; - 2f0a: 4705 li a4,1 - 2f0c: d0ba sw a4,96(sp) + 2f4e: 4705 li a4,1 + 2f50: d0ba sw a4,96(sp) *s = (char)va_arg(va, int); - 2f0e: 26f10fa3 sb a5,639(sp) - 2f12: 008b8793 addi a5,s7,8 + 2f52: 26f10fa3 sb a5,639(sp) + 2f56: 008b8793 addi a5,s7,8 lead[0] = 0; - 2f16: 06010423 sb zero,104(sp) + 2f5a: 06010423 sb zero,104(sp) tail[0] = 0; - 2f1a: 06010823 sb zero,112(sp) + 2f5e: 06010823 sb zero,112(sp) dp = 0; - 2f1e: d282 sw zero,100(sp) + 2f62: d282 sw zero,100(sp) *s = (char)va_arg(va, int); - 2f20: e0be sd a5,64(sp) + 2f64: e0be sd a5,64(sp) if ((fl & STBSP__LEFTJUST) == 0) { - 2f22: 001e7513 andi a0,t3,1 + 2f66: 001e7513 andi a0,t3,1 if (fw < (stbsp__int32)n) - 2f26: 835a mv t1,s6 - 2f28: 69605063 blez s6,35a8 + 2f6a: 835a mv t1,s6 + 2f6c: 69605063 blez s6,35ec fw -= n; - 2f2c: 337d addiw t1,t1,-1 + 2f70: 337d addiw t1,t1,-1 goto scopy; - 2f2e: 4701 li a4,0 - 2f30: 4f81 li t6,0 - 2f32: 4685 li a3,1 - 2f34: 4a01 li s4,0 + 2f72: 4701 li a4,0 + 2f74: 4f81 li t6,0 + 2f76: 4685 li a3,1 + 2f78: 4a01 li s4,0 cs = 0; - 2f36: 4281 li t0,0 + 2f7a: 4281 li t0,0 s = num + STBSP__NUMSZ - 1; - 2f38: 27f10a93 addi s5,sp,639 + 2f7c: 27f10a93 addi s5,sp,639 tz = 0; - 2f3c: 4881 li a7,0 + 2f80: 4881 li a7,0 goto scopy; - 2f3e: b14d j 2be0 + 2f82: b14d j 2c24 fv = va_arg(va, double); - 2f40: 008b8713 addi a4,s7,8 + 2f84: 008b8713 addi a4,s7,8 if (fl & STBSP__METRIC_SUFFIX) { - 2f44: 100e7793 andi a5,t3,256 + 2f88: 100e7793 andi a5,t3,256 fv = va_arg(va, double); - 2f48: e0ba sd a4,64(sp) - 2f4a: 000bb507 fld fa0,0(s7) + 2f8c: e0ba sd a4,64(sp) + 2f8e: 000bb507 fld fa0,0(s7) if (fl & STBSP__METRIC_SUFFIX) { - 2f4e: be0795e3 bnez a5,2b38 + 2f92: be0795e3 bnez a5,2b7c if (pr == -1) - 2f52: 57fd li a5,-1 + 2f96: 57fd li a5,-1 if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 2f54: 0008871b sext.w a4,a7 + 2f98: 0008871b sext.w a4,a7 if (pr == -1) - 2f58: 00f89463 bne a7,a5,2f60 - 2f5c: 4719 li a4,6 + 2f9c: 00f89463 bne a7,a5,2fa4 + 2fa0: 4719 li a4,6 pr = 6; // default is 6 - 2f5e: 4899 li a7,6 + 2fa2: 4899 li a7,6 if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 2f60: 10d4 addi a3,sp,100 - 2f62: 0110 addi a2,sp,128 - 2f64: 108c addi a1,sp,96 - 2f66: 18a8 addi a0,sp,120 - 2f68: f01e sd t2,32(sp) - 2f6a: ec72 sd t3,24(sp) - 2f6c: e846 sd a7,16(sp) - 2f6e: a4cfe0ef jal 11ba - 2f72: 6e62 ld t3,24(sp) - 2f74: 68c2 ld a7,16(sp) - 2f76: 7382 ld t2,32(sp) + 2fa4: 10d4 addi a3,sp,100 + 2fa6: 0110 addi a2,sp,128 + 2fa8: 108c addi a1,sp,96 + 2faa: 18a8 addi a0,sp,120 + 2fac: f01e sd t2,32(sp) + 2fae: ec72 sd t3,24(sp) + 2fb0: e846 sd a7,16(sp) + 2fb2: a4cfe0ef jal 11fe + 2fb6: 6e62 ld t3,24(sp) + 2fb8: 68c2 ld a7,16(sp) + 2fba: 7382 ld t2,32(sp) if (dp == STBSP__SPECIAL) { - 2f78: 5796 lw a5,100(sp) + 2fbc: 5796 lw a5,100(sp) if ((stbsp__int32)(l + n) > pr) - 2f7a: 5686 lw a3,96(sp) + 2fbe: 5686 lw a3,96(sp) if (fl & STBSP__NEGATIVE) { - 2f7c: 080e7293 andi t0,t3,128 + 2fc0: 080e7293 andi t0,t3,128 if (stbsp__real_to_str(&sn, &l, num, &dp, fv, pr)) - 2f80: e00500e3 beqz a0,2d80 + 2fc4: e00500e3 beqz a0,2dc4 fl |= STBSP__NEGATIVE; - 2f84: 080e6e13 ori t3,t3,128 + 2fc8: 080e6e13 ori t3,t3,128 tail[0] = 0; - 2f88: 06010823 sb zero,112(sp) + 2fcc: 06010823 sb zero,112(sp) sign[0] = 1; - 2f8c: 670d lui a4,0x3 - 2f8e: d0170713 addi a4,a4,-767 # 2d01 - 2f92: 06e11423 sh a4,104(sp) + 2fd0: 670d lui a4,0x3 + 2fd2: d0170713 addi a4,a4,-767 # 2d01 + 2fd6: 06e11423 sh a4,104(sp) if (dp == STBSP__SPECIAL) { - 2f96: 671d lui a4,0x7 - 2f98: 7ce78963 beq a5,a4,376a + 2fda: 671d lui a4,0x7 + 2fdc: 7ce78963 beq a5,a4,37ae if (dp <= 0) { - 2f9c: 46f05fe3 blez a5,3c1a + 2fe0: 46f05fe3 blez a5,3c5e cs = (fl & STBSP__TRIPLET_COMMA) ? ((600 - (stbsp__uint32)dp) % 3) : 0; - 2fa0: 040e7313 andi t1,t3,64 - 2fa4: 00078e9b sext.w t4,a5 - 2fa8: 4581 li a1,0 - 2faa: 00030963 beqz t1,2fbc - 2fae: 25800593 li a1,600 - 2fb2: 41d585bb subw a1,a1,t4 - 2fb6: 470d li a4,3 - 2fb8: 02e5f5bb remuw a1,a1,a4 + 2fe4: 040e7313 andi t1,t3,64 + 2fe8: 00078e9b sext.w t4,a5 + 2fec: 4581 li a1,0 + 2fee: 00030963 beqz t1,3000 + 2ff2: 25800593 li a1,600 + 2ff6: 41d585bb subw a1,a1,t4 + 2ffa: 470d li a4,3 + 2ffc: 02e5f5bb remuw a1,a1,a4 *s++ = stbsp__comma; - 2fbc: 00005a17 auipc s4,0x5 - 2fc0: eaca0a13 addi s4,s4,-340 # 7e68 + 3000: 00005a17 auipc s4,0x5 + 3004: ee8a0a13 addi s4,s4,-280 # 7ee8 s = (char *)sn; - 2fc4: 7f66 ld t5,120(sp) + 3008: 7f66 ld t5,120(sp) *s++ = stbsp__comma; - 2fc6: 0cda4283 lbu t0,205(s4) + 300a: 0cda4283 lbu t0,205(s4) s = num + 64; - 2fca: 0c010a93 addi s5,sp,192 + 300e: 0c010a93 addi s5,sp,192 if ((stbsp__uint32)dp >= l) { - 2fce: 44defb63 bgeu t4,a3,3424 + 3012: 44defb63 bgeu t4,a3,3468 n = 0; - 2fd2: 4501 li a0,0 + 3016: 4501 li a0,0 s = num + 64; - 2fd4: 8756 mv a4,s5 + 3018: 8756 mv a4,s5 if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 2fd6: 4b91 li s7,4 - 2fd8: a015 j 2ffc - 2fda: 8642 mv a2,a6 - 2fdc: 883a mv a6,a4 - 2fde: 8732 mv a4,a2 + 301a: 4b91 li s7,4 + 301c: a015 j 3040 + 301e: 8642 mv a2,a6 + 3020: 883a mv a6,a4 + 3022: 8732 mv a4,a2 *s++ = sn[n]; - 2fe0: 02051613 slli a2,a0,0x20 - 2fe4: 9201 srli a2,a2,0x20 - 2fe6: 967a add a2,a2,t5 - 2fe8: 00064f83 lbu t6,0(a2) + 3024: 02051613 slli a2,a0,0x20 + 3028: 9201 srli a2,a2,0x20 + 302a: 967a add a2,a2,t5 + 302c: 00064f83 lbu t6,0(a2) ++n; - 2fec: 0015061b addiw a2,a0,1 - 2ff0: 0006051b sext.w a0,a2 + 3030: 0015061b addiw a2,a0,1 + 3034: 0006051b sext.w a0,a2 *s++ = sn[n]; - 2ff4: fff70fa3 sb t6,-1(a4) # 6fff + 3038: fff70fa3 sb t6,-1(a4) # 6fff if (n >= (stbsp__uint32)dp) - 2ff8: 7bd57563 bgeu a0,t4,37a2 + 303c: 7bd57563 bgeu a0,t4,37e6 *s++ = stbsp__comma; - 2ffc: 00170813 addi a6,a4,1 + 3040: 00170813 addi a6,a4,1 if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3000: fc030de3 beqz t1,2fda - 3004: 2585 addiw a1,a1,1 - 3006: fd759ae3 bne a1,s7,2fda + 3044: fc030de3 beqz t1,301e + 3048: 2585 addiw a1,a1,1 + 304a: fd759ae3 bne a1,s7,301e *s++ = stbsp__comma; - 300a: fe580fa3 sb t0,-1(a6) - 300e: 0709 addi a4,a4,2 + 304e: fe580fa3 sb t0,-1(a6) + 3052: 0709 addi a4,a4,2 if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3010: 4585 li a1,1 - 3012: b7f9 j 2fe0 + 3054: 4585 li a1,1 + 3056: b7f9 j 3024 *d = tlen + (int)(bf - buf); - 3014: 000bb703 ld a4,0(s7) - 3018: 412407b3 sub a5,s0,s2 - 301c: 01a787bb addw a5,a5,s10 + 3058: 000bb703 ld a4,0(s7) + 305c: 412407b3 sub a5,s0,s2 + 3060: 01a787bb addw a5,a5,s10 int *d = va_arg(va, int *); - 3020: 008b8693 addi a3,s7,8 - 3024: e0b6 sd a3,64(sp) + 3064: 008b8693 addi a3,s7,8 + 3068: e0b6 sd a3,64(sp) *d = tlen + (int)(bf - buf); - 3026: c31c sw a5,0(a4) + 306a: c31c sw a5,0(a4) } break; - 3028: bae5 j 2a20 + 306c: bae5 j 2a64 if (fl & STBSP__LEADING_0X) { - 302a: 008e7793 andi a5,t3,8 - 302e: 50079b63 bnez a5,3544 + 306e: 008e7793 andi a5,t3,8 + 3072: 50079b63 bnez a5,3588 lead[0] = 0; - 3032: 06010423 sb zero,104(sp) + 3076: 06010423 sb zero,104(sp) l = (3 << 4) | (3 << 8); - 3036: 33000793 li a5,816 - 303a: d0be sw a5,96(sp) + 307a: 33000793 li a5,816 + 307e: d0be sw a5,96(sp) if (fl & STBSP__INTMAX) { - 303c: 020e7713 andi a4,t3,32 + 3080: 020e7713 andi a4,t3,32 h = hexu; - 3040: 00005817 auipc a6,0x5 - 3044: ef880813 addi a6,a6,-264 # 7f38 + 3084: 00005817 auipc a6,0x5 + 3088: f3480813 addi a6,a6,-204 # 7fb8 goto radixnum; - 3048: bea9 j 2ba2 + 308c: bea9 j 2be6 fl &= ~STBSP__LEADINGZERO; // 'p' only prints the pointer with zeros - 304a: fefe7e13 andi t3,t3,-17 - 304e: 020e6e13 ori t3,t3,32 - 3052: 02000713 li a4,32 + 308e: fefe7e13 andi t3,t3,-17 + 3092: 020e6e13 ori t3,t3,32 + 3096: 02000713 li a4,32 pr = sizeof(void *) * 2; - 3056: 48c1 li a7,16 + 309a: 48c1 li a7,16 h = (f[0] == 'X') ? hexu : hex; - 3058: 00005817 auipc a6,0x5 - 305c: ef880813 addi a6,a6,-264 # 7f50 - 3060: be05 j 2b90 + 309c: 00005817 auipc a6,0x5 + 30a0: f3480813 addi a6,a6,-204 # 7fd0 + 30a4: be05 j 2bd4 s = va_arg(va, char *); - 3062: 000bba83 ld s5,0(s7) - 3066: 008b8793 addi a5,s7,8 - 306a: e0be sd a5,64(sp) + 30a6: 000bba83 ld s5,0(s7) + 30aa: 008b8793 addi a5,s7,8 + 30ae: e0be sd a5,64(sp) if (s == 0) - 306c: 360a8ee3 beqz s5,3be8 + 30b0: 360a8ee3 beqz s5,3c2c if (((stbsp__uintptr)sn & 3) == 0) - 3070: 003af793 andi a5,s5,3 + 30b4: 003af793 andi a5,s5,3 l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 3074: 5208c663 bltz a7,35a0 - 3078: 0008869b sext.w a3,a7 + 30b8: 5208c663 bltz a7,35e4 + 30bc: 0008869b sext.w a3,a7 if (((stbsp__uintptr)sn & 3) == 0) - 307c: 2a0782e3 beqz a5,3b20 + 30c0: 2a0782e3 beqz a5,3b64 if (!limit || *sn == 0) - 3080: 5a068b63 beqz a3,3636 + 30c4: 5a068b63 beqz a3,367a if (((stbsp__uintptr)sn & 3) == 0) - 3084: 87d6 mv a5,s5 - 3086: a801 j 3096 + 30c8: 87d6 mv a5,s5 + 30ca: a801 j 30da ++sn; - 3088: 0785 addi a5,a5,1 + 30cc: 0785 addi a5,a5,1 if (((stbsp__uintptr)sn & 3) == 0) - 308a: 0037f713 andi a4,a5,3 + 30ce: 0037f713 andi a4,a5,3 --limit; - 308e: 36fd addiw a3,a3,-1 + 30d2: 36fd addiw a3,a3,-1 if (((stbsp__uintptr)sn & 3) == 0) - 3090: 280709e3 beqz a4,3b22 + 30d4: 280709e3 beqz a4,3b66 if (!limit || *sn == 0) - 3094: c681 beqz a3,309c - 3096: 0007c703 lbu a4,0(a5) - 309a: f77d bnez a4,3088 + 30d8: c681 beqz a3,30e0 + 30da: 0007c703 lbu a4,0(a5) + 30de: f77d bnez a4,30cc return (stbsp__uint32)(sn - s); - 309c: 415787b3 sub a5,a5,s5 - 30a0: 0007869b sext.w a3,a5 + 30e0: 415787b3 sub a5,a5,s5 + 30e4: 0007869b sext.w a3,a5 if (pr < (stbsp__int32)l) - 30a4: fff6c713 not a4,a3 - 30a8: 977d srai a4,a4,0x3f - 30aa: 8f7d and a4,a4,a5 - 30ac: 0007079b sext.w a5,a4 + 30e8: fff6c713 not a4,a3 + 30ec: 977d srai a4,a4,0x3f + 30ee: 8f7d and a4,a4,a5 + 30f0: 0007079b sext.w a5,a4 n = pr + lead[0] + tail[0] + tz; - 30b0: 863e mv a2,a5 + 30f4: 863e mv a2,a5 pr -= l; - 30b2: 9f15 subw a4,a4,a3 + 30f6: 9f15 subw a4,a4,a3 l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 30b4: d0b6 sw a3,96(sp) + 30f8: d0b6 sw a3,96(sp) lead[0] = 0; - 30b6: 06010423 sb zero,104(sp) + 30fa: 06010423 sb zero,104(sp) tail[0] = 0; - 30ba: 06010823 sb zero,112(sp) + 30fe: 06010823 sb zero,112(sp) dp = 0; - 30be: d282 sw zero,100(sp) + 3102: d282 sw zero,100(sp) if ((fl & STBSP__LEFTJUST) == 0) { - 30c0: 001e7513 andi a0,t3,1 + 3104: 001e7513 andi a0,t3,1 if (fw < (stbsp__int32)n) - 30c4: 835a mv t1,s6 - 30c6: 00fb5363 bge s6,a5,30cc - 30ca: 833e mv t1,a5 + 3108: 835a mv t1,s6 + 310a: 00fb5363 bge s6,a5,3110 + 310e: 833e mv t1,a5 fw -= n; - 30cc: 40c3033b subw t1,t1,a2 + 3110: 40c3033b subw t1,t1,a2 goto scopy; - 30d0: 4f81 li t6,0 - 30d2: 4a01 li s4,0 + 3114: 4f81 li t6,0 + 3116: 4a01 li s4,0 cs = 0; - 30d4: 4281 li t0,0 + 3118: 4281 li t0,0 tz = 0; - 30d6: 4881 li a7,0 + 311a: 4881 li a7,0 goto scopy; - 30d8: b621 j 2be0 + 311c: b621 j 2c24 *bf++ = stbsp__comma; - 30da: 87b2 mv a5,a2 + 311e: 87b2 mv a5,a2 cs = 0; - 30dc: 4a01 li s4,0 - 30de: e44ff06f j 2722 + 3120: 4a01 li s4,0 + 3122: e44ff06f j 2766 lead[0] -= (char)i; - 30e2: 06010423 sb zero,104(sp) + 3126: 06010423 sb zero,104(sp) while (i) { - 30e6: d38ff06f j 261e + 312a: d38ff06f j 2662 lead[0] -= (char)i; - 30ea: 06010423 sb zero,104(sp) + 312e: 06010423 sb zero,104(sp) while (i) { - 30ee: ed8ff06f j 27c6 + 3132: ed8ff06f j 280a while (i >= 4) { - 30f2: 06fadc63 bge s5,a5,316a + 3136: 06fadc63 bge s5,a5,31ae tz -= i; - 30f6: 8722 mv a4,s0 - 30f8: 0007851b sext.w a0,a5 + 313a: 8722 mv a4,s0 + 313c: 0007851b sext.w a0,a5 while (i >= 4) { - 30fc: 008785bb addw a1,a5,s0 + 3140: 008785bb addw a1,a5,s0 *(stbsp__uint32 *)bf = 0x30303030; - 3100: 01672023 sw s6,0(a4) + 3144: 01672023 sw s6,0(a4) bf += 4; - 3104: 0711 addi a4,a4,4 + 3148: 0711 addi a4,a4,4 while (i >= 4) { - 3106: 40e5863b subw a2,a1,a4 - 310a: fecacbe3 blt s5,a2,3100 - 310e: ffc5061b addiw a2,a0,-4 - 3112: 0026561b srliw a2,a2,0x2 - 3116: 0016071b addiw a4,a2,1 - 311a: 37f1 addiw a5,a5,-4 - 311c: 0026161b slliw a2,a2,0x2 - 3120: 070a slli a4,a4,0x2 - 3122: 9722 add a4,a4,s0 - 3124: 9f91 subw a5,a5,a2 + 314a: 40e5863b subw a2,a1,a4 + 314e: fecacbe3 blt s5,a2,3144 + 3152: ffc5061b addiw a2,a0,-4 + 3156: 0026561b srliw a2,a2,0x2 + 315a: 0016071b addiw a4,a2,1 + 315e: 37f1 addiw a5,a5,-4 + 3160: 0026161b slliw a2,a2,0x2 + 3164: 070a slli a4,a4,0x2 + 3166: 9722 add a4,a4,s0 + 3168: 9f91 subw a5,a5,a2 while (i) { - 3126: 843a mv s0,a4 - 3128: 80078de3 beqz a5,2942 - 312c: 1782 slli a5,a5,0x20 - 312e: 9381 srli a5,a5,0x20 - 3130: 00f70433 add s0,a4,a5 + 316a: 843a mv s0,a4 + 316c: 80078de3 beqz a5,2986 + 3170: 1782 slli a5,a5,0x20 + 3172: 9381 srli a5,a5,0x20 + 3174: 00f70433 add s0,a4,a5 *bf++ = '0'; - 3134: 0705 addi a4,a4,1 - 3136: ff470fa3 sb s4,-1(a4) + 3178: 0705 addi a4,a4,1 + 317a: ff470fa3 sb s4,-1(a4) while (i) { - 313a: fe871de3 bne a4,s0,3134 - 313e: 805ff06f j 2942 + 317e: fe871de3 bne a4,s0,3178 + 3182: 805ff06f j 2986 stbsp__cb_buf_clamp(i, pr); - 3142: 85ce mv a1,s3 + 3186: 85ce mv a1,s3 if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 3144: 4981 li s3,0 - 3146: dc049263 bnez s1,270a - 314a: b8d5 j 2a3e + 3188: 4981 li s3,0 + 318a: dc049263 bnez s1,274e + 318e: b8d5 j 2a82 STBSP__UNALIGNED(while (i >= 4) { - 314c: 4401 li s0,0 - 314e: 85be mv a1,a5 - 3150: f0ea4b63 blt s4,a4,2866 - 3154: f42ff06f j 2896 + 3190: 4401 li s0,0 + 3192: 85be mv a1,a5 + 3194: f0ea4b63 blt s4,a4,28aa + 3198: f42ff06f j 28da if ((((stbsp__uintptr)bf) & 3) == 0) - 3158: 00347713 andi a4,s0,3 + 319c: 00347713 andi a4,s0,3 stbsp__cb_buf_clamp(i, tz); - 315c: 87c6 mv a5,a7 + 31a0: 87c6 mv a5,a7 tz -= i; - 315e: 4881 li a7,0 + 31a2: 4881 li a7,0 if ((((stbsp__uintptr)bf) & 3) == 0) - 3160: fc071c63 bnez a4,2938 + 31a4: fc071c63 bnez a4,297c while (i >= 4) { - 3164: 470d li a4,3 - 3166: f8f748e3 blt a4,a5,30f6 - 316a: 8722 mv a4,s0 - 316c: b7c1 j 312c + 31a8: 470d li a4,3 + 31aa: f8f748e3 blt a4,a5,313a + 31ae: 8722 mv a4,s0 + 31b0: b7c1 j 3170 tail[0] -= (char)i; - 316e: 06010823 sb zero,112(sp) + 31b2: 06010823 sb zero,112(sp) while (i) { - 3172: b0b9 j 29c0 + 31b6: b0b9 j 2a04 while (i >= 4) { - 3174: 478d li a5,3 - 3176: 8622 mv a2,s0 - 3178: d8b7d963 bge a5,a1,270a - 317c: ffc5839b addiw t2,a1,-4 - 3180: 0023d79b srliw a5,t2,0x2 - 3184: 0017859b addiw a1,a5,1 - 3188: 058a slli a1,a1,0x2 - 318a: 942e add s0,s0,a1 + 31b8: 478d li a5,3 + 31ba: 8622 mv a2,s0 + 31bc: d8b7d963 bge a5,a1,274e + 31c0: ffc5839b addiw t2,a1,-4 + 31c4: 0023d79b srliw a5,t2,0x2 + 31c8: 0017859b addiw a1,a5,1 + 31cc: 058a slli a1,a1,0x2 + 31ce: 942e add s0,s0,a1 *(stbsp__uint32 *)bf = 0x30303030; - 318c: 01762023 sw s7,0(a2) + 31d0: 01762023 sw s7,0(a2) bf += 4; - 3190: 0611 addi a2,a2,4 + 31d4: 0611 addi a2,a2,4 while (i >= 4) { - 3192: fe861de3 bne a2,s0,318c - 3196: 0027979b slliw a5,a5,0x2 - 319a: 40f385bb subw a1,t2,a5 - 319e: d68ff06f j 2706 + 31d6: fe861de3 bne a2,s0,31d0 + 31da: 0027979b slliw a5,a5,0x2 + 31de: 40f385bb subw a1,t2,a5 + 31e2: d68ff06f j 274a while (i) { - 31a2: 85be mv a1,a5 - 31a4: ee071963 bnez a4,2896 - 31a8: f16ff06f j 28be - 31ac: 2c013a03 ld s4,704(sp) - 31b0: 2b813a83 ld s5,696(sp) - 31b4: 2b013b03 ld s6,688(sp) - 31b8: 8ca2 mv s9,s0 - 31ba: a04ff06f j 23be + 31e6: 85be mv a1,a5 + 31e8: ee071963 bnez a4,28da + 31ec: f16ff06f j 2902 + 31f0: 2c013a03 ld s4,704(sp) + 31f4: 2b813a83 ld s5,696(sp) + 31f8: 2b013b03 ld s6,688(sp) + 31fc: 8ca2 mv s9,s0 + 31fe: a04ff06f j 2402 stbsp__chk_cb_buf(1); - 31be: 2601 sext.w a2,a2 - 31c0: 1fe00793 li a5,510 - 31c4: f8c7c563 blt a5,a2,294e - 31c8: f3eff06f j 2906 + 3202: 2601 sext.w a2,a2 + 3204: 1fe00793 li a5,510 + 3208: f8c7c563 blt a5,a2,2992 + 320c: f3eff06f j 294a fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 31cc: fbfe7e13 andi t3,t3,-65 + 3210: fbfe7e13 andi t3,t3,-65 if (fw + pr) { - 31d0: 006707bb addw a5,a4,t1 + 3214: 006707bb addw a5,a4,t1 fl &= ~STBSP__TRIPLET_COMMA; // if no leading zeros, then no commas - 31d4: 2e01 sext.w t3,t3 + 3218: 2e01 sext.w t3,t3 if (fw + pr) { - 31d6: a0078be3 beqz a5,2bec + 321a: a0078be3 beqz a5,2c30 while (fw > 0) { - 31da: be605663 blez t1,25c6 + 321e: be605663 blez t1,260a *(stbsp__uint32 *)bf = 0x20202020; - 31de: 20202837 lui a6,0x20202 + 3222: 20202837 lui a6,0x20202 stbsp__cb_buf_clamp(i, fw); - 31e2: 854a mv a0,s2 - 31e4: 894e mv s2,s3 - 31e6: 69a2 ld s3,8(sp) + 3226: 854a mv a0,s2 + 3228: 894e mv s2,s3 + 322a: 69a2 ld s3,8(sp) *(stbsp__uint32 *)bf = 0x20202020; - 31e8: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201f9260> + 322c: 02080813 addi a6,a6,32 # 20202020 <_ZSt4cerr+0x201f91e0> stbsp__cb_buf_clamp(i, fw); - 31ec: ec52 sd s4,24(sp) - 31ee: f426 sd s1,40(sp) - 31f0: 87a2 mv a5,s0 - 31f2: 84ea mv s1,s10 + 3230: ec52 sd s4,24(sp) + 3232: f426 sd s1,40(sp) + 3234: 87a2 mv a5,s0 + 3236: 84ea mv s1,s10 stbsp__chk_cb_buf(1); - 31f4: 1fe00f13 li t5,510 + 3238: 1fe00f13 li t5,510 stbsp__cb_buf_clamp(i, fw); - 31f8: 8d6e mv s10,s11 + 323c: 8d6e mv s10,s11 *bf++ = ' '; - 31fa: 02000b13 li s6,32 + 323e: 02000b13 li s6,32 stbsp__cb_buf_clamp(i, fw); - 31fe: 8de6 mv s11,s9 + 3242: 8de6 mv s11,s9 while (i >= 4) { - 3200: 4b8d li s7,3 + 3244: 4b8d li s7,3 stbsp__cb_buf_clamp(i, fw); - 3202: 20000e93 li t4,512 - 3206: e846 sd a7,16(sp) - 3208: f07e sd t6,32(sp) - 320a: f836 sd a3,48(sp) - 320c: e4f2 sd t3,72(sp) - 320e: e8ba sd a4,80(sp) - 3210: ec96 sd t0,88(sp) - 3212: 841a mv s0,t1 - 3214: 8a42 mv s4,a6 - 3216: 8c9e mv s9,t2 - 3218: 0c090063 beqz s2,32d8 - 321c: 40a78633 sub a2,a5,a0 - 3220: 40ce873b subw a4,t4,a2 - 3224: 86ba mv a3,a4 - 3226: 00e45363 bge s0,a4,322c - 322a: 86a2 mv a3,s0 - 322c: 0006871b sext.w a4,a3 + 3246: 20000e93 li t4,512 + 324a: e846 sd a7,16(sp) + 324c: f07e sd t6,32(sp) + 324e: f836 sd a3,48(sp) + 3250: e4f2 sd t3,72(sp) + 3252: e8ba sd a4,80(sp) + 3254: ec96 sd t0,88(sp) + 3256: 841a mv s0,t1 + 3258: 8a42 mv s4,a6 + 325a: 8c9e mv s9,t2 + 325c: 0c090063 beqz s2,331c + 3260: 40a78633 sub a2,a5,a0 + 3264: 40ce873b subw a4,t4,a2 + 3268: 86ba mv a3,a4 + 326a: 00e45363 bge s0,a4,3270 + 326e: 86a2 mv a3,s0 + 3270: 0006871b sext.w a4,a3 fw -= i; - 3230: 9c15 subw s0,s0,a3 + 3274: 9c15 subw s0,s0,a3 while (i) { - 3232: e719 bnez a4,3240 - 3234: a095 j 3298 + 3276: e719 bnez a4,3284 + 3278: a095 j 32dc *bf++ = ' '; - 3236: 01678023 sb s6,0(a5) + 327a: 01678023 sb s6,0(a5) --i; - 323a: 377d addiw a4,a4,-1 + 327e: 377d addiw a4,a4,-1 *bf++ = ' '; - 323c: 0785 addi a5,a5,1 + 3280: 0785 addi a5,a5,1 while (i) { - 323e: cb29 beqz a4,3290 + 3282: cb29 beqz a4,32d4 if ((((stbsp__uintptr)bf) & 3) == 0) - 3240: 0037f693 andi a3,a5,3 - 3244: faed bnez a3,3236 + 3284: 0037f693 andi a3,a5,3 + 3288: faed bnez a3,327a while (i >= 4) { - 3246: 86be mv a3,a5 - 3248: 00070f9b sext.w t6,a4 - 324c: 00f705bb addw a1,a4,a5 - 3250: 02ebd763 bge s7,a4,327e + 328a: 86be mv a3,a5 + 328c: 00070f9b sext.w t6,a4 + 3290: 00f705bb addw a1,a4,a5 + 3294: 02ebd763 bge s7,a4,32c2 *(stbsp__uint32 *)bf = 0x20202020; - 3254: 0146a023 sw s4,0(a3) + 3298: 0146a023 sw s4,0(a3) bf += 4; - 3258: 0691 addi a3,a3,4 + 329c: 0691 addi a3,a3,4 while (i >= 4) { - 325a: 40d5863b subw a2,a1,a3 - 325e: fecbcbe3 blt s7,a2,3254 - 3262: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff723c> - 3266: 0026561b srliw a2,a2,0x2 - 326a: 0016069b addiw a3,a2,1 - 326e: 3771 addiw a4,a4,-4 - 3270: 0026161b slliw a2,a2,0x2 - 3274: 068a slli a3,a3,0x2 - 3276: 96be add a3,a3,a5 - 3278: 9f11 subw a4,a4,a2 + 329e: 40d5863b subw a2,a1,a3 + 32a2: fecbcbe3 blt s7,a2,3298 + 32a6: ffcf861b addiw a2,t6,-4 # fffffffff7fffffc <_ZSt4cerr+0xfffffffff7ff71bc> + 32aa: 0026561b srliw a2,a2,0x2 + 32ae: 0016069b addiw a3,a2,1 + 32b2: 3771 addiw a4,a4,-4 + 32b4: 0026161b slliw a2,a2,0x2 + 32b8: 068a slli a3,a3,0x2 + 32ba: 96be add a3,a3,a5 + 32bc: 9f11 subw a4,a4,a2 while (i) { - 327a: 87b6 mv a5,a3 - 327c: cb11 beqz a4,3290 - 327e: 1702 slli a4,a4,0x20 - 3280: 9301 srli a4,a4,0x20 - 3282: 00e687b3 add a5,a3,a4 + 32be: 87b6 mv a5,a3 + 32c0: cb11 beqz a4,32d4 + 32c2: 1702 slli a4,a4,0x20 + 32c4: 9301 srli a4,a4,0x20 + 32c6: 00e687b3 add a5,a3,a4 *bf++ = ' '; - 3286: 0685 addi a3,a3,1 - 3288: ff668fa3 sb s6,-1(a3) + 32ca: 0685 addi a3,a3,1 + 32cc: ff668fa3 sb s6,-1(a3) while (i) { - 328c: fef69de3 bne a3,a5,3286 + 32d0: fef69de3 bne a3,a5,32ca stbsp__chk_cb_buf(1); - 3290: 40a78633 sub a2,a5,a0 - 3294: 00090e63 beqz s2,32b0 - 3298: 2601 sext.w a2,a2 - 329a: 00cf5b63 bge t5,a2,32b0 - 329e: 85ce mv a1,s3 - 32a0: 9cb1 addw s1,s1,a2 - 32a2: 9902 jalr s2 - 32a4: c541 beqz a0,332c - 32a6: 87aa mv a5,a0 - 32a8: 20000e93 li t4,512 - 32ac: 1fe00f13 li t5,510 + 32d4: 40a78633 sub a2,a5,a0 + 32d8: 00090e63 beqz s2,32f4 + 32dc: 2601 sext.w a2,a2 + 32de: 00cf5b63 bge t5,a2,32f4 + 32e2: 85ce mv a1,s3 + 32e4: 9cb1 addw s1,s1,a2 + 32e6: 9902 jalr s2 + 32e8: c541 beqz a0,3370 + 32ea: 87aa mv a5,a0 + 32ec: 20000e93 li t4,512 + 32f0: 1fe00f13 li t5,510 while (fw > 0) { - 32b0: f68044e3 bgtz s0,3218 - 32b4: 8322 mv t1,s0 - 32b6: 89ca mv s3,s2 - 32b8: 83e6 mv t2,s9 - 32ba: 68c2 ld a7,16(sp) - 32bc: 8cee mv s9,s11 - 32be: 6a62 ld s4,24(sp) - 32c0: 8dea mv s11,s10 - 32c2: 7f82 ld t6,32(sp) - 32c4: 8d26 mv s10,s1 - 32c6: 76c2 ld a3,48(sp) - 32c8: 6e26 ld t3,72(sp) - 32ca: 6746 ld a4,80(sp) - 32cc: 62e6 ld t0,88(sp) - 32ce: 74a2 ld s1,40(sp) - 32d0: 892a mv s2,a0 - 32d2: 843e mv s0,a5 - 32d4: af2ff06f j 25c6 + 32f4: f68044e3 bgtz s0,325c + 32f8: 8322 mv t1,s0 + 32fa: 89ca mv s3,s2 + 32fc: 83e6 mv t2,s9 + 32fe: 68c2 ld a7,16(sp) + 3300: 8cee mv s9,s11 + 3302: 6a62 ld s4,24(sp) + 3304: 8dea mv s11,s10 + 3306: 7f82 ld t6,32(sp) + 3308: 8d26 mv s10,s1 + 330a: 76c2 ld a3,48(sp) + 330c: 6e26 ld t3,72(sp) + 330e: 6746 ld a4,80(sp) + 3310: 62e6 ld t0,88(sp) + 3312: 74a2 ld s1,40(sp) + 3314: 892a mv s2,a0 + 3316: 843e mv s0,a5 + 3318: af2ff06f j 260a stbsp__cb_buf_clamp(i, fw); - 32d8: 8722 mv a4,s0 - 32da: 4401 li s0,0 + 331c: 8722 mv a4,s0 + 331e: 4401 li s0,0 if ((((stbsp__uintptr)bf) & 3) == 0) - 32dc: b795 j 3240 + 3320: b795 j 3284 n64 = va_arg(va, stbsp__uint32); - 32de: 000be683 lwu a3,0(s7) - 32e2: b0f9 j 2bb0 - 32e4: 2c013a03 ld s4,704(sp) - 32e8: 2b813a83 ld s5,696(sp) - 32ec: 2b013b03 ld s6,688(sp) - 32f0: 8cca mv s9,s2 - 32f2: 8ccff06f j 23be - 32f6: 8cd6 mv s9,s5 - 32f8: 2c013a03 ld s4,704(sp) - 32fc: 2b813a83 ld s5,696(sp) - 3300: 2b013b03 ld s6,688(sp) - 3304: 8baff06f j 23be - 3308: 2c013a03 ld s4,704(sp) - 330c: 2b813a83 ld s5,696(sp) - 3310: 2b013b03 ld s6,688(sp) - 3314: 8cea mv s9,s10 - 3316: 8a8ff06f j 23be + 3322: 000be683 lwu a3,0(s7) + 3326: b0f9 j 2bf4 + 3328: 2c013a03 ld s4,704(sp) + 332c: 2b813a83 ld s5,696(sp) + 3330: 2b013b03 ld s6,688(sp) + 3334: 8cca mv s9,s2 + 3336: 8ccff06f j 2402 + 333a: 8cd6 mv s9,s5 + 333c: 2c013a03 ld s4,704(sp) + 3340: 2b813a83 ld s5,696(sp) + 3344: 2b013b03 ld s6,688(sp) + 3348: 8baff06f j 2402 + 334c: 2c013a03 ld s4,704(sp) + 3350: 2b813a83 ld s5,696(sp) + 3354: 2b013b03 ld s6,688(sp) + 3358: 8cea mv s9,s10 + 335a: 8a8ff06f j 2402 while (i) { - 331a: 85a2 mv a1,s0 - 331c: c12ff06f j 272e + 335e: 85a2 mv a1,s0 + 3360: c12ff06f j 2772 while (i >= 4) { - 3320: 478d li a5,3 - 3322: 8622 mv a2,s0 - 3324: e4b7cce3 blt a5,a1,317c - 3328: be2ff06f j 270a - 332c: 2c013a03 ld s4,704(sp) - 3330: 2b813a83 ld s5,696(sp) - 3334: 2b013b03 ld s6,688(sp) - 3338: 8ca6 mv s9,s1 - 333a: 884ff06f j 23be + 3364: 478d li a5,3 + 3366: 8622 mv a2,s0 + 3368: e4b7cce3 blt a5,a1,31c0 + 336c: be2ff06f j 274e + 3370: 2c013a03 ld s4,704(sp) + 3374: 2b813a83 ld s5,696(sp) + 3378: 2b013b03 ld s6,688(sp) + 337c: 8ca6 mv s9,s1 + 337e: 884ff06f j 2402 lead[2] = h[16]; - 333e: 01084683 lbu a3,16(a6) + 3382: 01084683 lbu a3,16(a6) lead[0] = 2; - 3342: 678d lui a5,0x3 - 3344: 0789 addi a5,a5,2 # 3002 - 3346: 06f11423 sh a5,104(sp) + 3386: 678d lui a5,0x3 + 3388: 0789 addi a5,a5,2 # 3002 + 338a: 06f11423 sh a5,104(sp) lead[2] = h[16]; - 334a: 06d10523 sb a3,106(sp) - 334e: b891 j 2ba2 - 3350: 8cea mv s9,s10 - 3352: 86cff06f j 23be - 3356: 4f81 li t6,0 - 3358: 4a01 li s4,0 - 335a: 5586 lw a1,96(sp) + 338e: 06d10523 sb a3,106(sp) + 3392: b891 j 2be6 + 3394: 8cea mv s9,s10 + 3396: 86cff06f j 2402 + 339a: 4f81 li t6,0 + 339c: 4a01 li s4,0 + 339e: 5586 lw a1,96(sp) *--s = stbsp__comma; - 335c: 00005f17 auipc t5,0x5 - 3360: bd9f4f03 lbu t5,-1063(t5) # 7f35 - 3364: 0510 addi a2,sp,640 - 3366: 0085d71b srliw a4,a1,0x8 + 33a0: 00005f17 auipc t5,0x5 + 33a4: c15f4f03 lbu t5,-1003(t5) # 7fb5 + 33a8: 0510 addi a2,sp,640 + 33aa: 0085d71b srliw a4,a1,0x8 *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 336a: 4305 li t1,1 + 33ae: 4305 li t1,1 if (fl & STBSP__TRIPLET_COMMA) { - 336c: 040e7e93 andi t4,t3,64 + 33b0: 040e7e93 andi t4,t3,64 *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 3370: 0007029b sext.w t0,a4 - 3374: 005317bb sllw a5,t1,t0 - 3378: 37fd addiw a5,a5,-1 - 337a: 8ff5 and a5,a5,a3 - 337c: 97c2 add a5,a5,a6 - 337e: 0007c783 lbu a5,0(a5) + 33b4: 0007029b sext.w t0,a4 + 33b8: 005317bb sllw a5,t1,t0 + 33bc: 37fd addiw a5,a5,-1 + 33be: 8ff5 and a5,a5,a3 + 33c0: 97c2 add a5,a5,a6 + 33c2: 0007c783 lbu a5,0(a5) n64 >>= (l >> 8); - 3382: 0056d6b3 srl a3,a3,t0 + 33c6: 0056d6b3 srl a3,a3,t0 *--s = h[n64 & ((1 << (l >> 8)) - 1)]; - 3386: fff60a93 addi s5,a2,-1 - 338a: fef60fa3 sb a5,-1(a2) + 33ca: fff60a93 addi s5,a2,-1 + 33ce: fef60fa3 sb a5,-1(a2) if (!((n64) || ((stbsp__int32)((num + STBSP__NUMSZ) - s) < pr))) - 338e: e691 bnez a3,339a - 3390: 051c addi a5,sp,640 - 3392: 415787bb subw a5,a5,s5 - 3396: 0317dd63 bge a5,a7,33d0 + 33d2: e691 bnez a3,33de + 33d4: 051c addi a5,sp,640 + 33d6: 415787bb subw a5,a5,s5 + 33da: 0317dd63 bge a5,a7,3414 if (fl & STBSP__TRIPLET_COMMA) { - 339a: 020e8963 beqz t4,33cc + 33de: 020e8963 beqz t4,3410 ++l; - 339e: 0015879b addiw a5,a1,1 + 33e2: 0015879b addiw a5,a1,1 if ((l & 15) == ((l >> 4) & 15)) { - 33a2: 0047d29b srliw t0,a5,0x4 - 33a6: 00f2c2b3 xor t0,t0,a5 - 33aa: 00f2f293 andi t0,t0,15 + 33e6: 0047d29b srliw t0,a5,0x4 + 33ea: 00f2c2b3 xor t0,t0,a5 + 33ee: 00f2f293 andi t0,t0,15 ++l; - 33ae: 0007859b sext.w a1,a5 + 33f2: 0007859b sext.w a1,a5 if ((l & 15) == ((l >> 4) & 15)) { - 33b2: 0087d71b srliw a4,a5,0x8 - 33b6: 00029b63 bnez t0,33cc + 33f6: 0087d71b srliw a4,a5,0x8 + 33fa: 00029b63 bnez t0,3410 l &= ~15; - 33ba: 9bc1 andi a5,a5,-16 - 33bc: 0007859b sext.w a1,a5 + 33fe: 9bc1 andi a5,a5,-16 + 3400: 0007859b sext.w a1,a5 *--s = stbsp__comma; - 33c0: ffe60a93 addi s5,a2,-2 - 33c4: ffe60f23 sb t5,-2(a2) - 33c8: 0087d71b srliw a4,a5,0x8 - 33cc: 8656 mv a2,s5 - 33ce: b74d j 3370 + 3404: ffe60a93 addi s5,a2,-2 + 3408: ffe60f23 sb t5,-2(a2) + 340c: 0087d71b srliw a4,a5,0x8 + 3410: 8656 mv a2,s5 + 3412: b74d j 33b4 cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 33d0: 0045d29b srliw t0,a1,0x4 - 33d4: 0f0006b7 lui a3,0xf000 + 3414: 0045d29b srliw t0,a1,0x4 + 3418: 0f0006b7 lui a3,0xf000 if (pr < (stbsp__int32)l) - 33d8: 0007871b sext.w a4,a5 + 341c: 0007871b sext.w a4,a5 cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 33dc: 0182929b slliw t0,t0,0x18 - 33e0: 00d2f2b3 and t0,t0,a3 + 3420: 0182929b slliw t0,t0,0x18 + 3424: 00d2f2b3 and t0,t0,a3 n = pr + lead[0] + tail[0] + tz; - 33e4: 00ef863b addw a2,t6,a4 + 3428: 00ef863b addw a2,t6,a4 l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 33e8: d0be sw a5,96(sp) + 342c: d0be sw a5,96(sp) n = pr + lead[0] + tail[0] + tz; - 33ea: 8fb2 mv t6,a2 + 342e: 8fb2 mv t6,a2 cs = (stbsp__uint32)((num + STBSP__NUMSZ) - s) + ((((l >> 4) & 15)) << 24); - 33ec: 86be mv a3,a5 - 33ee: 00f282bb addw t0,t0,a5 + 3430: 86be mv a3,a5 + 3432: 00f282bb addw t0,t0,a5 if (fw < (stbsp__int32)n) - 33f2: 835a mv t1,s6 - 33f4: 00cb5363 bge s6,a2,33fa - 33f8: 8332 mv t1,a2 + 3436: 835a mv t1,s6 + 3438: 00cb5363 bge s6,a2,343e + 343c: 8332 mv t1,a2 fw -= n; - 33fa: 41f3033b subw t1,t1,t6 + 343e: 41f3033b subw t1,t1,t6 pr -= l; - 33fe: 9f1d subw a4,a4,a5 + 3442: 9f1d subw a4,a4,a5 goto scopy; - 3400: 4f81 li t6,0 + 3444: 4f81 li t6,0 tz = 0; - 3402: 4881 li a7,0 + 3446: 4881 li a7,0 goto scopy; - 3404: fdcff06f j 2be0 - 3408: 8cda mv s9,s6 - 340a: 2c013a03 ld s4,704(sp) - 340e: 2b813a83 ld s5,696(sp) - 3412: 2b013b03 ld s6,688(sp) - 3416: fa9fe06f j 23be + 3448: fdcff06f j 2c24 + 344c: 8cda mv s9,s6 + 344e: 2c013a03 ld s4,704(sp) + 3452: 2b813a83 ld s5,696(sp) + 3456: 2b013b03 ld s6,688(sp) + 345a: fa9fe06f j 2402 fl |= ((sizeof(void *) == 8) ? STBSP__INTMAX : 0); - 341a: 020e6e13 ori t3,t3,32 + 345e: 020e6e13 ori t3,t3,32 ++f; - 341e: 0485 addi s1,s1,1 - 3420: 864ff06f j 2484 + 3462: 0485 addi s1,s1,1 + 3464: 864ff06f j 24c8 n = 0; - 3424: 4601 li a2,0 + 3468: 4601 li a2,0 s = num + 64; - 3426: 8756 mv a4,s5 + 346a: 8756 mv a4,s5 if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3428: 4511 li a0,4 + 346c: 4511 li a0,4 *s++ = stbsp__comma; - 342a: 00170793 addi a5,a4,1 + 346e: 00170793 addi a5,a4,1 if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 342e: 00030563 beqz t1,3438 - 3432: 2585 addiw a1,a1,1 - 3434: 10a58363 beq a1,a0,353a - 3438: 873e mv a4,a5 + 3472: 00030563 beqz t1,347c + 3476: 2585 addiw a1,a1,1 + 3478: 10a58363 beq a1,a0,357e + 347c: 873e mv a4,a5 *s++ = sn[n]; - 343a: 02061793 slli a5,a2,0x20 - 343e: 9381 srli a5,a5,0x20 - 3440: 97fa add a5,a5,t5 - 3442: 0007c803 lbu a6,0(a5) + 347e: 02061793 slli a5,a2,0x20 + 3482: 9381 srli a5,a5,0x20 + 3484: 97fa add a5,a5,t5 + 3486: 0007c803 lbu a6,0(a5) ++n; - 3446: 2605 addiw a2,a2,1 + 348a: 2605 addiw a2,a2,1 *s++ = sn[n]; - 3448: ff070fa3 sb a6,-1(a4) + 348c: ff070fa3 sb a6,-1(a4) if (n >= l) - 344c: fcd66fe3 bltu a2,a3,342a + 3490: fcd66fe3 bltu a2,a3,346e if (n < (stbsp__uint32)dp) { - 3450: 0bd663e3 bltu a2,t4,3cf6 + 3494: 0bd663e3 bltu a2,t4,3d3a cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 3454: 415707b3 sub a5,a4,s5 - 3458: 030002b7 lui t0,0x3000 - 345c: 00f282bb addw t0,t0,a5 + 3498: 415707b3 sub a5,a4,s5 + 349c: 030002b7 lui t0,0x3000 + 34a0: 00f282bb addw t0,t0,a5 if (pr) { - 3460: 00088a63 beqz a7,3474 + 34a4: 00088a63 beqz a7,34b8 *s++ = stbsp__period; - 3464: 0cca4683 lbu a3,204(s4) - 3468: 00170793 addi a5,a4,1 + 34a8: 0cca4683 lbu a3,204(s4) + 34ac: 00170793 addi a5,a4,1 l = (stbsp__uint32)(s - (num + 64)); - 346c: 415787b3 sub a5,a5,s5 + 34b0: 415787b3 sub a5,a5,s5 *s++ = stbsp__period; - 3470: 00d70023 sb a3,0(a4) + 34b4: 00d70023 sb a3,0(a4) if (fl & STBSP__METRIC_SUFFIX) { - 3474: 100e7713 andi a4,t3,256 - 3478: 86f2 mv a3,t3 - 347a: 2c070163 beqz a4,373c + 34b8: 100e7713 andi a4,t3,256 + 34bc: 86f2 mv a3,t3 + 34be: 2c070163 beqz a4,3780 if (fl & STBSP__METRIC_NOSPACE) - 347e: 40ae5f9b sraiw t6,t3,0xa - 3482: 001fcf93 xori t6,t6,1 - 3486: 001fff93 andi t6,t6,1 + 34c2: 40ae5f9b sraiw t6,t3,0xa + 34c6: 001fcf93 xori t6,t6,1 + 34ca: 001fff93 andi t6,t6,1 tail[1] = ' '; - 348a: 02000713 li a4,32 - 348e: 06e108a3 sb a4,113(sp) + 34ce: 02000713 li a4,32 + 34d2: 06e108a3 sb a4,113(sp) tail[0] = idx; - 3492: 07f10823 sb t6,112(sp) + 34d6: 07f10823 sb t6,112(sp) if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 3496: 018e561b srliw a2,t3,0x18 - 349a: 018e571b srliw a4,t3,0x18 + 34da: 018e561b srliw a2,t3,0x18 + 34de: 018e571b srliw a4,t3,0x18 n = pr + lead[0] + tail[0] + tz; - 349e: 000f859b sext.w a1,t6 + 34e2: 000f859b sext.w a1,t6 if (fl >> 24) { // SI kilo is 'k', JEDEC and SI kibits are 'K'. - 34a2: c225 beqz a2,3502 + 34e6: c225 beqz a2,3546 if (fl & STBSP__METRIC_1024) - 34a4: 001f859b addiw a1,t6,1 - 34a8: 0ff5f613 zext.b a2,a1 + 34e8: 001f859b addiw a1,t6,1 + 34ec: 0ff5f613 zext.b a2,a1 tail[idx + 1] = "_KMGT"[fl >> 24]; - 34ac: 1702 slli a4,a4,0x20 + 34f0: 1702 slli a4,a4,0x20 if (fl & STBSP__METRIC_1024) - 34ae: 03469513 slli a0,a3,0x34 + 34f2: 03469513 slli a0,a3,0x34 tail[idx + 1] = "_KMGT"[fl >> 24]; - 34b2: 85b2 mv a1,a2 - 34b4: 9301 srli a4,a4,0x20 + 34f6: 85b2 mv a1,a2 + 34f8: 9301 srli a4,a4,0x20 if (fl & STBSP__METRIC_1024) - 34b6: 06055ee3 bgez a0,3d32 + 34fa: 06055ee3 bgez a0,3d76 tail[idx + 1] = "_KMGT"[fl >> 24]; - 34ba: 00003517 auipc a0,0x3 - 34be: c4e50513 addi a0,a0,-946 # 6108 <_GLOBAL__sub_I__ZSt3cin+0x160> - 34c2: 972a add a4,a4,a0 - 34c4: 00074503 lbu a0,0(a4) + 34fe: 00003517 auipc a0,0x3 + 3502: c8250513 addi a0,a0,-894 # 6180 <_GLOBAL__sub_I__ZSt3cin+0x17c> + 3506: 972a add a4,a4,a0 + 3508: 00074503 lbu a0,0(a4) if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 34c8: 6709 lui a4,0x2 - 34ca: 80070713 addi a4,a4,-2048 # 1800 - 34ce: 8f75 and a4,a4,a3 + 350c: 6709 lui a4,0x2 + 350e: 80070713 addi a4,a4,-2048 # 1800 + 3512: 8f75 and a4,a4,a3 tail[idx + 1] = "_KMGT"[fl >> 24]; - 34d0: 06010813 addi a6,sp,96 - 34d4: 22060693 addi a3,a2,544 - 34d8: 96c2 add a3,a3,a6 - 34da: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff7030> + 3514: 06010813 addi a6,sp,96 + 3518: 22060693 addi a3,a2,544 + 351c: 96c2 add a3,a3,a6 + 351e: dea68823 sb a0,-528(a3) # efffdf0 <_ZSt4cerr+0xeff6fb0> if (fl & STBSP__METRIC_1024 && !(fl & STBSP__METRIC_JEDEC)) { - 34de: 8007071b addiw a4,a4,-2048 - 34e2: 060715e3 bnez a4,3d4c + 3522: 8007071b addiw a4,a4,-2048 + 3526: 060715e3 bnez a4,3d90 tail[idx + 1] = 'i'; - 34e6: 2f89 addiw t6,t6,2 - 34e8: 0ffff593 zext.b a1,t6 - 34ec: 1094 addi a3,sp,96 - 34ee: 22058713 addi a4,a1,544 - 34f2: 9736 add a4,a4,a3 - 34f4: 06900693 li a3,105 - 34f8: 8fae mv t6,a1 - 34fa: ded70823 sb a3,-528(a4) + 352a: 2f89 addiw t6,t6,2 + 352c: 0ffff593 zext.b a1,t6 + 3530: 1094 addi a3,sp,96 + 3532: 22058713 addi a4,a1,544 + 3536: 9736 add a4,a4,a3 + 3538: 06900693 li a3,105 + 353c: 8fae mv t6,a1 + 353e: ded70823 sb a3,-528(a4) tail[0] = idx; - 34fe: 07f10823 sb t6,112(sp) + 3542: 07f10823 sb t6,112(sp) l = (stbsp__uint32)(s - (num + 64)); - 3502: 0007869b sext.w a3,a5 + 3546: 0007869b sext.w a3,a5 n = pr + lead[0] + tail[0] + tz; - 3506: 06814a03 lbu s4,104(sp) + 354a: 06814a03 lbu s4,104(sp) if (pr < (stbsp__int32)l) - 350a: fff6c713 not a4,a3 - 350e: 977d srai a4,a4,0x3f - 3510: 8ff9 and a5,a5,a4 + 354e: fff6c713 not a4,a3 + 3552: 977d srai a4,a4,0x3f + 3554: 8ff9 and a5,a5,a4 n = pr + lead[0] + tail[0] + tz; - 3512: 00fa073b addw a4,s4,a5 - 3516: 9f2d addw a4,a4,a1 - 3518: 0117063b addw a2,a4,a7 + 3556: 00fa073b addw a4,s4,a5 + 355a: 9f2d addw a4,a4,a1 + 355c: 0117063b addw a2,a4,a7 l = (stbsp__uint32)(s - (num + 64)); - 351c: d0b6 sw a3,96(sp) + 3560: d0b6 sw a3,96(sp) n = pr + lead[0] + tail[0] + tz; - 351e: 8732 mv a4,a2 + 3562: 8732 mv a4,a2 if (pr < (stbsp__int32)l) - 3520: 2781 sext.w a5,a5 + 3564: 2781 sext.w a5,a5 if ((fl & STBSP__LEFTJUST) == 0) { - 3522: 001e7513 andi a0,t3,1 + 3566: 001e7513 andi a0,t3,1 if (fw < (stbsp__int32)n) - 3526: 835a mv t1,s6 - 3528: 00cb5363 bge s6,a2,352e - 352c: 8332 mv t1,a2 + 356a: 835a mv t1,s6 + 356c: 00cb5363 bge s6,a2,3572 + 3570: 8332 mv t1,a2 fw -= n; - 352e: 40e3033b subw t1,t1,a4 + 3572: 40e3033b subw t1,t1,a4 pr -= l; - 3532: 40d7873b subw a4,a5,a3 + 3576: 40d7873b subw a4,a5,a3 goto scopy; - 3536: eaaff06f j 2be0 + 357a: eaaff06f j 2c24 *s++ = stbsp__comma; - 353a: fe578fa3 sb t0,-1(a5) - 353e: 0709 addi a4,a4,2 + 357e: fe578fa3 sb t0,-1(a5) + 3582: 0709 addi a4,a4,2 if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3540: 4585 li a1,1 - 3542: bde5 j 343a + 3584: 4585 li a1,1 + 3586: bde5 j 347e lead[0] = 1; - 3544: 678d lui a5,0x3 - 3546: 0785 addi a5,a5,1 # 3001 - 3548: 06f11423 sh a5,104(sp) - 354c: b4ed j 3036 + 3588: 678d lui a5,0x3 + 358a: 0785 addi a5,a5,1 # 3001 + 358c: 06f11423 sh a5,104(sp) + 3590: b4ed j 307a if ((f[0] != 'u') && (i64 < 0)) { - 354e: 07500693 li a3,117 + 3592: 07500693 li a3,117 stbsp__int64 i64 = va_arg(va, stbsp__int64); - 3552: 000bbf03 ld t5,0(s7) + 3596: 000bbf03 ld t5,0(s7) if ((f[0] != 'u') && (i64 < 0)) { - 3556: dcd78263 beq a5,a3,2b1a - 355a: dc0f5063 bgez t5,2b1a + 359a: dcd78263 beq a5,a3,2b5e + 359e: dc0f5063 bgez t5,2b5e fl |= STBSP__NEGATIVE; - 355e: 08076713 ori a4,a4,128 + 35a2: 08076713 ori a4,a4,128 n64 = (stbsp__uint64)-i64; - 3562: 41e00f33 neg t5,t5 + 35a6: 41e00f33 neg t5,t5 fl |= STBSP__NEGATIVE; - 3566: 00070e1b sext.w t3,a4 - 356a: db0ff06f j 2b1a + 35aa: 00070e1b sext.w t3,a4 + 35ae: db0ff06f j 2b5e lead[2] = h[0xb]; - 356e: 00b84703 lbu a4,11(a6) + 35b2: 00b84703 lbu a4,11(a6) lead[0] = 2; - 3572: 678d lui a5,0x3 - 3574: 0789 addi a5,a5,2 # 3002 - 3576: 06f11423 sh a5,104(sp) + 35b6: 678d lui a5,0x3 + 35b8: 0789 addi a5,a5,2 # 3002 + 35ba: 06f11423 sh a5,104(sp) lead[2] = h[0xb]; - 357a: 06e10523 sb a4,106(sp) - 357e: bab5 j 2efa + 35be: 06e10523 sb a4,106(sp) + 35c2: bab5 j 2f3e sign[0] = 1; - 3580: 678d lui a5,0x3 - 3582: d0178793 addi a5,a5,-767 # 2d01 + 35c4: 678d lui a5,0x3 + 35c6: d0178793 addi a5,a5,-767 # 2d01 fl |= STBSP__NEGATIVE; - 3586: 080e6e13 ori t3,t3,128 + 35ca: 080e6e13 ori t3,t3,128 sign[0] = 1; - 358a: 06f11423 sh a5,104(sp) - 358e: 468d li a3,3 - 3590: 4a0d li s4,3 - 3592: 4809 li a6,2 - 3594: b899 j 2dea + 35ce: 06f11423 sh a5,104(sp) + 35d2: 468d li a3,3 + 35d4: 4a0d li s4,3 + 35d6: 4809 li a6,2 + 35d8: b899 j 2e2e sign[0] = 1; - 3596: 6709 lui a4,0x2 - 3598: 0705 addi a4,a4,1 # 2001 <_vscanf_core.constprop.0+0x6b9> - 359a: 06e11423 sh a4,104(sp) - 359e: bae5 j 2f96 + 35da: 6709 lui a4,0x2 + 35dc: 0705 addi a4,a4,1 # 2001 <_vscanf_core.constprop.0+0x675> + 35de: 06e11423 sh a4,104(sp) + 35e2: bae5 j 2fda if (((stbsp__uintptr)sn & 3) == 0) - 35a0: 0e0780e3 beqz a5,3e80 + 35e4: 0e0780e3 beqz a5,3ec4 l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 35a4: 56fd li a3,-1 - 35a6: bcf9 j 3084 + 35e8: 56fd li a3,-1 + 35ea: bcf9 j 30c8 if (fw < (stbsp__int32)n) - 35a8: 4305 li t1,1 - 35aa: b249 j 2f2c + 35ec: 4305 li t1,1 + 35ee: b249 j 2f70 pr = 6; // default is 6 - 35ac: 4899 li a7,6 - 35ae: b801 j 2dbe + 35f0: 4899 li a7,6 + 35f2: b801 j 2e02 h = (f[0] == 'A') ? hexu : hex; - 35b0: 00005597 auipc a1,0x5 - 35b4: 98858593 addi a1,a1,-1656 # 7f38 - 35b8: ff6ff06f j 2dae + 35f4: 00005597 auipc a1,0x5 + 35f8: 9c458593 addi a1,a1,-1596 # 7fb8 + 35fc: ff6ff06f j 2df2 h = (f[0] == 'B') ? hexu : hex; - 35bc: 00005817 auipc a6,0x5 - 35c0: 97c80813 addi a6,a6,-1668 # 7f38 - 35c4: b22d j 2eee - 35c6: 80000737 lui a4,0x80000 - 35ca: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff7246> + 3600: 00005817 auipc a6,0x5 + 3604: 9b880813 addi a6,a6,-1608 # 7fb8 + 3608: b22d j 2f32 + 360a: 80000737 lui a4,0x80000 + 360e: 0719 addi a4,a4,6 # ffffffff80000006 <_ZSt4cerr+0xffffffff7fff71c6> pr = 6; // default is 6 - 35cc: 4899 li a7,6 - 35ce: e4eff06f j 2c1c + 3610: 4899 li a7,6 + 3612: e4eff06f j 2c60 h = (f[0] == 'E') ? hexu : hex; - 35d2: 00005317 auipc t1,0x5 - 35d6: 96630313 addi t1,t1,-1690 # 7f38 - 35da: e28ff06f j 2c02 - 35de: 80000737 lui a4,0x80000 - 35e2: 4a99 li s5,6 - 35e4: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff7245> + 3616: 00005317 auipc t1,0x5 + 361a: 9a230313 addi t1,t1,-1630 # 7fb8 + 361e: e28ff06f j 2c46 + 3622: 80000737 lui a4,0x80000 + 3626: 4a99 li s5,6 + 3628: 0715 addi a4,a4,5 # ffffffff80000005 <_ZSt4cerr+0xffffffff7fff71c5> pr = 6; - 35e6: 4a19 li s4,6 - 35e8: ee8ff06f j 2cd0 + 362a: 4a19 li s4,6 + 362c: ee8ff06f j 2d14 h = (f[0] == 'G') ? hexu : hex; - 35ec: 00005317 auipc t1,0x5 - 35f0: 94c30313 addi t1,t1,-1716 # 7f38 - 35f4: eb6ff06f j 2caa - 35f8: 7be6 ld s7,120(sp) + 3630: 00005317 auipc t1,0x5 + 3634: 98830313 addi t1,t1,-1656 # 7fb8 + 3638: eb6ff06f j 2cee + 363c: 7be6 ld s7,120(sp) if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 35fa: 86c2 mv a3,a6 + 363e: 86c2 mv a3,a6 while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 35fc: 8542 mv a0,a6 + 3640: 8542 mv a0,a6 if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 35fe: 88d2 mv a7,s4 + 3642: 88d2 mv a7,s4 while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 3600: 8ade mv s5,s7 + 3644: 8ade mv s5,s7 if (pr > (stbsp__int32)l) - 3602: 0005071b sext.w a4,a0 - 3606: 01175f63 bge a4,a7,3624 + 3646: 0005071b sext.w a4,a0 + 364a: 01175f63 bge a4,a7,3668 pr = l - 1; - 360a: fff5089b addiw a7,a0,-1 + 364e: fff5089b addiw a7,a0,-1 tail[0] = 0; - 360e: 06010823 sb zero,112(sp) + 3652: 06010823 sb zero,112(sp) if (fl & STBSP__NEGATIVE) { - 3612: 70028c63 beqz t0,3d2a + 3656: 70028c63 beqz t0,3d6e sign[0] = 1; - 3616: 670d lui a4,0x3 - 3618: d0170713 addi a4,a4,-767 # 2d01 - 361c: 06e11423 sh a4,104(sp) - 3620: e3aff06f j 2c5a + 365a: 670d lui a4,0x3 + 365c: d0170713 addi a4,a4,-767 # 2d01 + 3660: 06e11423 sh a4,104(sp) + 3664: e3aff06f j 2c9e else if (pr) - 3624: fe0885e3 beqz a7,360e + 3668: fe0885e3 beqz a7,3652 --pr; // when using %e, there is one digit before the decimal - 3628: 38fd addiw a7,a7,-1 - 362a: b7d5 j 360e + 366c: 38fd addiw a7,a7,-1 + 366e: b7d5 j 3652 switch (f[0]) { - 362c: 0034c783 lbu a5,3(s1) + 3670: 0034c783 lbu a5,3(s1) f += 3; - 3630: 048d addi s1,s1,3 - 3632: e53fe06f j 2484 + 3674: 048d addi s1,s1,3 + 3676: e53fe06f j 24c8 if (!limit || *sn == 0) - 3636: 4601 li a2,0 - 3638: 4701 li a4,0 - 363a: 4781 li a5,0 + 367a: 4601 li a2,0 + 367c: 4701 li a4,0 + 367e: 4781 li a5,0 return (stbsp__uint32)(sn - s); - 363c: bca5 j 30b4 + 3680: bca5 j 30f8 pr = 1; - 363e: 4885 li a7,1 - 3640: cf4ff06f j 2b34 + 3682: 4885 li a7,1 + 3684: cf4ff06f j 2b78 *s++ = sn[0]; - 3644: 000ac703 lbu a4,0(s5) - 3648: 0ce10023 sb a4,192(sp) + 3688: 000ac703 lbu a4,0(s5) + 368c: 0ce10023 sb a4,192(sp) if (pr) - 364c: 54088563 beqz a7,3b96 + 3690: 54088563 beqz a7,3bda *s++ = stbsp__period; - 3650: 00005617 auipc a2,0x5 - 3654: 8e464603 lbu a2,-1820(a2) # 7f34 + 3694: 00005617 auipc a2,0x5 + 3698: 92064603 lbu a2,-1760(a2) # 7fb4 if ((l - 1) > (stbsp__uint32)pr) - 3658: fff6871b addiw a4,a3,-1 + 369c: fff6871b addiw a4,a3,-1 *s++ = stbsp__period; - 365c: 0cc100a3 sb a2,193(sp) + 36a0: 0cc100a3 sb a2,193(sp) if ((l - 1) > (stbsp__uint32)pr) - 3660: 0008851b sext.w a0,a7 - 3664: 0007061b sext.w a2,a4 - 3668: 52c57163 bgeu a0,a2,3b8a + 36a4: 0008851b sext.w a0,a7 + 36a8: 0007061b sext.w a2,a4 + 36ac: 52c57163 bgeu a0,a2,3bce l = pr + 1; - 366c: 0018869b addiw a3,a7,1 + 36b0: 0018869b addiw a3,a7,1 for (n = 1; n < l; n++) - 3670: 8746 mv a4,a7 - 3672: 02071613 slli a2,a4,0x20 - 3676: 9201 srli a2,a2,0x20 - 3678: 0c210713 addi a4,sp,194 - 367c: 0a85 addi s5,s5,1 - 367e: 963a add a2,a2,a4 + 36b4: 8746 mv a4,a7 + 36b6: 02071613 slli a2,a4,0x20 + 36ba: 9201 srli a2,a2,0x20 + 36bc: 0c210713 addi a4,sp,194 + 36c0: 0a85 addi s5,s5,1 + 36c2: 963a add a2,a2,a4 *s++ = sn[n]; - 3680: 000ac583 lbu a1,0(s5) - 3684: 0705 addi a4,a4,1 + 36c4: 000ac583 lbu a1,0(s5) + 36c8: 0705 addi a4,a4,1 for (n = 1; n < l; n++) - 3686: 0a85 addi s5,s5,1 + 36ca: 0a85 addi s5,s5,1 *s++ = sn[n]; - 3688: feb70fa3 sb a1,-1(a4) + 36cc: feb70fa3 sb a1,-1(a4) for (n = 1; n < l; n++) - 368c: fec71ae3 bne a4,a2,3680 + 36d0: fec71ae3 bne a4,a2,36c4 tail[1] = h[0xe]; - 3690: 00e34803 lbu a6,14(t1) + 36d4: 00e34803 lbu a6,14(t1) dp -= 1; - 3694: fff7871b addiw a4,a5,-1 + 36d8: fff7871b addiw a4,a5,-1 tail[2] = '+'; - 3698: 02b00593 li a1,43 + 36dc: 02b00593 li a1,43 tail[1] = h[0xe]; - 369c: 070108a3 sb a6,113(sp) + 36e0: 070108a3 sb a6,113(sp) if (dp < 0) { - 36a0: 00075663 bgez a4,36ac + 36e4: 00075663 bgez a4,36f0 dp = -dp; - 36a4: 4705 li a4,1 - 36a6: 9f1d subw a4,a4,a5 + 36e8: 4705 li a4,1 + 36ea: 9f1d subw a4,a4,a5 tail[2] = '-'; - 36a8: 02d00593 li a1,45 - 36ac: 06b10923 sb a1,114(sp) + 36ec: 02d00593 li a1,45 + 36f0: 06b10923 sb a1,114(sp) n = (dp >= 100) ? 5 : 4; - 36b0: 06300793 li a5,99 - 36b4: 4ee7d663 bge a5,a4,3ba0 - 36b8: 4595 li a1,5 - 36ba: 4f95 li t6,5 - 36bc: 4e95 li t4,5 + 36f4: 06300793 li a5,99 + 36f8: 4ee7d663 bge a5,a4,3be4 + 36fc: 4595 li a1,5 + 36fe: 4f95 li t6,5 + 3700: 4e95 li t4,5 tail[n] = '0' + dp % 10; - 36be: 47a9 li a5,10 + 3702: 47a9 li a5,10 dp /= 10; - 36c0: 02f7433b divw t1,a4,a5 + 3704: 02f7433b divw t1,a4,a5 --n; - 36c4: fffe8f1b addiw t5,t4,-1 + 3708: fffe8f1b addiw t5,t4,-1 tail[n] = '0' + dp % 10; - 36c8: 020f1293 slli t0,t5,0x20 - 36cc: 220e8813 addi a6,t4,544 - 36d0: 06010893 addi a7,sp,96 - 36d4: 0202d293 srli t0,t0,0x20 - 36d8: 01180eb3 add t4,a6,a7 - 36dc: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff7460> - 36e0: 011802b3 add t0,a6,a7 + 370c: 020f1293 slli t0,t5,0x20 + 3710: 220e8813 addi a6,t4,544 + 3714: 06010893 addi a7,sp,96 + 3718: 0202d293 srli t0,t0,0x20 + 371c: 01180eb3 add t4,a6,a7 + 3720: 22028813 addi a6,t0,544 # 3000220 <_ZSt4cerr+0x2ff73e0> + 3724: 011802b3 add t0,a6,a7 tail[0] = (char)n; - 36e4: 07f10823 sb t6,112(sp) + 3728: 07f10823 sb t6,112(sp) if (n <= 3) - 36e8: 4a0d li s4,3 + 372c: 4a0d li s4,3 tail[n] = '0' + dp % 10; - 36ea: 02f7673b remw a4,a4,a5 + 372e: 02f7673b remw a4,a4,a5 dp /= 10; - 36ee: 0003081b sext.w a6,t1 + 3732: 0003081b sext.w a6,t1 tail[n] = '0' + dp % 10; - 36f2: 02f36abb remw s5,t1,a5 - 36f6: 0307071b addiw a4,a4,48 - 36fa: deee8823 sb a4,-528(t4) - 36fe: 030a871b addiw a4,s5,48 - 3702: dee28823 sb a4,-528(t0) + 3736: 02f36abb remw s5,t1,a5 + 373a: 0307071b addiw a4,a4,48 + 373e: deee8823 sb a4,-528(t4) + 3742: 030a871b addiw a4,s5,48 + 3746: dee28823 sb a4,-528(t0) if (n <= 3) - 3706: 014f0a63 beq t5,s4,371a + 374a: 014f0a63 beq t5,s4,375e dp /= 10; - 370a: 02f3483b divw a6,t1,a5 + 374e: 02f3483b divw a6,t1,a5 tail[n] = '0' + dp % 10; - 370e: 02f867bb remw a5,a6,a5 - 3712: 0307879b addiw a5,a5,48 - 3716: 06f109a3 sb a5,115(sp) + 3752: 02f867bb remw a5,a6,a5 + 3756: 0307879b addiw a5,a5,48 + 375a: 06f109a3 sb a5,115(sp) tz = pr - (l - 1); - 371a: 2505 addiw a0,a0,1 + 375e: 2505 addiw a0,a0,1 l = (stbsp__uint32)(s - (num + 64)); - 371c: 0c010a93 addi s5,sp,192 + 3760: 0c010a93 addi s5,sp,192 cs = 1 + (3 << 24); // how many tens - 3720: 030002b7 lui t0,0x3000 + 3764: 030002b7 lui t0,0x3000 tz = pr - (l - 1); - 3724: 40d508bb subw a7,a0,a3 - 3728: d2c2 sw a6,100(sp) + 3768: 40d508bb subw a7,a0,a3 + 376c: d2c2 sw a6,100(sp) l = (stbsp__uint32)(s - (num + 64)); - 372a: 415607b3 sub a5,a2,s5 + 376e: 415607b3 sub a5,a2,s5 cs = 1 + (3 << 24); // how many tens - 372e: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7241> - 3730: bbc9 j 3502 - 3732: fc2e sd a1,56(sp) - 3734: d0b2 sw a2,96(sp) + 3772: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff71c1> + 3774: bbc9 j 3546 + 3776: fc2e sd a1,56(sp) + 3778: d0b2 sw a2,96(sp) while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 3736: 8536 mv a0,a3 - 3738: e2cff06f j 2d64 + 377a: 8536 mv a0,a3 + 377c: e2cff06f j 2da8 flt_lead: - 373c: 4581 li a1,0 - 373e: 4f81 li t6,0 - 3740: b3c9 j 3502 + 3780: 4581 li a1,0 + 3782: 4f81 li t6,0 + 3784: b3c9 j 3546 n = pr + lead[0] + tail[0] + tz; - 3742: 06814a03 lbu s4,104(sp) - 3746: 000a0f9b sext.w t6,s4 - 374a: b901 j 335a + 3786: 06814a03 lbu s4,104(sp) + 378a: 000a0f9b sext.w t6,s4 + 378e: b901 j 339e if ((f[1] == '6') && (f[2] == '4')) { - 374c: 0024c683 lbu a3,2(s1) - 3750: 03400713 li a4,52 - 3754: 00e68463 beq a3,a4,375c - 3758: e2bfe06f j 2582 + 3790: 0024c683 lbu a3,2(s1) + 3794: 03400713 li a4,52 + 3798: 00e68463 beq a3,a4,37a0 + 379c: e2bfe06f j 25c6 switch (f[0]) { - 375c: 0034c783 lbu a5,3(s1) + 37a0: 0034c783 lbu a5,3(s1) fl |= ((sizeof(long) == 8) ? STBSP__INTMAX : 0); - 3760: 020e6e13 ori t3,t3,32 + 37a4: 020e6e13 ori t3,t3,32 f += 3; - 3764: 048d addi s1,s1,3 - 3766: d1ffe06f j 2484 + 37a8: 048d addi s1,s1,3 + 37aa: d1ffe06f j 24c8 if (pr < (stbsp__int32)l) - 376a: 0006879b sext.w a5,a3 + 37ae: 0006879b sext.w a5,a3 n = pr + lead[0] + tail[0] + tz; - 376e: 06814a03 lbu s4,104(sp) + 37b2: 06814a03 lbu s4,104(sp) if (pr < (stbsp__int32)l) - 3772: fff7c793 not a5,a5 - 3776: 97fd srai a5,a5,0x3f - 3778: 8ff5 and a5,a5,a3 + 37b6: fff7c793 not a5,a5 + 37ba: 97fd srai a5,a5,0x3f + 37bc: 8ff5 and a5,a5,a3 n = pr + lead[0] + tail[0] + tz; - 377a: 00fa063b addw a2,s4,a5 + 37be: 00fa063b addw a2,s4,a5 s = (char *)sn; - 377e: 7ae6 ld s5,120(sp) + 37c2: 7ae6 ld s5,120(sp) n = pr + lead[0] + tail[0] + tz; - 3780: 8732 mv a4,a2 + 37c4: 8732 mv a4,a2 if ((fl & STBSP__LEFTJUST) == 0) { - 3782: 001e7513 andi a0,t3,1 + 37c6: 001e7513 andi a0,t3,1 if (pr < (stbsp__int32)l) - 3786: 2781 sext.w a5,a5 + 37ca: 2781 sext.w a5,a5 if (fw < (stbsp__int32)n) - 3788: 835a mv t1,s6 - 378a: 00cb5363 bge s6,a2,3790 - 378e: 8332 mv t1,a2 + 37cc: 835a mv t1,s6 + 37ce: 00cb5363 bge s6,a2,37d4 + 37d2: 8332 mv t1,a2 fw -= n; - 3790: 40e3033b subw t1,t1,a4 + 37d4: 40e3033b subw t1,t1,a4 goto scopy; - 3794: 4f81 li t6,0 + 37d8: 4f81 li t6,0 pr -= l; - 3796: 40d7873b subw a4,a5,a3 + 37da: 40d7873b subw a4,a5,a3 cs = 0; - 379a: 4281 li t0,0 + 37de: 4281 li t0,0 tz = 0; - 379c: 4881 li a7,0 + 37e0: 4881 li a7,0 goto scopy; - 379e: c42ff06f j 2be0 + 37e2: c42ff06f j 2c24 cs = (int)(s - (num + 64)) + (3 << 24); // cs is how many tens - 37a2: 415705b3 sub a1,a4,s5 - 37a6: 030002b7 lui t0,0x3000 - 37aa: 00b282bb addw t0,t0,a1 + 37e6: 415705b3 sub a1,a4,s5 + 37ea: 030002b7 lui t0,0x3000 + 37ee: 00b282bb addw t0,t0,a1 l = pr - n; - 37ae: 0008859b sext.w a1,a7 + 37f2: 0008859b sext.w a1,a7 if (pr) - 37b2: 42088763 beqz a7,3be0 + 37f6: 42088763 beqz a7,3c24 *s++ = stbsp__period; - 37b6: 0cca4f83 lbu t6,204(s4) + 37fa: 0cca4f83 lbu t6,204(s4) if ((l - dp) > (stbsp__uint32)pr) - 37ba: 41d6833b subw t1,a3,t4 + 37fe: 41d6833b subw t1,a3,t4 *s++ = stbsp__period; - 37be: 00280713 addi a4,a6,2 - 37c2: 01f800a3 sb t6,1(a6) + 3802: 00280713 addi a4,a6,2 + 3806: 01f800a3 sb t6,1(a6) if ((l - dp) > (stbsp__uint32)pr) - 37c6: 4065ed63 bltu a1,t1,3be0 + 380a: 4065ed63 bltu a1,t1,3c24 while (n < l) { - 37ca: 5ed57863 bgeu a0,a3,3dba - 37ce: 40c687bb subw a5,a3,a2 - 37d2: 37fd addiw a5,a5,-1 - 37d4: 1782 slli a5,a5,0x20 - 37d6: 9381 srli a5,a5,0x20 - 37d8: 1602 slli a2,a2,0x20 - 37da: 9201 srli a2,a2,0x20 - 37dc: 0785 addi a5,a5,1 - 37de: 967a add a2,a2,t5 - 37e0: 97ba add a5,a5,a4 + 380e: 5ed57863 bgeu a0,a3,3dfe + 3812: 40c687bb subw a5,a3,a2 + 3816: 37fd addiw a5,a5,-1 + 3818: 1782 slli a5,a5,0x20 + 381a: 9381 srli a5,a5,0x20 + 381c: 1602 slli a2,a2,0x20 + 381e: 9201 srli a2,a2,0x20 + 3820: 0785 addi a5,a5,1 + 3822: 967a add a2,a2,t5 + 3824: 97ba add a5,a5,a4 *s++ = sn[n]; - 37e2: 00064503 lbu a0,0(a2) - 37e6: 0705 addi a4,a4,1 + 3826: 00064503 lbu a0,0(a2) + 382a: 0705 addi a4,a4,1 while (n < l) { - 37e8: 0605 addi a2,a2,1 + 382c: 0605 addi a2,a2,1 *s++ = sn[n]; - 37ea: fea70fa3 sb a0,-1(a4) + 382e: fea70fa3 sb a0,-1(a4) while (n < l) { - 37ee: fef71ae3 bne a4,a5,37e2 + 3832: fef71ae3 bne a4,a5,3826 tz = pr - (l - dp); - 37f2: 01d585bb addw a1,a1,t4 - 37f6: 40d588bb subw a7,a1,a3 + 3836: 01d585bb addw a1,a1,t4 + 383a: 40d588bb subw a7,a1,a3 l = (stbsp__uint32)(s - (num + 64)); - 37fa: 415787b3 sub a5,a5,s5 - 37fe: b99d j 3474 + 383e: 415787b3 sub a5,a5,s5 + 3842: b99d j 34b8 fl |= STBSP__NEGATIVE; - 3800: 080e6e13 ori t3,t3,128 + 3844: 080e6e13 ori t3,t3,128 tail[0] = 0; - 3804: 06010823 sb zero,112(sp) + 3848: 06010823 sb zero,112(sp) if (fl & STBSP__NEGATIVE) { - 3808: b539 j 3616 + 384c: b539 j 365a tail[0] = (char)n; - 380a: 4799 li a5,6 + 384e: 4799 li a5,6 tail[n] = '0' + dp % 10; - 380c: 06b10b23 sb a1,118(sp) + 3850: 06b10b23 sb a1,118(sp) tail[0] = (char)n; - 3810: 06f10823 sb a5,112(sp) + 3854: 06f10823 sb a5,112(sp) tail[n] = '0' + dp % 10; - 3814: 4819 li a6,6 - 3816: 4f99 li t6,6 + 3858: 4819 li a6,6 + 385a: 4f99 li t6,6 n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 3818: 4599 li a1,6 + 385c: 4599 li a1,6 dp /= 10; - 381a: 4f29 li t5,10 + 385e: 4f29 li t5,10 if (n <= 3) - 381c: 428d li t0,3 - 381e: 87b2 mv a5,a2 + 3860: 428d li t0,3 + 3862: 87b2 mv a5,a2 dp /= 10; - 3820: 03e7c7bb divw a5,a5,t5 + 3864: 03e7c7bb divw a5,a5,t5 --n; - 3824: 35fd addiw a1,a1,-1 + 3868: 35fd addiw a1,a1,-1 tail[n] = '0' + dp % 10; - 3826: 02059613 slli a2,a1,0x20 - 382a: 9201 srli a2,a2,0x20 - 382c: 06010e93 addi t4,sp,96 - 3830: 22060613 addi a2,a2,544 - 3834: 9676 add a2,a2,t4 - 3836: 03e7eebb remw t4,a5,t5 - 383a: 030e8e9b addiw t4,t4,48 - 383e: dfd60823 sb t4,-528(a2) + 386a: 02059613 slli a2,a1,0x20 + 386e: 9201 srli a2,a2,0x20 + 3870: 06010e93 addi t4,sp,96 + 3874: 22060613 addi a2,a2,544 + 3878: 9676 add a2,a2,t4 + 387a: 03e7eebb remw t4,a5,t5 + 387e: 030e8e9b addiw t4,t4,48 + 3882: dfd60823 sb t4,-528(a2) if (n <= 3) - 3842: fc559fe3 bne a1,t0,3820 - 3846: e6aff06f j 2eb0 + 3886: fc559fe3 bne a1,t0,3864 + 388a: e6aff06f j 2ef4 *s++ = h[(n64 >> 60) & 15]; - 384a: 93f1 srli a5,a5,0x3c - 384c: 97ae add a5,a5,a1 - 384e: 0007c303 lbu t1,0(a5) + 388e: 93f1 srli a5,a5,0x3c + 3890: 97ae add a5,a5,a1 + 3892: 0007c303 lbu t1,0(a5) lead[1 + lead[0]] = '0'; - 3852: 1088 addi a0,sp,96 - 3854: 22080793 addi a5,a6,544 - 3858: 97aa add a5,a5,a0 - 385a: 03000513 li a0,48 - 385e: dea78423 sb a0,-536(a5) + 3896: 1088 addi a0,sp,96 + 3898: 22080793 addi a5,a6,544 + 389c: 97aa add a5,a5,a0 + 389e: 03000513 li a0,48 + 38a2: dea78423 sb a0,-536(a5) lead[2 + lead[0]] = 'x'; - 3862: 22068793 addi a5,a3,544 - 3866: 1094 addi a3,sp,96 - 3868: 96be add a3,a3,a5 + 38a6: 22068793 addi a5,a3,544 + 38aa: 1094 addi a3,sp,96 + 38ac: 96be add a3,a3,a5 *s++ = stbsp__period; - 386a: 00004517 auipc a0,0x4 - 386e: 6ca54503 lbu a0,1738(a0) # 7f34 + 38ae: 00004517 auipc a0,0x4 + 38b2: 70654503 lbu a0,1798(a0) # 7fb4 lead[2 + lead[0]] = 'x'; - 3872: 07800813 li a6,120 + 38b6: 07800813 li a6,120 sn = s; - 3876: 0c210793 addi a5,sp,194 + 38ba: 0c210793 addi a5,sp,194 lead[2 + lead[0]] = 'x'; - 387a: df068423 sb a6,-536(a3) + 38be: df068423 sb a6,-536(a3) *s++ = stbsp__period; - 387e: 0ca100a3 sb a0,193(sp) + 38c2: 0ca100a3 sb a0,193(sp) lead[0] += 2; - 3882: 07410423 sb s4,104(sp) + 38c6: 07410423 sb s4,104(sp) *s++ = h[(n64 >> 60) & 15]; - 3886: 0c610023 sb t1,192(sp) + 38ca: 0c610023 sb t1,192(sp) n64 <<= 4; - 388a: 0732 slli a4,a4,0xc + 38ce: 0732 slli a4,a4,0xc sn = s; - 388c: fcbe sd a5,120(sp) + 38d0: fcbe sd a5,120(sp) n = pr; - 388e: 0008869b sext.w a3,a7 + 38d2: 0008869b sext.w a3,a7 while (n--) { - 3892: 4831 li a6,12 + 38d6: 4831 li a6,12 if (n > 13) - 3894: 4535 li a0,13 + 38d8: 4535 li a0,13 tz = pr - n; - 3896: 40a688bb subw a7,a3,a0 + 38da: 40a688bb subw a7,a3,a0 while (n--) { - 389a: 02081313 slli t1,a6,0x20 - 389e: 02035313 srli t1,t1,0x20 - 38a2: 22030693 addi a3,t1,544 - 38a6: 1088 addi a0,sp,96 - 38a8: 9536 add a0,a0,a3 - 38aa: e4350513 addi a0,a0,-445 + 38de: 02081313 slli t1,a6,0x20 + 38e2: 02035313 srli t1,t1,0x20 + 38e6: 22030693 addi a3,t1,544 + 38ea: 1088 addi a0,sp,96 + 38ec: 9536 add a0,a0,a3 + 38ee: e4350513 addi a0,a0,-445 *s++ = h[(n64 >> 60) & 15]; - 38ae: 03c75693 srli a3,a4,0x3c - 38b2: 96ae add a3,a3,a1 - 38b4: 0006c683 lbu a3,0(a3) - 38b8: 0785 addi a5,a5,1 + 38f2: 03c75693 srli a3,a4,0x3c + 38f6: 96ae add a3,a3,a1 + 38f8: 0006c683 lbu a3,0(a3) + 38fc: 0785 addi a5,a5,1 n64 <<= 4; - 38ba: 0712 slli a4,a4,0x4 + 38fe: 0712 slli a4,a4,0x4 *s++ = h[(n64 >> 60) & 15]; - 38bc: fed78fa3 sb a3,-1(a5) + 3900: fed78fa3 sb a3,-1(a5) while (n--) { - 38c0: fea797e3 bne a5,a0,38ae + 3904: fea797e3 bne a5,a0,38f2 l = (int)(s - (num + 64)); - 38c4: 280d addiw a6,a6,3 - 38c6: 0008069b sext.w a3,a6 + 3908: 280d addiw a6,a6,3 + 390a: 0008069b sext.w a3,a6 if (pr < (stbsp__int32)l) - 38ca: fff6c713 not a4,a3 - 38ce: 977d srai a4,a4,0x3f - 38d0: 00e87733 and a4,a6,a4 + 390e: fff6c713 not a4,a3 + 3912: 977d srai a4,a4,0x3f + 3914: 00e87733 and a4,a6,a4 dp = (int)(s - sn); - 38d4: 0013051b addiw a0,t1,1 + 3918: 0013051b addiw a0,t1,1 if (pr < (stbsp__int32)l) - 38d8: 0007031b sext.w t1,a4 + 391c: 0007031b sext.w t1,a4 pr -= l; - 38dc: 4107073b subw a4,a4,a6 - 38e0: d76ff06f j 2e56 + 3920: 4107073b subw a4,a4,a6 + 3924: d76ff06f j 2e9a *--s = stbsp__comma; - 38e4: 00004a17 auipc s4,0x4 - 38e8: 584a0a13 addi s4,s4,1412 # 7e68 + 3928: 00004a17 auipc s4,0x4 + 392c: 5c0a0a13 addi s4,s4,1472 # 7ee8 if (n64 >= 100000000) { - 38ec: 05f5e7b7 lui a5,0x5f5e - 38f0: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f5533f> + 3930: 05f5e7b7 lui a5,0x5f5e + 3934: 0ff78793 addi a5,a5,255 # 5f5e0ff <_ZSt4cerr+0x5f552bf> n = (stbsp__uint32)(n64 % 100000000); - 38f4: 05f5e637 lui a2,0x5f5e + 3938: 05f5e637 lui a2,0x5f5e *--s = stbsp__comma; - 38f8: 0cda4b83 lbu s7,205(s4) + 393c: 0cda4b83 lbu s7,205(s4) if (n64 >= 100000000) { - 38fc: e83e sd a5,16(sp) + 3940: e83e sd a5,16(sp) n = (stbsp__uint32)(n64 % 100000000); - 38fe: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f55340> + 3942: 10060793 addi a5,a2,256 # 5f5e100 <_ZSt4cerr+0x5f552c0> l = 0; - 3902: d082 sw zero,96(sp) + 3946: d082 sw zero,96(sp) if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 3904: 040e7813 andi a6,t3,64 - 3908: 4701 li a4,0 - 390a: 4281 li t0,0 + 3948: 040e7813 andi a6,t3,64 + 394c: 4701 li a4,0 + 394e: 4281 li t0,0 s = num + STBSP__NUMSZ; - 390c: 28010a93 addi s5,sp,640 + 3950: 28010a93 addi s5,sp,640 n = (stbsp__uint32)(n64 % 100000000); - 3910: ec3e sd a5,24(sp) + 3954: ec3e sd a5,24(sp) if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 3912: 430d li t1,3 + 3956: 430d li t1,3 n /= 10; - 3914: 45a9 li a1,10 + 3958: 45a9 li a1,10 while (n) { - 3916: 4ea5 li t4,9 + 395a: 4ea5 li t4,9 *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 3918: 06400f93 li t6,100 + 395c: 06400f93 li t6,100 if (n64 >= 100000000) { - 391c: 67c2 ld a5,16(sp) + 3960: 67c2 ld a5,16(sp) char *o = s - 8; - 391e: ff8a8513 addi a0,s5,-8 + 3962: ff8a8513 addi a0,s5,-8 if (n64 >= 100000000) { - 3922: 0fe7f763 bgeu a5,t5,3a10 + 3966: 0fe7f763 bgeu a5,t5,3a54 n = (stbsp__uint32)(n64 % 100000000); - 3926: 6662 ld a2,24(sp) - 3928: 02cf77b3 remu a5,t5,a2 + 396a: 6662 ld a2,24(sp) + 396c: 02cf77b3 remu a5,t5,a2 n64 /= 100000000; - 392c: 02cf5f33 divu t5,t5,a2 + 3970: 02cf5f33 divu t5,t5,a2 if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 3930: 0e080463 beqz a6,3a18 + 3974: 0e080463 beqz a6,3a5c while (n) { - 3934: cb85 beqz a5,3964 + 3978: cb85 beqz a5,39a8 *--s = stbsp__comma; - 3936: 1afd addi s5,s5,-1 + 397a: 1afd addi s5,s5,-1 if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 3938: 00671763 bne a4,t1,3946 + 397c: 00671763 bne a4,t1,398a --o; - 393c: 017a8023 sb s7,0(s5) - 3940: 157d addi a0,a0,-1 + 3980: 017a8023 sb s7,0(s5) + 3984: 157d addi a0,a0,-1 *--s = stbsp__comma; - 3942: 1afd addi s5,s5,-1 + 3986: 1afd addi s5,s5,-1 l = 0; - 3944: 4701 li a4,0 + 3988: 4701 li a4,0 if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 3946: 2705 addiw a4,a4,1 + 398a: 2705 addiw a4,a4,1 *--s = (char)(n % 10) + '0'; - 3948: 02b7f63b remuw a2,a5,a1 - 394c: 0306061b addiw a2,a2,48 - 3950: 00ca8023 sb a2,0(s5) + 398c: 02b7f63b remuw a2,a5,a1 + 3990: 0306061b addiw a2,a2,48 + 3994: 00ca8023 sb a2,0(s5) n /= 10; - 3954: 02b7d63b divuw a2,a5,a1 + 3998: 02b7d63b divuw a2,a5,a1 while (n) { - 3958: 00fef563 bgeu t4,a5,3962 + 399c: 00fef563 bgeu t4,a5,39a6 *--s = stbsp__comma; - 395c: 1afd addi s5,s5,-1 - 395e: 87b2 mv a5,a2 - 3960: bfe1 j 3938 + 39a0: 1afd addi s5,s5,-1 + 39a2: 87b2 mv a5,a2 + 39a4: bfe1 j 397c while (n) { - 3962: 4285 li t0,1 + 39a6: 4285 li t0,1 if (n64 == 0) { - 3964: 020f0063 beqz t5,3984 + 39a8: 020f0063 beqz t5,39c8 while (s != o) - 3968: fb550ae3 beq a0,s5,391c + 39ac: fb550ae3 beq a0,s5,3960 *--s = stbsp__comma; - 396c: 1afd addi s5,s5,-1 + 39b0: 1afd addi s5,s5,-1 if ((fl & STBSP__TRIPLET_COMMA) && (l++ == 3)) { - 396e: 00080663 beqz a6,397a - 3972: 08670863 beq a4,t1,3a02 - 3976: 2705 addiw a4,a4,1 - 3978: 4285 li t0,1 + 39b2: 00080663 beqz a6,39be + 39b6: 08670863 beq a4,t1,3a46 + 39ba: 2705 addiw a4,a4,1 + 39bc: 4285 li t0,1 *--s = '0'; - 397a: 03000793 li a5,48 - 397e: 00fa8023 sb a5,0(s5) - 3982: b7dd j 3968 - 3984: 00028363 beqz t0,398a - 3988: d0ba sw a4,96(sp) + 39be: 03000793 li a5,48 + 39c2: 00fa8023 sb a5,0(s5) + 39c6: b7dd j 39ac + 39c8: 00028363 beqz t0,39ce + 39cc: d0ba sw a4,96(sp) if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 398a: 000ac703 lbu a4,0(s5) - 398e: 03000793 li a5,48 - 3992: 34f70b63 beq a4,a5,3ce8 + 39ce: 000ac703 lbu a4,0(s5) + 39d2: 03000793 li a5,48 + 39d6: 34f70b63 beq a4,a5,3d2c l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 3996: 051c addi a5,sp,640 - 3998: 415786bb subw a3,a5,s5 + 39da: 051c addi a5,sp,640 + 39dc: 415786bb subw a3,a5,s5 tail[0] = 0; - 399c: 06010823 sb zero,112(sp) + 39e0: 06010823 sb zero,112(sp) if (fl & STBSP__NEGATIVE) { - 39a0: 080e7713 andi a4,t3,128 - 39a4: 87f2 mv a5,t3 - 39a6: 32070863 beqz a4,3cd6 - 39aa: 678d lui a5,0x3 - 39ac: d017879b addiw a5,a5,-767 # 2d01 + 39e4: 080e7713 andi a4,t3,128 + 39e8: 87f2 mv a5,t3 + 39ea: 32070863 beqz a4,3d1a + 39ee: 678d lui a5,0x3 + 39f0: d017879b addiw a5,a5,-767 # 2d01 sign[0] = 1; - 39b0: 06f11423 sh a5,104(sp) - 39b4: 4705 li a4,1 - 39b6: 4a05 li s4,1 + 39f4: 06f11423 sh a5,104(sp) + 39f8: 4705 li a4,1 + 39fa: 4a05 li s4,1 l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 39b8: d0b6 sw a3,96(sp) + 39fc: d0b6 sw a3,96(sp) if (l == 0) { - 39ba: 30068163 beqz a3,3cbc + 39fe: 30068163 beqz a3,3d00 cs = l + (3 << 24); - 39be: 030002b7 lui t0,0x3000 - 39c2: 00d282bb addw t0,t0,a3 + 3a02: 030002b7 lui t0,0x3000 + 3a06: 00d282bb addw t0,t0,a3 if (pr < (stbsp__int32)l) - 39c6: 0006861b sext.w a2,a3 + 3a0a: 0006861b sext.w a2,a3 if (pr < 0) - 39ca: fff8c793 not a5,a7 - 39ce: 97fd srai a5,a5,0x3f + 3a0e: fff8c793 not a5,a7 + 3a12: 97fd srai a5,a5,0x3f if (pr < (stbsp__int32)l) - 39d0: 00f8f7b3 and a5,a7,a5 - 39d4: 0007859b sext.w a1,a5 - 39d8: 00c5d363 bge a1,a2,39de - 39dc: 87b2 mv a5,a2 + 3a14: 00f8f7b3 and a5,a7,a5 + 3a18: 0007859b sext.w a1,a5 + 3a1c: 00c5d363 bge a1,a2,3a22 + 3a20: 87b2 mv a5,a2 n = pr + lead[0] + tail[0] + tz; - 39de: 00f7063b addw a2,a4,a5 - 39e2: 8732 mv a4,a2 + 3a22: 00f7063b addw a2,a4,a5 + 3a26: 8732 mv a4,a2 if (pr < (stbsp__int32)l) - 39e4: 2781 sext.w a5,a5 + 3a28: 2781 sext.w a5,a5 if ((fl & STBSP__LEFTJUST) == 0) { - 39e6: 001e7513 andi a0,t3,1 + 3a2a: 001e7513 andi a0,t3,1 if (fw < (stbsp__int32)n) - 39ea: 835a mv t1,s6 - 39ec: 00cb5363 bge s6,a2,39f2 - 39f0: 8332 mv t1,a2 + 3a2e: 835a mv t1,s6 + 3a30: 00cb5363 bge s6,a2,3a36 + 3a34: 8332 mv t1,a2 fw -= n; - 39f2: 40e3033b subw t1,t1,a4 + 3a36: 40e3033b subw t1,t1,a4 scopy: - 39f6: 4f81 li t6,0 + 3a3a: 4f81 li t6,0 pr -= l; - 39f8: 40d7873b subw a4,a5,a3 + 3a3c: 40d7873b subw a4,a5,a3 tz = 0; - 39fc: 4881 li a7,0 + 3a40: 4881 li a7,0 scopy: - 39fe: 9e2ff06f j 2be0 + 3a42: 9e2ff06f j 2c24 *--s = stbsp__comma; - 3a02: 87de mv a5,s7 + 3a46: 87de mv a5,s7 --o; - 3a04: 157d addi a0,a0,-1 + 3a48: 157d addi a0,a0,-1 l = 0; - 3a06: 4701 li a4,0 + 3a4a: 4701 li a4,0 --o; - 3a08: 4285 li t0,1 - 3a0a: 00fa8023 sb a5,0(s5) - 3a0e: bfa9 j 3968 + 3a4c: 4285 li t0,1 + 3a4e: 00fa8023 sb a5,0(s5) + 3a52: bfa9 j 39ac n = (stbsp__uint32)n64; - 3a10: 000f079b sext.w a5,t5 + 3a54: 000f079b sext.w a5,t5 n64 = 0; - 3a14: 4f01 li t5,0 - 3a16: bf29 j 3930 - 3a18: f046 sd a7,32(sp) + 3a58: 4f01 li t5,0 + 3a5a: bf29 j 3974 + 3a5c: f046 sd a7,32(sp) *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 3a1a: 03f7f63b remuw a2,a5,t6 + 3a5e: 03f7f63b remuw a2,a5,t6 s -= 2; - 3a1e: 1af9 addi s5,s5,-2 + 3a62: 1af9 addi s5,s5,-2 *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 3a20: 0007889b sext.w a7,a5 - 3a24: 2605 addiw a2,a2,1 - 3a26: 0016161b slliw a2,a2,0x1 - 3a2a: 1602 slli a2,a2,0x20 - 3a2c: 9201 srli a2,a2,0x20 - 3a2e: 9652 add a2,a2,s4 - 3a30: 00065603 lhu a2,0(a2) + 3a64: 0007889b sext.w a7,a5 + 3a68: 2605 addiw a2,a2,1 + 3a6a: 0016161b slliw a2,a2,0x1 + 3a6e: 1602 slli a2,a2,0x20 + 3a70: 9201 srli a2,a2,0x20 + 3a72: 9652 add a2,a2,s4 + 3a74: 00065603 lhu a2,0(a2) n /= 100; - 3a34: 03f7d7bb divuw a5,a5,t6 + 3a78: 03f7d7bb divuw a5,a5,t6 *(stbsp__uint16 *)s = *(stbsp__uint16 *)&stbsp__digitpair.pair[(n % 100) * 2]; - 3a38: 00ca9023 sh a2,0(s5) + 3a7c: 00ca9023 sh a2,0(s5) } while (n); - 3a3c: 06300613 li a2,99 - 3a40: fd166de3 bltu a2,a7,3a1a - 3a44: 7882 ld a7,32(sp) + 3a80: 06300613 li a2,99 + 3a84: fd166de3 bltu a2,a7,3a5e + 3a88: 7882 ld a7,32(sp) if (n64 == 0) { - 3a46: f20f11e3 bnez t5,3968 - 3a4a: bf2d j 3984 + 3a8a: f20f11e3 bnez t5,39ac + 3a8e: bf2d j 39c8 *(stbsp__uint32 *)bf = 0x20202020; - 3a4c: 20202b37 lui s6,0x20202 + 3a90: 20202b37 lui s6,0x20202 stbsp__cb_buf_clamp(i, fw); - 3a50: 854a mv a0,s2 + 3a94: 854a mv a0,s2 *bf++ = ' '; - 3a52: 02000a93 li s5,32 + 3a96: 02000a93 li s5,32 *(stbsp__uint32 *)bf = 0x20202020; - 3a56: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201f9260> + 3a9a: 020b0b13 addi s6,s6,32 # 20202020 <_ZSt4cerr+0x201f91e0> stbsp__chk_cb_buf(1); - 3a5a: 1fe00a13 li s4,510 + 3a9e: 1fe00a13 li s4,510 stbsp__cb_buf_clamp(i, fw); - 3a5e: 20000b93 li s7,512 - 3a62: 891a mv s2,t1 - 3a64: 0a098063 beqz s3,3b04 - 3a68: 40a40633 sub a2,s0,a0 - 3a6c: 40cb87bb subw a5,s7,a2 - 3a70: 873e mv a4,a5 - 3a72: 00f95363 bge s2,a5,3a78 - 3a76: 874a mv a4,s2 - 3a78: 0007079b sext.w a5,a4 + 3aa2: 20000b93 li s7,512 + 3aa6: 891a mv s2,t1 + 3aa8: 0a098063 beqz s3,3b48 + 3aac: 40a40633 sub a2,s0,a0 + 3ab0: 40cb87bb subw a5,s7,a2 + 3ab4: 873e mv a4,a5 + 3ab6: 00f95363 bge s2,a5,3abc + 3aba: 874a mv a4,s2 + 3abc: 0007079b sext.w a5,a4 fw -= i; - 3a7c: 40e9093b subw s2,s2,a4 + 3ac0: 40e9093b subw s2,s2,a4 while (i) { - 3a80: e799 bnez a5,3a8e - 3a82: a281 j 3bc2 + 3ac4: e799 bnez a5,3ad2 + 3ac6: a281 j 3c06 *bf++ = ' '; - 3a84: 01540023 sb s5,0(s0) + 3ac8: 01540023 sb s5,0(s0) --i; - 3a88: 37fd addiw a5,a5,-1 + 3acc: 37fd addiw a5,a5,-1 *bf++ = ' '; - 3a8a: 0405 addi s0,s0,1 + 3ace: 0405 addi s0,s0,1 while (i) { - 3a8c: cba1 beqz a5,3adc + 3ad0: cba1 beqz a5,3b20 if ((((stbsp__uintptr)bf) & 3) == 0) - 3a8e: 00347713 andi a4,s0,3 - 3a92: fb6d bnez a4,3a84 + 3ad2: 00347713 andi a4,s0,3 + 3ad6: fb6d bnez a4,3ac8 while (i >= 4) { - 3a94: 470d li a4,3 - 3a96: 40f75363 bge a4,a5,3e9c - 3a9a: ffc7869b addiw a3,a5,-4 - 3a9e: 0026d79b srliw a5,a3,0x2 - 3aa2: 0017871b addiw a4,a5,1 - 3aa6: 070a slli a4,a4,0x2 - 3aa8: 9722 add a4,a4,s0 + 3ad8: 470d li a4,3 + 3ada: 40f75363 bge a4,a5,3ee0 + 3ade: ffc7869b addiw a3,a5,-4 + 3ae2: 0026d79b srliw a5,a3,0x2 + 3ae6: 0017871b addiw a4,a5,1 + 3aea: 070a slli a4,a4,0x2 + 3aec: 9722 add a4,a4,s0 *(stbsp__uint32 *)bf = 0x20202020; - 3aaa: 01642023 sw s6,0(s0) + 3aee: 01642023 sw s6,0(s0) bf += 4; - 3aae: 0411 addi s0,s0,4 + 3af2: 0411 addi s0,s0,4 while (i >= 4) { - 3ab0: fee41de3 bne s0,a4,3aaa - 3ab4: 0027979b slliw a5,a5,0x2 - 3ab8: 40f687bb subw a5,a3,a5 + 3af4: fee41de3 bne s0,a4,3aee + 3af8: 0027979b slliw a5,a5,0x2 + 3afc: 40f687bb subw a5,a3,a5 while (i--) - 3abc: fff7869b addiw a3,a5,-1 - 3ac0: cf91 beqz a5,3adc - 3ac2: 9fa1 addw a5,a5,s0 + 3b00: fff7869b addiw a3,a5,-1 + 3b04: cf91 beqz a5,3b20 + 3b06: 9fa1 addw a5,a5,s0 *bf++ = ' '; - 3ac4: 0705 addi a4,a4,1 + 3b08: 0705 addi a4,a4,1 while (i--) - 3ac6: 0007061b sext.w a2,a4 + 3b0a: 0007061b sext.w a2,a4 *bf++ = ' '; - 3aca: ff570fa3 sb s5,-1(a4) + 3b0e: ff570fa3 sb s5,-1(a4) while (i--) - 3ace: fec79be3 bne a5,a2,3ac4 - 3ad2: 2685 addiw a3,a3,1 - 3ad4: 02069793 slli a5,a3,0x20 - 3ad8: 9381 srli a5,a5,0x20 - 3ada: 943e add s0,s0,a5 + 3b12: fec79be3 bne a5,a2,3b08 + 3b16: 2685 addiw a3,a3,1 + 3b18: 02069793 slli a5,a3,0x20 + 3b1c: 9381 srli a5,a5,0x20 + 3b1e: 943e add s0,s0,a5 stbsp__chk_cb_buf(1); - 3adc: 00098f63 beqz s3,3afa - 3ae0: 40a4063b subw a2,s0,a0 - 3ae4: 00ca5b63 bge s4,a2,3afa - 3ae8: 65a2 ld a1,8(sp) - 3aea: e81e sd t2,16(sp) - 3aec: 00cd0d3b addw s10,s10,a2 - 3af0: 9982 jalr s3 - 3af2: 80050be3 beqz a0,3308 - 3af6: 63c2 ld t2,16(sp) - 3af8: 842a mv s0,a0 + 3b20: 00098f63 beqz s3,3b3e + 3b24: 40a4063b subw a2,s0,a0 + 3b28: 00ca5b63 bge s4,a2,3b3e + 3b2c: 65a2 ld a1,8(sp) + 3b2e: e81e sd t2,16(sp) + 3b30: 00cd0d3b addw s10,s10,a2 + 3b34: 9982 jalr s3 + 3b36: 80050be3 beqz a0,334c + 3b3a: 63c2 ld t2,16(sp) + 3b3c: 842a mv s0,a0 while (fw) { - 3afa: f60915e3 bnez s2,3a64 - 3afe: 892a mv s2,a0 - 3b00: f21fe06f j 2a20 + 3b3e: f60915e3 bnez s2,3aa8 + 3b42: 892a mv s2,a0 + 3b44: f21fe06f j 2a64 stbsp__cb_buf_clamp(i, fw); - 3b04: 87ca mv a5,s2 + 3b48: 87ca mv a5,s2 fw -= i; - 3b06: 4901 li s2,0 + 3b4a: 4901 li s2,0 if ((((stbsp__uintptr)bf) & 3) == 0) - 3b08: b759 j 3a8e + 3b4c: b759 j 3ad2 } else if (fl & STBSP__LEADINGPLUS) { - 3b0a: 002e7713 andi a4,t3,2 - 3b0e: 94070663 beqz a4,2c5a + 3b4e: 002e7713 andi a4,t3,2 + 3b52: 94070663 beqz a4,2c9e sign[0] = 1; - 3b12: 670d lui a4,0x3 - 3b14: b0170713 addi a4,a4,-1279 # 2b01 - 3b18: 06e11423 sh a4,104(sp) - 3b1c: 93eff06f j 2c5a + 3b56: 670d lui a4,0x3 + 3b58: b0170713 addi a4,a4,-1279 # 2b01 + 3b5c: 06e11423 sh a4,104(sp) + 3b60: 93eff06f j 2c9e if (((stbsp__uintptr)sn & 3) == 0) - 3b20: 87d6 mv a5,s5 + 3b64: 87d6 mv a5,s5 while (limit >= 4) { - 3b22: 470d li a4,3 - 3b24: 22d77763 bgeu a4,a3,3d52 + 3b66: 470d li a4,3 + 3b68: 22d77763 bgeu a4,a3,3d96 if ((v - 0x01010101) & (~v) & 0x80808080UL) - 3b28: feff05b7 lui a1,0xfeff0 - 3b2c: 80808637 lui a2,0x80808 - 3b30: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe713f> - 3b34: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff807ff2c0> + 3b6c: feff05b7 lui a1,0xfeff0 + 3b70: 80808637 lui a2,0x80808 + 3b74: eff5859b addiw a1,a1,-257 # fffffffffefefeff <_ZSt4cerr+0xfffffffffefe70bf> + 3b78: 08060613 addi a2,a2,128 # ffffffff80808080 <_ZSt4cerr+0xffffffff807ff240> while (limit >= 4) { - 3b38: 480d li a6,3 - 3b3a: a029 j 3b44 + 3b7c: 480d li a6,3 + 3b7e: a029 j 3b88 limit -= 4; - 3b3c: 36f1 addiw a3,a3,-4 + 3b80: 36f1 addiw a3,a3,-4 sn += 4; - 3b3e: 0791 addi a5,a5,4 + 3b82: 0791 addi a5,a5,4 while (limit >= 4) { - 3b40: 20d87963 bgeu a6,a3,3d52 + 3b84: 20d87963 bgeu a6,a3,3d96 stbsp__uint32 v = *(stbsp__uint32 *)sn; - 3b44: 4398 lw a4,0(a5) + 3b88: 4398 lw a4,0(a5) if ((v - 0x01010101) & (~v) & 0x80808080UL) - 3b46: 00b7053b addw a0,a4,a1 - 3b4a: fff74713 not a4,a4 - 3b4e: 8f69 and a4,a4,a0 - 3b50: 8f71 and a4,a4,a2 - 3b52: 2701 sext.w a4,a4 - 3b54: d765 beqz a4,3b3c - 3b56: 02069713 slli a4,a3,0x20 - 3b5a: 9301 srli a4,a4,0x20 - 3b5c: 973e add a4,a4,a5 - 3b5e: a021 j 3b66 + 3b8a: 00b7053b addw a0,a4,a1 + 3b8e: fff74713 not a4,a4 + 3b92: 8f69 and a4,a4,a0 + 3b94: 8f71 and a4,a4,a2 + 3b96: 2701 sext.w a4,a4 + 3b98: d765 beqz a4,3b80 + 3b9a: 02069713 slli a4,a3,0x20 + 3b9e: 9301 srli a4,a4,0x20 + 3ba0: 973e add a4,a4,a5 + 3ba2: a021 j 3baa ++sn; - 3b60: 0785 addi a5,a5,1 + 3ba4: 0785 addi a5,a5,1 while (limit && *sn) { - 3b62: 00e78663 beq a5,a4,3b6e - 3b66: 0007c683 lbu a3,0(a5) - 3b6a: fafd bnez a3,3b60 - 3b6c: 873e mv a4,a5 + 3ba6: 00e78663 beq a5,a4,3bb2 + 3baa: 0007c683 lbu a3,0(a5) + 3bae: fafd bnez a3,3ba4 + 3bb0: 873e mv a4,a5 return (stbsp__uint32)(sn - s); - 3b6e: 41570733 sub a4,a4,s5 - 3b72: 0007069b sext.w a3,a4 + 3bb2: 41570733 sub a4,a4,s5 + 3bb6: 0007069b sext.w a3,a4 if (pr < (stbsp__int32)l) - 3b76: fff6c793 not a5,a3 - 3b7a: 97fd srai a5,a5,0x3f - 3b7c: 8f7d and a4,a4,a5 - 3b7e: 0007079b sext.w a5,a4 + 3bba: fff6c793 not a5,a3 + 3bbe: 97fd srai a5,a5,0x3f + 3bc0: 8f7d and a4,a4,a5 + 3bc2: 0007079b sext.w a5,a4 n = pr + lead[0] + tail[0] + tz; - 3b82: 863e mv a2,a5 + 3bc6: 863e mv a2,a5 pr -= l; - 3b84: 9f15 subw a4,a4,a3 + 3bc8: 9f15 subw a4,a4,a3 return (stbsp__uint32)(sn - s); - 3b86: d2eff06f j 30b4 + 3bca: d2eff06f j 30f8 for (n = 1; n < l; n++) - 3b8a: 4605 li a2,1 - 3b8c: aed663e3 bltu a2,a3,3672 - 3b90: 0c210613 addi a2,sp,194 - 3b94: bcf5 j 3690 + 3bce: 4605 li a2,1 + 3bd0: aed663e3 bltu a2,a3,36b6 + 3bd4: 0c210613 addi a2,sp,194 + 3bd8: bcf5 j 36d4 l = pr + 1; - 3b96: 4685 li a3,1 + 3bda: 4685 li a3,1 if ((l - 1) > (stbsp__uint32)pr) - 3b98: 4501 li a0,0 + 3bdc: 4501 li a0,0 *s++ = sn[0]; - 3b9a: 0c110613 addi a2,sp,193 - 3b9e: bccd j 3690 - 3ba0: 4591 li a1,4 - 3ba2: 4f91 li t6,4 + 3bde: 0c110613 addi a2,sp,193 + 3be2: bccd j 36d4 + 3be4: 4591 li a1,4 + 3be6: 4f91 li t6,4 n = (dp >= 100) ? 5 : 4; - 3ba4: 4e91 li t4,4 - 3ba6: be21 j 36be - 3ba8: 4a85 li s5,1 - 3baa: 80000737 lui a4,0x80000 + 3be8: 4e91 li t4,4 + 3bea: be21 j 3702 + 3bec: 4a85 li s5,1 + 3bee: 80000737 lui a4,0x80000 pr = 1; // default is 6 - 3bae: 4a05 li s4,1 - 3bb0: 920ff06f j 2cd0 + 3bf2: 4a05 li s4,1 + 3bf4: 920ff06f j 2d14 dp = (n64) ? -1022 : 0; - 3bb4: 4601 li a2,0 - 3bb6: c119 beqz a0,3bbc - 3bb8: c0200613 li a2,-1022 + 3bf8: 4601 li a2,0 + 3bfa: c119 beqz a0,3c00 + 3bfc: c0200613 li a2,-1022 *bits = b & ((((stbsp__uint64)1) << 52) - 1); - 3bbc: 872a mv a4,a0 - 3bbe: a3aff06f j 2df8 + 3c00: 872a mv a4,a0 + 3c02: a3aff06f j 2e3c stbsp__chk_cb_buf(1); - 3bc2: 2601 sext.w a2,a2 - 3bc4: 1fe00793 li a5,510 - 3bc8: f2c7c0e3 blt a5,a2,3ae8 - 3bcc: bd61 j 3a64 + 3c06: 2601 sext.w a2,a2 + 3c08: 1fe00793 li a5,510 + 3c0c: f2c7c0e3 blt a5,a2,3b2c + 3c10: bd61 j 3aa8 tail[0] = (char)n; - 3bce: 4795 li a5,5 + 3c12: 4795 li a5,5 tail[n] = '0' + dp % 10; - 3bd0: 06b10aa3 sb a1,117(sp) + 3c14: 06b10aa3 sb a1,117(sp) tail[0] = (char)n; - 3bd4: 06f10823 sb a5,112(sp) + 3c18: 06f10823 sb a5,112(sp) tail[n] = '0' + dp % 10; - 3bd8: 4815 li a6,5 - 3bda: 4f95 li t6,5 + 3c1c: 4815 li a6,5 + 3c1e: 4f95 li t6,5 n = (dp >= 1000) ? 6 : ((dp >= 100) ? 5 : ((dp >= 10) ? 4 : 3)); - 3bdc: 4595 li a1,5 - 3bde: b935 j 381a + 3c20: 4595 li a1,5 + 3c22: b935 j 385e l = pr + dp; - 3be0: 011786bb addw a3,a5,a7 - 3be4: d0b6 sw a3,96(sp) - 3be6: b6d5 j 37ca + 3c24: 011786bb addw a3,a5,a7 + 3c28: d0b6 sw a3,96(sp) + 3c2a: b6d5 j 380e s = (char *)"null"; - 3be8: 00002a97 auipc s5,0x2 - 3bec: 518a8a93 addi s5,s5,1304 # 6100 <_GLOBAL__sub_I__ZSt3cin+0x158> - 3bf0: c80ff06f j 3070 + 3c2c: 00002a97 auipc s5,0x2 + 3c30: 54ca8a93 addi s5,s5,1356 # 6178 <_GLOBAL__sub_I__ZSt3cin+0x174> + 3c34: c80ff06f j 30b4 } else if (fl & STBSP__LEADINGPLUS) { - 3bf4: 002e7793 andi a5,t3,2 - 3bf8: 1c079c63 bnez a5,3dd0 + 3c38: 002e7793 andi a5,t3,2 + 3c3c: 1c079c63 bnez a5,3e14 sign[0] = 0; - 3bfc: 4689 li a3,2 - 3bfe: 4a09 li s4,2 - 3c00: 4805 li a6,1 - 3c02: 9e8ff06f j 2dea + 3c40: 4689 li a3,2 + 3c42: 4a09 li s4,2 + 3c44: 4805 li a6,1 + 3c46: 9e8ff06f j 2e2e sign[0] = 1; - 3c06: 670d lui a4,0x3 - 3c08: b0170713 addi a4,a4,-1279 # 2b01 - 3c0c: 06e11423 sh a4,104(sp) - 3c10: b86ff06f j 2f96 + 3c4a: 670d lui a4,0x3 + 3c4c: b0170713 addi a4,a4,-1279 # 2b01 + 3c50: 06e11423 sh a4,104(sp) + 3c54: b86ff06f j 2fda pr = 0; - 3c14: 4881 li a7,0 - 3c16: f1ffe06f j 2b34 + 3c58: 4881 li a7,0 + 3c5a: f1ffe06f j 2b78 *s++ = '0'; - 3c1a: 03000713 li a4,48 - 3c1e: 0ce10023 sb a4,192(sp) + 3c5e: 03000713 li a4,48 + 3c62: 0ce10023 sb a4,192(sp) if (pr) - 3c22: 1a088c63 beqz a7,3dda + 3c66: 1a088c63 beqz a7,3e1e *s++ = stbsp__period; - 3c26: 00004717 auipc a4,0x4 - 3c2a: 30e74703 lbu a4,782(a4) # 7f34 + 3c6a: 00004717 auipc a4,0x4 + 3c6e: 34a74703 lbu a4,842(a4) # 7fb4 n = -dp; - 3c2e: 40f007bb negw a5,a5 + 3c72: 40f007bb negw a5,a5 *s++ = stbsp__period; - 3c32: 0ce100a3 sb a4,193(sp) + 3c76: 0ce100a3 sb a4,193(sp) if ((stbsp__int32)n > pr) - 3c36: 0007871b sext.w a4,a5 - 3c3a: 00e8d363 bge a7,a4,3c40 - 3c3e: 87c6 mv a5,a7 - 3c40: 0007871b sext.w a4,a5 + 3c7a: 0007871b sext.w a4,a5 + 3c7e: 00e8d363 bge a7,a4,3c84 + 3c82: 87c6 mv a5,a7 + 3c84: 0007871b sext.w a4,a5 if ((stbsp__int32)(l + n) > pr) - 3c44: 00d7833b addw t1,a5,a3 - 3c48: 883a mv a6,a4 + 3c88: 00d7833b addw t1,a5,a3 + 3c8c: 883a mv a6,a4 while (i) { - 3c4a: 0c210793 addi a5,sp,194 + 3c8e: 0c210793 addi a5,sp,194 *s++ = '0'; - 3c4e: 03000513 li a0,48 + 3c92: 03000513 li a0,48 while (i) { - 3c52: e711 bnez a4,3c5e - 3c54: a271 j 3de0 + 3c96: e711 bnez a4,3ca2 + 3c98: a271 j 3e24 if ((((stbsp__uintptr)s) & 3) == 0) - 3c56: 0037f613 andi a2,a5,3 - 3c5a: 18060563 beqz a2,3de4 + 3c9a: 0037f613 andi a2,a5,3 + 3c9e: 18060563 beqz a2,3e28 *s++ = '0'; - 3c5e: 85ba mv a1,a4 - 3c60: 00a78023 sb a0,0(a5) + 3ca2: 85ba mv a1,a4 + 3ca4: 00a78023 sb a0,0(a5) --i; - 3c64: 377d addiw a4,a4,-1 + 3ca8: 377d addiw a4,a4,-1 *s++ = '0'; - 3c66: 0785 addi a5,a5,1 + 3caa: 0785 addi a5,a5,1 while (i) { - 3c68: f77d bnez a4,3c56 + 3cac: f77d bnez a4,3c9a if ((stbsp__int32)(l + n) > pr) - 3c6a: 0003071b sext.w a4,t1 - 3c6e: 4108863b subw a2,a7,a6 - 3c72: 00e8d563 bge a7,a4,3c7c + 3cae: 0003071b sext.w a4,t1 + 3cb2: 4108863b subw a2,a7,a6 + 3cb6: 00e8d563 bge a7,a4,3cc0 l = pr - n; - 3c76: 0006069b sext.w a3,a2 - 3c7a: d0b2 sw a2,96(sp) + 3cba: 0006069b sext.w a3,a2 + 3cbe: d0b2 sw a2,96(sp) while (i) { - 3c7c: c68d beqz a3,3ca6 - 3c7e: 7566 ld a0,120(sp) - 3c80: 02069813 slli a6,a3,0x20 - 3c84: 02085813 srli a6,a6,0x20 - 3c88: 01078eb3 add t4,a5,a6 - 3c8c: 85aa mv a1,a0 - 3c8e: 873e mv a4,a5 + 3cc0: c68d beqz a3,3cea + 3cc2: 7566 ld a0,120(sp) + 3cc4: 02069813 slli a6,a3,0x20 + 3cc8: 02085813 srli a6,a6,0x20 + 3ccc: 01078eb3 add t4,a5,a6 + 3cd0: 85aa mv a1,a0 + 3cd2: 873e mv a4,a5 *s++ = *sn++; - 3c90: 0005c883 lbu a7,0(a1) - 3c94: 0705 addi a4,a4,1 + 3cd4: 0005c883 lbu a7,0(a1) + 3cd8: 0705 addi a4,a4,1 while (i) { - 3c96: 0585 addi a1,a1,1 + 3cda: 0585 addi a1,a1,1 *s++ = *sn++; - 3c98: ff170fa3 sb a7,-1(a4) + 3cdc: ff170fa3 sb a7,-1(a4) while (i) { - 3c9c: ffd71ae3 bne a4,t4,3c90 - 3ca0: 9542 add a0,a0,a6 - 3ca2: 97c2 add a5,a5,a6 - 3ca4: fcaa sd a0,120(sp) + 3ce0: ffd71ae3 bne a4,t4,3cd4 + 3ce4: 9542 add a0,a0,a6 + 3ce6: 97c2 add a5,a5,a6 + 3ce8: fcaa sd a0,120(sp) l = (stbsp__uint32)(s - (num + 64)); - 3ca6: 0c010a93 addi s5,sp,192 + 3cea: 0c010a93 addi s5,sp,192 cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 3caa: 030002b7 lui t0,0x3000 + 3cee: 030002b7 lui t0,0x3000 tz = pr - (n + l); - 3cae: 40d608bb subw a7,a2,a3 + 3cf2: 40d608bb subw a7,a2,a3 l = (stbsp__uint32)(s - (num + 64)); - 3cb2: 415787b3 sub a5,a5,s5 + 3cf6: 415787b3 sub a5,a5,s5 cs = 1 + (3 << 24); // how many tens did we write (for commas below) - 3cb6: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7241> - 3cb8: fbcff06f j 3474 + 3cfa: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff71c1> + 3cfc: fbcff06f j 34b8 *--s = '0'; - 3cbc: 03000793 li a5,48 - 3cc0: fefa8fa3 sb a5,-1(s5) + 3d00: 03000793 li a5,48 + 3d04: fefa8fa3 sb a5,-1(s5) l = 1; - 3cc4: 030002b7 lui t0,0x3000 - 3cc8: 4785 li a5,1 - 3cca: d0be sw a5,96(sp) + 3d08: 030002b7 lui t0,0x3000 + 3d0c: 4785 li a5,1 + 3d0e: d0be sw a5,96(sp) *--s = '0'; - 3ccc: 1afd addi s5,s5,-1 + 3d10: 1afd addi s5,s5,-1 l = 1; - 3cce: 4605 li a2,1 - 3cd0: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff7241> - 3cd2: 4685 li a3,1 - 3cd4: b9dd j 39ca + 3d12: 4605 li a2,1 + 3d14: 0285 addi t0,t0,1 # 3000001 <_ZSt4cerr+0x2ff71c1> + 3d16: 4685 li a3,1 + 3d18: b9dd j 3a0e } else if (fl & STBSP__LEADINGSPACE) { - 3cd6: 004e7713 andi a4,t3,4 - 3cda: e74d bnez a4,3d84 + 3d1a: 004e7713 andi a4,t3,4 + 3d1e: e74d bnez a4,3dc8 } else if (fl & STBSP__LEADINGPLUS) { - 3cdc: 8b89 andi a5,a5,2 - 3cde: efd9 bnez a5,3d7c + 3d20: 8b89 andi a5,a5,2 + 3d22: efd9 bnez a5,3dc0 sign[0] = 0; - 3ce0: 06010423 sb zero,104(sp) - 3ce4: 4a01 li s4,0 - 3ce6: b9c9 j 39b8 + 3d24: 06010423 sb zero,104(sp) + 3d28: 4a01 li s4,0 + 3d2a: b9c9 j 39fc if ((s[0] == '0') && (s != (num + STBSP__NUMSZ))) - 3ce8: 051c addi a5,sp,640 - 3cea: cafa89e3 beq s5,a5,399c + 3d2c: 051c addi a5,sp,640 + 3d2e: cafa89e3 beq s5,a5,39e0 ++s; - 3cee: 0a85 addi s5,s5,1 + 3d32: 0a85 addi s5,s5,1 l = (stbsp__uint32)((num + STBSP__NUMSZ) - s); - 3cf0: 415786bb subw a3,a5,s5 - 3cf4: b165 j 399c + 3d34: 415786bb subw a3,a5,s5 + 3d38: b165 j 39e0 n = dp - n; - 3cf6: 40ce87bb subw a5,t4,a2 + 3d3a: 40ce87bb subw a5,t4,a2 if ((fl & STBSP__TRIPLET_COMMA) == 0) { - 3cfa: 12030e63 beqz t1,3e36 + 3d3e: 12030e63 beqz t1,3e7a if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3cfe: 4511 li a0,4 - 3d00: 03000613 li a2,48 + 3d42: 4511 li a0,4 + 3d44: 03000613 li a2,48 *s++ = stbsp__comma; - 3d04: 00170693 addi a3,a4,1 + 3d48: 00170693 addi a3,a4,1 if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3d08: 00030563 beqz t1,3d12 - 3d0c: 2585 addiw a1,a1,1 - 3d0e: 00a58963 beq a1,a0,3d20 - 3d12: 8736 mv a4,a3 + 3d4c: 00030563 beqz t1,3d56 + 3d50: 2585 addiw a1,a1,1 + 3d52: 00a58963 beq a1,a0,3d64 + 3d56: 8736 mv a4,a3 --n; - 3d14: 37fd addiw a5,a5,-1 - 3d16: fec70fa3 sb a2,-1(a4) + 3d58: 37fd addiw a5,a5,-1 + 3d5a: fec70fa3 sb a2,-1(a4) while (n) { - 3d1a: f7ed bnez a5,3d04 - 3d1c: f38ff06f j 3454 - 3d20: fe568fa3 sb t0,-1(a3) + 3d5e: f7ed bnez a5,3d48 + 3d60: f38ff06f j 3498 + 3d64: fe568fa3 sb t0,-1(a3) *s++ = stbsp__comma; - 3d24: 0709 addi a4,a4,2 + 3d68: 0709 addi a4,a4,2 if ((fl & STBSP__TRIPLET_COMMA) && (++cs == 4)) { - 3d26: 4585 li a1,1 - 3d28: b7f5 j 3d14 + 3d6a: 4585 li a1,1 + 3d6c: b7f5 j 3d58 sign[0] = 0; - 3d2a: 06010423 sb zero,104(sp) - 3d2e: f1dfe06f j 2c4a + 3d6e: 06010423 sb zero,104(sp) + 3d72: f1dfe06f j 2c8e tail[idx + 1] = "_kMGT"[fl >> 24]; - 3d32: 00002697 auipc a3,0x2 - 3d36: 3de68693 addi a3,a3,990 # 6110 <_GLOBAL__sub_I__ZSt3cin+0x168> - 3d3a: 9736 add a4,a4,a3 - 3d3c: 00074683 lbu a3,0(a4) - 3d40: 1088 addi a0,sp,96 - 3d42: 22060713 addi a4,a2,544 - 3d46: 972a add a4,a4,a0 - 3d48: ded70823 sb a3,-528(a4) + 3d76: 00002697 auipc a3,0x2 + 3d7a: 41268693 addi a3,a3,1042 # 6188 <_GLOBAL__sub_I__ZSt3cin+0x184> + 3d7e: 9736 add a4,a4,a3 + 3d80: 00074683 lbu a3,0(a4) + 3d84: 1088 addi a0,sp,96 + 3d86: 22060713 addi a4,a2,544 + 3d8a: 972a add a4,a4,a0 + 3d8c: ded70823 sb a3,-528(a4) idx++; - 3d4c: 8fb2 mv t6,a2 - 3d4e: fb0ff06f j 34fe + 3d90: 8fb2 mv t6,a2 + 3d92: fb0ff06f j 3542 while (limit && *sn) { - 3d52: e00692e3 bnez a3,3b56 - 3d56: bd19 j 3b6c + 3d96: e00692e3 bnez a3,3b9a + 3d9a: bd19 j 3bb0 pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 3d58: 0008071b sext.w a4,a6 - 3d5c: 86c2 mv a3,a6 - 3d5e: 88d2 mv a7,s4 + 3d9c: 0008071b sext.w a4,a6 + 3da0: 86c2 mv a3,a6 + 3da2: 88d2 mv a7,s4 pr = -dp + ((pr > (stbsp__int32)l) ? (stbsp__int32) l : pr); - 3d60: 863a mv a2,a4 - 3d62: 00e8d363 bge a7,a4,3d68 - 3d66: 8646 mv a2,a7 - 3d68: 40f608bb subw a7,a2,a5 - 3d6c: 814ff06f j 2d80 + 3da4: 863a mv a2,a4 + 3da6: 00e8d363 bge a7,a4,3dac + 3daa: 8646 mv a2,a7 + 3dac: 40f608bb subw a7,a2,a5 + 3db0: 814ff06f j 2dc4 divisor = 1000.0f; - 3d70: 00003797 auipc a5,0x3 - 3d74: b407b787 fld fa5,-1216(a5) # 68b0 - 3d78: dd5fe06f j 2b4c - 3d7c: 678d lui a5,0x3 - 3d7e: b017879b addiw a5,a5,-1279 # 2b01 - 3d82: b13d j 39b0 - 3d84: 6789 lui a5,0x2 - 3d86: 2785 addiw a5,a5,1 # 2001 <_vscanf_core.constprop.0+0x6b9> - 3d88: b125 j 39b0 + 3db4: 00003797 auipc a5,0x3 + 3db8: b747b787 fld fa5,-1164(a5) # 6928 + 3dbc: dd5fe06f j 2b90 + 3dc0: 678d lui a5,0x3 + 3dc2: b017879b addiw a5,a5,-1279 # 2b01 + 3dc6: b13d j 39f4 + 3dc8: 6789 lui a5,0x2 + 3dca: 2785 addiw a5,a5,1 # 2001 <_vscanf_core.constprop.0+0x675> + 3dcc: b125 j 39f4 *s++ = stbsp__period; - 3d8a: 00004517 auipc a0,0x4 - 3d8e: 1aa54503 lbu a0,426(a0) # 7f34 + 3dce: 00004517 auipc a0,0x4 + 3dd2: 1e654503 lbu a0,486(a0) # 7fb4 sn = s; - 3d92: 0c210793 addi a5,sp,194 + 3dd6: 0c210793 addi a5,sp,194 n = pr; - 3d96: 0008869b sext.w a3,a7 + 3dda: 0008869b sext.w a3,a7 *s++ = stbsp__period; - 3d9a: 0ca100a3 sb a0,193(sp) + 3dde: 0ca100a3 sb a0,193(sp) sn = s; - 3d9e: fcbe sd a5,120(sp) + 3de2: fcbe sd a5,120(sp) if (n > 13) - 3da0: 4535 li a0,13 + 3de4: 4535 li a0,13 n64 <<= 4; - 3da2: 0712 slli a4,a4,0x4 + 3de6: 0712 slli a4,a4,0x4 if (n > 13) - 3da4: 8836 mv a6,a3 - 3da6: 00d57363 bgeu a0,a3,3dac - 3daa: 4835 li a6,13 - 3dac: 0008051b sext.w a0,a6 + 3de8: 8836 mv a6,a3 + 3dea: 00d57363 bgeu a0,a3,3df0 + 3dee: 4835 li a6,13 + 3df0: 0008051b sext.w a0,a6 while (n--) { - 3db0: 387d addiw a6,a6,-1 + 3df4: 387d addiw a6,a6,-1 if (pr > (stbsp__int32)n) - 3db2: af1542e3 blt a0,a7,3896 + 3df6: af1542e3 blt a0,a7,38da tz = 0; - 3db6: 4881 li a7,0 - 3db8: b4cd j 389a + 3dfa: 4881 li a7,0 + 3dfc: b4cd j 38de while (n < l) { - 3dba: 87ba mv a5,a4 - 3dbc: bc1d j 37f2 + 3dfe: 87ba mv a5,a4 + 3e00: bc1d j 3836 tail[0] = (char)n; - 3dbe: 478d li a5,3 - 3dc0: 06f10823 sb a5,112(sp) + 3e02: 478d li a5,3 + 3e04: 06f10823 sb a5,112(sp) tail[n] = '0' + dp % 10; - 3dc4: 06b109a3 sb a1,115(sp) - 3dc8: 480d li a6,3 - 3dca: 4f8d li t6,3 - 3dcc: 8e4ff06f j 2eb0 - 3dd0: 678d lui a5,0x3 - 3dd2: b017879b addiw a5,a5,-1279 # 2b01 - 3dd6: 80aff06f j 2de0 + 3e08: 06b109a3 sb a1,115(sp) + 3e0c: 480d li a6,3 + 3e0e: 4f8d li t6,3 + 3e10: 8e4ff06f j 2ef4 + 3e14: 678d lui a5,0x3 + 3e16: b017879b addiw a5,a5,-1279 # 2b01 + 3e1a: 80aff06f j 2e24 if (pr) - 3dda: 8336 mv t1,a3 + 3e1e: 8336 mv t1,a3 *s++ = '0'; - 3ddc: 0c110793 addi a5,sp,193 + 3e20: 0c110793 addi a5,sp,193 while (i) { - 3de0: 4801 li a6,0 - 3de2: b561 j 3c6a + 3e24: 4801 li a6,0 + 3e26: b561 j 3cae while (i >= 4) { - 3de4: 460d li a2,3 - 3de6: 04e65663 bge a2,a4,3e32 - 3dea: ffb5871b addiw a4,a1,-5 - 3dee: 0027559b srliw a1,a4,0x2 - 3df2: 0015861b addiw a2,a1,1 - 3df6: 060a slli a2,a2,0x2 + 3e28: 460d li a2,3 + 3e2a: 04e65663 bge a2,a4,3e76 + 3e2e: ffb5871b addiw a4,a1,-5 + 3e32: 0027559b srliw a1,a4,0x2 + 3e36: 0015861b addiw a2,a1,1 + 3e3a: 060a slli a2,a2,0x2 *(stbsp__uint32 *)s = 0x30303030; - 3df8: 30303537 lui a0,0x30303 - 3dfc: 963e add a2,a2,a5 - 3dfe: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fa270> - 3e02: c388 sw a0,0(a5) + 3e3c: 30303537 lui a0,0x30303 + 3e40: 963e add a2,a2,a5 + 3e42: 03050513 addi a0,a0,48 # 30303030 <_ZSt4cerr+0x302fa1f0> + 3e46: c388 sw a0,0(a5) s += 4; - 3e04: 0791 addi a5,a5,4 + 3e48: 0791 addi a5,a5,4 while (i >= 4) { - 3e06: fef61ee3 bne a2,a5,3e02 - 3e0a: 0025959b slliw a1,a1,0x2 - 3e0e: 9f0d subw a4,a4,a1 + 3e4a: fef61ee3 bne a2,a5,3e46 + 3e4e: 0025959b slliw a1,a1,0x2 + 3e52: 9f0d subw a4,a4,a1 while (i) { - 3e10: e4070de3 beqz a4,3c6a + 3e54: e4070de3 beqz a4,3cae *s++ = '0'; - 3e14: 03000513 li a0,48 + 3e58: 03000513 li a0,48 while (i) { - 3e18: 00f705bb addw a1,a4,a5 + 3e5c: 00f705bb addw a1,a4,a5 *s++ = '0'; - 3e1c: 0605 addi a2,a2,1 + 3e60: 0605 addi a2,a2,1 while (i) { - 3e1e: 00060e9b sext.w t4,a2 + 3e62: 00060e9b sext.w t4,a2 *s++ = '0'; - 3e22: fea60fa3 sb a0,-1(a2) + 3e66: fea60fa3 sb a0,-1(a2) while (i) { - 3e26: ffd59be3 bne a1,t4,3e1c - 3e2a: 1702 slli a4,a4,0x20 - 3e2c: 9301 srli a4,a4,0x20 - 3e2e: 97ba add a5,a5,a4 - 3e30: bd2d j 3c6a + 3e6a: ffd59be3 bne a1,t4,3e60 + 3e6e: 1702 slli a4,a4,0x20 + 3e70: 9301 srli a4,a4,0x20 + 3e72: 97ba add a5,a5,a4 + 3e74: bd2d j 3cae while (i >= 4) { - 3e32: 863e mv a2,a5 - 3e34: b7c5 j 3e14 + 3e76: 863e mv a2,a5 + 3e78: b7c5 j 3e58 if ((((stbsp__uintptr)s) & 3) == 0) - 3e36: 00377693 andi a3,a4,3 - 3e3a: ce81 beqz a3,3e52 + 3e7a: 00377693 andi a3,a4,3 + 3e7e: ce81 beqz a3,3e96 *s++ = '0'; - 3e3c: 03000693 li a3,48 - 3e40: 00d70023 sb a3,0(a4) + 3e80: 03000693 li a3,48 + 3e84: 00d70023 sb a3,0(a4) --n; - 3e44: 37fd addiw a5,a5,-1 + 3e88: 37fd addiw a5,a5,-1 *s++ = '0'; - 3e46: 0705 addi a4,a4,1 + 3e8a: 0705 addi a4,a4,1 while (n) { - 3e48: e0078663 beqz a5,3454 + 3e8c: e0078663 beqz a5,3498 if ((((stbsp__uintptr)s) & 3) == 0) - 3e4c: 00377613 andi a2,a4,3 - 3e50: fa65 bnez a2,3e40 + 3e90: 00377613 andi a2,a4,3 + 3e94: fa65 bnez a2,3e84 while (n >= 4) { - 3e52: 468d li a3,3 - 3e54: eaf6f5e3 bgeu a3,a5,3cfe - 3e58: ffc7869b addiw a3,a5,-4 - 3e5c: 0026d69b srliw a3,a3,0x2 - 3e60: 2685 addiw a3,a3,1 - 3e62: 068a slli a3,a3,0x2 + 3e96: 468d li a3,3 + 3e98: eaf6f5e3 bgeu a3,a5,3d42 + 3e9c: ffc7869b addiw a3,a5,-4 + 3ea0: 0026d69b srliw a3,a3,0x2 + 3ea4: 2685 addiw a3,a3,1 + 3ea6: 068a slli a3,a3,0x2 *(stbsp__uint32 *)s = 0x30303030; - 3e64: 30303637 lui a2,0x30303 - 3e68: 96ba add a3,a3,a4 - 3e6a: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fa270> - 3e6e: c310 sw a2,0(a4) + 3ea8: 30303637 lui a2,0x30303 + 3eac: 96ba add a3,a3,a4 + 3eae: 03060613 addi a2,a2,48 # 30303030 <_ZSt4cerr+0x302fa1f0> + 3eb2: c310 sw a2,0(a4) s += 4; - 3e70: 0711 addi a4,a4,4 + 3eb4: 0711 addi a4,a4,4 while (n >= 4) { - 3e72: fed71ee3 bne a4,a3,3e6e - 3e76: 8b8d andi a5,a5,3 + 3eb6: fed71ee3 bne a4,a3,3eb2 + 3eba: 8b8d andi a5,a5,3 while (n) { - 3e78: e80793e3 bnez a5,3cfe - 3e7c: dd8ff06f j 3454 + 3ebc: e80793e3 bnez a5,3d42 + 3ec0: dd8ff06f j 3498 if (((stbsp__uintptr)sn & 3) == 0) - 3e80: 87d6 mv a5,s5 + 3ec4: 87d6 mv a5,s5 l = stbsp__strlen_limited(s, (pr >= 0) ? pr : ~0u); - 3e82: 56fd li a3,-1 - 3e84: b155 j 3b28 + 3ec6: 56fd li a3,-1 + 3ec8: b155 j 3b6c if ((dp <= -4) || (dp > (stbsp__int32)n)) { - 3e86: 5775 li a4,-3 - 3e88: 00e7ce63 blt a5,a4,3ea4 - 3e8c: f6fa4663 blt s4,a5,35f8 + 3eca: 5775 li a4,-3 + 3ecc: 00e7ce63 blt a5,a4,3ee8 + 3ed0: f6fa4663 blt s4,a5,363c if (dp > 0) { - 3e90: ecf054e3 blez a5,3d58 - 3e94: 86c2 mv a3,a6 + 3ed4: ecf054e3 blez a5,3d9c + 3ed8: 86c2 mv a3,a6 pr = (dp < (stbsp__int32)l) ? l - dp : 0; - 3e96: 4881 li a7,0 - 3e98: ee9fe06f j 2d80 + 3eda: 4881 li a7,0 + 3edc: ee9fe06f j 2dc4 while (i--) - 3e9c: fff7869b addiw a3,a5,-1 - 3ea0: 8722 mv a4,s0 - 3ea2: b105 j 3ac2 + 3ee0: fff7869b addiw a3,a5,-1 + 3ee4: 8722 mv a4,s0 + 3ee6: b105 j 3b06 if (pr > (stbsp__int32)l) - 3ea4: 0008071b sext.w a4,a6 + 3ee8: 0008071b sext.w a4,a6 while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 3ea8: 7ae6 ld s5,120(sp) + 3eec: 7ae6 ld s5,120(sp) if (pr > (stbsp__int32)l) - 3eaa: 86c2 mv a3,a6 - 3eac: 88d2 mv a7,s4 - 3eae: f7475d63 bge a4,s4,3628 + 3eee: 86c2 mv a3,a6 + 3ef0: 88d2 mv a7,s4 + 3ef2: f7475d63 bge a4,s4,366c while ((l > 1) && (pr) && (sn[l - 1] == '0')) { - 3eb2: 8542 mv a0,a6 - 3eb4: f56ff06f j 360a + 3ef6: 8542 mv a0,a6 + 3ef8: f56ff06f j 364e -0000000000003eb8 : +0000000000003efc : { - 3eb8: 715d addi sp,sp,-80 + 3efc: 715d addi sp,sp,-80 va_start(va, fmt); - 3eba: 02010313 addi t1,sp,32 + 3efe: 02010313 addi t1,sp,32 { - 3ebe: f032 sd a2,32(sp) - 3ec0: f436 sd a3,40(sp) - 3ec2: f83a sd a4,48(sp) + 3f02: f032 sd a2,32(sp) + 3f04: f436 sd a3,40(sp) + 3f06: f83a sd a4,48(sp) result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 3ec4: 86ae mv a3,a1 - 3ec6: 862a mv a2,a0 - 3ec8: 871a mv a4,t1 - 3eca: 4581 li a1,0 - 3ecc: 4501 li a0,0 + 3f08: 86ae mv a3,a1 + 3f0a: 862a mv a2,a0 + 3f0c: 871a mv a4,t1 + 3f0e: 4581 li a1,0 + 3f10: 4501 li a0,0 { - 3ece: ec06 sd ra,24(sp) - 3ed0: fc3e sd a5,56(sp) - 3ed2: e0c2 sd a6,64(sp) - 3ed4: e4c6 sd a7,72(sp) + 3f12: ec06 sd ra,24(sp) + 3f14: fc3e sd a5,56(sp) + 3f16: e0c2 sd a6,64(sp) + 3f18: e4c6 sd a7,72(sp) va_start(va, fmt); - 3ed6: e41a sd t1,8(sp) + 3f1a: e41a sd t1,8(sp) result = STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 3ed8: bc6fe0ef jal 229e + 3f1c: bc6fe0ef jal 22e2 } - 3edc: 60e2 ld ra,24(sp) - 3ede: 6161 addi sp,sp,80 - 3ee0: 8082 ret + 3f20: 60e2 ld ra,24(sp) + 3f22: 6161 addi sp,sp,80 + 3f24: 8082 ret -0000000000003ee2 : +0000000000003f26 : { - 3ee2: dd010113 addi sp,sp,-560 - 3ee6: 22813023 sd s0,544(sp) - 3eea: 20913c23 sd s1,536(sp) - 3eee: 22113423 sd ra,552(sp) - 3ef2: 84ae mv s1,a1 - 3ef4: 842a mv s0,a0 - 3ef6: 88b2 mv a7,a2 - 3ef8: 8736 mv a4,a3 + 3f26: dd010113 addi sp,sp,-560 + 3f2a: 22813023 sd s0,544(sp) + 3f2e: 20913c23 sd s1,536(sp) + 3f32: 22113423 sd ra,552(sp) + 3f36: 84ae mv s1,a1 + 3f38: 842a mv s0,a0 + 3f3a: 88b2 mv a7,a2 + 3f3c: 8736 mv a4,a3 if ( (count == 0) && !buf ) - 3efa: e591 bnez a1,3f06 - 3efc: c141 beqz a0,3f7c + 3f3e: e591 bnez a1,3f4a + 3f40: c141 beqz a0,3fc0 c.buf = buf; - 3efe: e02a sd a0,0(sp) + 3f42: e02a sd a0,0(sp) c.count = count; - 3f00: e402 sd zero,8(sp) + 3f44: e402 sd zero,8(sp) return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 3f02: 0810 addi a2,sp,16 - 3f04: a089 j 3f46 + 3f46: 0810 addi a2,sp,16 + 3f48: a089 j 3f8a if (len > c->count) - 3f06: 0015a593 slti a1,a1,1 - 3f0a: 40b005bb negw a1,a1 - 3f0e: 8de5 and a1,a1,s1 + 3f4a: 0015a593 slti a1,a1,1 + 3f4e: 40b005bb negw a1,a1 + 3f52: 8de5 and a1,a1,s1 c.buf = buf; - 3f10: e02a sd a0,0(sp) + 3f54: e02a sd a0,0(sp) c.count = count; - 3f12: c426 sw s1,8(sp) + 3f56: c426 sw s1,8(sp) c.length = 0; - 3f14: c602 sw zero,12(sp) + 3f58: c602 sw zero,12(sp) if (len > c->count) - 3f16: 2581 sext.w a1,a1 + 3f5a: 2581 sext.w a1,a1 if (len) { - 3f18: 0804d663 bgez s1,3fa4 + 3f5c: 0804d663 bgez s1,3fe8 s = buf; - 3f1c: 4781 li a5,0 + 3f60: 4781 li a5,0 if (buf != c->buf) { - 3f1e: c911 beqz a0,3f32 + 3f62: c911 beqz a0,3f76 *d++ = *s++; - 3f20: 0007c803 lbu a6,0(a5) - 3f24: 0785 addi a5,a5,1 - 3f26: 00f40533 add a0,s0,a5 - 3f2a: ff050fa3 sb a6,-1(a0) + 3f64: 0007c803 lbu a6,0(a5) + 3f68: 0785 addi a5,a5,1 + 3f6a: 00f40533 add a0,s0,a5 + 3f6e: ff050fa3 sb a6,-1(a0) } while (s < se); - 3f2e: feb7e9e3 bltu a5,a1,3f20 + 3f72: feb7e9e3 bltu a5,a1,3f64 c->count -= len; - 3f32: 40b486bb subw a3,s1,a1 + 3f76: 40b486bb subw a3,s1,a1 c->buf += len; - 3f36: 95a2 add a1,a1,s0 - 3f38: e02e sd a1,0(sp) + 3f7a: 95a2 add a1,a1,s0 + 3f7c: e02e sd a1,0(sp) c->count -= len; - 3f3a: c436 sw a3,8(sp) + 3f7e: c436 sw a3,8(sp) return (c->count >= STB_SPRINTF_MIN) ? c->buf : c->tmp; // go direct into buffer if you can - 3f3c: 1ff00793 li a5,511 - 3f40: fcd7d1e3 bge a5,a3,3f02 - 3f44: 6602 ld a2,0(sp) + 3f80: 1ff00793 li a5,511 + 3f84: fcd7d1e3 bge a5,a3,3f46 + 3f88: 6602 ld a2,0(sp) STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__clamp_callback, &c, stbsp__clamp_callback(0,&c,0), fmt, va ); - 3f46: 86c6 mv a3,a7 - 3f48: 858a mv a1,sp - 3f4a: ffffd517 auipc a0,0xffffd - 3f4e: 21650513 addi a0,a0,534 # 1160 - 3f52: b4cfe0ef jal 229e + 3f8a: 86c6 mv a3,a7 + 3f8c: 858a mv a1,sp + 3f8e: ffffd517 auipc a0,0xffffd + 3f92: 21650513 addi a0,a0,534 # 11a4 + 3f96: b4cfe0ef jal 22e2 l = (int)( c.buf - buf ); - 3f56: 6782 ld a5,0(sp) - 3f58: 9f81 subw a5,a5,s0 + 3f9a: 6782 ld a5,0(sp) + 3f9c: 9f81 subw a5,a5,s0 if ( l >= count ) // should never be greater, only equal (or less) than count - 3f5a: 0097c463 blt a5,s1,3f62 + 3f9e: 0097c463 blt a5,s1,3fa6 l = count - 1; - 3f5e: fff4879b addiw a5,s1,-1 + 3fa2: fff4879b addiw a5,s1,-1 buf[l] = 0; - 3f62: 943e add s0,s0,a5 - 3f64: 00040023 sb zero,0(s0) -} - 3f68: 22813083 ld ra,552(sp) - 3f6c: 22013403 ld s0,544(sp) - 3f70: 4532 lw a0,12(sp) - 3f72: 21813483 ld s1,536(sp) - 3f76: 23010113 addi sp,sp,560 - 3f7a: 8082 ret + 3fa6: 943e add s0,s0,a5 + 3fa8: 00040023 sb zero,0(s0) +} + 3fac: 22813083 ld ra,552(sp) + 3fb0: 22013403 ld s0,544(sp) + 3fb4: 4532 lw a0,12(sp) + 3fb6: 21813483 ld s1,536(sp) + 3fba: 23010113 addi sp,sp,560 + 3fbe: 8082 ret STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 3f7c: 86b2 mv a3,a2 - 3f7e: 858a mv a1,sp - 3f80: 0810 addi a2,sp,16 - 3f82: ffffd517 auipc a0,0xffffd - 3f86: 22c50513 addi a0,a0,556 # 11ae + 3fc0: 86b2 mv a3,a2 + 3fc2: 858a mv a1,sp + 3fc4: 0810 addi a2,sp,16 + 3fc6: ffffd517 auipc a0,0xffffd + 3fca: 22c50513 addi a0,a0,556 # 11f2 c.length = 0; - 3f8a: c602 sw zero,12(sp) + 3fce: c602 sw zero,12(sp) STB_SPRINTF_DECORATE( vsprintfcb )( stbsp__count_clamp_callback, &c, c.tmp, fmt, va ); - 3f8c: b12fe0ef jal 229e -} - 3f90: 22813083 ld ra,552(sp) - 3f94: 22013403 ld s0,544(sp) - 3f98: 4532 lw a0,12(sp) - 3f9a: 21813483 ld s1,536(sp) - 3f9e: 23010113 addi sp,sp,560 - 3fa2: 8082 ret - 3fa4: 86a6 mv a3,s1 - 3fa6: bf59 j 3f3c - -0000000000003fa8 : + 3fd0: b12fe0ef jal 22e2 +} + 3fd4: 22813083 ld ra,552(sp) + 3fd8: 22013403 ld s0,544(sp) + 3fdc: 4532 lw a0,12(sp) + 3fde: 21813483 ld s1,536(sp) + 3fe2: 23010113 addi sp,sp,560 + 3fe6: 8082 ret + 3fe8: 86a6 mv a3,s1 + 3fea: bf59 j 3f80 + +0000000000003fec : { - 3fa8: 715d addi sp,sp,-80 + 3fec: 715d addi sp,sp,-80 va_start(va, fmt); - 3faa: 02810313 addi t1,sp,40 + 3fee: 02810313 addi t1,sp,40 { - 3fae: f436 sd a3,40(sp) + 3ff2: f436 sd a3,40(sp) result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 3fb0: 869a mv a3,t1 + 3ff4: 869a mv a3,t1 { - 3fb2: ec06 sd ra,24(sp) - 3fb4: f83a sd a4,48(sp) - 3fb6: fc3e sd a5,56(sp) - 3fb8: e0c2 sd a6,64(sp) - 3fba: e4c6 sd a7,72(sp) + 3ff6: ec06 sd ra,24(sp) + 3ff8: f83a sd a4,48(sp) + 3ffa: fc3e sd a5,56(sp) + 3ffc: e0c2 sd a6,64(sp) + 3ffe: e4c6 sd a7,72(sp) va_start(va, fmt); - 3fbc: e41a sd t1,8(sp) + 4000: e41a sd t1,8(sp) result = STB_SPRINTF_DECORATE(vsnprintf)(buf, count, fmt, va); - 3fbe: f25ff0ef jal 3ee2 + 4002: f25ff0ef jal 3f26 } - 3fc2: 60e2 ld ra,24(sp) - 3fc4: 6161 addi sp,sp,80 - 3fc6: 8082 ret + 4006: 60e2 ld ra,24(sp) + 4008: 6161 addi sp,sp,80 + 400a: 8082 ret -0000000000003fc8 : +000000000000400c : { - 3fc8: 86ae mv a3,a1 - 3fca: 8732 mv a4,a2 + 400c: 86ae mv a3,a1 + 400e: 8732 mv a4,a2 return STB_SPRINTF_DECORATE(vsprintfcb)(0, 0, buf, fmt, va); - 3fcc: 4581 li a1,0 - 3fce: 862a mv a2,a0 - 3fd0: 4501 li a0,0 - 3fd2: accfe06f j 229e + 4010: 4581 li a1,0 + 4012: 862a mv a2,a0 + 4014: 4501 li a0,0 + 4016: accfe06f j 22e2 -0000000000003fd6 : +000000000000401a : { - 3fd6: 7119 addi sp,sp,-128 + 401a: 7119 addi sp,sp,-128 va_start(ap, format); - 3fd8: 05010313 addi t1,sp,80 + 401c: 05010313 addi t1,sp,80 { - 3fdc: e0a2 sd s0,64(sp) - 3fde: fc26 sd s1,56(sp) - 3fe0: 842a mv s0,a0 - 3fe2: e8b2 sd a2,80(sp) + 4020: e0a2 sd s0,64(sp) + 4022: fc26 sd s1,56(sp) + 4024: 842a mv s0,a0 + 4026: e8b2 sd a2,80(sp) _vprintf_core(&ctx, format, ap); - 3fe4: 0808 addi a0,sp,16 + 4028: 0808 addi a0,sp,16 ctx.limit = size; - 3fe6: 54fd li s1,-1 + 402a: 54fd li s1,-1 _vprintf_core(&ctx, format, ap); - 3fe8: 861a mv a2,t1 + 402c: 861a mv a2,t1 { - 3fea: e486 sd ra,72(sp) - 3fec: ecb6 sd a3,88(sp) - 3fee: f0ba sd a4,96(sp) - 3ff0: f4be sd a5,104(sp) - 3ff2: f8c2 sd a6,112(sp) - 3ff4: fcc6 sd a7,120(sp) + 402e: e486 sd ra,72(sp) + 4030: ecb6 sd a3,88(sp) + 4032: f0ba sd a4,96(sp) + 4034: f4be sd a5,104(sp) + 4036: f8c2 sd a6,112(sp) + 4038: fcc6 sd a7,120(sp) va_start(ap, format); - 3ff6: e41a sd t1,8(sp) + 403a: e41a sd t1,8(sp) ctx.buf = str; - 3ff8: e822 sd s0,16(sp) + 403c: e822 sd s0,16(sp) ctx.limit = size; - 3ffa: ec26 sd s1,24(sp) + 403e: ec26 sd s1,24(sp) ctx.written = 0; - 3ffc: f002 sd zero,32(sp) + 4040: f002 sd zero,32(sp) ctx.stream = NULL; - 3ffe: f402 sd zero,40(sp) + 4042: f402 sd zero,40(sp) _vprintf_core(&ctx, format, ap); - 4000: 02c000ef jal 402c <_vprintf_core.constprop.0.isra.0> + 4044: 02c000ef jal 4070 <_vprintf_core.constprop.0.isra.0> if (ctx.written < size) - 4004: 7502 ld a0,32(sp) - 4006: 00950b63 beq a0,s1,401c + 4048: 7502 ld a0,32(sp) + 404a: 00950b63 beq a0,s1,4060 str[ctx.written] = '\0'; - 400a: 942a add s0,s0,a0 - 400c: 00040023 sb zero,0(s0) -} - 4010: 60a6 ld ra,72(sp) - 4012: 6406 ld s0,64(sp) - 4014: 74e2 ld s1,56(sp) - 4016: 2501 sext.w a0,a0 - 4018: 6109 addi sp,sp,128 - 401a: 8082 ret + 404e: 942a add s0,s0,a0 + 4050: 00040023 sb zero,0(s0) +} + 4054: 60a6 ld ra,72(sp) + 4056: 6406 ld s0,64(sp) + 4058: 74e2 ld s1,56(sp) + 405a: 2501 sext.w a0,a0 + 405c: 6109 addi sp,sp,128 + 405e: 8082 ret str[size - 1] = '\0'; - 401c: fe040f23 sb zero,-2(s0) + 4060: fe040f23 sb zero,-2(s0) } - 4020: 60a6 ld ra,72(sp) - 4022: 6406 ld s0,64(sp) - 4024: 74e2 ld s1,56(sp) - 4026: 2501 sext.w a0,a0 - 4028: 6109 addi sp,sp,128 - 402a: 8082 ret + 4064: 60a6 ld ra,72(sp) + 4066: 6406 ld s0,64(sp) + 4068: 74e2 ld s1,56(sp) + 406a: 2501 sext.w a0,a0 + 406c: 6109 addi sp,sp,128 + 406e: 8082 ret -000000000000402c <_vprintf_core.constprop.0.isra.0>: +0000000000004070 <_vprintf_core.constprop.0.isra.0>: static int _vprintf_core(_OutContext *ctx, const char *format, va_list ap) - 402c: 7129 addi sp,sp,-320 - 402e: edee sd s11,216(sp) - 4030: fe06 sd ra,312(sp) - 4032: 8dae mv s11,a1 + 4070: 7129 addi sp,sp,-320 + 4072: edee sd s11,216(sp) + 4074: fe06 sd ra,312(sp) + 4076: 8dae mv s11,a1 while (*p) - 4034: 0005c583 lbu a1,0(a1) - 4038: cde9 beqz a1,4112 <_vprintf_core.constprop.0.isra.0+0xe6> - 403a: f626 sd s1,296(sp) - 403c: f24a sd s2,288(sp) - 403e: ee4e sd s3,280(sp) - 4040: e656 sd s5,264(sp) - 4042: f9e2 sd s8,240(sp) - 4044: fa22 sd s0,304(sp) - 4046: ea52 sd s4,272(sp) - 4048: e25a sd s6,256(sp) - 404a: fdde sd s7,248(sp) - 404c: f5e6 sd s9,232(sp) - 404e: f1ea sd s10,224(sp) - 4050: 84aa mv s1,a0 - 4052: 8c32 mv s8,a2 + 4078: 0005c583 lbu a1,0(a1) + 407c: cde9 beqz a1,4156 <_vprintf_core.constprop.0.isra.0+0xe6> + 407e: f626 sd s1,296(sp) + 4080: f24a sd s2,288(sp) + 4082: ee4e sd s3,280(sp) + 4084: e656 sd s5,264(sp) + 4086: f9e2 sd s8,240(sp) + 4088: fa22 sd s0,304(sp) + 408a: ea52 sd s4,272(sp) + 408c: e25a sd s6,256(sp) + 408e: fdde sd s7,248(sp) + 4090: f5e6 sd s9,232(sp) + 4092: f1ea sd s10,224(sp) + 4094: 84aa mv s1,a0 + 4096: 8c32 mv s8,a2 if (*p != '%') - 4054: 02500a93 li s5,37 - 4058: 49c1 li s3,16 - 405a: 00002917 auipc s2,0x2 - 405e: 38a90913 addi s2,s2,906 # 63e4 <_GLOBAL__sub_I__ZSt3cin+0x43c> - 4062: a039 j 4070 <_vprintf_core.constprop.0.isra.0+0x44> + 4098: 02500a93 li s5,37 + 409c: 49c1 li s3,16 + 409e: 00002917 auipc s2,0x2 + 40a2: 3be90913 addi s2,s2,958 # 645c <_GLOBAL__sub_I__ZSt3cin+0x458> + 40a6: a039 j 40b4 <_vprintf_core.constprop.0.isra.0+0x44> _out_char(ctx, spec); - 4064: 8526 mv a0,s1 - 4066: 952fe0ef jal 21b8 <_out_char> + 40a8: 8526 mv a0,s1 + 40aa: 952fe0ef jal 21fc <_out_char> while (*p) - 406a: 000dc583 lbu a1,0(s11) - 406e: c5d9 beqz a1,40fc <_vprintf_core.constprop.0.isra.0+0xd0> + 40ae: 000dc583 lbu a1,0(s11) + 40b2: c5d9 beqz a1,4140 <_vprintf_core.constprop.0.isra.0+0xd0> _out_char(ctx, *p++); - 4070: 0d85 addi s11,s11,1 + 40b4: 0d85 addi s11,s11,1 if (*p != '%') - 4072: ff5599e3 bne a1,s5,4064 <_vprintf_core.constprop.0.isra.0+0x38> + 40b6: ff5599e3 bne a1,s5,40a8 <_vprintf_core.constprop.0.isra.0+0x38> int flag_left = 0, flag_zero = 0, flag_plus = 0, flag_space = 0, flag_hash = 0; - 4076: 4501 li a0,0 - 4078: 4881 li a7,0 - 407a: 4581 li a1,0 - 407c: 4b01 li s6,0 - 407e: 4a01 li s4,0 + 40ba: 4501 li a0,0 + 40bc: 4881 li a7,0 + 40be: 4581 li a1,0 + 40c0: 4b01 li s6,0 + 40c2: 4a01 li s4,0 if (*p == '-') - 4080: 000dcc83 lbu s9,0(s11) - 4084: fe0c871b addiw a4,s9,-32 - 4088: 0ff77713 zext.b a4,a4 - 408c: 00e9e763 bltu s3,a4,409a <_vprintf_core.constprop.0.isra.0+0x6e> - 4090: 070a slli a4,a4,0x2 - 4092: 974a add a4,a4,s2 - 4094: 4318 lw a4,0(a4) - 4096: 974a add a4,a4,s2 - 4098: 8702 jr a4 + 40c4: 000dcc83 lbu s9,0(s11) + 40c8: fe0c871b addiw a4,s9,-32 + 40cc: 0ff77713 zext.b a4,a4 + 40d0: 00e9e763 bltu s3,a4,40de <_vprintf_core.constprop.0.isra.0+0x6e> + 40d4: 070a slli a4,a4,0x2 + 40d6: 974a add a4,a4,s2 + 40d8: 4318 lw a4,0(a4) + 40da: 974a add a4,a4,s2 + 40dc: 8702 jr a4 if (*p == '*') - 409a: 02a00793 li a5,42 - 409e: 16fc9c63 bne s9,a5,4216 <_vprintf_core.constprop.0.isra.0+0x1ea> + 40de: 02a00793 li a5,42 + 40e2: 16fc9c63 bne s9,a5,425a <_vprintf_core.constprop.0.isra.0+0x1ea> width = va_arg(ap, int); - 40a2: 000c2403 lw s0,0(s8) - 40a6: 0c21 addi s8,s8,8 + 40e6: 000c2403 lw s0,0(s8) + 40ea: 0c21 addi s8,s8,8 if (width < 0) - 40a8: 00045563 bgez s0,40b2 <_vprintf_core.constprop.0.isra.0+0x86> + 40ec: 00045563 bgez s0,40f6 <_vprintf_core.constprop.0.isra.0+0x86> width = -width; - 40ac: 4080043b negw s0,s0 + 40f0: 4080043b negw s0,s0 flag_left = 1; - 40b0: 4a05 li s4,1 + 40f4: 4a05 li s4,1 while (*p >= '0' && *p <= '9') - 40b2: 001dcc83 lbu s9,1(s11) + 40f6: 001dcc83 lbu s9,1(s11) p++; - 40b6: 0d85 addi s11,s11,1 + 40fa: 0d85 addi s11,s11,1 if (*p == '.') - 40b8: 02e00793 li a5,46 + 40fc: 02e00793 li a5,46 int precision = -1; - 40bc: 5bfd li s7,-1 + 4100: 5bfd li s7,-1 if (*p == '.') - 40be: 18fc8a63 beq s9,a5,4252 <_vprintf_core.constprop.0.isra.0+0x226> + 4102: 18fc8a63 beq s9,a5,4296 <_vprintf_core.constprop.0.isra.0+0x226> if (*p == 'l') - 40c2: 06c00693 li a3,108 - 40c6: 8666 mv a2,s9 - 40c8: 1adc8663 beq s9,a3,4274 <_vprintf_core.constprop.0.isra.0+0x248> + 4106: 06c00693 li a3,108 + 410a: 8666 mv a2,s9 + 410c: 1adc8663 beq s9,a3,42b8 <_vprintf_core.constprop.0.isra.0+0x248> else if (*p == 'z') - 40cc: 07a00693 li a3,122 + 4110: 07a00693 li a3,122 p++; - 40d0: 0d85 addi s11,s11,1 + 4114: 0d85 addi s11,s11,1 else if (*p == 'z') - 40d2: 24dc8163 beq s9,a3,4314 <_vprintf_core.constprop.0.isra.0+0x2e8> + 4116: 24dc8163 beq s9,a3,4358 <_vprintf_core.constprop.0.isra.0+0x2e8> if (!spec) - 40d6: 06400693 li a3,100 - 40da: 4adc8163 beq s9,a3,457c <_vprintf_core.constprop.0.isra.0+0x550> - 40de: 06400693 li a3,100 + 411a: 06400693 li a3,100 + 411e: 4adc8163 beq s9,a3,45c0 <_vprintf_core.constprop.0.isra.0+0x550> + 4122: 06400693 li a3,100 int len_mod = 0; - 40e2: 4e81 li t4,0 - 40e4: 1b96e663 bltu a3,s9,4290 <_vprintf_core.constprop.0.isra.0+0x264> - 40e8: 04700693 li a3,71 - 40ec: 2796e463 bltu a3,s9,4354 <_vprintf_core.constprop.0.isra.0+0x328> - 40f0: 04400693 li a3,68 - 40f4: 0596e363 bltu a3,s9,413a <_vprintf_core.constprop.0.isra.0+0x10e> - 40f8: 240c9363 bnez s9,433e <_vprintf_core.constprop.0.isra.0+0x312> - 40fc: 7452 ld s0,304(sp) - 40fe: 74b2 ld s1,296(sp) - 4100: 7912 ld s2,288(sp) - 4102: 69f2 ld s3,280(sp) - 4104: 6a52 ld s4,272(sp) - 4106: 6ab2 ld s5,264(sp) - 4108: 6b12 ld s6,256(sp) - 410a: 7bee ld s7,248(sp) - 410c: 7c4e ld s8,240(sp) - 410e: 7cae ld s9,232(sp) - 4110: 7d0e ld s10,224(sp) -} - 4112: 70f2 ld ra,312(sp) - 4114: 6dee ld s11,216(sp) - 4116: 6131 addi sp,sp,320 - 4118: 8082 ret + 4126: 4e81 li t4,0 + 4128: 1b96e663 bltu a3,s9,42d4 <_vprintf_core.constprop.0.isra.0+0x264> + 412c: 04700693 li a3,71 + 4130: 2796e463 bltu a3,s9,4398 <_vprintf_core.constprop.0.isra.0+0x328> + 4134: 04400693 li a3,68 + 4138: 0596e363 bltu a3,s9,417e <_vprintf_core.constprop.0.isra.0+0x10e> + 413c: 240c9363 bnez s9,4382 <_vprintf_core.constprop.0.isra.0+0x312> + 4140: 7452 ld s0,304(sp) + 4142: 74b2 ld s1,296(sp) + 4144: 7912 ld s2,288(sp) + 4146: 69f2 ld s3,280(sp) + 4148: 6a52 ld s4,272(sp) + 414a: 6ab2 ld s5,264(sp) + 414c: 6b12 ld s6,256(sp) + 414e: 7bee ld s7,248(sp) + 4150: 7c4e ld s8,240(sp) + 4152: 7cae ld s9,232(sp) + 4154: 7d0e ld s10,224(sp) +} + 4156: 70f2 ld ra,312(sp) + 4158: 6dee ld s11,216(sp) + 415a: 6131 addi sp,sp,320 + 415c: 8082 ret if (*p == '-') - 411a: 4585 li a1,1 + 415e: 4585 li a1,1 p++; - 411c: 0d85 addi s11,s11,1 + 4160: 0d85 addi s11,s11,1 if (*p == '-') - 411e: b78d j 4080 <_vprintf_core.constprop.0.isra.0+0x54> - 4120: 4505 li a0,1 + 4162: b78d j 40c4 <_vprintf_core.constprop.0.isra.0+0x54> + 4164: 4505 li a0,1 p++; - 4122: 0d85 addi s11,s11,1 + 4166: 0d85 addi s11,s11,1 while (1) - 4124: bfb1 j 4080 <_vprintf_core.constprop.0.isra.0+0x54> + 4168: bfb1 j 40c4 <_vprintf_core.constprop.0.isra.0+0x54> if (*p == '-') - 4126: 4885 li a7,1 + 416a: 4885 li a7,1 p++; - 4128: 0d85 addi s11,s11,1 + 416c: 0d85 addi s11,s11,1 while (1) - 412a: bf99 j 4080 <_vprintf_core.constprop.0.isra.0+0x54> + 416e: bf99 j 40c4 <_vprintf_core.constprop.0.isra.0+0x54> if (*p == '-') - 412c: 4b05 li s6,1 + 4170: 4b05 li s6,1 p++; - 412e: 0d85 addi s11,s11,1 + 4172: 0d85 addi s11,s11,1 while (1) - 4130: bf81 j 4080 <_vprintf_core.constprop.0.isra.0+0x54> + 4174: bf81 j 40c4 <_vprintf_core.constprop.0.isra.0+0x54> if (*p == '-') - 4132: 4a05 li s4,1 + 4176: 4a05 li s4,1 p++; - 4134: 0d85 addi s11,s11,1 + 4178: 0d85 addi s11,s11,1 while (1) - 4136: b7a9 j 4080 <_vprintf_core.constprop.0.isra.0+0x54> + 417a: b7a9 j 40c4 <_vprintf_core.constprop.0.isra.0+0x54> char spec = *p++; - 4138: 8dbe mv s11,a5 + 417c: 8dbe mv s11,a5 fmt_tmp[f_idx++] = '%'; - 413a: 02500693 li a3,37 - 413e: 02d10823 sb a3,48(sp) - 4142: 4d05 li s10,1 + 417e: 02500693 li a3,37 + 4182: 02d10823 sb a3,48(sp) + 4186: 4d05 li s10,1 if (flag_left) - 4144: 000a0763 beqz s4,4152 <_vprintf_core.constprop.0.isra.0+0x126> + 4188: 000a0763 beqz s4,4196 <_vprintf_core.constprop.0.isra.0+0x126> fmt_tmp[f_idx++] = '-'; - 4148: 02d00693 li a3,45 - 414c: 02d108a3 sb a3,49(sp) - 4150: 4d09 li s10,2 + 418c: 02d00693 li a3,45 + 4190: 02d108a3 sb a3,49(sp) + 4194: 4d09 li s10,2 if (flag_zero) - 4152: 000b0c63 beqz s6,416a <_vprintf_core.constprop.0.isra.0+0x13e> + 4196: 000b0c63 beqz s6,41ae <_vprintf_core.constprop.0.isra.0+0x13e> fmt_tmp[f_idx++] = '0'; - 4156: 0c0d0793 addi a5,s10,192 - 415a: 0818 addi a4,sp,16 - 415c: 00e786b3 add a3,a5,a4 - 4160: 03000613 li a2,48 - 4164: f6c68023 sb a2,-160(a3) - 4168: 2d05 addiw s10,s10,1 + 419a: 0c0d0793 addi a5,s10,192 + 419e: 0818 addi a4,sp,16 + 41a0: 00e786b3 add a3,a5,a4 + 41a4: 03000613 li a2,48 + 41a8: f6c68023 sb a2,-160(a3) + 41ac: 2d05 addiw s10,s10,1 if (flag_plus) - 416a: c999 beqz a1,4180 <_vprintf_core.constprop.0.isra.0+0x154> + 41ae: c999 beqz a1,41c4 <_vprintf_core.constprop.0.isra.0+0x154> fmt_tmp[f_idx++] = '+'; - 416c: 0c0d0793 addi a5,s10,192 - 4170: 0818 addi a4,sp,16 - 4172: 00e786b3 add a3,a5,a4 - 4176: 02b00613 li a2,43 - 417a: f6c68023 sb a2,-160(a3) - 417e: 2d05 addiw s10,s10,1 + 41b0: 0c0d0793 addi a5,s10,192 + 41b4: 0818 addi a4,sp,16 + 41b6: 00e786b3 add a3,a5,a4 + 41ba: 02b00613 li a2,43 + 41be: f6c68023 sb a2,-160(a3) + 41c2: 2d05 addiw s10,s10,1 if (flag_space) - 4180: 00088c63 beqz a7,4198 <_vprintf_core.constprop.0.isra.0+0x16c> + 41c4: 00088c63 beqz a7,41dc <_vprintf_core.constprop.0.isra.0+0x16c> fmt_tmp[f_idx++] = ' '; - 4184: 0c0d0793 addi a5,s10,192 - 4188: 0818 addi a4,sp,16 - 418a: 00e786b3 add a3,a5,a4 - 418e: 02000613 li a2,32 - 4192: f6c68023 sb a2,-160(a3) - 4196: 2d05 addiw s10,s10,1 + 41c8: 0c0d0793 addi a5,s10,192 + 41cc: 0818 addi a4,sp,16 + 41ce: 00e786b3 add a3,a5,a4 + 41d2: 02000613 li a2,32 + 41d6: f6c68023 sb a2,-160(a3) + 41da: 2d05 addiw s10,s10,1 if (flag_hash) - 4198: c919 beqz a0,41ae <_vprintf_core.constprop.0.isra.0+0x182> + 41dc: c919 beqz a0,41f2 <_vprintf_core.constprop.0.isra.0+0x182> fmt_tmp[f_idx++] = '#'; - 419a: 0c0d0793 addi a5,s10,192 - 419e: 0818 addi a4,sp,16 - 41a0: 00e786b3 add a3,a5,a4 - 41a4: 02300613 li a2,35 - 41a8: f6c68023 sb a2,-160(a3) - 41ac: 2d05 addiw s10,s10,1 + 41de: 0c0d0793 addi a5,s10,192 + 41e2: 0818 addi a4,sp,16 + 41e4: 00e786b3 add a3,a5,a4 + 41e8: 02300613 li a2,35 + 41ec: f6c68023 sb a2,-160(a3) + 41f0: 2d05 addiw s10,s10,1 if (width > 0) - 41ae: 03010a13 addi s4,sp,48 - 41b2: 28804563 bgtz s0,443c <_vprintf_core.constprop.0.isra.0+0x410> + 41f2: 03010a13 addi s4,sp,48 + 41f6: 28804563 bgtz s0,4480 <_vprintf_core.constprop.0.isra.0+0x410> if (precision >= 0) - 41b6: 260bd763 bgez s7,4424 <_vprintf_core.constprop.0.isra.0+0x3f8> + 41fa: 260bd763 bgez s7,4468 <_vprintf_core.constprop.0.isra.0+0x3f8> fmt_tmp[f_idx++] = spec; - 41ba: 0c0d0793 addi a5,s10,192 - 41be: 0818 addi a4,sp,16 - 41c0: 00e78633 add a2,a5,a4 + 41fe: 0c0d0793 addi a5,s10,192 + 4202: 0818 addi a4,sp,16 + 4204: 00e78633 add a2,a5,a4 stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 41c4: 000c3683 ld a3,0(s8) + 4208: 000c3683 ld a3,0(s8) fmt_tmp[f_idx] = '\0'; - 41c8: 001d071b addiw a4,s10,1 - 41cc: 0c070793 addi a5,a4,192 - 41d0: 0818 addi a4,sp,16 + 420c: 001d071b addiw a4,s10,1 + 4210: 0c070793 addi a5,a4,192 + 4214: 0818 addi a4,sp,16 fmt_tmp[f_idx++] = spec; - 41d2: f7960023 sb s9,-160(a2) + 4216: f7960023 sb s9,-160(a2) fmt_tmp[f_idx] = '\0'; - 41d6: 973e add a4,a4,a5 + 421a: 973e add a4,a4,a5 stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 41d8: 08000593 li a1,128 - 41dc: 8652 mv a2,s4 - 41de: 0888 addi a0,sp,80 + 421c: 08000593 li a1,128 + 4220: 8652 mv a2,s4 + 4222: 0888 addi a0,sp,80 fmt_tmp[f_idx] = '\0'; - 41e0: f6070023 sb zero,-160(a4) + 4224: f6070023 sb zero,-160(a4) stbsp_snprintf(f_buf, sizeof(f_buf), fmt_tmp, f_val); - 41e4: dc5ff0ef jal 3fa8 + 4228: dc5ff0ef jal 3fec for (int i = 0; f_buf[i] != '\0'; i++) - 41e8: 05014583 lbu a1,80(sp) + 422c: 05014583 lbu a1,80(sp) double f_val = va_arg(ap, double); - 41ec: 0c21 addi s8,s8,8 + 4230: 0c21 addi s8,s8,8 for (int i = 0; f_buf[i] != '\0'; i++) - 41ee: 05110413 addi s0,sp,81 - 41f2: e6058ce3 beqz a1,406a <_vprintf_core.constprop.0.isra.0+0x3e> + 4232: 05110413 addi s0,sp,81 + 4236: e6058ce3 beqz a1,40ae <_vprintf_core.constprop.0.isra.0+0x3e> _out_char(ctx, f_buf[i]); - 41f6: 8526 mv a0,s1 - 41f8: fc1fd0ef jal 21b8 <_out_char> + 423a: 8526 mv a0,s1 + 423c: fc1fd0ef jal 21fc <_out_char> for (int i = 0; f_buf[i] != '\0'; i++) - 41fc: 00044583 lbu a1,0(s0) - 4200: 0405 addi s0,s0,1 - 4202: e60584e3 beqz a1,406a <_vprintf_core.constprop.0.isra.0+0x3e> + 4240: 00044583 lbu a1,0(s0) + 4244: 0405 addi s0,s0,1 + 4246: e60584e3 beqz a1,40ae <_vprintf_core.constprop.0.isra.0+0x3e> _out_char(ctx, f_buf[i]); - 4206: 8526 mv a0,s1 - 4208: fb1fd0ef jal 21b8 <_out_char> + 424a: 8526 mv a0,s1 + 424c: fb1fd0ef jal 21fc <_out_char> for (int i = 0; f_buf[i] != '\0'; i++) - 420c: 00044583 lbu a1,0(s0) - 4210: 0405 addi s0,s0,1 - 4212: f1f5 bnez a1,41f6 <_vprintf_core.constprop.0.isra.0+0x1ca> - 4214: bd99 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + 4250: 00044583 lbu a1,0(s0) + 4254: 0405 addi s0,s0,1 + 4256: f1f5 bnez a1,423a <_vprintf_core.constprop.0.isra.0+0x1ca> + 4258: bd99 j 40ae <_vprintf_core.constprop.0.isra.0+0x3e> while (*p >= '0' && *p <= '9') - 4216: fd0c869b addiw a3,s9,-48 - 421a: 0ff6f313 zext.b t1,a3 - 421e: 4725 li a4,9 + 425a: fd0c869b addiw a3,s9,-48 + 425e: 0ff6f313 zext.b t1,a3 + 4262: 4725 li a4,9 int width = 0; - 4220: 4401 li s0,0 + 4264: 4401 li s0,0 while (*p >= '0' && *p <= '9') - 4222: 4625 li a2,9 - 4224: e8676ae3 bltu a4,t1,40b8 <_vprintf_core.constprop.0.isra.0+0x8c> - 4228: 001dcc83 lbu s9,1(s11) + 4266: 4625 li a2,9 + 4268: e8676ae3 bltu a4,t1,40fc <_vprintf_core.constprop.0.isra.0+0x8c> + 426c: 001dcc83 lbu s9,1(s11) width = width * 10 + (*p - '0'); - 422c: 0024171b slliw a4,s0,0x2 - 4230: 9f21 addw a4,a4,s0 - 4232: 0017171b slliw a4,a4,0x1 - 4236: 00e6843b addw s0,a3,a4 + 4270: 0024171b slliw a4,s0,0x2 + 4274: 9f21 addw a4,a4,s0 + 4276: 0017171b slliw a4,a4,0x1 + 427a: 00e6843b addw s0,a3,a4 while (*p >= '0' && *p <= '9') - 423a: fd0c869b addiw a3,s9,-48 - 423e: 0ff6f713 zext.b a4,a3 + 427e: fd0c869b addiw a3,s9,-48 + 4282: 0ff6f713 zext.b a4,a3 p++; - 4242: 0d85 addi s11,s11,1 + 4286: 0d85 addi s11,s11,1 while (*p >= '0' && *p <= '9') - 4244: fee672e3 bgeu a2,a4,4228 <_vprintf_core.constprop.0.isra.0+0x1fc> + 4288: fee672e3 bgeu a2,a4,426c <_vprintf_core.constprop.0.isra.0+0x1fc> if (*p == '.') - 4248: 02e00793 li a5,46 + 428c: 02e00793 li a5,46 int precision = -1; - 424c: 5bfd li s7,-1 + 4290: 5bfd li s7,-1 if (*p == '.') - 424e: e6fc9ae3 bne s9,a5,40c2 <_vprintf_core.constprop.0.isra.0+0x96> + 4292: e6fc9ae3 bne s9,a5,4106 <_vprintf_core.constprop.0.isra.0+0x96> if (*p == '*') - 4252: 001dcc83 lbu s9,1(s11) - 4256: 02a00793 li a5,42 - 425a: 16fc9f63 bne s9,a5,43d8 <_vprintf_core.constprop.0.isra.0+0x3ac> + 4296: 001dcc83 lbu s9,1(s11) + 429a: 02a00793 li a5,42 + 429e: 16fc9f63 bne s9,a5,441c <_vprintf_core.constprop.0.isra.0+0x3ac> while (*p >= '0' && *p <= '9') - 425e: 002dcc83 lbu s9,2(s11) + 42a2: 002dcc83 lbu s9,2(s11) if (*p == 'l') - 4262: 06c00693 li a3,108 + 42a6: 06c00693 li a3,108 precision = va_arg(ap, int); - 4266: 000c2b83 lw s7,0(s8) + 42aa: 000c2b83 lw s7,0(s8) p++; - 426a: 0d89 addi s11,s11,2 + 42ae: 0d89 addi s11,s11,2 precision = va_arg(ap, int); - 426c: 0c21 addi s8,s8,8 + 42b0: 0c21 addi s8,s8,8 if (*p == 'l') - 426e: 8666 mv a2,s9 - 4270: e4dc9ee3 bne s9,a3,40cc <_vprintf_core.constprop.0.isra.0+0xa0> + 42b2: 8666 mv a2,s9 + 42b4: e4dc9ee3 bne s9,a3,4110 <_vprintf_core.constprop.0.isra.0+0xa0> if (*p == 'l') - 4274: 001dcc83 lbu s9,1(s11) - 4278: 08cc8d63 beq s9,a2,4312 <_vprintf_core.constprop.0.isra.0+0x2e6> + 42b8: 001dcc83 lbu s9,1(s11) + 42bc: 08cc8d63 beq s9,a2,4356 <_vprintf_core.constprop.0.isra.0+0x2e6> char spec = *p++; - 427c: 06400693 li a3,100 - 4280: 0d89 addi s11,s11,2 + 42c0: 06400693 li a3,100 + 42c4: 0d89 addi s11,s11,2 if (!spec) - 4282: 4cdc8c63 beq s9,a3,475a <_vprintf_core.constprop.0.isra.0+0x72e> - 4286: 06400693 li a3,100 + 42c6: 4cdc8c63 beq s9,a3,479e <_vprintf_core.constprop.0.isra.0+0x72e> + 42ca: 06400693 li a3,100 len_mod = 1; - 428a: 4e85 li t4,1 - 428c: e596fee3 bgeu a3,s9,40e8 <_vprintf_core.constprop.0.isra.0+0xbc> - 4290: f9bc869b addiw a3,s9,-101 - 4294: 0ff6f693 zext.b a3,a3 - 4298: 464d li a2,19 - 429a: 12d66863 bltu a2,a3,43ca <_vprintf_core.constprop.0.isra.0+0x39e> - 429e: 4e05 li t3,1 - 42a0: 00091637 lui a2,0x91 - 42a4: 00de1333 sll t1,t3,a3 - 42a8: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x87a50> - 42ac: 00c37633 and a2,t1,a2 - 42b0: 1a061463 bnez a2,4458 <_vprintf_core.constprop.0.isra.0+0x42c> - 42b4: 00737313 andi t1,t1,7 - 42b8: e80311e3 bnez t1,413a <_vprintf_core.constprop.0.isra.0+0x10e> - 42bc: 4639 li a2,14 - 42be: 10c69663 bne a3,a2,43ca <_vprintf_core.constprop.0.isra.0+0x39e> + 42ce: 4e85 li t4,1 + 42d0: e596fee3 bgeu a3,s9,412c <_vprintf_core.constprop.0.isra.0+0xbc> + 42d4: f9bc869b addiw a3,s9,-101 + 42d8: 0ff6f693 zext.b a3,a3 + 42dc: 464d li a2,19 + 42de: 12d66863 bltu a2,a3,440e <_vprintf_core.constprop.0.isra.0+0x39e> + 42e2: 4e05 li t3,1 + 42e4: 00091637 lui a2,0x91 + 42e8: 00de1333 sll t1,t3,a3 + 42ec: 81060613 addi a2,a2,-2032 # 90810 <_ZSt4cerr+0x879d0> + 42f0: 00c37633 and a2,t1,a2 + 42f4: 1a061463 bnez a2,449c <_vprintf_core.constprop.0.isra.0+0x42c> + 42f8: 00737313 andi t1,t1,7 + 42fc: e80311e3 bnez t1,417e <_vprintf_core.constprop.0.isra.0+0x10e> + 4300: 4639 li a2,14 + 4302: 10c69663 bne a3,a2,440e <_vprintf_core.constprop.0.isra.0+0x39e> const char *s = va_arg(ap, char *); - 42c2: 000c3c83 ld s9,0(s8) + 4306: 000c3c83 ld s9,0(s8) if (!s) - 42c6: 420c8863 beqz s9,46f6 <_vprintf_core.constprop.0.isra.0+0x6ca> + 430a: 420c8863 beqz s9,473a <_vprintf_core.constprop.0.isra.0+0x6ca> while (*tmp && (precision < 0 || len < precision)) - 42ca: 000cc683 lbu a3,0(s9) - 42ce: 38068863 beqz a3,465e <_vprintf_core.constprop.0.isra.0+0x632> + 430e: 000cc683 lbu a3,0(s9) + 4312: 38068863 beqz a3,46a2 <_vprintf_core.constprop.0.isra.0+0x632> const char *tmp = s; - 42d2: 8666 mv a2,s9 + 4316: 8666 mv a2,s9 int len = 0; - 42d4: 4681 li a3,0 + 4318: 4681 li a3,0 while (*tmp && (precision < 0 || len < precision)) - 42d6: 00db8863 beq s7,a3,42e6 <_vprintf_core.constprop.0.isra.0+0x2ba> - 42da: 00164583 lbu a1,1(a2) + 431a: 00db8863 beq s7,a3,432a <_vprintf_core.constprop.0.isra.0+0x2ba> + 431e: 00164583 lbu a1,1(a2) len++; - 42de: 2685 addiw a3,a3,1 + 4322: 2685 addiw a3,a3,1 tmp++; - 42e0: 0605 addi a2,a2,1 + 4324: 0605 addi a2,a2,1 while (*tmp && (precision < 0 || len < precision)) - 42e2: f9f5 bnez a1,42d6 <_vprintf_core.constprop.0.isra.0+0x2aa> - 42e4: 8bb6 mv s7,a3 + 4326: f9f5 bnez a1,431a <_vprintf_core.constprop.0.isra.0+0x2aa> + 4328: 8bb6 mv s7,a3 int padding = (width > len) ? width - len : 0; - 42e6: 268bc563 blt s7,s0,4550 <_vprintf_core.constprop.0.isra.0+0x524> + 432a: 268bc563 blt s7,s0,4594 <_vprintf_core.constprop.0.isra.0+0x524> for (int i = 0; i < len; i++) - 42ea: 4401 li s0,0 - 42ec: 020b8163 beqz s7,430e <_vprintf_core.constprop.0.isra.0+0x2e2> - 42f0: 4d01 li s10,0 + 432e: 4401 li s0,0 + 4330: 020b8163 beqz s7,4352 <_vprintf_core.constprop.0.isra.0+0x2e2> + 4334: 4d01 li s10,0 _out_char(ctx, s[i]); - 42f2: 01ac86b3 add a3,s9,s10 - 42f6: 0006c583 lbu a1,0(a3) - 42fa: 8526 mv a0,s1 + 4336: 01ac86b3 add a3,s9,s10 + 433a: 0006c583 lbu a1,0(a3) + 433e: 8526 mv a0,s1 for (int i = 0; i < len; i++) - 42fc: 0d05 addi s10,s10,1 + 4340: 0d05 addi s10,s10,1 _out_char(ctx, s[i]); - 42fe: ebbfd0ef jal 21b8 <_out_char> + 4342: ebbfd0ef jal 21fc <_out_char> for (int i = 0; i < len; i++) - 4302: 000d069b sext.w a3,s10 - 4306: ff76c6e3 blt a3,s7,42f2 <_vprintf_core.constprop.0.isra.0+0x2c6> + 4346: 000d069b sext.w a3,s10 + 434a: ff76c6e3 blt a3,s7,4336 <_vprintf_core.constprop.0.isra.0+0x2c6> if (flag_left) - 430a: 260a1463 bnez s4,4572 <_vprintf_core.constprop.0.isra.0+0x546> + 434e: 260a1463 bnez s4,45b6 <_vprintf_core.constprop.0.isra.0+0x546> const char *s = va_arg(ap, char *); - 430e: 0c21 addi s8,s8,8 - 4310: bba9 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + 4352: 0c21 addi s8,s8,8 + 4354: bba9 j 40ae <_vprintf_core.constprop.0.isra.0+0x3e> p++; - 4312: 0d89 addi s11,s11,2 + 4356: 0d89 addi s11,s11,2 char spec = *p++; - 4314: 000dcc83 lbu s9,0(s11) - 4318: 06400693 li a3,100 - 431c: 001d8793 addi a5,s11,1 + 4358: 000dcc83 lbu s9,0(s11) + 435c: 06400693 li a3,100 + 4360: 001d8793 addi a5,s11,1 if (!spec) - 4320: 3edc8063 beq s9,a3,4700 <_vprintf_core.constprop.0.isra.0+0x6d4> - 4324: 0796ea63 bltu a3,s9,4398 <_vprintf_core.constprop.0.isra.0+0x36c> - 4328: 04700693 li a3,71 - 432c: 0f96e263 bltu a3,s9,4410 <_vprintf_core.constprop.0.isra.0+0x3e4> - 4330: 04400693 li a3,68 - 4334: e196e2e3 bltu a3,s9,4138 <_vprintf_core.constprop.0.isra.0+0x10c> - 4338: dc0c82e3 beqz s9,40fc <_vprintf_core.constprop.0.isra.0+0xd0> + 4364: 3edc8063 beq s9,a3,4744 <_vprintf_core.constprop.0.isra.0+0x6d4> + 4368: 0796ea63 bltu a3,s9,43dc <_vprintf_core.constprop.0.isra.0+0x36c> + 436c: 04700693 li a3,71 + 4370: 0f96e263 bltu a3,s9,4454 <_vprintf_core.constprop.0.isra.0+0x3e4> + 4374: 04400693 li a3,68 + 4378: e196e2e3 bltu a3,s9,417c <_vprintf_core.constprop.0.isra.0+0x10c> + 437c: dc0c82e3 beqz s9,4140 <_vprintf_core.constprop.0.isra.0+0xd0> char spec = *p++; - 433c: 8dbe mv s11,a5 + 4380: 8dbe mv s11,a5 _out_char(ctx, '%'); - 433e: 02500593 li a1,37 - 4342: 8526 mv a0,s1 - 4344: e75fd0ef jal 21b8 <_out_char> + 4382: 02500593 li a1,37 + 4386: 8526 mv a0,s1 + 4388: e75fd0ef jal 21fc <_out_char> if (spec != '%') - 4348: 02500713 li a4,37 - 434c: d0ec8fe3 beq s9,a4,406a <_vprintf_core.constprop.0.isra.0+0x3e> + 438c: 02500713 li a4,37 + 4390: d0ec8fe3 beq s9,a4,40ae <_vprintf_core.constprop.0.isra.0+0x3e> _out_char(ctx, spec); - 4350: 85e6 mv a1,s9 - 4352: bb09 j 4064 <_vprintf_core.constprop.0.isra.0+0x38> - 4354: 05800693 li a3,88 - 4358: 2edc8263 beq s9,a3,463c <_vprintf_core.constprop.0.isra.0+0x610> - 435c: 06300713 li a4,99 - 4360: 06ec9563 bne s9,a4,43ca <_vprintf_core.constprop.0.isra.0+0x39e> + 4394: 85e6 mv a1,s9 + 4396: bb09 j 40a8 <_vprintf_core.constprop.0.isra.0+0x38> + 4398: 05800693 li a3,88 + 439c: 2edc8263 beq s9,a3,4680 <_vprintf_core.constprop.0.isra.0+0x610> + 43a0: 06300713 li a4,99 + 43a4: 06ec9563 bne s9,a4,440e <_vprintf_core.constprop.0.isra.0+0x39e> char c = (char)va_arg(ap, int); - 4364: 000c4c83 lbu s9,0(s8) + 43a8: 000c4c83 lbu s9,0(s8) int padding = (width > 1) ? width - 1 : 0; - 4368: 8722 mv a4,s0 - 436a: 00804363 bgtz s0,4370 <_vprintf_core.constprop.0.isra.0+0x344> - 436e: 4705 li a4,1 - 4370: fff7041b addiw s0,a4,-1 + 43ac: 8722 mv a4,s0 + 43ae: 00804363 bgtz s0,43b4 <_vprintf_core.constprop.0.isra.0+0x344> + 43b2: 4705 li a4,1 + 43b4: fff7041b addiw s0,a4,-1 if (!flag_left) - 4374: 3c0a0463 beqz s4,473c <_vprintf_core.constprop.0.isra.0+0x710> + 43b8: 3c0a0463 beqz s4,4780 <_vprintf_core.constprop.0.isra.0+0x710> _out_char(ctx, c); - 4378: 85e6 mv a1,s9 - 437a: 8526 mv a0,s1 - 437c: e3dfd0ef jal 21b8 <_out_char> + 43bc: 85e6 mv a1,s9 + 43be: 8526 mv a0,s1 + 43c0: e3dfd0ef jal 21fc <_out_char> for (int i = 0; i < padding; i++) - 4380: 4a01 li s4,0 - 4382: d451 beqz s0,430e <_vprintf_core.constprop.0.isra.0+0x2e2> + 43c4: 4a01 li s4,0 + 43c6: d451 beqz s0,4352 <_vprintf_core.constprop.0.isra.0+0x2e2> _out_char(ctx, ' '); - 4384: 02000593 li a1,32 - 4388: 8526 mv a0,s1 + 43c8: 02000593 li a1,32 + 43cc: 8526 mv a0,s1 for (int i = 0; i < padding; i++) - 438a: 2a05 addiw s4,s4,1 + 43ce: 2a05 addiw s4,s4,1 _out_char(ctx, ' '); - 438c: e2dfd0ef jal 21b8 <_out_char> + 43d0: e2dfd0ef jal 21fc <_out_char> for (int i = 0; i < padding; i++) - 4390: ff441ae3 bne s0,s4,4384 <_vprintf_core.constprop.0.isra.0+0x358> + 43d4: ff441ae3 bne s0,s4,43c8 <_vprintf_core.constprop.0.isra.0+0x358> const char *s = va_arg(ap, char *); - 4394: 0c21 addi s8,s8,8 - 4396: b9d1 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> - 4398: f9bc861b addiw a2,s9,-101 - 439c: 0ff67613 zext.b a2,a2 - 43a0: 46cd li a3,19 - 43a2: 40c6e963 bltu a3,a2,47b4 <_vprintf_core.constprop.0.isra.0+0x788> - 43a6: 00091337 lui t1,0x91 - 43aa: 4685 li a3,1 - 43ac: 00c696b3 sll a3,a3,a2 - 43b0: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x87a50> - 43b4: 0066f333 and t1,a3,t1 - 43b8: 34031c63 bnez t1,4710 <_vprintf_core.constprop.0.isra.0+0x6e4> - 43bc: 8a9d andi a3,a3,7 - 43be: d6069de3 bnez a3,4138 <_vprintf_core.constprop.0.isra.0+0x10c> - 43c2: 46b9 li a3,14 + 43d8: 0c21 addi s8,s8,8 + 43da: b9d1 j 40ae <_vprintf_core.constprop.0.isra.0+0x3e> + 43dc: f9bc861b addiw a2,s9,-101 + 43e0: 0ff67613 zext.b a2,a2 + 43e4: 46cd li a3,19 + 43e6: 40c6e963 bltu a3,a2,47f8 <_vprintf_core.constprop.0.isra.0+0x788> + 43ea: 00091337 lui t1,0x91 + 43ee: 4685 li a3,1 + 43f0: 00c696b3 sll a3,a3,a2 + 43f4: 81030313 addi t1,t1,-2032 # 90810 <_ZSt4cerr+0x879d0> + 43f8: 0066f333 and t1,a3,t1 + 43fc: 34031c63 bnez t1,4754 <_vprintf_core.constprop.0.isra.0+0x6e4> + 4400: 8a9d andi a3,a3,7 + 4402: d6069de3 bnez a3,417c <_vprintf_core.constprop.0.isra.0+0x10c> + 4406: 46b9 li a3,14 char spec = *p++; - 43c4: 8dbe mv s11,a5 - 43c6: eed60ee3 beq a2,a3,42c2 <_vprintf_core.constprop.0.isra.0+0x296> + 4408: 8dbe mv s11,a5 + 440a: eed60ee3 beq a2,a3,4306 <_vprintf_core.constprop.0.isra.0+0x296> _out_char(ctx, '%'); - 43ca: 02500593 li a1,37 - 43ce: 8526 mv a0,s1 - 43d0: de9fd0ef jal 21b8 <_out_char> + 440e: 02500593 li a1,37 + 4412: 8526 mv a0,s1 + 4414: de9fd0ef jal 21fc <_out_char> _out_char(ctx, spec); - 43d4: 85e6 mv a1,s9 - 43d6: b179 j 4064 <_vprintf_core.constprop.0.isra.0+0x38> + 4418: 85e6 mv a1,s9 + 441a: b179 j 40a8 <_vprintf_core.constprop.0.isra.0+0x38> while (*p >= '0' && *p <= '9') - 43d8: fd0c869b addiw a3,s9,-48 - 43dc: 0ff6fe13 zext.b t3,a3 - 43e0: 4625 li a2,9 + 441c: fd0c869b addiw a3,s9,-48 + 4420: 0ff6fe13 zext.b t3,a3 + 4424: 4625 li a2,9 p++; - 43e2: 0d85 addi s11,s11,1 + 4426: 0d85 addi s11,s11,1 precision = 0; - 43e4: 4b81 li s7,0 + 4428: 4b81 li s7,0 while (*p >= '0' && *p <= '9') - 43e6: 4325 li t1,9 - 43e8: cdc66de3 bltu a2,t3,40c2 <_vprintf_core.constprop.0.isra.0+0x96> + 442a: 4325 li t1,9 + 442c: cdc66de3 bltu a2,t3,4106 <_vprintf_core.constprop.0.isra.0+0x96> precision = precision * 10 + (*p - '0'); - 43ec: 002b961b slliw a2,s7,0x2 + 4430: 002b961b slliw a2,s7,0x2 while (*p >= '0' && *p <= '9') - 43f0: 001dcc83 lbu s9,1(s11) + 4434: 001dcc83 lbu s9,1(s11) precision = precision * 10 + (*p - '0'); - 43f4: 0176073b addw a4,a2,s7 - 43f8: 0017171b slliw a4,a4,0x1 - 43fc: 00e68bbb addw s7,a3,a4 + 4438: 0176073b addw a4,a2,s7 + 443c: 0017171b slliw a4,a4,0x1 + 4440: 00e68bbb addw s7,a3,a4 while (*p >= '0' && *p <= '9') - 4400: fd0c869b addiw a3,s9,-48 - 4404: 0ff6f613 zext.b a2,a3 + 4444: fd0c869b addiw a3,s9,-48 + 4448: 0ff6f613 zext.b a2,a3 p++; - 4408: 0d85 addi s11,s11,1 + 444c: 0d85 addi s11,s11,1 while (*p >= '0' && *p <= '9') - 440a: fec371e3 bgeu t1,a2,43ec <_vprintf_core.constprop.0.isra.0+0x3c0> - 440e: b955 j 40c2 <_vprintf_core.constprop.0.isra.0+0x96> - 4410: 05800693 li a3,88 - 4414: 3cdc8d63 beq s9,a3,47ee <_vprintf_core.constprop.0.isra.0+0x7c2> - 4418: 06300713 li a4,99 + 444e: fec371e3 bgeu t1,a2,4430 <_vprintf_core.constprop.0.isra.0+0x3c0> + 4452: b955 j 4106 <_vprintf_core.constprop.0.isra.0+0x96> + 4454: 05800693 li a3,88 + 4458: 3cdc8d63 beq s9,a3,4832 <_vprintf_core.constprop.0.isra.0+0x7c2> + 445c: 06300713 li a4,99 char spec = *p++; - 441c: 8dbe mv s11,a5 - 441e: f4ec83e3 beq s9,a4,4364 <_vprintf_core.constprop.0.isra.0+0x338> - 4422: b765 j 43ca <_vprintf_core.constprop.0.isra.0+0x39e> + 4460: 8dbe mv s11,a5 + 4462: f4ec83e3 beq s9,a4,43a8 <_vprintf_core.constprop.0.isra.0+0x338> + 4466: b765 j 440e <_vprintf_core.constprop.0.isra.0+0x39e> f_idx += sprintf(&fmt_tmp[f_idx], ".%d", precision); - 4424: 01aa0533 add a0,s4,s10 - 4428: 865e mv a2,s7 - 442a: 00002597 auipc a1,0x2 - 442e: d3e58593 addi a1,a1,-706 # 6168 <_GLOBAL__sub_I__ZSt3cin+0x1c0> - 4432: ba5ff0ef jal 3fd6 - 4436: 00ad0d3b addw s10,s10,a0 - 443a: b341 j 41ba <_vprintf_core.constprop.0.isra.0+0x18e> + 4468: 01aa0533 add a0,s4,s10 + 446c: 865e mv a2,s7 + 446e: 00002597 auipc a1,0x2 + 4472: d7258593 addi a1,a1,-654 # 61e0 <_GLOBAL__sub_I__ZSt3cin+0x1dc> + 4476: ba5ff0ef jal 401a + 447a: 00ad0d3b addw s10,s10,a0 + 447e: b341 j 41fe <_vprintf_core.constprop.0.isra.0+0x18e> f_idx += sprintf(&fmt_tmp[f_idx], "%d", width); - 443c: 01aa0533 add a0,s4,s10 - 4440: 8622 mv a2,s0 - 4442: 00002597 auipc a1,0x2 - 4446: d1e58593 addi a1,a1,-738 # 6160 <_GLOBAL__sub_I__ZSt3cin+0x1b8> - 444a: b8dff0ef jal 3fd6 - 444e: 00ad0d3b addw s10,s10,a0 + 4480: 01aa0533 add a0,s4,s10 + 4484: 8622 mv a2,s0 + 4486: 00002597 auipc a1,0x2 + 448a: d5258593 addi a1,a1,-686 # 61d8 <_GLOBAL__sub_I__ZSt3cin+0x1d4> + 448e: b8dff0ef jal 401a + 4492: 00ad0d3b addw s10,s10,a0 if (precision >= 0) - 4452: d60bc4e3 bltz s7,41ba <_vprintf_core.constprop.0.isra.0+0x18e> - 4456: b7f9 j 4424 <_vprintf_core.constprop.0.isra.0+0x3f8> + 4496: d60bc4e3 bltz s7,41fe <_vprintf_core.constprop.0.isra.0+0x18e> + 449a: b7f9 j 4468 <_vprintf_core.constprop.0.isra.0+0x3f8> int is_signed = (spec == 'd' || spec == 'i'); - 4458: 06900693 li a3,105 - 445c: 10dc8e63 beq s9,a3,4578 <_vprintf_core.constprop.0.isra.0+0x54c> + 449c: 06900693 li a3,105 + 44a0: 10dc8e63 beq s9,a3,45bc <_vprintf_core.constprop.0.isra.0+0x54c> val = (uint64)va_arg(ap, void *); - 4460: 008c0793 addi a5,s8,8 + 44a4: 008c0793 addi a5,s8,8 int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 4464: 07800693 li a3,120 + 44a8: 07800693 li a3,120 val = (uint64)va_arg(ap, void *); - 4468: e43e sd a5,8(sp) + 44ac: e43e sd a5,8(sp) int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 446a: 38dc9d63 bne s9,a3,4804 <_vprintf_core.constprop.0.isra.0+0x7d8> + 44ae: 38dc9d63 bne s9,a3,4848 <_vprintf_core.constprop.0.isra.0+0x7d8> else if (len_mod == 1) - 446e: 33ce8963 beq t4,t3,47a0 <_vprintf_core.constprop.0.isra.0+0x774> + 44b2: 33ce8963 beq t4,t3,47e4 <_vprintf_core.constprop.0.isra.0+0x774> val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 4472: 000c6e03 lwu t3,0(s8) - 4476: 85f6 mv a1,t4 - 4478: e002 sd zero,0(sp) + 44b6: 000c6e03 lwu t3,0(s8) + 44ba: 85f6 mv a1,t4 + 44bc: e002 sd zero,0(sp) int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 447a: 4341 li t1,16 + 44be: 4341 li t1,16 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 447c: 00002f97 auipc t6,0x2 - 4480: cb4f8f93 addi t6,t6,-844 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + 44c0: 00002f97 auipc t6,0x2 + 44c4: ce8f8f93 addi t6,t6,-792 # 61a8 <_GLOBAL__sub_I__ZSt3cin+0x1a4> if (val == 0) - 4484: 120e0363 beqz t3,45aa <_vprintf_core.constprop.0.isra.0+0x57e> - 4488: 01010293 addi t0,sp,16 + 44c8: 120e0363 beqz t3,45ee <_vprintf_core.constprop.0.isra.0+0x57e> + 44cc: 01010293 addi t0,sp,16 sign_char = '-'; - 448c: 8616 mv a2,t0 - 448e: 86f2 mv a3,t3 + 44d0: 8616 mv a2,t0 + 44d2: 86f2 mv a3,t3 buf[i++] = digits[val % base]; - 4490: 0266f8b3 remu a7,a3,t1 - 4494: 8f32 mv t5,a2 + 44d4: 0266f8b3 remu a7,a3,t1 + 44d8: 8f32 mv t5,a2 while (val != 0) - 4496: 0605 addi a2,a2,1 - 4498: 8eb6 mv t4,a3 + 44da: 0605 addi a2,a2,1 + 44dc: 8eb6 mv t4,a3 buf[i++] = digits[val % base]; - 449a: 98fe add a7,a7,t6 - 449c: 0008c883 lbu a7,0(a7) + 44de: 98fe add a7,a7,t6 + 44e0: 0008c883 lbu a7,0(a7) val /= base; - 44a0: 0266d6b3 divu a3,a3,t1 + 44e4: 0266d6b3 divu a3,a3,t1 buf[i++] = digits[val % base]; - 44a4: ff160fa3 sb a7,-1(a2) + 44e8: ff160fa3 sb a7,-1(a2) while (val != 0) - 44a8: fe6ef4e3 bgeu t4,t1,4490 <_vprintf_core.constprop.0.isra.0+0x464> + 44ec: fe6ef4e3 bgeu t4,t1,44d4 <_vprintf_core.constprop.0.isra.0+0x464> buf[i++] = digits[val % base]; - 44ac: 405f0f3b subw t5,t5,t0 - 44b0: 2f05 addiw t5,t5,1 + 44f0: 405f0f3b subw t5,t5,t0 + 44f4: 2f05 addiw t5,t5,1 if (precision >= 0) - 44b2: 100bc363 bltz s7,45b8 <_vprintf_core.constprop.0.isra.0+0x58c> + 44f6: 100bc363 bltz s7,45fc <_vprintf_core.constprop.0.isra.0+0x58c> int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 44b6: 1d7f4d63 blt t5,s7,4690 <_vprintf_core.constprop.0.isra.0+0x664> + 44fa: 1d7f4d63 blt t5,s7,46d4 <_vprintf_core.constprop.0.isra.0+0x664> if (precision == 0 && val == 0) - 44ba: 340b9163 bnez s7,47fc <_vprintf_core.constprop.0.isra.0+0x7d0> - 44be: 200e0763 beqz t3,46cc <_vprintf_core.constprop.0.isra.0+0x6a0> + 44fe: 340b9163 bnez s7,4840 <_vprintf_core.constprop.0.isra.0+0x7d0> + 4502: 200e0763 beqz t3,4710 <_vprintf_core.constprop.0.isra.0+0x6a0> for (int i = digit_len - 1; i >= 0; i--) - 44c2: ffff0c1b addiw s8,t5,-1 + 4506: ffff0c1b addiw s8,t5,-1 if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 44c6: 07000693 li a3,112 + 450a: 07000693 li a3,112 for (int i = digit_len - 1; i >= 0; i--) - 44ca: 8662 mv a2,s8 + 450e: 8662 mv a2,s8 if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 44cc: 28dc8e63 beq s9,a3,4768 <_vprintf_core.constprop.0.isra.0+0x73c> - 44d0: 2a051663 bnez a0,477c <_vprintf_core.constprop.0.isra.0+0x750> + 4510: 28dc8e63 beq s9,a3,47ac <_vprintf_core.constprop.0.isra.0+0x73c> + 4514: 2a051663 bnez a0,47c0 <_vprintf_core.constprop.0.isra.0+0x750> int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 44d4: 00bf05bb addw a1,t5,a1 - 44d8: 8d52 mv s10,s4 - 44da: 4b01 li s6,0 + 4518: 00bf05bb addw a1,t5,a1 + 451c: 8d52 mv s10,s4 + 451e: 4b01 li s6,0 char *prefix_str = NULL; - 44dc: 4c81 li s9,0 + 4520: 4c81 li s9,0 int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 44de: 1085d263 bge a1,s0,45e2 <_vprintf_core.constprop.0.isra.0+0x5b6> - 44e2: 9c0d subw s0,s0,a1 + 4522: 1085d263 bge a1,s0,4626 <_vprintf_core.constprop.0.isra.0+0x5b6> + 4526: 9c0d subw s0,s0,a1 if (!flag_left && !flag_zero) - 44e4: 100d0a63 beqz s10,45f8 <_vprintf_core.constprop.0.isra.0+0x5cc> + 4528: 100d0a63 beqz s10,463c <_vprintf_core.constprop.0.isra.0+0x5cc> if (sign_char) - 44e8: 6782 ld a5,0(sp) - 44ea: 10079263 bnez a5,45ee <_vprintf_core.constprop.0.isra.0+0x5c2> + 452c: 6782 ld a5,0(sp) + 452e: 10079263 bnez a5,4632 <_vprintf_core.constprop.0.isra.0+0x5c2> if (prefix_str) - 44ee: 000c8c63 beqz s9,4506 <_vprintf_core.constprop.0.isra.0+0x4da> + 4532: 000c8c63 beqz s9,454a <_vprintf_core.constprop.0.isra.0+0x4da> _out_char(ctx, prefix_str[0]); - 44f2: 000cc583 lbu a1,0(s9) - 44f6: 8526 mv a0,s1 - 44f8: cc1fd0ef jal 21b8 <_out_char> + 4536: 000cc583 lbu a1,0(s9) + 453a: 8526 mv a0,s1 + 453c: cc1fd0ef jal 21fc <_out_char> _out_char(ctx, prefix_str[1]); - 44fc: 001cc583 lbu a1,1(s9) - 4500: 8526 mv a0,s1 - 4502: cb7fd0ef jal 21b8 <_out_char> + 4540: 001cc583 lbu a1,1(s9) + 4544: 8526 mv a0,s1 + 4546: cb7fd0ef jal 21fc <_out_char> int total_zeros = prec_zeros + ((flag_zero && !flag_left) ? padding : 0); - 4506: 180b0263 beqz s6,468a <_vprintf_core.constprop.0.isra.0+0x65e> - 450a: 100a1863 bnez s4,461a <_vprintf_core.constprop.0.isra.0+0x5ee> - 450e: 008b8bbb addw s7,s7,s0 + 454a: 180b0263 beqz s6,46ce <_vprintf_core.constprop.0.isra.0+0x65e> + 454e: 100a1863 bnez s4,465e <_vprintf_core.constprop.0.isra.0+0x5ee> + 4552: 008b8bbb addw s7,s7,s0 for (int i = 0; i < total_zeros; i++) - 4512: 2a0b8363 beqz s7,47b8 <_vprintf_core.constprop.0.isra.0+0x78c> - 4516: 4c81 li s9,0 + 4556: 2a0b8363 beqz s7,47fc <_vprintf_core.constprop.0.isra.0+0x78c> + 455a: 4c81 li s9,0 _out_char(ctx, '0'); - 4518: 03000593 li a1,48 - 451c: 8526 mv a0,s1 + 455c: 03000593 li a1,48 + 4560: 8526 mv a0,s1 for (int i = 0; i < total_zeros; i++) - 451e: 2c85 addiw s9,s9,1 + 4562: 2c85 addiw s9,s9,1 _out_char(ctx, '0'); - 4520: c99fd0ef jal 21b8 <_out_char> + 4564: c99fd0ef jal 21fc <_out_char> for (int i = 0; i < total_zeros; i++) - 4524: ff7c9ae3 bne s9,s7,4518 <_vprintf_core.constprop.0.isra.0+0x4ec> + 4568: ff7c9ae3 bne s9,s7,455c <_vprintf_core.constprop.0.isra.0+0x4ec> for (int i = digit_len - 1; i >= 0; i--) - 4528: 57fd li a5,-1 - 452a: 00fc0f63 beq s8,a5,4548 <_vprintf_core.constprop.0.isra.0+0x51c> - 452e: 01010c93 addi s9,sp,16 - 4532: 9ce2 add s9,s9,s8 - 4534: 00f10c13 addi s8,sp,15 + 456c: 57fd li a5,-1 + 456e: 00fc0f63 beq s8,a5,458c <_vprintf_core.constprop.0.isra.0+0x51c> + 4572: 01010c93 addi s9,sp,16 + 4576: 9ce2 add s9,s9,s8 + 4578: 00f10c13 addi s8,sp,15 _out_char(ctx, num_buf[i]); - 4538: 000cc583 lbu a1,0(s9) - 453c: 8526 mv a0,s1 + 457c: 000cc583 lbu a1,0(s9) + 4580: 8526 mv a0,s1 for (int i = digit_len - 1; i >= 0; i--) - 453e: 1cfd addi s9,s9,-1 + 4582: 1cfd addi s9,s9,-1 _out_char(ctx, num_buf[i]); - 4540: c79fd0ef jal 21b8 <_out_char> + 4584: c79fd0ef jal 21fc <_out_char> for (int i = digit_len - 1; i >= 0; i--) - 4544: ff9c1ae3 bne s8,s9,4538 <_vprintf_core.constprop.0.isra.0+0x50c> + 4588: ff9c1ae3 bne s8,s9,457c <_vprintf_core.constprop.0.isra.0+0x50c> if (flag_left) - 4548: 0c0a1e63 bnez s4,4624 <_vprintf_core.constprop.0.isra.0+0x5f8> + 458c: 0c0a1e63 bnez s4,4668 <_vprintf_core.constprop.0.isra.0+0x5f8> char spec = *p++; - 454c: 6c22 ld s8,8(sp) - 454e: be31 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + 4590: 6c22 ld s8,8(sp) + 4592: be31 j 40ae <_vprintf_core.constprop.0.isra.0+0x3e> int padding = (width > len) ? width - len : 0; - 4550: 4174043b subw s0,s0,s7 + 4594: 4174043b subw s0,s0,s7 if (!flag_left) - 4554: 100a0a63 beqz s4,4668 <_vprintf_core.constprop.0.isra.0+0x63c> + 4598: 100a0a63 beqz s4,46ac <_vprintf_core.constprop.0.isra.0+0x63c> for (int i = 0; i < len; i++) - 4558: d80b9ce3 bnez s7,42f0 <_vprintf_core.constprop.0.isra.0+0x2c4> + 459c: d80b9ce3 bnez s7,4334 <_vprintf_core.constprop.0.isra.0+0x2c4> for (int i = 0; i < padding; i++) - 455c: 4a01 li s4,0 + 45a0: 4a01 li s4,0 _out_char(ctx, ' '); - 455e: 02000593 li a1,32 - 4562: 8526 mv a0,s1 + 45a2: 02000593 li a1,32 + 45a6: 8526 mv a0,s1 for (int i = 0; i < padding; i++) - 4564: 2a05 addiw s4,s4,1 + 45a8: 2a05 addiw s4,s4,1 _out_char(ctx, ' '); - 4566: c53fd0ef jal 21b8 <_out_char> + 45aa: c53fd0ef jal 21fc <_out_char> for (int i = 0; i < padding; i++) - 456a: ff441ae3 bne s0,s4,455e <_vprintf_core.constprop.0.isra.0+0x532> + 45ae: ff441ae3 bne s0,s4,45a2 <_vprintf_core.constprop.0.isra.0+0x532> const char *s = va_arg(ap, char *); - 456e: 0c21 addi s8,s8,8 - 4570: bced j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + 45b2: 0c21 addi s8,s8,8 + 45b4: bced j 40ae <_vprintf_core.constprop.0.isra.0+0x3e> for (int i = 0; i < padding; i++) - 4572: f46d bnez s0,455c <_vprintf_core.constprop.0.isra.0+0x530> + 45b6: f46d bnez s0,45a0 <_vprintf_core.constprop.0.isra.0+0x530> const char *s = va_arg(ap, char *); - 4574: 0c21 addi s8,s8,8 - 4576: bcd5 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + 45b8: 0c21 addi s8,s8,8 + 45ba: bcd5 j 40ae <_vprintf_core.constprop.0.isra.0+0x3e> else if (len_mod == 1) - 4578: 1fce8163 beq t4,t3,475a <_vprintf_core.constprop.0.isra.0+0x72e> + 45bc: 1fce8163 beq t4,t3,479e <_vprintf_core.constprop.0.isra.0+0x72e> val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 457c: 000c2e03 lw t3,0(s8) - 4580: 008c0793 addi a5,s8,8 - 4584: e43e sd a5,8(sp) + 45c0: 000c2e03 lw t3,0(s8) + 45c4: 008c0793 addi a5,s8,8 + 45c8: e43e sd a5,8(sp) int64 sval = (int64)val; - 4586: 86f2 mv a3,t3 + 45ca: 86f2 mv a3,t3 if (sval < 0) - 4588: 1406cb63 bltz a3,46de <_vprintf_core.constprop.0.isra.0+0x6b2> + 45cc: 1406cb63 bltz a3,4722 <_vprintf_core.constprop.0.isra.0+0x6b2> sign_char = '+'; - 458c: 02b00793 li a5,43 - 4590: e03e sd a5,0(sp) + 45d0: 02b00793 li a5,43 + 45d4: e03e sd a5,0(sp) else if (flag_plus) - 4592: e589 bnez a1,459c <_vprintf_core.constprop.0.isra.0+0x570> + 45d6: e589 bnez a1,45e0 <_vprintf_core.constprop.0.isra.0+0x570> else if (flag_space) - 4594: 00589793 slli a5,a7,0x5 - 4598: e03e sd a5,0(sp) - 459a: 85c6 mv a1,a7 + 45d8: 00589793 slli a5,a7,0x5 + 45dc: e03e sd a5,0(sp) + 45de: 85c6 mv a1,a7 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 459c: 4329 li t1,10 - 459e: 00002f97 auipc t6,0x2 - 45a2: b92f8f93 addi t6,t6,-1134 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + 45e0: 4329 li t1,10 + 45e2: 00002f97 auipc t6,0x2 + 45e6: bc6f8f93 addi t6,t6,-1082 # 61a8 <_GLOBAL__sub_I__ZSt3cin+0x1a4> if (val == 0) - 45a6: ee0e11e3 bnez t3,4488 <_vprintf_core.constprop.0.isra.0+0x45c> + 45ea: ee0e11e3 bnez t3,44cc <_vprintf_core.constprop.0.isra.0+0x45c> buf[i++] = '0'; - 45aa: 03000693 li a3,48 - 45ae: 00d10823 sb a3,16(sp) + 45ee: 03000693 li a3,48 + 45f2: 00d10823 sb a3,16(sp) return i; - 45b2: 4f05 li t5,1 + 45f6: 4f05 li t5,1 if (precision >= 0) - 45b4: f00bd1e3 bgez s7,44b6 <_vprintf_core.constprop.0.isra.0+0x48a> + 45f8: f00bd1e3 bgez s7,44fa <_vprintf_core.constprop.0.isra.0+0x48a> for (int i = digit_len - 1; i >= 0; i--) - 45b8: ffff0c1b addiw s8,t5,-1 + 45fc: ffff0c1b addiw s8,t5,-1 if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 45bc: 07000893 li a7,112 + 4600: 07000893 li a7,112 if (!flag_left && !flag_zero) - 45c0: 016a6d33 or s10,s4,s6 + 4604: 016a6d33 or s10,s4,s6 int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 45c4: 4b81 li s7,0 + 4608: 4b81 li s7,0 for (int i = digit_len - 1; i >= 0; i--) - 45c6: 8662 mv a2,s8 + 460a: 8662 mv a2,s8 if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 45c8: 0d1c9f63 bne s9,a7,46a6 <_vprintf_core.constprop.0.isra.0+0x67a> + 460c: 0d1c9f63 bne s9,a7,46ea <_vprintf_core.constprop.0.isra.0+0x67a> prefix_str = (spec == 'X') ? "0X" : "0x"; - 45cc: 00002c97 auipc s9,0x2 - 45d0: b7cc8c93 addi s9,s9,-1156 # 6148 <_GLOBAL__sub_I__ZSt3cin+0x1a0> + 4610: 00002c97 auipc s9,0x2 + 4614: bb0c8c93 addi s9,s9,-1104 # 61c0 <_GLOBAL__sub_I__ZSt3cin+0x1bc> prefix_len += 2; - 45d4: 2589 addiw a1,a1,2 + 4618: 2589 addiw a1,a1,2 int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 45d6: 017585bb addw a1,a1,s7 - 45da: 01e585bb addw a1,a1,t5 - 45de: f085c2e3 blt a1,s0,44e2 <_vprintf_core.constprop.0.isra.0+0x4b6> + 461a: 017585bb addw a1,a1,s7 + 461e: 01e585bb addw a1,a1,t5 + 4622: f085c2e3 blt a1,s0,4526 <_vprintf_core.constprop.0.isra.0+0x4b6> if (!flag_left && !flag_zero) - 45e2: 080d0f63 beqz s10,4680 <_vprintf_core.constprop.0.isra.0+0x654> + 4626: 080d0f63 beqz s10,46c4 <_vprintf_core.constprop.0.isra.0+0x654> if (sign_char) - 45e6: 6782 ld a5,0(sp) + 462a: 6782 ld a5,0(sp) int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 45e8: 4401 li s0,0 + 462c: 4401 li s0,0 if (sign_char) - 45ea: f00782e3 beqz a5,44ee <_vprintf_core.constprop.0.isra.0+0x4c2> + 462e: f00782e3 beqz a5,4532 <_vprintf_core.constprop.0.isra.0+0x4c2> _out_char(ctx, sign_char); - 45ee: 6582 ld a1,0(sp) - 45f0: 8526 mv a0,s1 - 45f2: bc7fd0ef jal 21b8 <_out_char> - 45f6: bde5 j 44ee <_vprintf_core.constprop.0.isra.0+0x4c2> + 4632: 6582 ld a1,0(sp) + 4634: 8526 mv a0,s1 + 4636: bc7fd0ef jal 21fc <_out_char> + 463a: bde5 j 4532 <_vprintf_core.constprop.0.isra.0+0x4c2> _out_char(ctx, ' '); - 45f8: 02000593 li a1,32 - 45fc: 8526 mv a0,s1 + 463c: 02000593 li a1,32 + 4640: 8526 mv a0,s1 for (int i = 0; i < padding; i++) - 45fe: 2d05 addiw s10,s10,1 + 4642: 2d05 addiw s10,s10,1 _out_char(ctx, ' '); - 4600: bb9fd0ef jal 21b8 <_out_char> + 4644: bb9fd0ef jal 21fc <_out_char> for (int i = 0; i < padding; i++) - 4604: efa402e3 beq s0,s10,44e8 <_vprintf_core.constprop.0.isra.0+0x4bc> + 4648: efa402e3 beq s0,s10,452c <_vprintf_core.constprop.0.isra.0+0x4bc> _out_char(ctx, ' '); - 4608: 02000593 li a1,32 - 460c: 8526 mv a0,s1 + 464c: 02000593 li a1,32 + 4650: 8526 mv a0,s1 for (int i = 0; i < padding; i++) - 460e: 2d05 addiw s10,s10,1 + 4652: 2d05 addiw s10,s10,1 _out_char(ctx, ' '); - 4610: ba9fd0ef jal 21b8 <_out_char> + 4654: ba9fd0ef jal 21fc <_out_char> for (int i = 0; i < padding; i++) - 4614: ffa412e3 bne s0,s10,45f8 <_vprintf_core.constprop.0.isra.0+0x5cc> - 4618: bdc1 j 44e8 <_vprintf_core.constprop.0.isra.0+0x4bc> + 4658: ffa412e3 bne s0,s10,463c <_vprintf_core.constprop.0.isra.0+0x5cc> + 465c: bdc1 j 452c <_vprintf_core.constprop.0.isra.0+0x4bc> for (int i = 0; i < total_zeros; i++) - 461a: ee0b9ee3 bnez s7,4516 <_vprintf_core.constprop.0.isra.0+0x4ea> + 465e: ee0b9ee3 bnez s7,455a <_vprintf_core.constprop.0.isra.0+0x4ea> for (int i = digit_len - 1; i >= 0; i--) - 461e: 577d li a4,-1 - 4620: f0ec17e3 bne s8,a4,452e <_vprintf_core.constprop.0.isra.0+0x502> + 4662: 577d li a4,-1 + 4664: f0ec17e3 bne s8,a4,4572 <_vprintf_core.constprop.0.isra.0+0x502> for (int i = 0; i < padding; i++) - 4624: d405 beqz s0,454c <_vprintf_core.constprop.0.isra.0+0x520> - 4626: 4a01 li s4,0 + 4668: d405 beqz s0,4590 <_vprintf_core.constprop.0.isra.0+0x520> + 466a: 4a01 li s4,0 _out_char(ctx, ' '); - 4628: 02000593 li a1,32 - 462c: 8526 mv a0,s1 + 466c: 02000593 li a1,32 + 4670: 8526 mv a0,s1 for (int i = 0; i < padding; i++) - 462e: 2a05 addiw s4,s4,1 + 4672: 2a05 addiw s4,s4,1 _out_char(ctx, ' '); - 4630: b89fd0ef jal 21b8 <_out_char> + 4674: b89fd0ef jal 21fc <_out_char> for (int i = 0; i < padding; i++) - 4634: fe8a1ae3 bne s4,s0,4628 <_vprintf_core.constprop.0.isra.0+0x5fc> + 4678: fe8a1ae3 bne s4,s0,466c <_vprintf_core.constprop.0.isra.0+0x5fc> char spec = *p++; - 4638: 6c22 ld s8,8(sp) - 463a: bc05 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + 467c: 6c22 ld s8,8(sp) + 467e: bc05 j 40ae <_vprintf_core.constprop.0.isra.0+0x3e> val = (uint64)va_arg(ap, void *); - 463c: 008c0793 addi a5,s8,8 - 4640: e43e sd a5,8(sp) + 4680: 008c0793 addi a5,s8,8 + 4684: e43e sd a5,8(sp) else if (len_mod == 1) - 4642: 180e9163 bnez t4,47c4 <_vprintf_core.constprop.0.isra.0+0x798> + 4686: 180e9163 bnez t4,4808 <_vprintf_core.constprop.0.isra.0+0x798> val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 4646: 000c6e03 lwu t3,0(s8) + 468a: 000c6e03 lwu t3,0(s8) val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 464a: 4581 li a1,0 - 464c: 05800c93 li s9,88 - 4650: e002 sd zero,0(sp) - 4652: 4341 li t1,16 + 468e: 4581 li a1,0 + 4690: 05800c93 li s9,88 + 4694: e002 sd zero,0(sp) + 4696: 4341 li t1,16 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 4654: 00002f97 auipc t6,0x2 - 4658: ac4f8f93 addi t6,t6,-1340 # 6118 <_GLOBAL__sub_I__ZSt3cin+0x170> - 465c: b525 j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + 4698: 00002f97 auipc t6,0x2 + 469c: af8f8f93 addi t6,t6,-1288 # 6190 <_GLOBAL__sub_I__ZSt3cin+0x18c> + 46a0: b525 j 44c8 <_vprintf_core.constprop.0.isra.0+0x458> int padding = (width > len) ? width - len : 0; - 465e: ca8058e3 blez s0,430e <_vprintf_core.constprop.0.isra.0+0x2e2> + 46a2: ca8058e3 blez s0,4352 <_vprintf_core.constprop.0.isra.0+0x2e2> if (!flag_left) - 4662: ee0a1de3 bnez s4,455c <_vprintf_core.constprop.0.isra.0+0x530> + 46a6: ee0a1de3 bnez s4,45a0 <_vprintf_core.constprop.0.isra.0+0x530> int len = 0; - 4666: 4b81 li s7,0 + 46aa: 4b81 li s7,0 for (int i = 0; i < padding; i++) - 4668: 4d01 li s10,0 + 46ac: 4d01 li s10,0 _out_char(ctx, ' '); - 466a: 02000593 li a1,32 - 466e: 8526 mv a0,s1 + 46ae: 02000593 li a1,32 + 46b2: 8526 mv a0,s1 for (int i = 0; i < padding; i++) - 4670: 2d05 addiw s10,s10,1 + 46b4: 2d05 addiw s10,s10,1 _out_char(ctx, ' '); - 4672: b47fd0ef jal 21b8 <_out_char> + 46b6: b47fd0ef jal 21fc <_out_char> for (int i = 0; i < padding; i++) - 4676: fe8d1ae3 bne s10,s0,466a <_vprintf_core.constprop.0.isra.0+0x63e> + 46ba: fe8d1ae3 bne s10,s0,46ae <_vprintf_core.constprop.0.isra.0+0x63e> for (int i = 0; i < len; i++) - 467a: c60b9be3 bnez s7,42f0 <_vprintf_core.constprop.0.isra.0+0x2c4> - 467e: b941 j 430e <_vprintf_core.constprop.0.isra.0+0x2e2> + 46be: c60b9be3 bnez s7,4334 <_vprintf_core.constprop.0.isra.0+0x2c4> + 46c2: b941 j 4352 <_vprintf_core.constprop.0.isra.0+0x2e2> if (sign_char) - 4680: 6782 ld a5,0(sp) - 4682: 4401 li s0,0 - 4684: f7ad bnez a5,45ee <_vprintf_core.constprop.0.isra.0+0x5c2> + 46c4: 6782 ld a5,0(sp) + 46c6: 4401 li s0,0 + 46c8: f7ad bnez a5,4632 <_vprintf_core.constprop.0.isra.0+0x5c2> if (prefix_str) - 4686: e60c96e3 bnez s9,44f2 <_vprintf_core.constprop.0.isra.0+0x4c6> + 46ca: e60c96e3 bnez s9,4536 <_vprintf_core.constprop.0.isra.0+0x4c6> for (int i = 0; i < total_zeros; i++) - 468a: e80b96e3 bnez s7,4516 <_vprintf_core.constprop.0.isra.0+0x4ea> - 468e: bd69 j 4528 <_vprintf_core.constprop.0.isra.0+0x4fc> + 46ce: e80b96e3 bnez s7,455a <_vprintf_core.constprop.0.isra.0+0x4ea> + 46d2: bd69 j 456c <_vprintf_core.constprop.0.isra.0+0x4fc> int prec_zeros = (precision > digit_len) ? precision - digit_len : 0; - 4690: 41eb8bbb subw s7,s7,t5 - 4694: 8d52 mv s10,s4 - 4696: 4b01 li s6,0 + 46d4: 41eb8bbb subw s7,s7,t5 + 46d8: 8d52 mv s10,s4 + 46da: 4b01 li s6,0 for (int i = digit_len - 1; i >= 0; i--) - 4698: ffff0c1b addiw s8,t5,-1 + 46dc: ffff0c1b addiw s8,t5,-1 if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 469c: 07000893 li a7,112 + 46e0: 07000893 li a7,112 for (int i = digit_len - 1; i >= 0; i--) - 46a0: 8662 mv a2,s8 + 46e4: 8662 mv a2,s8 if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 46a2: f31c85e3 beq s9,a7,45cc <_vprintf_core.constprop.0.isra.0+0x5a0> - 46a6: cd09 beqz a0,46c0 <_vprintf_core.constprop.0.isra.0+0x694> - 46a8: 000e0c63 beqz t3,46c0 <_vprintf_core.constprop.0.isra.0+0x694> - 46ac: 07800513 li a0,120 + 46e6: f31c85e3 beq s9,a7,4610 <_vprintf_core.constprop.0.isra.0+0x5a0> + 46ea: cd09 beqz a0,4704 <_vprintf_core.constprop.0.isra.0+0x694> + 46ec: 000e0c63 beqz t3,4704 <_vprintf_core.constprop.0.isra.0+0x694> + 46f0: 07800513 li a0,120 for (int i = digit_len - 1; i >= 0; i--) - 46b0: 00060c1b sext.w s8,a2 + 46f4: 00060c1b sext.w s8,a2 if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 46b4: f0ac8ce3 beq s9,a0,45cc <_vprintf_core.constprop.0.isra.0+0x5a0> - 46b8: 05800613 li a2,88 - 46bc: 12cc8463 beq s9,a2,47e4 <_vprintf_core.constprop.0.isra.0+0x7b8> + 46f8: f0ac8ce3 beq s9,a0,4610 <_vprintf_core.constprop.0.isra.0+0x5a0> + 46fc: 05800613 li a2,88 + 4700: 12cc8463 beq s9,a2,4828 <_vprintf_core.constprop.0.isra.0+0x7b8> int padding = (width > prefix_len + prec_zeros + digit_len) ? width - (prefix_len + prec_zeros + digit_len) : 0; - 46c0: 00bb85bb addw a1,s7,a1 - 46c4: 01e585bb addw a1,a1,t5 + 4704: 00bb85bb addw a1,s7,a1 + 4708: 01e585bb addw a1,a1,t5 char *prefix_str = NULL; - 46c8: 4c81 li s9,0 - 46ca: bd11 j 44de <_vprintf_core.constprop.0.isra.0+0x4b2> + 470c: 4c81 li s9,0 + 470e: bd11 j 4522 <_vprintf_core.constprop.0.isra.0+0x4b2> if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 46cc: 07000693 li a3,112 - 46d0: 8d52 mv s10,s4 - 46d2: 4b01 li s6,0 - 46d4: 08dc8d63 beq s9,a3,476e <_vprintf_core.constprop.0.isra.0+0x742> - 46d8: 5c7d li s8,-1 + 4710: 07000693 li a3,112 + 4714: 8d52 mv s10,s4 + 4716: 4b01 li s6,0 + 4718: 08dc8d63 beq s9,a3,47b2 <_vprintf_core.constprop.0.isra.0+0x742> + 471c: 5c7d li s8,-1 char *prefix_str = NULL; - 46da: 4c81 li s9,0 - 46dc: b509 j 44de <_vprintf_core.constprop.0.isra.0+0x4b2> + 471e: 4c81 li s9,0 + 4720: b509 j 4522 <_vprintf_core.constprop.0.isra.0+0x4b2> sign_char = '-'; - 46de: 02d00793 li a5,45 + 4722: 02d00793 li a5,45 val = (uint64)(-sval); - 46e2: 40d00e33 neg t3,a3 - 46e6: 4585 li a1,1 - 46e8: 4329 li t1,10 + 4726: 40d00e33 neg t3,a3 + 472a: 4585 li a1,1 + 472c: 4329 li t1,10 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 46ea: 00002f97 auipc t6,0x2 - 46ee: a46f8f93 addi t6,t6,-1466 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> + 472e: 00002f97 auipc t6,0x2 + 4732: a7af8f93 addi t6,t6,-1414 # 61a8 <_GLOBAL__sub_I__ZSt3cin+0x1a4> sign_char = '-'; - 46f2: e03e sd a5,0(sp) - 46f4: bb51 j 4488 <_vprintf_core.constprop.0.isra.0+0x45c> + 4736: e03e sd a5,0(sp) + 4738: bb51 j 44cc <_vprintf_core.constprop.0.isra.0+0x45c> s = "(null)"; - 46f6: 00002c97 auipc s9,0x2 - 46fa: a62c8c93 addi s9,s9,-1438 # 6158 <_GLOBAL__sub_I__ZSt3cin+0x1b0> - 46fe: bed1 j 42d2 <_vprintf_core.constprop.0.isra.0+0x2a6> + 473a: 00002c97 auipc s9,0x2 + 473e: a96c8c93 addi s9,s9,-1386 # 61d0 <_GLOBAL__sub_I__ZSt3cin+0x1cc> + 4742: bed1 j 4316 <_vprintf_core.constprop.0.isra.0+0x2a6> val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 4700: 000c3683 ld a3,0(s8) - 4704: 008c0713 addi a4,s8,8 - 4708: e43a sd a4,8(sp) - 470a: 8dbe mv s11,a5 - 470c: 8e36 mv t3,a3 + 4744: 000c3683 ld a3,0(s8) + 4748: 008c0713 addi a4,s8,8 + 474c: e43a sd a4,8(sp) + 474e: 8dbe mv s11,a5 + 4750: 8e36 mv t3,a3 if (is_signed) - 470e: bdad j 4588 <_vprintf_core.constprop.0.isra.0+0x55c> + 4752: bdad j 45cc <_vprintf_core.constprop.0.isra.0+0x55c> int is_signed = (spec == 'd' || spec == 'i'); - 4710: 06900693 li a3,105 - 4714: fedc86e3 beq s9,a3,4700 <_vprintf_core.constprop.0.isra.0+0x6d4> + 4754: 06900693 li a3,105 + 4758: fedc86e3 beq s9,a3,4744 <_vprintf_core.constprop.0.isra.0+0x6d4> val = (uint64)va_arg(ap, void *); - 4718: 008c0713 addi a4,s8,8 + 475c: 008c0713 addi a4,s8,8 int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 471c: 07800693 li a3,120 + 4760: 07800693 li a3,120 val = (uint64)va_arg(ap, void *); - 4720: e43a sd a4,8(sp) + 4764: e43a sd a4,8(sp) int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 4722: 06dc9063 bne s9,a3,4782 <_vprintf_core.constprop.0.isra.0+0x756> + 4766: 06dc9063 bne s9,a3,47c6 <_vprintf_core.constprop.0.isra.0+0x756> val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 4726: 000c3e03 ld t3,0(s8) - 472a: 8dbe mv s11,a5 - 472c: 4581 li a1,0 - 472e: e002 sd zero,0(sp) + 476a: 000c3e03 ld t3,0(s8) + 476e: 8dbe mv s11,a5 + 4770: 4581 li a1,0 + 4772: e002 sd zero,0(sp) int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 4730: 4341 li t1,16 + 4774: 4341 li t1,16 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 4732: 00002f97 auipc t6,0x2 - 4736: 9fef8f93 addi t6,t6,-1538 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> - 473a: b3a9 j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + 4776: 00002f97 auipc t6,0x2 + 477a: a32f8f93 addi t6,t6,-1486 # 61a8 <_GLOBAL__sub_I__ZSt3cin+0x1a4> + 477e: b3a9 j 44c8 <_vprintf_core.constprop.0.isra.0+0x458> for (int i = 0; i < padding; i++) - 473c: c809 beqz s0,474e <_vprintf_core.constprop.0.isra.0+0x722> + 4780: c809 beqz s0,4792 <_vprintf_core.constprop.0.isra.0+0x722> _out_char(ctx, ' '); - 473e: 02000593 li a1,32 - 4742: 8526 mv a0,s1 + 4782: 02000593 li a1,32 + 4786: 8526 mv a0,s1 for (int i = 0; i < padding; i++) - 4744: 2a05 addiw s4,s4,1 + 4788: 2a05 addiw s4,s4,1 _out_char(ctx, ' '); - 4746: a73fd0ef jal 21b8 <_out_char> + 478a: a73fd0ef jal 21fc <_out_char> for (int i = 0; i < padding; i++) - 474a: ff441ae3 bne s0,s4,473e <_vprintf_core.constprop.0.isra.0+0x712> + 478e: ff441ae3 bne s0,s4,4782 <_vprintf_core.constprop.0.isra.0+0x712> _out_char(ctx, c); - 474e: 85e6 mv a1,s9 - 4750: 8526 mv a0,s1 - 4752: a67fd0ef jal 21b8 <_out_char> + 4792: 85e6 mv a1,s9 + 4794: 8526 mv a0,s1 + 4796: a67fd0ef jal 21fc <_out_char> const char *s = va_arg(ap, char *); - 4756: 0c21 addi s8,s8,8 - 4758: ba09 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + 479a: 0c21 addi s8,s8,8 + 479c: ba09 j 40ae <_vprintf_core.constprop.0.isra.0+0x3e> val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 475a: 000c3683 ld a3,0(s8) - 475e: 008c0793 addi a5,s8,8 - 4762: e43e sd a5,8(sp) - 4764: 8e36 mv t3,a3 + 479e: 000c3683 ld a3,0(s8) + 47a2: 008c0793 addi a5,s8,8 + 47a6: e43e sd a5,8(sp) + 47a8: 8e36 mv t3,a3 if (is_signed) - 4766: b50d j 4588 <_vprintf_core.constprop.0.isra.0+0x55c> + 47aa: b50d j 45cc <_vprintf_core.constprop.0.isra.0+0x55c> if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 4768: 8d52 mv s10,s4 - 476a: 4b01 li s6,0 - 476c: b585 j 45cc <_vprintf_core.constprop.0.isra.0+0x5a0> + 47ac: 8d52 mv s10,s4 + 47ae: 4b01 li s6,0 + 47b0: b585 j 4610 <_vprintf_core.constprop.0.isra.0+0x5a0> digit_len = 0; - 476e: 4f01 li t5,0 + 47b2: 4f01 li t5,0 if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 4770: 5c7d li s8,-1 + 47b4: 5c7d li s8,-1 prefix_str = (spec == 'X') ? "0X" : "0x"; - 4772: 00002c97 auipc s9,0x2 - 4776: 9d6c8c93 addi s9,s9,-1578 # 6148 <_GLOBAL__sub_I__ZSt3cin+0x1a0> - 477a: bda9 j 45d4 <_vprintf_core.constprop.0.isra.0+0x5a8> + 47b6: 00002c97 auipc s9,0x2 + 47ba: a0ac8c93 addi s9,s9,-1526 # 61c0 <_GLOBAL__sub_I__ZSt3cin+0x1bc> + 47be: bda9 j 4618 <_vprintf_core.constprop.0.isra.0+0x5a8> if (spec == 'p' || (flag_hash && val != 0 && (spec == 'x' || spec == 'X'))) - 477c: 8d52 mv s10,s4 - 477e: 4b01 li s6,0 - 4780: b735 j 46ac <_vprintf_core.constprop.0.isra.0+0x680> + 47c0: 8d52 mv s10,s4 + 47c2: 4b01 li s6,0 + 47c4: b735 j 46f0 <_vprintf_core.constprop.0.isra.0+0x680> int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 4782: 07000693 li a3,112 - 4786: 04dc8263 beq s9,a3,47ca <_vprintf_core.constprop.0.isra.0+0x79e> + 47c6: 07000693 li a3,112 + 47ca: 04dc8263 beq s9,a3,480e <_vprintf_core.constprop.0.isra.0+0x79e> val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 478a: 000c3e03 ld t3,0(s8) - 478e: 8dbe mv s11,a5 - 4790: 4581 li a1,0 - 4792: e002 sd zero,0(sp) + 47ce: 000c3e03 ld t3,0(s8) + 47d2: 8dbe mv s11,a5 + 47d4: 4581 li a1,0 + 47d6: e002 sd zero,0(sp) int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 4794: 4329 li t1,10 + 47d8: 4329 li t1,10 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 4796: 00002f97 auipc t6,0x2 - 479a: 99af8f93 addi t6,t6,-1638 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> - 479e: b1dd j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + 47da: 00002f97 auipc t6,0x2 + 47de: 9cef8f93 addi t6,t6,-1586 # 61a8 <_GLOBAL__sub_I__ZSt3cin+0x1a4> + 47e2: b1dd j 44c8 <_vprintf_core.constprop.0.isra.0+0x458> val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 47a0: 000c3e03 ld t3,0(s8) - 47a4: 4581 li a1,0 - 47a6: e002 sd zero,0(sp) + 47e4: 000c3e03 ld t3,0(s8) + 47e8: 4581 li a1,0 + 47ea: e002 sd zero,0(sp) int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 47a8: 4341 li t1,16 + 47ec: 4341 li t1,16 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 47aa: 00002f97 auipc t6,0x2 - 47ae: 986f8f93 addi t6,t6,-1658 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> - 47b2: b9c9 j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + 47ee: 00002f97 auipc t6,0x2 + 47f2: 9baf8f93 addi t6,t6,-1606 # 61a8 <_GLOBAL__sub_I__ZSt3cin+0x1a4> + 47f6: b9c9 j 44c8 <_vprintf_core.constprop.0.isra.0+0x458> char spec = *p++; - 47b4: 8dbe mv s11,a5 - 47b6: b911 j 43ca <_vprintf_core.constprop.0.isra.0+0x39e> + 47f8: 8dbe mv s11,a5 + 47fa: b911 j 440e <_vprintf_core.constprop.0.isra.0+0x39e> for (int i = digit_len - 1; i >= 0; i--) - 47b8: 577d li a4,-1 - 47ba: 4401 li s0,0 - 47bc: d6ec19e3 bne s8,a4,452e <_vprintf_core.constprop.0.isra.0+0x502> + 47fc: 577d li a4,-1 + 47fe: 4401 li s0,0 + 4800: d6ec19e3 bne s8,a4,4572 <_vprintf_core.constprop.0.isra.0+0x502> char spec = *p++; - 47c0: 6c22 ld s8,8(sp) - 47c2: b065 j 406a <_vprintf_core.constprop.0.isra.0+0x3e> + 4804: 6c22 ld s8,8(sp) + 4806: b065 j 40ae <_vprintf_core.constprop.0.isra.0+0x3e> val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 47c4: 000c3e03 ld t3,0(s8) + 4808: 000c3e03 ld t3,0(s8) const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 47c8: b549 j 464a <_vprintf_core.constprop.0.isra.0+0x61e> + 480c: b549 j 468e <_vprintf_core.constprop.0.isra.0+0x61e> int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 47ca: 8dbe mv s11,a5 + 480e: 8dbe mv s11,a5 val = (uint64)va_arg(ap, void *); - 47cc: 000c3e03 ld t3,0(s8) - 47d0: 4581 li a1,0 - 47d2: 07000c93 li s9,112 - 47d6: e002 sd zero,0(sp) - 47d8: 4341 li t1,16 + 4810: 000c3e03 ld t3,0(s8) + 4814: 4581 li a1,0 + 4816: 07000c93 li s9,112 + 481a: e002 sd zero,0(sp) + 481c: 4341 li t1,16 const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 47da: 00002f97 auipc t6,0x2 - 47de: 956f8f93 addi t6,t6,-1706 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> - 47e2: b14d j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + 481e: 00002f97 auipc t6,0x2 + 4822: 98af8f93 addi t6,t6,-1654 # 61a8 <_GLOBAL__sub_I__ZSt3cin+0x1a4> + 4826: b14d j 44c8 <_vprintf_core.constprop.0.isra.0+0x458> prefix_str = (spec == 'X') ? "0X" : "0x"; - 47e4: 00002c97 auipc s9,0x2 - 47e8: 96cc8c93 addi s9,s9,-1684 # 6150 <_GLOBAL__sub_I__ZSt3cin+0x1a8> - 47ec: b3e5 j 45d4 <_vprintf_core.constprop.0.isra.0+0x5a8> + 4828: 00002c97 auipc s9,0x2 + 482c: 9a0c8c93 addi s9,s9,-1632 # 61c8 <_GLOBAL__sub_I__ZSt3cin+0x1c4> + 4830: b3e5 j 4618 <_vprintf_core.constprop.0.isra.0+0x5a8> val = (uint64)va_arg(ap, void *); - 47ee: 008c0713 addi a4,s8,8 + 4832: 008c0713 addi a4,s8,8 val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 47f2: 000c3e03 ld t3,0(s8) + 4836: 000c3e03 ld t3,0(s8) val = (uint64)va_arg(ap, void *); - 47f6: e43a sd a4,8(sp) + 483a: e43a sd a4,8(sp) val = is_signed ? (uint64)va_arg(ap, int64) : va_arg(ap, uint64); - 47f8: 8dbe mv s11,a5 - 47fa: bd81 j 464a <_vprintf_core.constprop.0.isra.0+0x61e> - 47fc: 8d52 mv s10,s4 - 47fe: 4b01 li s6,0 - 4800: 4b81 li s7,0 - 4802: bd59 j 4698 <_vprintf_core.constprop.0.isra.0+0x66c> + 483c: 8dbe mv s11,a5 + 483e: bd81 j 468e <_vprintf_core.constprop.0.isra.0+0x61e> + 4840: 8d52 mv s10,s4 + 4842: 4b01 li s6,0 + 4844: 4b81 li s7,0 + 4846: bd59 j 46dc <_vprintf_core.constprop.0.isra.0+0x66c> int base = (spec == 'x' || spec == 'X' || spec == 'p') ? 16 : 10; - 4804: 07000693 li a3,112 - 4808: fcdc82e3 beq s9,a3,47cc <_vprintf_core.constprop.0.isra.0+0x7a0> + 4848: 07000693 li a3,112 + 484c: fcdc82e3 beq s9,a3,4810 <_vprintf_core.constprop.0.isra.0+0x7a0> else if (len_mod == 1) - 480c: 01ce8c63 beq t4,t3,4824 <_vprintf_core.constprop.0.isra.0+0x7f8> + 4850: 01ce8c63 beq t4,t3,4868 <_vprintf_core.constprop.0.isra.0+0x7f8> val = is_signed ? (uint64)((int64)va_arg(ap, int)) : (uint64)va_arg(ap, uint32); - 4810: 000c6e03 lwu t3,0(s8) + 4854: 000c6e03 lwu t3,0(s8) const char *digits = uppercase ? "0123456789ABCDEF" : "0123456789abcdef"; - 4814: 4581 li a1,0 - 4816: e002 sd zero,0(sp) - 4818: 4329 li t1,10 - 481a: 00002f97 auipc t6,0x2 - 481e: 916f8f93 addi t6,t6,-1770 # 6130 <_GLOBAL__sub_I__ZSt3cin+0x188> - 4822: b18d j 4484 <_vprintf_core.constprop.0.isra.0+0x458> + 4858: 4581 li a1,0 + 485a: e002 sd zero,0(sp) + 485c: 4329 li t1,10 + 485e: 00002f97 auipc t6,0x2 + 4862: 94af8f93 addi t6,t6,-1718 # 61a8 <_GLOBAL__sub_I__ZSt3cin+0x1a4> + 4866: b18d j 44c8 <_vprintf_core.constprop.0.isra.0+0x458> val = is_signed ? (uint64)va_arg(ap, long) : (uint64)va_arg(ap, unsigned long); - 4824: 000c3e03 ld t3,0(s8) + 4868: 000c3e03 ld t3,0(s8) if (is_signed) - 4828: b7f5 j 4814 <_vprintf_core.constprop.0.isra.0+0x7e8> + 486c: b7f5 j 4858 <_vprintf_core.constprop.0.isra.0+0x7e8> -000000000000482a : +000000000000486e : { - 482a: 7139 addi sp,sp,-64 - 482c: f822 sd s0,48(sp) - 482e: f426 sd s1,40(sp) - 4830: 842e mv s0,a1 - 4832: 84aa mv s1,a0 - 4834: 85b2 mv a1,a2 + 486e: 7139 addi sp,sp,-64 + 4870: f822 sd s0,48(sp) + 4872: f426 sd s1,40(sp) + 4874: 842e mv s0,a1 + 4876: 84aa mv s1,a0 + 4878: 85b2 mv a1,a2 _vprintf_core(&ctx, format, ap); - 4836: 850a mv a0,sp - 4838: 8636 mv a2,a3 + 487a: 850a mv a0,sp + 487c: 8636 mv a2,a3 { - 483a: fc06 sd ra,56(sp) + 487e: fc06 sd ra,56(sp) ctx.buf = str; - 483c: e026 sd s1,0(sp) + 4880: e026 sd s1,0(sp) ctx.limit = size; - 483e: e422 sd s0,8(sp) + 4882: e422 sd s0,8(sp) ctx.written = 0; - 4840: e802 sd zero,16(sp) + 4884: e802 sd zero,16(sp) ctx.stream = NULL; - 4842: ec02 sd zero,24(sp) + 4886: ec02 sd zero,24(sp) _vprintf_core(&ctx, format, ap); - 4844: fe8ff0ef jal 402c <_vprintf_core.constprop.0.isra.0> + 4888: fe8ff0ef jal 4070 <_vprintf_core.constprop.0.isra.0> if (ctx.written < size) - 4848: 6542 ld a0,16(sp) + 488c: 6542 ld a0,16(sp) if (size > 0) - 484a: c411 beqz s0,4856 + 488e: c411 beqz s0,489a if (ctx.written < size) - 484c: 00857b63 bgeu a0,s0,4862 + 4890: 00857b63 bgeu a0,s0,48a6 str[ctx.written] = '\0'; - 4850: 94aa add s1,s1,a0 - 4852: 00048023 sb zero,0(s1) -} - 4856: 70e2 ld ra,56(sp) - 4858: 7442 ld s0,48(sp) - 485a: 74a2 ld s1,40(sp) - 485c: 2501 sext.w a0,a0 - 485e: 6121 addi sp,sp,64 - 4860: 8082 ret + 4894: 94aa add s1,s1,a0 + 4896: 00048023 sb zero,0(s1) +} + 489a: 70e2 ld ra,56(sp) + 489c: 7442 ld s0,48(sp) + 489e: 74a2 ld s1,40(sp) + 48a0: 2501 sext.w a0,a0 + 48a2: 6121 addi sp,sp,64 + 48a4: 8082 ret str[size - 1] = '\0'; - 4862: 94a2 add s1,s1,s0 - 4864: fe048fa3 sb zero,-1(s1) + 48a6: 94a2 add s1,s1,s0 + 48a8: fe048fa3 sb zero,-1(s1) } - 4868: 70e2 ld ra,56(sp) - 486a: 7442 ld s0,48(sp) - 486c: 74a2 ld s1,40(sp) - 486e: 2501 sext.w a0,a0 - 4870: 6121 addi sp,sp,64 - 4872: 8082 ret + 48ac: 70e2 ld ra,56(sp) + 48ae: 7442 ld s0,48(sp) + 48b0: 74a2 ld s1,40(sp) + 48b2: 2501 sext.w a0,a0 + 48b4: 6121 addi sp,sp,64 + 48b6: 8082 ret -0000000000004874 : +00000000000048b8 : { - 4874: 7119 addi sp,sp,-128 - 4876: e0a2 sd s0,64(sp) - 4878: fc26 sd s1,56(sp) - 487a: 842e mv s0,a1 - 487c: 84aa mv s1,a0 - 487e: 85b2 mv a1,a2 + 48b8: 7119 addi sp,sp,-128 + 48ba: e0a2 sd s0,64(sp) + 48bc: fc26 sd s1,56(sp) + 48be: 842e mv s0,a1 + 48c0: 84aa mv s1,a0 + 48c2: 85b2 mv a1,a2 _vprintf_core(&ctx, format, ap); - 4880: 0808 addi a0,sp,16 + 48c4: 0808 addi a0,sp,16 va_start(ap, format); - 4882: 08b0 addi a2,sp,88 + 48c6: 08b0 addi a2,sp,88 { - 4884: e486 sd ra,72(sp) - 4886: ecb6 sd a3,88(sp) - 4888: f0ba sd a4,96(sp) - 488a: f4be sd a5,104(sp) - 488c: f8c2 sd a6,112(sp) - 488e: fcc6 sd a7,120(sp) + 48c8: e486 sd ra,72(sp) + 48ca: ecb6 sd a3,88(sp) + 48cc: f0ba sd a4,96(sp) + 48ce: f4be sd a5,104(sp) + 48d0: f8c2 sd a6,112(sp) + 48d2: fcc6 sd a7,120(sp) va_start(ap, format); - 4890: e432 sd a2,8(sp) + 48d4: e432 sd a2,8(sp) ctx.buf = str; - 4892: e826 sd s1,16(sp) + 48d6: e826 sd s1,16(sp) ctx.limit = size; - 4894: ec22 sd s0,24(sp) + 48d8: ec22 sd s0,24(sp) ctx.written = 0; - 4896: f002 sd zero,32(sp) + 48da: f002 sd zero,32(sp) ctx.stream = NULL; - 4898: f402 sd zero,40(sp) + 48dc: f402 sd zero,40(sp) _vprintf_core(&ctx, format, ap); - 489a: f92ff0ef jal 402c <_vprintf_core.constprop.0.isra.0> + 48de: f92ff0ef jal 4070 <_vprintf_core.constprop.0.isra.0> if (ctx.written < size) - 489e: 7502 ld a0,32(sp) + 48e2: 7502 ld a0,32(sp) if (size > 0) - 48a0: c411 beqz s0,48ac + 48e4: c411 beqz s0,48f0 if (ctx.written < size) - 48a2: 00857b63 bgeu a0,s0,48b8 + 48e6: 00857b63 bgeu a0,s0,48fc str[ctx.written] = '\0'; - 48a6: 94aa add s1,s1,a0 - 48a8: 00048023 sb zero,0(s1) -} - 48ac: 60a6 ld ra,72(sp) - 48ae: 6406 ld s0,64(sp) - 48b0: 74e2 ld s1,56(sp) - 48b2: 2501 sext.w a0,a0 - 48b4: 6109 addi sp,sp,128 - 48b6: 8082 ret + 48ea: 94aa add s1,s1,a0 + 48ec: 00048023 sb zero,0(s1) +} + 48f0: 60a6 ld ra,72(sp) + 48f2: 6406 ld s0,64(sp) + 48f4: 74e2 ld s1,56(sp) + 48f6: 2501 sext.w a0,a0 + 48f8: 6109 addi sp,sp,128 + 48fa: 8082 ret str[size - 1] = '\0'; - 48b8: 94a2 add s1,s1,s0 - 48ba: fe048fa3 sb zero,-1(s1) + 48fc: 94a2 add s1,s1,s0 + 48fe: fe048fa3 sb zero,-1(s1) } - 48be: 60a6 ld ra,72(sp) - 48c0: 6406 ld s0,64(sp) - 48c2: 74e2 ld s1,56(sp) - 48c4: 2501 sext.w a0,a0 - 48c6: 6109 addi sp,sp,128 - 48c8: 8082 ret + 4902: 60a6 ld ra,72(sp) + 4904: 6406 ld s0,64(sp) + 4906: 74e2 ld s1,56(sp) + 4908: 2501 sext.w a0,a0 + 490a: 6109 addi sp,sp,128 + 490c: 8082 ret -00000000000048ca : +000000000000490e : { - 48ca: 7119 addi sp,sp,-128 + 490e: 7119 addi sp,sp,-128 va_start(ap, format); - 48cc: 04810313 addi t1,sp,72 + 4910: 04810313 addi t1,sp,72 { - 48d0: e4ae sd a1,72(sp) - 48d2: e8b2 sd a2,80(sp) - 48d4: f4be sd a5,104(sp) + 4914: e4ae sd a1,72(sp) + 4916: e8b2 sd a2,80(sp) + 4918: f4be sd a5,104(sp) _vprintf_core(&ctx, format, ap); - 48d6: 85aa mv a1,a0 + 491a: 85aa mv a1,a0 ctx.stream = stdout; - 48d8: 00004797 auipc a5,0x4 - 48dc: 2f07b783 ld a5,752(a5) # 8bc8 + 491c: 00004797 auipc a5,0x4 + 4920: 32c7b783 ld a5,812(a5) # 8c48 _vprintf_core(&ctx, format, ap); - 48e0: 0808 addi a0,sp,16 - 48e2: 861a mv a2,t1 + 4924: 0808 addi a0,sp,16 + 4926: 861a mv a2,t1 { - 48e4: fc06 sd ra,56(sp) - 48e6: ecb6 sd a3,88(sp) - 48e8: f0ba sd a4,96(sp) - 48ea: f8c2 sd a6,112(sp) - 48ec: fcc6 sd a7,120(sp) + 4928: fc06 sd ra,56(sp) + 492a: ecb6 sd a3,88(sp) + 492c: f0ba sd a4,96(sp) + 492e: f8c2 sd a6,112(sp) + 4930: fcc6 sd a7,120(sp) va_start(ap, format); - 48ee: e41a sd t1,8(sp) + 4932: e41a sd t1,8(sp) ctx.buf = NULL; - 48f0: e802 sd zero,16(sp) + 4934: e802 sd zero,16(sp) ctx.limit = 0; - 48f2: ec02 sd zero,24(sp) + 4936: ec02 sd zero,24(sp) ctx.written = 0; - 48f4: f002 sd zero,32(sp) + 4938: f002 sd zero,32(sp) ctx.stream = stdout; - 48f6: f43e sd a5,40(sp) + 493a: f43e sd a5,40(sp) _vprintf_core(&ctx, format, ap); - 48f8: f34ff0ef jal 402c <_vprintf_core.constprop.0.isra.0> + 493c: f34ff0ef jal 4070 <_vprintf_core.constprop.0.isra.0> } - 48fc: 70e2 ld ra,56(sp) - 48fe: 5502 lw a0,32(sp) - 4900: 6109 addi sp,sp,128 - 4902: 8082 ret + 4940: 70e2 ld ra,56(sp) + 4942: 5502 lw a0,32(sp) + 4944: 6109 addi sp,sp,128 + 4946: 8082 ret -0000000000004904 : +0000000000004948 : { - 4904: 7159 addi sp,sp,-112 + 4948: 7159 addi sp,sp,-112 va_start(ap, format); - 4906: 04010e13 addi t3,sp,64 + 494a: 04010e13 addi t3,sp,64 { - 490a: 8eaa mv t4,a0 + 494e: 8eaa mv t4,a0 ctx.fd = -1; - 490c: 537d li t1,-1 + 4950: 537d li t1,-1 { - 490e: e0b2 sd a2,64(sp) + 4952: e0b2 sd a2,64(sp) int ret = _vscanf_core(&ctx, format, ap); - 4910: 0808 addi a0,sp,16 - 4912: 8672 mv a2,t3 + 4954: 0808 addi a0,sp,16 + 4956: 8672 mv a2,t3 { - 4914: fc06 sd ra,56(sp) - 4916: e4b6 sd a3,72(sp) - 4918: e8ba sd a4,80(sp) - 491a: ecbe sd a5,88(sp) - 491c: f0c2 sd a6,96(sp) - 491e: f4c6 sd a7,104(sp) + 4958: fc06 sd ra,56(sp) + 495a: e4b6 sd a3,72(sp) + 495c: e8ba sd a4,80(sp) + 495e: ecbe sd a5,88(sp) + 4960: f0c2 sd a6,96(sp) + 4962: f4c6 sd a7,104(sp) va_start(ap, format); - 4920: e472 sd t3,8(sp) + 4964: e472 sd t3,8(sp) ctx.buf = str; - 4922: e876 sd t4,16(sp) + 4966: e876 sd t4,16(sp) ctx.fd = -1; - 4924: cc1a sw t1,24(sp) + 4968: cc1a sw t1,24(sp) ctx.pos = 0; - 4926: f002 sd zero,32(sp) + 496a: f002 sd zero,32(sp) ctx.ungotten = -1; - 4928: d41a sw t1,40(sp) + 496c: d41a sw t1,40(sp) int ret = _vscanf_core(&ctx, format, ap); - 492a: 81efd0ef jal 1948 <_vscanf_core.constprop.0> + 496e: 81efd0ef jal 198c <_vscanf_core.constprop.0> } - 492e: 70e2 ld ra,56(sp) - 4930: 6165 addi sp,sp,112 - 4932: 8082 ret + 4972: 70e2 ld ra,56(sp) + 4974: 6165 addi sp,sp,112 + 4976: 8082 ret -0000000000004934 : +0000000000004978 : { - 4934: 7119 addi sp,sp,-128 + 4978: 7119 addi sp,sp,-128 va_start(ap, format); - 4936: 04810313 addi t1,sp,72 + 497a: 04810313 addi t1,sp,72 { - 493a: e4ae sd a1,72(sp) - 493c: e8b2 sd a2,80(sp) - 493e: f4be sd a5,104(sp) + 497e: e4ae sd a1,72(sp) + 4980: e8b2 sd a2,80(sp) + 4982: f4be sd a5,104(sp) int ret = _vscanf_core(&ctx, format, ap); - 4940: 85aa mv a1,a0 + 4984: 85aa mv a1,a0 ctx.ungotten = -1; - 4942: 57fd li a5,-1 + 4986: 57fd li a5,-1 int ret = _vscanf_core(&ctx, format, ap); - 4944: 0808 addi a0,sp,16 - 4946: 861a mv a2,t1 + 4988: 0808 addi a0,sp,16 + 498a: 861a mv a2,t1 { - 4948: fc06 sd ra,56(sp) - 494a: ecb6 sd a3,88(sp) - 494c: f0ba sd a4,96(sp) - 494e: f8c2 sd a6,112(sp) - 4950: fcc6 sd a7,120(sp) + 498c: fc06 sd ra,56(sp) + 498e: ecb6 sd a3,88(sp) + 4990: f0ba sd a4,96(sp) + 4992: f8c2 sd a6,112(sp) + 4994: fcc6 sd a7,120(sp) va_start(ap, format); - 4952: e41a sd t1,8(sp) + 4996: e41a sd t1,8(sp) ctx.buf = NULL; - 4954: e802 sd zero,16(sp) + 4998: e802 sd zero,16(sp) ctx.fd = STDIN_FD; - 4956: cc02 sw zero,24(sp) + 499a: cc02 sw zero,24(sp) ctx.pos = 0; - 4958: f002 sd zero,32(sp) + 499c: f002 sd zero,32(sp) ctx.ungotten = -1; - 495a: d43e sw a5,40(sp) + 499e: d43e sw a5,40(sp) int ret = _vscanf_core(&ctx, format, ap); - 495c: fedfc0ef jal 1948 <_vscanf_core.constprop.0> + 49a0: fedfc0ef jal 198c <_vscanf_core.constprop.0> } - 4960: 70e2 ld ra,56(sp) - 4962: 6109 addi sp,sp,128 - 4964: 8082 ret + 49a4: 70e2 ld ra,56(sp) + 49a6: 6109 addi sp,sp,128 + 49a8: 8082 ret -0000000000004966 : +00000000000049aa : { - 4966: 1101 addi sp,sp,-32 - 4968: e426 sd s1,8(sp) - 496a: 84ae mv s1,a1 - 496c: e04a sd s2,0(sp) + 49aa: 1101 addi sp,sp,-32 + 49ac: e426 sd s1,8(sp) + 49ae: 84ae mv s1,a1 + 49b0: e04a sd s2,0(sp) if (strcmp(mode, "r") == 0) - 496e: 00002597 auipc a1,0x2 - 4972: 80258593 addi a1,a1,-2046 # 6170 <_GLOBAL__sub_I__ZSt3cin+0x1c8> + 49b2: 00002597 auipc a1,0x2 + 49b6: 83658593 addi a1,a1,-1994 # 61e8 <_GLOBAL__sub_I__ZSt3cin+0x1e4> { - 4976: 892a mv s2,a0 + 49ba: 892a mv s2,a0 if (strcmp(mode, "r") == 0) - 4978: 8526 mv a0,s1 + 49bc: 8526 mv a0,s1 { - 497a: e822 sd s0,16(sp) - 497c: ec06 sd ra,24(sp) + 49be: e822 sd s0,16(sp) + 49c0: ec06 sd ra,24(sp) if (strcmp(mode, "r") == 0) - 497e: 280010ef jal 5bfe - 4982: 842a mv s0,a0 - 4984: c919 beqz a0,499a + 49c2: 298010ef jal 5c5a + 49c6: 842a mv s0,a0 + 49c8: c919 beqz a0,49de else if (strcmp(mode, "w") == 0) - 4986: 00001597 auipc a1,0x1 - 498a: 7f258593 addi a1,a1,2034 # 6178 <_GLOBAL__sub_I__ZSt3cin+0x1d0> - 498e: 8526 mv a0,s1 - 4990: 26e010ef jal 5bfe + 49ca: 00002597 auipc a1,0x2 + 49ce: 82658593 addi a1,a1,-2010 # 61f0 <_GLOBAL__sub_I__ZSt3cin+0x1ec> + 49d2: 8526 mv a0,s1 + 49d4: 286010ef jal 5c5a flags = O_WRONLY | O_CREAT | O_TRUNC; - 4994: 24100413 li s0,577 + 49d8: 24100413 li s0,577 else if (strcmp(mode, "w") == 0) - 4998: ed39 bnez a0,49f6 + 49dc: ed39 bnez a0,4a3a int64 fd = open(filename, flags); - 499a: 85a2 mv a1,s0 - 499c: 854a mv a0,s2 - 499e: f4afc0ef jal 10e8 - 49a2: 84aa mv s1,a0 + 49de: 85a2 mv a1,s0 + 49e0: 854a mv a0,s2 + 49e2: f4afc0ef jal 112c + 49e6: 84aa mv s1,a0 if (fd < 0) - 49a4: 06054c63 bltz a0,4a1c + 49e8: 06054c63 bltz a0,4a60 FILE *f = (FILE *)malloc(sizeof(FILE)); - 49a8: 42000513 li a0,1056 - 49ac: 2f3000ef jal 549e - 49b0: 892a mv s2,a0 + 49ec: 42000513 li a0,1056 + 49f0: 2f3000ef jal 54e2 + 49f4: 892a mv s2,a0 if (!f) - 49b2: c53d beqz a0,4a20 + 49f6: c53d beqz a0,4a64 memset(f, 0, sizeof(FILE)); - 49b4: 42000613 li a2,1056 - 49b8: 4581 li a1,0 - 49ba: 0d6010ef jal 5a90 + 49f8: 42000613 li a2,1056 + 49fc: 4581 li a1,0 + 49fe: 0ee010ef jal 5aec if (fd == 1) - 49be: 4785 li a5,1 + 4a02: 4785 li a5,1 f->fd = (int)fd; - 49c0: 00992023 sw s1,0(s2) + 4a04: 00992023 sw s1,0(s2) f->flags = flags; - 49c4: 00892223 sw s0,4(s2) + 4a08: 00892223 sw s0,4(s2) if (fd == 1) - 49c8: 00f48e63 beq s1,a5,49e4 + 4a0c: 00f48e63 beq s1,a5,4a28 else if (fd == 2) - 49cc: 4789 li a5,2 - 49ce: 00f48b63 beq s1,a5,49e4 + 4a10: 4789 li a5,2 + 4a12: 00f48b63 beq s1,a5,4a28 f->buf_mode = 0; - 49d2: 40092e23 sw zero,1052(s2) -} - 49d6: 60e2 ld ra,24(sp) - 49d8: 6442 ld s0,16(sp) - 49da: 64a2 ld s1,8(sp) - 49dc: 854a mv a0,s2 - 49de: 6902 ld s2,0(sp) - 49e0: 6105 addi sp,sp,32 - 49e2: 8082 ret - 49e4: 60e2 ld ra,24(sp) - 49e6: 6442 ld s0,16(sp) + 4a16: 40092e23 sw zero,1052(s2) +} + 4a1a: 60e2 ld ra,24(sp) + 4a1c: 6442 ld s0,16(sp) + 4a1e: 64a2 ld s1,8(sp) + 4a20: 854a mv a0,s2 + 4a22: 6902 ld s2,0(sp) + 4a24: 6105 addi sp,sp,32 + 4a26: 8082 ret + 4a28: 60e2 ld ra,24(sp) + 4a2a: 6442 ld s0,16(sp) f->buf_mode = 2; - 49e8: 40992e23 sw s1,1052(s2) + 4a2c: 40992e23 sw s1,1052(s2) } - 49ec: 854a mv a0,s2 - 49ee: 64a2 ld s1,8(sp) - 49f0: 6902 ld s2,0(sp) - 49f2: 6105 addi sp,sp,32 - 49f4: 8082 ret + 4a30: 854a mv a0,s2 + 4a32: 64a2 ld s1,8(sp) + 4a34: 6902 ld s2,0(sp) + 4a36: 6105 addi sp,sp,32 + 4a38: 8082 ret else if (strcmp(mode, "a") == 0) - 49f6: 00001597 auipc a1,0x1 - 49fa: 78a58593 addi a1,a1,1930 # 6180 <_GLOBAL__sub_I__ZSt3cin+0x1d8> - 49fe: 8526 mv a0,s1 - 4a00: 1fe010ef jal 5bfe + 4a3a: 00001597 auipc a1,0x1 + 4a3e: 7be58593 addi a1,a1,1982 # 61f8 <_GLOBAL__sub_I__ZSt3cin+0x1f4> + 4a42: 8526 mv a0,s1 + 4a44: 216010ef jal 5c5a flags = O_WRONLY | O_CREAT | O_APPEND; - 4a04: 44100413 li s0,1089 + 4a48: 44100413 li s0,1089 else if (strcmp(mode, "a") == 0) - 4a08: d949 beqz a0,499a + 4a4c: d949 beqz a0,49de else if (strcmp(mode, "r+") == 0) - 4a0a: 00001597 auipc a1,0x1 - 4a0e: 77e58593 addi a1,a1,1918 # 6188 <_GLOBAL__sub_I__ZSt3cin+0x1e0> - 4a12: 8526 mv a0,s1 - 4a14: 1ea010ef jal 5bfe + 4a4e: 00001597 auipc a1,0x1 + 4a52: 7b258593 addi a1,a1,1970 # 6200 <_GLOBAL__sub_I__ZSt3cin+0x1fc> + 4a56: 8526 mv a0,s1 + 4a58: 202010ef jal 5c5a flags = O_RDWR; - 4a18: 4409 li s0,2 + 4a5c: 4409 li s0,2 else if (strcmp(mode, "r+") == 0) - 4a1a: d141 beqz a0,499a + 4a5e: d141 beqz a0,49de return NULL; - 4a1c: 4901 li s2,0 - 4a1e: bf65 j 49d6 + 4a60: 4901 li s2,0 + 4a62: bf65 j 4a1a close(fd); - 4a20: 8526 mv a0,s1 - 4a22: eaefc0ef jal 10d0 + 4a64: 8526 mv a0,s1 + 4a66: eaefc0ef jal 1114 return NULL; - 4a26: 4901 li s2,0 - 4a28: b77d j 49d6 + 4a6a: 4901 li s2,0 + 4a6c: b77d j 4a1a -0000000000004a2a : +0000000000004a6e : if (!stream) - 4a2a: cd29 beqz a0,4a84 + 4a6e: cd29 beqz a0,4ac8 if (stream->buf_write_pos > 0) - 4a2c: 41052603 lw a2,1040(a0) + 4a70: 41052603 lw a2,1040(a0) { - 4a30: 1141 addi sp,sp,-16 - 4a32: e022 sd s0,0(sp) - 4a34: e406 sd ra,8(sp) - 4a36: 842a mv s0,a0 + 4a74: 1141 addi sp,sp,-16 + 4a76: e022 sd s0,0(sp) + 4a78: e406 sd ra,8(sp) + 4a7a: 842a mv s0,a0 if (stream->buf_write_pos > 0) - 4a38: 02c04a63 bgtz a2,4a6c + 4a7c: 02c04a63 bgtz a2,4ab0 if (stream != stdin && stream != stdout && stream != stderr) - 4a3c: 00004797 auipc a5,0x4 - 4a40: 18c78793 addi a5,a5,396 # 8bc8 - 4a44: 6798 ld a4,8(a5) - 4a46: 00870e63 beq a4,s0,4a62 - 4a4a: 6398 ld a4,0(a5) - 4a4c: 00870b63 beq a4,s0,4a62 - 4a50: 6b9c ld a5,16(a5) - 4a52: 00878863 beq a5,s0,4a62 + 4a80: 00004797 auipc a5,0x4 + 4a84: 1c878793 addi a5,a5,456 # 8c48 + 4a88: 6798 ld a4,8(a5) + 4a8a: 00870e63 beq a4,s0,4aa6 + 4a8e: 6398 ld a4,0(a5) + 4a90: 00870b63 beq a4,s0,4aa6 + 4a94: 6b9c ld a5,16(a5) + 4a96: 00878863 beq a5,s0,4aa6 close(stream->fd); - 4a56: 4008 lw a0,0(s0) - 4a58: e78fc0ef jal 10d0 + 4a9a: 4008 lw a0,0(s0) + 4a9c: e78fc0ef jal 1114 free(stream); - 4a5c: 8522 mv a0,s0 - 4a5e: 1cb000ef jal 5428 + 4aa0: 8522 mv a0,s0 + 4aa2: 1cb000ef jal 546c } - 4a62: 60a2 ld ra,8(sp) - 4a64: 6402 ld s0,0(sp) + 4aa6: 60a2 ld ra,8(sp) + 4aa8: 6402 ld s0,0(sp) return 0; - 4a66: 4501 li a0,0 + 4aaa: 4501 li a0,0 } - 4a68: 0141 addi sp,sp,16 - 4a6a: 8082 ret + 4aac: 0141 addi sp,sp,16 + 4aae: 8082 ret int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4a6c: 4108 lw a0,0(a0) - 4a6e: 01040593 addi a1,s0,16 - 4a72: e56fc0ef jal 10c8 + 4ab0: 4108 lw a0,0(a0) + 4ab2: 01040593 addi a1,s0,16 + 4ab6: e56fc0ef jal 110c if (ret < stream->buf_write_pos) - 4a76: 41042783 lw a5,1040(s0) - 4a7a: 00f54763 blt a0,a5,4a88 + 4aba: 41042783 lw a5,1040(s0) + 4abe: 00f54763 blt a0,a5,4acc stream->buf_write_pos = 0; - 4a7e: 40042823 sw zero,1040(s0) - 4a82: bf6d j 4a3c + 4ac2: 40042823 sw zero,1040(s0) + 4ac6: bf6d j 4a80 return -1; - 4a84: 557d li a0,-1 + 4ac8: 557d li a0,-1 } - 4a86: 8082 ret + 4aca: 8082 ret stream->error = 1; - 4a88: 4785 li a5,1 - 4a8a: c41c sw a5,8(s0) + 4acc: 4785 li a5,1 + 4ace: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 4a8c: 40042823 sw zero,1040(s0) + 4ad0: 40042823 sw zero,1040(s0) return EOF; - 4a90: b775 j 4a3c + 4ad4: b775 j 4a80 -0000000000004a92 : +0000000000004ad6 : if (!stream) - 4a92: c121 beqz a0,4ad2 + 4ad6: c121 beqz a0,4b16 if (stream->buf_write_pos > 0) - 4a94: 41052603 lw a2,1040(a0) + 4ad8: 41052603 lw a2,1040(a0) { - 4a98: 1141 addi sp,sp,-16 - 4a9a: e022 sd s0,0(sp) - 4a9c: e406 sd ra,8(sp) - 4a9e: 842a mv s0,a0 + 4adc: 1141 addi sp,sp,-16 + 4ade: e022 sd s0,0(sp) + 4ae0: e406 sd ra,8(sp) + 4ae2: 842a mv s0,a0 if (stream->buf_write_pos > 0) - 4aa0: 00c04763 bgtz a2,4aae + 4ae4: 00c04763 bgtz a2,4af2 return 0; - 4aa4: 4501 li a0,0 + 4ae8: 4501 li a0,0 } - 4aa6: 60a2 ld ra,8(sp) - 4aa8: 6402 ld s0,0(sp) - 4aaa: 0141 addi sp,sp,16 - 4aac: 8082 ret + 4aea: 60a2 ld ra,8(sp) + 4aec: 6402 ld s0,0(sp) + 4aee: 0141 addi sp,sp,16 + 4af0: 8082 ret int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4aae: 4108 lw a0,0(a0) - 4ab0: 01040593 addi a1,s0,16 - 4ab4: e14fc0ef jal 10c8 + 4af2: 4108 lw a0,0(a0) + 4af4: 01040593 addi a1,s0,16 + 4af8: e14fc0ef jal 110c if (ret < stream->buf_write_pos) - 4ab8: 41042783 lw a5,1040(s0) - 4abc: 00f54563 blt a0,a5,4ac6 + 4afc: 41042783 lw a5,1040(s0) + 4b00: 00f54563 blt a0,a5,4b0a stream->buf_write_pos = 0; - 4ac0: 40042823 sw zero,1040(s0) - 4ac4: b7c5 j 4aa4 + 4b04: 40042823 sw zero,1040(s0) + 4b08: b7c5 j 4ae8 stream->error = 1; - 4ac6: 4785 li a5,1 - 4ac8: c41c sw a5,8(s0) + 4b0a: 4785 li a5,1 + 4b0c: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 4aca: 40042823 sw zero,1040(s0) + 4b0e: 40042823 sw zero,1040(s0) return EOF; - 4ace: 557d li a0,-1 - 4ad0: bfd9 j 4aa6 - 4ad2: 557d li a0,-1 + 4b12: 557d li a0,-1 + 4b14: bfd9 j 4aea + 4b16: 557d li a0,-1 } - 4ad4: 8082 ret + 4b18: 8082 ret -0000000000004ad6 : +0000000000004b1a : { - 4ad6: 7159 addi sp,sp,-112 - 4ad8: fc06 sd ra,56(sp) - 4ada: e0b2 sd a2,64(sp) - 4adc: e4b6 sd a3,72(sp) - 4ade: e8ba sd a4,80(sp) - 4ae0: ecbe sd a5,88(sp) - 4ae2: f0c2 sd a6,96(sp) - 4ae4: f4c6 sd a7,104(sp) + 4b1a: 7159 addi sp,sp,-112 + 4b1c: fc06 sd ra,56(sp) + 4b1e: e0b2 sd a2,64(sp) + 4b20: e4b6 sd a3,72(sp) + 4b22: e8ba sd a4,80(sp) + 4b24: ecbe sd a5,88(sp) + 4b26: f0c2 sd a6,96(sp) + 4b28: f4c6 sd a7,104(sp) if (!stream) - 4ae6: cd19 beqz a0,4b04 + 4b2a: cd19 beqz a0,4b48 va_start(ap, format); - 4ae8: 832a mv t1,a0 - 4aea: 0090 addi a2,sp,64 + 4b2c: 832a mv t1,a0 + 4b2e: 0090 addi a2,sp,64 _vprintf_core(&ctx, format, ap); - 4aec: 0808 addi a0,sp,16 + 4b30: 0808 addi a0,sp,16 va_start(ap, format); - 4aee: e432 sd a2,8(sp) + 4b32: e432 sd a2,8(sp) ctx.buf = NULL; - 4af0: e802 sd zero,16(sp) + 4b34: e802 sd zero,16(sp) ctx.limit = 0; - 4af2: ec02 sd zero,24(sp) + 4b36: ec02 sd zero,24(sp) ctx.written = 0; - 4af4: f002 sd zero,32(sp) + 4b38: f002 sd zero,32(sp) ctx.stream = stream; - 4af6: f41a sd t1,40(sp) + 4b3a: f41a sd t1,40(sp) _vprintf_core(&ctx, format, ap); - 4af8: d34ff0ef jal 402c <_vprintf_core.constprop.0.isra.0> + 4b3c: d34ff0ef jal 4070 <_vprintf_core.constprop.0.isra.0> return (int)ctx.written; - 4afc: 5502 lw a0,32(sp) + 4b40: 5502 lw a0,32(sp) } - 4afe: 70e2 ld ra,56(sp) - 4b00: 6165 addi sp,sp,112 - 4b02: 8082 ret + 4b42: 70e2 ld ra,56(sp) + 4b44: 6165 addi sp,sp,112 + 4b46: 8082 ret return -1; - 4b04: 557d li a0,-1 - 4b06: bfe5 j 4afe + 4b48: 557d li a0,-1 + 4b4a: bfe5 j 4b42 -0000000000004b08 : +0000000000004b4c : { - 4b08: 7159 addi sp,sp,-112 - 4b0a: fc06 sd ra,56(sp) - 4b0c: e0b2 sd a2,64(sp) - 4b0e: e4b6 sd a3,72(sp) - 4b10: e8ba sd a4,80(sp) - 4b12: ecbe sd a5,88(sp) - 4b14: f0c2 sd a6,96(sp) - 4b16: f4c6 sd a7,104(sp) + 4b4c: 7159 addi sp,sp,-112 + 4b4e: fc06 sd ra,56(sp) + 4b50: e0b2 sd a2,64(sp) + 4b52: e4b6 sd a3,72(sp) + 4b54: e8ba sd a4,80(sp) + 4b56: ecbe sd a5,88(sp) + 4b58: f0c2 sd a6,96(sp) + 4b5a: f4c6 sd a7,104(sp) if (!stream) - 4b18: cd19 beqz a0,4b36 + 4b5c: cd19 beqz a0,4b7a ctx.fd = stream->fd; - 4b1a: 411c lw a5,0(a0) + 4b5e: 411c lw a5,0(a0) va_start(ap, format); - 4b1c: 0090 addi a2,sp,64 + 4b60: 0090 addi a2,sp,64 int ret = _vscanf_core(&ctx, format, ap); - 4b1e: 0808 addi a0,sp,16 + 4b62: 0808 addi a0,sp,16 ctx.fd = stream->fd; - 4b20: cc3e sw a5,24(sp) + 4b64: cc3e sw a5,24(sp) ctx.ungotten = -1; - 4b22: 57fd li a5,-1 + 4b66: 57fd li a5,-1 va_start(ap, format); - 4b24: e432 sd a2,8(sp) + 4b68: e432 sd a2,8(sp) ctx.buf = NULL; - 4b26: e802 sd zero,16(sp) + 4b6a: e802 sd zero,16(sp) ctx.pos = 0; - 4b28: f002 sd zero,32(sp) + 4b6c: f002 sd zero,32(sp) ctx.ungotten = -1; - 4b2a: d43e sw a5,40(sp) + 4b6e: d43e sw a5,40(sp) int ret = _vscanf_core(&ctx, format, ap); - 4b2c: e1dfc0ef jal 1948 <_vscanf_core.constprop.0> + 4b70: e1dfc0ef jal 198c <_vscanf_core.constprop.0> } - 4b30: 70e2 ld ra,56(sp) - 4b32: 6165 addi sp,sp,112 - 4b34: 8082 ret + 4b74: 70e2 ld ra,56(sp) + 4b76: 6165 addi sp,sp,112 + 4b78: 8082 ret return -1; - 4b36: 557d li a0,-1 - 4b38: bfe5 j 4b30 + 4b7a: 557d li a0,-1 + 4b7c: bfe5 j 4b74 -0000000000004b3a : +0000000000004b7e : if (!stream) - 4b3a: c1e1 beqz a1,4bfa + 4b7e: c1e1 beqz a1,4c3e { - 4b3c: 7179 addi sp,sp,-48 - 4b3e: e84a sd s2,16(sp) + 4b80: 7179 addi sp,sp,-48 + 4b82: e84a sd s2,16(sp) if (stream->buf_mode == 2) - 4b40: 41c5a903 lw s2,1052(a1) + 4b84: 41c5a903 lw s2,1052(a1) { - 4b44: f022 sd s0,32(sp) - 4b46: ec26 sd s1,24(sp) - 4b48: f406 sd ra,40(sp) + 4b88: f022 sd s0,32(sp) + 4b8a: ec26 sd s1,24(sp) + 4b8c: f406 sd ra,40(sp) if (stream->buf_mode == 2) - 4b4a: 4789 li a5,2 - 4b4c: 842e mv s0,a1 - 4b4e: 84aa mv s1,a0 + 4b8e: 4789 li a5,2 + 4b90: 842e mv s0,a1 + 4b92: 84aa mv s1,a0 char ch = (char)c; - 4b50: 0ff57713 zext.b a4,a0 + 4b94: 0ff57713 zext.b a4,a0 if (stream->buf_mode == 2) - 4b54: 02f90963 beq s2,a5,4b86 + 4b98: 02f90963 beq s2,a5,4bca stream->buffer[stream->buf_write_pos++] = (char)c; - 4b58: 4105a783 lw a5,1040(a1) + 4b9c: 4105a783 lw a5,1040(a1) if (stream->buf_write_pos >= BUFSIZ) - 4b5c: 3ff00693 li a3,1023 + 4ba0: 3ff00693 li a3,1023 stream->buffer[stream->buf_write_pos++] = (char)c; - 4b60: 0017861b addiw a2,a5,1 - 4b64: 40c5a823 sw a2,1040(a1) - 4b68: 97ae add a5,a5,a1 - 4b6a: 00e78823 sb a4,16(a5) + 4ba4: 0017861b addiw a2,a5,1 + 4ba8: 40c5a823 sw a2,1040(a1) + 4bac: 97ae add a5,a5,a1 + 4bae: 00e78823 sb a4,16(a5) if (stream->buf_write_pos >= BUFSIZ) - 4b6e: 06c6c463 blt a3,a2,4bd6 + 4bb2: 06c6c463 blt a3,a2,4c1a else if (stream->buf_mode == 1 && c == '\n') - 4b72: 4785 li a5,1 - 4b74: 02f90e63 beq s2,a5,4bb0 + 4bb6: 4785 li a5,1 + 4bb8: 02f90e63 beq s2,a5,4bf4 return c; - 4b78: 8526 mv a0,s1 -} - 4b7a: 70a2 ld ra,40(sp) - 4b7c: 7402 ld s0,32(sp) - 4b7e: 64e2 ld s1,24(sp) - 4b80: 6942 ld s2,16(sp) - 4b82: 6145 addi sp,sp,48 - 4b84: 8082 ret + 4bbc: 8526 mv a0,s1 +} + 4bbe: 70a2 ld ra,40(sp) + 4bc0: 7402 ld s0,32(sp) + 4bc2: 64e2 ld s1,24(sp) + 4bc4: 6942 ld s2,16(sp) + 4bc6: 6145 addi sp,sp,48 + 4bc8: 8082 ret if (write(stream->fd, &ch, 1) != 1) - 4b86: 4188 lw a0,0(a1) - 4b88: 4605 li a2,1 - 4b8a: 00f10593 addi a1,sp,15 + 4bca: 4188 lw a0,0(a1) + 4bcc: 4605 li a2,1 + 4bce: 00f10593 addi a1,sp,15 char ch = (char)c; - 4b8e: 00e107a3 sb a4,15(sp) + 4bd2: 00e107a3 sb a4,15(sp) if (write(stream->fd, &ch, 1) != 1) - 4b92: d36fc0ef jal 10c8 - 4b96: 872a mv a4,a0 - 4b98: 4785 li a5,1 + 4bd6: d36fc0ef jal 110c + 4bda: 872a mv a4,a0 + 4bdc: 4785 li a5,1 return c; - 4b9a: 8526 mv a0,s1 + 4bde: 8526 mv a0,s1 if (write(stream->fd, &ch, 1) != 1) - 4b9c: fcf70fe3 beq a4,a5,4b7a + 4be0: fcf70fe3 beq a4,a5,4bbe } - 4ba0: 70a2 ld ra,40(sp) + 4be4: 70a2 ld ra,40(sp) stream->error = 1; - 4ba2: c41c sw a5,8(s0) + 4be6: c41c sw a5,8(s0) } - 4ba4: 7402 ld s0,32(sp) - 4ba6: 64e2 ld s1,24(sp) - 4ba8: 6942 ld s2,16(sp) + 4be8: 7402 ld s0,32(sp) + 4bea: 64e2 ld s1,24(sp) + 4bec: 6942 ld s2,16(sp) return EOF; - 4baa: 557d li a0,-1 + 4bee: 557d li a0,-1 } - 4bac: 6145 addi sp,sp,48 - 4bae: 8082 ret + 4bf0: 6145 addi sp,sp,48 + 4bf2: 8082 ret else if (stream->buf_mode == 1 && c == '\n') - 4bb0: 47a9 li a5,10 - 4bb2: fcf513e3 bne a0,a5,4b78 + 4bf4: 47a9 li a5,10 + 4bf6: fcf513e3 bne a0,a5,4bbc if (stream->buf_write_pos > 0) - 4bb6: fcc051e3 blez a2,4b78 + 4bfa: fcc051e3 blez a2,4bbc int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4bba: 4188 lw a0,0(a1) - 4bbc: 05c1 addi a1,a1,16 - 4bbe: d0afc0ef jal 10c8 + 4bfe: 4188 lw a0,0(a1) + 4c00: 05c1 addi a1,a1,16 + 4c02: d0afc0ef jal 110c if (ret < stream->buf_write_pos) - 4bc2: 41042783 lw a5,1040(s0) - 4bc6: 02f55063 bge a0,a5,4be6 + 4c06: 41042783 lw a5,1040(s0) + 4c0a: 02f55063 bge a0,a5,4c2a stream->error = 1; - 4bca: 01242423 sw s2,8(s0) + 4c0e: 01242423 sw s2,8(s0) stream->buf_write_pos = 0; - 4bce: 40042823 sw zero,1040(s0) + 4c12: 40042823 sw zero,1040(s0) return c; - 4bd2: 8526 mv a0,s1 - 4bd4: b75d j 4b7a + 4c16: 8526 mv a0,s1 + 4c18: b75d j 4bbe int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4bd6: 4188 lw a0,0(a1) - 4bd8: 05c1 addi a1,a1,16 - 4bda: ceefc0ef jal 10c8 + 4c1a: 4188 lw a0,0(a1) + 4c1c: 05c1 addi a1,a1,16 + 4c1e: ceefc0ef jal 110c if (ret < stream->buf_write_pos) - 4bde: 41042783 lw a5,1040(s0) - 4be2: 00f54663 blt a0,a5,4bee + 4c22: 41042783 lw a5,1040(s0) + 4c26: 00f54663 blt a0,a5,4c32 stream->buf_write_pos = 0; - 4be6: 40042823 sw zero,1040(s0) + 4c2a: 40042823 sw zero,1040(s0) return c; - 4bea: 8526 mv a0,s1 - 4bec: b779 j 4b7a + 4c2e: 8526 mv a0,s1 + 4c30: b779 j 4bbe stream->error = 1; - 4bee: 4785 li a5,1 - 4bf0: c41c sw a5,8(s0) + 4c32: 4785 li a5,1 + 4c34: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 4bf2: 40042823 sw zero,1040(s0) + 4c36: 40042823 sw zero,1040(s0) return c; - 4bf6: 8526 mv a0,s1 - 4bf8: b749 j 4b7a + 4c3a: 8526 mv a0,s1 + 4c3c: b749 j 4bbe return EOF; - 4bfa: 557d li a0,-1 + 4c3e: 557d li a0,-1 } - 4bfc: 8082 ret + 4c40: 8082 ret -0000000000004bfe : +0000000000004c42 : if (!stream) - 4bfe: c1ed beqz a1,4ce0 + 4c42: c1ed beqz a1,4d24 { - 4c00: 711d addi sp,sp,-96 - 4c02: e4a6 sd s1,72(sp) - 4c04: ec86 sd ra,88(sp) + 4c44: 711d addi sp,sp,-96 + 4c46: e4a6 sd s1,72(sp) + 4c48: ec86 sd ra,88(sp) while (*s) - 4c06: 00054703 lbu a4,0(a0) - 4c0a: 84aa mv s1,a0 - 4c0c: cf25 beqz a4,4c84 - 4c0e: e8a2 sd s0,80(sp) - 4c10: e0ca sd s2,64(sp) - 4c12: fc4e sd s3,56(sp) - 4c14: f852 sd s4,48(sp) - 4c16: f456 sd s5,40(sp) - 4c18: f05a sd s6,32(sp) - 4c1a: ec5e sd s7,24(sp) - 4c1c: 842e mv s0,a1 + 4c4a: 00054703 lbu a4,0(a0) + 4c4e: 84aa mv s1,a0 + 4c50: cf25 beqz a4,4cc8 + 4c52: e8a2 sd s0,80(sp) + 4c54: e0ca sd s2,64(sp) + 4c56: fc4e sd s3,56(sp) + 4c58: f852 sd s4,48(sp) + 4c5a: f456 sd s5,40(sp) + 4c5c: f05a sd s6,32(sp) + 4c5e: ec5e sd s7,24(sp) + 4c60: 842e mv s0,a1 if (stream->buf_mode == 2) - 4c1e: 4909 li s2,2 + 4c62: 4909 li s2,2 if (stream->buf_write_pos >= BUFSIZ) - 4c20: 3ff00b13 li s6,1023 + 4c64: 3ff00b13 li s6,1023 else if (stream->buf_mode == 1 && c == '\n') - 4c24: 4985 li s3,1 - 4c26: 4a29 li s4,10 + 4c68: 4985 li s3,1 + 4c6a: 4a29 li s4,10 int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4c28: 01058a93 addi s5,a1,16 + 4c6c: 01058a93 addi s5,a1,16 if (write(stream->fd, &ch, 1) != 1) - 4c2c: 00f10b93 addi s7,sp,15 - 4c30: a031 j 4c3c + 4c70: 00f10b93 addi s7,sp,15 + 4c74: a031 j 4c80 else if (stream->buf_mode == 1 && c == '\n') - 4c32: 09368563 beq a3,s3,4cbc + 4c76: 09368563 beq a3,s3,4d00 while (*s) - 4c36: 0004c703 lbu a4,0(s1) - 4c3a: cf15 beqz a4,4c76 + 4c7a: 0004c703 lbu a4,0(s1) + 4c7e: cf15 beqz a4,4cba if (stream->buf_mode == 2) - 4c3c: 41c42683 lw a3,1052(s0) + 4c80: 41c42683 lw a3,1052(s0) if (fputc(*s++, stream) == EOF) - 4c40: 0485 addi s1,s1,1 + 4c84: 0485 addi s1,s1,1 if (stream->buf_mode == 2) - 4c42: 05268663 beq a3,s2,4c8e + 4c86: 05268663 beq a3,s2,4cd2 stream->buffer[stream->buf_write_pos++] = (char)c; - 4c46: 41042783 lw a5,1040(s0) - 4c4a: 0017861b addiw a2,a5,1 - 4c4e: 40c42823 sw a2,1040(s0) - 4c52: 97a2 add a5,a5,s0 - 4c54: 00e78823 sb a4,16(a5) + 4c8a: 41042783 lw a5,1040(s0) + 4c8e: 0017861b addiw a2,a5,1 + 4c92: 40c42823 sw a2,1040(s0) + 4c96: 97a2 add a5,a5,s0 + 4c98: 00e78823 sb a4,16(a5) if (stream->buf_write_pos >= BUFSIZ) - 4c58: fccb5de3 bge s6,a2,4c32 + 4c9c: fccb5de3 bge s6,a2,4c76 int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4c5c: 4008 lw a0,0(s0) - 4c5e: 85d6 mv a1,s5 - 4c60: c68fc0ef jal 10c8 + 4ca0: 4008 lw a0,0(s0) + 4ca2: 85d6 mv a1,s5 + 4ca4: c68fc0ef jal 110c if (ret < stream->buf_write_pos) - 4c64: 41042783 lw a5,1040(s0) - 4c68: 06f54763 blt a0,a5,4cd6 + 4ca8: 41042783 lw a5,1040(s0) + 4cac: 06f54763 blt a0,a5,4d1a stream->buf_write_pos = 0; - 4c6c: 40042823 sw zero,1040(s0) + 4cb0: 40042823 sw zero,1040(s0) while (*s) - 4c70: 0004c703 lbu a4,0(s1) - 4c74: f761 bnez a4,4c3c - 4c76: 6446 ld s0,80(sp) - 4c78: 6906 ld s2,64(sp) - 4c7a: 79e2 ld s3,56(sp) - 4c7c: 7a42 ld s4,48(sp) - 4c7e: 7aa2 ld s5,40(sp) - 4c80: 7b02 ld s6,32(sp) - 4c82: 6be2 ld s7,24(sp) -} - 4c84: 60e6 ld ra,88(sp) - 4c86: 64a6 ld s1,72(sp) + 4cb4: 0004c703 lbu a4,0(s1) + 4cb8: f761 bnez a4,4c80 + 4cba: 6446 ld s0,80(sp) + 4cbc: 6906 ld s2,64(sp) + 4cbe: 79e2 ld s3,56(sp) + 4cc0: 7a42 ld s4,48(sp) + 4cc2: 7aa2 ld s5,40(sp) + 4cc4: 7b02 ld s6,32(sp) + 4cc6: 6be2 ld s7,24(sp) +} + 4cc8: 60e6 ld ra,88(sp) + 4cca: 64a6 ld s1,72(sp) return 0; - 4c88: 4501 li a0,0 + 4ccc: 4501 li a0,0 } - 4c8a: 6125 addi sp,sp,96 - 4c8c: 8082 ret + 4cce: 6125 addi sp,sp,96 + 4cd0: 8082 ret if (write(stream->fd, &ch, 1) != 1) - 4c8e: 4008 lw a0,0(s0) - 4c90: 4605 li a2,1 - 4c92: 85de mv a1,s7 + 4cd2: 4008 lw a0,0(s0) + 4cd4: 4605 li a2,1 + 4cd6: 85de mv a1,s7 char ch = (char)c; - 4c94: 00e107a3 sb a4,15(sp) + 4cd8: 00e107a3 sb a4,15(sp) if (write(stream->fd, &ch, 1) != 1) - 4c98: c30fc0ef jal 10c8 - 4c9c: f9350de3 beq a0,s3,4c36 + 4cdc: c30fc0ef jal 110c + 4ce0: f9350de3 beq a0,s3,4c7a stream->error = 1; - 4ca0: 01342423 sw s3,8(s0) -} - 4ca4: 60e6 ld ra,88(sp) - 4ca6: 6446 ld s0,80(sp) - 4ca8: 6906 ld s2,64(sp) - 4caa: 79e2 ld s3,56(sp) - 4cac: 7a42 ld s4,48(sp) - 4cae: 7aa2 ld s5,40(sp) - 4cb0: 7b02 ld s6,32(sp) - 4cb2: 6be2 ld s7,24(sp) - 4cb4: 64a6 ld s1,72(sp) + 4ce4: 01342423 sw s3,8(s0) +} + 4ce8: 60e6 ld ra,88(sp) + 4cea: 6446 ld s0,80(sp) + 4cec: 6906 ld s2,64(sp) + 4cee: 79e2 ld s3,56(sp) + 4cf0: 7a42 ld s4,48(sp) + 4cf2: 7aa2 ld s5,40(sp) + 4cf4: 7b02 ld s6,32(sp) + 4cf6: 6be2 ld s7,24(sp) + 4cf8: 64a6 ld s1,72(sp) return -1; - 4cb6: 557d li a0,-1 + 4cfa: 557d li a0,-1 } - 4cb8: 6125 addi sp,sp,96 - 4cba: 8082 ret + 4cfc: 6125 addi sp,sp,96 + 4cfe: 8082 ret else if (stream->buf_mode == 1 && c == '\n') - 4cbc: f7471de3 bne a4,s4,4c36 + 4d00: f7471de3 bne a4,s4,4c7a if (stream->buf_write_pos > 0) - 4cc0: f6c05be3 blez a2,4c36 + 4d04: f6c05be3 blez a2,4c7a int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4cc4: 4008 lw a0,0(s0) - 4cc6: 01040593 addi a1,s0,16 - 4cca: bfefc0ef jal 10c8 + 4d08: 4008 lw a0,0(s0) + 4d0a: 01040593 addi a1,s0,16 + 4d0e: bfefc0ef jal 110c if (ret < stream->buf_write_pos) - 4cce: 41042783 lw a5,1040(s0) - 4cd2: f8f55de3 bge a0,a5,4c6c + 4d12: 41042783 lw a5,1040(s0) + 4d16: f8f55de3 bge a0,a5,4cb0 stream->error = 1; - 4cd6: 4785 li a5,1 - 4cd8: c41c sw a5,8(s0) + 4d1a: 4785 li a5,1 + 4d1c: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 4cda: 40042823 sw zero,1040(s0) + 4d1e: 40042823 sw zero,1040(s0) return EOF; - 4cde: bfa1 j 4c36 + 4d22: bfa1 j 4c7a return -1; - 4ce0: 557d li a0,-1 + 4d24: 557d li a0,-1 } - 4ce2: 8082 ret + 4d26: 8082 ret -0000000000004ce4 : +0000000000004d28 : if (!stream) - 4ce4: c949 beqz a0,4d76 + 4d28: c949 beqz a0,4dba if (stream->buf_write_pos > 0) - 4ce6: 41052603 lw a2,1040(a0) + 4d2a: 41052603 lw a2,1040(a0) { - 4cea: 1141 addi sp,sp,-16 - 4cec: e022 sd s0,0(sp) - 4cee: e406 sd ra,8(sp) - 4cf0: 842a mv s0,a0 + 4d2e: 1141 addi sp,sp,-16 + 4d30: e022 sd s0,0(sp) + 4d32: e406 sd ra,8(sp) + 4d34: 842a mv s0,a0 if (stream->buf_write_pos > 0) - 4cf2: 04c04863 bgtz a2,4d42 + 4d36: 04c04863 bgtz a2,4d86 if (stream->buf_read_pos < stream->buf_read_cnt) - 4cf6: 41442783 lw a5,1044(s0) - 4cfa: 41842703 lw a4,1048(s0) - 4cfe: 00e7dd63 bge a5,a4,4d18 + 4d3a: 41442783 lw a5,1044(s0) + 4d3e: 41842703 lw a4,1048(s0) + 4d42: 00e7dd63 bge a5,a4,4d5c return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4d02: 0017871b addiw a4,a5,1 - 4d06: 40e42a23 sw a4,1044(s0) - 4d0a: 943e add s0,s0,a5 - 4d0c: 01044503 lbu a0,16(s0) -} - 4d10: 60a2 ld ra,8(sp) - 4d12: 6402 ld s0,0(sp) - 4d14: 0141 addi sp,sp,16 - 4d16: 8082 ret + 4d46: 0017871b addiw a4,a5,1 + 4d4a: 40e42a23 sw a4,1044(s0) + 4d4e: 943e add s0,s0,a5 + 4d50: 01044503 lbu a0,16(s0) +} + 4d54: 60a2 ld ra,8(sp) + 4d56: 6402 ld s0,0(sp) + 4d58: 0141 addi sp,sp,16 + 4d5a: 8082 ret int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4d18: 4008 lw a0,0(s0) - 4d1a: 40000613 li a2,1024 - 4d1e: 01040593 addi a1,s0,16 - 4d22: b9efc0ef jal 10c0 - 4d26: 87aa mv a5,a0 + 4d5c: 4008 lw a0,0(s0) + 4d5e: 40000613 li a2,1024 + 4d62: 01040593 addi a1,s0,16 + 4d66: b9efc0ef jal 1104 + 4d6a: 87aa mv a5,a0 if (ret <= 0) - 4d28: 02a05e63 blez a0,4d64 + 4d6c: 02a05e63 blez a0,4da8 stream->buf_read_cnt = (int)ret; - 4d2c: 40f42c23 sw a5,1048(s0) + 4d70: 40f42c23 sw a5,1048(s0) return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4d30: 4785 li a5,1 - 4d32: 01044503 lbu a0,16(s0) + 4d74: 4785 li a5,1 + 4d76: 01044503 lbu a0,16(s0) } - 4d36: 60a2 ld ra,8(sp) + 4d7a: 60a2 ld ra,8(sp) return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4d38: 40f42a23 sw a5,1044(s0) + 4d7c: 40f42a23 sw a5,1044(s0) } - 4d3c: 6402 ld s0,0(sp) - 4d3e: 0141 addi sp,sp,16 - 4d40: 8082 ret + 4d80: 6402 ld s0,0(sp) + 4d82: 0141 addi sp,sp,16 + 4d84: 8082 ret int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4d42: 4108 lw a0,0(a0) - 4d44: 01040593 addi a1,s0,16 - 4d48: b80fc0ef jal 10c8 + 4d86: 4108 lw a0,0(a0) + 4d88: 01040593 addi a1,s0,16 + 4d8c: b80fc0ef jal 110c if (ret < stream->buf_write_pos) - 4d4c: 41042783 lw a5,1040(s0) - 4d50: 00f54563 blt a0,a5,4d5a + 4d90: 41042783 lw a5,1040(s0) + 4d94: 00f54563 blt a0,a5,4d9e stream->buf_write_pos = 0; - 4d54: 40042823 sw zero,1040(s0) - 4d58: bf79 j 4cf6 + 4d98: 40042823 sw zero,1040(s0) + 4d9c: bf79 j 4d3a stream->error = 1; - 4d5a: 4785 li a5,1 - 4d5c: c41c sw a5,8(s0) + 4d9e: 4785 li a5,1 + 4da0: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 4d5e: 40042823 sw zero,1040(s0) + 4da2: 40042823 sw zero,1040(s0) return EOF; - 4d62: bf51 j 4cf6 + 4da6: bf51 j 4d3a if (ret == 0) - 4d64: e509 bnez a0,4d6e + 4da8: e509 bnez a0,4db2 stream->eof = 1; - 4d66: 4785 li a5,1 - 4d68: c45c sw a5,12(s0) + 4daa: 4785 li a5,1 + 4dac: c45c sw a5,12(s0) return EOF; - 4d6a: 557d li a0,-1 - 4d6c: b755 j 4d10 + 4dae: 557d li a0,-1 + 4db0: b755 j 4d54 stream->error = 1; - 4d6e: 4785 li a5,1 - 4d70: c41c sw a5,8(s0) + 4db2: 4785 li a5,1 + 4db4: c41c sw a5,8(s0) return EOF; - 4d72: 557d li a0,-1 - 4d74: bf71 j 4d10 - 4d76: 557d li a0,-1 + 4db6: 557d li a0,-1 + 4db8: bf71 j 4d54 + 4dba: 557d li a0,-1 } - 4d78: 8082 ret + 4dbc: 8082 ret -0000000000004d7a : +0000000000004dbe : if (!stream || n <= 0) - 4d7a: ce5d beqz a2,4e38 - 4d7c: 0ab05e63 blez a1,4e38 + 4dbe: ce5d beqz a2,4e7c + 4dc0: 0ab05e63 blez a1,4e7c { - 4d80: 715d addi sp,sp,-80 - 4d82: e0a2 sd s0,64(sp) - 4d84: fc26 sd s1,56(sp) - 4d86: f84a sd s2,48(sp) - 4d88: f44e sd s3,40(sp) - 4d8a: f052 sd s4,32(sp) - 4d8c: ec56 sd s5,24(sp) - 4d8e: e85a sd s6,16(sp) - 4d90: e45e sd s7,8(sp) - 4d92: e486 sd ra,72(sp) - 4d94: 8432 mv s0,a2 - 4d96: 8aaa mv s5,a0 - 4d98: 892a mv s2,a0 - 4d9a: fff58b9b addiw s7,a1,-1 + 4dc4: 715d addi sp,sp,-80 + 4dc6: e0a2 sd s0,64(sp) + 4dc8: fc26 sd s1,56(sp) + 4dca: f84a sd s2,48(sp) + 4dcc: f44e sd s3,40(sp) + 4dce: f052 sd s4,32(sp) + 4dd0: ec56 sd s5,24(sp) + 4dd2: e85a sd s6,16(sp) + 4dd4: e45e sd s7,8(sp) + 4dd6: e486 sd ra,72(sp) + 4dd8: 8432 mv s0,a2 + 4dda: 8aaa mv s5,a0 + 4ddc: 892a mv s2,a0 + 4dde: fff58b9b addiw s7,a1,-1 int i = 0, c; - 4d9e: 4481 li s1,0 + 4de2: 4481 li s1,0 int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4da0: 01060993 addi s3,a2,16 + 4de4: 01060993 addi s3,a2,16 return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4da4: 4b05 li s6,1 + 4de8: 4b05 li s6,1 if (c == '\n') - 4da6: 4a29 li s4,10 + 4dea: 4a29 li s4,10 while (i < n - 1) - 4da8: 05748163 beq s1,s7,4dea + 4dec: 05748163 beq s1,s7,4e2e if (stream->buf_write_pos > 0) - 4dac: 41042603 lw a2,1040(s0) + 4df0: 41042603 lw a2,1040(s0) int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4db0: 85ce mv a1,s3 + 4df4: 85ce mv a1,s3 if (stream->buf_write_pos > 0) - 4db2: 06c04963 bgtz a2,4e24 + 4df6: 06c04963 bgtz a2,4e68 if (stream->buf_read_pos < stream->buf_read_cnt) - 4db6: 41442783 lw a5,1044(s0) - 4dba: 41842703 lw a4,1048(s0) + 4dfa: 41442783 lw a5,1044(s0) + 4dfe: 41842703 lw a4,1048(s0) int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4dbe: 40000613 li a2,1024 + 4e02: 40000613 li a2,1024 return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4dc2: 0017851b addiw a0,a5,1 - 4dc6: 00f406b3 add a3,s0,a5 + 4e06: 0017851b addiw a0,a5,1 + 4e0a: 00f406b3 add a3,s0,a5 int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4dca: 85ce mv a1,s3 + 4e0e: 85ce mv a1,s3 if (stream->buf_read_pos < stream->buf_read_cnt) - 4dcc: 02e7de63 bge a5,a4,4e08 + 4e10: 02e7de63 bge a5,a4,4e4c return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4dd0: 40a42a23 sw a0,1044(s0) - 4dd4: 0106c783 lbu a5,16(a3) - 4dd8: 0007871b sext.w a4,a5 + 4e14: 40a42a23 sw a0,1044(s0) + 4e18: 0106c783 lbu a5,16(a3) + 4e1c: 0007871b sext.w a4,a5 str[i++] = (char)c; - 4ddc: 00f90023 sb a5,0(s2) - 4de0: 2485 addiw s1,s1,1 + 4e20: 00f90023 sb a5,0(s2) + 4e24: 2485 addiw s1,s1,1 if (c == '\n') - 4de2: 0905 addi s2,s2,1 - 4de4: fd4712e3 bne a4,s4,4da8 + 4e26: 0905 addi s2,s2,1 + 4e28: fd4712e3 bne a4,s4,4dec str[i++] = (char)c; - 4de8: 8ba6 mv s7,s1 + 4e2c: 8ba6 mv s7,s1 str[i] = '\0'; - 4dea: 9bd6 add s7,s7,s5 - 4dec: 000b8023 sb zero,0(s7) + 4e2e: 9bd6 add s7,s7,s5 + 4e30: 000b8023 sb zero,0(s7) return str; - 4df0: 8556 mv a0,s5 -} - 4df2: 60a6 ld ra,72(sp) - 4df4: 6406 ld s0,64(sp) - 4df6: 74e2 ld s1,56(sp) - 4df8: 7942 ld s2,48(sp) - 4dfa: 79a2 ld s3,40(sp) - 4dfc: 7a02 ld s4,32(sp) - 4dfe: 6ae2 ld s5,24(sp) - 4e00: 6b42 ld s6,16(sp) - 4e02: 6ba2 ld s7,8(sp) - 4e04: 6161 addi sp,sp,80 - 4e06: 8082 ret + 4e34: 8556 mv a0,s5 +} + 4e36: 60a6 ld ra,72(sp) + 4e38: 6406 ld s0,64(sp) + 4e3a: 74e2 ld s1,56(sp) + 4e3c: 7942 ld s2,48(sp) + 4e3e: 79a2 ld s3,40(sp) + 4e40: 7a02 ld s4,32(sp) + 4e42: 6ae2 ld s5,24(sp) + 4e44: 6b42 ld s6,16(sp) + 4e46: 6ba2 ld s7,8(sp) + 4e48: 6161 addi sp,sp,80 + 4e4a: 8082 ret int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4e08: 4008 lw a0,0(s0) - 4e0a: ab6fc0ef jal 10c0 + 4e4c: 4008 lw a0,0(s0) + 4e4e: ab6fc0ef jal 1104 if (ret <= 0) - 4e0e: 02a05c63 blez a0,4e46 + 4e52: 02a05c63 blez a0,4e8a return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4e12: 01044783 lbu a5,16(s0) + 4e56: 01044783 lbu a5,16(s0) stream->buf_read_cnt = (int)ret; - 4e16: 40a42c23 sw a0,1048(s0) + 4e5a: 40a42c23 sw a0,1048(s0) return (unsigned char)stream->buffer[stream->buf_read_pos++]; - 4e1a: 41642a23 sw s6,1044(s0) - 4e1e: 0007871b sext.w a4,a5 + 4e5e: 41642a23 sw s6,1044(s0) + 4e62: 0007871b sext.w a4,a5 if (c == -1) - 4e22: bf6d j 4ddc + 4e66: bf6d j 4e20 int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4e24: 4008 lw a0,0(s0) - 4e26: aa2fc0ef jal 10c8 + 4e68: 4008 lw a0,0(s0) + 4e6a: aa2fc0ef jal 110c if (ret < stream->buf_write_pos) - 4e2a: 41042783 lw a5,1040(s0) - 4e2e: 00f54763 blt a0,a5,4e3c + 4e6e: 41042783 lw a5,1040(s0) + 4e72: 00f54763 blt a0,a5,4e80 stream->buf_write_pos = 0; - 4e32: 40042823 sw zero,1040(s0) - 4e36: b741 j 4db6 + 4e76: 40042823 sw zero,1040(s0) + 4e7a: b741 j 4dfa return NULL; - 4e38: 4501 li a0,0 + 4e7c: 4501 li a0,0 } - 4e3a: 8082 ret + 4e7e: 8082 ret stream->error = 1; - 4e3c: 4785 li a5,1 - 4e3e: c41c sw a5,8(s0) + 4e80: 4785 li a5,1 + 4e82: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 4e40: 40042823 sw zero,1040(s0) + 4e84: 40042823 sw zero,1040(s0) return EOF; - 4e44: bf8d j 4db6 + 4e88: bf8d j 4dfa stream->eof = 1; - 4e46: 4785 li a5,1 + 4e8a: 4785 li a5,1 if (ret == 0) - 4e48: e509 bnez a0,4e52 + 4e8c: e509 bnez a0,4e96 stream->eof = 1; - 4e4a: c45c sw a5,12(s0) + 4e8e: c45c sw a5,12(s0) if (i == 0) - 4e4c: fcd1 bnez s1,4de8 + 4e90: fcd1 bnez s1,4e2c return NULL; - 4e4e: 4501 li a0,0 - 4e50: b74d j 4df2 + 4e92: 4501 li a0,0 + 4e94: b74d j 4e36 stream->error = 1; - 4e52: c41c sw a5,8(s0) + 4e96: c41c sw a5,8(s0) if (c == -1) - 4e54: bfe5 j 4e4c + 4e98: bfe5 j 4e90 -0000000000004e56 : +0000000000004e9a : { - 4e56: 715d addi sp,sp,-80 - 4e58: e486 sd ra,72(sp) - 4e5a: f44e sd s3,40(sp) + 4e9a: 715d addi sp,sp,-80 + 4e9c: e486 sd ra,72(sp) + 4e9e: f44e sd s3,40(sp) if (!stream || size == 0 || nmemb == 0) - 4e5c: 0e068963 beqz a3,4f4e - 4e60: ec56 sd s5,24(sp) + 4ea0: 0e068963 beqz a3,4f92 + 4ea4: ec56 sd s5,24(sp) return 0; - 4e62: 4981 li s3,0 - 4e64: 8aae mv s5,a1 + 4ea6: 4981 li s3,0 + 4ea8: 8aae mv s5,a1 if (!stream || size == 0 || nmemb == 0) - 4e66: c9bd beqz a1,4edc - 4e68: ca35 beqz a2,4edc + 4eaa: c9bd beqz a1,4f20 + 4eac: ca35 beqz a2,4f20 if (stream->buf_write_pos > 0) - 4e6a: 4106a783 lw a5,1040(a3) - 4e6e: e0a2 sd s0,64(sp) - 4e70: f052 sd s4,32(sp) + 4eae: 4106a783 lw a5,1040(a3) + 4eb2: e0a2 sd s0,64(sp) + 4eb4: f052 sd s4,32(sp) uint64 total_bytes = size * nmemb; - 4e72: 02c589b3 mul s3,a1,a2 - 4e76: 8436 mv s0,a3 - 4e78: 8a2a mv s4,a0 + 4eb6: 02c589b3 mul s3,a1,a2 + 4eba: 8436 mv s0,a3 + 4ebc: 8a2a mv s4,a0 if (stream->buf_write_pos > 0) - 4e7a: 0af04d63 bgtz a5,4f34 + 4ebe: 0af04d63 bgtz a5,4f78 while (bytes_read < total_bytes) - 4e7e: 04098d63 beqz s3,4ed8 - 4e82: fc26 sd s1,56(sp) - 4e84: e85a sd s6,16(sp) - 4e86: e45e sd s7,8(sp) - 4e88: f84a sd s2,48(sp) - 4e8a: 4481 li s1,0 + 4ec2: 04098d63 beqz s3,4f1c + 4ec6: fc26 sd s1,56(sp) + 4ec8: e85a sd s6,16(sp) + 4eca: e45e sd s7,8(sp) + 4ecc: f84a sd s2,48(sp) + 4ece: 4481 li s1,0 if (remaining >= BUFSIZ) - 4e8c: 3ff00b13 li s6,1023 + 4ed0: 3ff00b13 li s6,1023 int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4e90: 01040b93 addi s7,s0,16 + 4ed4: 01040b93 addi s7,s0,16 if (stream->buf_read_pos < stream->buf_read_cnt) - 4e94: 41442703 lw a4,1044(s0) - 4e98: 41842783 lw a5,1048(s0) + 4ed8: 41442703 lw a4,1044(s0) + 4edc: 41842783 lw a5,1048(s0) uint64 remaining = total_bytes - bytes_read; - 4e9c: 40998633 sub a2,s3,s1 + 4ee0: 40998633 sub a2,s3,s1 if (stream->buf_read_pos < stream->buf_read_cnt) - 4ea0: 06f74463 blt a4,a5,4f08 + 4ee4: 06f74463 blt a4,a5,4f4c int64 ret = read(stream->fd, dst + bytes_read, remaining); - 4ea4: 4008 lw a0,0(s0) - 4ea6: 009a05b3 add a1,s4,s1 + 4ee8: 4008 lw a0,0(s0) + 4eea: 009a05b3 add a1,s4,s1 if (remaining >= BUFSIZ) - 4eaa: 02cb7f63 bgeu s6,a2,4ee8 + 4eee: 02cb7f63 bgeu s6,a2,4f2c int64 ret = read(stream->fd, dst + bytes_read, remaining); - 4eae: a12fc0ef jal 10c0 + 4ef2: a12fc0ef jal 1104 if (ret <= 0) - 4eb2: 0aa05463 blez a0,4f5a + 4ef6: 0aa05463 blez a0,4f9e bytes_read += ret; - 4eb6: 94aa add s1,s1,a0 + 4efa: 94aa add s1,s1,a0 while (bytes_read < total_bytes) - 4eb8: fd34eee3 bltu s1,s3,4e94 + 4efc: fd34eee3 bltu s1,s3,4ed8 return bytes_read / size; - 4ebc: 0354d9b3 divu s3,s1,s5 - 4ec0: 6406 ld s0,64(sp) + 4f00: 0354d9b3 divu s3,s1,s5 + 4f04: 6406 ld s0,64(sp) } - 4ec2: 60a6 ld ra,72(sp) + 4f06: 60a6 ld ra,72(sp) return bytes_read / size; - 4ec4: 74e2 ld s1,56(sp) - 4ec6: 7942 ld s2,48(sp) - 4ec8: 7a02 ld s4,32(sp) - 4eca: 6ae2 ld s5,24(sp) - 4ecc: 6b42 ld s6,16(sp) - 4ece: 6ba2 ld s7,8(sp) -} - 4ed0: 854e mv a0,s3 - 4ed2: 79a2 ld s3,40(sp) - 4ed4: 6161 addi sp,sp,80 - 4ed6: 8082 ret - 4ed8: 6406 ld s0,64(sp) - 4eda: 7a02 ld s4,32(sp) - 4edc: 60a6 ld ra,72(sp) - 4ede: 6ae2 ld s5,24(sp) - 4ee0: 854e mv a0,s3 - 4ee2: 79a2 ld s3,40(sp) - 4ee4: 6161 addi sp,sp,80 - 4ee6: 8082 ret + 4f08: 74e2 ld s1,56(sp) + 4f0a: 7942 ld s2,48(sp) + 4f0c: 7a02 ld s4,32(sp) + 4f0e: 6ae2 ld s5,24(sp) + 4f10: 6b42 ld s6,16(sp) + 4f12: 6ba2 ld s7,8(sp) +} + 4f14: 854e mv a0,s3 + 4f16: 79a2 ld s3,40(sp) + 4f18: 6161 addi sp,sp,80 + 4f1a: 8082 ret + 4f1c: 6406 ld s0,64(sp) + 4f1e: 7a02 ld s4,32(sp) + 4f20: 60a6 ld ra,72(sp) + 4f22: 6ae2 ld s5,24(sp) + 4f24: 854e mv a0,s3 + 4f26: 79a2 ld s3,40(sp) + 4f28: 6161 addi sp,sp,80 + 4f2a: 8082 ret stream->buf_read_pos = 0; - 4ee8: 40042a23 sw zero,1044(s0) + 4f2c: 40042a23 sw zero,1044(s0) stream->buf_read_cnt = 0; - 4eec: 40042c23 sw zero,1048(s0) + 4f30: 40042c23 sw zero,1048(s0) int64 ret = read(stream->fd, stream->buffer, BUFSIZ); - 4ef0: 40000613 li a2,1024 - 4ef4: 85de mv a1,s7 - 4ef6: 9cafc0ef jal 10c0 + 4f34: 40000613 li a2,1024 + 4f38: 85de mv a1,s7 + 4f3a: 9cafc0ef jal 1104 if (ret <= 0) - 4efa: 06a05063 blez a0,4f5a + 4f3e: 06a05063 blez a0,4f9e stream->buf_read_cnt = (int)ret; - 4efe: 40a42c23 sw a0,1048(s0) + 4f42: 40a42c23 sw a0,1048(s0) while (bytes_read < total_bytes) - 4f02: f934e9e3 bltu s1,s3,4e94 - 4f06: bf5d j 4ebc + 4f46: f934e9e3 bltu s1,s3,4ed8 + 4f4a: bf5d j 4f00 uint64 available = stream->buf_read_cnt - stream->buf_read_pos; - 4f08: 40e7893b subw s2,a5,a4 + 4f4c: 40e7893b subw s2,a5,a4 memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 4f0c: 00eb85b3 add a1,s7,a4 - 4f10: 009a0533 add a0,s4,s1 + 4f50: 00eb85b3 add a1,s7,a4 + 4f54: 009a0533 add a0,s4,s1 uint64 to_copy = (available < remaining) ? available : remaining; - 4f14: 01267363 bgeu a2,s2,4f1a - 4f18: 8932 mv s2,a2 + 4f58: 01267363 bgeu a2,s2,4f5e + 4f5c: 8932 mv s2,a2 memcpy(dst + bytes_read, stream->buffer + stream->buf_read_pos, to_copy); - 4f1a: 864a mv a2,s2 - 4f1c: 3c9000ef jal 5ae4 + 4f5e: 864a mv a2,s2 + 4f60: 3e1000ef jal 5b40 stream->buf_read_pos += to_copy; - 4f20: 41442783 lw a5,1044(s0) + 4f64: 41442783 lw a5,1044(s0) bytes_read += to_copy; - 4f24: 94ca add s1,s1,s2 + 4f68: 94ca add s1,s1,s2 stream->buf_read_pos += to_copy; - 4f26: 012787bb addw a5,a5,s2 - 4f2a: 40f42a23 sw a5,1044(s0) + 4f6a: 012787bb addw a5,a5,s2 + 4f6e: 40f42a23 sw a5,1044(s0) while (bytes_read < total_bytes) - 4f2e: f734e3e3 bltu s1,s3,4e94 - 4f32: b769 j 4ebc + 4f72: f734e3e3 bltu s1,s3,4ed8 + 4f76: b769 j 4f00 int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 4f34: 4288 lw a0,0(a3) - 4f36: 863e mv a2,a5 - 4f38: 01068593 addi a1,a3,16 - 4f3c: 98cfc0ef jal 10c8 + 4f78: 4288 lw a0,0(a3) + 4f7a: 863e mv a2,a5 + 4f7c: 01068593 addi a1,a3,16 + 4f80: 98cfc0ef jal 110c if (ret < stream->buf_write_pos) - 4f40: 41042783 lw a5,1040(s0) - 4f44: 02f54163 blt a0,a5,4f66 + 4f84: 41042783 lw a5,1040(s0) + 4f88: 02f54163 blt a0,a5,4faa stream->buf_write_pos = 0; - 4f48: 40042823 sw zero,1040(s0) - 4f4c: bf0d j 4e7e + 4f8c: 40042823 sw zero,1040(s0) + 4f90: bf0d j 4ec2 } - 4f4e: 60a6 ld ra,72(sp) + 4f92: 60a6 ld ra,72(sp) return 0; - 4f50: 4981 li s3,0 + 4f94: 4981 li s3,0 } - 4f52: 854e mv a0,s3 - 4f54: 79a2 ld s3,40(sp) - 4f56: 6161 addi sp,sp,80 - 4f58: 8082 ret + 4f96: 854e mv a0,s3 + 4f98: 79a2 ld s3,40(sp) + 4f9a: 6161 addi sp,sp,80 + 4f9c: 8082 ret stream->eof = 1; - 4f5a: 4785 li a5,1 + 4f9e: 4785 li a5,1 if (ret == 0) - 4f5c: e119 bnez a0,4f62 + 4fa0: e119 bnez a0,4fa6 stream->eof = 1; - 4f5e: c45c sw a5,12(s0) - 4f60: bfb1 j 4ebc + 4fa2: c45c sw a5,12(s0) + 4fa4: bfb1 j 4f00 stream->error = 1; - 4f62: c41c sw a5,8(s0) + 4fa6: c41c sw a5,8(s0) return bytes_read / size; - 4f64: bfa1 j 4ebc + 4fa8: bfa1 j 4f00 stream->error = 1; - 4f66: 4785 li a5,1 - 4f68: c41c sw a5,8(s0) + 4faa: 4785 li a5,1 + 4fac: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 4f6a: 40042823 sw zero,1040(s0) + 4fae: 40042823 sw zero,1040(s0) return EOF; - 4f6e: bf01 j 4e7e + 4fb2: bf01 j 4ec2 -0000000000004f70 : +0000000000004fb4 : { - 4f70: 711d addi sp,sp,-96 - 4f72: ec86 sd ra,88(sp) - 4f74: e0ca sd s2,64(sp) + 4fb4: 711d addi sp,sp,-96 + 4fb6: ec86 sd ra,88(sp) + 4fb8: e0ca sd s2,64(sp) if (!stream || !ptr || size == 0 || nmemb == 0) - 4f76: 10068063 beqz a3,5076 - 4f7a: f456 sd s5,40(sp) - 4f7c: 8aaa mv s5,a0 - 4f7e: 10050263 beqz a0,5082 - 4f82: f05a sd s6,32(sp) + 4fba: 10068063 beqz a3,50ba + 4fbe: f456 sd s5,40(sp) + 4fc0: 8aaa mv s5,a0 + 4fc2: 10050263 beqz a0,50c6 + 4fc6: f05a sd s6,32(sp) return 0; - 4f84: 4901 li s2,0 - 4f86: 8b2e mv s6,a1 + 4fc8: 4901 li s2,0 + 4fca: 8b2e mv s6,a1 if (!stream || !ptr || size == 0 || nmemb == 0) - 4f88: c1d9 beqz a1,500e - 4f8a: c251 beqz a2,500e + 4fcc: c1d9 beqz a1,5052 + 4fce: c251 beqz a2,5052 if (stream->buf_mode == 2) - 4f8c: 41c6a703 lw a4,1052(a3) - 4f90: e8a2 sd s0,80(sp) - 4f92: 4789 li a5,2 + 4fd0: 41c6a703 lw a4,1052(a3) + 4fd4: e8a2 sd s0,80(sp) + 4fd6: 4789 li a5,2 uint64 total_bytes = size * nmemb; - 4f94: 02c58933 mul s2,a1,a2 + 4fd8: 02c58933 mul s2,a1,a2 if (stream->buf_mode == 2) - 4f98: 8436 mv s0,a3 - 4f9a: 0ef70b63 beq a4,a5,5090 - 4f9e: fc4e sd s3,56(sp) - 4fa0: ec5e sd s7,24(sp) - 4fa2: e862 sd s8,16(sp) + 4fdc: 8436 mv s0,a3 + 4fde: 0ef70b63 beq a4,a5,50d4 + 4fe2: fc4e sd s3,56(sp) + 4fe4: ec5e sd s7,24(sp) + 4fe6: e862 sd s8,16(sp) uint64 bytes_written = 0; - 4fa4: 4981 li s3,0 - 4fa6: 01068b93 addi s7,a3,16 + 4fe8: 4981 li s3,0 + 4fea: 01068b93 addi s7,a3,16 uint64 space_left = BUFSIZ - stream->buf_write_pos; - 4faa: 40000c13 li s8,1024 + 4fee: 40000c13 li s8,1024 while (bytes_written < total_bytes) - 4fae: 12090263 beqz s2,50d2 - 4fb2: e4a6 sd s1,72(sp) - 4fb4: f852 sd s4,48(sp) - 4fb6: e466 sd s9,8(sp) + 4ff2: 12090263 beqz s2,5116 + 4ff6: e4a6 sd s1,72(sp) + 4ff8: f852 sd s4,48(sp) + 4ffa: e466 sd s9,8(sp) uint64 space_left = BUFSIZ - stream->buf_write_pos; - 4fb8: 41042783 lw a5,1040(s0) + 4ffc: 41042783 lw a5,1040(s0) uint64 remaining = total_bytes - bytes_written; - 4fbc: 41390cb3 sub s9,s2,s3 + 5000: 41390cb3 sub s9,s2,s3 memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 4fc0: 013a85b3 add a1,s5,s3 + 5004: 013a85b3 add a1,s5,s3 uint64 space_left = BUFSIZ - stream->buf_write_pos; - 4fc4: 40fc0a3b subw s4,s8,a5 + 5008: 40fc0a3b subw s4,s8,a5 memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 4fc8: 00fb8533 add a0,s7,a5 - 4fcc: 8652 mv a2,s4 + 500c: 00fb8533 add a0,s7,a5 + 5010: 8652 mv a2,s4 if (remaining <= space_left) - 4fce: 059a6763 bltu s4,s9,501c + 5012: 059a6763 bltu s4,s9,5060 memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, remaining); - 4fd2: 8666 mv a2,s9 - 4fd4: 311000ef jal 5ae4 + 5016: 8666 mv a2,s9 + 5018: 329000ef jal 5b40 stream->buf_write_pos += remaining; - 4fd8: 41042783 lw a5,1040(s0) + 501c: 41042783 lw a5,1040(s0) if (stream->buf_write_pos == BUFSIZ) - 4fdc: 40000713 li a4,1024 + 5020: 40000713 li a4,1024 stream->buf_write_pos += remaining; - 4fe0: 019786bb addw a3,a5,s9 - 4fe4: 40d42823 sw a3,1040(s0) + 5024: 019786bb addw a3,a5,s9 + 5028: 40d42823 sw a3,1040(s0) if (stream->buf_write_pos == BUFSIZ) - 4fe8: 06e68a63 beq a3,a4,505c + 502c: 06e68a63 beq a3,a4,50a0 return bytes_written / size; - 4fec: 03695933 divu s2,s2,s6 - 4ff0: 6446 ld s0,80(sp) - 4ff2: 64a6 ld s1,72(sp) - 4ff4: 79e2 ld s3,56(sp) - 4ff6: 7a42 ld s4,48(sp) - 4ff8: 7aa2 ld s5,40(sp) - 4ffa: 7b02 ld s6,32(sp) - 4ffc: 6be2 ld s7,24(sp) - 4ffe: 6c42 ld s8,16(sp) - 5000: 6ca2 ld s9,8(sp) -} - 5002: 60e6 ld ra,88(sp) - 5004: 854a mv a0,s2 - 5006: 6906 ld s2,64(sp) - 5008: 6125 addi sp,sp,96 - 500a: 8082 ret - 500c: 6446 ld s0,80(sp) - 500e: 60e6 ld ra,88(sp) - 5010: 7aa2 ld s5,40(sp) - 5012: 7b02 ld s6,32(sp) - 5014: 854a mv a0,s2 - 5016: 6906 ld s2,64(sp) - 5018: 6125 addi sp,sp,96 - 501a: 8082 ret + 5030: 03695933 divu s2,s2,s6 + 5034: 6446 ld s0,80(sp) + 5036: 64a6 ld s1,72(sp) + 5038: 79e2 ld s3,56(sp) + 503a: 7a42 ld s4,48(sp) + 503c: 7aa2 ld s5,40(sp) + 503e: 7b02 ld s6,32(sp) + 5040: 6be2 ld s7,24(sp) + 5042: 6c42 ld s8,16(sp) + 5044: 6ca2 ld s9,8(sp) +} + 5046: 60e6 ld ra,88(sp) + 5048: 854a mv a0,s2 + 504a: 6906 ld s2,64(sp) + 504c: 6125 addi sp,sp,96 + 504e: 8082 ret + 5050: 6446 ld s0,80(sp) + 5052: 60e6 ld ra,88(sp) + 5054: 7aa2 ld s5,40(sp) + 5056: 7b02 ld s6,32(sp) + 5058: 854a mv a0,s2 + 505a: 6906 ld s2,64(sp) + 505c: 6125 addi sp,sp,96 + 505e: 8082 ret memcpy(stream->buffer + stream->buf_write_pos, src + bytes_written, space_left); - 501c: 2c9000ef jal 5ae4 + 5060: 2e1000ef jal 5b40 stream->buf_write_pos += space_left; - 5020: 41042783 lw a5,1040(s0) + 5064: 41042783 lw a5,1040(s0) int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 5024: 85de mv a1,s7 + 5068: 85de mv a1,s7 bytes_written += space_left; - 5026: 99d2 add s3,s3,s4 + 506a: 99d2 add s3,s3,s4 stream->buf_write_pos += space_left; - 5028: 00fa04bb addw s1,s4,a5 + 506c: 00fa04bb addw s1,s4,a5 int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 502c: 02049613 slli a2,s1,0x20 + 5070: 02049613 slli a2,s1,0x20 stream->buf_write_pos += space_left; - 5030: 40942823 sw s1,1040(s0) + 5074: 40942823 sw s1,1040(s0) int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 5034: 9201 srli a2,a2,0x20 + 5078: 9201 srli a2,a2,0x20 if (stream->buf_write_pos > 0) - 5036: 00904763 bgtz s1,5044 + 507a: 00904763 bgtz s1,5088 while (bytes_written < total_bytes) - 503a: f729efe3 bltu s3,s2,4fb8 + 507e: f729efe3 bltu s3,s2,4ffc return bytes_written / size; - 503e: 0369d933 divu s2,s3,s6 - 5042: b77d j 4ff0 + 5082: 0369d933 divu s2,s3,s6 + 5086: b77d j 5034 int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 5044: 4008 lw a0,0(s0) - 5046: 882fc0ef jal 10c8 + 5088: 4008 lw a0,0(s0) + 508a: 882fc0ef jal 110c if (ret < stream->buf_write_pos) - 504a: 41042783 lw a5,1040(s0) - 504e: 08f54963 blt a0,a5,50e0 + 508e: 41042783 lw a5,1040(s0) + 5092: 08f54963 blt a0,a5,5124 stream->buf_write_pos = 0; - 5052: 40042823 sw zero,1040(s0) + 5096: 40042823 sw zero,1040(s0) while (bytes_written < total_bytes) - 5056: f729e1e3 bltu s3,s2,4fb8 - 505a: b7d5 j 503e + 509a: f729e1e3 bltu s3,s2,4ffc + 509e: b7d5 j 5082 int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 505c: 4008 lw a0,0(s0) - 505e: 40000613 li a2,1024 - 5062: 85de mv a1,s7 - 5064: 864fc0ef jal 10c8 + 50a0: 4008 lw a0,0(s0) + 50a2: 40000613 li a2,1024 + 50a6: 85de mv a1,s7 + 50a8: 864fc0ef jal 110c if (ret < stream->buf_write_pos) - 5068: 41042783 lw a5,1040(s0) - 506c: 08f54163 blt a0,a5,50ee + 50ac: 41042783 lw a5,1040(s0) + 50b0: 08f54163 blt a0,a5,5132 stream->buf_write_pos = 0; - 5070: 40042823 sw zero,1040(s0) - 5074: bfa5 j 4fec + 50b4: 40042823 sw zero,1040(s0) + 50b8: bfa5 j 5030 } - 5076: 60e6 ld ra,88(sp) + 50ba: 60e6 ld ra,88(sp) return 0; - 5078: 4901 li s2,0 + 50bc: 4901 li s2,0 } - 507a: 854a mv a0,s2 - 507c: 6906 ld s2,64(sp) - 507e: 6125 addi sp,sp,96 - 5080: 8082 ret - 5082: 60e6 ld ra,88(sp) + 50be: 854a mv a0,s2 + 50c0: 6906 ld s2,64(sp) + 50c2: 6125 addi sp,sp,96 + 50c4: 8082 ret + 50c6: 60e6 ld ra,88(sp) return 0; - 5084: 4901 li s2,0 - 5086: 7aa2 ld s5,40(sp) + 50c8: 4901 li s2,0 + 50ca: 7aa2 ld s5,40(sp) } - 5088: 854a mv a0,s2 - 508a: 6906 ld s2,64(sp) - 508c: 6125 addi sp,sp,96 - 508e: 8082 ret + 50cc: 854a mv a0,s2 + 50ce: 6906 ld s2,64(sp) + 50d0: 6125 addi sp,sp,96 + 50d2: 8082 ret while (bytes_written < total_bytes) - 5090: f6090ee3 beqz s2,500c - 5094: e4a6 sd s1,72(sp) + 50d4: f6090ee3 beqz s2,5050 + 50d8: e4a6 sd s1,72(sp) uint64 bytes_written = 0; - 5096: 4481 li s1,0 - 5098: a021 j 50a0 + 50da: 4481 li s1,0 + 50dc: a021 j 50e4 bytes_written += ret; - 509a: 94aa add s1,s1,a0 + 50de: 94aa add s1,s1,a0 while (bytes_written < total_bytes) - 509c: 0324f463 bgeu s1,s2,50c4 + 50e0: 0324f463 bgeu s1,s2,5108 int64 ret = write(stream->fd, src + bytes_written, total_bytes - bytes_written); - 50a0: 4008 lw a0,0(s0) - 50a2: 40990633 sub a2,s2,s1 - 50a6: 009a85b3 add a1,s5,s1 - 50aa: 81efc0ef jal 10c8 + 50e4: 4008 lw a0,0(s0) + 50e6: 40990633 sub a2,s2,s1 + 50ea: 009a85b3 add a1,s5,s1 + 50ee: 81efc0ef jal 110c if (ret <= 0) - 50ae: fea046e3 bgtz a0,509a + 50f2: fea046e3 bgtz a0,50de stream->error = 1; - 50b2: 4785 li a5,1 + 50f6: 4785 li a5,1 return bytes_written / size; - 50b4: 0364d933 divu s2,s1,s6 + 50f8: 0364d933 divu s2,s1,s6 stream->error = 1; - 50b8: c41c sw a5,8(s0) + 50fc: c41c sw a5,8(s0) break; - 50ba: 64a6 ld s1,72(sp) - 50bc: 6446 ld s0,80(sp) - 50be: 7aa2 ld s5,40(sp) - 50c0: 7b02 ld s6,32(sp) - 50c2: b781 j 5002 + 50fe: 64a6 ld s1,72(sp) + 5100: 6446 ld s0,80(sp) + 5102: 7aa2 ld s5,40(sp) + 5104: 7b02 ld s6,32(sp) + 5106: b781 j 5046 return bytes_written / size; - 50c4: 0364d933 divu s2,s1,s6 - 50c8: 6446 ld s0,80(sp) - 50ca: 64a6 ld s1,72(sp) - 50cc: 7aa2 ld s5,40(sp) - 50ce: 7b02 ld s6,32(sp) - 50d0: bf0d j 5002 - 50d2: 6446 ld s0,80(sp) - 50d4: 79e2 ld s3,56(sp) - 50d6: 7aa2 ld s5,40(sp) - 50d8: 7b02 ld s6,32(sp) - 50da: 6be2 ld s7,24(sp) - 50dc: 6c42 ld s8,16(sp) - 50de: b715 j 5002 + 5108: 0364d933 divu s2,s1,s6 + 510c: 6446 ld s0,80(sp) + 510e: 64a6 ld s1,72(sp) + 5110: 7aa2 ld s5,40(sp) + 5112: 7b02 ld s6,32(sp) + 5114: bf0d j 5046 + 5116: 6446 ld s0,80(sp) + 5118: 79e2 ld s3,56(sp) + 511a: 7aa2 ld s5,40(sp) + 511c: 7b02 ld s6,32(sp) + 511e: 6be2 ld s7,24(sp) + 5120: 6c42 ld s8,16(sp) + 5122: b715 j 5046 stream->error = 1; - 50e0: 4785 li a5,1 - 50e2: c41c sw a5,8(s0) + 5124: 4785 li a5,1 + 5126: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 50e4: 40042823 sw zero,1040(s0) + 5128: 40042823 sw zero,1040(s0) while (bytes_written < total_bytes) - 50e8: ed29e8e3 bltu s3,s2,4fb8 - 50ec: bf89 j 503e + 512c: ed29e8e3 bltu s3,s2,4ffc + 5130: bf89 j 5082 stream->error = 1; - 50ee: 4785 li a5,1 - 50f0: c41c sw a5,8(s0) + 5132: 4785 li a5,1 + 5134: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 50f2: 40042823 sw zero,1040(s0) + 5136: 40042823 sw zero,1040(s0) return EOF; - 50f6: bddd j 4fec + 513a: bddd j 5030 -00000000000050f8 : +000000000000513c : if (!stream) - 50f8: c925 beqz a0,5168 + 513c: c925 beqz a0,51ac { - 50fa: 1101 addi sp,sp,-32 - 50fc: e04a sd s2,0(sp) - 50fe: 8932 mv s2,a2 + 513e: 1101 addi sp,sp,-32 + 5140: e04a sd s2,0(sp) + 5142: 8932 mv s2,a2 if (stream->buf_write_pos > 0) - 5100: 41052603 lw a2,1040(a0) + 5144: 41052603 lw a2,1040(a0) { - 5104: e822 sd s0,16(sp) - 5106: e426 sd s1,8(sp) - 5108: ec06 sd ra,24(sp) - 510a: 842a mv s0,a0 - 510c: 84ae mv s1,a1 + 5148: e822 sd s0,16(sp) + 514a: e426 sd s1,8(sp) + 514c: ec06 sd ra,24(sp) + 514e: 842a mv s0,a0 + 5150: 84ae mv s1,a1 if (stream->buf_write_pos > 0) - 510e: 02c04863 bgtz a2,513e + 5152: 02c04863 bgtz a2,5182 if (lseek(stream->fd, offset, whence) < 0) - 5112: 4008 lw a0,0(s0) + 5156: 4008 lw a0,0(s0) stream->buf_read_pos = 0; - 5114: 40042a23 sw zero,1044(s0) + 5158: 40042a23 sw zero,1044(s0) stream->buf_read_cnt = 0; - 5118: 40042c23 sw zero,1048(s0) + 515c: 40042c23 sw zero,1048(s0) stream->eof = 0; - 511c: 00042623 sw zero,12(s0) + 5160: 00042623 sw zero,12(s0) if (lseek(stream->fd, offset, whence) < 0) - 5120: 864a mv a2,s2 - 5122: 0004859b sext.w a1,s1 - 5126: 832fc0ef jal 1158 - 512a: 87aa mv a5,a0 + 5164: 864a mv a2,s2 + 5166: 0004859b sext.w a1,s1 + 516a: 832fc0ef jal 119c + 516e: 87aa mv a5,a0 return 0; - 512c: 4501 li a0,0 + 5170: 4501 li a0,0 if (lseek(stream->fd, offset, whence) < 0) - 512e: 0207c463 bltz a5,5156 -} - 5132: 60e2 ld ra,24(sp) - 5134: 6442 ld s0,16(sp) - 5136: 64a2 ld s1,8(sp) - 5138: 6902 ld s2,0(sp) - 513a: 6105 addi sp,sp,32 - 513c: 8082 ret + 5172: 0207c463 bltz a5,519a +} + 5176: 60e2 ld ra,24(sp) + 5178: 6442 ld s0,16(sp) + 517a: 64a2 ld s1,8(sp) + 517c: 6902 ld s2,0(sp) + 517e: 6105 addi sp,sp,32 + 5180: 8082 ret int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 513e: 4108 lw a0,0(a0) - 5140: 01040593 addi a1,s0,16 - 5144: f85fb0ef jal 10c8 + 5182: 4108 lw a0,0(a0) + 5184: 01040593 addi a1,s0,16 + 5188: f85fb0ef jal 110c if (ret < stream->buf_write_pos) - 5148: 41042783 lw a5,1040(s0) - 514c: 00f54963 blt a0,a5,515e + 518c: 41042783 lw a5,1040(s0) + 5190: 00f54963 blt a0,a5,51a2 stream->buf_write_pos = 0; - 5150: 40042823 sw zero,1040(s0) - 5154: bf7d j 5112 + 5194: 40042823 sw zero,1040(s0) + 5198: bf7d j 5156 stream->error = 1; - 5156: 4785 li a5,1 - 5158: c41c sw a5,8(s0) + 519a: 4785 li a5,1 + 519c: c41c sw a5,8(s0) return -1; - 515a: 557d li a0,-1 - 515c: bfd9 j 5132 + 519e: 557d li a0,-1 + 51a0: bfd9 j 5176 stream->error = 1; - 515e: 4785 li a5,1 - 5160: c41c sw a5,8(s0) + 51a2: 4785 li a5,1 + 51a4: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 5162: 40042823 sw zero,1040(s0) + 51a6: 40042823 sw zero,1040(s0) return EOF; - 5166: b775 j 5112 + 51aa: b775 j 5156 return -1; - 5168: 557d li a0,-1 + 51ac: 557d li a0,-1 } - 516a: 8082 ret + 51ae: 8082 ret -000000000000516c : +00000000000051b0 : if (!stream) - 516c: c505 beqz a0,5194 + 51b0: c505 beqz a0,51d8 { - 516e: 1141 addi sp,sp,-16 - 5170: e022 sd s0,0(sp) - 5172: 842a mv s0,a0 + 51b2: 1141 addi sp,sp,-16 + 51b4: e022 sd s0,0(sp) + 51b6: 842a mv s0,a0 int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 5174: 4108 lw a0,0(a0) - 5176: 4605 li a2,1 - 5178: 4581 li a1,0 + 51b8: 4108 lw a0,0(a0) + 51ba: 4605 li a2,1 + 51bc: 4581 li a1,0 { - 517a: e406 sd ra,8(sp) + 51be: e406 sd ra,8(sp) int64 ret = lseek(stream->fd, 0, SEEK_CUR); - 517c: fddfb0ef jal 1158 + 51c0: fddfb0ef jal 119c if (ret < 0) - 5180: 00054663 bltz a0,518c + 51c4: 00054663 bltz a0,51d0 } - 5184: 60a2 ld ra,8(sp) - 5186: 6402 ld s0,0(sp) - 5188: 0141 addi sp,sp,16 - 518a: 8082 ret + 51c8: 60a2 ld ra,8(sp) + 51ca: 6402 ld s0,0(sp) + 51cc: 0141 addi sp,sp,16 + 51ce: 8082 ret stream->error = 1; - 518c: 4785 li a5,1 - 518e: c41c sw a5,8(s0) + 51d0: 4785 li a5,1 + 51d2: c41c sw a5,8(s0) return -1L; - 5190: 557d li a0,-1 - 5192: bfcd j 5184 - 5194: 557d li a0,-1 + 51d4: 557d li a0,-1 + 51d6: bfcd j 51c8 + 51d8: 557d li a0,-1 } - 5196: 8082 ret + 51da: 8082 ret -0000000000005198 : +00000000000051dc : if (stream) - 5198: c915 beqz a0,51cc + 51dc: c915 beqz a0,5210 if (stream->buf_write_pos > 0) - 519a: 41052603 lw a2,1040(a0) + 51de: 41052603 lw a2,1040(a0) { - 519e: 1141 addi sp,sp,-16 - 51a0: e022 sd s0,0(sp) - 51a2: e406 sd ra,8(sp) - 51a4: 842a mv s0,a0 + 51e2: 1141 addi sp,sp,-16 + 51e4: e022 sd s0,0(sp) + 51e6: e406 sd ra,8(sp) + 51e8: 842a mv s0,a0 if (stream->buf_write_pos > 0) - 51a6: 02c04463 bgtz a2,51ce + 51ea: 02c04463 bgtz a2,5212 if (lseek(stream->fd, offset, whence) < 0) - 51aa: 4008 lw a0,0(s0) + 51ee: 4008 lw a0,0(s0) stream->buf_read_pos = 0; - 51ac: 40042a23 sw zero,1044(s0) + 51f0: 40042a23 sw zero,1044(s0) stream->buf_read_cnt = 0; - 51b0: 40042c23 sw zero,1048(s0) + 51f4: 40042c23 sw zero,1048(s0) stream->eof = 0; - 51b4: 00042623 sw zero,12(s0) + 51f8: 00042623 sw zero,12(s0) if (lseek(stream->fd, offset, whence) < 0) - 51b8: 4601 li a2,0 - 51ba: 4581 li a1,0 - 51bc: f9dfb0ef jal 1158 + 51fc: 4601 li a2,0 + 51fe: 4581 li a1,0 + 5200: f9dfb0ef jal 119c } - 51c0: 60a2 ld ra,8(sp) + 5204: 60a2 ld ra,8(sp) stream->error = 0; - 51c2: 00042423 sw zero,8(s0) + 5206: 00042423 sw zero,8(s0) } - 51c6: 6402 ld s0,0(sp) - 51c8: 0141 addi sp,sp,16 - 51ca: 8082 ret - 51cc: 8082 ret + 520a: 6402 ld s0,0(sp) + 520c: 0141 addi sp,sp,16 + 520e: 8082 ret + 5210: 8082 ret int64 ret = write(stream->fd, stream->buffer, stream->buf_write_pos); - 51ce: 4108 lw a0,0(a0) - 51d0: 01040593 addi a1,s0,16 - 51d4: ef5fb0ef jal 10c8 + 5212: 4108 lw a0,0(a0) + 5214: 01040593 addi a1,s0,16 + 5218: ef5fb0ef jal 110c if (ret < stream->buf_write_pos) - 51d8: 41042783 lw a5,1040(s0) - 51dc: 00f54563 blt a0,a5,51e6 + 521c: 41042783 lw a5,1040(s0) + 5220: 00f54563 blt a0,a5,522a stream->buf_write_pos = 0; - 51e0: 40042823 sw zero,1040(s0) - 51e4: b7d9 j 51aa + 5224: 40042823 sw zero,1040(s0) + 5228: b7d9 j 51ee stream->error = 1; - 51e6: 4785 li a5,1 - 51e8: c41c sw a5,8(s0) + 522a: 4785 li a5,1 + 522c: c41c sw a5,8(s0) stream->buf_write_pos = 0; - 51ea: 40042823 sw zero,1040(s0) + 522e: 40042823 sw zero,1040(s0) return EOF; - 51ee: bf75 j 51aa + 5232: bf75 j 51ee -00000000000051f0 : +0000000000005234 : return (stream) ? stream->eof : 1; - 51f0: c119 beqz a0,51f6 - 51f2: 4548 lw a0,12(a0) - 51f4: 8082 ret - 51f6: 4505 li a0,1 + 5234: c119 beqz a0,523a + 5236: 4548 lw a0,12(a0) + 5238: 8082 ret + 523a: 4505 li a0,1 } - 51f8: 8082 ret + 523c: 8082 ret -00000000000051fa : +000000000000523e : return (stream) ? stream->error : 1; - 51fa: c119 beqz a0,5200 - 51fc: 4508 lw a0,8(a0) - 51fe: 8082 ret - 5200: 4505 li a0,1 + 523e: c119 beqz a0,5244 + 5240: 4508 lw a0,8(a0) + 5242: 8082 ret + 5244: 4505 li a0,1 } - 5202: 8082 ret + 5246: 8082 ret -0000000000005204 : +0000000000005248 : if (stream) - 5204: c509 beqz a0,520e + 5248: c509 beqz a0,5252 stream->error = 0; - 5206: 00052423 sw zero,8(a0) + 524a: 00052423 sw zero,8(a0) stream->eof = 0; - 520a: 00052623 sw zero,12(a0) + 524e: 00052623 sw zero,12(a0) } - 520e: 8082 ret + 5252: 8082 ret -0000000000005210 : +0000000000005254 : if (!stream || c == EOF) - 5210: c19d beqz a1,5236 - 5212: 57fd li a5,-1 - 5214: 02f50163 beq a0,a5,5236 + 5254: c19d beqz a1,527a + 5256: 57fd li a5,-1 + 5258: 02f50163 beq a0,a5,527a if (stream->buf_read_pos > 0) - 5218: 4145a783 lw a5,1044(a1) - 521c: 00f05d63 blez a5,5236 + 525c: 4145a783 lw a5,1044(a1) + 5260: 00f05d63 blez a5,527a stream->buf_read_pos--; - 5220: fff7871b addiw a4,a5,-1 - 5224: 40e5aa23 sw a4,1044(a1) + 5264: fff7871b addiw a4,a5,-1 + 5268: 40e5aa23 sw a4,1044(a1) stream->buffer[stream->buf_read_pos] = (char)c; - 5228: 00e587b3 add a5,a1,a4 - 522c: 00a78823 sb a0,16(a5) + 526c: 00e587b3 add a5,a1,a4 + 5270: 00a78823 sb a0,16(a5) stream->eof = 0; - 5230: 0005a623 sw zero,12(a1) + 5274: 0005a623 sw zero,12(a1) return c; - 5234: 8082 ret + 5278: 8082 ret return EOF; - 5236: 557d li a0,-1 - 5238: 8082 ret + 527a: 557d li a0,-1 + 527c: 8082 ret -000000000000523a : +000000000000527e : return new_ptr; } /* String Conversion*/ unsigned long long strtoull(const char *nptr, char **endptr, int base) - 523a: 1141 addi sp,sp,-16 - 523c: e422 sd s0,8(sp) - 523e: 8eaa mv t4,a0 + 527e: 1141 addi sp,sp,-16 + 5280: e422 sd s0,8(sp) + 5282: 8eaa mv t4,a0 { const char *s = nptr; - 5240: 88aa mv a7,a0 + 5284: 88aa mv a7,a0 static inline int isdigit(int c) { return c >= '0' && c <= '9'; } static inline int islower(int c) { return c >= 'a' && c <= 'z'; } static inline int isupper(int c) { return c >= 'A' && c <= 'Z'; } static inline int isalpha(int c) { return islower(c) || isupper(c); } static inline int isalnum(int c) { return isalpha(c) || isdigit(c); } static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } - 5242: 02000313 li t1,32 - 5246: 4e11 li t3,4 + 5286: 02000313 li t1,32 + 528a: 4e11 li t3,4 return 0; } do { c = *s++; - 5248: 0008c783 lbu a5,0(a7) - 524c: 00188813 addi a6,a7,1 - 5250: ff77871b addiw a4,a5,-9 - 5254: 0ff77693 zext.b a3,a4 - 5258: 0007871b sext.w a4,a5 - 525c: 04678363 beq a5,t1,52a2 - 5260: 04de7163 bgeu t3,a3,52a2 + 528c: 0008c783 lbu a5,0(a7) + 5290: 00188813 addi a6,a7,1 + 5294: ff77871b addiw a4,a5,-9 + 5298: 0ff77693 zext.b a3,a4 + 529c: 0007871b sext.w a4,a5 + 52a0: 04678363 beq a5,t1,52e6 + 52a4: 04de7163 bgeu t3,a3,52e6 } while (isspace(c)); if (c == '-') - 5264: 02d00793 li a5,45 - 5268: 0ef70863 beq a4,a5,5358 + 52a8: 02d00793 li a5,45 + 52ac: 0ef70863 beq a4,a5,539c { neg = 1; c = *s++; } else if (c == '+') - 526c: 02b00793 li a5,43 + 52b0: 02b00793 li a5,43 int neg = 0, any, cutlim; - 5270: 4381 li t2,0 + 52b4: 4381 li t2,0 else if (c == '+') - 5272: 08f70c63 beq a4,a5,530a + 52b6: 08f70c63 beq a4,a5,534e { c = *s++; } if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 5276: ea05 bnez a2,52a6 - 5278: 03000793 li a5,48 - 527c: 0ef70463 beq a4,a5,5364 - 5280: 00ccd8b7 lui a7,0xccd - 5284: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc3f0d> - 5288: 08b2 slli a7,a7,0xc - 528a: ccd88893 addi a7,a7,-819 - 528e: 08b2 slli a7,a7,0xc - 5290: ccd88893 addi a7,a7,-819 - 5294: 08b6 slli a7,a7,0xd - 5296: 4415 li s0,5 - 5298: 99988893 addi a7,a7,-1639 - 529c: 42a9 li t0,10 + 52ba: ea05 bnez a2,52ea + 52bc: 03000793 li a5,48 + 52c0: 0ef70463 beq a4,a5,53a8 + 52c4: 00ccd8b7 lui a7,0xccd + 52c8: ccd88893 addi a7,a7,-819 # cccccd <_ZSt4cerr+0xcc3e8d> + 52cc: 08b2 slli a7,a7,0xc + 52ce: ccd88893 addi a7,a7,-819 + 52d2: 08b2 slli a7,a7,0xc + 52d4: ccd88893 addi a7,a7,-819 + 52d8: 08b6 slli a7,a7,0xd + 52da: 4415 li s0,5 + 52dc: 99988893 addi a7,a7,-1639 + 52e0: 42a9 li t0,10 c = s[1]; s += 2; base = 16; } if (base == 0) base = (c == '0' ? 8 : 10); - 529e: 4629 li a2,10 - 52a0: a829 j 52ba + 52e2: 4629 li a2,10 + 52e4: a829 j 52fe unsigned long long strtoull(const char *nptr, char **endptr, int base) - 52a2: 88c2 mv a7,a6 - 52a4: b755 j 5248 + 52e6: 88c2 mv a7,a6 + 52e8: b755 j 528c if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 52a6: 47c1 li a5,16 - 52a8: 0cf60d63 beq a2,a5,5382 + 52ea: 47c1 li a5,16 + 52ec: 0cf60d63 beq a2,a5,53c6 cutoff = ULLONG_MAX / (unsigned long long)base; - 52ac: 58fd li a7,-1 + 52f0: 58fd li a7,-1 cutlim = ULLONG_MAX % (unsigned long long)base; - 52ae: 02c8f433 remu s0,a7,a2 + 52f2: 02c8f433 remu s0,a7,a2 cutoff = ULLONG_MAX / (unsigned long long)base; - 52b2: 82b2 mv t0,a2 - 52b4: 02c8d8b3 divu a7,a7,a2 + 52f6: 82b2 mv t0,a2 + 52f8: 02c8d8b3 divu a7,a7,a2 cutlim = ULLONG_MAX % (unsigned long long)base; - 52b8: 2401 sext.w s0,s0 + 52fc: 2401 sext.w s0,s0 for (acc = 0, any = 0;; c = *s++) - 52ba: 4301 li t1,0 - 52bc: 4501 li a0,0 + 52fe: 4301 li t1,0 + 5300: 4501 li a0,0 { if (isdigit(c)) - 52be: 4e25 li t3,9 + 5302: 4e25 li t3,9 static inline int isalpha(int c) { return islower(c) || isupper(c); } - 52c0: 4fe5 li t6,25 + 5304: 4fe5 li t6,25 break; if (c >= base) break; if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 52c2: 5f7d li t5,-1 + 5306: 5f7d li t5,-1 if (isdigit(c)) - 52c4: fd07079b addiw a5,a4,-48 + 5308: fd07079b addiw a5,a4,-48 static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 52c8: 0007069b sext.w a3,a4 - 52cc: 00fe7e63 bgeu t3,a5,52e8 + 530c: 0007069b sext.w a3,a4 + 5310: 00fe7e63 bgeu t3,a5,532c static inline int isalpha(int c) { return islower(c) || isupper(c); } - 52d0: f9f6879b addiw a5,a3,-97 - 52d4: 04fff063 bgeu t6,a5,5314 - 52d8: fbf6869b addiw a3,a3,-65 - 52dc: 04dfe163 bltu t6,a3,531e + 5314: f9f6879b addiw a5,a3,-97 + 5318: 04fff063 bgeu t6,a5,5358 + 531c: fbf6869b addiw a3,a3,-65 + 5320: 04dfe163 bltu t6,a3,5362 c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 52e0: 03700793 li a5,55 - 52e4: 40f707bb subw a5,a4,a5 + 5324: 03700793 li a5,55 + 5328: 40f707bb subw a5,a4,a5 if (c >= base) - 52e8: 02c7db63 bge a5,a2,531e + 532c: 02c7db63 bge a5,a2,5362 if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 52ec: 01e30b63 beq t1,t5,5302 + 5330: 01e30b63 beq t1,t5,5346 any = -1; - 52f0: 537d li t1,-1 + 5334: 537d li t1,-1 if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 52f2: 00a8e863 bltu a7,a0,5302 - 52f6: 05150e63 beq a0,a7,5352 + 5336: 00a8e863 bltu a7,a0,5346 + 533a: 05150e63 beq a0,a7,5396 else { any = 1; - 52fa: 4305 li t1,1 + 533e: 4305 li t1,1 acc *= base; - 52fc: 02550533 mul a0,a0,t0 + 5340: 02550533 mul a0,a0,t0 acc += c; - 5300: 953e add a0,a0,a5 + 5344: 953e add a0,a0,a5 for (acc = 0, any = 0;; c = *s++) - 5302: 0805 addi a6,a6,1 - 5304: fff84703 lbu a4,-1(a6) + 5346: 0805 addi a6,a6,1 + 5348: fff84703 lbu a4,-1(a6) if (isdigit(c)) - 5308: bf75 j 52c4 + 534c: bf75 j 5308 c = *s++; - 530a: 00084703 lbu a4,0(a6) - 530e: 00288813 addi a6,a7,2 - 5312: b795 j 5276 + 534e: 00084703 lbu a4,0(a6) + 5352: 00288813 addi a6,a7,2 + 5356: b795 j 52ba c -= isupper(c) ? 'A' - 10 : 'a' - 10; - 5314: 05700793 li a5,87 - 5318: 40f707bb subw a5,a4,a5 - 531c: b7f1 j 52e8 + 5358: 05700793 li a5,87 + 535c: 40f707bb subw a5,a4,a5 + 5360: b7f1 j 532c } } if (any < 0) - 531e: 57fd li a5,-1 - 5320: 00f30e63 beq t1,a5,533c + 5362: 57fd li a5,-1 + 5364: 00f30e63 beq t1,a5,5380 { acc = ULLONG_MAX; errno = ERANGE; } else if (neg) - 5324: 00038463 beqz t2,532c + 5368: 00038463 beqz t2,5370 acc = -acc; - 5328: 40a00533 neg a0,a0 + 536c: 40a00533 neg a0,a0 if (endptr != 0) - 532c: c589 beqz a1,5336 + 5370: c589 beqz a1,537a *endptr = (char *)(any ? s - 1 : nptr); - 532e: 00031f63 bnez t1,534c - 5332: 01d5b023 sd t4,0(a1) + 5372: 00031f63 bnez t1,5390 + 5376: 01d5b023 sd t4,0(a1) return acc; } - 5336: 6422 ld s0,8(sp) - 5338: 0141 addi sp,sp,16 - 533a: 8082 ret + 537a: 6422 ld s0,8(sp) + 537c: 0141 addi sp,sp,16 + 537e: 8082 ret errno = ERANGE; - 533c: 02200793 li a5,34 - 5340: 00004717 auipc a4,0x4 - 5344: 94f72423 sw a5,-1720(a4) # 8c88 + 5380: 02200793 li a5,34 + 5384: 00004717 auipc a4,0x4 + 5388: 98f72223 sw a5,-1660(a4) # 8d08 acc = ULLONG_MAX; - 5348: 557d li a0,-1 + 538c: 557d li a0,-1 if (endptr != 0) - 534a: d5f5 beqz a1,5336 + 538e: d5f5 beqz a1,537a *endptr = (char *)(any ? s - 1 : nptr); - 534c: fff80e93 addi t4,a6,-1 - 5350: b7cd j 5332 + 5390: fff80e93 addi t4,a6,-1 + 5394: b7cd j 5376 if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) - 5352: faf448e3 blt s0,a5,5302 - 5356: b755 j 52fa + 5396: faf448e3 blt s0,a5,5346 + 539a: b755 j 533e c = *s++; - 5358: 00084703 lbu a4,0(a6) + 539c: 00084703 lbu a4,0(a6) neg = 1; - 535c: 4385 li t2,1 + 53a0: 4385 li t2,1 c = *s++; - 535e: 00288813 addi a6,a7,2 - 5362: bf11 j 5276 + 53a2: 00288813 addi a6,a7,2 + 53a6: bf11 j 52ba if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 5364: 00084783 lbu a5,0(a6) - 5368: 05800693 li a3,88 - 536c: 0df7f793 andi a5,a5,223 - 5370: 02d78b63 beq a5,a3,53a6 - 5374: 58fd li a7,-1 - 5376: 441d li s0,7 - 5378: 0038d893 srli a7,a7,0x3 - 537c: 42a1 li t0,8 + 53a8: 00084783 lbu a5,0(a6) + 53ac: 05800693 li a3,88 + 53b0: 0df7f793 andi a5,a5,223 + 53b4: 02d78b63 beq a5,a3,53ea + 53b8: 58fd li a7,-1 + 53ba: 441d li s0,7 + 53bc: 0038d893 srli a7,a7,0x3 + 53c0: 42a1 li t0,8 base = (c == '0' ? 8 : 10); - 537e: 4621 li a2,8 - 5380: bf2d j 52ba + 53c2: 4621 li a2,8 + 53c4: bf2d j 52fe if ((base == 0 || base == 16) && c == '0' && (*s == 'x' || *s == 'X')) - 5382: 03000793 li a5,48 - 5386: 00f70863 beq a4,a5,5396 - 538a: 58fd li a7,-1 - 538c: 443d li s0,15 - 538e: 0048d893 srli a7,a7,0x4 - 5392: 42c1 li t0,16 - 5394: b71d j 52ba - 5396: 00084783 lbu a5,0(a6) - 539a: 05800693 li a3,88 - 539e: 0df7f793 andi a5,a5,223 - 53a2: fed794e3 bne a5,a3,538a + 53c6: 03000793 li a5,48 + 53ca: 00f70863 beq a4,a5,53da + 53ce: 58fd li a7,-1 + 53d0: 443d li s0,15 + 53d2: 0048d893 srli a7,a7,0x4 + 53d6: 42c1 li t0,16 + 53d8: b71d j 52fe + 53da: 00084783 lbu a5,0(a6) + 53de: 05800693 li a3,88 + 53e2: 0df7f793 andi a5,a5,223 + 53e6: fed794e3 bne a5,a3,53ce s += 2; - 53a6: 58fd li a7,-1 + 53ea: 58fd li a7,-1 c = s[1]; - 53a8: 00184703 lbu a4,1(a6) + 53ec: 00184703 lbu a4,1(a6) s += 2; - 53ac: 443d li s0,15 - 53ae: 0809 addi a6,a6,2 - 53b0: 0048d893 srli a7,a7,0x4 - 53b4: 42c1 li t0,16 + 53f0: 443d li s0,15 + 53f2: 0809 addi a6,a6,2 + 53f4: 0048d893 srli a7,a7,0x4 + 53f8: 42c1 li t0,16 base = 16; - 53b6: 4641 li a2,16 - 53b8: b709 j 52ba + 53fa: 4641 li a2,16 + 53fc: b709 j 52fe -00000000000053ba : +00000000000053fe : if (__atexit_func_count >= ATEXIT_MAX) - 53ba: 00004717 auipc a4,0x4 - 53be: 8ce70713 addi a4,a4,-1842 # 8c88 - 53c2: 435c lw a5,4(a4) - 53c4: 46fd li a3,31 - 53c6: 00f6ca63 blt a3,a5,53da + 53fe: 00004717 auipc a4,0x4 + 5402: 90a70713 addi a4,a4,-1782 # 8d08 + 5406: 435c lw a5,4(a4) + 5408: 46fd li a3,31 + 540a: 00f6ca63 blt a3,a5,541e __atexit_funcs[__atexit_func_count++] = function; - 53ca: 00379693 slli a3,a5,0x3 - 53ce: 96ba add a3,a3,a4 - 53d0: 2785 addiw a5,a5,1 - 53d2: e688 sd a0,8(a3) - 53d4: c35c sw a5,4(a4) + 540e: 00379693 slli a3,a5,0x3 + 5412: 96ba add a3,a3,a4 + 5414: 2785 addiw a5,a5,1 + 5416: e688 sd a0,8(a3) + 5418: c35c sw a5,4(a4) return 0; - 53d6: 4501 li a0,0 - 53d8: 8082 ret + 541a: 4501 li a0,0 + 541c: 8082 ret return -1; - 53da: 557d li a0,-1 + 541e: 557d li a0,-1 } - 53dc: 8082 ret + 5420: 8082 ret -00000000000053de : +0000000000005422 : { - 53de: 1101 addi sp,sp,-32 - 53e0: e822 sd s0,16(sp) + 5422: 1101 addi sp,sp,-32 + 5424: e822 sd s0,16(sp) while (__atexit_func_count > 0) - 53e2: 00004417 auipc s0,0x4 - 53e6: 8a640413 addi s0,s0,-1882 # 8c88 - 53ea: 405c lw a5,4(s0) + 5426: 00004417 auipc s0,0x4 + 542a: 8e240413 addi s0,s0,-1822 # 8d08 + 542e: 405c lw a5,4(s0) { - 53ec: e426 sd s1,8(sp) - 53ee: ec06 sd ra,24(sp) - 53f0: 84aa mv s1,a0 + 5430: e426 sd s1,8(sp) + 5432: ec06 sd ra,24(sp) + 5434: 84aa mv s1,a0 while (__atexit_func_count > 0) - 53f2: 00f05d63 blez a5,540c + 5436: 00f05d63 blez a5,5450 (__atexit_funcs[--__atexit_func_count])(); - 53f6: fff7871b addiw a4,a5,-1 - 53fa: 87ba mv a5,a4 - 53fc: 070e slli a4,a4,0x3 - 53fe: 9722 add a4,a4,s0 - 5400: 6718 ld a4,8(a4) - 5402: c05c sw a5,4(s0) - 5404: 9702 jalr a4 + 543a: fff7871b addiw a4,a5,-1 + 543e: 87ba mv a5,a4 + 5440: 070e slli a4,a4,0x3 + 5442: 9722 add a4,a4,s0 + 5444: 6718 ld a4,8(a4) + 5446: c05c sw a5,4(s0) + 5448: 9702 jalr a4 while (__atexit_func_count > 0) - 5406: 405c lw a5,4(s0) - 5408: fef047e3 bgtz a5,53f6 + 544a: 405c lw a5,4(s0) + 544c: fef047e3 bgtz a5,543a sys_exit(status); - 540c: 8526 mv a0,s1 - 540e: c93fb0ef jal 10a0 + 5450: 8526 mv a0,s1 + 5452: c93fb0ef jal 10e4 while (1) - 5412: a001 j 5412 + 5456: a001 j 5456 -0000000000005414 : +0000000000005458 : { - 5414: 1141 addi sp,sp,-16 + 5458: 1141 addi sp,sp,-16 exit(127); - 5416: 07f00513 li a0,127 + 545a: 07f00513 li a0,127 { - 541a: e406 sd ra,8(sp) + 545e: e406 sd ra,8(sp) exit(127); - 541c: fc3ff0ef jal 53de + 5460: fc3ff0ef jal 5422 -0000000000005420 : +0000000000005464 : } - 5420: 4501 li a0,0 - 5422: 8082 ret + 5464: 4501 li a0,0 + 5466: 8082 ret -0000000000005424 : +0000000000005468 : } - 5424: 557d li a0,-1 - 5426: 8082 ret + 5468: 557d li a0,-1 + 546a: 8082 ret -0000000000005428 : +000000000000546c : if (!ptr) - 5428: c121 beqz a0,5468 + 546c: c121 beqz a0,54ac for (p = freep; !(bp > p && bp < p->next); p = p->next) - 542a: 00004617 auipc a2,0x4 - 542e: 85e60613 addi a2,a2,-1954 # 8c88 - 5432: 10863783 ld a5,264(a2) + 546e: 00004617 auipc a2,0x4 + 5472: 89a60613 addi a2,a2,-1894 # 8d08 + 5476: 10863783 ld a5,264(a2) bp = (header_t *)ptr - 1; - 5436: ff050693 addi a3,a0,-16 + 547a: ff050693 addi a3,a0,-16 if (p >= p->next && (bp > p || bp < p->next)) - 543a: 6798 ld a4,8(a5) + 547e: 6798 ld a4,8(a5) for (p = freep; !(bp > p && bp < p->next); p = p->next) - 543c: 02d7f763 bgeu a5,a3,546a - 5440: 00e6e463 bltu a3,a4,5448 + 5480: 02d7f763 bgeu a5,a3,54ae + 5484: 00e6e463 bltu a3,a4,548c if (p >= p->next && (bp > p || bp < p->next)) - 5444: 02e7e763 bltu a5,a4,5472 + 5488: 02e7e763 bltu a5,a4,54b6 if ((char *)bp + bp->size == (char *)p->next) - 5448: ff053583 ld a1,-16(a0) - 544c: 00b68833 add a6,a3,a1 - 5450: 03070363 beq a4,a6,5476 + 548c: ff053583 ld a1,-16(a0) + 5490: 00b68833 add a6,a3,a1 + 5494: 03070363 beq a4,a6,54ba if ((char *)p + p->size == (char *)bp) - 5454: 638c ld a1,0(a5) - 5456: fee53c23 sd a4,-8(a0) - 545a: 00b78833 add a6,a5,a1 - 545e: 03068963 beq a3,a6,5490 - 5462: e794 sd a3,8(a5) + 5498: 638c ld a1,0(a5) + 549a: fee53c23 sd a4,-8(a0) + 549e: 00b78833 add a6,a5,a1 + 54a2: 03068963 beq a3,a6,54d4 + 54a6: e794 sd a3,8(a5) freep = p; - 5464: 10f63423 sd a5,264(a2) + 54a8: 10f63423 sd a5,264(a2) } - 5468: 8082 ret + 54ac: 8082 ret if (p >= p->next && (bp > p || bp < p->next)) - 546a: 00e7e463 bltu a5,a4,5472 - 546e: fce6ede3 bltu a3,a4,5448 + 54ae: 00e7e463 bltu a5,a4,54b6 + 54b2: fce6ede3 bltu a3,a4,548c { - 5472: 87ba mv a5,a4 - 5474: b7d9 j 543a + 54b6: 87ba mv a5,a4 + 54b8: b7d9 j 547e bp->size += p->next->size; - 5476: 00073803 ld a6,0(a4) + 54ba: 00073803 ld a6,0(a4) bp->next = p->next->next; - 547a: 6718 ld a4,8(a4) + 54be: 6718 ld a4,8(a4) bp->size += p->next->size; - 547c: 95c2 add a1,a1,a6 - 547e: feb53823 sd a1,-16(a0) + 54c0: 95c2 add a1,a1,a6 + 54c2: feb53823 sd a1,-16(a0) if ((char *)p + p->size == (char *)bp) - 5482: 638c ld a1,0(a5) - 5484: fee53c23 sd a4,-8(a0) - 5488: 00b78833 add a6,a5,a1 - 548c: fd069be3 bne a3,a6,5462 + 54c6: 638c ld a1,0(a5) + 54c8: fee53c23 sd a4,-8(a0) + 54cc: 00b78833 add a6,a5,a1 + 54d0: fd069be3 bne a3,a6,54a6 p->size += bp->size; - 5490: ff053503 ld a0,-16(a0) + 54d4: ff053503 ld a0,-16(a0) p->next = bp->next; - 5494: 86ba mv a3,a4 + 54d8: 86ba mv a3,a4 p->size += bp->size; - 5496: 00b50733 add a4,a0,a1 - 549a: e398 sd a4,0(a5) + 54da: 00b50733 add a4,a0,a1 + 54de: e398 sd a4,0(a5) p->next = bp->next; - 549c: b7d9 j 5462 + 54e0: b7d9 j 54a6 -000000000000549e : +00000000000054e2 : if (size == 0) - 549e: c54d beqz a0,5548 + 54e2: c169 beqz a0,55a4 { - 54a0: 1101 addi sp,sp,-32 - 54a2: e426 sd s1,8(sp) + 54e4: 7179 addi sp,sp,-48 + 54e6: ec26 sd s1,24(sp) if ((prevp = freep) == NULL) - 54a4: 00003497 auipc s1,0x3 - 54a8: 7e448493 addi s1,s1,2020 # 8c88 - 54ac: 1084b783 ld a5,264(s1) + 54e8: 00004497 auipc s1,0x4 + 54ec: 82048493 addi s1,s1,-2016 # 8d08 + 54f0: 1084b783 ld a5,264(s1) { - 54b0: e822 sd s0,16(sp) + 54f4: f022 sd s0,32(sp) size = ALIGN(size + sizeof(header_t)); - 54b2: 057d addi a0,a0,31 + 54f6: 057d addi a0,a0,31 { - 54b4: ec06 sd ra,24(sp) + 54f8: f406 sd ra,40(sp) size = ALIGN(size + sizeof(header_t)); - 54b6: ff057413 andi s0,a0,-16 + 54fa: ff057413 andi s0,a0,-16 if ((prevp = freep) == NULL) - 54ba: c7b5 beqz a5,5526 + 54fe: c3d1 beqz a5,5582 for (p = prevp->next;; prevp = p, p = p->next) - 54bc: 6788 ld a0,8(a5) + 5500: 6788 ld a0,8(a5) if (p->size >= size) - 54be: 6118 ld a4,0(a0) - 54c0: 04877663 bgeu a4,s0,550c - 54c4: e04a sd s2,0(sp) + 5502: 6118 ld a4,0(a0) + 5504: 06877163 bgeu a4,s0,5566 + 5508: e44e sd s3,8(sp) + 550a: e052 sd s4,0(sp) + 550c: e84a sd s2,16(sp) + if (nu < 4096) + 550e: 6a05 lui s4,0x1 if (cp == (void *)-1) - 54c6: 597d li s2,-1 - 54c8: a029 j 54d2 + 5510: 59fd li s3,-1 + 5512: a029 j 551c for (p = prevp->next;; prevp = p, p = p->next) - 54ca: 6788 ld a0,8(a5) + 5514: 6788 ld a0,8(a5) if (p->size >= size) - 54cc: 6118 ld a4,0(a0) - 54ce: 02877e63 bgeu a4,s0,550a + 5516: 6118 ld a4,0(a0) + 5518: 04877463 bgeu a4,s0,5560 if (p == freep) - 54d2: 1084b703 ld a4,264(s1) - 54d6: 87aa mv a5,a0 - 54d8: fea719e3 bne a4,a0,54ca + 551c: 1084b703 ld a4,264(s1) + 5520: 87aa mv a5,a0 + 5522: fee519e3 bne a0,a4,5514 + if (nu < 4096) + 5526: 8922 mv s2,s0 + 5528: 01447363 bgeu s0,s4,552e + 552c: 6905 lui s2,0x1 cp = (char *)sbrk(nu); - 54dc: 6505 lui a0,0x1 - 54de: c53fb0ef jal 1130 - 54e2: 87aa mv a5,a0 + 552e: 854a mv a0,s2 + 5530: c45fb0ef jal 1174 + 5534: 87aa mv a5,a0 free((void *)(up + 1)); - 54e4: 0541 addi a0,a0,16 # 1010 + 5536: 0541 addi a0,a0,16 if (cp == (void *)-1) - 54e6: 01278963 beq a5,s2,54f8 + 5538: 01378963 beq a5,s3,554a up->size = nu; - 54ea: 6705 lui a4,0x1 - 54ec: e398 sd a4,0(a5) + 553c: 0127b023 sd s2,0(a5) free((void *)(up + 1)); - 54ee: f3bff0ef jal 5428 + 5540: f2dff0ef jal 546c return freep; - 54f2: 1084b783 ld a5,264(s1) - if ((p = morecore(nunits * sizeof(header_t))) == NULL) - 54f6: fbf1 bnez a5,54ca + 5544: 1084b783 ld a5,264(s1) + if ((p = morecore(size)) == NULL) + 5548: f7f1 bnez a5,5514 } - 54f8: 60e2 ld ra,24(sp) - 54fa: 6442 ld s0,16(sp) + 554a: 70a2 ld ra,40(sp) + 554c: 7402 ld s0,32(sp) errno = ENOMEM; - 54fc: 47b1 li a5,12 - 54fe: c09c sw a5,0(s1) + 554e: 47b1 li a5,12 + 5550: c09c sw a5,0(s1) return NULL; - 5500: 6902 ld s2,0(sp) + 5552: 6942 ld s2,16(sp) + 5554: 69a2 ld s3,8(sp) + 5556: 6a02 ld s4,0(sp) } - 5502: 64a2 ld s1,8(sp) + 5558: 64e2 ld s1,24(sp) return NULL; - 5504: 4501 li a0,0 + 555a: 4501 li a0,0 } - 5506: 6105 addi sp,sp,32 - 5508: 8082 ret - 550a: 6902 ld s2,0(sp) + 555c: 6145 addi sp,sp,48 + 555e: 8082 ret + 5560: 6942 ld s2,16(sp) + 5562: 69a2 ld s3,8(sp) + 5564: 6a02 ld s4,0(sp) if (p->size == size) - 550c: 02e40b63 beq s0,a4,5542 + 5566: 02e40c63 beq s0,a4,559e + p->size -= size; + 556a: 8f01 sub a4,a4,s0 + 556c: e118 sd a4,0(a0) p = (header_t *)((char *)p + p->size); - 5510: 953a add a0,a0,a4 - p->size = (nunits * sizeof(header_t)); - 5512: 00053023 sd zero,0(a0) + 556e: 953a add a0,a0,a4 + p->size = size; + 5570: e100 sd s0,0(a0) } - 5516: 60e2 ld ra,24(sp) - 5518: 6442 ld s0,16(sp) + 5572: 70a2 ld ra,40(sp) + 5574: 7402 ld s0,32(sp) freep = prevp; - 551a: 10f4b423 sd a5,264(s1) + 5576: 10f4b423 sd a5,264(s1) return (void *)(p + 1); - 551e: 0541 addi a0,a0,16 + 557a: 0541 addi a0,a0,16 } - 5520: 64a2 ld s1,8(sp) - 5522: 6105 addi sp,sp,32 - 5524: 8082 ret + 557c: 64e2 ld s1,24(sp) + 557e: 6145 addi sp,sp,48 + 5580: 8082 ret base.next = freep = prevp = &base; - 5526: 00004517 auipc a0,0x4 - 552a: 87250513 addi a0,a0,-1934 # 8d98 - 552e: 10a4b423 sd a0,264(s1) - 5532: 10a4bc23 sd a0,280(s1) + 5582: 00004517 auipc a0,0x4 + 5586: 89650513 addi a0,a0,-1898 # 8e18 + 558a: 10a4b423 sd a0,264(s1) + 558e: 10a4bc23 sd a0,280(s1) base.size = 0; - 5536: 00004797 auipc a5,0x4 - 553a: 8607b123 sd zero,-1950(a5) # 8d98 + 5592: 00004797 auipc a5,0x4 + 5596: 8807b323 sd zero,-1914(a5) # 8e18 if (p->size >= size) - 553e: f059 bnez s0,54c4 + 559a: f43d bnez s0,5508 base.next = freep = prevp = &base; - 5540: 87aa mv a5,a0 + 559c: 87aa mv a5,a0 prevp->next = p->next; - 5542: 6518 ld a4,8(a0) - 5544: e798 sd a4,8(a5) - 5546: bfc1 j 5516 + 559e: 6518 ld a4,8(a0) + 55a0: e798 sd a4,8(a5) + 55a2: bfc1 j 5572 return NULL; - 5548: 4501 li a0,0 + 55a4: 4501 li a0,0 } - 554a: 8082 ret + 55a6: 8082 ret -000000000000554c : +00000000000055a8 : if (__builtin_mul_overflow(nmemb, size, &total)) - 554c: 02b537b3 mulhu a5,a0,a1 + 55a8: 02b537b3 mulhu a5,a0,a1 { - 5550: 1101 addi sp,sp,-32 - 5552: e822 sd s0,16(sp) - 5554: ec06 sd ra,24(sp) - 5556: e426 sd s1,8(sp) + 55ac: 1101 addi sp,sp,-32 + 55ae: e822 sd s0,16(sp) + 55b0: ec06 sd ra,24(sp) + 55b2: e426 sd s1,8(sp) if (__builtin_mul_overflow(nmemb, size, &total)) - 5558: 02b50433 mul s0,a0,a1 - 555c: e385 bnez a5,557c + 55b4: 02b50433 mul s0,a0,a1 + 55b8: e385 bnez a5,55d8 void *p = malloc(total); - 555e: 8522 mv a0,s0 - 5560: f3fff0ef jal 549e - 5564: 84aa mv s1,a0 + 55ba: 8522 mv a0,s0 + 55bc: f27ff0ef jal 54e2 + 55c0: 84aa mv s1,a0 if (p) - 5566: c509 beqz a0,5570 + 55c2: c509 beqz a0,55cc memset(p, 0, total); - 5568: 8622 mv a2,s0 - 556a: 4581 li a1,0 - 556c: 524000ef jal 5a90 -} - 5570: 60e2 ld ra,24(sp) - 5572: 6442 ld s0,16(sp) - 5574: 8526 mv a0,s1 - 5576: 64a2 ld s1,8(sp) - 5578: 6105 addi sp,sp,32 - 557a: 8082 ret - 557c: 60e2 ld ra,24(sp) - 557e: 6442 ld s0,16(sp) + 55c4: 8622 mv a2,s0 + 55c6: 4581 li a1,0 + 55c8: 524000ef jal 5aec +} + 55cc: 60e2 ld ra,24(sp) + 55ce: 6442 ld s0,16(sp) + 55d0: 8526 mv a0,s1 + 55d2: 64a2 ld s1,8(sp) + 55d4: 6105 addi sp,sp,32 + 55d6: 8082 ret + 55d8: 60e2 ld ra,24(sp) + 55da: 6442 ld s0,16(sp) errno = ENOMEM; - 5580: 47b1 li a5,12 + 55dc: 47b1 li a5,12 return NULL; - 5582: 4481 li s1,0 + 55de: 4481 li s1,0 errno = ENOMEM; - 5584: 00003717 auipc a4,0x3 - 5588: 70f72223 sw a5,1796(a4) # 8c88 + 55e0: 00003717 auipc a4,0x3 + 55e4: 72f72423 sw a5,1832(a4) # 8d08 } - 558c: 8526 mv a0,s1 - 558e: 64a2 ld s1,8(sp) - 5590: 6105 addi sp,sp,32 - 5592: 8082 ret + 55e8: 8526 mv a0,s1 + 55ea: 64a2 ld s1,8(sp) + 55ec: 6105 addi sp,sp,32 + 55ee: 8082 ret -0000000000005594 : +00000000000055f0 : if (!ptr) - 5594: c929 beqz a0,55e6 + 55f0: c929 beqz a0,5642 { - 5596: 1101 addi sp,sp,-32 - 5598: ec06 sd ra,24(sp) - 559a: e426 sd s1,8(sp) + 55f2: 1101 addi sp,sp,-32 + 55f4: ec06 sd ra,24(sp) + 55f6: e426 sd s1,8(sp) if (size == 0) - 559c: c5b9 beqz a1,55ea + 55f8: c5b9 beqz a1,5646 if (bp->size >= new_size) - 559e: ff053703 ld a4,-16(a0) + 55fa: ff053703 ld a4,-16(a0) size_t new_size = ALIGN(size + sizeof(header_t)); - 55a2: 01f58793 addi a5,a1,31 - 55a6: e822 sd s0,16(sp) - 55a8: 9bc1 andi a5,a5,-16 - 55aa: 842a mv s0,a0 + 55fe: 01f58793 addi a5,a1,31 + 5602: e822 sd s0,16(sp) + 5604: 9bc1 andi a5,a5,-16 + 5606: 842a mv s0,a0 return ptr; - 55ac: 84aa mv s1,a0 + 5608: 84aa mv s1,a0 if (bp->size >= new_size) - 55ae: 00f76863 bltu a4,a5,55be - 55b2: 6442 ld s0,16(sp) -} - 55b4: 60e2 ld ra,24(sp) - 55b6: 8526 mv a0,s1 - 55b8: 64a2 ld s1,8(sp) - 55ba: 6105 addi sp,sp,32 - 55bc: 8082 ret + 560a: 00f76863 bltu a4,a5,561a + 560e: 6442 ld s0,16(sp) +} + 5610: 60e2 ld ra,24(sp) + 5612: 8526 mv a0,s1 + 5614: 64a2 ld s1,8(sp) + 5616: 6105 addi sp,sp,32 + 5618: 8082 ret void *new_ptr = malloc(size); - 55be: 852e mv a0,a1 - 55c0: edfff0ef jal 549e - 55c4: 84aa mv s1,a0 + 561a: 852e mv a0,a1 + 561c: ec7ff0ef jal 54e2 + 5620: 84aa mv s1,a0 if (!new_ptr) - 55c6: d575 beqz a0,55b2 + 5622: d575 beqz a0,560e memcpy(new_ptr, ptr, bp->size - sizeof(header_t)); - 55c8: ff043603 ld a2,-16(s0) - 55cc: 85a2 mv a1,s0 - 55ce: 1641 addi a2,a2,-16 - 55d0: 514000ef jal 5ae4 + 5624: ff043603 ld a2,-16(s0) + 5628: 85a2 mv a1,s0 + 562a: 1641 addi a2,a2,-16 + 562c: 514000ef jal 5b40 free(ptr); - 55d4: 8522 mv a0,s0 - 55d6: e53ff0ef jal 5428 + 5630: 8522 mv a0,s0 + 5632: e3bff0ef jal 546c } - 55da: 60e2 ld ra,24(sp) + 5636: 60e2 ld ra,24(sp) free(ptr); - 55dc: 6442 ld s0,16(sp) + 5638: 6442 ld s0,16(sp) } - 55de: 8526 mv a0,s1 - 55e0: 64a2 ld s1,8(sp) - 55e2: 6105 addi sp,sp,32 - 55e4: 8082 ret + 563a: 8526 mv a0,s1 + 563c: 64a2 ld s1,8(sp) + 563e: 6105 addi sp,sp,32 + 5640: 8082 ret return malloc(size); - 55e6: 852e mv a0,a1 - 55e8: bd5d j 549e + 5642: 852e mv a0,a1 + 5644: bd79 j 54e2 free(ptr); - 55ea: e3fff0ef jal 5428 + 5646: e27ff0ef jal 546c return NULL; - 55ee: 4481 li s1,0 - 55f0: b7d1 j 55b4 + 564a: 4481 li s1,0 + 564c: b7d1 j 5610 -00000000000055f2 : +000000000000564e : if (base < 0 || base == 1 || base > 36) - 55f2: 02400813 li a6,36 + 564e: 02400813 li a6,36 { - 55f6: 86aa mv a3,a0 - 55f8: 872e mv a4,a1 + 5652: 86aa mv a3,a0 + 5654: 872e mv a4,a1 if (base < 0 || base == 1 || base > 36) - 55fa: 00c86663 bltu a6,a2,5606 - 55fe: 4805 li a6,1 - 5600: 01060363 beq a2,a6,5606 - 5604: b91d j 523a + 5656: 00c86663 bltu a6,a2,5662 + 565a: 4805 li a6,1 + 565c: 01060363 beq a2,a6,5662 + 5660: b939 j 527e if (endptr) - 5606: c311 beqz a4,560a + 5662: c311 beqz a4,5666 *endptr = (char *)nptr; - 5608: e314 sd a3,0(a4) + 5664: e314 sd a3,0(a4) errno = 0; /* EINVAL */ - 560a: 00003797 auipc a5,0x3 - 560e: 6607af23 sw zero,1662(a5) # 8c88 + 5666: 00003797 auipc a5,0x3 + 566a: 6a07a123 sw zero,1698(a5) # 8d08 } - 5612: 4501 li a0,0 - 5614: 8082 ret + 566e: 4501 li a0,0 + 5670: 8082 ret -0000000000005616 : +0000000000005672 : long long strtoll(const char *nptr, char **endptr, int base) { - 5616: 1141 addi sp,sp,-16 - 5618: e406 sd ra,8(sp) - 561a: e022 sd s0,0(sp) + 5672: 1141 addi sp,sp,-16 + 5674: e406 sd ra,8(sp) + 5676: e022 sd s0,0(sp) const char *s = nptr; - 561c: 86aa mv a3,a0 + 5678: 86aa mv a3,a0 static inline int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } - 561e: 02000813 li a6,32 - 5622: 4891 li a7,4 + 567a: 02000813 li a6,32 + 567e: 4891 li a7,4 unsigned long long acc; int c, neg = 0; do { c = *s++; - 5624: 0006c783 lbu a5,0(a3) - 5628: 0685 addi a3,a3,1 - 562a: ff77871b addiw a4,a5,-9 - 562e: 0ff77713 zext.b a4,a4 - 5632: 0007841b sext.w s0,a5 - 5636: ff0787e3 beq a5,a6,5624 - 563a: fee8f5e3 bgeu a7,a4,5624 + 5680: 0006c783 lbu a5,0(a3) + 5684: 0685 addi a3,a3,1 + 5686: ff77871b addiw a4,a5,-9 + 568a: 0ff77713 zext.b a4,a4 + 568e: 0007841b sext.w s0,a5 + 5692: ff0787e3 beq a5,a6,5680 + 5696: fee8f5e3 bgeu a7,a4,5680 if (base < 0 || base == 1 || base > 36) - 563e: 02400793 li a5,36 - 5642: 02c7ec63 bltu a5,a2,567a - 5646: 4785 li a5,1 - 5648: 02f60963 beq a2,a5,567a - 564c: befff0ef jal 523a + 569a: 02400793 li a5,36 + 569e: 02c7ec63 bltu a5,a2,56d6 + 56a2: 4785 li a5,1 + 56a4: 02f60963 beq a2,a5,56d6 + 56a8: bd7ff0ef jal 527e if (c == '-') neg = 1; acc = strtoull(nptr, endptr, base); if (errno == ERANGE && acc == ULLONG_MAX) - 5650: 00003797 auipc a5,0x3 - 5654: 63878793 addi a5,a5,1592 # 8c88 - 5658: 4394 lw a3,0(a5) - 565a: 02200713 li a4,34 - 565e: 04e68363 beq a3,a4,56a4 + 56ac: 00003797 auipc a5,0x3 + 56b0: 65c78793 addi a5,a5,1628 # 8d08 + 56b4: 4394 lw a3,0(a5) + 56b6: 02200713 li a4,34 + 56ba: 04e68363 beq a3,a4,5700 return neg ? LLONG_MIN : LLONG_MAX; if (!neg && acc > (unsigned long long)LLONG_MAX) - 5662: 02d00713 li a4,45 - 5666: 02e40563 beq s0,a4,5690 - 566a: 00055f63 bgez a0,5688 + 56be: 02d00713 li a4,45 + 56c2: 02e40563 beq s0,a4,56ec + 56c6: 00055f63 bgez a0,56e4 { errno = ERANGE; - 566e: 02200713 li a4,34 - 5672: c398 sw a4,0(a5) + 56ca: 02200713 li a4,34 + 56ce: c398 sw a4,0(a5) return neg ? LLONG_MIN : LLONG_MAX; - 5674: 557d li a0,-1 - 5676: 8105 srli a0,a0,0x1 - 5678: a801 j 5688 + 56d0: 557d li a0,-1 + 56d2: 8105 srli a0,a0,0x1 + 56d4: a801 j 56e4 if (endptr) - 567a: c191 beqz a1,567e + 56d6: c191 beqz a1,56da *endptr = (char *)nptr; - 567c: e188 sd a0,0(a1) + 56d8: e188 sd a0,0(a1) errno = 0; /* EINVAL */ - 567e: 00003797 auipc a5,0x3 - 5682: 6007a523 sw zero,1546(a5) # 8c88 + 56da: 00003797 auipc a5,0x3 + 56de: 6207a723 sw zero,1582(a5) # 8d08 { errno = ERANGE; return LLONG_MIN; } return neg ? -(long long)acc : (long long)acc; - 5686: 4501 li a0,0 + 56e2: 4501 li a0,0 } - 5688: 60a2 ld ra,8(sp) - 568a: 6402 ld s0,0(sp) - 568c: 0141 addi sp,sp,16 - 568e: 8082 ret + 56e4: 60a2 ld ra,8(sp) + 56e6: 6402 ld s0,0(sp) + 56e8: 0141 addi sp,sp,16 + 56ea: 8082 ret if (neg && acc > (unsigned long long)LLONG_MAX + 1) - 5690: 577d li a4,-1 - 5692: 177e slli a4,a4,0x3f - 5694: 02a76263 bltu a4,a0,56b8 + 56ec: 577d li a4,-1 + 56ee: 177e slli a4,a4,0x3f + 56f0: 02a76263 bltu a4,a0,5714 } - 5698: 60a2 ld ra,8(sp) - 569a: 6402 ld s0,0(sp) + 56f4: 60a2 ld ra,8(sp) + 56f6: 6402 ld s0,0(sp) return neg ? -(long long)acc : (long long)acc; - 569c: 40a00533 neg a0,a0 + 56f8: 40a00533 neg a0,a0 } - 56a0: 0141 addi sp,sp,16 - 56a2: 8082 ret + 56fc: 0141 addi sp,sp,16 + 56fe: 8082 ret if (errno == ERANGE && acc == ULLONG_MAX) - 56a4: 577d li a4,-1 - 56a6: fae51ee3 bne a0,a4,5662 + 5700: 577d li a4,-1 + 5702: fae51ee3 bne a0,a4,56be return neg ? LLONG_MIN : LLONG_MAX; - 56aa: 02d00793 li a5,45 - 56ae: fcf413e3 bne s0,a5,5674 + 5706: 02d00793 li a5,45 + 570a: fcf413e3 bne s0,a5,56d0 return LLONG_MIN; - 56b2: 557d li a0,-1 - 56b4: 157e slli a0,a0,0x3f - 56b6: bfc9 j 5688 + 570e: 557d li a0,-1 + 5710: 157e slli a0,a0,0x3f + 5712: bfc9 j 56e4 errno = ERANGE; - 56b8: 02200713 li a4,34 - 56bc: c398 sw a4,0(a5) + 5714: 02200713 li a4,34 + 5718: c398 sw a4,0(a5) return LLONG_MIN; - 56be: bfd5 j 56b2 + 571a: bfd5 j 570e -00000000000056c0 : +000000000000571c : if (base < 0 || base == 1 || base > 36) - 56c0: 02400813 li a6,36 + 571c: 02400813 li a6,36 unsigned long strtoul(const char *nptr, char **endptr, int base) { - 56c4: 86aa mv a3,a0 - 56c6: 872e mv a4,a1 + 5720: 86aa mv a3,a0 + 5722: 872e mv a4,a1 if (base < 0 || base == 1 || base > 36) - 56c8: 00c86663 bltu a6,a2,56d4 - 56cc: 4805 li a6,1 - 56ce: 01060363 beq a2,a6,56d4 - 56d2: b6a5 j 523a + 5724: 00c86663 bltu a6,a2,5730 + 5728: 4805 li a6,1 + 572a: 01060363 beq a2,a6,5730 + 572e: be81 j 527e if (endptr) - 56d4: c311 beqz a4,56d8 + 5730: c311 beqz a4,5734 *endptr = (char *)nptr; - 56d6: e314 sd a3,0(a4) + 5732: e314 sd a3,0(a4) errno = 0; /* EINVAL */ - 56d8: 00003797 auipc a5,0x3 - 56dc: 5a07a823 sw zero,1456(a5) # 8c88 + 5734: 00003797 auipc a5,0x3 + 5738: 5c07aa23 sw zero,1492(a5) # 8d08 { errno = ERANGE; return ULONG_MAX; } return (unsigned long)ret; } - 56e0: 4501 li a0,0 - 56e2: 8082 ret + 573c: 4501 li a0,0 + 573e: 8082 ret -00000000000056e4 : +0000000000005740 : long strtol(const char *nptr, char **endptr, int base) { long long ret = strtoll(nptr, endptr, base); - 56e4: bf0d j 5616 + 5740: bf0d j 5672 -00000000000056e6 : +0000000000005742 : return LONG_MIN; } return (long)ret; } int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 56e6: 1141 addi sp,sp,-16 + 5742: 1141 addi sp,sp,-16 long long ret = strtoll(nptr, endptr, base); - 56e8: 4629 li a2,10 - 56ea: 4581 li a1,0 + 5744: 4629 li a2,10 + 5746: 4581 li a1,0 int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 56ec: e406 sd ra,8(sp) + 5748: e406 sd ra,8(sp) long long ret = strtoll(nptr, endptr, base); - 56ee: f29ff0ef jal 5616 + 574a: f29ff0ef jal 5672 int atoi(const char *nptr) { return (int)strtol(nptr, NULL, 10); } - 56f2: 60a2 ld ra,8(sp) - 56f4: 2501 sext.w a0,a0 - 56f6: 0141 addi sp,sp,16 - 56f8: 8082 ret + 574e: 60a2 ld ra,8(sp) + 5750: 2501 sext.w a0,a0 + 5752: 0141 addi sp,sp,16 + 5754: 8082 ret -00000000000056fa : +0000000000005756 : long long ret = strtoll(nptr, endptr, base); - 56fa: 4629 li a2,10 - 56fc: 4581 li a1,0 - 56fe: bf21 j 5616 + 5756: 4629 li a2,10 + 5758: 4581 li a1,0 + 575a: bf21 j 5672 -0000000000005700 : +000000000000575c : long atol(const char *nptr) { return strtol(nptr, NULL, 10); } long long atoll(const char *nptr) { return strtoll(nptr, NULL, 10); } - 5700: 4629 li a2,10 - 5702: 4581 li a1,0 - 5704: bf09 j 5616 + 575c: 4629 li a2,10 + 575e: 4581 li a1,0 + 5760: bf09 j 5672 -0000000000005706 : - 5706: 02000693 li a3,32 - 570a: 4611 li a2,4 +0000000000005762 : + 5762: 02000693 li a3,32 + 5766: 4611 li a2,4 { double val = 0.0; int sign = 1; const char *s = nptr; while (isspace(*s)) - 570c: 00054783 lbu a5,0(a0) - 5710: ff77871b addiw a4,a5,-9 - 5714: 0ff77713 zext.b a4,a4 - 5718: 06d78263 beq a5,a3,577c - 571c: 06e67063 bgeu a2,a4,577c + 5768: 00054783 lbu a5,0(a0) + 576c: ff77871b addiw a4,a5,-9 + 5770: 0ff77713 zext.b a4,a4 + 5774: 06d78263 beq a5,a3,57d8 + 5778: 06e67063 bgeu a2,a4,57d8 s++; if (*s == '-') - 5720: 02d00713 li a4,45 - 5724: 08e78e63 beq a5,a4,57c0 + 577c: 02d00713 li a4,45 + 5780: 08e78e63 beq a5,a4,581c { sign = -1; s++; } else if (*s == '+') - 5728: 02b00713 li a4,43 - 572c: 0ae78263 beq a5,a4,57d0 - 5730: 00001717 auipc a4,0x1 - 5734: 16873507 fld fa0,360(a4) # 6898 + 5784: 02b00713 li a4,43 + 5788: 0ae78263 beq a5,a4,582c + 578c: 00001717 auipc a4,0x1 + 5790: 18473507 fld fa0,388(a4) # 6910 static inline int isdigit(int c) { return c >= '0' && c <= '9'; } - 5738: fd07861b addiw a2,a5,-48 + 5794: fd07861b addiw a2,a5,-48 s++; while (isdigit(*s)) - 573c: 46a5 li a3,9 - 573e: f20007d3 fmv.d.x fa5,zero - 5742: 8732 mv a4,a2 - 5744: 02c6e363 bltu a3,a2,576a - 5748: 00001797 auipc a5,0x1 - 574c: 1587b687 fld fa3,344(a5) # 68a0 - 5750: 4625 li a2,9 - 5752: 00154783 lbu a5,1(a0) + 5798: 46a5 li a3,9 + 579a: f20007d3 fmv.d.x fa5,zero + 579e: 8732 mv a4,a2 + 57a0: 02c6e363 bltu a3,a2,57c6 + 57a4: 00001797 auipc a5,0x1 + 57a8: 1747b687 fld fa3,372(a5) # 6918 + 57ac: 4625 li a2,9 + 57ae: 00154783 lbu a5,1(a0) { val = val * 10.0 + (*s - '0'); - 5756: d2070753 fcvt.d.w fa4,a4 + 57b2: d2070753 fcvt.d.w fa4,a4 s++; - 575a: 0505 addi a0,a0,1 - 575c: fd07869b addiw a3,a5,-48 + 57b6: 0505 addi a0,a0,1 + 57b8: fd07869b addiw a3,a5,-48 val = val * 10.0 + (*s - '0'); - 5760: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 - 5764: 8736 mv a4,a3 + 57bc: 72d7f7c3 fmadd.d fa5,fa5,fa3,fa4 + 57c0: 8736 mv a4,a3 while (isdigit(*s)) - 5766: fed676e3 bgeu a2,a3,5752 + 57c2: fed676e3 bgeu a2,a3,57ae } if (*s == '.') - 576a: 02e00713 li a4,46 - 576e: 00e78963 beq a5,a4,5780 + 57c6: 02e00713 li a4,46 + 57ca: 00e78963 beq a5,a4,57dc val += (*s - '0') * factor; s++; } } if (endptr) - 5772: c191 beqz a1,5776 + 57ce: c191 beqz a1,57d2 *endptr = (char *)s; - 5774: e188 sd a0,0(a1) + 57d0: e188 sd a0,0(a1) return val * sign; } - 5776: 12a7f553 fmul.d fa0,fa5,fa0 - 577a: 8082 ret + 57d2: 12a7f553 fmul.d fa0,fa5,fa0 + 57d6: 8082 ret s++; - 577c: 0505 addi a0,a0,1 - 577e: b779 j 570c + 57d8: 0505 addi a0,a0,1 + 57da: b779 j 5768 while (isdigit(*s)) - 5780: 00154703 lbu a4,1(a0) - 5784: 46a5 li a3,9 + 57dc: 00154703 lbu a4,1(a0) + 57e0: 46a5 li a3,9 s++; - 5786: 0505 addi a0,a0,1 - 5788: fd07071b addiw a4,a4,-48 - 578c: 87ba mv a5,a4 + 57e2: 0505 addi a0,a0,1 + 57e4: fd07071b addiw a4,a4,-48 + 57e8: 87ba mv a5,a4 while (isdigit(*s)) - 578e: fee6e2e3 bltu a3,a4,5772 + 57ea: fee6e2e3 bltu a3,a4,57ce double factor = 1.0; - 5792: 00001717 auipc a4,0x1 - 5796: 10673707 fld fa4,262(a4) # 6898 - 579a: 00001717 auipc a4,0x1 - 579e: 11e73607 fld fa2,286(a4) # 68b8 + 57ee: 00001717 auipc a4,0x1 + 57f2: 12273707 fld fa4,290(a4) # 6910 + 57f6: 00001717 auipc a4,0x1 + 57fa: 13a73607 fld fa2,314(a4) # 6930 factor *= 0.1; - 57a2: 12c77753 fmul.d fa4,fa4,fa2 + 57fe: 12c77753 fmul.d fa4,fa4,fa2 while (isdigit(*s)) - 57a6: 00154703 lbu a4,1(a0) + 5802: 00154703 lbu a4,1(a0) val += (*s - '0') * factor; - 57aa: d20786d3 fcvt.d.w fa3,a5 + 5806: d20786d3 fcvt.d.w fa3,a5 s++; - 57ae: 0505 addi a0,a0,1 - 57b0: fd07071b addiw a4,a4,-48 - 57b4: 87ba mv a5,a4 + 580a: 0505 addi a0,a0,1 + 580c: fd07071b addiw a4,a4,-48 + 5810: 87ba mv a5,a4 val += (*s - '0') * factor; - 57b6: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 + 5812: 7ae6f7c3 fmadd.d fa5,fa3,fa4,fa5 while (isdigit(*s)) - 57ba: fee6f4e3 bgeu a3,a4,57a2 - 57be: bf55 j 5772 + 5816: fee6f4e3 bgeu a3,a4,57fe + 581a: bf55 j 57ce while (isdigit(*s)) - 57c0: 00154783 lbu a5,1(a0) - 57c4: 00001717 auipc a4,0x1 - 57c8: 0cc73507 fld fa0,204(a4) # 6890 + 581c: 00154783 lbu a5,1(a0) + 5820: 00001717 auipc a4,0x1 + 5824: 0e873507 fld fa0,232(a4) # 6908 s++; - 57cc: 0505 addi a0,a0,1 - 57ce: b7ad j 5738 + 5828: 0505 addi a0,a0,1 + 582a: b7ad j 5794 while (isdigit(*s)) - 57d0: 00154783 lbu a5,1(a0) - 57d4: 00001717 auipc a4,0x1 - 57d8: 0c473507 fld fa0,196(a4) # 6898 + 582c: 00154783 lbu a5,1(a0) + 5830: 00001717 auipc a4,0x1 + 5834: 0e073507 fld fa0,224(a4) # 6910 s++; - 57dc: 0505 addi a0,a0,1 - 57de: bfa9 j 5738 + 5838: 0505 addi a0,a0,1 + 583a: bfa9 j 5794 -00000000000057e0 : +000000000000583c : double atof(const char *nptr) { return strtod(nptr, NULL); } - 57e0: 4581 li a1,0 - 57e2: b715 j 5706 + 583c: 4581 li a1,0 + 583e: b715 j 5762 -00000000000057e4 : +0000000000005840 : float strtof(const char *nptr, char **endptr) { return (float)strtod(nptr, endptr); } - 57e4: 1141 addi sp,sp,-16 - 57e6: e406 sd ra,8(sp) - 57e8: f1fff0ef jal 5706 - 57ec: 60a2 ld ra,8(sp) - 57ee: 40157553 fcvt.s.d fa0,fa0 - 57f2: 0141 addi sp,sp,16 - 57f4: 8082 ret - -00000000000057f6 : + 5840: 1141 addi sp,sp,-16 + 5842: e406 sd ra,8(sp) + 5844: f1fff0ef jal 5762 + 5848: 60a2 ld ra,8(sp) + 584a: 40157553 fcvt.s.d fa0,fa0 + 584e: 0141 addi sp,sp,16 + 5850: 8082 ret + +0000000000005852 : } } void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { if (nmemb < 2 || size == 0) - 57f6: 4785 li a5,1 - 57f8: 0cb7fd63 bgeu a5,a1,58d2 + 5852: 4785 li a5,1 + 5854: 0cb7fd63 bgeu a5,a1,592e { - 57fc: 715d addi sp,sp,-80 - 57fe: f44e sd s3,40(sp) - 5800: e486 sd ra,72(sp) - 5802: 89b2 mv s3,a2 + 5858: 715d addi sp,sp,-80 + 585a: f44e sd s3,40(sp) + 585c: e486 sd ra,72(sp) + 585e: 89b2 mv s3,a2 if (nmemb < 2 || size == 0) - 5804: c279 beqz a2,58ca - 5806: e85a sd s6,16(sp) - 5808: 8b2e mv s6,a1 + 5860: c279 beqz a2,5926 + 5862: e85a sd s6,16(sp) + 5864: 8b2e mv s6,a1 return; char *base_ptr = (char *)base; char *pivot = base_ptr + (nmemb - 1) * size; - 580a: 1b7d addi s6,s6,-1 - 580c: fc26 sd s1,56(sp) - 580e: 033b04b3 mul s1,s6,s3 - 5812: ec56 sd s5,24(sp) - 5814: 8aaa mv s5,a0 - 5816: f052 sd s4,32(sp) - 5818: e45e sd s7,8(sp) - 581a: e0a2 sd s0,64(sp) - 581c: f84a sd s2,48(sp) - 581e: 8a36 mv s4,a3 + 5866: 1b7d addi s6,s6,-1 + 5868: fc26 sd s1,56(sp) + 586a: 033b04b3 mul s1,s6,s3 + 586e: ec56 sd s5,24(sp) + 5870: 8aaa mv s5,a0 + 5872: f052 sd s4,32(sp) + 5874: e45e sd s7,8(sp) + 5876: e0a2 sd s0,64(sp) + 5878: f84a sd s2,48(sp) + 587a: 8a36 mv s4,a3 if (nmemb < 2 || size == 0) - 5820: 4b85 li s7,1 + 587c: 4b85 li s7,1 char *pivot = base_ptr + (nmemb - 1) * size; - 5822: 94d6 add s1,s1,s5 + 587e: 94d6 add s1,s1,s5 char *i = base_ptr; char *j = base_ptr; /* Partition */ for (; j < pivot; j += size) - 5824: 069af763 bgeu s5,s1,5892 + 5880: 069af763 bgeu s5,s1,58ee char *j = base_ptr; - 5828: 8956 mv s2,s5 + 5884: 8956 mv s2,s5 char *i = base_ptr; - 582a: 8456 mv s0,s5 - 582c: a021 j 5834 + 5886: 8456 mv s0,s5 + 5888: a021 j 5890 for (; j < pivot; j += size) - 582e: 994e add s2,s2,s3 - 5830: 00997f63 bgeu s2,s1,584e + 588a: 994e add s2,s2,s3 + 588c: 00997f63 bgeu s2,s1,58aa { if (compar(j, pivot) < 0) - 5834: 85a6 mv a1,s1 - 5836: 854a mv a0,s2 - 5838: 9a02 jalr s4 - 583a: fe055ae3 bgez a0,582e + 5890: 85a6 mv a1,s1 + 5892: 854a mv a0,s2 + 5894: 9a02 jalr s4 + 5896: fe055ae3 bgez a0,588a { if (i != j) - 583e: 05241d63 bne s0,s2,5898 - 5842: 01390633 add a2,s2,s3 + 589a: 05241d63 bne s0,s2,58f4 + 589e: 01390633 add a2,s2,s3 swap_bytes(i, j, size); i += size; - 5846: 8432 mv s0,a2 + 58a2: 8432 mv s0,a2 for (; j < pivot; j += size) - 5848: 994e add s2,s2,s3 - 584a: fe9965e3 bltu s2,s1,5834 + 58a4: 994e add s2,s2,s3 + 58a6: fe9965e3 bltu s2,s1,5890 } } swap_bytes(i, pivot, size); /* Recurse */ size_t left_count = (i - base_ptr) / size; - 584e: 415405b3 sub a1,s0,s5 - 5852: 0335d5b3 divu a1,a1,s3 + 58aa: 415405b3 sub a1,s0,s5 + 58ae: 0335d5b3 divu a1,a1,s3 qsort(base, left_count, size, compar); qsort(i + size, nmemb - left_count - 1, size, compar); - 5856: 40bb0b33 sub s6,s6,a1 + 58b2: 40bb0b33 sub s6,s6,a1 while (size--) - 585a: 013406b3 add a3,s0,s3 + 58b6: 013406b3 add a3,s0,s3 *a++ = *b; - 585e: 0004c703 lbu a4,0(s1) + 58ba: 0004c703 lbu a4,0(s1) temp = *a; - 5862: 00044783 lbu a5,0(s0) + 58be: 00044783 lbu a5,0(s0) *b++ = temp; - 5866: 0485 addi s1,s1,1 + 58c2: 0485 addi s1,s1,1 *a++ = *b; - 5868: 0405 addi s0,s0,1 - 586a: fee40fa3 sb a4,-1(s0) + 58c4: 0405 addi s0,s0,1 + 58c6: fee40fa3 sb a4,-1(s0) *b++ = temp; - 586e: fef48fa3 sb a5,-1(s1) + 58ca: fef48fa3 sb a5,-1(s1) while (size--) - 5872: fed416e3 bne s0,a3,585e + 58ce: fed416e3 bne s0,a3,58ba qsort(base, left_count, size, compar); - 5876: 86d2 mv a3,s4 - 5878: 864e mv a2,s3 - 587a: 8556 mv a0,s5 - 587c: f7bff0ef jal 57f6 + 58d2: 86d2 mv a3,s4 + 58d4: 864e mv a2,s3 + 58d6: 8556 mv a0,s5 + 58d8: f7bff0ef jal 5852 if (nmemb < 2 || size == 0) - 5880: 036bfe63 bgeu s7,s6,58bc + 58dc: 036bfe63 bgeu s7,s6,5918 char *pivot = base_ptr + (nmemb - 1) * size; - 5884: 1b7d addi s6,s6,-1 - 5886: 033b04b3 mul s1,s6,s3 - 588a: 8aa2 mv s5,s0 - 588c: 94d6 add s1,s1,s5 + 58e0: 1b7d addi s6,s6,-1 + 58e2: 033b04b3 mul s1,s6,s3 + 58e6: 8aa2 mv s5,s0 + 58e8: 94d6 add s1,s1,s5 for (; j < pivot; j += size) - 588e: f89aede3 bltu s5,s1,5828 + 58ea: f89aede3 bltu s5,s1,5884 char *i = base_ptr; - 5892: 8456 mv s0,s5 + 58ee: 8456 mv s0,s5 for (; j < pivot; j += size) - 5894: 4581 li a1,0 - 5896: b7d1 j 585a - 5898: 01340633 add a2,s0,s3 + 58f0: 4581 li a1,0 + 58f2: b7d1 j 58b6 + 58f4: 01340633 add a2,s0,s3 if (i != j) - 589c: 874a mv a4,s2 - 589e: 87a2 mv a5,s0 + 58f8: 874a mv a4,s2 + 58fa: 87a2 mv a5,s0 *a++ = *b; - 58a0: 00074683 lbu a3,0(a4) + 58fc: 00074683 lbu a3,0(a4) temp = *a; - 58a4: 0007c803 lbu a6,0(a5) + 5900: 0007c803 lbu a6,0(a5) *b++ = temp; - 58a8: 0705 addi a4,a4,1 + 5904: 0705 addi a4,a4,1 *a++ = *b; - 58aa: 0785 addi a5,a5,1 - 58ac: fed78fa3 sb a3,-1(a5) + 5906: 0785 addi a5,a5,1 + 5908: fed78fa3 sb a3,-1(a5) *b++ = temp; - 58b0: ff070fa3 sb a6,-1(a4) + 590c: ff070fa3 sb a6,-1(a4) while (size--) - 58b4: fec796e3 bne a5,a2,58a0 + 5910: fec796e3 bne a5,a2,58fc i += size; - 58b8: 8432 mv s0,a2 - 58ba: b779 j 5848 - 58bc: 6406 ld s0,64(sp) - 58be: 74e2 ld s1,56(sp) - 58c0: 7942 ld s2,48(sp) - 58c2: 7a02 ld s4,32(sp) - 58c4: 6ae2 ld s5,24(sp) - 58c6: 6b42 ld s6,16(sp) - 58c8: 6ba2 ld s7,8(sp) -} - 58ca: 60a6 ld ra,72(sp) - 58cc: 79a2 ld s3,40(sp) - 58ce: 6161 addi sp,sp,80 - 58d0: 8082 ret - 58d2: 8082 ret - -00000000000058d4 : + 5914: 8432 mv s0,a2 + 5916: b779 j 58a4 + 5918: 6406 ld s0,64(sp) + 591a: 74e2 ld s1,56(sp) + 591c: 7942 ld s2,48(sp) + 591e: 7a02 ld s4,32(sp) + 5920: 6ae2 ld s5,24(sp) + 5922: 6b42 ld s6,16(sp) + 5924: 6ba2 ld s7,8(sp) +} + 5926: 60a6 ld ra,72(sp) + 5928: 79a2 ld s3,40(sp) + 592a: 6161 addi sp,sp,80 + 592c: 8082 ret + 592e: 8082 ret + +0000000000005930 : void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) { - 58d4: 715d addi sp,sp,-80 - 58d6: e486 sd ra,72(sp) - 58d8: fc26 sd s1,56(sp) + 5930: 715d addi sp,sp,-80 + 5932: e486 sd ra,72(sp) + 5934: fc26 sd s1,56(sp) size_t l = 0, u = nmemb; while (l < u) - 58da: c629 beqz a2,5924 - 58dc: f84a sd s2,48(sp) - 58de: f44e sd s3,40(sp) - 58e0: f052 sd s4,32(sp) - 58e2: ec56 sd s5,24(sp) - 58e4: e85a sd s6,16(sp) - 58e6: e45e sd s7,8(sp) - 58e8: e0a2 sd s0,64(sp) - 58ea: 8932 mv s2,a2 - 58ec: 8a2a mv s4,a0 - 58ee: 8aae mv s5,a1 - 58f0: 8b36 mv s6,a3 - 58f2: 8bba mv s7,a4 + 5936: c629 beqz a2,5980 + 5938: f84a sd s2,48(sp) + 593a: f44e sd s3,40(sp) + 593c: f052 sd s4,32(sp) + 593e: ec56 sd s5,24(sp) + 5940: e85a sd s6,16(sp) + 5942: e45e sd s7,8(sp) + 5944: e0a2 sd s0,64(sp) + 5946: 8932 mv s2,a2 + 5948: 8a2a mv s4,a0 + 594a: 8aae mv s5,a1 + 594c: 8b36 mv s6,a3 + 594e: 8bba mv s7,a4 size_t l = 0, u = nmemb; - 58f4: 4981 li s3,0 + 5950: 4981 li s3,0 { size_t idx = (l + u) / 2; - 58f6: 01298433 add s0,s3,s2 - 58fa: 8005 srli s0,s0,0x1 + 5952: 01298433 add s0,s3,s2 + 5956: 8005 srli s0,s0,0x1 const void *p = (void *)((const char *)base + (idx * size)); - 58fc: 036404b3 mul s1,s0,s6 + 5958: 036404b3 mul s1,s0,s6 int cmp = compar(key, p); - 5900: 8552 mv a0,s4 + 595c: 8552 mv a0,s4 const void *p = (void *)((const char *)base + (idx * size)); - 5902: 94d6 add s1,s1,s5 + 595e: 94d6 add s1,s1,s5 int cmp = compar(key, p); - 5904: 85a6 mv a1,s1 - 5906: 9b82 jalr s7 + 5960: 85a6 mv a1,s1 + 5962: 9b82 jalr s7 if (cmp < 0) - 5908: 02054463 bltz a0,5930 + 5964: 02054463 bltz a0,598c u = idx; else if (cmp > 0) - 590c: c515 beqz a0,5938 + 5968: c515 beqz a0,5994 l = idx + 1; - 590e: 00140993 addi s3,s0,1 + 596a: 00140993 addi s3,s0,1 while (l < u) - 5912: ff29e2e3 bltu s3,s2,58f6 - 5916: 6406 ld s0,64(sp) - 5918: 7942 ld s2,48(sp) - 591a: 79a2 ld s3,40(sp) - 591c: 7a02 ld s4,32(sp) - 591e: 6ae2 ld s5,24(sp) - 5920: 6b42 ld s6,16(sp) - 5922: 6ba2 ld s7,8(sp) + 596e: ff29e2e3 bltu s3,s2,5952 + 5972: 6406 ld s0,64(sp) + 5974: 7942 ld s2,48(sp) + 5976: 79a2 ld s3,40(sp) + 5978: 7a02 ld s4,32(sp) + 597a: 6ae2 ld s5,24(sp) + 597c: 6b42 ld s6,16(sp) + 597e: 6ba2 ld s7,8(sp) else return (void *)p; } return NULL; } - 5924: 60a6 ld ra,72(sp) + 5980: 60a6 ld ra,72(sp) return NULL; - 5926: 4481 li s1,0 + 5982: 4481 li s1,0 } - 5928: 8526 mv a0,s1 - 592a: 74e2 ld s1,56(sp) - 592c: 6161 addi sp,sp,80 - 592e: 8082 ret + 5984: 8526 mv a0,s1 + 5986: 74e2 ld s1,56(sp) + 5988: 6161 addi sp,sp,80 + 598a: 8082 ret u = idx; - 5930: 8922 mv s2,s0 + 598c: 8922 mv s2,s0 while (l < u) - 5932: fd29e2e3 bltu s3,s2,58f6 - 5936: b7c5 j 5916 - 5938: 6406 ld s0,64(sp) -} - 593a: 60a6 ld ra,72(sp) - 593c: 7942 ld s2,48(sp) - 593e: 79a2 ld s3,40(sp) - 5940: 7a02 ld s4,32(sp) - 5942: 6ae2 ld s5,24(sp) - 5944: 6b42 ld s6,16(sp) - 5946: 6ba2 ld s7,8(sp) - 5948: 8526 mv a0,s1 - 594a: 74e2 ld s1,56(sp) - 594c: 6161 addi sp,sp,80 - 594e: 8082 ret - -0000000000005950 : + 598e: fd29e2e3 bltu s3,s2,5952 + 5992: b7c5 j 5972 + 5994: 6406 ld s0,64(sp) +} + 5996: 60a6 ld ra,72(sp) + 5998: 7942 ld s2,48(sp) + 599a: 79a2 ld s3,40(sp) + 599c: 7a02 ld s4,32(sp) + 599e: 6ae2 ld s5,24(sp) + 59a0: 6b42 ld s6,16(sp) + 59a2: 6ba2 ld s7,8(sp) + 59a4: 8526 mv a0,s1 + 59a6: 74e2 ld s1,56(sp) + 59a8: 6161 addi sp,sp,80 + 59aa: 8082 ret + +00000000000059ac : /* Math & Mics */ int abs(int j) { return (j < 0) ? -j : j; } - 5950: 41f5579b sraiw a5,a0,0x1f - 5954: 8d3d xor a0,a0,a5 - 5956: 9d1d subw a0,a0,a5 - 5958: 8082 ret + 59ac: 41f5579b sraiw a5,a0,0x1f + 59b0: 8d3d xor a0,a0,a5 + 59b2: 9d1d subw a0,a0,a5 + 59b4: 8082 ret -000000000000595a : +00000000000059b6 : long labs(long j) { return (j < 0) ? -j : j; } - 595a: 43f55793 srai a5,a0,0x3f - 595e: 8d3d xor a0,a0,a5 - 5960: 8d1d sub a0,a0,a5 - 5962: 8082 ret + 59b6: 43f55793 srai a5,a0,0x3f + 59ba: 8d3d xor a0,a0,a5 + 59bc: 8d1d sub a0,a0,a5 + 59be: 8082 ret -0000000000005964 : +00000000000059c0 : long long llabs(long long j) { return (j < 0) ? -j : j; } - 5964: 43f55793 srai a5,a0,0x3f - 5968: 8d3d xor a0,a0,a5 - 596a: 8d1d sub a0,a0,a5 - 596c: 8082 ret + 59c0: 43f55793 srai a5,a0,0x3f + 59c4: 8d3d xor a0,a0,a5 + 59c6: 8d1d sub a0,a0,a5 + 59c8: 8082 ret -000000000000596e
: +00000000000059ca
: div_t div(int numer, int denom) { div_t res = {numer / denom, numer % denom}; - 596e: 02b547bb divw a5,a0,a1 + 59ca: 02b547bb divw a5,a0,a1 { - 5972: 1141 addi sp,sp,-16 + 59ce: 1141 addi sp,sp,-16 return res; } - 5974: 0141 addi sp,sp,16 + 59d0: 0141 addi sp,sp,16 div_t res = {numer / denom, numer % denom}; - 5976: 02b5653b remw a0,a0,a1 + 59d2: 02b5653b remw a0,a0,a1 return res; - 597a: 1782 slli a5,a5,0x20 - 597c: 9381 srli a5,a5,0x20 - 597e: 1502 slli a0,a0,0x20 + 59d6: 1782 slli a5,a5,0x20 + 59d8: 9381 srli a5,a5,0x20 + 59da: 1502 slli a0,a0,0x20 } - 5980: 8d5d or a0,a0,a5 - 5982: 8082 ret + 59dc: 8d5d or a0,a0,a5 + 59de: 8082 ret -0000000000005984 : +00000000000059e0 : ldiv_t ldiv(long numer, long denom) { - 5984: 1141 addi sp,sp,-16 - 5986: 87aa mv a5,a0 + 59e0: 1141 addi sp,sp,-16 + 59e2: 87aa mv a5,a0 ldiv_t res = {numer / denom, numer % denom}; return res; } - 5988: 02b54533 div a0,a0,a1 - 598c: 0141 addi sp,sp,16 - 598e: 02b7e5b3 rem a1,a5,a1 - 5992: 8082 ret + 59e4: 02b54533 div a0,a0,a1 + 59e8: 0141 addi sp,sp,16 + 59ea: 02b7e5b3 rem a1,a5,a1 + 59ee: 8082 ret -0000000000005994 : +00000000000059f0 : lldiv_t lldiv(long long numer, long long denom) { - 5994: 1141 addi sp,sp,-16 - 5996: 87aa mv a5,a0 + 59f0: 1141 addi sp,sp,-16 + 59f2: 87aa mv a5,a0 lldiv_t res = {numer / denom, numer % denom}; return res; } - 5998: 02b54533 div a0,a0,a1 - 599c: 0141 addi sp,sp,16 - 599e: 02b7e5b3 rem a1,a5,a1 - 59a2: 8082 ret + 59f4: 02b54533 div a0,a0,a1 + 59f8: 0141 addi sp,sp,16 + 59fa: 02b7e5b3 rem a1,a5,a1 + 59fe: 8082 ret -00000000000059a4 : +0000000000005a00 : static unsigned long next = 1; int rand(void) { next = next * 1103515245 + 12345; - 59a4: 00003697 auipc a3,0x3 - 59a8: 23c68693 addi a3,a3,572 # 8be0 - 59ac: 629c ld a5,0(a3) - 59ae: 41c65737 lui a4,0x41c65 - 59b2: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5c0ad> - 59b6: 02e787b3 mul a5,a5,a4 - 59ba: 670d lui a4,0x3 - 59bc: 03970713 addi a4,a4,57 # 3039 - 59c0: 97ba add a5,a5,a4 + 5a00: 00003697 auipc a3,0x3 + 5a04: 26068693 addi a3,a3,608 # 8c60 + 5a08: 629c ld a5,0(a3) + 5a0a: 41c65737 lui a4,0x41c65 + 5a0e: e6d70713 addi a4,a4,-403 # 41c64e6d <_ZSt4cerr+0x41c5c02d> + 5a12: 02e787b3 mul a5,a5,a4 + 5a16: 670d lui a4,0x3 + 5a18: 03970713 addi a4,a4,57 # 3039 + 5a1c: 97ba add a5,a5,a4 return (unsigned int)(next / 65536) % 32768; - 59c2: 02179513 slli a0,a5,0x21 + 5a1e: 02179513 slli a0,a5,0x21 next = next * 1103515245 + 12345; - 59c6: e29c sd a5,0(a3) + 5a22: e29c sd a5,0(a3) } - 59c8: 9145 srli a0,a0,0x31 - 59ca: 8082 ret + 5a24: 9145 srli a0,a0,0x31 + 5a26: 8082 ret -00000000000059cc : +0000000000005a28 : void srand(unsigned int seed) { next = seed; } - 59cc: 1502 slli a0,a0,0x20 - 59ce: 9101 srli a0,a0,0x20 - 59d0: 00003797 auipc a5,0x3 - 59d4: 20a7b823 sd a0,528(a5) # 8be0 - 59d8: 8082 ret + 5a28: 1502 slli a0,a0,0x20 + 5a2a: 9101 srli a0,a0,0x20 + 5a2c: 00003797 auipc a5,0x3 + 5a30: 22a7ba23 sd a0,564(a5) # 8c60 + 5a34: 8082 ret -00000000000059da : +0000000000005a36 : /* Stub */ int mblen(const char *s, size_t n) { return (s && *s && n) ? 1 : 0; } - 59da: c901 beqz a0,59ea - 59dc: 00054783 lbu a5,0(a0) - 59e0: 4501 li a0,0 - 59e2: c789 beqz a5,59ec - 59e4: 00b03533 snez a0,a1 - 59e8: 8082 ret - 59ea: 4501 li a0,0 - 59ec: 8082 ret - -00000000000059ee : + 5a36: c901 beqz a0,5a46 + 5a38: 00054783 lbu a5,0(a0) + 5a3c: 4501 li a0,0 + 5a3e: c789 beqz a5,5a48 + 5a40: 00b03533 snez a0,a1 + 5a44: 8082 ret + 5a46: 4501 li a0,0 + 5a48: 8082 ret + +0000000000005a4a : int mbtowc(wchar_t *pwc, const char *s, size_t n) { - 59ee: 87aa mv a5,a0 + 5a4a: 87aa mv a5,a0 if (!s) - 59f0: cd81 beqz a1,5a08 + 5a4c: cd81 beqz a1,5a64 return 0; if (n == 0) return -1; - 59f2: 557d li a0,-1 + 5a4e: 557d li a0,-1 if (n == 0) - 59f4: ca19 beqz a2,5a0a + 5a50: ca19 beqz a2,5a66 if (pwc) - 59f6: c781 beqz a5,59fe + 5a52: c781 beqz a5,5a5a *pwc = (wchar_t)*s; - 59f8: 0005c703 lbu a4,0(a1) - 59fc: c398 sw a4,0(a5) + 5a54: 0005c703 lbu a4,0(a1) + 5a58: c398 sw a4,0(a5) return (*s != 0); - 59fe: 0005c503 lbu a0,0(a1) - 5a02: 00a03533 snez a0,a0 - 5a06: 8082 ret + 5a5a: 0005c503 lbu a0,0(a1) + 5a5e: 00a03533 snez a0,a0 + 5a62: 8082 ret return 0; - 5a08: 4501 li a0,0 + 5a64: 4501 li a0,0 } - 5a0a: 8082 ret + 5a66: 8082 ret -0000000000005a0c : +0000000000005a68 : int wctomb(char *s, wchar_t wchar) { if (!s) - 5a0c: c509 beqz a0,5a16 + 5a68: c509 beqz a0,5a72 return 0; *s = (char)wchar; - 5a0e: 00b50023 sb a1,0(a0) + 5a6a: 00b50023 sb a1,0(a0) return 1; - 5a12: 4505 li a0,1 - 5a14: 8082 ret + 5a6e: 4505 li a0,1 + 5a70: 8082 ret return 0; - 5a16: 4501 li a0,0 + 5a72: 4501 li a0,0 } - 5a18: 8082 ret + 5a74: 8082 ret -0000000000005a1a : +0000000000005a76 : size_t mbstowcs(wchar_t *dest, const char *src, size_t n) { size_t i = 0; while (src[i] && i < n) - 5a1a: 0005c703 lbu a4,0(a1) - 5a1e: cb0d beqz a4,5a50 - 5a20: ca15 beqz a2,5a54 - 5a22: 86aa mv a3,a0 + 5a76: 0005c703 lbu a4,0(a1) + 5a7a: cb0d beqz a4,5aac + 5a7c: ca15 beqz a2,5ab0 + 5a7e: 86aa mv a3,a0 size_t i = 0; - 5a24: 4781 li a5,0 - 5a26: a019 j 5a2c + 5a80: 4781 li a5,0 + 5a82: a019 j 5a88 while (src[i] && i < n) - 5a28: 02f60263 beq a2,a5,5a4c + 5a84: 02f60263 beq a2,a5,5aa8 { dest[i] = (wchar_t)src[i]; i++; - 5a2c: 0785 addi a5,a5,1 + 5a88: 0785 addi a5,a5,1 dest[i] = (wchar_t)src[i]; - 5a2e: c298 sw a4,0(a3) + 5a8a: c298 sw a4,0(a3) while (src[i] && i < n) - 5a30: 00f58733 add a4,a1,a5 - 5a34: 00074703 lbu a4,0(a4) - 5a38: 0691 addi a3,a3,4 - 5a3a: f77d bnez a4,5a28 + 5a8c: 00f58733 add a4,a1,a5 + 5a90: 00074703 lbu a4,0(a4) + 5a94: 0691 addi a3,a3,4 + 5a96: f77d bnez a4,5a84 } if (i < n) - 5a3c: 00c7f763 bgeu a5,a2,5a4a + 5a98: 00c7f763 bgeu a5,a2,5aa6 dest[i] = 0; - 5a40: 00279713 slli a4,a5,0x2 - 5a44: 953a add a0,a0,a4 - 5a46: 00052023 sw zero,0(a0) + 5a9c: 00279713 slli a4,a5,0x2 + 5aa0: 953a add a0,a0,a4 + 5aa2: 00052023 sw zero,0(a0) size_t i = 0; - 5a4a: 863e mv a2,a5 - 5a4c: 8532 mv a0,a2 - 5a4e: 8082 ret - 5a50: 4781 li a5,0 - 5a52: b7ed j 5a3c - 5a54: 4501 li a0,0 + 5aa6: 863e mv a2,a5 + 5aa8: 8532 mv a0,a2 + 5aaa: 8082 ret + 5aac: 4781 li a5,0 + 5aae: b7ed j 5a98 + 5ab0: 4501 li a0,0 return i; } - 5a56: 8082 ret + 5ab2: 8082 ret -0000000000005a58 : +0000000000005ab4 : size_t wcstombs(char *dest, const wchar_t *src, size_t n) { size_t i = 0; while (src[i] && i < n) - 5a58: 4198 lw a4,0(a1) - 5a5a: c71d beqz a4,5a88 - 5a5c: ca05 beqz a2,5a8c - 5a5e: 0591 addi a1,a1,4 + 5ab4: 4198 lw a4,0(a1) + 5ab6: c71d beqz a4,5ae4 + 5ab8: ca05 beqz a2,5ae8 + 5aba: 0591 addi a1,a1,4 size_t i = 0; - 5a60: 4781 li a5,0 - 5a62: a019 j 5a68 + 5abc: 4781 li a5,0 + 5abe: a019 j 5ac4 while (src[i] && i < n) - 5a64: 02f60063 beq a2,a5,5a84 + 5ac0: 02f60063 beq a2,a5,5ae0 { dest[i] = (char)src[i]; - 5a68: 00f506b3 add a3,a0,a5 - 5a6c: 00e68023 sb a4,0(a3) + 5ac4: 00f506b3 add a3,a0,a5 + 5ac8: 00e68023 sb a4,0(a3) while (src[i] && i < n) - 5a70: 4198 lw a4,0(a1) + 5acc: 4198 lw a4,0(a1) i++; - 5a72: 0785 addi a5,a5,1 + 5ace: 0785 addi a5,a5,1 while (src[i] && i < n) - 5a74: 0591 addi a1,a1,4 - 5a76: f77d bnez a4,5a64 + 5ad0: 0591 addi a1,a1,4 + 5ad2: f77d bnez a4,5ac0 } if (i < n) - 5a78: 00c7f563 bgeu a5,a2,5a82 + 5ad4: 00c7f563 bgeu a5,a2,5ade dest[i] = 0; - 5a7c: 953e add a0,a0,a5 - 5a7e: 00050023 sb zero,0(a0) + 5ad8: 953e add a0,a0,a5 + 5ada: 00050023 sb zero,0(a0) size_t i = 0; - 5a82: 863e mv a2,a5 - 5a84: 8532 mv a0,a2 - 5a86: 8082 ret - 5a88: 4781 li a5,0 - 5a8a: b7fd j 5a78 - 5a8c: 4501 li a0,0 + 5ade: 863e mv a2,a5 + 5ae0: 8532 mv a0,a2 + 5ae2: 8082 ret + 5ae4: 4781 li a5,0 + 5ae6: b7fd j 5ad4 + 5ae8: 4501 li a0,0 return i; - 5a8e: 8082 ret + 5aea: 8082 ret -0000000000005a90 : +0000000000005aec : void *memset(void *dst, int c, size_t n) { char *cdst = (char *)dst; for (size_t i = 0; i < n; i++) cdst[i] = (char)c; - 5a90: 0ff5f593 zext.b a1,a1 - 5a94: 87aa mv a5,a0 - 5a96: 00a60733 add a4,a2,a0 + 5aec: 0ff5f593 zext.b a1,a1 + 5af0: 87aa mv a5,a0 + 5af2: 00a60733 add a4,a2,a0 for (size_t i = 0; i < n; i++) - 5a9a: c611 beqz a2,5aa6 + 5af6: c611 beqz a2,5b02 cdst[i] = (char)c; - 5a9c: 00b78023 sb a1,0(a5) + 5af8: 00b78023 sb a1,0(a5) for (size_t i = 0; i < n; i++) - 5aa0: 0785 addi a5,a5,1 - 5aa2: fee79de3 bne a5,a4,5a9c + 5afc: 0785 addi a5,a5,1 + 5afe: fee79de3 bne a5,a4,5af8 return dst; } - 5aa6: 8082 ret + 5b02: 8082 ret -0000000000005aa8 : +0000000000005b04 : void *memmove(void *vdst, const void *vsrc, size_t n) { char *dst = (char *)vdst; const char *src = (const char *)vsrc; if (dst == src) - 5aa8: 02b50d63 beq a0,a1,5ae2 + 5b04: 02b50d63 beq a0,a1,5b3e return vdst; if (src > dst) - 5aac: 00b57e63 bgeu a0,a1,5ac8 + 5b08: 00b57e63 bgeu a0,a1,5b24 { while (n--) - 5ab0: ca0d beqz a2,5ae2 - 5ab2: 962a add a2,a2,a0 + 5b0c: ca0d beqz a2,5b3e + 5b0e: 962a add a2,a2,a0 char *dst = (char *)vdst; - 5ab4: 87aa mv a5,a0 + 5b10: 87aa mv a5,a0 *dst++ = *src++; - 5ab6: 0005c703 lbu a4,0(a1) - 5aba: 0785 addi a5,a5,1 - 5abc: 0585 addi a1,a1,1 - 5abe: fee78fa3 sb a4,-1(a5) + 5b12: 0005c703 lbu a4,0(a1) + 5b16: 0785 addi a5,a5,1 + 5b18: 0585 addi a1,a1,1 + 5b1a: fee78fa3 sb a4,-1(a5) while (n--) - 5ac2: fec79ae3 bne a5,a2,5ab6 - 5ac6: 8082 ret + 5b1e: fec79ae3 bne a5,a2,5b12 + 5b22: 8082 ret } else { dst += n; - 5ac8: 00c50733 add a4,a0,a2 + 5b24: 00c50733 add a4,a0,a2 src += n; - 5acc: 00c587b3 add a5,a1,a2 + 5b28: 00c587b3 add a5,a1,a2 while (n-- > 0) - 5ad0: ca09 beqz a2,5ae2 + 5b2c: ca09 beqz a2,5b3e *--dst = *--src; - 5ad2: fff7c683 lbu a3,-1(a5) - 5ad6: 17fd addi a5,a5,-1 - 5ad8: 177d addi a4,a4,-1 - 5ada: 00d70023 sb a3,0(a4) + 5b2e: fff7c683 lbu a3,-1(a5) + 5b32: 17fd addi a5,a5,-1 + 5b34: 177d addi a4,a4,-1 + 5b36: 00d70023 sb a3,0(a4) while (n-- > 0) - 5ade: fef59ae3 bne a1,a5,5ad2 + 5b3a: fef59ae3 bne a1,a5,5b2e } return vdst; } - 5ae2: 8082 ret + 5b3e: 8082 ret -0000000000005ae4 : +0000000000005b40 : void *memcpy(void *vdst, const void *vsrc, size_t n) { return memmove(vdst, vsrc, n); - 5ae4: b7d1 j 5aa8 + 5b40: b7d1 j 5b04 -0000000000005ae6 : +0000000000005b42 : int memcmp(const void *s1, const void *s2, size_t n) { const unsigned char *p1 = (const unsigned char *)s1; const unsigned char *p2 = (const unsigned char *)s2; while (n--) - 5ae6: c205 beqz a2,5b06 - 5ae8: 962a add a2,a2,a0 - 5aea: a019 j 5af0 - 5aec: 00c50d63 beq a0,a2,5b06 + 5b42: c205 beqz a2,5b62 + 5b44: 962a add a2,a2,a0 + 5b46: a019 j 5b4c + 5b48: 00c50d63 beq a0,a2,5b62 { if (*p1 != *p2) - 5af0: 00054783 lbu a5,0(a0) - 5af4: 0005c703 lbu a4,0(a1) + 5b4c: 00054783 lbu a5,0(a0) + 5b50: 0005c703 lbu a4,0(a1) return *p1 - *p2; p1++; - 5af8: 0505 addi a0,a0,1 + 5b54: 0505 addi a0,a0,1 p2++; - 5afa: 0585 addi a1,a1,1 + 5b56: 0585 addi a1,a1,1 if (*p1 != *p2) - 5afc: fee788e3 beq a5,a4,5aec + 5b58: fee788e3 beq a5,a4,5b48 return *p1 - *p2; - 5b00: 40e7853b subw a0,a5,a4 - 5b04: 8082 ret + 5b5c: 40e7853b subw a0,a5,a4 + 5b60: 8082 ret } return 0; - 5b06: 4501 li a0,0 + 5b62: 4501 li a0,0 } - 5b08: 8082 ret + 5b64: 8082 ret -0000000000005b0a : +0000000000005b66 : void *memchr(const void *s, int c, size_t n) { const unsigned char *p = (const unsigned char *)s; while (n--) - 5b0a: ce09 beqz a2,5b24 + 5b66: ce09 beqz a2,5b80 { if (*p == (unsigned char)c) - 5b0c: 0ff5f593 zext.b a1,a1 - 5b10: 962a add a2,a2,a0 - 5b12: a021 j 5b1a + 5b68: 0ff5f593 zext.b a1,a1 + 5b6c: 962a add a2,a2,a0 + 5b6e: a021 j 5b76 return (void *)p; p++; - 5b14: 0505 addi a0,a0,1 + 5b70: 0505 addi a0,a0,1 while (n--) - 5b16: 00a60763 beq a2,a0,5b24 + 5b72: 00a60763 beq a2,a0,5b80 if (*p == (unsigned char)c) - 5b1a: 00054783 lbu a5,0(a0) - 5b1e: feb79be3 bne a5,a1,5b14 + 5b76: 00054783 lbu a5,0(a0) + 5b7a: feb79be3 bne a5,a1,5b70 } return NULL; } - 5b22: 8082 ret + 5b7e: 8082 ret return NULL; - 5b24: 4501 li a0,0 + 5b80: 4501 li a0,0 } - 5b26: 8082 ret + 5b82: 8082 ret -0000000000005b28 : +0000000000005b84 : /* String Manipulation Functions */ size_t strlen(const char *s) { const char *p = s; while (*p) - 5b28: 00054783 lbu a5,0(a0) - 5b2c: cb89 beqz a5,5b3e + 5b84: 00054783 lbu a5,0(a0) + 5b88: cb89 beqz a5,5b9a const char *p = s; - 5b2e: 87aa mv a5,a0 + 5b8a: 87aa mv a5,a0 while (*p) - 5b30: 0017c703 lbu a4,1(a5) + 5b8c: 0017c703 lbu a4,1(a5) p++; - 5b34: 0785 addi a5,a5,1 + 5b90: 0785 addi a5,a5,1 while (*p) - 5b36: ff6d bnez a4,5b30 + 5b92: ff6d bnez a4,5b8c return (size_t)(p - s); - 5b38: 40a78533 sub a0,a5,a0 - 5b3c: 8082 ret + 5b94: 40a78533 sub a0,a5,a0 + 5b98: 8082 ret while (*p) - 5b3e: 4501 li a0,0 + 5b9a: 4501 li a0,0 } - 5b40: 8082 ret + 5b9c: 8082 ret -0000000000005b42 : +0000000000005b9e : char *strcpy(char *dst, const char *src) { char *os = dst; while ((*dst++ = *src++) != 0) - 5b42: 87aa mv a5,a0 - 5b44: 0005c703 lbu a4,0(a1) - 5b48: 0785 addi a5,a5,1 - 5b4a: 0585 addi a1,a1,1 - 5b4c: fee78fa3 sb a4,-1(a5) - 5b50: fb75 bnez a4,5b44 + 5b9e: 87aa mv a5,a0 + 5ba0: 0005c703 lbu a4,0(a1) + 5ba4: 0785 addi a5,a5,1 + 5ba6: 0585 addi a1,a1,1 + 5ba8: fee78fa3 sb a4,-1(a5) + 5bac: fb75 bnez a4,5ba0 ; return os; } - 5b52: 8082 ret + 5bae: 8082 ret -0000000000005b54 : +0000000000005bb0 : char *strncpy(char *dst, const char *src, size_t n) { char *os = dst; size_t i; for (i = 0; i < n && src[i] != '\0'; i++) - 5b54: 4781 li a5,0 - 5b56: e619 bnez a2,5b64 - 5b58: 8082 ret + 5bb0: 4781 li a5,0 + 5bb2: e619 bnez a2,5bc0 + 5bb4: 8082 ret dst[i] = src[i]; - 5b5a: 00e68023 sb a4,0(a3) + 5bb6: 00e68023 sb a4,0(a3) for (i = 0; i < n && src[i] != '\0'; i++) - 5b5e: 0785 addi a5,a5,1 - 5b60: 02f60263 beq a2,a5,5b84 - 5b64: 00f58733 add a4,a1,a5 - 5b68: 00074703 lbu a4,0(a4) + 5bba: 0785 addi a5,a5,1 + 5bbc: 02f60263 beq a2,a5,5be0 + 5bc0: 00f58733 add a4,a1,a5 + 5bc4: 00074703 lbu a4,0(a4) dst[i] = src[i]; - 5b6c: 00f506b3 add a3,a0,a5 + 5bc8: 00f506b3 add a3,a0,a5 for (i = 0; i < n && src[i] != '\0'; i++) - 5b70: f76d bnez a4,5b5a + 5bcc: f76d bnez a4,5bb6 for (; i < n; i++) - 5b72: 00c7f963 bgeu a5,a2,5b84 - 5b76: 87b6 mv a5,a3 - 5b78: 962a add a2,a2,a0 + 5bce: 00c7f963 bgeu a5,a2,5be0 + 5bd2: 87b6 mv a5,a3 + 5bd4: 962a add a2,a2,a0 dst[i] = '\0'; - 5b7a: 00078023 sb zero,0(a5) + 5bd6: 00078023 sb zero,0(a5) for (; i < n; i++) - 5b7e: 0785 addi a5,a5,1 - 5b80: fec79de3 bne a5,a2,5b7a + 5bda: 0785 addi a5,a5,1 + 5bdc: fec79de3 bne a5,a2,5bd6 return os; } - 5b84: 8082 ret + 5be0: 8082 ret -0000000000005b86 : +0000000000005be2 : char *strcat(char *dst, const char *src) { char *os = dst; while (*dst) - 5b86: 00054783 lbu a5,0(a0) - 5b8a: cf91 beqz a5,5ba6 - 5b8c: 87aa mv a5,a0 - 5b8e: 0017c703 lbu a4,1(a5) + 5be2: 00054783 lbu a5,0(a0) + 5be6: cf91 beqz a5,5c02 + 5be8: 87aa mv a5,a0 + 5bea: 0017c703 lbu a4,1(a5) dst++; - 5b92: 0785 addi a5,a5,1 + 5bee: 0785 addi a5,a5,1 while (*dst) - 5b94: ff6d bnez a4,5b8e + 5bf0: ff6d bnez a4,5bea while ((*dst++ = *src++) != 0) - 5b96: 0005c703 lbu a4,0(a1) - 5b9a: 0785 addi a5,a5,1 - 5b9c: 0585 addi a1,a1,1 - 5b9e: fee78fa3 sb a4,-1(a5) - 5ba2: fb75 bnez a4,5b96 + 5bf2: 0005c703 lbu a4,0(a1) + 5bf6: 0785 addi a5,a5,1 + 5bf8: 0585 addi a1,a1,1 + 5bfa: fee78fa3 sb a4,-1(a5) + 5bfe: fb75 bnez a4,5bf2 ; return os; } - 5ba4: 8082 ret + 5c00: 8082 ret while ((*dst++ = *src++) != 0) - 5ba6: 0005c703 lbu a4,0(a1) + 5c02: 0005c703 lbu a4,0(a1) while (*dst) - 5baa: 87aa mv a5,a0 + 5c06: 87aa mv a5,a0 while ((*dst++ = *src++) != 0) - 5bac: 0785 addi a5,a5,1 - 5bae: fee78fa3 sb a4,-1(a5) - 5bb2: 0585 addi a1,a1,1 - 5bb4: f36d bnez a4,5b96 - 5bb6: 8082 ret + 5c08: 0785 addi a5,a5,1 + 5c0a: fee78fa3 sb a4,-1(a5) + 5c0e: 0585 addi a1,a1,1 + 5c10: f36d bnez a4,5bf2 + 5c12: 8082 ret -0000000000005bb8 : +0000000000005c14 : while (*p) - 5bb8: 00054783 lbu a5,0(a0) + 5c14: 00054783 lbu a5,0(a0) const char *p = s; - 5bbc: 872a mv a4,a0 + 5c18: 872a mv a4,a0 while (*p) - 5bbe: c789 beqz a5,5bc8 - 5bc0: 00174783 lbu a5,1(a4) + 5c1a: c789 beqz a5,5c24 + 5c1c: 00174783 lbu a5,1(a4) p++; - 5bc4: 0705 addi a4,a4,1 + 5c20: 0705 addi a4,a4,1 while (*p) - 5bc6: ffed bnez a5,5bc0 + 5c22: ffed bnez a5,5c1c size_t dest_len = strlen(dst); size_t i; dst += dest_len; for (i = 0; i < n && src[i] != '\0'; i++) - 5bc8: 86ba mv a3,a4 - 5bca: 4781 li a5,0 - 5bcc: 88ba mv a7,a4 - 5bce: ea01 bnez a2,5bde - 5bd0: a839 j 5bee + 5c24: 86ba mv a3,a4 + 5c26: 4781 li a5,0 + 5c28: 88ba mv a7,a4 + 5c2a: ea01 bnez a2,5c3a + 5c2c: a839 j 5c4a dst[i] = src[i]; - 5bd2: 01068023 sb a6,0(a3) + 5c2e: 01068023 sb a6,0(a3) for (i = 0; i < n && src[i] != '\0'; i++) - 5bd6: 00188693 addi a3,a7,1 - 5bda: 00f60d63 beq a2,a5,5bf4 - 5bde: 00f58833 add a6,a1,a5 - 5be2: 00084803 lbu a6,0(a6) - 5be6: 0785 addi a5,a5,1 + 5c32: 00188693 addi a3,a7,1 + 5c36: 00f60d63 beq a2,a5,5c50 + 5c3a: 00f58833 add a6,a1,a5 + 5c3e: 00084803 lbu a6,0(a6) + 5c42: 0785 addi a5,a5,1 dst[i] = src[i]; - 5be8: 88b6 mv a7,a3 + 5c44: 88b6 mv a7,a3 for (i = 0; i < n && src[i] != '\0'; i++) - 5bea: fe0814e3 bnez a6,5bd2 + 5c46: fe0814e3 bnez a6,5c2e dst[i] = '\0'; - 5bee: 00088023 sb zero,0(a7) + 5c4a: 00088023 sb zero,0(a7) return os; } - 5bf2: 8082 ret + 5c4e: 8082 ret dst[i] = '\0'; - 5bf4: 00c708b3 add a7,a4,a2 - 5bf8: 00088023 sb zero,0(a7) + 5c50: 00c708b3 add a7,a4,a2 + 5c54: 00088023 sb zero,0(a7) } - 5bfc: 8082 ret + 5c58: 8082 ret -0000000000005bfe : +0000000000005c5a : int strcmp(const char *p, const char *q) { while (*p && *p == *q) - 5bfe: 00054783 lbu a5,0(a0) - 5c02: e791 bnez a5,5c0e - 5c04: a02d j 5c2e - 5c06: 00054783 lbu a5,0(a0) - 5c0a: cf89 beqz a5,5c24 - 5c0c: 85b6 mv a1,a3 - 5c0e: 0005c703 lbu a4,0(a1) + 5c5a: 00054783 lbu a5,0(a0) + 5c5e: e791 bnez a5,5c6a + 5c60: a02d j 5c8a + 5c62: 00054783 lbu a5,0(a0) + 5c66: cf89 beqz a5,5c80 + 5c68: 85b6 mv a1,a3 + 5c6a: 0005c703 lbu a4,0(a1) { p++; - 5c12: 0505 addi a0,a0,1 + 5c6e: 0505 addi a0,a0,1 q++; - 5c14: 00158693 addi a3,a1,1 + 5c70: 00158693 addi a3,a1,1 while (*p && *p == *q) - 5c18: fef707e3 beq a4,a5,5c06 + 5c74: fef707e3 beq a4,a5,5c62 } return (int)((unsigned char)*p - (unsigned char)*q); - 5c1c: 0007851b sext.w a0,a5 + 5c78: 0007851b sext.w a0,a5 } - 5c20: 9d19 subw a0,a0,a4 - 5c22: 8082 ret + 5c7c: 9d19 subw a0,a0,a4 + 5c7e: 8082 ret return (int)((unsigned char)*p - (unsigned char)*q); - 5c24: 0015c703 lbu a4,1(a1) - 5c28: 4501 li a0,0 + 5c80: 0015c703 lbu a4,1(a1) + 5c84: 4501 li a0,0 } - 5c2a: 9d19 subw a0,a0,a4 - 5c2c: 8082 ret + 5c86: 9d19 subw a0,a0,a4 + 5c88: 8082 ret return (int)((unsigned char)*p - (unsigned char)*q); - 5c2e: 0005c703 lbu a4,0(a1) - 5c32: 4501 li a0,0 - 5c34: b7f5 j 5c20 + 5c8a: 0005c703 lbu a4,0(a1) + 5c8e: 4501 li a0,0 + 5c90: b7f5 j 5c7c -0000000000005c36 : +0000000000005c92 : int strncmp(const char *s1, const char *s2, size_t n) { if (n == 0) - 5c36: ca0d beqz a2,5c68 + 5c92: ca0d beqz a2,5cc4 return 0; while (n-- > 0 && *s1 && *s1 == *s2) - 5c38: 00054783 lbu a5,0(a0) - 5c3c: 167d addi a2,a2,-1 - 5c3e: 00c506b3 add a3,a0,a2 - 5c42: eb89 bnez a5,5c54 - 5c44: a80d j 5c76 + 5c94: 00054783 lbu a5,0(a0) + 5c98: 167d addi a2,a2,-1 + 5c9a: 00c506b3 add a3,a0,a2 + 5c9e: eb89 bnez a5,5cb0 + 5ca0: a80d j 5cd2 { if (n == 0 || *s1 == '\0') - 5c46: 00d50d63 beq a0,a3,5c60 + 5ca2: 00d50d63 beq a0,a3,5cbc while (n-- > 0 && *s1 && *s1 == *s2) - 5c4a: 00154783 lbu a5,1(a0) + 5ca6: 00154783 lbu a5,1(a0) break; s1++; - 5c4e: 0505 addi a0,a0,1 + 5caa: 0505 addi a0,a0,1 while (n-- > 0 && *s1 && *s1 == *s2) - 5c50: cf91 beqz a5,5c6c - 5c52: 85b2 mv a1,a2 - 5c54: 0005c703 lbu a4,0(a1) + 5cac: cf91 beqz a5,5cc8 + 5cae: 85b2 mv a1,a2 + 5cb0: 0005c703 lbu a4,0(a1) s2++; - 5c58: 00158613 addi a2,a1,1 + 5cb4: 00158613 addi a2,a1,1 while (n-- > 0 && *s1 && *s1 == *s2) - 5c5c: fef705e3 beq a4,a5,5c46 + 5cb8: fef705e3 beq a4,a5,5ca2 } return (int)((unsigned char)*s1 - (unsigned char)*s2); - 5c60: 0007851b sext.w a0,a5 - 5c64: 9d19 subw a0,a0,a4 - 5c66: 8082 ret + 5cbc: 0007851b sext.w a0,a5 + 5cc0: 9d19 subw a0,a0,a4 + 5cc2: 8082 ret return 0; - 5c68: 4501 li a0,0 + 5cc4: 4501 li a0,0 } - 5c6a: 8082 ret + 5cc6: 8082 ret return (int)((unsigned char)*s1 - (unsigned char)*s2); - 5c6c: 0015c703 lbu a4,1(a1) - 5c70: 4501 li a0,0 - 5c72: 9d19 subw a0,a0,a4 - 5c74: 8082 ret - 5c76: 0005c703 lbu a4,0(a1) - 5c7a: 4501 li a0,0 - 5c7c: b7e5 j 5c64 + 5cc8: 0015c703 lbu a4,1(a1) + 5ccc: 4501 li a0,0 + 5cce: 9d19 subw a0,a0,a4 + 5cd0: 8082 ret + 5cd2: 0005c703 lbu a4,0(a1) + 5cd6: 4501 li a0,0 + 5cd8: b7e5 j 5cc0 -0000000000005c7e : +0000000000005cda : char *strchr(const char *s, int c) { while (*s != (char)c) - 5c7e: 0ff5f593 zext.b a1,a1 - 5c82: a019 j 5c88 + 5cda: 0ff5f593 zext.b a1,a1 + 5cde: a019 j 5ce4 { if (!*s++) - 5c84: 0505 addi a0,a0,1 - 5c86: c791 beqz a5,5c92 + 5ce0: 0505 addi a0,a0,1 + 5ce2: c791 beqz a5,5cee while (*s != (char)c) - 5c88: 00054783 lbu a5,0(a0) - 5c8c: feb79ce3 bne a5,a1,5c84 - 5c90: 8082 ret + 5ce4: 00054783 lbu a5,0(a0) + 5ce8: feb79ce3 bne a5,a1,5ce0 + 5cec: 8082 ret return NULL; - 5c92: 4501 li a0,0 + 5cee: 4501 li a0,0 } return (char *)s; } - 5c94: 8082 ret + 5cf0: 8082 ret -0000000000005c96 : +0000000000005cf2 : char *strrchr(const char *s, int c) { - 5c96: 87aa mv a5,a0 + 5cf2: 87aa mv a5,a0 const char *last = NULL; do { if (*s == (char)c) - 5c98: 0ff5f593 zext.b a1,a1 + 5cf4: 0ff5f593 zext.b a1,a1 const char *last = NULL; - 5c9c: 4501 li a0,0 + 5cf8: 4501 li a0,0 if (*s == (char)c) - 5c9e: 0007c703 lbu a4,0(a5) - 5ca2: 00e59363 bne a1,a4,5ca8 + 5cfa: 0007c703 lbu a4,0(a5) + 5cfe: 00e59363 bne a1,a4,5d04 last = s; - 5ca6: 853e mv a0,a5 + 5d02: 853e mv a0,a5 } while (*s++); - 5ca8: 0785 addi a5,a5,1 - 5caa: fb75 bnez a4,5c9e + 5d04: 0785 addi a5,a5,1 + 5d06: fb75 bnez a4,5cfa return (char *)last; } - 5cac: 8082 ret + 5d08: 8082 ret -0000000000005cae : +0000000000005d0a : while (*p) - 5cae: 0005c883 lbu a7,0(a1) - 5cb2: 04088a63 beqz a7,5d06 + 5d0a: 0005c883 lbu a7,0(a1) + 5d0e: 04088a63 beqz a7,5d62 const char *p = s; - 5cb6: 87ae mv a5,a1 + 5d12: 87ae mv a5,a1 while (*p) - 5cb8: 0017c703 lbu a4,1(a5) + 5d14: 0017c703 lbu a4,1(a5) p++; - 5cbc: 0785 addi a5,a5,1 + 5d18: 0785 addi a5,a5,1 while (*p) - 5cbe: ff6d bnez a4,5cb8 + 5d1a: ff6d bnez a4,5d14 return (size_t)(p - s); - 5cc0: 40b78833 sub a6,a5,a1 + 5d1c: 40b78833 sub a6,a5,a1 char *strstr(const char *haystack, const char *needle) { size_t n_len = strlen(needle); if (n_len == 0) - 5cc4: 04b78163 beq a5,a1,5d06 + 5d20: 04b78163 beq a5,a1,5d62 return (char *)haystack; for (; *haystack; haystack++) - 5cc8: 00054783 lbu a5,0(a0) - 5ccc: cf85 beqz a5,5d04 - 5cce: 187d addi a6,a6,-1 - 5cd0: 982a add a6,a6,a0 + 5d24: 00054783 lbu a5,0(a0) + 5d28: cf85 beqz a5,5d60 + 5d2a: 187d addi a6,a6,-1 + 5d2c: 982a add a6,a6,a0 { if (*haystack != *needle) - 5cd2: 02f89463 bne a7,a5,5cfa + 5d2e: 02f89463 bne a7,a5,5d56 while (n-- > 0 && *s1 && *s1 == *s2) - 5cd6: 00054703 lbu a4,0(a0) - 5cda: 8646 mv a2,a7 - 5cdc: 86ae mv a3,a1 - 5cde: 87aa mv a5,a0 - 5ce0: eb11 bnez a4,5cf4 - 5ce2: a821 j 5cfa + 5d32: 00054703 lbu a4,0(a0) + 5d36: 8646 mv a2,a7 + 5d38: 86ae mv a3,a1 + 5d3a: 87aa mv a5,a0 + 5d3c: eb11 bnez a4,5d50 + 5d3e: a821 j 5d56 if (n == 0 || *s1 == '\0') - 5ce4: 03078163 beq a5,a6,5d06 + 5d40: 03078163 beq a5,a6,5d62 while (n-- > 0 && *s1 && *s1 == *s2) - 5ce8: 0017c703 lbu a4,1(a5) + 5d44: 0017c703 lbu a4,1(a5) return (int)((unsigned char)*s1 - (unsigned char)*s2); - 5cec: 0006c603 lbu a2,0(a3) + 5d48: 0006c603 lbu a2,0(a3) s1++; - 5cf0: 0785 addi a5,a5,1 + 5d4c: 0785 addi a5,a5,1 while (n-- > 0 && *s1 && *s1 == *s2) - 5cf2: cb19 beqz a4,5d08 + 5d4e: cb19 beqz a4,5d64 s2++; - 5cf4: 0685 addi a3,a3,1 + 5d50: 0685 addi a3,a3,1 while (n-- > 0 && *s1 && *s1 == *s2) - 5cf6: fee607e3 beq a2,a4,5ce4 + 5d52: fee607e3 beq a2,a4,5d40 for (; *haystack; haystack++) - 5cfa: 00154783 lbu a5,1(a0) - 5cfe: 0805 addi a6,a6,1 - 5d00: 0505 addi a0,a0,1 - 5d02: fbe1 bnez a5,5cd2 + 5d56: 00154783 lbu a5,1(a0) + 5d5a: 0805 addi a6,a6,1 + 5d5c: 0505 addi a0,a0,1 + 5d5e: fbe1 bnez a5,5d2e continue; if (strncmp(haystack, needle, n_len) == 0) return (char *)haystack; } return NULL; - 5d04: 4501 li a0,0 + 5d60: 4501 li a0,0 } - 5d06: 8082 ret + 5d62: 8082 ret if (strncmp(haystack, needle, n_len) == 0) - 5d08: de7d beqz a2,5d06 + 5d64: de7d beqz a2,5d62 for (; *haystack; haystack++) - 5d0a: 00154783 lbu a5,1(a0) - 5d0e: 0805 addi a6,a6,1 - 5d10: 0505 addi a0,a0,1 - 5d12: f3e1 bnez a5,5cd2 - 5d14: bfc5 j 5d04 + 5d66: 00154783 lbu a5,1(a0) + 5d6a: 0805 addi a6,a6,1 + 5d6c: 0505 addi a0,a0,1 + 5d6e: f3e1 bnez a5,5d2e + 5d70: bfc5 j 5d60 -0000000000005d16 : +0000000000005d72 : char *strdup(const char *s) { - 5d16: 1101 addi sp,sp,-32 - 5d18: e426 sd s1,8(sp) - 5d1a: ec06 sd ra,24(sp) - 5d1c: e822 sd s0,16(sp) + 5d72: 1101 addi sp,sp,-32 + 5d74: e426 sd s1,8(sp) + 5d76: ec06 sd ra,24(sp) + 5d78: e822 sd s0,16(sp) while (*p) - 5d1e: 00054783 lbu a5,0(a0) + 5d7a: 00054783 lbu a5,0(a0) { - 5d22: 84aa mv s1,a0 + 5d7e: 84aa mv s1,a0 while (*p) - 5d24: cb8d beqz a5,5d56 + 5d80: cb8d beqz a5,5db2 const char *p = s; - 5d26: 862a mv a2,a0 + 5d82: 862a mv a2,a0 while (*p) - 5d28: 00164783 lbu a5,1(a2) + 5d84: 00164783 lbu a5,1(a2) p++; - 5d2c: 0605 addi a2,a2,1 + 5d88: 0605 addi a2,a2,1 while (*p) - 5d2e: ffed bnez a5,5d28 + 5d8a: ffed bnez a5,5d84 return (size_t)(p - s); - 5d30: 8e05 sub a2,a2,s1 + 5d8c: 8e05 sub a2,a2,s1 size_t len = strlen(s) + 1; - 5d32: 00160413 addi s0,a2,1 + 5d8e: 00160413 addi s0,a2,1 char *new_str = (char *)malloc(len); - 5d36: 8522 mv a0,s0 - 5d38: f66ff0ef jal 549e + 5d92: 8522 mv a0,s0 + 5d94: f4eff0ef jal 54e2 if (new_str == NULL) - 5d3c: c901 beqz a0,5d4c + 5d98: c901 beqz a0,5da8 return memmove(vdst, vsrc, n); - 5d3e: 8622 mv a2,s0 + 5d9a: 8622 mv a2,s0 return NULL; return (char *)memcpy(new_str, s, len); } - 5d40: 6442 ld s0,16(sp) - 5d42: 60e2 ld ra,24(sp) + 5d9c: 6442 ld s0,16(sp) + 5d9e: 60e2 ld ra,24(sp) return memmove(vdst, vsrc, n); - 5d44: 85a6 mv a1,s1 + 5da0: 85a6 mv a1,s1 } - 5d46: 64a2 ld s1,8(sp) - 5d48: 6105 addi sp,sp,32 + 5da2: 64a2 ld s1,8(sp) + 5da4: 6105 addi sp,sp,32 return memmove(vdst, vsrc, n); - 5d4a: bbb9 j 5aa8 + 5da6: bbb9 j 5b04 } - 5d4c: 60e2 ld ra,24(sp) - 5d4e: 6442 ld s0,16(sp) - 5d50: 64a2 ld s1,8(sp) - 5d52: 6105 addi sp,sp,32 - 5d54: 8082 ret + 5da8: 60e2 ld ra,24(sp) + 5daa: 6442 ld s0,16(sp) + 5dac: 64a2 ld s1,8(sp) + 5dae: 6105 addi sp,sp,32 + 5db0: 8082 ret while (*p) - 5d56: 4405 li s0,1 - 5d58: bff9 j 5d36 + 5db2: 4405 li s0,1 + 5db4: bff9 j 5d92 -0000000000005d5a : - 5d5a: 0005c783 lbu a5,0(a1) +0000000000005db6 : + 5db6: 0005c783 lbu a5,0(a1) size_t strlcpy(char *dst, const char *src, size_t size) { - 5d5e: 1101 addi sp,sp,-32 - 5d60: ec06 sd ra,24(sp) - 5d62: e822 sd s0,16(sp) - 5d64: 86b2 mv a3,a2 + 5dba: 1101 addi sp,sp,-32 + 5dbc: ec06 sd ra,24(sp) + 5dbe: e822 sd s0,16(sp) + 5dc0: 86b2 mv a3,a2 while (*p) - 5d66: cf8d beqz a5,5da0 + 5dc2: cf8d beqz a5,5dfc const char *p = s; - 5d68: 87ae mv a5,a1 + 5dc4: 87ae mv a5,a1 while (*p) - 5d6a: 0017c703 lbu a4,1(a5) + 5dc6: 0017c703 lbu a4,1(a5) p++; - 5d6e: 0785 addi a5,a5,1 + 5dca: 0785 addi a5,a5,1 while (*p) - 5d70: ff6d bnez a4,5d6a + 5dcc: ff6d bnez a4,5dc6 return (size_t)(p - s); - 5d72: 40b78433 sub s0,a5,a1 + 5dce: 40b78433 sub s0,a5,a1 size_t src_len = strlen(src); if (size > 0) - 5d76: c285 beqz a3,5d96 - 5d78: e426 sd s1,8(sp) + 5dd2: c285 beqz a3,5df2 + 5dd4: e426 sd s1,8(sp) { size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 5d7a: fff68613 addi a2,a3,-1 + 5dd6: fff68613 addi a2,a3,-1 memcpy(dst, src, copy_len); dst[copy_len] = '\0'; - 5d7e: 00c504b3 add s1,a0,a2 + 5dda: 00c504b3 add s1,a0,a2 size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 5d82: 00d47563 bgeu s0,a3,5d8c + 5dde: 00d47563 bgeu s0,a3,5de8 dst[copy_len] = '\0'; - 5d86: 008504b3 add s1,a0,s0 + 5de2: 008504b3 add s1,a0,s0 size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 5d8a: 8622 mv a2,s0 + 5de6: 8622 mv a2,s0 return memmove(vdst, vsrc, n); - 5d8c: d1dff0ef jal 5aa8 + 5de8: d1dff0ef jal 5b04 dst[copy_len] = '\0'; - 5d90: 00048023 sb zero,0(s1) + 5dec: 00048023 sb zero,0(s1) } return src_len; - 5d94: 64a2 ld s1,8(sp) + 5df0: 64a2 ld s1,8(sp) } - 5d96: 60e2 ld ra,24(sp) - 5d98: 8522 mv a0,s0 - 5d9a: 6442 ld s0,16(sp) - 5d9c: 6105 addi sp,sp,32 - 5d9e: 8082 ret + 5df2: 60e2 ld ra,24(sp) + 5df4: 8522 mv a0,s0 + 5df6: 6442 ld s0,16(sp) + 5df8: 6105 addi sp,sp,32 + 5dfa: 8082 ret if (size > 0) - 5da0: e219 bnez a2,5da6 + 5dfc: e219 bnez a2,5e02 return (size_t)(p - s); - 5da2: 4401 li s0,0 - 5da4: bfcd j 5d96 - 5da6: e426 sd s1,8(sp) - 5da8: 4401 li s0,0 + 5dfe: 4401 li s0,0 + 5e00: bfcd j 5df2 + 5e02: e426 sd s1,8(sp) + 5e04: 4401 li s0,0 if (size > 0) - 5daa: 84aa mv s1,a0 + 5e06: 84aa mv s1,a0 size_t copy_len = (src_len >= size) ? size - 1 : src_len; - 5dac: 4601 li a2,0 - 5dae: bff9 j 5d8c + 5e08: 4601 li a2,0 + 5e0a: bff9 j 5de8 -0000000000005db0 : +0000000000005e0c : while (*p) - 5db0: 0005c783 lbu a5,0(a1) + 5e0c: 0005c783 lbu a5,0(a1) size_t strlcat(char *dst, const char *src, size_t size) { - 5db4: 7179 addi sp,sp,-48 - 5db6: e84a sd s2,16(sp) - 5db8: f406 sd ra,40(sp) - 5dba: f022 sd s0,32(sp) - 5dbc: ec26 sd s1,24(sp) - 5dbe: 892a mv s2,a0 + 5e10: 7179 addi sp,sp,-48 + 5e12: e84a sd s2,16(sp) + 5e14: f406 sd ra,40(sp) + 5e16: f022 sd s0,32(sp) + 5e18: ec26 sd s1,24(sp) + 5e1a: 892a mv s2,a0 while (*p) - 5dc0: c7b5 beqz a5,5e2c + 5e1c: c7b5 beqz a5,5e88 const char *p = s; - 5dc2: 87ae mv a5,a1 + 5e1e: 87ae mv a5,a1 while (*p) - 5dc4: 0017c703 lbu a4,1(a5) + 5e20: 0017c703 lbu a4,1(a5) p++; - 5dc8: 0785 addi a5,a5,1 + 5e24: 0785 addi a5,a5,1 while (*p) - 5dca: ff6d bnez a4,5dc4 + 5e26: ff6d bnez a4,5e20 return (size_t)(p - s); - 5dcc: 40b784b3 sub s1,a5,a1 + 5e28: 40b784b3 sub s1,a5,a1 size_t dst_len = 0; - 5dd0: 4401 li s0,0 + 5e2c: 4401 li s0,0 size_t src_len = strlen(src); while (dst_len < size && dst[dst_len] != '\0') - 5dd2: e609 bnez a2,5ddc - 5dd4: a0a1 j 5e1c + 5e2e: e609 bnez a2,5e38 + 5e30: a0a1 j 5e78 dst_len++; - 5dd6: 0405 addi s0,s0,1 + 5e32: 0405 addi s0,s0,1 while (dst_len < size && dst[dst_len] != '\0') - 5dd8: 04860263 beq a2,s0,5e1c - 5ddc: 00890533 add a0,s2,s0 - 5de0: 00054783 lbu a5,0(a0) - 5de4: fbed bnez a5,5dd6 + 5e34: 04860263 beq a2,s0,5e78 + 5e38: 00890533 add a0,s2,s0 + 5e3c: 00054783 lbu a5,0(a0) + 5e40: fbed bnez a5,5e32 if (dst_len == size) - 5de6: 02860b63 beq a2,s0,5e1c - 5dea: e44e sd s3,8(sp) + 5e42: 02860b63 beq a2,s0,5e78 + 5e46: e44e sd s3,8(sp) return size + src_len; size_t space_left = size - dst_len; - 5dec: 408607b3 sub a5,a2,s0 + 5e48: 408607b3 sub a5,a2,s0 size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 5df0: 89a6 mv s3,s1 - 5df2: 02f4f263 bgeu s1,a5,5e16 + 5e4c: 89a6 mv s3,s1 + 5e4e: 02f4f263 bgeu s1,a5,5e72 memcpy(dst + dst_len, src, copy_len); dst[dst_len + copy_len] = '\0'; - 5df6: 994e add s2,s2,s3 - 5df8: 9922 add s2,s2,s0 + 5e52: 994e add s2,s2,s3 + 5e54: 9922 add s2,s2,s0 return memmove(vdst, vsrc, n); - 5dfa: 864e mv a2,s3 - 5dfc: cadff0ef jal 5aa8 + 5e56: 864e mv a2,s3 + 5e58: cadff0ef jal 5b04 dst[dst_len + copy_len] = '\0'; - 5e00: 00090023 sb zero,0(s2) + 5e5c: 00090023 sb zero,0(s2) # 1000 return dst_len + src_len; - 5e04: 00940533 add a0,s0,s1 + 5e60: 00940533 add a0,s0,s1 } - 5e08: 70a2 ld ra,40(sp) - 5e0a: 7402 ld s0,32(sp) + 5e64: 70a2 ld ra,40(sp) + 5e66: 7402 ld s0,32(sp) return dst_len + src_len; - 5e0c: 69a2 ld s3,8(sp) + 5e68: 69a2 ld s3,8(sp) } - 5e0e: 64e2 ld s1,24(sp) - 5e10: 6942 ld s2,16(sp) - 5e12: 6145 addi sp,sp,48 - 5e14: 8082 ret + 5e6a: 64e2 ld s1,24(sp) + 5e6c: 6942 ld s2,16(sp) + 5e6e: 6145 addi sp,sp,48 + 5e70: 8082 ret size_t copy_len = (src_len >= space_left) ? space_left - 1 : src_len; - 5e16: fff78993 addi s3,a5,-1 - 5e1a: bff1 j 5df6 + 5e72: fff78993 addi s3,a5,-1 + 5e76: bff1 j 5e52 } - 5e1c: 70a2 ld ra,40(sp) - 5e1e: 7402 ld s0,32(sp) - 5e20: 6942 ld s2,16(sp) + 5e78: 70a2 ld ra,40(sp) + 5e7a: 7402 ld s0,32(sp) + 5e7c: 6942 ld s2,16(sp) return size + src_len; - 5e22: 00960533 add a0,a2,s1 + 5e7e: 00960533 add a0,a2,s1 } - 5e26: 64e2 ld s1,24(sp) - 5e28: 6145 addi sp,sp,48 - 5e2a: 8082 ret + 5e82: 64e2 ld s1,24(sp) + 5e84: 6145 addi sp,sp,48 + 5e86: 8082 ret while (*p) - 5e2c: 4481 li s1,0 - 5e2e: b74d j 5dd0 + 5e88: 4481 li s1,0 + 5e8a: b74d j 5e2c -0000000000005e30 : +0000000000005e8c : size_t strspn(const char *s, const char *accept) { const char *p = s; const char *a; while (*p) - 5e30: 00054683 lbu a3,0(a0) - 5e34: c695 beqz a3,5e60 + 5e8c: 00054683 lbu a3,0(a0) + 5e90: c695 beqz a3,5ebc { for (a = accept; *a; a++) - 5e36: 0005c803 lbu a6,0(a1) - 5e3a: 862a mv a2,a0 - 5e3c: 00080f63 beqz a6,5e5a - 5e40: 87ae mv a5,a1 - 5e42: 8742 mv a4,a6 - 5e44: a021 j 5e4c - 5e46: 0007c703 lbu a4,0(a5) - 5e4a: cb01 beqz a4,5e5a - 5e4c: 0785 addi a5,a5,1 + 5e92: 0005c803 lbu a6,0(a1) + 5e96: 862a mv a2,a0 + 5e98: 00080f63 beqz a6,5eb6 + 5e9c: 87ae mv a5,a1 + 5e9e: 8742 mv a4,a6 + 5ea0: a021 j 5ea8 + 5ea2: 0007c703 lbu a4,0(a5) + 5ea6: cb01 beqz a4,5eb6 + 5ea8: 0785 addi a5,a5,1 { if (*p == *a) - 5e4e: fee69ce3 bne a3,a4,5e46 + 5eaa: fee69ce3 bne a3,a4,5ea2 while (*p) - 5e52: 00164683 lbu a3,1(a2) + 5eae: 00164683 lbu a3,1(a2) break; } if (*a == '\0') return (size_t)(p - s); p++; - 5e56: 0605 addi a2,a2,1 + 5eb2: 0605 addi a2,a2,1 while (*p) - 5e58: f6e5 bnez a3,5e40 + 5eb4: f6e5 bnez a3,5e9c } return (size_t)(p - s); - 5e5a: 40a60533 sub a0,a2,a0 - 5e5e: 8082 ret + 5eb6: 40a60533 sub a0,a2,a0 + 5eba: 8082 ret while (*p) - 5e60: 4501 li a0,0 + 5ebc: 4501 li a0,0 } - 5e62: 8082 ret + 5ebe: 8082 ret -0000000000005e64 : +0000000000005ec0 : size_t strcspn(const char *s, const char *reject) { const char *p = s; const char *r; while (*p) - 5e64: 00054683 lbu a3,0(a0) - 5e68: ce85 beqz a3,5ea0 + 5ec0: 00054683 lbu a3,0(a0) + 5ec4: ce85 beqz a3,5efc { for (r = reject; *r; r++) - 5e6a: 0005c803 lbu a6,0(a1) + 5ec6: 0005c803 lbu a6,0(a1) const char *p = s; - 5e6e: 862a mv a2,a0 + 5eca: 862a mv a2,a0 for (r = reject; *r; r++) - 5e70: 02080363 beqz a6,5e96 - 5e74: 87ae mv a5,a1 - 5e76: 8742 mv a4,a6 - 5e78: a021 j 5e80 - 5e7a: 0007c703 lbu a4,0(a5) - 5e7e: c719 beqz a4,5e8c - 5e80: 0785 addi a5,a5,1 + 5ecc: 02080363 beqz a6,5ef2 + 5ed0: 87ae mv a5,a1 + 5ed2: 8742 mv a4,a6 + 5ed4: a021 j 5edc + 5ed6: 0007c703 lbu a4,0(a5) + 5eda: c719 beqz a4,5ee8 + 5edc: 0785 addi a5,a5,1 { if (*p == *r) - 5e82: fed71ce3 bne a4,a3,5e7a + 5ede: fed71ce3 bne a4,a3,5ed6 return (size_t)(p - s); } p++; } return (size_t)(p - s); - 5e86: 40a60533 sub a0,a2,a0 - 5e8a: 8082 ret + 5ee2: 40a60533 sub a0,a2,a0 + 5ee6: 8082 ret while (*p) - 5e8c: 00164683 lbu a3,1(a2) + 5ee8: 00164683 lbu a3,1(a2) p++; - 5e90: 0605 addi a2,a2,1 + 5eec: 0605 addi a2,a2,1 while (*p) - 5e92: f2ed bnez a3,5e74 - 5e94: bfcd j 5e86 - 5e96: 00164683 lbu a3,1(a2) + 5eee: f2ed bnez a3,5ed0 + 5ef0: bfcd j 5ee2 + 5ef2: 00164683 lbu a3,1(a2) p++; - 5e9a: 0605 addi a2,a2,1 + 5ef6: 0605 addi a2,a2,1 while (*p) - 5e9c: feed bnez a3,5e96 - 5e9e: b7e5 j 5e86 - 5ea0: 4501 li a0,0 + 5ef8: feed bnez a3,5ef2 + 5efa: b7e5 j 5ee2 + 5efc: 4501 li a0,0 } - 5ea2: 8082 ret + 5efe: 8082 ret -0000000000005ea4 : +0000000000005f00 : char *strpbrk(const char *s, const char *accept) { const char *a; while (*s) - 5ea4: 00054683 lbu a3,0(a0) - 5ea8: c295 beqz a3,5ecc + 5f00: 00054683 lbu a3,0(a0) + 5f04: c295 beqz a3,5f28 { for (a = accept; *a; a++) - 5eaa: 0005c603 lbu a2,0(a1) - 5eae: c20d beqz a2,5ed0 - 5eb0: 87ae mv a5,a1 - 5eb2: 8732 mv a4,a2 - 5eb4: a021 j 5ebc - 5eb6: 0007c703 lbu a4,0(a5) - 5eba: c709 beqz a4,5ec4 - 5ebc: 0785 addi a5,a5,1 + 5f06: 0005c603 lbu a2,0(a1) + 5f0a: c20d beqz a2,5f2c + 5f0c: 87ae mv a5,a1 + 5f0e: 8732 mv a4,a2 + 5f10: a021 j 5f18 + 5f12: 0007c703 lbu a4,0(a5) + 5f16: c709 beqz a4,5f20 + 5f18: 0785 addi a5,a5,1 { if (*s == *a) - 5ebe: fed71ce3 bne a4,a3,5eb6 + 5f1a: fed71ce3 bne a4,a3,5f12 return (char *)s; } s++; } return NULL; } - 5ec2: 8082 ret + 5f1e: 8082 ret while (*s) - 5ec4: 00154683 lbu a3,1(a0) + 5f20: 00154683 lbu a3,1(a0) s++; - 5ec8: 0505 addi a0,a0,1 + 5f24: 0505 addi a0,a0,1 while (*s) - 5eca: f2fd bnez a3,5eb0 + 5f26: f2fd bnez a3,5f0c return NULL; - 5ecc: 4501 li a0,0 + 5f28: 4501 li a0,0 } - 5ece: 8082 ret + 5f2a: 8082 ret while (*s) - 5ed0: 00154683 lbu a3,1(a0) + 5f2c: 00154683 lbu a3,1(a0) s++; - 5ed4: 0505 addi a0,a0,1 + 5f30: 0505 addi a0,a0,1 while (*s) - 5ed6: feed bnez a3,5ed0 - 5ed8: bfd5 j 5ecc + 5f32: feed bnez a3,5f2c + 5f34: bfd5 j 5f28 -0000000000005eda : +0000000000005f36 : char *strtok(char *str, const char *delim) { static char *olds; char *token; if (str == NULL) - 5eda: 00003897 auipc a7,0x3 - 5ede: ece88893 addi a7,a7,-306 # 8da8 - 5ee2: cd25 beqz a0,5f5a + 5f36: 00003897 auipc a7,0x3 + 5f3a: ef288893 addi a7,a7,-270 # 8e28 + 5f3e: cd25 beqz a0,5fb6 while (*p) - 5ee4: 00054683 lbu a3,0(a0) - 5ee8: c295 beqz a3,5f0c + 5f40: 00054683 lbu a3,0(a0) + 5f44: c295 beqz a3,5f68 for (a = accept; *a; a++) - 5eea: 0005c803 lbu a6,0(a1) - 5eee: 02080463 beqz a6,5f16 - 5ef2: 87ae mv a5,a1 - 5ef4: 8742 mv a4,a6 - 5ef6: a021 j 5efe - 5ef8: 0007c703 lbu a4,0(a5) - 5efc: cf09 beqz a4,5f16 - 5efe: 0785 addi a5,a5,1 + 5f46: 0005c803 lbu a6,0(a1) + 5f4a: 02080463 beqz a6,5f72 + 5f4e: 87ae mv a5,a1 + 5f50: 8742 mv a4,a6 + 5f52: a021 j 5f5a + 5f54: 0007c703 lbu a4,0(a5) + 5f58: cf09 beqz a4,5f72 + 5f5a: 0785 addi a5,a5,1 if (*p == *a) - 5f00: fee69ce3 bne a3,a4,5ef8 + 5f5c: fee69ce3 bne a3,a4,5f54 while (*p) - 5f04: 00154683 lbu a3,1(a0) + 5f60: 00154683 lbu a3,1(a0) p++; - 5f08: 0505 addi a0,a0,1 + 5f64: 0505 addi a0,a0,1 while (*p) - 5f0a: f6e5 bnez a3,5ef2 - 5f0c: 87aa mv a5,a0 + 5f66: f6e5 bnez a3,5f4e + 5f68: 87aa mv a5,a0 str = olds; str += strspn(str, delim); if (*str == '\0') { olds = str; - 5f0e: 00f8b023 sd a5,0(a7) + 5f6a: 00f8b023 sd a5,0(a7) return NULL; - 5f12: 4501 li a0,0 + 5f6e: 4501 li a0,0 *str = '\0'; olds = str + 1; } return token; } - 5f14: 8082 ret + 5f70: 8082 ret if (*str == '\0') - 5f16: 00054603 lbu a2,0(a0) - 5f1a: da6d beqz a2,5f0c - 5f1c: 86aa mv a3,a0 + 5f72: 00054603 lbu a2,0(a0) + 5f76: da6d beqz a2,5f68 + 5f78: 86aa mv a3,a0 for (a = accept; *a; a++) - 5f1e: 04080163 beqz a6,5f60 - 5f22: 8742 mv a4,a6 - 5f24: 87ae mv a5,a1 - 5f26: a021 j 5f2e - 5f28: 0007c703 lbu a4,0(a5) - 5f2c: cb19 beqz a4,5f42 - 5f2e: 0785 addi a5,a5,1 + 5f7a: 04080163 beqz a6,5fbc + 5f7e: 8742 mv a4,a6 + 5f80: 87ae mv a5,a1 + 5f82: a021 j 5f8a + 5f84: 0007c703 lbu a4,0(a5) + 5f88: cb19 beqz a4,5f9e + 5f8a: 0785 addi a5,a5,1 if (*s == *a) - 5f30: fee61ce3 bne a2,a4,5f28 + 5f8c: fee61ce3 bne a2,a4,5f84 olds = str + 1; - 5f34: 00168793 addi a5,a3,1 + 5f90: 00168793 addi a5,a3,1 *str = '\0'; - 5f38: 00068023 sb zero,0(a3) + 5f94: 00068023 sb zero,0(a3) olds = str; - 5f3c: 00f8b023 sd a5,0(a7) + 5f98: 00f8b023 sd a5,0(a7) } - 5f40: 8082 ret + 5f9c: 8082 ret while (*s) - 5f42: 0016c603 lbu a2,1(a3) + 5f9e: 0016c603 lbu a2,1(a3) s++; - 5f46: 0685 addi a3,a3,1 + 5fa2: 0685 addi a3,a3,1 while (*s) - 5f48: fe69 bnez a2,5f22 - 5f4a: 87aa mv a5,a0 + 5fa4: fe69 bnez a2,5f7e + 5fa6: 87aa mv a5,a0 while (*s != (char)c) - 5f4c: 0017c703 lbu a4,1(a5) + 5fa8: 0017c703 lbu a4,1(a5) if (!*s++) - 5f50: 0785 addi a5,a5,1 + 5fac: 0785 addi a5,a5,1 while (*s != (char)c) - 5f52: ff6d bnez a4,5f4c + 5fae: ff6d bnez a4,5fa8 olds = str; - 5f54: 00f8b023 sd a5,0(a7) + 5fb0: 00f8b023 sd a5,0(a7) } - 5f58: 8082 ret + 5fb4: 8082 ret str = olds; - 5f5a: 0008b503 ld a0,0(a7) - 5f5e: b759 j 5ee4 + 5fb6: 0008b503 ld a0,0(a7) + 5fba: b759 j 5f40 while (*s) - 5f60: 0016c603 lbu a2,1(a3) + 5fbc: 0016c603 lbu a2,1(a3) s++; - 5f64: 0685 addi a3,a3,1 + 5fc0: 0685 addi a3,a3,1 while (*s) - 5f66: fe6d bnez a2,5f60 - 5f68: b7cd j 5f4a + 5fc2: fe6d bnez a2,5fbc + 5fc4: b7cd j 5fa6 -0000000000005f6a : +0000000000005fc6 : char *strerror(int errnum) { - 5f6a: 87aa mv a5,a0 + 5fc6: 87aa mv a5,a0 switch (errnum) - 5f6c: cd09 beqz a0,5f86 - 5f6e: 4731 li a4,12 - 5f70: 00000517 auipc a0,0x0 - 5f74: 22850513 addi a0,a0,552 # 6198 <_GLOBAL__sub_I__ZSt3cin+0x1f0> - 5f78: 00e78b63 beq a5,a4,5f8e + 5fc8: cd09 beqz a0,5fe2 + 5fca: 4731 li a4,12 + 5fcc: 00000517 auipc a0,0x0 + 5fd0: 24450513 addi a0,a0,580 # 6210 <_GLOBAL__sub_I__ZSt3cin+0x20c> + 5fd4: 00e78b63 beq a5,a4,5fea return "Success"; // case EINVAL: return "Invalid argument"; case ENOMEM: return "Out of memory"; default: return "Unknown error"; - 5f7c: 00000517 auipc a0,0x0 - 5f80: 22c50513 addi a0,a0,556 # 61a8 <_GLOBAL__sub_I__ZSt3cin+0x200> - 5f84: 8082 ret + 5fd8: 00000517 auipc a0,0x0 + 5fdc: 24850513 addi a0,a0,584 # 6220 <_GLOBAL__sub_I__ZSt3cin+0x21c> + 5fe0: 8082 ret return "Success"; - 5f86: 00000517 auipc a0,0x0 - 5f8a: 20a50513 addi a0,a0,522 # 6190 <_GLOBAL__sub_I__ZSt3cin+0x1e8> + 5fe2: 00000517 auipc a0,0x0 + 5fe6: 22650513 addi a0,a0,550 # 6208 <_GLOBAL__sub_I__ZSt3cin+0x204> } - 5f8e: 8082 ret + 5fea: 8082 ret -0000000000005f90 <_Znwm>: +0000000000005fec <_Znwm>: #include "ulib/stdlib.h" void *operator new(unsigned long n) { return malloc(n); - 5f90: d0eff06f j 549e + 5fec: cf6ff06f j 54e2 -0000000000005f94 <_Znam>: +0000000000005ff0 <_Znam>: } void *operator new[](unsigned long n) - 5f94: d0aff06f j 549e + 5ff0: cf2ff06f j 54e2 -0000000000005f98 <_ZdlPv>: +0000000000005ff4 <_ZdlPv>: return malloc(n); } void operator delete(void *p) { free(p); - 5f98: c90ff06f j 5428 + 5ff4: c78ff06f j 546c -0000000000005f9c <_ZdaPv>: +0000000000005ff8 <_ZdaPv>: } void operator delete[](void *p) - 5f9c: c8cff06f j 5428 + 5ff8: c74ff06f j 546c -0000000000005fa0 <_ZdlPvm>: +0000000000005ffc <_ZdlPvm>: free(p); } void operator delete(void *p, unsigned long) { free(p); - 5fa0: c88ff06f j 5428 + 5ffc: c70ff06f j 546c -0000000000005fa4 <_ZdaPvm>: +0000000000006000 <_ZdaPvm>: } void operator delete[](void *p, unsigned long) - 5fa4: c84ff06f j 5428 + 6000: c6cff06f j 546c -0000000000005fa8 <_GLOBAL__sub_I__ZSt3cin>: +0000000000006004 <_GLOBAL__sub_I__ZSt3cin>: #include "ulib/iostream" namespace std { istream cin(stdin); - 5fa8: 00003797 auipc a5,0x3 - 5fac: c507b783 ld a5,-944(a5) # 8bf8 <_GLOBAL_OFFSET_TABLE_+0x10> - 5fb0: 6390 ld a2,0(a5) + 6004: 00003797 auipc a5,0x3 + 6008: c747b783 ld a5,-908(a5) # 8c78 <_GLOBAL_OFFSET_TABLE_+0x10> + 600c: 6390 ld a2,0(a5) ostream cout(stdout); - 5fb2: 00003797 auipc a5,0x3 - 5fb6: c3e7b783 ld a5,-962(a5) # 8bf0 <_GLOBAL_OFFSET_TABLE_+0x8> - 5fba: 6394 ld a3,0(a5) + 600e: 00003797 auipc a5,0x3 + 6012: c627b783 ld a5,-926(a5) # 8c70 <_GLOBAL_OFFSET_TABLE_+0x8> + 6016: 6394 ld a3,0(a5) ostream cerr(stderr); - 5fbc: 00003797 auipc a5,0x3 - 5fc0: c447b783 ld a5,-956(a5) # 8c00 <_GLOBAL_OFFSET_TABLE_+0x18> - 5fc4: 6398 ld a4,0(a5) + 6018: 00003797 auipc a5,0x3 + 601c: c687b783 ld a5,-920(a5) # 8c80 <_GLOBAL_OFFSET_TABLE_+0x18> + 6020: 6398 ld a4,0(a5) class istream{ private: FILE* _stream; public: istream(FILE *f) : _stream(f) {} - 5fc6: 00003797 auipc a5,0x3 - 5fca: dea78793 addi a5,a5,-534 # 8db0 <_ZSt3cin> - 5fce: e390 sd a2,0(a5) + 6022: 00003797 auipc a5,0x3 + 6026: e0e78793 addi a5,a5,-498 # 8e30 <_ZSt3cin> + 602a: e390 sd a2,0(a5) ostream(FILE* f) : _stream(f) {} - 5fd0: e794 sd a3,8(a5) - 5fd2: eb98 sd a4,16(a5) + 602c: e794 sd a3,8(a5) + 602e: eb98 sd a4,16(a5) } // namespace std - 5fd4: 8082 ret + 6030: 8082 ret diff --git a/build/user/sh.o b/build/user/sh.o index 9b63896..5f4f77b 100644 Binary files a/build/user/sh.o and b/build/user/sh.o differ diff --git a/fs.img b/fs.img index 5053f9d..fe54f88 100644 Binary files a/fs.img and b/fs.img differ diff --git a/include/kernel/proc_def.h b/include/kernel/proc_def.h index 06c80aa..5ce4c03 100644 --- a/include/kernel/proc_def.h +++ b/include/kernel/proc_def.h @@ -59,6 +59,10 @@ struct Proc struct Proc *next; struct Proc *prev; + + struct Proc *all_next; + struct Proc *all_prev; + int priority; int ticks; struct cpu *cpu; diff --git a/include/kernel/riscv.h b/include/kernel/riscv.h index e81976f..0c586a9 100644 --- a/include/kernel/riscv.h +++ b/include/kernel/riscv.h @@ -376,7 +376,8 @@ typedef uint64 *pagetable_t; // 512 PTEs #define PTE_X (1L << 3) #define PTE_U (1L << 4) // user can access - +// COW Flag (PTE bit 8) +#define PTE_COW (1L << 8) #if defined(LAB_MMAP) || defined(LAB_PGTBL) || defined(LAB_COW) #define PTE_LEAF(pte) (((pte) & PTE_R) | ((pte) & PTE_W) | ((pte) & PTE_X)) diff --git a/src/kernel/mm/vm.cc b/src/kernel/mm/vm.cc index 41d1aa1..1155d2c 100644 --- a/src/kernel/mm/vm.cc +++ b/src/kernel/mm/vm.cc @@ -5,9 +5,6 @@ #include "lib/string.h" #include "drivers/uart.h" -// COW Flag (PTE bit 8) -#define PTE_COW (1L << 8) - extern "C" { extern char kernel_end[]; diff --git a/src/kernel/proc/exec.cc b/src/kernel/proc/exec.cc index d0e75ef..22e4842 100644 --- a/src/kernel/proc/exec.cc +++ b/src/kernel/proc/exec.cc @@ -129,15 +129,19 @@ namespace Exec // Prepare user stack uint64 sz = PGROUNDUP(vm_guard.sz); - uint64 sz1 = VM::uvmalloc(vm_guard.pagetable, sz, sz + 2 * PGSIZE, PTE_W | PTE_R | PTE_U); + + const int stack_data_pages = 16; + const int stack_total_pages = stack_data_pages + 1; + + uint64 sz1 = VM::uvmalloc(vm_guard.pagetable, sz, sz + stack_total_pages * PGSIZE, PTE_W | PTE_R | PTE_U); if (sz1 == 0) return -1; vm_guard.sz = sz1; - VM::uvmunmap(vm_guard.pagetable, sz1 - 2 * PGSIZE, 1, 0); // protected pagetable + VM::uvmunmap(vm_guard.pagetable, sz, 1, 0); // protected pagetable uint64 sp = sz1; - uint64 stackbase = sp - PGSIZE; + uint64 stackbase = sp - stack_data_pages * PGSIZE; uint64 ustack[32]; uint64 argc = 0; diff --git a/src/kernel/proc/proc.cc b/src/kernel/proc/proc.cc index f1f1c1d..5db5f7a 100644 --- a/src/kernel/proc/proc.cc +++ b/src/kernel/proc/proc.cc @@ -7,12 +7,13 @@ #include "kernel/mm.h" #include "kernel/trap.h" #include "kernel/riscv.h" +#include "kernel/slab.h" #include "drivers/uart.h" #include "fs/fs.h" #include "fs/file.h" #include "lib/string.h" -#define NPROC 64 +// #define NPROC 64 #define NCPU 8 extern "C" void swtch(struct Context *old_ctx, struct Context *new_ctx); @@ -21,7 +22,9 @@ extern "C" void usertrap(); extern "C" void userret(uint64, uint64); extern char initcode_start[], initcode_end[]; -struct Proc procs[NPROC]; +// struct Proc procs[NPROC]; +struct Proc *proc_list_head = nullptr; +struct Proc *initproc = nullptr; struct Spinlock proc_mem_lock; struct cpu cpus[NCPU]; struct RunQueue runqueues[NCPU]; @@ -161,15 +164,24 @@ static Proc *allocproc() { struct Proc *p; proc_mem_lock.acquire(); - for (p = procs; p < &procs[NPROC]; p++) + + p = (struct Proc *)Slab::kmalloc(sizeof(struct Proc)); + + if (!p) { - if (p->state == UNUSED) - goto found; + proc_mem_lock.release(); + return 0; } - proc_mem_lock.release(); - return 0; -found: + memset(p, 0, sizeof(struct Proc)); + + p->all_next = proc_list_head; + p->all_prev = nullptr; + if (proc_list_head) + proc_list_head->all_prev = p; + proc_list_head = p; + + p->state = USED; p->pid = nextpid++; p->priority = 0; @@ -181,13 +193,29 @@ found: if ((p->tf = (struct Trapframe *)PMM::alloc_page()) == 0) { p->state = UNUSED; + if (p->all_next) + p->all_next->all_prev = p->all_prev; + if (p->all_prev) + p->all_prev->all_next = p->all_next; + if (p == proc_list_head) + proc_list_head = p->all_next; + Slab::kfree(p); proc_mem_lock.release(); return 0; } + if ((p->kstack = PMM::alloc_page()) == 0) { PMM::free_page(p->tf); p->state = UNUSED; + if (p->all_next) + p->all_next->all_prev = p->all_prev; + if (p->all_prev) + p->all_prev->all_next = p->all_next; + if (p == proc_list_head) + proc_list_head = p->all_next; + Slab::kfree(p); + proc_mem_lock.release(); return 0; } @@ -224,13 +252,16 @@ static void freeproc(struct Proc *p) VFS::iput(p->cwd); p->cwd = nullptr; } - p->pagetable = 0; - p->sz = 0; - p->pid = 0; - p->parent = 0; - p->name[0] = 0; - p->chan = 0; - p->state = UNUSED; + + if (p->all_prev) + p->all_prev->all_next = p->all_next; + else + proc_list_head = p->all_next; + + if (p->all_next) + p->all_next->all_prev = p->all_prev; + + Slab::kfree(p); } int fork() @@ -242,13 +273,14 @@ int fork() return -1; np->pagetable = VM::uvmcreate(); + np->sz = p->sz; if (VM::uvmcopy(p->pagetable, np->pagetable, p->sz) < 0) { freeproc(np); proc_mem_lock.release(); return -1; } - np->sz = p->sz; + if (VM::mappages(np->pagetable, TRAPFRAME, PGSIZE, (uint64)np->tf, PTE_R | PTE_W) < 0) { @@ -293,8 +325,8 @@ namespace ProcManager void init() { proc_mem_lock.init("proc_mem"); - for (int i = 0; i < NPROC; i++) - procs[i].state = UNUSED; + + proc_list_head = nullptr; for (int i = 0; i < NCPU; i++) { @@ -373,6 +405,8 @@ namespace ProcManager if (!p) return; + initproc = p; + p->pagetable = VM::uvmcreate(); uint64 initcode_sz = initcode_end - initcode_start; @@ -460,7 +494,7 @@ namespace ProcManager void wakeup(void *chan) { - for (struct Proc *p = procs; p < &procs[NPROC]; p++) + for (struct Proc *p = proc_list_head; p != nullptr; p = p->all_next) { if (p->state == SLEEPING && p->chan == chan) { @@ -476,14 +510,15 @@ namespace ProcManager void exit(int status) { struct Proc *p = myproc(); - struct Proc *initproc = &procs[0]; if (p == initproc) while (1) ; wakeup(p->parent); - for (struct Proc *pp = procs; pp < &procs[NPROC]; pp++) + proc_mem_lock.acquire(); + + for (struct Proc *pp = proc_list_head; pp != nullptr; pp = pp->all_next) { if (pp->parent == p) { @@ -492,6 +527,8 @@ namespace ProcManager } } + proc_mem_lock.release(); + p->xstate = status; struct cpu *c = mycpu(); @@ -513,7 +550,7 @@ namespace ProcManager havekids = 0; proc_mem_lock.acquire(); - for (np = procs; np < &procs[NPROC]; np++) + for (np = proc_list_head; np != nullptr; np = np->all_next) { if (np->parent == p) { @@ -561,7 +598,7 @@ namespace ProcManager { // Call VM::uvmalloc to allocate memory // Parameters: page table, old size, new size, permissions (PTE_W) - if ((sz = VM::uvmalloc(p->pagetable, sz, sz + n, PTE_W)) == 0) + if ((sz = VM::uvmalloc(p->pagetable, sz, sz + n, PTE_W | PTE_R | PTE_U)) == 0) { return -1; } diff --git a/src/kernel/trap/handler.cc b/src/kernel/trap/handler.cc index 3e73213..3fb772e 100644 --- a/src/kernel/trap/handler.cc +++ b/src/kernel/trap/handler.cc @@ -157,15 +157,19 @@ extern "C" void usertrap() } else if (scause == 15) // Store Page Fault { - uint64 pte = VM::walkaddr(p->pagetable, stval); - - // Drivers::uart_puts("[Debug] Faulting PTE:"); - // Drivers::print_hex(pte); - // Drivers::uart_puts("\n"); - if (VM::handle_cow_fault(p->pagetable, PGROUNDDOWN(stval)) != 0) { - Drivers::uart_puts("usertrap: cow failed at "); + uint64 pa = VM::walkaddr(p->pagetable, stval); + + if (pa == 0) + { + Drivers::uart_puts("usertrap: Segmentation Fault (unmapped) at "); + } + else + { + Drivers::uart_puts("usertrap: Protection Fault (or OOM) at "); + } + Drivers::print_hex(stval); Drivers::uart_puts("\n"); p->state = ZOMBIE; diff --git a/src/ulib/stdlib.c b/src/ulib/stdlib.c index 30aa3a9..89d5a08 100644 --- a/src/ulib/stdlib.c +++ b/src/ulib/stdlib.c @@ -134,15 +134,12 @@ static header_t *morecore(size_t nu) void *malloc(size_t size) { header_t *p, *prevp; - size_t nunits = 0; if (size == 0) return NULL; size = ALIGN(size + sizeof(header_t)); - nunits = (nunits * sizeof(header_t) + ALIGNMENT - 1) / ALIGNMENT * ALIGNMENT / sizeof(header_t); - LOCK(); if ((prevp = freep) == NULL) @@ -161,9 +158,11 @@ void *malloc(size_t size) } else { - p->size -= (nunits * sizeof(header_t)); + p->size -= size; + p = (header_t *)((char *)p + p->size); - p->size = (nunits * sizeof(header_t)); + + p->size = size; } freep = prevp; UNLOCK(); @@ -172,7 +171,7 @@ void *malloc(size_t size) if (p == freep) { - if ((p = morecore(nunits * sizeof(header_t))) == NULL) + if ((p = morecore(size)) == NULL) { UNLOCK(); errno = ENOMEM; diff --git a/src/user/sh.cc b/src/user/sh.cc index 287d2be..1f2e950 100644 --- a/src/user/sh.cc +++ b/src/user/sh.cc @@ -383,12 +383,21 @@ int main() while (getcmd(buf, sizeof(buf)) >= 0) { - if (buf[0] == 'c' && buf[1] == 'd' && buf[2] == ' ') + if (buf[0] == 'c' && buf[1] == 'd' && (buf[2] == ' ' || buf[2] == '\n' || buf[2] == 0)) { - buf[strlen(buf) - 1] = 0; // chop \n - if (chdir(buf + 3) < 0) + if (buf[strlen(buf) - 1] == '\n') + buf[strlen(buf) - 1] = 0; + + char *path = buf + 3; + if (buf[2] == '\n' || buf[2] == 0) + { + printf("cd: argument missing\n"); + continue; + } + + if (chdir(path) < 0) { - printf("cannot cd %s\n", buf + 3); + printf("cannot cd %s\n", path); } continue; } -- cgit v1.2.3